diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 8f7d54d08..1024bb87a 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,14 +1,14 @@ -FROM chrislusf/seaweedfs:4.31 AS seaweedfs +FROM chrislusf/seaweedfs:4.47 AS seaweedfs -FROM erlang:28.5.0.1 +FROM erlang:28.5.0.6 ARG USERNAME=vscode ARG USER_UID=1000 ARG USER_GID=1000 -ARG NODE_MAJOR=24 -ARG ELP_VERSION=2026-02-27 -ARG PNPM_VERSION=10.29.3 -ARG WASM_BINDGEN_VERSION=0.2.123 +ARG NODE_MAJOR=26 +ARG ELP_VERSION=2026-08-10 +ARG PNPM_VERSION=12.4.2 +ARG WASM_BINDGEN_VERSION=0.2.128 ENV DEBIAN_FRONTEND=noninteractive @@ -131,7 +131,8 @@ RUN apt-get update \ RUN curl --retry 5 --retry-delay 2 --retry-all-errors -fsSL https://deb.nodesource.com/setup_${NODE_MAJOR}.x | bash - \ && apt-get install -y --no-install-recommends nodejs \ && rm -rf /var/lib/apt/lists/* \ - && corepack enable + && npm install -g "pnpm@${PNPM_VERSION}" \ + && pnpm --version RUN python3 -m pip install --break-system-packages --no-cache-dir awscli @@ -167,7 +168,7 @@ RUN ARCH="$(dpkg --print-architecture)" \ arm64) ELP_ARCH="aarch64" ;; \ *) echo "Unsupported architecture for ELP: $ARCH" >&2; exit 1 ;; \ esac \ - && curl --retry 5 --retry-delay 2 --retry-all-errors -fsSL "https://github.com/WhatsApp/erlang-language-platform/releases/download/${ELP_VERSION}/elp-linux-${ELP_ARCH}-unknown-linux-gnu-otp-28.tar.gz" -o /tmp/elp.tgz \ + && curl --retry 5 --retry-delay 2 --retry-all-errors -fsSL "https://github.com/WhatsApp/erlang-language-platform/releases/download/${ELP_VERSION}/elp-linux-${ELP_ARCH}-unknown-linux-gnu-otp-28.5.tar.gz" -o /tmp/elp.tgz \ && tar -C /usr/local/bin -xzf /tmp/elp.tgz elp \ && chmod +x /usr/local/bin/elp \ && rm /tmp/elp.tgz @@ -194,7 +195,4 @@ RUN curl --retry 5 --retry-delay 2 --retry-all-errors -fsSL https://sh.rustup.rs && cargo install wasm-bindgen-cli --version "${WASM_BINDGEN_VERSION}" --locked \ && rm -rf "/home/${USERNAME}/.cargo/registry" "/home/${USERNAME}/.cargo/git" -RUN corepack prepare "pnpm@${PNPM_VERSION}" --activate \ - && pnpm --version - WORKDIR /workspaces/fluxer diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 1f56de357..7d0295353 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -9,7 +9,7 @@ services: init: true environment: DOCKER_HOST: unix:///var/run/docker.sock - npm_config_store_dir: /home/vscode/.local/share/pnpm/store + pnpm_config_store_dir: /home/vscode/.local/share/pnpm/store FLUXER_PUBLIC_PORT: "${FLUXER_DEV_PROXY_PORT:-8088}" FLUXER_PUBLIC_URL: "http://localhost:${FLUXER_DEV_PROXY_PORT:-8088}" FLUXER_API_ENDPOINT: "http://localhost:${FLUXER_DEV_PROXY_PORT:-8088}/api" @@ -292,13 +292,13 @@ services: start_period: 5s valkey: - image: valkey/valkey:8.1.7-alpine + image: valkey/valkey:9.1.2-alpine command: ["valkey-server", "--save", "", "--appendonly", "no"] ports: - "127.0.0.1:${FLUXER_DEV_VALKEY_PORT:-6379}:6379" nats: - image: nats:2.14.2-alpine + image: nats:2.14.7-alpine command: ["-js", "-sd", "/data", "-m", "8222"] volumes: - nats-data:/data @@ -321,9 +321,10 @@ services: - "127.0.0.1:${FLUXER_DEV_LIVEKIT_UDP_PORT:-7882}:${FLUXER_DEV_LIVEKIT_UDP_PORT:-7882}/udp" meilisearch: - image: getmeili/meilisearch:v1.12 + image: getmeili/meilisearch:v1.53 environment: MEILI_NO_ANALYTICS: "true" + MEILI_UPGRADE_DB: "true" MEILI_MASTER_KEY: fluxer-dev-meilisearch volumes: - meilisearch-data:/meili_data @@ -337,7 +338,7 @@ services: start_period: 5s mailpit: - image: axllent/mailpit:v1.30 + image: axllent/mailpit:v1.31 environment: MP_DATABASE: /data/mailpit.db MP_MAX_MESSAGES: 5000 diff --git a/.github/workflows/_build-image.yaml b/.github/workflows/_build-image.yaml index 30083ca37..b2faad08e 100644 --- a/.github/workflows/_build-image.yaml +++ b/.github/workflows/_build-image.yaml @@ -58,13 +58,13 @@ jobs: outputs: build_version: ${{ steps.vars.outputs.build_version }} steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 env: GIT_CONFIG_GLOBAL: ${{ runner.temp }}/gitconfig - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" - name: Create token id: create-token uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 @@ -101,19 +101,19 @@ jobs: - platform: arm64 runner: ubuntu-24.04-arm steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 env: GIT_CONFIG_GLOBAL: ${{ runner.temp }}/gitconfig - name: resolve source date id: source run: echo "date=$(TZ=UTC git log -1 --no-show-signature --pretty=%cd --date=format-local:%Y-%m-%dT%H:%M:%SZ)" >> "$GITHUB_OUTPUT" - - uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 - - uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee + - uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 + - uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f with: registry: ghcr.io username: ${{ github.actor }} password: ${{ github.token }} - - uses: docker/build-push-action@f9f3042f7e2789586610d6e8b85c8f03e5195baf + - uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc with: context: ${{ inputs.context }} file: ${{ inputs.dockerfile }} @@ -141,15 +141,15 @@ jobs: contents: write packages: write steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 env: GIT_CONFIG_GLOBAL: ${{ runner.temp }}/gitconfig - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" - - uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 - - uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee + toolchain: "1.98.1" + - uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 + - uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f with: registry: ghcr.io username: ${{ github.actor }} diff --git a/.github/workflows/build-app-proxy-self-hosted.yaml b/.github/workflows/build-app-proxy-self-hosted.yaml index 9f63157d2..1646b45dd 100644 --- a/.github/workflows/build-app-proxy-self-hosted.yaml +++ b/.github/workflows/build-app-proxy-self-hosted.yaml @@ -43,13 +43,13 @@ jobs: outputs: build_version: ${{ steps.vars.outputs.build_version }} steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 env: GIT_CONFIG_GLOBAL: ${{ runner.temp }}/gitconfig - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" - name: set variables id: vars run: >- @@ -73,18 +73,18 @@ jobs: BUNDLE_LOCAL_ASSETS: "true" FLUXER_APP_PROXY_TIME_FREEZE_ENABLED: "false" steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 env: GIT_CONFIG_GLOBAL: ${{ runner.temp }}/gitconfig - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" - name: prepare docker config run: >- tools/ci/run.sh build-app-proxy --step prepare_docker_config - - uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 + - uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 - name: configure ghcr auth env: GHCR_USERNAME: ${{ github.actor }} @@ -131,19 +131,19 @@ jobs: - platform: arm64 runner: ubuntu-24.04-arm steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 env: GIT_CONFIG_GLOBAL: ${{ runner.temp }}/gitconfig - name: resolve source date id: source run: echo "date=$(TZ=UTC git log -1 --no-show-signature --pretty=%cd --date=format-local:%Y-%m-%dT%H:%M:%SZ)" >> "$GITHUB_OUTPUT" - - uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 - - uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee + - uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 + - uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: docker/build-push-action@f9f3042f7e2789586610d6e8b85c8f03e5195baf + - uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc with: context: . file: fluxer_app_proxy/Dockerfile @@ -173,15 +173,15 @@ jobs: contents: write packages: write steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 env: GIT_CONFIG_GLOBAL: ${{ runner.temp }}/gitconfig - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" - - uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 - - uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee + toolchain: "1.98.1" + - uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 + - uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f with: registry: ghcr.io username: ${{ github.actor }} diff --git a/.github/workflows/build-app-proxy.yaml b/.github/workflows/build-app-proxy.yaml index 09c68ef16..84c065f58 100644 --- a/.github/workflows/build-app-proxy.yaml +++ b/.github/workflows/build-app-proxy.yaml @@ -43,13 +43,13 @@ jobs: outputs: build_version: ${{ steps.vars.outputs.build_version }} steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 env: GIT_CONFIG_GLOBAL: ${{ runner.temp }}/gitconfig - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" - name: set variables id: vars run: >- @@ -67,18 +67,18 @@ jobs: contents: read packages: write steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 env: GIT_CONFIG_GLOBAL: ${{ runner.temp }}/gitconfig - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" - name: prepare docker config run: >- tools/ci/run.sh build-app-proxy --step prepare_docker_config - - uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 + - uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 - name: configure ghcr auth env: GHCR_USERNAME: ${{ github.actor }} @@ -131,13 +131,13 @@ jobs: contents: read packages: write steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 env: GIT_CONFIG_GLOBAL: ${{ runner.temp }}/gitconfig - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" - name: resolve source date id: source run: echo "date=$(TZ=UTC git log -1 --no-show-signature --pretty=%cd --date=format-local:%Y-%m-%dT%H:%M:%SZ)" >> "$GITHUB_OUTPUT" @@ -145,7 +145,7 @@ jobs: run: >- tools/ci/run.sh build-app-proxy --step prepare_docker_config - - uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 + - uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 - name: configure ghcr auth env: GHCR_USERNAME: ${{ github.actor }} @@ -178,19 +178,19 @@ jobs: contents: read packages: write steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 env: GIT_CONFIG_GLOBAL: ${{ runner.temp }}/gitconfig - name: resolve source date id: source run: echo "date=$(TZ=UTC git log -1 --no-show-signature --pretty=%cd --date=format-local:%Y-%m-%dT%H:%M:%SZ)" >> "$GITHUB_OUTPUT" - - uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 - - uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee + - uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 + - uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: docker/build-push-action@f9f3042f7e2789586610d6e8b85c8f03e5195baf + - uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc with: context: . file: fluxer_app_proxy/Dockerfile @@ -219,15 +219,15 @@ jobs: contents: write packages: write steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 env: GIT_CONFIG_GLOBAL: ${{ runner.temp }}/gitconfig - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" - - uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 - - uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee + toolchain: "1.98.1" + - uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 + - uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f with: registry: ghcr.io username: ${{ github.actor }} diff --git a/.github/workflows/build-desktop.yaml b/.github/workflows/build-desktop.yaml index 4d9e45fed..dff21ea8d 100644 --- a/.github/workflows/build-desktop.yaml +++ b/.github/workflows/build-desktop.yaml @@ -58,14 +58,14 @@ jobs: source_sha: ${{ steps.meta.outputs.source_sha }} steps: - name: Checkout source - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with: ref: main - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" - name: Create token id: create-token @@ -98,12 +98,12 @@ jobs: matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - name: Checkout source - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" - name: Build platform matrix id: set-matrix @@ -151,27 +151,27 @@ jobs: ELECTRON_ARCH: ${{ matrix.electron_arch }} steps: - name: Checkout CI helpers - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with: ref: ${{ needs.meta.outputs.source_sha }} path: _ci - name: Checkout source - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with: ref: ${{ needs.meta.outputs.source_sha }} path: source - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" - name: Set up Python (Windows) if: runner.os == 'Windows' - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 with: - python-version: "3.13" + python-version: "3.14" - name: Ensure python3 command (Windows) if: runner.os == 'Windows' @@ -196,14 +196,14 @@ jobs: --step set_workdir_unix - name: Set up Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 with: - node-version: 24 + node-version: 26 - - name: Set up pnpm via corepack + - name: Set up pnpm run: >- cargo run --locked --quiet --manifest-path ${{ github.workspace }}/_ci/tools/ci/Cargo.toml -- build-desktop - --step setup_pnpm_corepack + --step setup_pnpm - name: Resolve pnpm store path (Windows) if: runner.os == 'Windows' @@ -247,9 +247,9 @@ jobs: - name: Set up Rust toolchain (Unix) if: matrix.platform != 'windows' - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" targets: ${{ matrix.platform == 'macos' && 'aarch64-apple-darwin,x86_64-apple-darwin' || (matrix.arch == 'arm64' && 'aarch64-unknown-linux-gnu' || 'x86_64-unknown-linux-gnu') }} - name: Install MSVC ARM64 build tools @@ -260,7 +260,7 @@ jobs: - name: Set up MSVC env (Windows) if: matrix.platform == 'windows' - uses: TheMrMilchmann/setup-msvc-dev@79dac248aac9d0059f86eae9d8b5bfab4e95e97c + uses: TheMrMilchmann/setup-msvc-dev@368ef7d1ee4d1171b31d4a7f67f4d954f903f5a9 with: arch: ${{ matrix.arch == 'arm64' && 'amd64_arm64' || 'amd64' }} @@ -302,9 +302,9 @@ jobs: - name: Set up .NET SDK (Windows) if: matrix.platform == 'windows' - uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 with: - dotnet-version: "8.0.x" + dotnet-version: "10.0.x" - name: Install Velopack CLI if: matrix.platform == 'windows' @@ -363,7 +363,7 @@ jobs: - name: Azure login for Artifact Signing if: matrix.platform == 'windows' - uses: azure/login@532459ea530d8321f2fb9bb10d1e0bcf23869a43 + uses: azure/login@a641126d1b8aa4d1fa005f4f92df94a3a4c4c906 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} @@ -533,14 +533,14 @@ jobs: AWS_SECRET_ACCESS_KEY: ${{ secrets.DOWNLOADS_AWS_SECRET_ACCESS_KEY || secrets.AWS_SECRET_ACCESS_KEY }} steps: - name: Checkout source - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with: ref: ${{ needs.meta.outputs.source_sha }} - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" - name: Download S3 handoff artifacts run: >- @@ -612,14 +612,14 @@ jobs: AWS_SECRET_ACCESS_KEY: ${{ secrets.DOWNLOADS_AWS_SECRET_ACCESS_KEY || secrets.AWS_SECRET_ACCESS_KEY }} steps: - name: Checkout source - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with: ref: ${{ needs.meta.outputs.source_sha }} - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" - name: Download GitHub release assets run: >- diff --git a/.github/workflows/dart-sdk-validation.yaml b/.github/workflows/dart-sdk-validation.yaml index 32d8e79a5..64efb7422 100644 --- a/.github/workflows/dart-sdk-validation.yaml +++ b/.github/workflows/dart-sdk-validation.yaml @@ -19,22 +19,22 @@ jobs: timeout-minutes: 15 steps: - name: Checkout fluxer - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with: persist-credentials: false - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" - name: Install pnpm - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 + uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 - name: Install Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 with: - node-version: '24' + node-version: '26' cache: 'pnpm' - name: Install dependencies diff --git a/.github/workflows/i18n-source-sync.yaml b/.github/workflows/i18n-source-sync.yaml index 7a012f555..40cf2f500 100644 --- a/.github/workflows/i18n-source-sync.yaml +++ b/.github/workflows/i18n-source-sync.yaml @@ -35,24 +35,24 @@ jobs: permission-pull-requests: write - name: Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with: token: ${{ steps.create-token.outputs.token }} fetch-depth: 0 persist-credentials: false - name: Set up Rust toolchain - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" - name: Install pnpm - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 + uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 - name: Install Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 with: - node-version: "24" + node-version: "26" cache: "pnpm" - name: Install dependencies diff --git a/.github/workflows/i18n-weblate-pr.yaml b/.github/workflows/i18n-weblate-pr.yaml index 73e0d1619..5273818b9 100644 --- a/.github/workflows/i18n-weblate-pr.yaml +++ b/.github/workflows/i18n-weblate-pr.yaml @@ -40,7 +40,7 @@ jobs: permission-pull-requests: write - name: Checkout Weblate branch - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with: token: ${{ steps.create-token.outputs.token }} ref: ${{ env.WEBLATE_BRANCH }} @@ -48,17 +48,17 @@ jobs: persist-credentials: false - name: Set up Rust toolchain - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" - name: Install pnpm - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 + uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 - name: Install Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 with: - node-version: "24" + node-version: "26" cache: "pnpm" - name: Install dependencies diff --git a/.github/workflows/labeller.yaml b/.github/workflows/labeller.yaml index a1422bc98..1dbf408b0 100644 --- a/.github/workflows/labeller.yaml +++ b/.github/workflows/labeller.yaml @@ -19,7 +19,7 @@ jobs: permission-pull-requests: write - name: Label pull request - uses: actions/labeler@f27b608878404679385c85cfa523b85ccb86e213 + uses: actions/labeler@bf12e9b00b37c5c0ca2b87b79b2daf7891dbda13 with: repo-token: ${{ steps.create-token.outputs.token }} configuration-path: .github/labeller.yaml diff --git a/.github/workflows/release-image-set.yaml b/.github/workflows/release-image-set.yaml index 83b11cd82..41b255b38 100644 --- a/.github/workflows/release-image-set.yaml +++ b/.github/workflows/release-image-set.yaml @@ -56,15 +56,15 @@ jobs: contents: write packages: read steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 env: GIT_CONFIG_GLOBAL: ${{ runner.temp }}/gitconfig - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" - - uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 - - uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee + toolchain: "1.98.1" + - uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 + - uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f with: registry: ghcr.io username: ${{ github.actor }} diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index a50cf423c..47357c0af 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -28,12 +28,12 @@ jobs: FLUXER_CI_BIN: ${{ github.workspace }}/target/debug/fluxer-ci steps: - name: Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" targets: wasm32-unknown-unknown - name: Restore ci helper @@ -42,7 +42,7 @@ jobs: with: path: target/debug/fluxer-ci key: >- - fluxer-ci-bin-${{ runner.os }}-1.93.0-${{ hashFiles('Cargo.lock', 'Cargo.toml', + fluxer-ci-bin-${{ runner.os }}-1.98.1-${{ hashFiles('Cargo.lock', 'Cargo.toml', 'tools/ci/Cargo.toml', 'tools/ci/src/**', 'tools/ci/templates/**') }} - name: Build ci helper @@ -55,16 +55,16 @@ jobs: with: path: target/debug/fluxer-ci key: >- - fluxer-ci-bin-${{ runner.os }}-1.93.0-${{ hashFiles('Cargo.lock', 'Cargo.toml', + fluxer-ci-bin-${{ runner.os }}-1.98.1-${{ hashFiles('Cargo.lock', 'Cargo.toml', 'tools/ci/Cargo.toml', 'tools/ci/src/**', 'tools/ci/templates/**') }} - name: Install pnpm - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 + uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 - name: Install Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 with: - node-version: '24' + node-version: '26' cache: 'pnpm' - name: Install dependencies @@ -83,12 +83,12 @@ jobs: PNPM_TEST_WORKSPACE_CONCURRENCY: '2' steps: - name: Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" targets: wasm32-unknown-unknown - name: Restore ci helper @@ -97,7 +97,7 @@ jobs: with: path: target/debug/fluxer-ci key: >- - fluxer-ci-bin-${{ runner.os }}-1.93.0-${{ hashFiles('Cargo.lock', 'Cargo.toml', + fluxer-ci-bin-${{ runner.os }}-1.98.1-${{ hashFiles('Cargo.lock', 'Cargo.toml', 'tools/ci/Cargo.toml', 'tools/ci/src/**', 'tools/ci/templates/**') }} - name: Build ci helper @@ -105,12 +105,12 @@ jobs: run: cargo build --locked --package fluxer-ci - name: Install pnpm - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 + uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 - name: Install Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 with: - node-version: '24' + node-version: '26' cache: 'pnpm' - name: Install dependencies @@ -125,7 +125,7 @@ jobs: fluxer_app/pkgs/libfluxcore fluxer_app/src/features/messaging/utils/markdown/parser/MarkdownParserWasmBytes.ts key: >- - app-wasm-${{ runner.os }}-1.93.0-${{ hashFiles('Cargo.lock', 'tools/ci/src/app_wasm.rs', + app-wasm-${{ runner.os }}-1.98.1-${{ hashFiles('Cargo.lock', 'tools/ci/src/app_wasm.rs', 'tools/ci/templates/libfluxcore_wrapper.js', 'tools/ci/templates/libfluxcore_wrapper.d.ts', 'fluxer_app/rust/libfluxcore/Cargo.toml', 'fluxer_app/rust/libfluxcore/Cargo.lock', 'fluxer_app/rust/libfluxcore/.cargo/config.toml', 'fluxer_app/rust/libfluxcore/src/**', @@ -144,7 +144,7 @@ jobs: fluxer_app/pkgs/libfluxcore fluxer_app/src/features/messaging/utils/markdown/parser/MarkdownParserWasmBytes.ts key: >- - app-wasm-${{ runner.os }}-1.93.0-${{ hashFiles('Cargo.lock', 'tools/ci/src/app_wasm.rs', + app-wasm-${{ runner.os }}-1.98.1-${{ hashFiles('Cargo.lock', 'tools/ci/src/app_wasm.rs', 'tools/ci/templates/libfluxcore_wrapper.js', 'tools/ci/templates/libfluxcore_wrapper.d.ts', 'fluxer_app/rust/libfluxcore/Cargo.toml', 'fluxer_app/rust/libfluxcore/Cargo.lock', 'fluxer_app/rust/libfluxcore/.cargo/config.toml', 'fluxer_app/rust/libfluxcore/src/**', @@ -156,21 +156,21 @@ jobs: timeout-minutes: 45 steps: - name: Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" components: clippy, rustfmt - name: Install pnpm - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 + uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 - name: Install Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 with: - node-version: '24' + node-version: '26' cache: 'pnpm' - name: Cache cargo @@ -185,7 +185,7 @@ jobs: rust-${{ runner.os }}-${{ hashFiles('fluxer_media_proxy/tools/install-native-deps.sh') }}- - name: Install cargo-deny - run: cargo install cargo-deny --version 0.19.6 --locked + run: cargo install cargo-deny --version 0.20.2 --locked - name: Check Rust dependencies run: cargo deny --locked check -D warnings @@ -273,12 +273,12 @@ jobs: FLUXER_CI_BIN: ${{ github.workspace }}/target/debug/fluxer-ci steps: - name: Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" - name: Cache cargo (gateway NIFs) uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 @@ -294,7 +294,7 @@ jobs: with: path: target/debug/fluxer-ci key: >- - fluxer-ci-bin-${{ runner.os }}-1.93.0-${{ hashFiles('Cargo.lock', 'Cargo.toml', + fluxer-ci-bin-${{ runner.os }}-1.98.1-${{ hashFiles('Cargo.lock', 'Cargo.toml', 'tools/ci/Cargo.toml', 'tools/ci/src/**', 'tools/ci/templates/**') }} - name: Build ci helper @@ -305,7 +305,7 @@ jobs: uses: erlef/setup-beam@54075bcc5e249e4758d363f27d099f55d843f124 with: otp-version: '28' - rebar3-version: '3.24.0' + rebar3-version: '3.27.0' - name: Restore rebar3 dependencies id: rebar3-cache @@ -317,10 +317,10 @@ jobs: !fluxer_gateway/_build/default/lib/fluxer_gateway/** !fluxer_gateway/_build/test/lib/fluxer_gateway/** key: >- - rebar3-${{ runner.os }}-otp28-rebar3.24.0-${{ hashFiles('fluxer_gateway/rebar.lock', + rebar3-${{ runner.os }}-otp28-rebar3.27.0-${{ hashFiles('fluxer_gateway/rebar.lock', 'fluxer_gateway/rebar.config') }} restore-keys: | - rebar3-${{ runner.os }}-otp28-rebar3.24.0- + rebar3-${{ runner.os }}-otp28-rebar3.27.0- - name: Check formatting run: | @@ -348,7 +348,7 @@ jobs: !fluxer_gateway/_build/default/lib/fluxer_gateway/** !fluxer_gateway/_build/test/lib/fluxer_gateway/** key: >- - rebar3-${{ runner.os }}-otp28-rebar3.24.0-${{ hashFiles('fluxer_gateway/rebar.lock', + rebar3-${{ runner.os }}-otp28-rebar3.27.0-${{ hashFiles('fluxer_gateway/rebar.lock', 'fluxer_gateway/rebar.config') }} knip: @@ -358,12 +358,12 @@ jobs: FLUXER_CI_BIN: ${{ github.workspace }}/target/debug/fluxer-ci steps: - name: Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - name: Set up Rust toolchain (CI helpers) - uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 + uses: dtolnay/rust-toolchain@02cb101ec7c40f2c49e1d9714d64511d8e1b74de with: - toolchain: "1.93.0" + toolchain: "1.98.1" targets: wasm32-unknown-unknown - name: Restore ci helper @@ -372,7 +372,7 @@ jobs: with: path: target/debug/fluxer-ci key: >- - fluxer-ci-bin-${{ runner.os }}-1.93.0-${{ hashFiles('Cargo.lock', 'Cargo.toml', + fluxer-ci-bin-${{ runner.os }}-1.98.1-${{ hashFiles('Cargo.lock', 'Cargo.toml', 'tools/ci/Cargo.toml', 'tools/ci/src/**', 'tools/ci/templates/**') }} - name: Build ci helper @@ -380,12 +380,12 @@ jobs: run: cargo build --locked --package fluxer-ci - name: Install pnpm - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 + uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 - name: Install Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 with: - node-version: '24' + node-version: '26' cache: 'pnpm' - name: Install dependencies @@ -400,7 +400,7 @@ jobs: fluxer_app/pkgs/libfluxcore fluxer_app/src/features/messaging/utils/markdown/parser/MarkdownParserWasmBytes.ts key: >- - app-wasm-${{ runner.os }}-1.93.0-${{ hashFiles('Cargo.lock', 'tools/ci/src/app_wasm.rs', + app-wasm-${{ runner.os }}-1.98.1-${{ hashFiles('Cargo.lock', 'tools/ci/src/app_wasm.rs', 'tools/ci/templates/libfluxcore_wrapper.js', 'tools/ci/templates/libfluxcore_wrapper.d.ts', 'fluxer_app/rust/libfluxcore/Cargo.toml', 'fluxer_app/rust/libfluxcore/Cargo.lock', 'fluxer_app/rust/libfluxcore/.cargo/config.toml', 'fluxer_app/rust/libfluxcore/src/**', @@ -419,7 +419,7 @@ jobs: fluxer_app/pkgs/libfluxcore fluxer_app/src/features/messaging/utils/markdown/parser/MarkdownParserWasmBytes.ts key: >- - app-wasm-${{ runner.os }}-1.93.0-${{ hashFiles('Cargo.lock', 'tools/ci/src/app_wasm.rs', + app-wasm-${{ runner.os }}-1.98.1-${{ hashFiles('Cargo.lock', 'tools/ci/src/app_wasm.rs', 'tools/ci/templates/libfluxcore_wrapper.js', 'tools/ci/templates/libfluxcore_wrapper.d.ts', 'fluxer_app/rust/libfluxcore/Cargo.toml', 'fluxer_app/rust/libfluxcore/Cargo.lock', 'fluxer_app/rust/libfluxcore/.cargo/config.toml', 'fluxer_app/rust/libfluxcore/src/**', @@ -431,15 +431,15 @@ jobs: timeout-minutes: 15 steps: - name: Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - name: Install pnpm - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 + uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 - name: Install Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 with: - node-version: '24' + node-version: '26' cache: 'pnpm' - name: Install dependencies @@ -456,15 +456,15 @@ jobs: timeout-minutes: 25 steps: - name: Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - name: Install pnpm - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 + uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 - name: Install Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 with: - node-version: '24' + node-version: '26' cache: 'pnpm' - name: Install dependencies @@ -490,15 +490,15 @@ jobs: timeout-minutes: 15 steps: - name: Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - name: Install pnpm - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 + uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 - name: Install Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 with: - node-version: '24' + node-version: '26' cache: 'pnpm' - name: Install dependencies @@ -515,12 +515,12 @@ jobs: timeout-minutes: 10 steps: - name: Checkout code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - name: Set up Python - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 with: - python-version: "3.13" + python-version: "3.14" - name: Install font tooling run: python3 -m pip install -r tools/fonts/requirements.txt diff --git a/Cargo.lock b/Cargo.lock index 3f47dfac2..a4716d8d2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,9 +10,9 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -25,9 +25,9 @@ checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" [[package]] name = "alloc-stdlib" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +checksum = "0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195" dependencies = [ "alloc-no-stdlib", ] @@ -49,21 +49,21 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "ammonia" -version = "4.1.4" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6d763210e2eb7670d1a5183a08bebefa3f97db2a738a684f2ce00bd49f681d" +checksum = "3f7ed3ac4252be4d3e36fb589ed5659356842587b21a31596a9dc89d3b2f5e2a" dependencies = [ - "cssparser", - "html5ever", + "cssparser 0.38.0", + "html5ever 0.40.1", "maplit", "url", ] [[package]] name = "android_system_properties" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" dependencies = [ "libc", ] @@ -132,18 +132,18 @@ checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arc-swap" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207" +checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" dependencies = [ "rustversion", ] [[package]] name = "async-compression" -version = "0.4.42" +version = "0.4.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79b3f8a79cccc2898f31920fc69f304859b3bd567490f75ebf51ae1c792a9ac" +checksum = "fb61aea1a7def73ee7c350a184f0e70b32c182344e2e75bf70c9b621b83417fd" dependencies = [ "compression-codecs", "compression-core", @@ -164,11 +164,11 @@ dependencies = [ [[package]] name = "async-nats" -version = "0.49.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad3cd6df81292728e2a8cb1f1dcb4d7e7a1ab59b80c14fbbcba2baf9d5cf86a" +checksum = "d83a251fa1a4c9d0fe6e816b7acd60549e473e08d14f27a1d992c2675abff05f" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "futures-util", "memchr", @@ -176,7 +176,7 @@ dependencies = [ "nuid", "pin-project", "portable-atomic", - "rand 0.10.1", + "rand 0.10.2", "regex", "ring", "rustls-native-certs", @@ -200,13 +200,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -217,15 +217,15 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-config" -version = "1.8.18" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33f815b73a3899c03b380d543532e5865f230dce9678d108dc10732a8682275" +checksum = "b8d7b388a9fc3a6db15a5ec778c38b354eff1364882c94d08e0252f7a47dcaa4" dependencies = [ "aws-credential-types", "aws-runtime", @@ -243,8 +243,8 @@ dependencies = [ "bytes", "fastrand", "hex", - "http 1.4.2", - "sha1 0.10.6", + "http 1.5.0", + "sha1 0.10.7", "time", "tokio", "tracing", @@ -254,9 +254,9 @@ dependencies = [ [[package]] name = "aws-credential-types" -version = "1.2.14" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f20799b373a1be121fe3005fba0c2090af9411573878f224df44b42727fcaf7" +checksum = "e93964ffdaf57857f544be3666a5f57570bb699e934700f11b49708f61bb556e" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -289,9 +289,9 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.7.4" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ed8e8c52d2dc2390ad9f15647fe663f71e9780b4262c190fbb823a32721566" +checksum = "25b43ad47adc2517efe3d706559d94b97e50e80e0321b3cadbc9f77cee88adcd" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -306,9 +306,9 @@ dependencies = [ "bytes-utils", "fastrand", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "http-body 0.4.6", - "http-body 1.0.1", + "http-body 1.1.0", "percent-encoding", "pin-project-lite", "tracing", @@ -317,9 +317,9 @@ dependencies = [ [[package]] name = "aws-sdk-s3" -version = "1.135.0" +version = "1.148.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f97e3e7e7d86fd26fcdc18bc382da5ca9e8b2ff8d54030d187fd0dac8a236d96" +checksum = "8a61c1db3987ab6c8740fb87f248864687d50549401115244a84f02c3047b2d5" dependencies = [ "arc-swap", "aws-credential-types", @@ -333,6 +333,7 @@ dependencies = [ "aws-smithy-observability", "aws-smithy-runtime", "aws-smithy-runtime-api", + "aws-smithy-schema", "aws-smithy-types", "aws-smithy-xml", "aws-types", @@ -341,8 +342,8 @@ dependencies = [ "hex", "hmac 0.13.0", "http 0.2.12", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "lru", "percent-encoding", "regex-lite", @@ -353,9 +354,9 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.101.0" +version = "1.111.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b647baea49ff551960b904f905681e9b4765a6c4ea08631e89dc52d8bd3f5896" +checksum = "65700d75f6da78c89a61a49f1539979400a4609d3329376b1dc2133d7a1b2b90" dependencies = [ "arc-swap", "aws-credential-types", @@ -366,21 +367,22 @@ dependencies = [ "aws-smithy-observability", "aws-smithy-runtime", "aws-smithy-runtime-api", + "aws-smithy-schema", "aws-smithy-types", "aws-types", "bytes", "fastrand", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "regex-lite", "tracing", ] [[package]] name = "aws-sdk-ssooidc" -version = "1.103.0" +version = "1.113.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ae401c65ff288aa7873117fe535cd32b7b1bb0bc43751d28901a1d5f20636b9" +checksum = "eb1147c254af7b6cee3ace90ae7da6f21366ce9a9b899035fa8a0fdf586eb75a" dependencies = [ "arc-swap", "aws-credential-types", @@ -391,21 +393,22 @@ dependencies = [ "aws-smithy-observability", "aws-smithy-runtime", "aws-smithy-runtime-api", + "aws-smithy-schema", "aws-smithy-types", "aws-types", "bytes", "fastrand", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "regex-lite", "tracing", ] [[package]] name = "aws-sdk-sts" -version = "1.106.0" +version = "1.116.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c80de7bb7d03e9ca8c9fd7b489f20f3948d3f3be91a7953591347d238115408" +checksum = "035c7392e751d20bf1060d625d023587eb14099646110a9cff7c697bfe4b253a" dependencies = [ "arc-swap", "aws-credential-types", @@ -417,21 +420,22 @@ dependencies = [ "aws-smithy-query", "aws-smithy-runtime", "aws-smithy-runtime-api", + "aws-smithy-schema", "aws-smithy-types", "aws-smithy-xml", "aws-types", "fastrand", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "regex-lite", "tracing", ] [[package]] name = "aws-sigv4" -version = "1.4.5" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae38512beae0ffee7010fc24e7a8a123c53efdfef42a61e80fda4882418dc71" +checksum = "31d955e76ff96acd555bf06fa0fa6d5bf9335fa84ae7c64481b20ae61d231f70" dependencies = [ "aws-credential-types", "aws-smithy-eventstream", @@ -444,7 +448,7 @@ dependencies = [ "hex", "hmac 0.13.0", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "p256", "percent-encoding", "sha2 0.11.0", @@ -456,9 +460,9 @@ dependencies = [ [[package]] name = "aws-smithy-async" -version = "1.2.14" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffcaf626bdda484571968400c326a244598634dc75fd451325a54ad1a59acfc" +checksum = "f02e407fb3b54891734224b9ffac8a71fdd35f542500fa1af95754a6b2beb316" dependencies = [ "futures-util", "pin-project-lite", @@ -467,17 +471,17 @@ dependencies = [ [[package]] name = "aws-smithy-checksums" -version = "0.64.8" +version = "0.65.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9e8e65f4f81fcccdeb6c3eca2af17ac21d421a1786a26a394aecf421d616d3a" +checksum = "b67ecd999972b58e67cab052f5129906c08c25883bd0788ceefc55ef97d61307" dependencies = [ "aws-smithy-http", "aws-smithy-types", "bytes", "crc-fast", "hex", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "http-body-util", "md-5", "pin-project-lite", @@ -488,9 +492,9 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.20" +version = "0.61.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf09d74e5e32f76b8762da505a3cd59303e367a664ca67295387baa8c1d7548" +checksum = "80c2051c2f1016fb8e6548dd07b8bc2ac9c3fe583721444b92f515e856d31609" dependencies = [ "aws-smithy-types", "bytes", @@ -499,9 +503,9 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.63.6" +version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1ab2dc1c2c3749ead27180d333c42f11be8b0e934058fb4b2258ee8dbe5231" +checksum = "37843d9add67c3aff5856f409c6dc315d3cdff60f9c0cb5b670dab1e9920306d" dependencies = [ "aws-smithy-eventstream", "aws-smithy-runtime-api", @@ -510,8 +514,8 @@ dependencies = [ "bytes-utils", "futures-core", "futures-util", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "http-body-util", "percent-encoding", "pin-project-lite", @@ -521,15 +525,15 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.1.13" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c3ef8931ad1c98aa6a55b4256f847f3116090819844e0dd41ea682cac5dd2d3" +checksum = "7bd25384a4e437aa8d8f339afad4b69e786b936a7cb10db668a7aaf66717b1a8" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", "aws-smithy-types", "h2", - "http 1.4.2", + "http 1.5.0", "hyper", "hyper-rustls", "hyper-util", @@ -545,9 +549,9 @@ dependencies = [ [[package]] name = "aws-smithy-json" -version = "0.62.7" +version = "0.63.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "701a947f4797e52a911e114a898667c746c39feea467bbd1abd7b3721f702ffa" +checksum = "3385d469edbe8b60cc72002784652b5efca39178192aa9cc4b44c9875c6bdc18" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-schema", @@ -556,28 +560,31 @@ dependencies = [ [[package]] name = "aws-smithy-observability" -version = "0.2.6" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06c2315d173edbf1920da8ba3a7189695827002e4c0fc961973ab1c54abca9c" +checksum = "8e86338c869539a581bf161247762a6e87f92c5c075060057b5ed6d06632ed0c" dependencies = [ "aws-smithy-runtime-api", ] [[package]] name = "aws-smithy-query" -version = "0.60.15" +version = "0.62.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a56d79744fb3edb5d722ef79d86081e121d3b9422cb209eb03aea6aa4f21ebd" +checksum = "f1d1d71f6562be974caa85442ecd90194c40fdb5df045f182a6c2e872ce95056" dependencies = [ + "aws-smithy-runtime-api", + "aws-smithy-schema", "aws-smithy-types", + "aws-smithy-xml", "urlencoding", ] [[package]] name = "aws-smithy-runtime" -version = "1.11.3" +version = "1.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e6f5caf6fea86f8c2206541ab5857cfcda9013426cdbe8fa0098b9e2d32182" +checksum = "3296253d3a91b3f938a3f2bcce4daebadcb4aa4228153fcec90f9d23532b4484" dependencies = [ "aws-smithy-async", "aws-smithy-http", @@ -589,9 +596,9 @@ dependencies = [ "bytes", "fastrand", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "http-body 0.4.6", - "http-body 1.0.1", + "http-body 1.1.0", "http-body-util", "pin-project-lite", "pin-utils", @@ -601,16 +608,16 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api" -version = "1.12.3" +version = "1.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9db177daa6ba8afb9ee1aefcf548c907abcf52065e394ee11a92780057fe0e8c" +checksum = "6d881a7b7ad179fd6611680c9de89f716fb00ab40299a9a7b8c6913e8f7511a8" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api-macros", "aws-smithy-types", "bytes", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "pin-project-lite", "tokio", "tracing", @@ -619,40 +626,40 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api-macros" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d7396fd9500589e62e460e987ecb671bad374934e55ec3b5f498cc7a8a8a7b7" +checksum = "221eaa237ddf1ca79b60d1372aad77e47f9c0ea5b3ce5099da8c61d027dc77b3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "aws-smithy-schema" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7442cb268338f0eb8278140a107c046756aa01093d8ef5e99628d34ae09c94f5" +checksum = "e8f395d93304280b64b7632fea798d177e74897fe7f063416ce627cd6fa24829" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", - "http 1.4.2", + "http 1.5.0", ] [[package]] name = "aws-smithy-types" -version = "1.4.9" +version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53f93074121a1be41317b9aa607143ae17900631f7f59a99f2b905d519d6783b" +checksum = "0b791f3ac597193fe1d08b82366986eb1f5bc31f2ac6c194c0855276116c76cd" dependencies = [ "base64-simd", "bytes", "bytes-utils", "futures-core", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "http-body 0.4.6", - "http-body 1.0.1", + "http-body 1.1.0", "http-body-util", "itoa", "num-integer", @@ -667,18 +674,21 @@ dependencies = [ [[package]] name = "aws-smithy-xml" -version = "0.60.15" +version = "0.62.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce02add1aa3677d022f8adf81dcbe3046a95f17a1b1e8979c145cd21d3d22b3" +checksum = "0b932c8d6dc127fc980eecd78f8694ae9b9551b69a93a7def2a199c1c0033daf" dependencies = [ + "aws-smithy-runtime-api", + "aws-smithy-schema", + "aws-smithy-types", "xmlparser", ] [[package]] name = "aws-types" -version = "1.3.16" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16bf10b03a3c01e6b3b7d47cd964e873ffe9e7d4e80fad16bd4c077cb068531" +checksum = "209f3a6d82a6e9e5f94abbed94c7a26e1c052341002bf57a5fb5481f625896fc" dependencies = [ "aws-credential-types", "aws-smithy-async", @@ -700,8 +710,8 @@ dependencies = [ "bytes", "form_urlencoded", "futures-util", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "http-body-util", "hyper", "hyper-util", @@ -731,8 +741,8 @@ checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ "bytes", "futures-core", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "http-body-util", "mime", "pin-project-lite", @@ -750,7 +760,7 @@ checksum = "7aa268c23bfbbd2c4363b9cd302a4f504fb2a9dfe7e3451d66f35dd392e20aca" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -765,6 +775,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + [[package]] name = "base64-simd" version = "0.8.0" @@ -798,9 +814,9 @@ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block-buffer" @@ -813,18 +829,18 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", ] [[package]] name = "brotli" -version = "8.0.2" +version = "8.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" +checksum = "5cc91aac060a7a1e25823bdccbfb6af1875b88f17c6daac97894eed8207166b3" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -833,9 +849,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "5.0.0" +version = "5.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +checksum = "3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -843,15 +859,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytemuck" -version = "1.25.0" +version = "1.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" [[package]] name = "byteorder" @@ -867,9 +883,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" dependencies = [ "serde", ] @@ -892,9 +908,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.63" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", "jobserver", @@ -904,26 +920,26 @@ dependencies = [ [[package]] name = "cfb" -version = "0.7.3" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +checksum = "a347dcabdae9c31b0825fd6a8bed285ec9c2acb89c47827126d52fa4f59cece3" dependencies = [ - "byteorder", "fnv", "uuid", + "web-time", ] [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] name = "chacha20" @@ -932,7 +948,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" dependencies = [ "cfg-if", - "cpufeatures 0.3.0", + "cpufeatures 0.3.1", "rand_core 0.10.1", ] @@ -979,9 +995,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", "clap_derive", @@ -989,9 +1005,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstream", "anstyle", @@ -1001,21 +1017,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.1" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" +checksum = "f9c751b79415d4e559e3d1fcf128e09e720eb673a06d26cf6f392d37d75b66e0" dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "cmake" @@ -1028,9 +1044,9 @@ dependencies = [ [[package]] name = "cmov" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" [[package]] name = "color_quant" @@ -1046,9 +1062,9 @@ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "combine" -version = "4.6.7" +version = "4.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" dependencies = [ "bytes", "memchr", @@ -1056,9 +1072,9 @@ dependencies = [ [[package]] name = "compression-codecs" -version = "0.4.38" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce2548391e9c1929c21bf6aa2680af86fe4c1b33e6cea9ac1cfeec0bd11218cf" +checksum = "bef16c47ba2797aa6a909cc37d39911f3a6743811fe7408ac0b0cc0276b656e9" dependencies = [ "brotli", "compression-core", @@ -1068,18 +1084,9 @@ dependencies = [ [[package]] name = "compression-core" -version = "0.4.32" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc14f565cf027a105f7a44ccf9e5b424348421a1d8952a8fc9d499d313107789" - -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] +checksum = "6e8ccc4ea9f6acc32d102c0f6d471d11d913ad15f20c04de743374861fa1d414" [[package]] name = "const-oid" @@ -1095,9 +1102,9 @@ checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] name = "cookie" -version = "0.18.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +checksum = "1a373e3602691c3cdea496d2f0ee5935151e6168fe87739483c463db1b2f2f87" dependencies = [ "time", "version_check", @@ -1119,6 +1126,12 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "core_detect" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f8f80099a98041a3d1622845c271458a2d73e688351bf3cb999266764b81d48" + [[package]] name = "cpufeatures" version = "0.2.17" @@ -1130,9 +1143,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" dependencies = [ "libc", ] @@ -1149,9 +1162,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.5.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78" dependencies = [ "cfg-if", ] @@ -1193,18 +1206,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.15" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +checksum = "98b0cc327b5bc766e7fda9c9260cc0fa81b43a8e240440422dff70788e3f9ef1" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "622f3fc73690be383c7214310406f28a90e6edeadc3cea882f9d71e495b9711a" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -1212,18 +1225,18 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.20" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" +checksum = "dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "crunchy" @@ -1245,9 +1258,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.7" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "typenum", @@ -1271,18 +1284,29 @@ dependencies = [ "cssparser-macros", "dtoa-short", "itoa", - "phf", + "phf 0.13.1", + "smallvec", +] + +[[package]] +name = "cssparser" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11119743ad110e8c1bdccd930d7f5c30c99e5fc76a7b63ec9807e84eef0c5f59" +dependencies = [ + "dtoa-short", + "itoa", "smallvec", ] [[package]] name = "cssparser-macros" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a2a99df6e410a8ff4245aa2006499ea662245f967cc7c0a38c83ef8eb44dbf" +checksum = "d045de693cb712d0b22c6a64be5b953f67b3ce00ab5ad3dd5d8b441886ab8e1a" dependencies = [ "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -1317,14 +1341,14 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "darling" -version = "0.20.11" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +checksum = "ed17f5901b6630b993ca003def43f2f8ef4014fc13b047b57aad617ff32bc2ec" dependencies = [ "darling_core", "darling_macro", @@ -1332,34 +1356,33 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.11" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +checksum = "6837e2cf7485aaae18f86181d2f0e9a7ed297a025e220aeabf63fdebd3a2ddff" dependencies = [ - "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn", + "syn 3.0.6", ] [[package]] name = "darling_macro" -version = "0.20.11" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +checksum = "2ac7135c3ef02b2f7833bbeb1be5ba7f966dcde8a87c6b87f65a778d71a02785" dependencies = [ "darling_core", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "dashmap" -version = "6.1.0" +version = "6.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -1371,31 +1394,29 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" +checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06" [[package]] name = "deadpool" -version = "0.12.3" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" +checksum = "3e98a7e119cd347f4201e1159b19831029e203e2d8b790547708e8157b4acf1e" dependencies = [ "deadpool-runtime", - "lazy_static", - "num_cpus", "tokio", ] [[package]] name = "deadpool-postgres" -version = "0.14.1" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d697d376cbfa018c23eb4caab1fd1883dd9c906a8c034e8d9a3cb06a7e0bef9" +checksum = "65a536565624b97fc19f758cd01b15d12908d3344425066efc8162236fbd3749" dependencies = [ "async-trait", "deadpool", - "getrandom 0.2.17", + "getrandom 0.4.3", "tokio", "tokio-postgres", "tracing", @@ -1403,9 +1424,9 @@ dependencies = [ [[package]] name = "deadpool-runtime" -version = "0.1.4" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" +checksum = "2657f61fb1dd8bf37a8d51093cc7cee4e77125b22f7753f49b289f831bec2bae" dependencies = [ "tokio", ] @@ -1431,7 +1452,7 @@ checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1440,7 +1461,6 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ - "powerfmt", "serde_core", ] @@ -1462,7 +1482,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn", + "syn 2.0.119", ] [[package]] @@ -1473,7 +1493,7 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", "const-oid 0.9.6", - "crypto-common 0.1.7", + "crypto-common 0.1.6", "subtle", ] @@ -1483,7 +1503,7 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ - "block-buffer 0.12.0", + "block-buffer 0.12.1", "const-oid 0.10.2", "crypto-common 0.2.2", "ctutils", @@ -1491,13 +1511,13 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -1571,9 +1591,9 @@ checksum = "b04dc5a38e4f151a79d9f2451ae6037fb6eaf5cba34771f44781f80e508498e3" [[package]] name = "either" -version = "1.15.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "elliptic-curve" @@ -1597,11 +1617,17 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.35" +version = "0.8.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +checksum = "7b5ef0006ac9ab233c38522f5ae99cae3625151de8f706cacee1cba4b8e2832a" dependencies = [ "cfg-if", + "core_detect", + "multiversion", + "multiversion_no_op", + "rustversion", + "scopeguard", + "simdutf8", ] [[package]] @@ -1623,16 +1649,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "event-listener" -version = "5.4.1" +version = "5.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2" dependencies = [ - "concurrent-queue", "parking", "pin-project-lite", ] @@ -1655,9 +1680,9 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "fdeflate" @@ -1686,9 +1711,9 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "flagset" @@ -1698,12 +1723,12 @@ checksum = "b7ac824320a75a52197e8f2d787f6a38b6718bb6897a35142d749af3c0e8f4fe" [[package]] name = "flate2" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.9.1", "zlib-rs", ] @@ -1714,7 +1739,7 @@ dependencies = [ "anyhow", "aws-config", "aws-sdk-s3", - "base64", + "base64 0.23.1", "bytes", "chrono", "clap", @@ -1735,7 +1760,7 @@ name = "fluxer-content-update-frozen-snapshot" version = "0.1.0" dependencies = [ "anyhow", - "base64", + "base64 0.23.1", "sha2 0.11.0", "tempfile", ] @@ -1746,7 +1771,6 @@ version = "0.1.0" dependencies = [ "anyhow", "axum", - "base64", "clap", "fluxer_common", "hmac 0.13.0", @@ -1770,7 +1794,6 @@ name = "fluxer-gifs" version = "0.1.0" dependencies = [ "anyhow", - "base64", "fluxer-svc", "fluxer_common", "hmac 0.13.0", @@ -1804,7 +1827,7 @@ version = "0.1.0" dependencies = [ "anyhow", "axum", - "base64", + "base64 0.23.1", "bytes", "cc", "clap", @@ -1813,8 +1836,8 @@ dependencies = [ "futures-util", "hex", "hmac 0.13.0", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "http-body-util", "hyper", "libc", @@ -1823,7 +1846,7 @@ dependencies = [ "percent-encoding", "pkg-config", "proptest", - "rand 0.10.1", + "rand 0.10.2", "rand_chacha 0.10.0", "reqwest", "reqwest-middleware", @@ -1847,7 +1870,6 @@ name = "fluxer-messages" version = "0.1.0" dependencies = [ "anyhow", - "base64", "chrono", "criterion", "fluxer-svc", @@ -1914,7 +1936,6 @@ version = "0.1.0" dependencies = [ "ammonia", "anyhow", - "base64", "chrono", "encoding_rs", "entities", @@ -1959,7 +1980,7 @@ version = "0.1.0" dependencies = [ "anyhow", "axum", - "base64", + "base64 0.23.1", "chrono", "cookie", "fluxer_common", @@ -1969,17 +1990,17 @@ dependencies = [ "prettyplease", "progenitor", "progenitor-client", - "rand 0.10.1", + "rand 0.10.2", "regress", "reqwest", "serde", "serde_json", "sha2 0.11.0", - "syn", + "syn 3.0.6", "time", "tokio", "tower", - "tower-http", + "tower-http 0.7.1", "tracing", "tracing-subscriber", "url", @@ -1992,18 +2013,18 @@ version = "0.1.0" dependencies = [ "anyhow", "axum", - "base64", + "base64 0.23.1", "fluxer_common", "futures-util", "hex", - "rand 0.10.1", + "rand 0.10.2", "reqwest", "serde", "serde_json", "tokio", "tokio-util", "tower", - "tower-http", + "tower-http 0.7.1", "tracing", "tracing-subscriber", ] @@ -2016,7 +2037,7 @@ dependencies = [ "aws-credential-types", "aws-sigv4", "axum", - "base64", + "base64 0.23.1", "hmac 0.13.0", "maxminddb", "moka", @@ -2047,12 +2068,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "foldhash" version = "0.2.0" @@ -2076,9 +2091,9 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -2091,9 +2106,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -2101,15 +2116,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -2118,38 +2133,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -2164,9 +2179,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", @@ -2202,25 +2217,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", - "js-sys", "libc", "r-efi 5.3.0", "wasip2", - "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi 6.0.0", "rand_core 0.10.1", - "wasip2", - "wasip3", + "wasm-bindgen", ] [[package]] @@ -2255,7 +2268,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.4.2", + "http 1.5.0", "indexmap", "slab", "tokio", @@ -2280,33 +2293,16 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash 0.1.5", -] - -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash 0.2.0", -] - [[package]] name = "hashbrown" version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] [[package]] name = "heck" @@ -2314,12 +2310,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - [[package]] name = "hex" version = "0.4.3" @@ -2351,7 +2341,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46a1761807faccc9a19e86944bbf40610014066306f96edcdedc2fb714bcb7b8" dependencies = [ "log", - "markup5ever", + "markup5ever 0.39.0", +] + +[[package]] +name = "html5ever" +version = "0.40.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456a1a377e608e555d22ddab27ac0114bc7a7b4199078108e34c2aeae6c9b130" +dependencies = [ + "log", + "markup5ever 0.40.0", + "memchr", ] [[package]] @@ -2367,9 +2368,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" dependencies = [ "bytes", "itoa", @@ -2388,24 +2389,24 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" dependencies = [ "bytes", - "http 1.4.2", + "http 1.5.0", ] [[package]] name = "http-body-util" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" dependencies = [ "bytes", "futures-core", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "pin-project-lite", ] @@ -2423,26 +2424,26 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hybrid-array" -version = "0.4.12" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" dependencies = [ "typenum", ] [[package]] name = "hyper" -version = "1.10.1" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" +checksum = "27b501faa50e7a26c3d3560ca625132f4078a17771f4810baf70475ae48cbe43" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", "h2", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "httparse", "httpdate", "itoa", @@ -2458,7 +2459,7 @@ version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ - "http 1.4.2", + "http 1.5.0", "hyper", "hyper-util", "rustls", @@ -2474,18 +2475,18 @@ version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "futures-channel", "futures-util", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "hyper", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.5.10", + "socket2", "tokio", "tower-service", "tracing", @@ -2517,9 +2518,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" dependencies = [ "displaydoc", "potential_utf", @@ -2531,9 +2532,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" dependencies = [ "displaydoc", "litemap", @@ -2544,9 +2545,9 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -2558,16 +2559,17 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" [[package]] name = "icu_properties" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" dependencies = [ + "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", @@ -2578,15 +2580,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" [[package]] name = "icu_provider" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" dependencies = [ "displaydoc", "icu_locale_core", @@ -2597,12 +2599,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "ident_case" version = "1.0.1" @@ -2660,9 +2656,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.14.0" +version = "2.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" dependencies = [ "equivalent", "hashbrown 0.17.1", @@ -2672,18 +2668,18 @@ dependencies = [ [[package]] name = "infer" -version = "0.19.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" +checksum = "f4200d433cbd5178df7797c9c2e75b348b728e39631cf14520d1e2fc424201f4" dependencies = [ "cfb", ] [[package]] name = "ipnet" -version = "2.12.0" +version = "2.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0" [[package]] name = "ipnetwork" @@ -2708,9 +2704,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +checksum = "8b4baf93f58d4425749ca49a51c50ebab072c5df6994d08fed93541c331481dc" dependencies = [ "either", ] @@ -2748,7 +2744,7 @@ dependencies = [ "quote", "rustc_version", "simd_cesu8", - "syn", + "syn 2.0.119", ] [[package]] @@ -2767,28 +2763,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" dependencies = [ "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -2798,23 +2793,17 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libredox" -version = "0.1.17" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" +checksum = "6480ccc157a1389bb2e4891b24751b0f798ba640d22386f23143fbcc89da195a" dependencies = [ "libc", ] @@ -2836,9 +2825,9 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" [[package]] name = "lock_api" @@ -2851,30 +2840,30 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "lru" -version = "0.16.4" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f66e8d5d03f609abc3a39e6f08e4164ebf1447a732906d39eb9b99b7919ef39" +checksum = "ff9840bcc50b71349309900da0ce7279aa336ae71d73250b07998932c7d97c25" dependencies = [ - "hashbrown 0.16.1", + "hashbrown 0.17.1", ] [[package]] name = "lru-slab" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +checksum = "4050469837a6ff301cd14c1f8f24f88549e6d548f24f64e2148eb0f72cebc51f" [[package]] name = "lz4_flex" -version = "0.11.6" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373f5eceeeab7925e0c1098212f2fbc4d416adec9d35051a6ab251e824c1854a" +checksum = "ecbdfe44b1bd960b68170b417450a628c43f7cf56bb3c5317e61cb230ee7f226" dependencies = [ "twox-hash", ] @@ -2893,7 +2882,18 @@ checksum = "7122d987ec5f704ee56f6e5b41a7d93722e9aae27ae07cafa4036c4d3f9757de" dependencies = [ "log", "tendril", - "web_atoms", + "web_atoms 0.2.6", +] + +[[package]] +name = "markup5ever" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab3dc68ac4a0f5719e560136778c1ee716e296030d75dbd4484e37e39e3a842" +dependencies = [ + "log", + "tendril", + "web_atoms 0.3.0", ] [[package]] @@ -2918,7 +2918,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8156733e27020ea5c684db5beac5d1d611e1272ab17901a49466294b84fc217e" dependencies = [ "axum-core", - "http 1.4.2", + "http 1.5.0", "itoa", "maud_macros", ] @@ -2932,17 +2932,16 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "maxminddb" -version = "0.28.1" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf6467428ad055b71e588bcedcbaf2ff605b3251deb0c52be4a04b674c546dd" +checksum = "9b43d2458d977b610b04a3858e6504f06133663d303a1a0606601b530bfc9bc6" dependencies = [ "ipnetwork", - "log", "memchr", "serde", "thiserror", @@ -2960,9 +2959,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "mime" @@ -2991,10 +2990,20 @@ dependencies = [ ] [[package]] -name = "mio" -version = "1.2.0" +name = "miniz_oxide" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8" dependencies = [ "libc", "wasi 0.11.1+wasi-snapshot-preview1", @@ -3003,9 +3012,9 @@ dependencies = [ [[package]] name = "moka" -version = "0.12.15" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957228ad12042ee839f93c8f257b62b4c0ab5eaae1d4fa60de53b27c9d7c5046" +checksum = "4293f18e7567a1caf3c584855554377025c65e0aa445344d04171f5ad63d19b9" dependencies = [ "async-lock", "crossbeam-channel", @@ -3031,6 +3040,33 @@ dependencies = [ "pxfm", ] +[[package]] +name = "multiversion" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ca4bea16ffc3f443cf7d866912118196bfef4c6a1556ca00f9f9b00bb43f7c" +dependencies = [ + "multiversion-macros", +] + +[[package]] +name = "multiversion-macros" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d416831a7317ef4b08bee00b69cbbb9c8763da7959a7026244d6266869f9c83" +dependencies = [ + "proc-macro2", + "quote", + "rustversion", + "syn 3.0.6", +] + +[[package]] +name = "multiversion_no_op" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743fb55ba31b18fb1ecef6bdc9aa2743314978ac084044301a7eee33fb99a20d" + [[package]] name = "new_debug_unreachable" version = "1.0.6" @@ -3048,7 +3084,7 @@ dependencies = [ "ed25519-dalek", "getrandom 0.2.17", "log", - "rand 0.8.6", + "rand 0.8.8", "signatory", ] @@ -3058,7 +3094,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3067,20 +3103,20 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc895af95856f929163a0aa20c26a78d26bfdc839f51b9d5aa7a5b79e52b7e83" dependencies = [ - "rand 0.8.6", + "rand 0.8.8", ] [[package]] name = "num-conv" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-integer" -version = "0.1.46" +version = "0.1.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" dependencies = [ "num-traits", ] @@ -3094,16 +3130,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "num_cpus" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" -dependencies = [ - "hermit-abi", - "libc", -] - [[package]] name = "objc2-core-foundation" version = "0.3.2" @@ -3236,7 +3262,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" dependencies = [ "phf_macros", - "phf_shared", + "phf_shared 0.13.1", + "serde", +] + +[[package]] +name = "phf" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "010378780309880b08997fae13be7834dba947d36393bd372f2b1556deb2a2f6" +dependencies = [ + "phf_shared 0.14.0", "serde", ] @@ -3246,8 +3282,18 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" dependencies = [ - "phf_generator", - "phf_shared", + "phf_generator 0.13.1", + "phf_shared 0.13.1", +] + +[[package]] +name = "phf_codegen" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b585a510fb76fdebead6897982ef2a03a21d8e6cbcca904999742a4afc6ffe" +dependencies = [ + "phf_generator 0.14.0", + "phf_shared 0.14.0", ] [[package]] @@ -3257,7 +3303,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" dependencies = [ "fastrand", - "phf_shared", + "phf_shared 0.13.1", +] + +[[package]] +name = "phf_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aeb62e0959d5a1bebc965f4d15d9e2b7cea002b6b0f5ba8cde6cc26738467100" +dependencies = [ + "fastrand", + "phf_shared 0.14.0", ] [[package]] @@ -3266,11 +3322,11 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" dependencies = [ - "phf_generator", - "phf_shared", + "phf_generator 0.13.1", + "phf_shared 0.13.1", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3282,6 +3338,15 @@ dependencies = [ "siphasher", ] +[[package]] +name = "phf_shared" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6fd9027e2d9319be6349febd1db4e8d02aa544921200c9b777720ac34a3aa89" +dependencies = [ + "siphasher", +] + [[package]] name = "pin-project" version = "1.1.13" @@ -3299,7 +3364,7 @@ checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3326,9 +3391,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "plotters" @@ -3368,14 +3433,14 @@ dependencies = [ "crc32fast", "fdeflate", "flate2", - "miniz_oxide", + "miniz_oxide 0.8.9", ] [[package]] name = "portable-atomic" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" [[package]] name = "postgres-protocol" @@ -3383,14 +3448,14 @@ version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08808e3c483c46e999108051c78334f473d5adb59d78bb80a1268c7e6aa6c514" dependencies = [ - "base64", + "base64 0.22.1", "byteorder", "bytes", "fallible-iterator", "hmac 0.13.0", "md-5", "memchr", - "rand 0.10.1", + "rand 0.10.2", "sha2 0.11.0", "stringprep", ] @@ -3410,9 +3475,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" dependencies = [ "zerovec", ] @@ -3440,12 +3505,12 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "prettyplease" -version = "0.2.37" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +checksum = "2bfe0f4c752e450fc2faf62654f1c134747922825d5b04ca717b8874f41a40c0" dependencies = [ "proc-macro2", - "syn", + "syn 3.0.6", ] [[package]] @@ -3459,9 +3524,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -3474,24 +3539,24 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "version_check", ] [[package]] name = "progenitor" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8ba1d77160e6d5c95bdf0792527f76bf528791093fa83015bc2908a0ba9d076" +checksum = "b5e58f442cdad0db9db03ac94cc7b65938dccf1b282a56c440528a7da41ec947" dependencies = [ "progenitor-impl", ] [[package]] name = "progenitor-client" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e8a874cf25a33cac7a01b9c1de87bcfbc8aea93f3156d09dcc3bee516a78926" +checksum = "53034c7e99439e366d243ed9847977d349243a862284d2e509a2abba7d003654" dependencies = [ "bytes", "futures-core", @@ -3504,12 +3569,12 @@ dependencies = [ [[package]] name = "progenitor-impl" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e349eed84b9a1a6a5dbe478d335e3df73d32a93c5eefe571c9b8cb298aab5d" +checksum = "83aef4388cf237992f3f55aeead8417f45e9305fdbb77e97a551e8166629c692" dependencies = [ "heck", - "http 1.4.2", + "http 1.5.0", "indexmap", "openapiv3", "proc-macro2", @@ -3518,7 +3583,7 @@ dependencies = [ "schemars", "serde", "serde_json", - "syn", + "syn 3.0.6", "thiserror", "typify", "unicode-ident", @@ -3534,7 +3599,7 @@ dependencies = [ "bit-vec", "bitflags", "num-traits", - "rand 0.9.4", + "rand 0.9.5", "rand_chacha 0.9.0", "rand_xorshift", "regex-syntax", @@ -3545,9 +3610,9 @@ dependencies = [ [[package]] name = "pxfm" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f" +checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea" [[package]] name = "quick-error" @@ -3563,9 +3628,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quinn" -version = "0.11.9" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +checksum = "4051e23e9185c255a7e33ef59cdbca87a22d359052eecd22fc6b901fb37d9d11" dependencies = [ "bytes", "cfg_aliases", @@ -3574,7 +3639,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2 0.5.10", + "socket2", "thiserror", "tokio", "tracing", @@ -3583,15 +3648,16 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.14" +version = "0.11.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +checksum = "a9746dbde176634f4f2f1faf2404e30a31b2bc1e9cafb5329c95d8177a18c9fc" dependencies = [ "aws-lc-rs", "bytes", - "getrandom 0.3.4", + "getrandom 0.4.3", "lru-slab", - "rand 0.9.4", + "rand 0.10.2", + "rand_pcg 0.10.2", "ring", "rustc-hash", "rustls", @@ -3605,23 +3671,23 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.5.10", + "socket2", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -3640,9 +3706,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" +checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c" dependencies = [ "libc", "rand_chacha 0.3.1", @@ -3651,9 +3717,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.5", @@ -3661,12 +3727,12 @@ dependencies = [ [[package]] name = "rand" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ "chacha20", - "getrandom 0.4.2", + "getrandom 0.4.3", "rand_core 0.10.1", ] @@ -3733,6 +3799,15 @@ dependencies = [ "rand_core 0.9.5", ] +[[package]] +name = "rand_pcg" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +dependencies = [ + "rand_core 0.10.1", +] + [[package]] name = "rand_xorshift" version = "0.4.0" @@ -3773,9 +3848,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -3785,9 +3860,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -3802,33 +3877,32 @@ checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "regress" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "158a764437582235e3501f683b93a0a6f8d825d04a789dbe5ed30b8799b8908a" +checksum = "32eef8b209c3c1c15dbad02c1f30f9539f00dc7253e0cbcdaae442a50a09d7c1" dependencies = [ - "hashbrown 0.16.1", "memchr", ] [[package]] name = "reqwest" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" +checksum = "16a1cfa75cc186dd73d5818e510e042e40927bccc9c236b061cea97e1eb08029" dependencies = [ - "base64", + "base64 0.23.1", "bytes", "futures-channel", "futures-core", "futures-util", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "http-body-util", "hyper", "hyper-rustls", @@ -3849,7 +3923,7 @@ dependencies = [ "tokio-rustls", "tokio-util", "tower", - "tower-http", + "tower-http 0.6.11", "tower-service", "url", "wasm-bindgen", @@ -3866,7 +3940,7 @@ checksum = "07bc3f1384cffa4f274dad2d4ddd73aed32fed8f786d96c6be8aa4e5fd3c3b58" dependencies = [ "anyhow", "async-trait", - "http 1.4.2", + "http 1.5.0", "reqwest", "thiserror", "tower-service", @@ -3882,7 +3956,7 @@ dependencies = [ "async-trait", "futures", "getrandom 0.2.17", - "http 1.4.2", + "http 1.5.0", "hyper", "reqwest", "reqwest-middleware", @@ -3899,7 +3973,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc05fbf560421a0357a750cbe78c7ca19d4923918490daabba313d5dbc871e47" dependencies = [ - "rand 0.10.1", + "rand 0.10.2", ] [[package]] @@ -3947,9 +4021,9 @@ dependencies = [ [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -3962,15 +4036,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3991,9 +4065,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -4003,9 +4077,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.14.1" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" dependencies = [ "web-time", "zeroize", @@ -4029,7 +4103,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4052,9 +4126,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "rusty-fork" @@ -4098,12 +4172,10 @@ version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" dependencies = [ - "chrono", "dyn-clone", "schemars_derive", "serde", "serde_json", - "uuid", ] [[package]] @@ -4115,7 +4187,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn", + "syn 2.0.119", ] [[package]] @@ -4130,10 +4202,10 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdd0be4d296f048bfb06dd01bbc80ef789ddd2e55583e8d2e6b804942abfabc2" dependencies = [ - "cssparser", + "cssparser 0.37.0", "ego-tree", "getopts", - "html5ever", + "html5ever 0.39.0", "precomputed-hash", "selectors", "tendril", @@ -4141,9 +4213,9 @@ dependencies = [ [[package]] name = "scylla" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f9ff6ccde6555beec62c794bbc8dcae08a15f2397e057a5978c199174be920" +checksum = "29eebcb7e34257f8ce01aaa1469644825bd4b4995d401c362be65d994e3feaa3" dependencies = [ "arc-swap", "async-trait", @@ -4151,13 +4223,16 @@ dependencies = [ "chrono", "dashmap", "futures", - "hashbrown 0.15.5", - "itertools 0.14.0", - "rand 0.9.4", - "rand_pcg", + "hashbrown 0.17.1", + "itertools 0.15.0", + "rand 0.9.5", + "rand_pcg 0.9.0", "scylla-cql", + "scylla-cql-core", + "serde", + "serde_json", "smallvec", - "socket2 0.5.10", + "socket2", "thiserror", "tokio", "tracing", @@ -4166,16 +4241,16 @@ dependencies = [ [[package]] name = "scylla-cql" -version = "1.6.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1687853d084bd9debb38f326298aeb7ae9c9a336d6f22684f3579db785051efd" +checksum = "a398b0e78fb3872c4d5afc74e461d6b80dd69d030e13ddc7442e5f32c482e0da" dependencies = [ "byteorder", "bytes", "chrono", - "itertools 0.14.0", + "itertools 0.15.0", "lz4_flex", - "scylla-macros", + "scylla-cql-core", "snap", "stable_deref_trait", "thiserror", @@ -4185,15 +4260,30 @@ dependencies = [ ] [[package]] -name = "scylla-macros" -version = "1.6.0" +name = "scylla-cql-core" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "619e45d49f95b355afa56840d9021c789eddf8c3a6bef8d4b82de0912097d578" +checksum = "72ca9de2eb08d04a9c85002ac179c51353c91152cd2cd58fc3d7cbc1eee8ab16" +dependencies = [ + "byteorder", + "bytes", + "chrono", + "itertools 0.15.0", + "scylla-macros", + "thiserror", + "uuid", +] + +[[package]] +name = "scylla-macros" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c82c9c67cb4912cefc8cb2a68ebdcbe0273b66510c2bb06581ae6b68d98498aa" dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -4240,12 +4330,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8adfa1c298912827b8a28b223b3b874357397ae706e6190acd9bf28cee99114d" dependencies = [ "bitflags", - "cssparser", + "cssparser 0.37.0", "derive_more", "log", "new_debug_unreachable", - "phf", - "phf_codegen", + "phf 0.13.1", + "phf_codegen 0.13.1", "precomputed-hash", "rustc-hash", "servo_arc", @@ -4257,16 +4347,12 @@ name = "semver" version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" -dependencies = [ - "serde", - "serde_core", -] [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -4274,22 +4360,22 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -4300,14 +4386,14 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -4338,25 +4424,25 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "serde_tokenstream" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c49585c52c01f13c5c2ebb333f14f6885d76daa768d8a037d28017ec538c69" +checksum = "db95b8acf6eca5bc1bc771a7d7fb1a0d1485bdef0c46eec2f573bbaf4b4118f8" dependencies = [ "proc-macro2", "quote", "serde", - "syn", + "syn 3.0.6", ] [[package]] @@ -4382,9 +4468,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8" dependencies = [ "cfg-if", "cpufeatures 0.2.17", @@ -4398,7 +4484,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" dependencies = [ "cfg-if", - "cpufeatures 0.3.0", + "cpufeatures 0.3.1", "digest 0.11.3", ] @@ -4420,7 +4506,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", - "cpufeatures 0.3.0", + "cpufeatures 0.3.1", "digest 0.11.3", ] @@ -4473,15 +4559,15 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" [[package]] name = "simd_cesu8" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" dependencies = [ "rustc_version", "simdutf8", @@ -4507,31 +4593,21 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" [[package]] name = "snap" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" +checksum = "199905e6153d6405f9728fe44daace35f8f837bbf830bb6e85fbd5828709a886" [[package]] name = "socket2" -version = "0.5.10" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "socket2" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", "windows-sys 0.61.2", @@ -4567,7 +4643,19 @@ checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" dependencies = [ "new_debug_unreachable", "parking_lot", - "phf_shared", + "phf_shared 0.13.1", + "precomputed-hash", +] + +[[package]] +name = "string_cache" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffa8a5dbe8b3f0bbe29d4c3225daafaeead63afdc1b65fc4c01a1384166038e6" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared 0.14.0", "precomputed-hash", ] @@ -4577,8 +4665,20 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" dependencies = [ - "phf_generator", - "phf_shared", + "phf_generator 0.13.1", + "phf_shared 0.13.1", + "proc-macro2", + "quote", +] + +[[package]] +name = "string_cache_codegen" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928dcdf75e47626b3617a976ec205d9f057584c371c1f23b782129268d0e6edc" +dependencies = [ + "phf_generator 0.14.0", + "phf_shared 0.14.0", "proc-macro2", "quote", ] @@ -4608,9 +4708,20 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -4628,13 +4739,13 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -4650,59 +4761,57 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.4.3", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "tendril" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4790fc369d5a530f4b544b094e31388b9b3a37c0f4652ade4505945f5660d24" +checksum = "5fed54709c5b3a53d09bb1c113ea4f5ceafd1e772ddcb0030a82e1d56c087b08" dependencies = [ "new_debug_unreachable", - "utf-8", ] [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "thread_local" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" dependencies = [ "cfg-if", ] [[package]] name = "time" -version = "0.3.47" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" dependencies = [ "deranged", - "itoa", "num-conv", "powerfmt", "serde_core", @@ -4712,15 +4821,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.27" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" dependencies = [ "num-conv", "time-core", @@ -4728,9 +4837,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" dependencies = [ "displaydoc", "zerovec", @@ -4748,18 +4857,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.11.0" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" [[package]] name = "tls_codec" @@ -4779,34 +4879,34 @@ checksum = "2d2e76690929402faae40aebdda620a2c0e25dd6d3b9afe48867dfd95991f4bd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "bytes", "libc", "mio", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.3", + "socket2", "tokio-macros", "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.7.0" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -4824,12 +4924,12 @@ dependencies = [ "log", "parking_lot", "percent-encoding", - "phf", + "phf 0.13.1", "pin-project-lite", "postgres-protocol", "postgres-types", - "rand 0.10.1", - "socket2 0.6.3", + "rand 0.10.2", + "socket2", "tokio", "tokio-util", "whoami", @@ -4852,9 +4952,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.4" +version = "0.26.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +checksum = "b0c85f2c3ef0b1cd58b36682f4b17aaa995f0e5db534d85692b4903abce21f67" dependencies = [ "rustls", "tokio", @@ -4862,9 +4962,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" +checksum = "a3d06f0b082ba57c26b79407372e57cf2a1e28124f78e9479fe80322cf53420b" dependencies = [ "futures-core", "pin-project-lite", @@ -4873,13 +4973,14 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" dependencies = [ "bytes", "futures-core", "futures-sink", + "libc", "pin-project-lite", "tokio", ] @@ -4890,13 +4991,13 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f591660438b3038dd04d16c938271c79e7e06260ad2ea2885a4861bfb238605d" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "futures-core", "futures-sink", - "http 1.4.2", + "http 1.5.0", "httparse", - "rand 0.8.6", + "rand 0.8.8", "ring", "rustls-pki-types", "tokio", @@ -4932,8 +5033,8 @@ dependencies = [ "bytes", "futures-core", "futures-util", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "http-body-util", "pin-project-lite", "tokio", @@ -4941,10 +5042,30 @@ dependencies = [ "tower", "tower-layer", "tower-service", - "tracing", "url", ] +[[package]] +name = "tower-http" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08a05a66a4fdd61cbbe0a1d755ffe0ca6aba159dd4820936a0ff8a8278245b9c" +dependencies = [ + "async-compression", + "bitflags", + "bytes", + "futures-core", + "http 1.5.0", + "http-body 1.1.0", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "tower-layer" version = "0.3.3" @@ -4977,7 +5098,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -5050,9 +5171,9 @@ dependencies = [ [[package]] name = "twox-hash" -version = "2.1.2" +version = "2.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" +checksum = "5283634e518fe9e82c7b20520bb4bc209009fd16c82077c802f8111ecbb0117a" [[package]] name = "typed-path" @@ -5062,15 +5183,15 @@ checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "typify" -version = "0.6.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0b89f47309feaeb23c4509c15c9a04234f7deccef6f96c3bfe95319819a304" +checksum = "71187d2e983363e9a6ca884f7b061620bc6da4316902058e74bbc9d61c347696" dependencies = [ "typify-impl", "typify-macro", @@ -5078,9 +5199,9 @@ dependencies = [ [[package]] name = "typify-impl" -version = "0.6.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7b026f540b148b81043c720889dbb942b08659aa8a43f624ac4f04dbfc1861" +checksum = "1cbc3132686085f84a068ad86fc281cb3d566dd940c8911fd3562013851e9ae8" dependencies = [ "heck", "log", @@ -5091,16 +5212,16 @@ dependencies = [ "semver", "serde", "serde_json", - "syn", + "syn 3.0.6", "thiserror", "unicode-ident", ] [[package]] name = "typify-macro" -version = "0.6.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ed96c57f06ae0839416b986921a98f18b220da63bbb243a8570a00c8492183" +checksum = "b3a7f8d08ec85254fb8b383a6c66fe43b81f7f6b288fa71eb365f0867fc8f3a6" dependencies = [ "proc-macro2", "quote", @@ -5109,7 +5230,7 @@ dependencies = [ "serde", "serde_json", "serde_tokenstream", - "syn", + "syn 3.0.6", "typify-impl", ] @@ -5133,9 +5254,9 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-normalization" @@ -5158,12 +5279,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "untrusted" version = "0.9.0" @@ -5188,12 +5303,6 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -5208,11 +5317,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.1" +version = "1.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "2ef6dac1e96601b4fb3acccccff2139741fcb757cb9a36089bf5be91cfb285ce" dependencies = [ - "getrandom 0.4.2", + "getrandom 0.4.3", "js-sys", "wasm-bindgen", ] @@ -5280,20 +5389,11 @@ dependencies = [ [[package]] name = "wasip2" -version = "1.0.3+wasi-0.2.9" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", + "wit-bindgen", ] [[package]] @@ -5307,9 +5407,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -5320,9 +5420,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.71" +version = "0.4.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928" dependencies = [ "js-sys", "wasm-bindgen", @@ -5330,9 +5430,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5340,48 +5440,26 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - [[package]] name = "wasm-streams" version = "0.5.0" @@ -5395,18 +5473,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "wasmtimer" version = "0.4.3" @@ -5423,9 +5489,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" dependencies = [ "js-sys", "wasm-bindgen", @@ -5443,21 +5509,33 @@ dependencies = [ [[package]] name = "web_atoms" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7cff6eef815df1834fd250e3a2ff436044d82a9f1bc1980ca1dbdf07effc538" +checksum = "ba8b815c1b593dc0baf78dd0f4fc8fdb2de53198fb1163738093e9a311c33fb3" dependencies = [ - "phf", - "phf_codegen", - "string_cache", - "string_cache_codegen", + "phf 0.13.1", + "phf_codegen 0.13.1", + "string_cache 0.9.0", + "string_cache_codegen 0.6.1", +] + +[[package]] +name = "web_atoms" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7572660c8890448ba236b7376f27e389c6a7e1c70195622faced601f855c0ada" +dependencies = [ + "phf 0.14.0", + "phf_codegen 0.14.0", + "string_cache 0.11.0", + "string_cache_codegen 0.11.2", ] [[package]] name = "webpki-root-certs" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9a92c" +checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" dependencies = [ "rustls-pki-types", ] @@ -5468,14 +5546,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.7", + "webpki-roots 1.0.9", ] [[package]] name = "webpki-roots" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" +checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" dependencies = [ "rustls-pki-types", ] @@ -5488,9 +5566,9 @@ checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" [[package]] name = "whoami" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "998767ef88740d1f5b0682a9c53c24431453923962269c2db68ee43788c5a40d" +checksum = "626c4bac6755d76ffc12cb01b2eac751db1996b9e0041de9aa02c8c211ddc82c" dependencies = [ "libc", "libredox", @@ -5521,7 +5599,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5551,7 +5629,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -5562,7 +5640,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -5598,15 +5676,6 @@ 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-sys" version = "0.61.2" @@ -5680,105 +5749,17 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - [[package]] name = "wit-bindgen" version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "writeable" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" [[package]] name = "wyhash" @@ -5809,9 +5790,9 @@ checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -5820,34 +5801,34 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +checksum = "33811428bee40dbceb6d545e95754741d17a6aef9a4849f0fd62e2ba4f412a78" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -5861,21 +5842,21 @@ dependencies = [ [[package]] name = "zerofrom-derive" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" dependencies = [ "zeroize_derive", ] @@ -5888,14 +5869,14 @@ checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "zerotrie" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" dependencies = [ "displaydoc", "yoke", @@ -5904,9 +5885,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" dependencies = [ "yoke", "zerofrom", @@ -5915,13 +5896,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -5940,15 +5921,15 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.6.3" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" +checksum = "b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112" [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" [[package]] name = "zopfli" @@ -5964,9 +5945,9 @@ dependencies = [ [[package]] name = "zune-core" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" +checksum = "d56377fd46368984a170bc5aac5567e52ca5da874caa60bea39fcbca78fb658b" [[package]] name = "zune-jpeg" diff --git a/biome.json b/biome.json index 6f4e6fd80..af384bf47 100644 --- a/biome.json +++ b/biome.json @@ -48,7 +48,7 @@ "linter": { "enabled": true, "rules": { - "recommended": true, + "preset": "recommended", "complexity": { "noForEach": "off", "noImportantStyles": "off", @@ -83,6 +83,7 @@ } }, "useConst": "error", + "noDescendingSpecificity": "off", "noNonNullAssertion": "off", "noParameterAssign": "off", "noRestrictedImports": { @@ -98,7 +99,7 @@ } }, "a11y": { - "recommended": true, + "preset": "recommended", "useAriaPropsForRole": "error", "useValidAriaRole": "error", "useValidAriaValues": "error", diff --git a/deny.toml b/deny.toml index 2f4be5c49..293c52560 100644 --- a/deny.toml +++ b/deny.toml @@ -79,34 +79,42 @@ deny = [ { crate = "fuse-sys", reason = "libfuse2 FFI crate; Fluxer AppImages must not reintroduce libfuse2 through native Rust dependencies" }, ] skip = [ + { crate = "base64@0.22.1", reason = "transitive dependency requires the older release line" }, { crate = "block-buffer@0.10.4", reason = "transitive dependency requires the older digest API" }, { crate = "const-oid@0.9.6", reason = "transitive dependency requires the older digest API" }, { crate = "cpufeatures@0.2.17", reason = "transitive dependency requires the older crypto API" }, - { crate = "crypto-common@0.1.7", reason = "transitive dependency requires the older digest API" }, + { crate = "crypto-common@0.1.6", reason = "transitive dependency requires the older digest API" }, + { crate = "cssparser@0.37.0", reason = "transitive dependency requires the older release line" }, { crate = "digest@0.10.7", reason = "transitive dependency requires the older digest API" }, - { crate = "foldhash@0.1.5", reason = "transitive dependency requires the older hashbrown API" }, { crate = "getrandom@0.2.17", reason = "transitive dependency requires the older randomness API" }, { crate = "getrandom@0.3.4", reason = "transitive dependency requires the prior randomness API" }, { crate = "hashbrown@0.14.5", reason = "transitive dependency requires the older hashbrown API" }, - { crate = "hashbrown@0.15.5", reason = "transitive dependency requires the older hashbrown API" }, - { crate = "hashbrown@0.16.1", reason = "transitive dependency requires the prior hashbrown API" }, { crate = "hmac@0.12.1", reason = "transitive dependency requires the older digest API" }, + { crate = "html5ever@0.39.0", reason = "transitive dependency requires the older release line" }, { crate = "http@0.2.12", reason = "transitive dependency requires the older HTTP API" }, { crate = "http-body@0.4.6", reason = "transitive dependency requires the older HTTP body API" }, + { crate = "markup5ever@0.39.0", reason = "transitive dependency requires the older release line" }, + { crate = "miniz_oxide@0.8.9", reason = "transitive dependency requires the older release line" }, + { crate = "phf@0.13.1", reason = "transitive dependency requires the older release line" }, + { crate = "phf_codegen@0.13.1", reason = "transitive dependency requires the older release line" }, + { crate = "phf_generator@0.13.1", reason = "transitive dependency requires the older release line" }, + { crate = "phf_shared@0.13.1", reason = "transitive dependency requires the older release line" }, { crate = "r-efi@5.3.0", reason = "transitive dependency requires the older WASI API" }, - { crate = "rand@0.8.6", reason = "transitive dependency requires the older randomness API" }, - { crate = "rand@0.9.4", reason = "transitive dependency requires the prior randomness API" }, + { crate = "rand@0.8.8", reason = "transitive dependency requires the older randomness API" }, + { crate = "rand@0.9.5", reason = "transitive dependency requires the prior randomness API" }, { crate = "rand_chacha@0.3.1", reason = "transitive dependency requires the older randomness API" }, { crate = "rand_chacha@0.9.0", reason = "transitive dependency requires the prior randomness API" }, { crate = "rand_core@0.6.4", reason = "transitive dependency requires the older randomness API" }, { crate = "rand_core@0.9.5", reason = "transitive dependency requires the prior randomness API" }, - { crate = "sha1@0.10.6", reason = "transitive dependency requires the older digest API" }, + { crate = "sha1@0.10.7", reason = "transitive dependency requires the older digest API" }, { crate = "sha2@0.10.9", reason = "transitive dependency requires the older digest API" }, - { crate = "socket2@0.5.10", reason = "transitive dependency requires the older socket API" }, + { crate = "string_cache@0.9.0", reason = "transitive dependency requires the older release line" }, + { crate = "string_cache_codegen@0.6.1", reason = "transitive dependency requires the older release line" }, + { crate = "syn@2.0.119", reason = "transitive dependency requires the older release line" }, + { crate = "tower-http@0.6.11", reason = "transitive dependency requires the older release line" }, { crate = "wasi@0.11.1+wasi-snapshot-preview1", reason = "transitive dependency requires the legacy WASI API" }, + { crate = "web_atoms@0.2.6", reason = "transitive dependency requires the older release line" }, { crate = "windows-sys@0.52.0", reason = "transitive dependency requires the older Windows API" }, - { crate = "windows-sys@0.59.0", reason = "transitive dependency requires the prior Windows API" }, - { crate = "wit-bindgen@0.51.0", reason = "transitive dependency requires the older WASI binding API" }, ] skip-tree = [] diff --git a/deploy/self-hosting/docker-compose.yml b/deploy/self-hosting/docker-compose.yml index 041aff1b2..4ae273908 100644 --- a/deploy/self-hosting/docker-compose.yml +++ b/deploy/self-hosting/docker-compose.yml @@ -122,7 +122,7 @@ x-fluxer-svc-healthcheck: &fluxer-svc-healthcheck services: edge: - image: caddy:2.10-alpine + image: caddy:2.11-alpine deploy: resources: limits: @@ -200,7 +200,7 @@ services: retries: 10 valkey: - image: valkey/valkey:8.1-alpine + image: valkey/valkey:9.1-alpine deploy: resources: limits: @@ -236,7 +236,7 @@ services: retries: 10 meilisearch: - image: getmeili/meilisearch:v1.12 + image: getmeili/meilisearch:v1.53 deploy: resources: limits: @@ -246,6 +246,7 @@ services: environment: MEILI_ENV: production MEILI_NO_ANALYTICS: "true" + MEILI_UPGRADE_DB: "true" MEILI_MAX_INDEXING_MEMORY: ${FLUXER_MEILISEARCH_MAX_INDEXING_MEMORY:-384mb} MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:?set MEILI_MASTER_KEY in .env} volumes: @@ -257,7 +258,7 @@ services: retries: 10 seaweedfs: - image: chrislusf/seaweedfs:4.34 + image: chrislusf/seaweedfs:4.47 deploy: resources: limits: @@ -266,7 +267,7 @@ services: networks: [fluxer] environment: GOMEMLIMIT: ${FLUXER_SEAWEEDFS_GOMEMLIMIT:-1536MiB} - command: ["server", "-s3", "-dir=/data"] + command: ["server", "-s3", "-dir=/data", "-master.telemetry=false"] volumes: - seaweedfs-data:/data healthcheck: @@ -277,7 +278,7 @@ services: start_period: 60s seaweedfs-init: - image: chrislusf/seaweedfs:4.34 + image: chrislusf/seaweedfs:4.47 deploy: resources: limits: diff --git a/fluxer_admin/Cargo.toml b/fluxer_admin/Cargo.toml index f0f9ddb37..539f9ea96 100644 --- a/fluxer_admin/Cargo.toml +++ b/fluxer_admin/Cargo.toml @@ -9,32 +9,32 @@ build = "build.rs" [dependencies] anyhow = "1.0.104" axum = { version = "0.8.9", features = ["macros"] } -base64 = "0.22.1" +base64 = "0.23.1" chrono = { version = "0.4", default-features = false, features = ["serde"] } -cookie = "0.18.1" +cookie = "0.18.2" fluxer_common = { path = "../fluxer_common" } hmac = "0.13.0" maud = { version = "0.27.0", features = ["axum"] } rand = "0.10" -regress = "0.11" -reqwest = { version = "0.13.4", default-features = false, features = ["json", "rustls"] } -serde = { version = "1.0.228", features = ["derive"] } -serde_json = "1.0.150" +regress = "0.12" +reqwest = { version = "0.13.5", default-features = false, features = ["json", "rustls"] } +serde = { version = "1.0.229", features = ["derive"] } +serde_json = "1.0.151" sha2 = "0.11.0" -time = { version = "0.3.47", features = ["formatting", "parsing"] } -tokio = { version = "1.52.3", features = ["macros", "net", "rt-multi-thread", "signal"] } +time = { version = "0.3.55", features = ["formatting", "parsing"] } +tokio = { version = "1.53.1", features = ["macros", "net", "rt-multi-thread", "signal"] } tower = { version = "0.5.3", features = ["util"] } -tower-http = { version = "0.6.11", features = ["compression-gzip", "trace"] } +tower-http = { version = "0.7.1", features = ["compression-gzip", "trace"] } tracing = "0.1.44" tracing-subscriber = { version = "0.3.23", features = ["env-filter"] } url = "2.5" urlencoding = "2.1.3" -progenitor-client = { version = "0.14.0", default-features = false } +progenitor-client = { version = "0.15.0", default-features = false } [build-dependencies] openapiv3 = "2.2.0" -prettyplease = "0.2" -progenitor = { version = "0.14.0", default-features = false } +prettyplease = "0.3" +progenitor = { version = "0.15.0", default-features = false } serde_json = "1" sha2 = "0.11.0" -syn = "2" +syn = "3" diff --git a/fluxer_admin/Dockerfile b/fluxer_admin/Dockerfile index c3ad53ac1..758ea5688 100644 --- a/fluxer_admin/Dockerfile +++ b/fluxer_admin/Dockerfile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: AGPL-3.0-or-later -FROM rust:1-bookworm AS builder +FROM rust:1-trixie AS builder ARG BUILD_VERSION="" ARG TARGETARCH @@ -9,7 +9,7 @@ WORKDIR /usr/src/app RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates nodejs npm pkg-config \ - && npm install -g pnpm@10.29.3 \ + && npm install -g pnpm@12.4.2 \ && rm -rf /var/lib/apt/lists/* RUN npm install --no-audit --no-fund @tailwindcss/cli@4.2.1 tailwindcss@4.2.1 @@ -57,7 +57,7 @@ RUN test "$(ls target/release/build/fluxer_admin-*/out/static/fonts/*.woff2 | wc && ls target/release/build/fluxer_admin-*/out/static/fonts/fonts.*.css \ && echo "Latin-core fonts bundled successfully" -FROM debian:bookworm-slim AS runtime +FROM debian:trixie-slim AS runtime ARG BUILD_VERSION="" ARG SOURCE_SHA="" diff --git a/fluxer_admin/build.rs b/fluxer_admin/build.rs index f250d05e0..2954bab76 100644 --- a/fluxer_admin/build.rs +++ b/fluxer_admin/build.rs @@ -54,9 +54,9 @@ fn generate_admin_api(manifest_dir: &Path, out_dir: &Path) { .generate_tokens(&spec) .expect("failed to generate admin API client"); - let content = prettyplease::unparse( + let content = relax_required_nullable_fields(&prettyplease::unparse( &syn::parse2::(tokens).expect("failed to parse generated tokens"), - ); + )); let output_path = out_dir.join("admin_api_generated.rs"); fs::write(&output_path, content).expect("failed to write generated API code"); @@ -190,6 +190,16 @@ fn object_schema_mut<'a>( const MAX_SCHEMA_REFERENCE_DEPTH: usize = 32; +fn relax_required_nullable_fields(generated: &str) -> String { + const PRESENCE_CHECK: &str = + "#[serde(deserialize_with = \"::std::option::Option::deserialize\")]"; + generated + .lines() + .filter(|line| line.trim() != PRESENCE_CHECK) + .flat_map(|line| [line, "\n"]) + .collect() +} + fn relax_progenitor_schema_strictness(spec: &mut openapiv3::OpenAPI) { let registry = spec.components.clone().unwrap_or_default(); diff --git a/fluxer_admin/openapi-admin.json b/fluxer_admin/openapi-admin.json index ead78390c..353d30e22 100644 --- a/fluxer_admin/openapi-admin.json +++ b/fluxer_admin/openapi-admin.json @@ -10541,13 +10541,13 @@ "created_at": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "expires_at": { "nullable": true, "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "max_uses": {"nullable": true, "type": "integer", "minimum": 1, "maximum": 9007199254740991}, "use_count": {"type": "integer", "minimum": 0, "maximum": 9007199254740991}, @@ -10555,14 +10555,14 @@ "nullable": true, "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "approval_required": {"type": "boolean"}, "last_used_at": { "nullable": true, "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "last_used_by_user_id": { "nullable": true, @@ -10598,7 +10598,7 @@ "requested_at": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "registration_url_id": {"nullable": true, "type": "string", "minLength": 1, "maxLength": 128}, "client_ip": {"nullable": true, "type": "string"} @@ -10855,12 +10855,14 @@ "min_lifetime_days": { "nullable": true, "type": "integer", + "minimum": 0, "exclusiveMinimum": true, "maximum": 9007199254740991 }, "max_lifetime_days": { "nullable": true, "type": "integer", + "minimum": 0, "exclusiveMinimum": true, "maximum": 9007199254740991 }, @@ -10868,12 +10870,14 @@ "renew_threshold_days": { "nullable": true, "type": "integer", + "minimum": 0, "exclusiveMinimum": true, "maximum": 9007199254740991 }, "renew_window_days": { "nullable": true, "type": "integer", + "minimum": 0, "exclusiveMinimum": true, "maximum": 9007199254740991 }, @@ -10884,15 +10888,31 @@ "min_size_mb": {"type": "number", "minimum": 0, "exclusiveMinimum": true}, "max_size_mb": {"type": "number", "minimum": 0, "exclusiveMinimum": true}, "max_eligible_size_mb": {"type": "number", "minimum": 0, "exclusiveMinimum": true}, - "min_lifetime_days": {"type": "integer", "exclusiveMinimum": true, "maximum": 9007199254740991}, - "max_lifetime_days": {"type": "integer", "exclusiveMinimum": true, "maximum": 9007199254740991}, - "curve": {"type": "number", "minimum": 0, "maximum": 1}, - "renew_threshold_days": { + "min_lifetime_days": { "type": "integer", + "minimum": 0, "exclusiveMinimum": true, "maximum": 9007199254740991 }, - "renew_window_days": {"type": "integer", "exclusiveMinimum": true, "maximum": 9007199254740991} + "max_lifetime_days": { + "type": "integer", + "minimum": 0, + "exclusiveMinimum": true, + "maximum": 9007199254740991 + }, + "curve": {"type": "number", "minimum": 0, "maximum": 1}, + "renew_threshold_days": { + "type": "integer", + "minimum": 0, + "exclusiveMinimum": true, + "maximum": 9007199254740991 + }, + "renew_window_days": { + "type": "integer", + "minimum": 0, + "exclusiveMinimum": true, + "maximum": 9007199254740991 + } }, "required": [ "enabled", @@ -10949,7 +10969,7 @@ "nullable": true, "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "max_uses": {"nullable": true, "type": "integer", "minimum": 1, "maximum": 1000000}, "approval_required": {"default": false, "type": "boolean"} @@ -10967,13 +10987,13 @@ "created_at": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "expires_at": { "nullable": true, "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "max_uses": {"nullable": true, "type": "integer", "minimum": 1, "maximum": 9007199254740991}, "use_count": {"type": "integer", "minimum": 0, "maximum": 9007199254740991}, @@ -10981,14 +11001,14 @@ "nullable": true, "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "approval_required": {"type": "boolean"}, "last_used_at": { "nullable": true, "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "last_used_by_user_id": { "nullable": true, @@ -11222,12 +11242,14 @@ "min_lifetime_days": { "nullable": true, "type": "integer", + "minimum": 0, "exclusiveMinimum": true, "maximum": 9007199254740991 }, "max_lifetime_days": { "nullable": true, "type": "integer", + "minimum": 0, "exclusiveMinimum": true, "maximum": 9007199254740991 }, @@ -11235,12 +11257,14 @@ "renew_threshold_days": { "nullable": true, "type": "integer", + "minimum": 0, "exclusiveMinimum": true, "maximum": 9007199254740991 }, "renew_window_days": { "nullable": true, "type": "integer", + "minimum": 0, "exclusiveMinimum": true, "maximum": 9007199254740991 } @@ -11272,7 +11296,7 @@ "properties": { "enabled": {"type": "boolean"}, "window_hours": {"type": "number", "minimum": 0, "exclusiveMinimum": true, "maximum": 8760}, - "member_threshold": {"type": "integer", "exclusiveMinimum": true, "maximum": 1000000} + "member_threshold": {"type": "integer", "minimum": 0, "exclusiveMinimum": true, "maximum": 1000000} } } } @@ -12989,14 +13013,14 @@ "description": "ISO 8601 timestamp when the bot token was created", "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "client_secret_created_at": { "nullable": true, "description": "ISO 8601 timestamp when the client secret was created", "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "version": { "description": "The optimistic locking version of the application record", @@ -13424,7 +13448,7 @@ "timestamp": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "The ISO 8601 timestamp of when the message was created" }, "edited_timestamp": { @@ -13432,7 +13456,7 @@ "nullable": true, "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "pinned": {"type": "boolean", "description": "Whether the message is pinned"}, "mention_everyone": {"type": "boolean", "description": "Whether the message mentions @everyone"}, @@ -13532,7 +13556,7 @@ "nullable": true, "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" } }, "required": ["participants"], @@ -13569,7 +13593,7 @@ "timestamp": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "The ISO 8601 timestamp of when the message was created" }, "edited_timestamp": { @@ -13577,7 +13601,7 @@ "nullable": true, "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "pinned": {"type": "boolean", "description": "Whether the message is pinned"}, "mention_everyone": {"type": "boolean", "description": "Whether the message mentions @everyone"}, @@ -13677,7 +13701,7 @@ "nullable": true, "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" } }, "required": ["participants"], @@ -13841,7 +13865,7 @@ "timestamp": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "The ISO 8601 timestamp of when the original message was created" }, "edited_timestamp": { @@ -13849,7 +13873,7 @@ "nullable": true, "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "mentions": { "description": "The user IDs mentioned in the snapshot", @@ -14018,7 +14042,7 @@ "nullable": true, "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "description": {"description": "The description of the embed", "nullable": true, "type": "string"}, "author": { @@ -14230,7 +14254,7 @@ "nullable": true, "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "description": {"description": "The description of the embed", "nullable": true, "type": "string"}, "author": { @@ -15102,7 +15126,7 @@ "joined_at": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "ISO8601 timestamp of when the user joined the guild" }, "mute": {"type": "boolean", "description": "Whether the member is muted in voice channels"}, @@ -15112,7 +15136,7 @@ "nullable": true, "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, "profile_flags": {"nullable": true, "allOf": [{"$ref": "#/components/schemas/GuildMemberProfileFlags"}]}, "mention_flags": { diff --git a/fluxer_admin/src/api/bulk.rs b/fluxer_admin/src/api/bulk.rs index f6ed8409d..d81d7586b 100644 --- a/fluxer_admin/src/api/bulk.rs +++ b/fluxer_admin/src/api/bulk.rs @@ -14,8 +14,8 @@ impl AdminApiClient { audit_log_reason: Option<&str>, ) -> ApiResult { let body = generated_types::AdminBulkJobCreateRequest::UpdateUserFlags { - add_flags: user_flags(add_flags), - remove_flags: user_flags(remove_flags), + add_flags: user_flags(add_flags)?, + remove_flags: user_flags(remove_flags)?, user_ids: snowflakes(user_ids), }; self.post_typed_with_reason("/admin/bulk-jobs", &body, audit_log_reason) @@ -112,11 +112,13 @@ fn snowflakes(values: &[String]) -> Vec { values.iter().map(|value| snowflake(value)).collect() } -fn user_flags(values: &[String]) -> Vec { +fn user_flags(values: &[String]) -> ApiResult> { values .iter() - .cloned() - .map(generated_types::UserFlags::from) + .map(|value| { + generated_types::UserFlags::try_from(value.as_str()) + .map_err(|error| ApiError::Parse(error.to_string())) + }) .collect() } diff --git a/fluxer_admin/src/api/users.rs b/fluxer_admin/src/api/users.rs index 6e67665b6..5455c142b 100644 --- a/fluxer_admin/src/api/users.rs +++ b/fluxer_admin/src/api/users.rs @@ -95,8 +95,8 @@ impl AdminApiClient { remove_flags: &[String], ) -> ApiResult { let body = generated_types::AdminUserFlagsUpdateRequest { - add_flags: user_flags(add_flags), - remove_flags: user_flags(remove_flags), + add_flags: user_flags(add_flags)?, + remove_flags: user_flags(remove_flags)?, }; let response = self .generated() @@ -567,11 +567,13 @@ fn bool_param(value: bool) -> &'static str { if value { "true" } else { "false" } } -fn user_flags(values: &[String]) -> Vec { +fn user_flags(values: &[String]) -> ApiResult> { values .iter() - .cloned() - .map(generated_types::UserFlags::from) + .map(|value| { + generated_types::UserFlags::try_from(value.as_str()) + .map_err(|error| ApiError::Parse(error.to_string())) + }) .collect() } diff --git a/fluxer_api/Dockerfile b/fluxer_api/Dockerfile index f3781114f..bf4204878 100644 --- a/fluxer_api/Dockerfile +++ b/fluxer_api/Dockerfile @@ -1,11 +1,11 @@ # SPDX-License-Identifier: AGPL-3.0-or-later ARG BUILD_VERSION -FROM node:24-bookworm-slim AS base +FROM node:26-trixie-slim AS base WORKDIR /usr/src/app -RUN corepack enable && corepack prepare pnpm@10.29.3 --activate +RUN npm install -g pnpm@12.4.2 FROM base AS deploy @@ -23,9 +23,9 @@ COPY . . RUN pnpm install --frozen-lockfile RUN pnpm --filter fluxer_api run build -RUN pnpm deploy --legacy --filter=fluxer_api --prod --config.allowUnusedPatches=true /out +RUN pnpm deploy --legacy --filter=fluxer_api --prod --config.allow-unused-patches=true /out -FROM node:24-bookworm-slim +FROM node:26-trixie-slim ARG BUILD_VERSION ARG SOURCE_SHA @@ -45,32 +45,28 @@ LABEL app.fluxer.build-version="${BUILD_VERSION}" WORKDIR /usr/src/app/fluxer_api -RUN echo 'deb http://deb.debian.org/debian bookworm-backports main' > /etc/apt/sources.list.d/backports.list && \ - apt-get update && apt-get install -y --no-install-recommends \ +RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ ffmpeg \ libimage-exiftool-perl \ libwebp7 \ libwebpmux3 \ libheif1 \ - libvips42 && \ - apt-get install -y --no-install-recommends -t bookworm-backports \ libheif-plugin-libde265 \ - libheif-plugin-dav1d && \ + libheif-plugin-dav1d \ + libvips42t64 && \ rm -rf /var/lib/apt/lists/* -RUN corepack enable && corepack prepare pnpm@10.29.3 --activate +RUN npm install -g pnpm@12.4.2 COPY --from=deploy /out ./ COPY --from=deploy /usr/src/app/fluxer_api/dist ./dist COPY --from=deploy /usr/src/app/tsconfigs /usr/src/app/tsconfigs RUN rm -rf pkgs && \ - mkdir -p /usr/src/app/.cache/corepack && \ chown -R 65532:65532 /usr/src/app ENV HOME=/usr/src/app -ENV COREPACK_HOME=/usr/src/app/.cache/corepack ENV NODE_ENV=production ENV NODE_OPTIONS="--enable-source-maps" ENV NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt diff --git a/fluxer_api/package.json b/fluxer_api/package.json index 313726b8a..30809dff3 100644 --- a/fluxer_api/package.json +++ b/fluxer_api/package.json @@ -5,19 +5,19 @@ "scripts": { "build": "node scripts/build.mjs", "test": "vitest run", - "typecheck": "tsgo --noEmit", + "typecheck": "tsc --noEmit", "dev": "tsx watch --clear-screen=false src/AppEntrypoint.ts", "start": "tsx src/AppEntrypoint.ts", "start:worker": "tsx src/WorkerEntrypoint.ts" }, "dependencies": { "@atproto/api": "catalog:", + "@atproto/jwk-jose": "catalog:", + "@atproto/oauth-client-node": "catalog:", "@aws-sdk/client-s3": "catalog:", "@aws-sdk/lib-storage": "catalog:", "@aws-sdk/s3-request-presigner": "catalog:", - "@bluesky-social/jwk-jose": "catalog:", - "@bluesky-social/oauth-client-node": "catalog:", - "@bufbuild/protobuf": "^2.12.0", + "@bufbuild/protobuf": "^2.15.0", "@elastic/elasticsearch": "catalog:", "@fluxer/config": "workspace:*", "@fluxer/constants": "workspace:*", @@ -34,6 +34,8 @@ "@hono/node-server": "catalog:", "@messageformat/core": "catalog:", "@messageformat/parser": "catalog:", + "@nats-io/jetstream": "catalog:", + "@nats-io/transport-node": "catalog:", "@pkgs/cache": "workspace:*", "@pkgs/captcha": "workspace:*", "@pkgs/cassandra": "workspace:*", @@ -71,7 +73,6 @@ "lodash": "catalog:", "maxmind": "catalog:", "mime": "catalog:", - "nats": "catalog:", "nodemailer": "catalog:", "pg": "catalog:", "pino": "catalog:", @@ -88,10 +89,10 @@ "devDependencies": { "@types/archiver": "catalog:", "@types/lodash": "catalog:", - "@typescript/native-preview": "catalog:", "esbuild": "catalog:", "msw": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" }, - "packageManager": "pnpm@10.29.3" + "packageManager": "pnpm@12.4.2" } diff --git a/fluxer_api/pkgs/cache/package.json b/fluxer_api/pkgs/cache/package.json index 252242cba..bb7052c96 100644 --- a/fluxer_api/pkgs/cache/package.json +++ b/fluxer_api/pkgs/cache/package.json @@ -9,14 +9,14 @@ "scripts": { "test": "vitest run", "test:watch": "vitest", - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@pkgs/kv_client": "workspace:*" }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/fluxer_api/pkgs/captcha/package.json b/fluxer_api/pkgs/captcha/package.json index 311f7f467..7dbd367dd 100644 --- a/fluxer_api/pkgs/captcha/package.json +++ b/fluxer_api/pkgs/captcha/package.json @@ -7,7 +7,7 @@ "./*": "./*" }, "scripts": { - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@fluxer/logger": "workspace:*", @@ -15,6 +15,6 @@ }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:" + "typescript": "catalog:ts7" } } diff --git a/fluxer_api/pkgs/cassandra/package.json b/fluxer_api/pkgs/cassandra/package.json index 95434e9cf..aea2993cf 100644 --- a/fluxer_api/pkgs/cassandra/package.json +++ b/fluxer_api/pkgs/cassandra/package.json @@ -7,13 +7,13 @@ "./*": "./*" }, "scripts": { - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "cassandra-driver": "catalog:" }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:" + "typescript": "catalog:ts7" } } diff --git a/fluxer_api/pkgs/elasticsearch_search/package.json b/fluxer_api/pkgs/elasticsearch_search/package.json index c625a9b25..0c884eea9 100644 --- a/fluxer_api/pkgs/elasticsearch_search/package.json +++ b/fluxer_api/pkgs/elasticsearch_search/package.json @@ -7,7 +7,7 @@ "./*": "./*" }, "scripts": { - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@elastic/elasticsearch": "catalog:", @@ -15,6 +15,6 @@ }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:" + "typescript": "catalog:ts7" } } diff --git a/fluxer_api/pkgs/email/package.json b/fluxer_api/pkgs/email/package.json index 96ee1cbed..dd54e5242 100644 --- a/fluxer_api/pkgs/email/package.json +++ b/fluxer_api/pkgs/email/package.json @@ -9,7 +9,7 @@ "scripts": { "test": "vitest run", "test:watch": "vitest", - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@fluxer/i18n": "workspace:*", @@ -19,8 +19,7 @@ }, "devDependencies": { "@types/node": "catalog:", - "@types/nodemailer": "catalog:", - "@typescript/native-preview": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/fluxer_api/pkgs/email/src/SmtpEmailProvider.ts b/fluxer_api/pkgs/email/src/SmtpEmailProvider.ts index e5153fb73..c52a171b4 100644 --- a/fluxer_api/pkgs/email/src/SmtpEmailProvider.ts +++ b/fluxer_api/pkgs/email/src/SmtpEmailProvider.ts @@ -2,7 +2,7 @@ import {createLogger} from '@fluxer/logger/src/Logger'; import type {EmailMessage, IEmailProvider} from '@pkgs/email/src/EmailProviderTypes'; -import nodemailer from 'nodemailer'; +import nodemailer, {type Transporter} from 'nodemailer'; const logger = createLogger('@pkgs/email/src/SmtpEmailProvider'); @@ -18,7 +18,7 @@ interface SmtpEmailConfig { } export class SmtpEmailProvider implements IEmailProvider { - private readonly transporter: nodemailer.Transporter; + private readonly transporter: Transporter; constructor(config: SmtpEmailConfig) { this.transporter = nodemailer.createTransport({ diff --git a/fluxer_api/pkgs/geoip/package.json b/fluxer_api/pkgs/geoip/package.json index 8aa6492f0..fd602c995 100644 --- a/fluxer_api/pkgs/geoip/package.json +++ b/fluxer_api/pkgs/geoip/package.json @@ -7,7 +7,7 @@ "./*": "./*" }, "scripts": { - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@aws-sdk/client-s3": "catalog:", @@ -21,6 +21,6 @@ }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:" + "typescript": "catalog:ts7" } } diff --git a/fluxer_api/pkgs/geoip/src/GeoipStartup.ts b/fluxer_api/pkgs/geoip/src/GeoipStartup.ts index 6d05d5e6b..61129625c 100644 --- a/fluxer_api/pkgs/geoip/src/GeoipStartup.ts +++ b/fluxer_api/pkgs/geoip/src/GeoipStartup.ts @@ -67,7 +67,7 @@ interface GeoipRuntimePathOptions { } export function parseGeoipSourceConfig(rawValue: string | undefined): GeoipSourceConfig { - if (!rawValue || !rawValue.startsWith('s3://')) { + if (!rawValue?.startsWith('s3://')) { return createGeoipFilesystemSourceConfig(rawValue); } return parseGeoipS3SourceConfig(rawValue); diff --git a/fluxer_api/pkgs/http_client/package.json b/fluxer_api/pkgs/http_client/package.json index 07769a4a3..f1796d417 100644 --- a/fluxer_api/pkgs/http_client/package.json +++ b/fluxer_api/pkgs/http_client/package.json @@ -9,7 +9,7 @@ "scripts": { "test": "vitest run", "test:watch": "vitest", - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@fluxer/constants": "workspace:*", @@ -17,8 +17,7 @@ }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:", - "undici-types": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/fluxer_api/pkgs/http_client/src/HttpClient.ts b/fluxer_api/pkgs/http_client/src/HttpClient.ts index 6bf25e7ed..639e62e8c 100644 --- a/fluxer_api/pkgs/http_client/src/HttpClient.ts +++ b/fluxer_api/pkgs/http_client/src/HttpClient.ts @@ -16,6 +16,7 @@ import { } from '@pkgs/http_client/src/HttpClientRequestInternals'; import type {HttpClientMetrics, HttpClientTelemetry} from '@pkgs/http_client/src/HttpClientTelemetryTypes'; import type { + FetchDispatcher, HttpClient, HttpClientFactoryOptions, HttpMethod, @@ -26,7 +27,6 @@ import type { StreamResponse, } from '@pkgs/http_client/src/HttpClientTypes'; import {HttpError} from '@pkgs/http_client/src/HttpError'; -import type {Dispatcher} from 'undici-types'; const DEFAULT_SERVICE_NAME = 'unknown'; @@ -79,7 +79,7 @@ function createFetchInit( headers: Headers, body: string | undefined, signal: AbortSignal, - dispatcher: Dispatcher | undefined, + dispatcher: FetchDispatcher | undefined, ): RequestInit { return { method, diff --git a/fluxer_api/pkgs/http_client/src/HttpClientTypes.ts b/fluxer_api/pkgs/http_client/src/HttpClientTypes.ts index 139d32487..a654fa0ea 100644 --- a/fluxer_api/pkgs/http_client/src/HttpClientTypes.ts +++ b/fluxer_api/pkgs/http_client/src/HttpClientTypes.ts @@ -1,9 +1,9 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import type {HttpClientTelemetry} from '@pkgs/http_client/src/HttpClientTelemetryTypes'; -import type {Dispatcher} from 'undici-types'; export type ResponseStream = ReadableStream | null; +export type FetchDispatcher = NonNullable; export type HttpMethod = 'GET' | 'POST' | 'HEAD' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS'; export type RequestUrlValidationPhase = 'initial' | 'redirect'; @@ -14,7 +14,7 @@ export interface RequestUrlValidationContext { } export interface RequestUrlPolicy { - readonly dispatcher?: Dispatcher; + readonly dispatcher?: FetchDispatcher; validate(url: URL, context: RequestUrlValidationContext): Promise; } diff --git a/fluxer_api/pkgs/http_client/src/PublicInternetRequestUrlPolicy.ts b/fluxer_api/pkgs/http_client/src/PublicInternetRequestUrlPolicy.ts index 7481e9a7c..bb7a4b25a 100644 --- a/fluxer_api/pkgs/http_client/src/PublicInternetRequestUrlPolicy.ts +++ b/fluxer_api/pkgs/http_client/src/PublicInternetRequestUrlPolicy.ts @@ -5,10 +5,13 @@ import dns from 'node:dns'; import type {LookupFunction} from 'node:net'; import {BlockList, isIP} from 'node:net'; import {formatUrlForDiagnostics} from '@pkgs/http_client/src/HttpClientDiagnostics'; -import type {RequestUrlPolicy, RequestUrlValidationContext} from '@pkgs/http_client/src/HttpClientTypes'; +import type { + FetchDispatcher, + RequestUrlPolicy, + RequestUrlValidationContext, +} from '@pkgs/http_client/src/HttpClientTypes'; import {HttpError} from '@pkgs/http_client/src/HttpError'; -import {Agent} from 'undici'; -import type {Dispatcher} from 'undici-types'; +import {Agent, Dispatcher1Wrapper} from 'undici'; const DEFAULT_DNS_CACHE_TTL_MS = 60000; const DNS_CACHE_MAX_ENTRIES = 10000; @@ -223,7 +226,7 @@ async function defaultLookupHost(hostname: string): Promise> { return addresses.map((addressEntry) => addressEntry.address); } -function createBlocklistDispatcher(allowPrivateAddresses: boolean): Dispatcher { +function createBlocklistDispatcher(allowPrivateAddresses: boolean): FetchDispatcher { const lookup: LookupFunction = (hostname, options, callback) => { dns.lookup(hostname, {...options, all: true, order: options.order ?? 'verbatim'}, (error, addresses) => { if (error) { @@ -246,15 +249,18 @@ function createBlocklistDispatcher(allowPrivateAddresses: boolean): Dispatcher { callback(null, primary.address, primary.family); }); }; - return new Agent({ - connect: { - lookup, - }, - }) as unknown as Dispatcher; + return new Dispatcher1Wrapper( + new Agent({ + allowH2: false, + connect: { + lookup, + }, + }), + ) as unknown as FetchDispatcher; } interface PublicInternetRequestUrlPolicy extends RequestUrlPolicy { - readonly dispatcher: Dispatcher; + readonly dispatcher: FetchDispatcher; } export function createPublicInternetRequestUrlPolicy( diff --git a/fluxer_api/pkgs/kv_client/package.json b/fluxer_api/pkgs/kv_client/package.json index 0641f3390..0224e1702 100644 --- a/fluxer_api/pkgs/kv_client/package.json +++ b/fluxer_api/pkgs/kv_client/package.json @@ -9,7 +9,7 @@ "scripts": { "test": "vitest run", "test:watch": "vitest", - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@fluxer/constants": "workspace:*", @@ -18,7 +18,7 @@ }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/fluxer_api/pkgs/kv_client/src/KVClient.ts b/fluxer_api/pkgs/kv_client/src/KVClient.ts index 8203e7b88..7fd1712bd 100644 --- a/fluxer_api/pkgs/kv_client/src/KVClient.ts +++ b/fluxer_api/pkgs/kv_client/src/KVClient.ts @@ -295,6 +295,7 @@ export class KVClient implements IKVProvider { connectTimeout: this.timeoutMs, commandTimeout: this.timeoutMs, maxRetriesPerRequest: 1, + protocol: 2, retryStrategy: createRetryStrategy(), }); } @@ -311,6 +312,7 @@ export class KVClient implements IKVProvider { connectTimeout: clusterConfig.timeoutMs, commandTimeout: clusterConfig.timeoutMs, maxRetriesPerRequest: 1, + protocol: 2, }, scaleReads: 'master', ...(hasNatMap ? {natMap} : {}), diff --git a/fluxer_api/pkgs/kv_client/src/KVSubscription.ts b/fluxer_api/pkgs/kv_client/src/KVSubscription.ts index 8237e08d6..f481b623f 100644 --- a/fluxer_api/pkgs/kv_client/src/KVSubscription.ts +++ b/fluxer_api/pkgs/kv_client/src/KVSubscription.ts @@ -72,6 +72,7 @@ export class KVSubscription implements IKVSubscription { connectTimeout: this.timeoutMs, commandTimeout: this.timeoutMs, maxRetriesPerRequest: 1, + protocol: 2, retryStrategy: createRetryStrategy(), }; const connection = this.mode === 'cluster' ? resolveKVClusterConnection(this.url, this.clusterNodes) : null; diff --git a/fluxer_api/pkgs/locale/package.json b/fluxer_api/pkgs/locale/package.json index 73c0222a7..406997617 100644 --- a/fluxer_api/pkgs/locale/package.json +++ b/fluxer_api/pkgs/locale/package.json @@ -9,14 +9,14 @@ "scripts": { "test": "vitest run", "test:watch": "vitest", - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@fluxer/constants": "workspace:*" }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/fluxer_api/pkgs/media_proxy_utils/package.json b/fluxer_api/pkgs/media_proxy_utils/package.json index 856e5dc13..df03a0d56 100644 --- a/fluxer_api/pkgs/media_proxy_utils/package.json +++ b/fluxer_api/pkgs/media_proxy_utils/package.json @@ -31,13 +31,13 @@ "scripts": { "test": "vitest run", "test:watch": "vitest", - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@types/node": "catalog:" }, "devDependencies": { - "@typescript/native-preview": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/fluxer_api/pkgs/mime_utils/package.json b/fluxer_api/pkgs/mime_utils/package.json index 19195750c..3513ccb64 100644 --- a/fluxer_api/pkgs/mime_utils/package.json +++ b/fluxer_api/pkgs/mime_utils/package.json @@ -10,13 +10,13 @@ "./*": "./*" }, "scripts": { - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "mime": "catalog:" }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:" + "typescript": "catalog:ts7" } } diff --git a/fluxer_api/pkgs/nats/package.json b/fluxer_api/pkgs/nats/package.json index 1777aad47..44036431e 100644 --- a/fluxer_api/pkgs/nats/package.json +++ b/fluxer_api/pkgs/nats/package.json @@ -7,13 +7,14 @@ "./*": "./*" }, "scripts": { - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { - "nats": "catalog:" + "@nats-io/jetstream": "catalog:", + "@nats-io/transport-node": "catalog:" }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:" + "typescript": "catalog:ts7" } } diff --git a/fluxer_api/pkgs/nats/src/INatsConnectionManager.ts b/fluxer_api/pkgs/nats/src/INatsConnectionManager.ts index 391efd4ae..15b82d1bd 100644 --- a/fluxer_api/pkgs/nats/src/INatsConnectionManager.ts +++ b/fluxer_api/pkgs/nats/src/INatsConnectionManager.ts @@ -1,6 +1,6 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import type {NatsConnection} from 'nats'; +import type {NatsConnection} from '@nats-io/transport-node'; export interface INatsConnectionManager { connect(): Promise; diff --git a/fluxer_api/pkgs/nats/src/JetStreamConnectionManager.ts b/fluxer_api/pkgs/nats/src/JetStreamConnectionManager.ts index 444f77a72..59df9b491 100644 --- a/fluxer_api/pkgs/nats/src/JetStreamConnectionManager.ts +++ b/fluxer_api/pkgs/nats/src/JetStreamConnectionManager.ts @@ -1,14 +1,14 @@ // SPDX-License-Identifier: AGPL-3.0-or-later +import {type JetStreamClient, type JetStreamManager, jetstream, jetstreamManager} from '@nats-io/jetstream'; import {NatsConnectionManager} from '@pkgs/nats/src/NatsConnectionManager'; -import type {JetStreamClient, JetStreamManager} from 'nats'; export class JetStreamConnectionManager extends NatsConnectionManager { getJetStreamClient(): JetStreamClient { - return this.getConnection().jetstream(); + return jetstream(this.getConnection()); } async getJetStreamManager(): Promise { - return this.getConnection().jetstreamManager(); + return jetstreamManager(this.getConnection()); } } diff --git a/fluxer_api/pkgs/nats/src/NatsConnectionManager.ts b/fluxer_api/pkgs/nats/src/NatsConnectionManager.ts index 3f47fb8c6..614143e6f 100644 --- a/fluxer_api/pkgs/nats/src/NatsConnectionManager.ts +++ b/fluxer_api/pkgs/nats/src/NatsConnectionManager.ts @@ -1,8 +1,8 @@ // SPDX-License-Identifier: AGPL-3.0-or-later +import {connect, DrainingConnectionError, type NatsConnection} from '@nats-io/transport-node'; import type {INatsConnectionManager} from '@pkgs/nats/src/INatsConnectionManager'; import type {NatsConnectionOptions} from '@pkgs/nats/src/NatsConnectionOptions'; -import {connect, ErrorCode, type NatsConnection, NatsError} from 'nats'; const DEFAULT_MAX_RECONNECT_ATTEMPTS = -1; const DEFAULT_RECONNECT_TIME_WAIT_MS = 500; @@ -46,7 +46,7 @@ export class NatsConnectionManager implements INatsConnectionManager { }); await this.connectPromise; if (generation !== this.drainGeneration) { - throw NatsError.errorForCode(ErrorCode.ConnectionDraining); + throw new DrainingConnectionError(); } } @@ -139,7 +139,7 @@ export class NatsConnectionManager implements INatsConnectionManager { private assertNotDraining(): void { if (this.drainPromise !== null) { - throw NatsError.errorForCode(ErrorCode.ConnectionDraining); + throw new DrainingConnectionError(); } } diff --git a/fluxer_api/pkgs/postgres/package.json b/fluxer_api/pkgs/postgres/package.json index 446a69b45..16471111c 100644 --- a/fluxer_api/pkgs/postgres/package.json +++ b/fluxer_api/pkgs/postgres/package.json @@ -7,7 +7,7 @@ "./*": "./*" }, "scripts": { - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "pg": "catalog:" @@ -15,6 +15,6 @@ "devDependencies": { "@types/node": "catalog:", "@types/pg": "catalog:", - "@typescript/native-preview": "catalog:" + "typescript": "catalog:ts7" } } diff --git a/fluxer_api/pkgs/rate_limit/package.json b/fluxer_api/pkgs/rate_limit/package.json index ed38baec1..880882f74 100644 --- a/fluxer_api/pkgs/rate_limit/package.json +++ b/fluxer_api/pkgs/rate_limit/package.json @@ -7,13 +7,13 @@ "./*": "./*" }, "scripts": { - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@pkgs/kv_client": "workspace:*" }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:" + "typescript": "catalog:ts7" } } diff --git a/fluxer_api/pkgs/sms/package.json b/fluxer_api/pkgs/sms/package.json index fb9149e9b..ff2b80833 100644 --- a/fluxer_api/pkgs/sms/package.json +++ b/fluxer_api/pkgs/sms/package.json @@ -9,7 +9,7 @@ "scripts": { "test": "vitest run", "test:watch": "vitest", - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@fluxer/constants": "workspace:*", @@ -18,7 +18,7 @@ }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/fluxer_api/pkgs/sms/src/__tests__/TwilioSmsProvider.test.ts b/fluxer_api/pkgs/sms/src/__tests__/TwilioSmsProvider.test.ts index 276f58b2c..de6500cff 100644 --- a/fluxer_api/pkgs/sms/src/__tests__/TwilioSmsProvider.test.ts +++ b/fluxer_api/pkgs/sms/src/__tests__/TwilioSmsProvider.test.ts @@ -38,7 +38,7 @@ describe('TwilioSmsProvider', () => { const fetchStub: typeof fetch = async (_input, init) => { capturedRequest = { url: String(_input), - authHeader: (init?.headers as Record).Authorization, + authHeader: (init?.headers as Record)?.Authorization, body: init?.body as string, }; return new Response(JSON.stringify({success: true}), {status: 200}); @@ -65,7 +65,7 @@ describe('TwilioSmsProvider', () => { const fetchStub: typeof fetch = async (_input, init) => { capturedRequest = { url: String(_input), - authHeader: (init?.headers as Record).Authorization, + authHeader: (init?.headers as Record)?.Authorization, body: init?.body as string, }; return new Response(JSON.stringify({channel: 'auto'}), {status: 200}); @@ -232,7 +232,7 @@ describe('TwilioSmsProvider', () => { capturedRequest = { url: String(input), method: init?.method, - authHeader: (init?.headers as Record).Authorization, + authHeader: (init?.headers as Record)?.Authorization, }; return new Response( JSON.stringify({ diff --git a/fluxer_api/pkgs/sms/tsconfig.json b/fluxer_api/pkgs/sms/tsconfig.json index 1d0fb2e8a..97f2c7f13 100644 --- a/fluxer_api/pkgs/sms/tsconfig.json +++ b/fluxer_api/pkgs/sms/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfigs/package.json", "compilerOptions": { - "types": ["node"], "paths": { "@fluxer/*": ["../../../packages/*", "../../../packages/*/src/index.ts"], "@pkgs/*": ["../*"] diff --git a/fluxer_api/pkgs/virus_scan/package.json b/fluxer_api/pkgs/virus_scan/package.json index 534d895a2..c28af7071 100644 --- a/fluxer_api/pkgs/virus_scan/package.json +++ b/fluxer_api/pkgs/virus_scan/package.json @@ -7,7 +7,7 @@ "./*": "./*" }, "scripts": { - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@fluxer/logger": "workspace:*", @@ -15,6 +15,6 @@ }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:" + "typescript": "catalog:ts7" } } diff --git a/fluxer_api/pkgs/worker/package.json b/fluxer_api/pkgs/worker/package.json index dc0e6b928..78e90fafe 100644 --- a/fluxer_api/pkgs/worker/package.json +++ b/fluxer_api/pkgs/worker/package.json @@ -51,7 +51,7 @@ "./*": "./*" }, "scripts": { - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@fluxer/constants": "workspace:*", @@ -60,6 +60,6 @@ }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:" + "typescript": "catalog:ts7" } } diff --git a/fluxer_api/src/api/admin/services/AdminAuditService.ts b/fluxer_api/src/api/admin/services/AdminAuditService.ts index c7ad727db..efca62d28 100644 --- a/fluxer_api/src/api/admin/services/AdminAuditService.ts +++ b/fluxer_api/src/api/admin/services/AdminAuditService.ts @@ -84,7 +84,7 @@ export class AdminAuditService { }): Promise { const auditLogSearchService = getAuditLogSearchService(); const targetIdBigInt = data.target_id ? BigInt(data.target_id) : undefined; - if (!auditLogSearchService || !auditLogSearchService.isAvailable()) { + if (!auditLogSearchService?.isAvailable()) { return this.listAuditLogsFromDatabase({ adminUserId: data.admin_user_id, targetType: data.target_type, @@ -129,7 +129,7 @@ export class AdminAuditService { }): Promise { const auditLogSearchService = getAuditLogSearchService(); const targetIdBigInt = data.target_id ? BigInt(data.target_id) : undefined; - if (!auditLogSearchService || !auditLogSearchService.isAvailable()) { + if (!auditLogSearchService?.isAvailable()) { return this.listAuditLogsFromDatabase({ adminUserId: data.admin_user_id, targetType: data.target_type, diff --git a/fluxer_api/src/api/auth/AuthMfa.ts b/fluxer_api/src/api/auth/AuthMfa.ts index 8bf355a19..1558d1cb9 100644 --- a/fluxer_api/src/api/auth/AuthMfa.ts +++ b/fluxer_api/src/api/auth/AuthMfa.ts @@ -121,6 +121,7 @@ export async function generateWebAuthnRegistrationOptions(ctx: ApiContext, userI userName: user.username!, userDisplayName: user.username!, attestationType: 'none', + supportedAlgorithmIDs: [-8, -7, -257], excludeCredentials: existingCredentials.map((cred) => ({ id: cred.credentialId, transports: cred.transports @@ -174,6 +175,7 @@ export async function verifyWebAuthnRegistration( expectedOrigin, expectedRPID: rpID, requireUserVerification: false, + supportedAlgorithmIDs: [-8, -7, -257], }); } catch (error) { Logger.error({error, userId, expectedChallenge, rpID, expectedOrigin}, 'WebAuthn verification failed'); diff --git a/fluxer_api/src/api/auth/__tests__/PhoneGateOutcomes.test.ts b/fluxer_api/src/api/auth/__tests__/PhoneGateOutcomes.test.ts index 041a104fa..47767dd03 100644 --- a/fluxer_api/src/api/auth/__tests__/PhoneGateOutcomes.test.ts +++ b/fluxer_api/src/api/auth/__tests__/PhoneGateOutcomes.test.ts @@ -135,19 +135,14 @@ describe('reject reasons reaching the caller through the real gate', () => { REJECT_REASON_CODES.invalid_number, ); }); - it.each([ - 'landline', - 'tollFree', - 'premium', - 'sharedCost', - 'uan', - 'voicemail', - 'pager', - ] as const)('line_type_hard_rejected for %s says it is not a mobile', async (lineType) => { - expect(await codeFromVerify(MOBILE_US, {lookupResult: lookup({lineType})})).toBe( - REJECT_REASON_CODES.line_type_hard_rejected, - ); - }); + it.each(['landline', 'tollFree', 'premium', 'sharedCost', 'uan', 'voicemail', 'pager'] as const)( + 'line_type_hard_rejected for %s says it is not a mobile', + async (lineType) => { + expect(await codeFromVerify(MOBILE_US, {lookupResult: lookup({lineType})})).toBe( + REJECT_REASON_CODES.line_type_hard_rejected, + ); + }, + ); it('sms_pumping_risk_high routes to human review', async () => { expect(await codeFromVerify(MOBILE_US, {lookupResult: lookup({smsPumpingRiskScore: 100})})).toBe( REJECT_REASON_CODES.sms_pumping_risk_high, diff --git a/fluxer_api/src/api/bluesky/BlueskyOAuthService.ts b/fluxer_api/src/api/bluesky/BlueskyOAuthService.ts index c4e5e530c..018771242 100644 --- a/fluxer_api/src/api/bluesky/BlueskyOAuthService.ts +++ b/fluxer_api/src/api/bluesky/BlueskyOAuthService.ts @@ -20,7 +20,7 @@ import type { import type {BlueskyOAuthConfig, BlueskyOAuthKeyConfig} from '@app/api/config/APIConfig'; import {ConnectionCredentialRepository} from '@app/api/connection/ConnectionCredentialRepository'; import {Agent} from '@atproto/api'; -import {JoseKey} from '@bluesky-social/jwk-jose'; +import {JoseKey} from '@atproto/jwk-jose'; import { FetchError, NodeOAuthClient, @@ -28,7 +28,7 @@ import { type OAuthClientMetadataInput, OAuthResponseError, requestLocalLock, -} from '@bluesky-social/oauth-client-node'; +} from '@atproto/oauth-client-node'; import type {IKVProvider} from '@pkgs/kv_client/src/IKVProvider'; interface BlueskyClientConfiguration { diff --git a/fluxer_api/src/api/bluesky/BlueskyOAuthStores.ts b/fluxer_api/src/api/bluesky/BlueskyOAuthStores.ts index dbcb566d0..ed0a551ad 100644 --- a/fluxer_api/src/api/bluesky/BlueskyOAuthStores.ts +++ b/fluxer_api/src/api/bluesky/BlueskyOAuthStores.ts @@ -14,7 +14,7 @@ import { type NodeSavedSessionStore, type NodeSavedState, type NodeSavedStateStore, -} from '@bluesky-social/oauth-client-node'; +} from '@atproto/oauth-client-node'; import {SnowflakeType} from '@fluxer/schema/src/primitives/SchemaPrimitives'; import type {IKVProvider} from '@pkgs/kv_client/src/IKVProvider'; import {z} from 'zod'; diff --git a/fluxer_api/src/api/channel/repositories/MessageInteractionRepository.ts b/fluxer_api/src/api/channel/repositories/MessageInteractionRepository.ts index 053d85968..7eeedefef 100644 --- a/fluxer_api/src/api/channel/repositories/MessageInteractionRepository.ts +++ b/fluxer_api/src/api/channel/repositories/MessageInteractionRepository.ts @@ -107,7 +107,7 @@ export class MessageInteractionRepository extends IMessageInteractionRepository async removeChannelPin(channelId: ChannelID, messageId: MessageID): Promise { const message = await this.messageRepository.getMessage(channelId, messageId); - if (!message || !message.pinnedTimestamp) { + if (!message?.pinnedTimestamp) { return; } await deleteOneOrMany( diff --git a/fluxer_api/src/api/channel/services/channel_data/ChannelOperationsService.ts b/fluxer_api/src/api/channel/services/channel_data/ChannelOperationsService.ts index c4e4cbfee..3ff0b808e 100644 --- a/fluxer_api/src/api/channel/services/channel_data/ChannelOperationsService.ts +++ b/fluxer_api/src/api/channel/services/channel_data/ChannelOperationsService.ts @@ -617,7 +617,7 @@ export class ChannelOperationsService { auditLogReason: string | null; }): Promise { const channel = await this.channelRepository.channelData.findUnique(params.channelId); - if (!channel || !channel.guildId) throw new UnknownChannelError(); + if (!channel?.guildId) throw new UnknownChannelError(); const canManageRoles = await this.gatewayService.checkPermission({ guildId: channel.guildId, userId: params.userId, @@ -690,7 +690,7 @@ export class ChannelOperationsService { auditLogReason: string | null; }): Promise { const channel = await this.channelRepository.channelData.findUnique(params.channelId); - if (!channel || !channel.guildId) throw new UnknownChannelError(); + if (!channel?.guildId) throw new UnknownChannelError(); const canManageRoles = await this.gatewayService.checkPermission({ guildId: channel.guildId, userId: params.userId, diff --git a/fluxer_api/src/api/channel/services/message/MessageDeleteService.ts b/fluxer_api/src/api/channel/services/message/MessageDeleteService.ts index 9c26c684a..b3c677946 100644 --- a/fluxer_api/src/api/channel/services/message/MessageDeleteService.ts +++ b/fluxer_api/src/api/channel/services/message/MessageDeleteService.ts @@ -115,7 +115,7 @@ export class MessageDeleteService { }): Promise { const channelId = webhook.channelId!; const channel = await this.deps.channelRepository.channelData.findUnique(channelId); - if (!channel || !channel.guildId) { + if (!channel?.guildId) { throw new CannotExecuteOnDmError(); } const message = await this.deps.channelRepository.messages.getMessage(channelId, messageId); diff --git a/fluxer_api/src/api/channel/services/message/MessageHelpers.ts b/fluxer_api/src/api/channel/services/message/MessageHelpers.ts index 0fe6edd65..fa4baa086 100644 --- a/fluxer_api/src/api/channel/services/message/MessageHelpers.ts +++ b/fluxer_api/src/api/channel/services/message/MessageHelpers.ts @@ -312,7 +312,7 @@ function collectEmbedReferencedAttachmentCdnKeys(message: Message, ownKeys: Read const mediaPrefix = `${Config.endpoints.media}/`; const keys = new Set(); const consider = (url: string | null | undefined): void => { - if (!url || !url.startsWith(mediaPrefix)) { + if (!url?.startsWith(mediaPrefix)) { return; } const key = url.slice(mediaPrefix.length); diff --git a/fluxer_api/src/api/channel/services/message/MessageMentionService.ts b/fluxer_api/src/api/channel/services/message/MessageMentionService.ts index 4e79f52e9..e952ba4ee 100644 --- a/fluxer_api/src/api/channel/services/message/MessageMentionService.ts +++ b/fluxer_api/src/api/channel/services/message/MessageMentionService.ts @@ -94,7 +94,7 @@ export class MessageMentionService { referencedMessage?.authorId && referencedMessage.authorId !== message.authorId && !isDMChannel && - (!allowedMentions || allowedMentions.replied_user !== false); + allowedMentions?.replied_user !== false; if (shouldAddReferencedUser) { userMentions.add(referencedMessage!.authorId!); } diff --git a/fluxer_api/src/api/channel/services/message/MessagePersistenceService.ts b/fluxer_api/src/api/channel/services/message/MessagePersistenceService.ts index 00fa40470..1ccf98622 100644 --- a/fluxer_api/src/api/channel/services/message/MessagePersistenceService.ts +++ b/fluxer_api/src/api/channel/services/message/MessagePersistenceService.ts @@ -569,7 +569,7 @@ export class MessagePersistenceService { } const updatedSnapshots = message.messageSnapshots.map((snapshot, index) => { const edit = snapshotEdits[index]; - if (!edit || !edit.attachments || edit.attachments.length === 0) { + if (!edit?.attachments || edit.attachments.length === 0) { return snapshot.toMessageSnapshot(); } const snapshotRow = snapshot.toMessageSnapshot(); diff --git a/fluxer_api/src/api/channel/services/message/MessageProcessingService.ts b/fluxer_api/src/api/channel/services/message/MessageProcessingService.ts index 7d8beb131..02a9ab0b8 100644 --- a/fluxer_api/src/api/channel/services/message/MessageProcessingService.ts +++ b/fluxer_api/src/api/channel/services/message/MessageProcessingService.ts @@ -80,7 +80,7 @@ export class MessageProcessingService { requestCache: RequestCache; }): Promise { if (channel.guildId || channel.type !== ChannelTypes.DM) return; - if (!channel.recipientIds || channel.recipientIds.size !== 2) return; + if (channel.recipientIds?.size !== 2) return; const recipientIds = Array.from(channel.recipientIds); const openStates = await this.batchCheckDmChannelOpen(recipientIds, channelId); const closedRecipients = openStates.filter((state) => !state.isOpen); diff --git a/fluxer_api/src/api/channel/services/message/MessageResponseDataService.test.ts b/fluxer_api/src/api/channel/services/message/MessageResponseDataService.test.ts index a29a0eeb7..3e8590b32 100644 --- a/fluxer_api/src/api/channel/services/message/MessageResponseDataService.test.ts +++ b/fluxer_api/src/api/channel/services/message/MessageResponseDataService.test.ts @@ -7,8 +7,8 @@ import { } from '@app/api/channel/services/message/MessageResponseDataService'; import {Message} from '@app/api/models/Message'; import {MessageTypes} from '@fluxer/constants/src/ChannelConstants'; +import type {NatsConnection} from '@nats-io/transport-node'; import type {INatsConnectionManager} from '@pkgs/nats/src/INatsConnectionManager'; -import type {NatsConnection} from 'nats'; import {describe, expect, it} from 'vitest'; const encoder = new TextEncoder(); diff --git a/fluxer_api/src/api/channel/services/message/MessageResponseDataService.ts b/fluxer_api/src/api/channel/services/message/MessageResponseDataService.ts index cee36898c..e0fd644d9 100644 --- a/fluxer_api/src/api/channel/services/message/MessageResponseDataService.ts +++ b/fluxer_api/src/api/channel/services/message/MessageResponseDataService.ts @@ -11,7 +11,9 @@ import {isJsonRecord, parseJsonRecord, parseJsonWithGuard} from '@app/api/utils/ import type {MessageResponse} from '@fluxer/schema/src/domains/message/MessageResponseSchemas'; import type {INatsConnectionManager} from '@pkgs/nats/src/INatsConnectionManager'; import {NatsConnectionManager} from '@pkgs/nats/src/NatsConnectionManager'; -import {StringCodec} from 'nats'; + +const textEncoder = new TextEncoder(); +const textDecoder = new TextDecoder(); const MESSAGE_RESPONSE_SERVICE_SUBJECT = 'svc.messages'; const MESSAGE_RESPONSE_SERVICE_TIMEOUT_MS = 6000; @@ -79,8 +81,6 @@ function isMessageServiceResponse(value: unknown): value is MessageServiceRespon } export class MessageResponseDataService { - private readonly codec = StringCodec(); - constructor(private readonly connectionManager: INatsConnectionManager) {} async listMessages(params: { @@ -307,10 +307,10 @@ export class MessageResponseDataService { const connection = this.connectionManager.getConnection(); const response = await connection.request( MESSAGE_RESPONSE_SERVICE_SUBJECT, - this.codec.encode(JSON.stringify(payload)), + textEncoder.encode(JSON.stringify(payload)), {timeout: MESSAGE_RESPONSE_SERVICE_TIMEOUT_MS}, ); - const decoded = this.codec.decode(response.data); + const decoded = textDecoder.decode(response.data); const parsed = parseJsonWithGuard(decoded, isMessageServiceResponse); if (!parsed) { throwForSvcErrorReply('message-response-service', parseJsonRecord(decoded)); diff --git a/fluxer_api/src/api/channel/services/message/MessageSendService.ts b/fluxer_api/src/api/channel/services/message/MessageSendService.ts index 3b05d5a6b..195d9cd04 100644 --- a/fluxer_api/src/api/channel/services/message/MessageSendService.ts +++ b/fluxer_api/src/api/channel/services/message/MessageSendService.ts @@ -1059,7 +1059,7 @@ export class MessageSendService { }): Promise { const channelId = webhook.channelId!; const channel = await this.deps.channelRepository.channelData.findUnique(channelId); - if (!channel || !channel.guildId) { + if (!channel?.guildId) { throw new CannotExecuteOnDmError(); } const guild = await this.deps.gatewayService.getGuildData({ @@ -1245,7 +1245,7 @@ export class MessageSendService { }): Promise { const channelId = webhook.channelId!; const channel = await this.deps.channelRepository.channelData.findUnique(channelId); - if (!channel || !channel.guildId) { + if (!channel?.guildId) { throw new CannotExecuteOnDmError(); } const existingMessage = await this.deps.channelRepository.messages.getMessage(channelId, messageId); diff --git a/fluxer_api/src/api/connection/ConnectionCredentialRepository.ts b/fluxer_api/src/api/connection/ConnectionCredentialRepository.ts index aa647cf02..fe88cb179 100644 --- a/fluxer_api/src/api/connection/ConnectionCredentialRepository.ts +++ b/fluxer_api/src/api/connection/ConnectionCredentialRepository.ts @@ -13,7 +13,7 @@ import {executeConditional, fetchMany} from '@app/api/database/CassandraQueryExe import {type ConditionalWriteEntry, Db, validateTtlSeconds} from '@app/api/database/CassandraTypes'; import {USER_CONNECTION_CREDENTIAL_TYPE, type UserConnectionStorageRow} from '@app/api/database/types/ConnectionTypes'; import {UserConnections} from '@app/api/Tables'; -import {isAtprotoDid} from '@bluesky-social/oauth-client-node'; +import {isAtprotoDid} from '@atproto/oauth-client-node'; import {z} from 'zod'; type CredentialWrite = ConditionalWriteEntry; diff --git a/fluxer_api/src/api/csam/NcmecSubmissionService.ts b/fluxer_api/src/api/csam/NcmecSubmissionService.ts index 1becd0913..0647960f8 100644 --- a/fluxer_api/src/api/csam/NcmecSubmissionService.ts +++ b/fluxer_api/src/api/csam/NcmecSubmissionService.ts @@ -377,7 +377,7 @@ export class NcmecSubmissionService { async finalizeAttachmentReport(attachmentId: AttachmentID, requeueCount = 0): Promise { const submission = await this.deps.ncmecRepository.getAttachmentSubmission(attachmentId); - if (!submission || submission.status !== 'submitted' || submission.content_deleted_at) { + if (submission?.status !== 'submitted' || submission.content_deleted_at) { return; } if (submission.user_id === null) { @@ -439,7 +439,7 @@ export class NcmecSubmissionService { submissionUserId, refreshedWorkflow.archive_id, ); - if (!archive || !archive.completed_at) { + if (!archive?.completed_at) { await this.requeueFinalizer(attachmentId, requeueCount + 1); return; } diff --git a/fluxer_api/src/api/download/DesktopReleaseContract.ts b/fluxer_api/src/api/download/DesktopReleaseContract.ts index 84e9b15e5..553e10c5d 100644 --- a/fluxer_api/src/api/download/DesktopReleaseContract.ts +++ b/fluxer_api/src/api/download/DesktopReleaseContract.ts @@ -113,8 +113,7 @@ export function parseDesktopReleaseDescriptor(value: unknown): DesktopReleaseDes for (const rawAsset of value.assets) { const asset = parseDesktopReleaseAsset(rawAsset); if ( - !asset || - !asset.storage_key.startsWith(expectedStoragePrefix) || + !asset?.storage_key.startsWith(expectedStoragePrefix) || !asset.release_asset.startsWith(expectedReleasePrefix) || storageKeys.has(asset.storage_key) ) { diff --git a/fluxer_api/src/api/download/tests/DownloadService.release.test.ts b/fluxer_api/src/api/download/tests/DownloadService.release.test.ts index 1cab57027..6d938038c 100644 --- a/fluxer_api/src/api/download/tests/DownloadService.release.test.ts +++ b/fluxer_api/src/api/download/tests/DownloadService.release.test.ts @@ -228,19 +228,22 @@ describe('desktop release readiness', () => { it.each([ ['descriptor', `${RELEASES_PREFIX}/${V908}.json`], ['readiness marker', `${RELEASES_PREFIX}/${V908}.ready.json`], - ])('offers the manifest version when reading its release %s fails with a storage error', async (_name, failingKey) => { - const {service} = createService(incidentObjects(), (key) => { - if (key === failingKey) { - throw new S3ServiceException({ - name: 'SlowDown', - $fault: 'server', - $metadata: {httpStatusCode: 503}, - message: 'Please reduce your request rate.', - }); - } - }); - await expect(resolveLatest(service)).resolves.toEqual(latestOf(V908)); - }); + ])( + 'offers the manifest version when reading its release %s fails with a storage error', + async (_name, failingKey) => { + const {service} = createService(incidentObjects(), (key) => { + if (key === failingKey) { + throw new S3ServiceException({ + name: 'SlowDown', + $fault: 'server', + $metadata: {httpStatusCode: 503}, + message: 'Please reduce your request rate.', + }); + } + }); + await expect(resolveLatest(service)).resolves.toEqual(latestOf(V908)); + }, + ); it('still resolves the unpublished version through versioned routes', async () => { const objects: StoredObjects = new Map(); diff --git a/fluxer_api/src/api/gif/NatsGifProvider.ts b/fluxer_api/src/api/gif/NatsGifProvider.ts index c9b43f4dc..fabf89676 100644 --- a/fluxer_api/src/api/gif/NatsGifProvider.ts +++ b/fluxer_api/src/api/gif/NatsGifProvider.ts @@ -15,7 +15,9 @@ import { } from '@fluxer/schema/src/domains/gif/GifSchemas'; import type {INatsConnectionManager} from '@pkgs/nats/src/INatsConnectionManager'; import {NatsConnectionManager} from '@pkgs/nats/src/NatsConnectionManager'; -import {StringCodec} from 'nats'; + +const textEncoder = new TextEncoder(); +const textDecoder = new TextDecoder(); const GIF_SERVICE_SUBJECT = process.env.FLUXER_GIF_SERVICE_SUBJECT || 'svc.gifs'; const DEFAULT_GIF_SERVICE_TIMEOUT_MS = 12_000; @@ -137,7 +139,6 @@ function readResolved(value: unknown): GifResponse | null { class NatsGifProvider implements IGifProvider { readonly meta = GIF_PROVIDER_META; - private readonly codec = StringCodec(); constructor( private readonly connectionManager: INatsConnectionManager, @@ -256,8 +257,8 @@ class NatsGifProvider implements IGifProvider { await this.connectionManager.connect(); } const connection = this.connectionManager.getConnection(); - const response = await connection.request(this.subject, this.codec.encode(JSON.stringify(payload)), {timeout}); - const decoded = this.codec.decode(response.data); + const response = await connection.request(this.subject, textEncoder.encode(JSON.stringify(payload)), {timeout}); + const decoded = textDecoder.decode(response.data); const parsed = parseJsonUnknown(decoded); const failedMessage = readFailedMessage(parsed); if (failedMessage) { diff --git a/fluxer_api/src/api/guild/controllers/GuildMemberSearchController.ts b/fluxer_api/src/api/guild/controllers/GuildMemberSearchController.ts index 8560754fa..52d480bfc 100644 --- a/fluxer_api/src/api/guild/controllers/GuildMemberSearchController.ts +++ b/fluxer_api/src/api/guild/controllers/GuildMemberSearchController.ts @@ -99,7 +99,7 @@ export function GuildMemberSearchController(app: HonoApp) { return ctx.json(createEmptySearchResponse(guildIdString, false)); } const searchService = getGuildMemberSearchService(); - if (!searchService || !searchService.isAvailable()) { + if (!searchService?.isAvailable()) { return ctx.json(createEmptySearchResponse(guildIdString, false)); } const needsIndexing = guildMembersNeedReindexing(guild.membersIndexedAt); diff --git a/fluxer_api/src/api/guild/services/content/EmojiService.ts b/fluxer_api/src/api/guild/services/content/EmojiService.ts index 3358a8aa9..8b1bed186 100644 --- a/fluxer_api/src/api/guild/services/content/EmojiService.ts +++ b/fluxer_api/src/api/guild/services/content/EmojiService.ts @@ -157,7 +157,7 @@ export class EmojiService { const sourceEmoji = await this.guildRepository.getEmojiById(sourceEmojiId); if (!sourceEmoji) throw new UnknownGuildEmojiError(); const sourceGuild = await this.guildRepository.findUnique(sourceEmoji.guildId); - if (!sourceGuild || !sourceGuild.features.has(GuildFeatures.CLONE_EMOJI_ENABLED)) { + if (!sourceGuild?.features.has(GuildFeatures.CLONE_EMOJI_ENABLED)) { throw new MissingAccessError(); } const guildData = await this.contentHelpers.getGuildData({userId: user.id, guildId}); diff --git a/fluxer_api/src/api/guild/services/content/StickerService.ts b/fluxer_api/src/api/guild/services/content/StickerService.ts index d4e88c3b9..75a7331a8 100644 --- a/fluxer_api/src/api/guild/services/content/StickerService.ts +++ b/fluxer_api/src/api/guild/services/content/StickerService.ts @@ -171,7 +171,7 @@ export class StickerService { const sourceSticker = await this.guildRepository.getStickerById(sourceStickerId); if (!sourceSticker) throw new UnknownGuildStickerError(); const sourceGuild = await this.guildRepository.findUnique(sourceSticker.guildId); - if (!sourceGuild || !sourceGuild.features.has(GuildFeatures.CLONE_STICKER_ENABLED)) { + if (!sourceGuild?.features.has(GuildFeatures.CLONE_STICKER_ENABLED)) { throw new MissingAccessError(); } const guildData = await this.contentHelpers.getGuildData({userId: user.id, guildId}); diff --git a/fluxer_api/src/api/guild/tests/GuildAuditLogEntryMapper.test.ts b/fluxer_api/src/api/guild/tests/GuildAuditLogEntryMapper.test.ts index 8d2720268..a523ae711 100644 --- a/fluxer_api/src/api/guild/tests/GuildAuditLogEntryMapper.test.ts +++ b/fluxer_api/src/api/guild/tests/GuildAuditLogEntryMapper.test.ts @@ -343,21 +343,20 @@ describe('collectGuildAuditLogUserIds', () => { expect(userIdStrings(log)).toEqual([ACTOR_ID]); }); - it.each([ - AuditLogActionType.WEBHOOK_DELETE, - AuditLogActionType.EMOJI_DELETE, - AuditLogActionType.STICKER_DELETE, - ])('includes the creator of deleted content for action %i', (actionType) => { - const log = makeLog({ - actionType, - targetId: TARGET_ID, - changes: [ - {key: 'name', old_value: 'blob'}, - {key: 'creator_id', old_value: OTHER_ID}, - ], - }); - expect(userIdStrings(log)).toEqual([ACTOR_ID, OTHER_ID]); - }); + it.each([AuditLogActionType.WEBHOOK_DELETE, AuditLogActionType.EMOJI_DELETE, AuditLogActionType.STICKER_DELETE])( + 'includes the creator of deleted content for action %i', + (actionType) => { + const log = makeLog({ + actionType, + targetId: TARGET_ID, + changes: [ + {key: 'name', old_value: 'blob'}, + {key: 'creator_id', old_value: OTHER_ID}, + ], + }); + expect(userIdStrings(log)).toEqual([ACTOR_ID, OTHER_ID]); + }, + ); it.each(OVERWRITE_ACTIONS)('includes member overwrite targets for action %i', (actionType) => { const memberLog = makeLog({actionType, targetId: TARGET_ID, options: {type: '1', channel_id: OTHER_ID}}); diff --git a/fluxer_api/src/api/infrastructure/LiveKitService.ts b/fluxer_api/src/api/infrastructure/LiveKitService.ts index 931ea44a3..48099f1de 100644 --- a/fluxer_api/src/api/infrastructure/LiveKitService.ts +++ b/fluxer_api/src/api/infrastructure/LiveKitService.ts @@ -99,7 +99,7 @@ function createRoomServiceClient(endpoint: string, apiKey: string, apiSecret: st const httpUrl = toHttpUrl(endpoint); const parsed = new URL(httpUrl); const pathPrefix = parsed.pathname.replace(/\/+$/, ''); - const client = new RoomServiceClient(parsed.origin, apiKey, apiSecret); + const client = new RoomServiceClient(parsed.origin, apiKey, apiSecret, {requestTimeout: 60}); if (pathPrefix) { const rpc = Reflect.get(client, 'rpc'); if (rpc != null && typeof rpc === 'object' && 'prefix' in rpc) { diff --git a/fluxer_api/src/api/infrastructure/NatsGatewayRpcTransport.ts b/fluxer_api/src/api/infrastructure/NatsGatewayRpcTransport.ts index 624a0cb42..38a3b276e 100644 --- a/fluxer_api/src/api/infrastructure/NatsGatewayRpcTransport.ts +++ b/fluxer_api/src/api/infrastructure/NatsGatewayRpcTransport.ts @@ -3,8 +3,11 @@ import {GatewayRpcMethodError, GatewayRpcMethodErrorCodes} from '@app/api/infrastructure/GatewayRpcError'; import type {IGatewayRpcTransport} from '@app/api/infrastructure/IGatewayRpcTransport'; import {Logger} from '@app/api/Logger'; +import {type Msg, RequestError, TimeoutError} from '@nats-io/transport-node'; import type {INatsConnectionManager} from '@pkgs/nats/src/INatsConnectionManager'; -import {type Msg, StringCodec} from 'nats'; + +const textEncoder = new TextEncoder(); +const textDecoder = new TextDecoder(); const NATS_REQUEST_TIMEOUT_MS = 5000; const NATS_SUBJECT_PREFIX = 'rpc.gateway.'; @@ -15,26 +18,11 @@ interface NatsRpcResponse { error?: string; } -const NATS_NO_RESPONDERS_CODE = '503'; -const NATS_TIMEOUT_CODE = 'TIMEOUT'; - -function getErrorCode(error: Error): string | null { - if (!('code' in error)) { - return null; - } - const code = error.code; - return typeof code === 'string' ? code : null; -} - function mapNatsRpcTransportError(error: unknown): GatewayRpcMethodError | null { - if (!(error instanceof Error)) { - return null; - } - const code = getErrorCode(error); - if (code === NATS_NO_RESPONDERS_CODE || error.message === 'NO_RESPONDERS' || error.name === 'NoRespondersError') { + if (error instanceof RequestError && error.isNoResponders()) { return new GatewayRpcMethodError(GatewayRpcMethodErrorCodes.NO_RESPONDERS); } - if (code === NATS_TIMEOUT_CODE || error.message === 'TIMEOUT' || error.name === 'TimeoutError') { + if (error instanceof TimeoutError) { return new GatewayRpcMethodError(GatewayRpcMethodErrorCodes.TIMEOUT); } return null; @@ -64,7 +52,6 @@ function decodeNatsRpcResponse(responseText: string): NatsRpcResponse { export class NatsGatewayRpcTransport implements IGatewayRpcTransport { private readonly connectionManager: INatsConnectionManager; - private readonly codec = StringCodec(); constructor(connectionManager: INatsConnectionManager) { this.connectionManager = connectionManager; @@ -72,7 +59,7 @@ export class NatsGatewayRpcTransport implements IGatewayRpcTransport { async call(method: string, params: Record): Promise { const subject = `${NATS_SUBJECT_PREFIX}${method}`; - const payload = this.codec.encode(JSON.stringify(params)); + const payload = textEncoder.encode(JSON.stringify(params)); let responseMsg: Msg; try { if (this.connectionManager.isClosed()) { @@ -90,7 +77,7 @@ export class NatsGatewayRpcTransport implements IGatewayRpcTransport { } throw error; } - const responseText = this.codec.decode(responseMsg.data); + const responseText = textDecoder.decode(responseMsg.data); const response = decodeNatsRpcResponse(responseText); if (!response.ok) { throw new GatewayRpcMethodError(response.error ?? GatewayRpcMethodErrorCodes.INTERNAL_ERROR); diff --git a/fluxer_api/src/api/infrastructure/NatsUnfurlerService.test.ts b/fluxer_api/src/api/infrastructure/NatsUnfurlerService.test.ts index a39809d03..90a8fc69d 100644 --- a/fluxer_api/src/api/infrastructure/NatsUnfurlerService.test.ts +++ b/fluxer_api/src/api/infrastructure/NatsUnfurlerService.test.ts @@ -4,8 +4,8 @@ import {NatsUnfurlerService} from '@app/api/infrastructure/NatsUnfurlerService'; import {BadGatewayError} from '@fluxer/errors/src/domains/core/BadGatewayError'; import {GatewayTimeoutError} from '@fluxer/errors/src/domains/core/GatewayTimeoutError'; import {ServiceUnavailableError} from '@fluxer/errors/src/domains/core/ServiceUnavailableError'; +import {type NatsConnection, NoRespondersError, RequestError, TimeoutError} from '@nats-io/transport-node'; import type {INatsConnectionManager} from '@pkgs/nats/src/INatsConnectionManager'; -import {type NatsConnection, StringCodec} from 'nats'; import {describe, expect, it} from 'vitest'; interface FakeRequest { @@ -16,12 +16,7 @@ interface FakeRequest { const RESOLVED_REPLY = JSON.stringify({Resolved: {embeds: [], cache_ttl_seconds: null}}); -function natsErrorWithCode(code: string): Error { - return Object.assign(new Error('nats request failed'), {code}); -} - class FakeNatsConnectionManager implements INatsConnectionManager { - private readonly codec = StringCodec(); private closed = true; readonly requests: Array = []; connectCalls = 0; @@ -44,14 +39,14 @@ class FakeNatsConnectionManager implements INatsConnectionManager { request: async (subject: string, data: Uint8Array, options?: {timeout?: number}) => { this.requests.push({ subject, - body: JSON.parse(this.codec.decode(data)) as Record, + body: JSON.parse(new TextDecoder().decode(data)) as Record, timeout: options?.timeout, }); if (this.requestError) { throw this.requestError; } return { - data: this.codec.encode(this.replyText), + data: new TextEncoder().encode(this.replyText), }; }, } as unknown as NatsConnection; @@ -112,14 +107,17 @@ describe('NatsUnfurlerService', () => { }); it('rejects with a gateway timeout error when the request times out', async () => { - const manager = new FakeNatsConnectionManager(RESOLVED_REPLY, natsErrorWithCode('TIMEOUT')); + const manager = new FakeNatsConnectionManager(RESOLVED_REPLY, new TimeoutError()); const service = new NatsUnfurlerService(manager); await expect(service.unfurlWithCachePolicy('https://example.com')).rejects.toBeInstanceOf(GatewayTimeoutError); }); it('rejects with a service unavailable error when no responders answer', async () => { - const manager = new FakeNatsConnectionManager(RESOLVED_REPLY, natsErrorWithCode('503')); + const manager = new FakeNatsConnectionManager( + RESOLVED_REPLY, + new RequestError("no responders: 'svc.unfurl'", {cause: new NoRespondersError('svc.unfurl')}), + ); const service = new NatsUnfurlerService(manager); await expect(service.unfurlWithCachePolicy('https://example.com')).rejects.toBeInstanceOf(ServiceUnavailableError); diff --git a/fluxer_api/src/api/infrastructure/NatsUnfurlerService.ts b/fluxer_api/src/api/infrastructure/NatsUnfurlerService.ts index 3e953050a..d4d6d7659 100644 --- a/fluxer_api/src/api/infrastructure/NatsUnfurlerService.ts +++ b/fluxer_api/src/api/infrastructure/NatsUnfurlerService.ts @@ -10,14 +10,15 @@ import {GatewayTimeoutError} from '@fluxer/errors/src/domains/core/GatewayTimeou import {ServiceUnavailableError} from '@fluxer/errors/src/domains/core/ServiceUnavailableError'; import {FluxerError} from '@fluxer/errors/src/FluxerError'; import type {MessageEmbedResponse} from '@fluxer/schema/src/domains/message/EmbedSchemas'; +import {RequestError, TimeoutError} from '@nats-io/transport-node'; import type {INatsConnectionManager} from '@pkgs/nats/src/INatsConnectionManager'; -import {StringCodec} from 'nats'; + +const textEncoder = new TextEncoder(); +const textDecoder = new TextDecoder(); const NATS_UNFURL_SUBJECT = 'svc.unfurl'; const NATS_UNFURL_TIMEOUT_MS = 12000; const NATS_UNFURL_CACHE_ONLY_TIMEOUT_MS = 1000; -const NATS_NO_RESPONDERS_CODE = '503'; -const NATS_TIMEOUT_CODE = 'TIMEOUT'; interface NatsUnfurlRequest { op: 'Unfurl'; @@ -64,14 +65,10 @@ function mapUnfurlTransportError(error: unknown): Error { if (error instanceof FluxerError) { return error; } - if (!(error instanceof Error)) { - return new BadGatewayError({message: '[nats-unfurl] request failed'}); - } - const code = 'code' in error && typeof error.code === 'string' ? error.code : null; - if (code === NATS_NO_RESPONDERS_CODE || error.message === 'NO_RESPONDERS' || error.name === 'NoRespondersError') { + if (error instanceof RequestError && error.isNoResponders()) { return new ServiceUnavailableError({message: '[nats-unfurl] no unfurl service is answering'}); } - if (code === NATS_TIMEOUT_CODE || error.message === 'TIMEOUT' || error.name === 'TimeoutError') { + if (error instanceof TimeoutError) { return new GatewayTimeoutError({message: '[nats-unfurl] unfurl service did not answer in time'}); } return new BadGatewayError({message: '[nats-unfurl] request failed'}); @@ -79,7 +76,6 @@ function mapUnfurlTransportError(error: unknown): Error { export class NatsUnfurlerService extends IUnfurlerService { private readonly connectionManager: INatsConnectionManager; - private readonly codec = StringCodec(); constructor( connectionManager: INatsConnectionManager, @@ -109,11 +105,11 @@ export class NatsUnfurlerService extends IUnfurlerService { await this.connectionManager.connect(); } const connection = this.connectionManager.getConnection(); - const payload = this.codec.encode(JSON.stringify(request)); + const payload = textEncoder.encode(JSON.stringify(request)); const responseMsg = await connection.request(NATS_UNFURL_SUBJECT, payload, { timeout: options.cacheOnly === true ? NATS_UNFURL_CACHE_ONLY_TIMEOUT_MS : NATS_UNFURL_TIMEOUT_MS, }); - const responseText = this.codec.decode(responseMsg.data); + const responseText = textDecoder.decode(responseMsg.data); const response = parseJsonWithGuard(responseText, isNatsUnfurlResponse); if (!response) { throwForSvcErrorReply('nats-unfurl', parseJsonRecord(responseText)); diff --git a/fluxer_api/src/api/infrastructure/SnowflakeService.test.ts b/fluxer_api/src/api/infrastructure/SnowflakeService.test.ts index d1211fe06..e2c804b0f 100644 --- a/fluxer_api/src/api/infrastructure/SnowflakeService.test.ts +++ b/fluxer_api/src/api/infrastructure/SnowflakeService.test.ts @@ -1,8 +1,8 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import {SnowflakeService} from '@app/api/infrastructure/SnowflakeService'; +import type {NatsConnection} from '@nats-io/transport-node'; import type {INatsConnectionManager} from '@pkgs/nats/src/INatsConnectionManager'; -import {type NatsConnection, StringCodec} from 'nats'; import {afterEach, describe, expect, it} from 'vitest'; interface FakeRequest { @@ -18,7 +18,6 @@ interface FakeRequest { type FakeBatch = Array | {error: string}; class FakeNatsConnectionManager implements INatsConnectionManager { - private readonly codec = StringCodec(); private closed = true; private readonly batches: Array; readonly requests: Array = []; @@ -38,12 +37,12 @@ class FakeNatsConnectionManager implements INatsConnectionManager { } return { request: async (subject: string, data: Uint8Array, options?: {timeout?: number}) => { - const body = JSON.parse(this.codec.decode(data)) as FakeRequest['body']; + const body = JSON.parse(new TextDecoder().decode(data)) as FakeRequest['body']; this.requests.push({subject, body, timeout: options?.timeout}); const batch = this.batches.shift() ?? []; const response = Array.isArray(batch) ? {ids: batch} : batch; return { - data: this.codec.encode(JSON.stringify(response)), + data: new TextEncoder().encode(JSON.stringify(response)), }; }, } as unknown as NatsConnection; diff --git a/fluxer_api/src/api/infrastructure/SnowflakeService.ts b/fluxer_api/src/api/infrastructure/SnowflakeService.ts index d0728ce20..5d6375d8a 100644 --- a/fluxer_api/src/api/infrastructure/SnowflakeService.ts +++ b/fluxer_api/src/api/infrastructure/SnowflakeService.ts @@ -7,7 +7,9 @@ import {requireIntegerInRange} from '@app/api/utils/IntegerOptions'; import {isJsonRecord, parseJsonWithGuard} from '@app/api/utils/JsonBoundaryUtils'; import {ServiceUnavailableError} from '@fluxer/errors/src/domains/core/ServiceUnavailableError'; import type {INatsConnectionManager} from '@pkgs/nats/src/INatsConnectionManager'; -import {StringCodec} from 'nats'; + +const textEncoder = new TextEncoder(); +const textDecoder = new TextDecoder(); const DEFAULT_REMOTE_SUBJECT = 'svc.snowflakes'; const DEFAULT_REMOTE_BATCH_SIZE = 128; @@ -72,7 +74,6 @@ export class SnowflakeService implements ISnowflakeService { private readonly lowWatermark: number; private readonly requestTimeoutMs: number; private readonly maxBufferAgeMs: number; - private readonly codec = StringCodec(); private phase: 'idle' | 'starting' | 'ready' | 'stopping' | 'stopped' = 'idle'; private buffer: Array = []; private bufferOffset = 0; @@ -272,14 +273,14 @@ export class SnowflakeService implements ISnowflakeService { if (routingKey) { request.routing_key = routingKey; } - const responseMessage = await connection.request(this.subject, this.codec.encode(JSON.stringify(request)), { + const responseMessage = await connection.request(this.subject, textEncoder.encode(JSON.stringify(request)), { timeout: this.requestTimeoutMs, }); this.assertActive(); if (responseMessage.data.byteLength > MAX_REMOTE_RESPONSE_BYTES) { throw new Error('Snowflake service response exceeds the byte limit'); } - const response = parseJsonWithGuard(this.codec.decode(responseMessage.data), isRemoteSnowflakeResponse); + const response = parseJsonWithGuard(textDecoder.decode(responseMessage.data), isRemoteSnowflakeResponse); if (!response) { throw new Error('Snowflake service returned an invalid response'); } diff --git a/fluxer_api/src/api/infrastructure/StorageChangeFeed.ts b/fluxer_api/src/api/infrastructure/StorageChangeFeed.ts index d483999cc..8733be22e 100644 --- a/fluxer_api/src/api/infrastructure/StorageChangeFeed.ts +++ b/fluxer_api/src/api/infrastructure/StorageChangeFeed.ts @@ -1,8 +1,9 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import {Logger} from '@app/api/Logger'; +import {DiscardPolicy, JetStreamApiError, RetentionPolicy, StorageType} from '@nats-io/jetstream'; +import {nanos} from '@nats-io/transport-node'; import {JetStreamConnectionManager} from '@pkgs/nats/src/JetStreamConnectionManager'; -import {DiscardPolicy, NatsError, nanos, RetentionPolicy, StorageType} from 'nats'; export type StorageChangeOp = 'put' | 'delete'; @@ -68,10 +69,7 @@ function subjectToken(bucket: string): string { } function jsErrorCode(error: unknown): number | null { - if (!(error instanceof NatsError)) { - return null; - } - return error.jsError()?.err_code ?? null; + return error instanceof JetStreamApiError ? error.code : null; } export class StorageChangeFeed { diff --git a/fluxer_api/src/api/infrastructure/UsersServiceClient.test.ts b/fluxer_api/src/api/infrastructure/UsersServiceClient.test.ts index 5374787b0..e0ef4d260 100644 --- a/fluxer_api/src/api/infrastructure/UsersServiceClient.test.ts +++ b/fluxer_api/src/api/infrastructure/UsersServiceClient.test.ts @@ -3,8 +3,8 @@ import {createUserID} from '@app/api/BrandedTypes'; import {NatsUsersServiceClient} from '@app/api/infrastructure/UsersServiceClient'; import type {UserPartialResponse} from '@fluxer/schema/src/domains/user/UserResponseSchemas'; +import type {NatsConnection} from '@nats-io/transport-node'; import type {INatsConnectionManager} from '@pkgs/nats/src/INatsConnectionManager'; -import {type NatsConnection, StringCodec} from 'nats'; import {describe, expect, it} from 'vitest'; interface FakeRequest { @@ -14,7 +14,6 @@ interface FakeRequest { } class FakeNatsConnectionManager implements INatsConnectionManager { - private readonly codec = StringCodec(); private closed = true; private readonly responses: Array; readonly requests: Array = []; @@ -38,7 +37,7 @@ class FakeNatsConnectionManager implements INatsConnectionManager { request: async (subject: string, data: Uint8Array, options?: {timeout?: number}) => { this.requests.push({ subject, - body: JSON.parse(this.codec.decode(data)) as Record, + body: JSON.parse(new TextDecoder().decode(data)) as Record, timeout: options?.timeout, }); const response = this.responses.shift(); @@ -46,7 +45,7 @@ class FakeNatsConnectionManager implements INatsConnectionManager { throw response; } return { - data: this.codec.encode(JSON.stringify(response)), + data: new TextEncoder().encode(JSON.stringify(response)), }; }, } as unknown as NatsConnection; diff --git a/fluxer_api/src/api/infrastructure/UsersServiceClient.ts b/fluxer_api/src/api/infrastructure/UsersServiceClient.ts index 0c1d1bab8..58729cc40 100644 --- a/fluxer_api/src/api/infrastructure/UsersServiceClient.ts +++ b/fluxer_api/src/api/infrastructure/UsersServiceClient.ts @@ -10,7 +10,9 @@ import {isJsonRecord, parseJsonRecord, parseJsonWithGuard} from '@app/api/utils/ import type {UserPartialResponse} from '@fluxer/schema/src/domains/user/UserResponseSchemas'; import type {INatsConnectionManager} from '@pkgs/nats/src/INatsConnectionManager'; import {NatsConnectionManager} from '@pkgs/nats/src/NatsConnectionManager'; -import {StringCodec} from 'nats'; + +const textEncoder = new TextEncoder(); +const textDecoder = new TextDecoder(); const USERS_SERVICE_SUBJECT = process.env.FLUXER_USERS_SERVICE_SUBJECT || 'svc.users'; const DEFAULT_USERS_SERVICE_TIMEOUT_MS = 6000; @@ -49,7 +51,6 @@ function isUserPartialsResponse(value: unknown): value is UserPartialsResponse { } export class NatsUsersServiceClient implements IUsersServiceClient { - private readonly codec = StringCodec(); private readonly inflightPartials = new Map(); constructor( @@ -160,10 +161,10 @@ export class NatsUsersServiceClient implements IUsersServiceClient { await this.connectionManager.connect(); } const connection = this.connectionManager.getConnection(); - const response = await connection.request(this.subject, this.codec.encode(JSON.stringify(payload)), { + const response = await connection.request(this.subject, textEncoder.encode(JSON.stringify(payload)), { timeout: this.requestTimeoutMs, }); - const decoded = this.codec.decode(response.data); + const decoded = textDecoder.decode(response.data); const parsed = parseJsonWithGuard(decoded, responseGuard); if (parsed === null) { throwForSvcErrorReply('users-service', parseJsonRecord(decoded)); diff --git a/fluxer_api/src/api/instance/GatewayRolloutConfigPublisher.test.ts b/fluxer_api/src/api/instance/GatewayRolloutConfigPublisher.test.ts index 1381a07b6..bea6b1fac 100644 --- a/fluxer_api/src/api/instance/GatewayRolloutConfigPublisher.test.ts +++ b/fluxer_api/src/api/instance/GatewayRolloutConfigPublisher.test.ts @@ -5,8 +5,8 @@ import { GatewayRolloutConfigPublisher, } from '@app/api/instance/GatewayRolloutConfigPublisher'; import type {GatewayRolloutConfig} from '@fluxer/schema/src/domains/admin/GatewayRolloutSchemas'; +import type {NatsConnection} from '@nats-io/transport-node'; import type {INatsConnectionManager} from '@pkgs/nats/src/INatsConnectionManager'; -import {type NatsConnection, StringCodec} from 'nats'; import {describe, expect, it} from 'vitest'; interface FakePublish { @@ -15,7 +15,6 @@ interface FakePublish { } class FakeNatsConnectionManager implements INatsConnectionManager { - private readonly codec = StringCodec(); private closed = true; readonly publishes: Array = []; connectCalls = 0; @@ -34,7 +33,7 @@ class FakeNatsConnectionManager implements INatsConnectionManager { publish: (subject: string, data: Uint8Array) => { this.publishes.push({ subject, - body: JSON.parse(this.codec.decode(data)) as Record, + body: JSON.parse(new TextDecoder().decode(data)) as Record, }); }, flush: async () => { diff --git a/fluxer_api/src/api/instance/GatewayRolloutConfigPublisher.ts b/fluxer_api/src/api/instance/GatewayRolloutConfigPublisher.ts index 3e70cf988..c82a6002f 100644 --- a/fluxer_api/src/api/instance/GatewayRolloutConfigPublisher.ts +++ b/fluxer_api/src/api/instance/GatewayRolloutConfigPublisher.ts @@ -2,7 +2,8 @@ import type {GatewayRolloutConfig} from '@fluxer/schema/src/domains/admin/GatewayRolloutSchemas'; import type {INatsConnectionManager} from '@pkgs/nats/src/INatsConnectionManager'; -import {StringCodec} from 'nats'; + +const textEncoder = new TextEncoder(); export const GATEWAY_ROLLOUT_CONFIG_NATS_SUBJECT = 'config.gateway.rollout'; @@ -12,8 +13,6 @@ interface GatewayRolloutConfigNatsMessage { } export class GatewayRolloutConfigPublisher { - private readonly codec = StringCodec(); - constructor(private readonly connectionManager: INatsConnectionManager) {} async publish(config: GatewayRolloutConfig): Promise { @@ -25,7 +24,7 @@ export class GatewayRolloutConfigPublisher { type: 'gateway_rollout_config', config, }; - connection.publish(GATEWAY_ROLLOUT_CONFIG_NATS_SUBJECT, this.codec.encode(JSON.stringify(message))); + connection.publish(GATEWAY_ROLLOUT_CONFIG_NATS_SUBJECT, textEncoder.encode(JSON.stringify(message))); await connection.flush(); } } diff --git a/fluxer_api/src/api/middleware/OAuth2ScopeMiddleware.ts b/fluxer_api/src/api/middleware/OAuth2ScopeMiddleware.ts index fc0ac26a0..42e5163aa 100644 --- a/fluxer_api/src/api/middleware/OAuth2ScopeMiddleware.ts +++ b/fluxer_api/src/api/middleware/OAuth2ScopeMiddleware.ts @@ -18,7 +18,7 @@ function ensureBearerScope(ctx: Context, scope: OAuth2Scope, mode: OAut return false; } const oauthScopes = ctx.get('oauthBearerScopes'); - if (!oauthScopes || !oauthScopes.has(scope)) { + if (!oauthScopes?.has(scope)) { throw new MissingOAuthScopeError(scope); } return true; diff --git a/fluxer_api/src/api/middleware/tests/ResponseTypeMiddleware.test.ts b/fluxer_api/src/api/middleware/tests/ResponseTypeMiddleware.test.ts index a6ab3a632..823a06c29 100644 --- a/fluxer_api/src/api/middleware/tests/ResponseTypeMiddleware.test.ts +++ b/fluxer_api/src/api/middleware/tests/ResponseTypeMiddleware.test.ts @@ -52,46 +52,44 @@ describe('ResponseTypeMiddleware', () => { expect(await response.json()).toEqual({id: '123456789012345678'}); }); - test.each([ - undefined, - 'application/json', - 'application/json; charset=utf-8', - 'Application/JSON; charset=utf-8', - ])('rejects mismatching responses while validation is enabled (content type: %s)', async (responseContentType) => { - const app = new Hono(); - const middleware = - responseContentType === undefined - ? ResponseType(SnowflakeResponse) - : OpenAPI({ - operationId: 'get_invalid_snowflake_test', - summary: 'Get invalid snowflake', - description: 'Returns an invalid snowflake to verify JSON response validation.', - responseSchema: SnowflakeResponse, - responseContentType, - tags: ['Tests'], - }); - app.get('/snowflake', middleware, (ctx) => ctx.json({id: 'not-a-snowflake'})); - const errorLoggerSpy = vi.spyOn(Logger.prototype, 'error').mockImplementation(() => {}); + test.each([undefined, 'application/json', 'application/json; charset=utf-8', 'Application/JSON; charset=utf-8'])( + 'rejects mismatching responses while validation is enabled (content type: %s)', + async (responseContentType) => { + const app = new Hono(); + const middleware = + responseContentType === undefined + ? ResponseType(SnowflakeResponse) + : OpenAPI({ + operationId: 'get_invalid_snowflake_test', + summary: 'Get invalid snowflake', + description: 'Returns an invalid snowflake to verify JSON response validation.', + responseSchema: SnowflakeResponse, + responseContentType, + tags: ['Tests'], + }); + app.get('/snowflake', middleware, (ctx) => ctx.json({id: 'not-a-snowflake'})); + const errorLoggerSpy = vi.spyOn(Logger.prototype, 'error').mockImplementation(() => {}); - try { - const response = await app.request('/snowflake'); + try { + const response = await app.request('/snowflake'); - expect(response.status).toBe(500); - expect(errorLoggerSpy).toHaveBeenCalledTimes(1); - expect(errorLoggerSpy).toHaveBeenCalledWith( - { - body: {id: 'not-a-snowflake'}, - method: 'GET', - path: '/snowflake', - status: 200, - validationErrors: [{message: 'INVALID_SNOWFLAKE_FORMAT', path: 'id'}], - }, - 'Response validation failed', - ); - } finally { - errorLoggerSpy.mockRestore(); - } - }); + expect(response.status).toBe(500); + expect(errorLoggerSpy).toHaveBeenCalledTimes(1); + expect(errorLoggerSpy).toHaveBeenCalledWith( + { + body: {id: 'not-a-snowflake'}, + method: 'GET', + path: '/snowflake', + status: 200, + validationErrors: [{message: 'INVALID_SNOWFLAKE_FORMAT', path: 'id'}], + }, + 'Response validation failed', + ); + } finally { + errorLoggerSpy.mockRestore(); + } + }, + ); test('passes the response through untouched while validation is disabled', async () => { Config.dev.validateResponses = false; diff --git a/fluxer_api/src/api/oauth/BotAuthService.ts b/fluxer_api/src/api/oauth/BotAuthService.ts index 07101a5ba..1706d806d 100644 --- a/fluxer_api/src/api/oauth/BotAuthService.ts +++ b/fluxer_api/src/api/oauth/BotAuthService.ts @@ -35,7 +35,7 @@ export class BotAuthService { } const {applicationId, secret} = parsed; const application = await this.applicationRepository.getApplication(applicationId); - if (!application || !application.hasBotUser() || !application.botTokenHash) { + if (!application?.hasBotUser() || !application.botTokenHash) { return null; } try { diff --git a/fluxer_api/src/api/oauth/OAuth2RequestService.ts b/fluxer_api/src/api/oauth/OAuth2RequestService.ts index c020d657f..e2b4f4c2e 100644 --- a/fluxer_api/src/api/oauth/OAuth2RequestService.ts +++ b/fluxer_api/src/api/oauth/OAuth2RequestService.ts @@ -246,7 +246,7 @@ export class OAuth2RequestService { try { const applicationId = createApplicationID(BigInt(params.body.client_id)); const application = await this.applicationRepository.getApplication(applicationId); - if (!application || !application.botUserId) { + if (!application?.botUserId) { throw new NotABotApplicationError(); } const botUserId = application.botUserId; @@ -454,7 +454,7 @@ export class OAuth2RequestService { createApplicationID(params.applicationId), ); const application = await this.applicationRepository.getApplication(createApplicationID(params.applicationId)); - if (!application || !application.botUserId) { + if (!application?.botUserId) { throw new BotUserNotFoundError(); } const botUser = await this.apiContext.services.users.findUnique(application.botUserId); diff --git a/fluxer_api/src/api/oauth/OAuth2Service.ts b/fluxer_api/src/api/oauth/OAuth2Service.ts index 51b6b3fd9..6fb5d31f6 100644 --- a/fluxer_api/src/api/oauth/OAuth2Service.ts +++ b/fluxer_api/src/api/oauth/OAuth2Service.ts @@ -333,7 +333,7 @@ export class OAuth2Service { async userInfo(accessToken: string) { const token = await this.tokens.getAccessToken(accessToken); - if (!token || !token.userId) { + if (!token?.userId) { throw new InvalidTokenError(); } const application = await this.applications.getApplication(token.applicationId); diff --git a/fluxer_api/src/api/openapi/openapi.json b/fluxer_api/src/api/openapi/openapi.json index 90aeecdfe..0aa798912 100644 --- a/fluxer_api/src/api/openapi/openapi.json +++ b/fluxer_api/src/api/openapi/openapi.json @@ -20719,7 +20719,7 @@ "timestamp": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "The ISO 8601 timestamp of when the message was created" }, "edited_timestamp": { @@ -20728,7 +20728,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -20821,10 +20821,7 @@ {"type": "null"} ] }, - "nonce": { - "description": "A client-provided value for message deduplication", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "nonce": {"description": "A client-provided value for message deduplication", "type": ["string", "null"]}, "call": { "description": "Call information if this message represents a call", "anyOf": [ @@ -20842,7 +20839,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -20885,7 +20882,7 @@ "timestamp": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "The ISO 8601 timestamp of when the message was created" }, "edited_timestamp": { @@ -20894,7 +20891,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -20989,7 +20986,7 @@ }, "nonce": { "description": "A client-provided value for message deduplication", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "call": { "description": "Call information if this message represents a call", @@ -21008,7 +21005,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -21065,8 +21062,8 @@ { "type": "object", "properties": { - "unsubscribe": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "documentation": {"anyOf": [{"type": "string"}, {"type": "null"}]} + "unsubscribe": {"type": ["string", "null"]}, + "documentation": {"type": ["string", "null"]} } }, {"type": "null"} @@ -21077,10 +21074,10 @@ { "type": "object", "properties": { - "id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "status_indicator": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "status_description": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "url": {"anyOf": [{"type": "string"}, {"type": "null"}]} + "id": {"type": ["string", "null"]}, + "status_indicator": {"type": ["string", "null"]}, + "status_description": {"type": ["string", "null"]}, + "url": {"type": ["string", "null"]} } }, {"type": "null"} @@ -21091,14 +21088,14 @@ { "type": "object", "properties": { - "id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "name": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "url": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "status": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "backfilled": {"anyOf": [{"type": "boolean"}, {"type": "null"}]}, - "created_at": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "updated_at": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "resolved_at": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "id": {"type": ["string", "null"]}, + "name": {"type": ["string", "null"]}, + "url": {"type": ["string", "null"]}, + "status": {"type": ["string", "null"]}, + "backfilled": {"type": ["boolean", "null"]}, + "created_at": {"type": ["string", "null"]}, + "updated_at": {"type": ["string", "null"]}, + "resolved_at": {"type": ["string", "null"]}, "incident_updates": { "anyOf": [ { @@ -21106,12 +21103,12 @@ "items": { "type": "object", "properties": { - "id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "incident_id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "markdown": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "status": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "created_at": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "updated_at": {"anyOf": [{"type": "string"}, {"type": "null"}]} + "id": {"type": ["string", "null"]}, + "incident_id": {"type": ["string", "null"]}, + "markdown": {"type": ["string", "null"]}, + "status": {"type": ["string", "null"]}, + "created_at": {"type": ["string", "null"]}, + "updated_at": {"type": ["string", "null"]} } } }, @@ -21125,9 +21122,9 @@ "items": { "type": "object", "properties": { - "id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "name": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "status": {"anyOf": [{"type": "string"}, {"type": "null"}]} + "id": {"type": ["string", "null"]}, + "name": {"type": ["string", "null"]}, + "status": {"type": ["string", "null"]} } } }, @@ -21144,16 +21141,16 @@ { "type": "object", "properties": { - "id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "name": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "url": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "status": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "maintenance_start_date": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "maintenance_end_date": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "backfilled": {"anyOf": [{"type": "boolean"}, {"type": "null"}]}, - "created_at": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "updated_at": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "resolved_at": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "id": {"type": ["string", "null"]}, + "name": {"type": ["string", "null"]}, + "url": {"type": ["string", "null"]}, + "status": {"type": ["string", "null"]}, + "maintenance_start_date": {"type": ["string", "null"]}, + "maintenance_end_date": {"type": ["string", "null"]}, + "backfilled": {"type": ["boolean", "null"]}, + "created_at": {"type": ["string", "null"]}, + "updated_at": {"type": ["string", "null"]}, + "resolved_at": {"type": ["string", "null"]}, "maintenance_updates": { "anyOf": [ { @@ -21161,11 +21158,11 @@ "items": { "type": "object", "properties": { - "id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "maintenance_id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "markdown": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "created_at": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "updated_at": {"anyOf": [{"type": "string"}, {"type": "null"}]} + "id": {"type": ["string", "null"]}, + "maintenance_id": {"type": ["string", "null"]}, + "markdown": {"type": ["string", "null"]}, + "created_at": {"type": ["string", "null"]}, + "updated_at": {"type": ["string", "null"]} } } }, @@ -21179,9 +21176,9 @@ "items": { "type": "object", "properties": { - "id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "name": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "status": {"anyOf": [{"type": "string"}, {"type": "null"}]} + "id": {"type": ["string", "null"]}, + "name": {"type": ["string", "null"]}, + "status": {"type": ["string", "null"]} } } }, @@ -21198,9 +21195,9 @@ { "type": "object", "properties": { - "created_at": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "new_status": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "component_id": {"anyOf": [{"type": "string"}, {"type": "null"}]} + "created_at": {"type": ["string", "null"]}, + "new_status": {"type": ["string", "null"]}, + "component_id": {"type": ["string", "null"]} } }, {"type": "null"} @@ -21211,10 +21208,10 @@ { "type": "object", "properties": { - "id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "name": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "status": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "created_at": {"anyOf": [{"type": "string"}, {"type": "null"}]} + "id": {"type": ["string", "null"]}, + "name": {"type": ["string", "null"]}, + "status": {"type": ["string", "null"]}, + "created_at": {"type": ["string", "null"]} } }, {"type": "null"} @@ -21225,7 +21222,7 @@ "GitHubWebhook": { "type": "object", "properties": { - "action": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "action": {"type": ["string", "null"]}, "answer": { "anyOf": [ { @@ -21243,7 +21240,7 @@ }, "required": ["id", "login", "html_url", "avatar_url"] }, - "commit_id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "commit_id": {"type": ["string", "null"]}, "body": {"type": "string"} }, "required": ["id", "html_url", "user", "body"] @@ -21256,14 +21253,14 @@ { "type": "object", "properties": { - "conclusion": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "conclusion": {"type": ["string", "null"]}, "name": {"type": "string"}, "html_url": {"type": "string"}, "check_suite": { "type": "object", "properties": { - "conclusion": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "head_branch": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "conclusion": {"type": ["string", "null"]}, + "head_branch": {"type": ["string", "null"]}, "head_sha": {"type": "string"}, "pull_requests": { "anyOf": [ @@ -21282,15 +21279,12 @@ }, "required": ["head_sha", "app"] }, - "details_url": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "details_url": {"type": ["string", "null"]}, "output": { "anyOf": [ { "type": "object", - "properties": { - "title": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "summary": {"anyOf": [{"type": "string"}, {"type": "null"}]} - } + "properties": {"title": {"type": ["string", "null"]}, "summary": {"type": ["string", "null"]}} }, {"type": "null"} ] @@ -21319,8 +21313,8 @@ { "type": "object", "properties": { - "conclusion": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "head_branch": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "conclusion": {"type": ["string", "null"]}, + "head_branch": {"type": ["string", "null"]}, "head_sha": {"type": "string"}, "pull_requests": { "anyOf": [ @@ -21359,7 +21353,7 @@ }, "required": ["id", "login", "html_url", "avatar_url"] }, - "commit_id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "commit_id": {"type": ["string", "null"]}, "body": {"type": "string"} }, "required": ["id", "html_url", "user", "body"] @@ -21379,10 +21373,7 @@ "message": {"type": "string"}, "author": { "type": "object", - "properties": { - "username": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "name": {"type": "string"} - }, + "properties": {"username": {"type": ["string", "null"]}, "name": {"type": "string"}}, "required": ["name"] } }, @@ -21392,7 +21383,7 @@ {"type": "null"} ] }, - "compare": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "compare": {"type": ["string", "null"]}, "discussion": { "anyOf": [ { @@ -21401,8 +21392,8 @@ "title": {"type": "string"}, "number": {"$ref": "#/components/schemas/Int32Type"}, "html_url": {"type": "string"}, - "answer_html_url": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "body": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "answer_html_url": {"type": ["string", "null"]}, + "body": {"type": ["string", "null"]}, "user": { "type": "object", "properties": { @@ -21419,7 +21410,7 @@ {"type": "null"} ] }, - "forced": {"anyOf": [{"type": "boolean"}, {"type": "null"}]}, + "forced": {"type": ["boolean", "null"]}, "forkee": { "anyOf": [ { @@ -21445,10 +21436,7 @@ "message": {"type": "string"}, "author": { "type": "object", - "properties": { - "username": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "name": {"type": "string"} - }, + "properties": {"username": {"type": ["string", "null"]}, "name": {"type": "string"}}, "required": ["name"] } }, @@ -21476,7 +21464,7 @@ "required": ["id", "login", "html_url", "avatar_url"] }, "title": {"type": "string"}, - "body": {"anyOf": [{"type": "string"}, {"type": "null"}]} + "body": {"type": ["string", "null"]} }, "required": ["id", "number", "html_url", "user", "title"] }, @@ -21517,15 +21505,15 @@ "required": ["id", "login", "html_url", "avatar_url"] }, "title": {"type": "string"}, - "body": {"anyOf": [{"type": "string"}, {"type": "null"}]} + "body": {"type": ["string", "null"]} }, "required": ["id", "number", "html_url", "user", "title"] }, {"type": "null"} ] }, - "ref_type": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "ref": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "ref_type": {"type": ["string", "null"]}, + "ref": {"type": ["string", "null"]}, "release": { "anyOf": [ { @@ -21534,7 +21522,7 @@ "id": {"$ref": "#/components/schemas/Int32Type"}, "tag_name": {"type": "string"}, "html_url": {"type": "string"}, - "body": {"anyOf": [{"type": "string"}, {"type": "null"}]} + "body": {"type": ["string", "null"]} }, "required": ["id", "tag_name", "html_url"] }, @@ -21571,7 +21559,7 @@ }, "required": ["id", "login", "html_url", "avatar_url"] }, - "body": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "body": {"type": ["string", "null"]}, "html_url": {"type": "string"}, "state": {"type": "string"} }, @@ -21626,11 +21614,11 @@ "tts": {"description": "Whether this is a text-to-speech message", "type": "boolean"}, "username": { "description": "Override the default username of the webhook for this message", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "avatar_url": { "description": "Override the default avatar URL of the webhook for this message", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "attachments": { "description": "Array of multipart attachment metadata objects", @@ -21711,11 +21699,11 @@ "tts": {"description": "Whether this is a text-to-speech message", "type": "boolean"}, "username": { "description": "Override the default username of the webhook for this message", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "avatar_url": { "description": "Override the default avatar URL of the webhook for this message", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "attachments": { "description": "Array of attachments uploaded through the presigned upload endpoint", @@ -21751,10 +21739,7 @@ "$ref": "#/components/schemas/SnowflakeStringType" }, "name": {"type": "string", "description": "The display name of the webhook"}, - "avatar": { - "description": "The hash of the webhook avatar image", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "avatar": {"description": "The hash of the webhook avatar image", "type": ["string", "null"]}, "token": {"type": "string", "description": "The secure token used to execute the webhook"} }, "required": ["id", "guild_id", "channel_id", "name", "token"], @@ -21790,10 +21775,7 @@ "$ref": "#/components/schemas/SnowflakeStringType" }, "name": {"type": "string", "description": "The display name of the webhook"}, - "avatar": { - "description": "The hash of the webhook avatar image", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "avatar": {"description": "The hash of the webhook avatar image", "type": ["string", "null"]}, "token": {"type": "string", "description": "The secure token used to execute the webhook"}, "user": { "description": "The user who created the webhook", @@ -21817,14 +21799,8 @@ }, "username": {"type": "string", "description": "The username of the user, not unique across the platform"}, "discriminator": {"type": "string", "description": "The four-digit discriminator tag of the user"}, - "global_name": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The display name of the user, if set" - }, - "avatar": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The hash of the user avatar image" - }, + "global_name": {"description": "The display name of the user, if set", "type": ["string", "null"]}, + "avatar": {"description": "The hash of the user avatar image", "type": ["string", "null"]}, "avatar_color": { "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}], "description": "The dominant avatar color of the user as an integer" @@ -21847,12 +21823,9 @@ "user_profile": { "type": "object", "properties": { - "bio": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "User biography text"}, - "pronouns": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "User pronouns"}, - "banner": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Hash of the profile banner image" - }, + "bio": {"description": "User biography text", "type": ["string", "null"]}, + "pronouns": {"description": "User pronouns", "type": ["string", "null"]}, + "banner": {"description": "Hash of the profile banner image", "type": ["string", "null"]}, "banner_color": { "description": "Default banner color if no custom banner", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] @@ -21876,18 +21849,9 @@ { "type": "object", "properties": { - "bio": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Guild-specific biography text" - }, - "pronouns": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Guild-specific pronouns" - }, - "banner": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Hash of the guild-specific banner image" - }, + "bio": {"description": "Guild-specific biography text", "type": ["string", "null"]}, + "pronouns": {"description": "Guild-specific pronouns", "type": ["string", "null"]}, + "banner": {"description": "Hash of the guild-specific banner image", "type": ["string", "null"]}, "accent_color": { "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}], "description": "Guild-specific accent color" @@ -21920,10 +21884,7 @@ "type": "object", "properties": { "id": {"description": "The ID of the mutual guild", "$ref": "#/components/schemas/SnowflakeStringType"}, - "nick": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The nickname of the target user in this guild" - } + "nick": {"description": "The nickname of the target user in this guild", "type": ["string", "null"]} }, "required": ["id", "nick"], "additionalProperties": false @@ -21946,7 +21907,7 @@ "required": ["user", "user_profile", "timezone_offset"], "additionalProperties": false }, - "DiscriminatorType": {"anyOf": [{"type": "string"}, {"type": "number"}]}, + "DiscriminatorType": {"type": ["string", "number"]}, "UsernameType": {"type": "string"}, "UserTagCheckResponse": { "type": "object", @@ -21982,14 +21943,8 @@ }, "username": {"type": "string", "description": "The username of the user, not unique across the platform"}, "discriminator": {"type": "string", "description": "The four-digit discriminator tag of the user"}, - "global_name": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The display name of the user, if set" - }, - "avatar": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The hash of the user avatar image" - }, + "global_name": {"description": "The display name of the user, if set", "type": ["string", "null"]}, + "avatar": {"description": "The hash of the user avatar image", "type": ["string", "null"]}, "avatar_color": { "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}], "description": "The dominant avatar color of the user as an integer" @@ -22012,43 +21967,34 @@ "items": {"type": "string"}, "description": "Special traits assigned to the user account" }, - "email": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The email address associated with the account" - }, + "email": {"description": "The email address associated with the account", "type": ["string", "null"]}, "email_bounced": { "description": "Whether the current email address is marked as bounced by the mail provider", "type": "boolean" }, "phone": { "description": "Always null. Retained for old-client backward compatibility — phone numbers are no longer stored on the user record.", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "has_verified_phone": { "type": "boolean", "description": "Whether this account has completed phone verification" }, - "bio": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The user biography text"}, - "pronouns": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The preferred pronouns of the user" - }, + "bio": {"description": "The user biography text", "type": ["string", "null"]}, + "pronouns": {"description": "The preferred pronouns of the user", "type": ["string", "null"]}, "accent_color": { "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}], "description": "The user-selected accent color as an integer" }, "timezone": { "description": "The IANA timezone identifier saved by the user. Omitted unless the user has staff access.", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "timezone_privacy_flags": { "description": "Bitfield controlling who can see the profile timezone. Omitted unless the user has staff access.", "$ref": "#/components/schemas/ProfileFieldPrivacyFlags" }, - "banner": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The hash of the user profile banner image" - }, + "banner": {"description": "The hash of the user profile banner image", "type": ["string", "null"]}, "banner_color": { "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}], "description": "The default banner color if no custom banner is set" @@ -22067,28 +22013,28 @@ ] }, "premium_since": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO8601 timestamp of when premium was first activated" + "description": "ISO8601 timestamp of when premium was first activated", + "type": ["string", "null"] }, "premium_until": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO8601 timestamp of when premium access ends, including stacked gift time" + "description": "ISO8601 timestamp of when premium access ends, including stacked gift time", + "type": ["string", "null"] }, "premium_will_cancel": { "type": "boolean", "description": "Whether premium is set to cancel at the end of the billing period" }, "premium_billing_cycle": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The billing cycle for the premium subscription" + "description": "The billing cycle for the premium subscription", + "type": ["string", "null"] }, "premium_lifetime_sequence": { "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}], "description": "The sequence number for lifetime premium subscribers" }, "premium_grace_ends_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO8601 timestamp at which the post-cancel grace period ends. Set when the subscription is fully canceled in Stripe; perks remain active and the original premium_since is restored on resubscribe until this timestamp passes. Null when not in grace." + "description": "ISO8601 timestamp at which the post-cancel grace period ends. Set when the subscription is fully canceled in Stripe; perks remain active and the original premium_since is restored on resubscribe until this timestamp passes. Null when not in grace.", + "type": ["string", "null"] }, "premium_discriminator": { "type": "boolean", @@ -22127,12 +22073,12 @@ "type": "boolean" }, "password_last_changed_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO8601 timestamp of the last password change" + "description": "ISO8601 timestamp of the last password change", + "type": ["string", "null"] }, "last_voice_activity_sharing_change_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO8601 timestamp of the last bulk voice-activity-sharing change. Drives the 24-hour cooldown for re-toggling the Active Now sharing default." + "description": "ISO8601 timestamp of the last bulk voice-activity-sharing change. Drives the 24-hour cooldown for re-toggling the Active Now sharing default.", + "type": ["string", "null"] }, "required_actions": { "type": "array", @@ -22183,12 +22129,12 @@ "type": "boolean" }, "terms_agreed_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO8601 timestamp of when the user last agreed to the terms of service" + "description": "ISO8601 timestamp of when the user last agreed to the terms of service", + "type": ["string", "null"] }, "privacy_agreed_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO8601 timestamp of when the user last agreed to the privacy policy" + "description": "ISO8601 timestamp of when the user last agreed to the privacy policy", + "type": ["string", "null"] } }, "required": [ @@ -22348,7 +22294,7 @@ "maximum": 9007199254740991, "description": "Unique identifier for the folder (-1 for uncategorized)" }, - "name": {"description": "Display name of the folder", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "name": {"description": "Display name of the folder", "type": ["string", "null"]}, "color": { "default": 0, "description": "Color of the folder as integer", @@ -22437,14 +22383,14 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] }, "status_resets_to": { "description": "The status to reset to after the scheduled reset", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "theme": {"type": "string", "description": "The UI theme preference"}, "locale": {"$ref": "#/components/schemas/Locale"}, @@ -22496,10 +22442,7 @@ "description": "The unique identifier for the folder (-1 for uncategorized)", "anyOf": [{"$ref": "#/components/schemas/SignedInt32Type"}, {"type": "null"}] }, - "name": { - "description": "The display name of the folder", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "name": {"description": "The display name of the folder", "type": ["string", "null"]}, "color": { "description": "The color of the folder as an integer", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] @@ -22680,8 +22623,8 @@ "type": "object", "properties": { "nickname": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Custom nickname for this friend (max 256 characters)" + "description": "Custom nickname for this friend (max 256 characters)", + "type": ["string", "null"] } }, "required": ["nickname"] @@ -22705,12 +22648,9 @@ "description": "ISO8601 timestamp of when the relationship was established", "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" - }, - "nickname": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "A custom nickname set for the related user" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, + "nickname": {"description": "A custom nickname set for the related user", "type": ["string", "null"]}, "share_voice_activity": { "type": "boolean", "description": "Whether the current user has chosen to share their voice activity with this friend on the Active Now panel" @@ -22782,8 +22722,8 @@ "properties": { "subscription_id": {"type": "string", "description": "The unique identifier for the push subscription"}, "user_agent": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The user agent that created this subscription" + "description": "The user agent that created this subscription", + "type": ["string", "null"] } }, "required": ["subscription_id", "user_agent"], @@ -22931,7 +22871,7 @@ "expires_at": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "ISO 8601 timestamp when this inbound challenge expires" }, "reason": { @@ -22994,8 +22934,8 @@ "ticket": {"type": "string", "description": "Ticket for password change actions"}, "code_expires_at": {"type": "string", "description": "ISO8601 timestamp when the verification code expires"}, "resend_available_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO8601 timestamp when the code can be resent" + "description": "ISO8601 timestamp when the code can be resent", + "type": ["string", "null"] } }, "required": ["ticket", "code_expires_at", "resend_available_at"], @@ -23029,9 +22969,7 @@ }, "UserNoteUpdateRequest": { "type": "object", - "properties": { - "note": {"description": "The note text (max 256 characters)", "anyOf": [{"type": "string"}, {"type": "null"}]} - } + "properties": {"note": {"description": "The note text (max 256 characters)", "type": ["string", "null"]}} }, "UserNoteResponse": { "type": "object", @@ -23091,17 +23029,14 @@ }, "platform": {"type": "string", "description": "The mobile push notification platform"}, "app_id": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Client app channel or bundle mapping identifier for this device" + "description": "Client app channel or bundle mapping identifier for this device", + "type": ["string", "null"] }, "provider_environment": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Push provider environment used for this device" + "description": "Push provider environment used for this device", + "type": ["string", "null"] }, - "user_agent": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The user agent that registered this device" - } + "user_agent": {"description": "The user agent that registered this device", "type": ["string", "null"]} }, "required": ["device_id", "platform", "app_id", "provider_environment", "user_agent"], "additionalProperties": false @@ -23435,7 +23370,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -23446,7 +23381,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -23491,10 +23426,7 @@ "type": "object", "properties": { "name": {"description": "Display name for the meme", "type": "string"}, - "alt_text": { - "description": "Alternative text description for accessibility", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "alt_text": {"description": "Alternative text description for accessibility", "type": ["string", "null"]}, "tags": { "description": "New tags for categorizing and searching the meme", "anyOf": [{"type": "array", "items": {"type": "string"}}, {"type": "null"}] @@ -23513,10 +23445,7 @@ "$ref": "#/components/schemas/SnowflakeStringType" }, "name": {"type": "string", "description": "Display name of the meme"}, - "alt_text": { - "description": "Alternative text description for accessibility", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "alt_text": {"description": "Alternative text description for accessibility", "type": ["string", "null"]}, "tags": { "type": "array", "items": {"type": "string"}, @@ -23528,10 +23457,7 @@ }, "filename": {"type": "string", "description": "Original filename of the meme"}, "content_type": {"type": "string", "description": "MIME type of the meme file"}, - "content_hash": { - "description": "Hash of the file content for deduplication", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "content_hash": {"description": "Hash of the file content for deduplication", "type": ["string", "null"]}, "size": {"description": "File size in bytes", "$ref": "#/components/schemas/NonNegativeSafeIntegerType"}, "width": { "description": "Width of the image or video in pixels", @@ -23541,10 +23467,7 @@ "description": "Height of the image or video in pixels", "anyOf": [{"type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991}, {"type": "null"}] }, - "duration": { - "description": "Duration of the video in seconds", - "anyOf": [{"type": "number"}, {"type": "null"}] - }, + "duration": {"description": "Duration of the video in seconds", "type": ["number", "null"]}, "url": {"type": "string", "description": "CDN URL to access the meme"}, "is_gifv": { "default": false, @@ -23553,11 +23476,11 @@ }, "gif_slug": { "description": "Provider-issued slug for the GIF this meme was sourced from, if any", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "gif_provider": { "description": "Stable name of the GIF provider that issued gif_slug, if any. Legacy records may contain older provider names.", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "media": { "description": "Provider-issued format-name → media descriptor map for gif-sourced memes (mirrors GifResponse.media). Null on memes uploaded as plain attachments.", @@ -23572,7 +23495,7 @@ }, "placeholder": { "description": "Compact thumbhash placeholder produced by the media proxy at favorite-time. Clients render it as a low-res preview while the full media loads. Null when the proxy did not emit one.", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] } }, "required": [ @@ -23592,10 +23515,7 @@ "CreateFavoriteMemeFromUrlBodySchema": { "type": "object", "properties": { - "alt_text": { - "description": "Alternative text description for accessibility", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "alt_text": {"description": "Alternative text description for accessibility", "type": ["string", "null"]}, "tags": { "description": "Tags for categorizing and searching the meme", "default": [], @@ -23608,11 +23528,11 @@ }, "gif_slug": { "description": "Provider-issued slug or slug-id token for the GIF, when sourced from a provider", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "gif_provider": { "description": "Stable name of the GIF provider that issued gif_slug. New provider GIFs are sourced from KLIPY.", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "media": { "description": "Optional provider-issued format-name → media descriptor map captured by the client at favorite-time (mirrors GifResponse.media). Only persisted for gif-sourced memes; ignored otherwise.", @@ -23625,7 +23545,7 @@ {"type": "null"} ] }, - "name": {"description": "Display name for the meme", "anyOf": [{"type": "string"}, {"type": "null"}]} + "name": {"description": "Display name for the meme", "type": ["string", "null"]} }, "required": ["url"] }, @@ -23654,40 +23574,40 @@ "status": {"$ref": "#/components/schemas/HarvestStatus"}, "created_at": {"type": "string", "description": "ISO 8601 timestamp when the harvest request was created"}, "started_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO 8601 timestamp when the harvest started, or null if pending" + "description": "ISO 8601 timestamp when the harvest started, or null if pending", + "type": ["string", "null"] }, "completed_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO 8601 timestamp when the harvest completed, or null otherwise" + "description": "ISO 8601 timestamp when the harvest completed, or null otherwise", + "type": ["string", "null"] }, "failed_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO 8601 timestamp when the harvest failed, or null otherwise" + "description": "ISO 8601 timestamp when the harvest failed, or null otherwise", + "type": ["string", "null"] }, "file_size": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Final file size of the downloaded data, expressed as a string, or null if not available" + "description": "Final file size of the downloaded data, expressed as a string, or null if not available", + "type": ["string", "null"] }, "progress_percent": { "type": "number", "description": "Harvest progress as a percentage value between 0 and 100" }, "progress_step": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Textual description of the current harvest step, if available" + "description": "Textual description of the current harvest step, if available", + "type": ["string", "null"] }, "error_message": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Error message when the harvest fails, or null otherwise" + "description": "Error message when the harvest fails, or null otherwise", + "type": ["string", "null"] }, "download_url_expires_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO 8601 timestamp when the download URL expires, or null if unavailable" + "description": "ISO 8601 timestamp when the download URL expires, or null if unavailable", + "type": ["string", "null"] }, "expires_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO 8601 timestamp when the harvest download expires, or null if unavailable" + "description": "ISO 8601 timestamp when the harvest download expires, or null if unavailable", + "type": ["string", "null"] } }, "required": [ @@ -23721,40 +23641,40 @@ "description": "ISO 8601 timestamp when the harvest request was created" }, "started_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO 8601 timestamp when the harvest started, or null if pending" + "description": "ISO 8601 timestamp when the harvest started, or null if pending", + "type": ["string", "null"] }, "completed_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO 8601 timestamp when the harvest completed, or null otherwise" + "description": "ISO 8601 timestamp when the harvest completed, or null otherwise", + "type": ["string", "null"] }, "failed_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO 8601 timestamp when the harvest failed, or null otherwise" + "description": "ISO 8601 timestamp when the harvest failed, or null otherwise", + "type": ["string", "null"] }, "file_size": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Final file size of the downloaded data, expressed as a string, or null if not available" + "description": "Final file size of the downloaded data, expressed as a string, or null if not available", + "type": ["string", "null"] }, "progress_percent": { "type": "number", "description": "Harvest progress as a percentage value between 0 and 100" }, "progress_step": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Textual description of the current harvest step, if available" + "description": "Textual description of the current harvest step, if available", + "type": ["string", "null"] }, "error_message": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Error message when the harvest fails, or null otherwise" + "description": "Error message when the harvest fails, or null otherwise", + "type": ["string", "null"] }, "download_url_expires_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO 8601 timestamp when the download URL expires, or null if unavailable" + "description": "ISO 8601 timestamp when the download URL expires, or null if unavailable", + "type": ["string", "null"] }, "expires_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO 8601 timestamp when the harvest download expires, or null if unavailable" + "description": "ISO 8601 timestamp when the harvest download expires, or null if unavailable", + "type": ["string", "null"] } }, "required": [ @@ -23822,7 +23742,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -23833,7 +23753,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -23992,10 +23912,7 @@ { "type": "object", "properties": { - "end_time": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO8601 timestamp of when the mute expires" - }, + "end_time": {"description": "ISO8601 timestamp of when the mute expires", "type": ["string", "null"]}, "selected_time_window": { "description": "The selected mute duration in seconds", "$ref": "#/components/schemas/Int32Type" @@ -24035,8 +23952,8 @@ "type": "object", "properties": { "end_time": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO8601 timestamp of when the mute expires" + "description": "ISO8601 timestamp of when the mute expires", + "type": ["string", "null"] }, "selected_time_window": { "description": "The selected mute duration in seconds", @@ -24147,7 +24064,7 @@ "created_at": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" } }, "required": [ @@ -24260,21 +24177,18 @@ "type": "boolean", "description": "Whether verification of the original email is required" }, - "original_email": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The original email address on record" - }, + "original_email": {"description": "The original email address on record", "type": ["string", "null"]}, "original_proof": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Proof token generated when original email verification is not required" + "description": "Proof token generated when original email verification is not required", + "type": ["string", "null"] }, "original_code_expires_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO8601 timestamp when the original verification code expires" + "description": "ISO8601 timestamp when the original verification code expires", + "type": ["string", "null"] }, "resend_available_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO8601 timestamp when the original verification code can be resent" + "description": "ISO8601 timestamp when the original verification code can be resent", + "type": ["string", "null"] } }, "required": [ @@ -24312,8 +24226,8 @@ "new_email": {"type": "string", "description": "The new email address the user wants to verify"}, "new_code_expires_at": {"type": "string", "description": "ISO8601 timestamp when the new email code expires"}, "resend_available_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO8601 timestamp when the new email code can be resent" + "description": "ISO8601 timestamp when the new email code can be resent", + "type": ["string", "null"] } }, "required": ["ticket", "new_email", "new_code_expires_at", "resend_available_at"], @@ -24508,15 +24422,12 @@ "$ref": "#/components/schemas/SnowflakeStringType" }, "name": {"description": "The name of the channel", "type": "string"}, - "topic": {"description": "The topic of the channel", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "topic": {"description": "The topic of the channel", "type": ["string", "null"]}, "url": { "description": "The URL associated with the channel", "anyOf": [{"type": "string", "format": "uri"}, {"type": "null"}] }, - "icon": { - "description": "The icon hash of the channel (for group DMs)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "icon": {"description": "The icon hash of the channel (for group DMs)", "type": ["string", "null"]}, "owner_id": { "description": "The ID of the owner of the channel (for group DMs)", "anyOf": [{"$ref": "#/components/schemas/SnowflakeStringType"}, {"type": "null"}] @@ -24539,10 +24450,7 @@ "description": "The maximum active voice connections allowed per user in the voice channel", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] }, - "rtc_region": { - "description": "The voice region ID for the voice channel", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "rtc_region": {"description": "The voice region ID for the voice channel", "type": ["string", "null"]}, "last_message_id": { "description": "The ID of the last message sent in this channel", "anyOf": [{"$ref": "#/components/schemas/SnowflakeStringType"}, {"type": "null"}] @@ -24553,7 +24461,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -24575,7 +24483,7 @@ }, "nsfw_override": { "description": "Per-channel adult-content override; null means inherit from parent category and then guild. Categories use this same field as their own override.", - "anyOf": [{"type": "boolean"}, {"type": "null"}] + "type": ["boolean", "null"] }, "content_warning_level": { "description": "Channel-level content warning override (0=inherit, 1=force-warn)", @@ -24618,10 +24526,7 @@ "description": "The 4-digit discriminator tag", "$ref": "#/components/schemas/DiscriminatorType" }, - "global_name": { - "description": "The display name shown to other users", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "global_name": {"description": "The display name shown to other users", "type": ["string", "null"]}, "email": {"description": "The email address for the account", "$ref": "#/components/schemas/EmailType"}, "new_password": {"description": "The new password to set", "$ref": "#/components/schemas/PasswordType"}, "password": { @@ -24636,21 +24541,15 @@ "description": "Base64-encoded profile banner image", "anyOf": [{"$ref": "#/components/schemas/Base64ImageType"}, {"type": "null"}] }, - "bio": { - "description": "User biography text (max 320 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "pronouns": { - "description": "User pronouns (max 40 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "bio": {"description": "User biography text (max 320 characters)", "type": ["string", "null"]}, + "pronouns": {"description": "User pronouns (max 40 characters)", "type": ["string", "null"]}, "accent_color": { "description": "Profile accent color as integer", "anyOf": [{"$ref": "#/components/schemas/ColorType"}, {"type": "null"}] }, "timezone": { "description": "Staff-only IANA timezone identifier saved for profile local time. Ignored for non-staff users.", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "timezone_privacy_flags": { "description": "Staff-only bitfield controlling who can see the profile timezone. Ignored for non-staff users.", @@ -24820,10 +24719,7 @@ "type": "object", "properties": { "id": {"description": "Provider-issued share identifier (slug or slug-id token).", "type": "string"}, - "q": { - "description": "Optional search query that produced the GIF.", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "q": {"description": "Optional search query that produced the GIF.", "type": ["string", "null"]}, "locale": {"default": "en-US", "$ref": "#/components/schemas/Locale"} }, "required": ["id"] @@ -24929,7 +24825,7 @@ "expires_at": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "ISO timestamp when the upload URL expires" }, "expires_in": { @@ -24967,7 +24863,7 @@ "properties": { "id": {"description": "The ID of the source guild", "$ref": "#/components/schemas/SnowflakeStringType"}, "name": {"type": "string", "description": "The name of the source guild"}, - "icon": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The hash of the source guild icon"}, + "icon": {"description": "The hash of the source guild icon", "type": ["string", "null"]}, "features": { "type": "array", "items": {"type": "string", "enum": ["VERIFIED", "PARTNERED", "DISCOVERABLE"]}, @@ -25394,12 +25290,12 @@ "description": "Actual subscription type before local perk disabling" }, "premium_since": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO timestamp when actual premium access first started" + "description": "ISO timestamp when actual premium access first started", + "type": ["string", "null"] }, "premium_until": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO timestamp when actual premium access ends, including stacked gift time" + "description": "ISO timestamp when actual premium access ends, including stacked gift time", + "type": ["string", "null"] }, "premium_will_cancel": { "type": "boolean", @@ -25417,8 +25313,8 @@ "description": "Visionary sequence number, when applicable" }, "premium_grace_ends_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO timestamp when grace access ends, when applicable" + "description": "ISO timestamp when grace access ends, when applicable", + "type": ["string", "null"] }, "has_active_paid_premium": { "type": "boolean", @@ -25459,12 +25355,12 @@ "description": "Effective premium type used by product gates" }, "premium_since": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Effective premium start timestamp exposed to the client" + "description": "Effective premium start timestamp exposed to the client", + "type": ["string", "null"] }, "premium_until": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Effective premium end timestamp exposed to the client, including stacked gift time" + "description": "Effective premium end timestamp exposed to the client, including stacked gift time", + "type": ["string", "null"] }, "premium_will_cancel": { "type": "boolean", @@ -25482,8 +25378,8 @@ "description": "Effective Visionary sequence number, when applicable" }, "premium_grace_ends_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Effective grace timestamp exposed to the client" + "description": "Effective grace timestamp exposed to the client", + "type": ["string", "null"] }, "premium_enabled_override": { "type": "boolean", @@ -25526,7 +25422,7 @@ "billing": { "type": "object", "properties": { - "stripe_customer_id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "stripe_customer_id": {"type": ["string", "null"]}, "current_subscription_price": {"$ref": "#/components/schemas/CurrentSubscriptionPriceResponse"}, "pending_subscription_change": {"$ref": "#/components/schemas/PendingSubscriptionChangeResponse"}, "list_price_switch": {"$ref": "#/components/schemas/ListPriceSwitchState"}, @@ -25563,9 +25459,9 @@ "type": "object", "properties": { "invoice_id": {"type": "string"}, - "payment_intent_id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "charge_id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "refund_id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "payment_intent_id": {"type": ["string", "null"]}, + "charge_id": {"type": ["string", "null"]}, + "refund_id": {"type": ["string", "null"]}, "refunded_amount_cents": { "type": "integer", "minimum": -9007199254740991, @@ -25575,12 +25471,12 @@ "invoice_amount_paid_cents": {"type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991}, "currency": {"type": "string"}, "subscription_id": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Subscription that was cancelled along with the refund, when applicable" + "description": "Subscription that was cancelled along with the refund, when applicable", + "type": ["string", "null"] }, "status": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Provider status of the refund (e.g. pending, succeeded, failed); money only moved once succeeded" + "description": "Provider status of the refund (e.g. pending, succeeded, failed); money only moved once succeeded", + "type": ["string", "null"] } }, "required": [ @@ -25608,28 +25504,22 @@ "description": "Why the user is not eligible, when eligible is false" }, "invoice_id": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Latest paid invoice considered for refund eligibility" + "description": "Latest paid invoice considered for refund eligibility", + "type": ["string", "null"] }, "invoice_amount_paid_cents": { "anyOf": [{"type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991}, {"type": "null"}], "description": "Amount paid on the latest invoice in the currency minor unit" }, - "currency": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Currency of the latest paid invoice" - }, - "paid_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO timestamp the latest invoice was paid" - }, + "currency": {"description": "Currency of the latest paid invoice", "type": ["string", "null"]}, + "paid_at": {"description": "ISO timestamp the latest invoice was paid", "type": ["string", "null"]}, "refund_window_expires_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO timestamp after which the 3-day refund window closes" + "description": "ISO timestamp after which the 3-day refund window closes", + "type": ["string", "null"] }, "cooldown_expires_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO timestamp the 30-day cooldown ends, if currently active" + "description": "ISO timestamp the 30-day cooldown ends, if currently active", + "type": ["string", "null"] }, "cancels_subscription": { "type": "boolean", @@ -25652,22 +25542,10 @@ "PriceIdsResponse": { "type": "object", "properties": { - "monthly": { - "description": "Stripe price ID for the monthly subscription", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "yearly": { - "description": "Stripe price ID for the yearly subscription", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "gift_1_month": { - "description": "Stripe price ID for the 1 month gift", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "gift_1_year": { - "description": "Stripe price ID for the 1 year gift", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "monthly": {"description": "Stripe price ID for the monthly subscription", "type": ["string", "null"]}, + "yearly": {"description": "Stripe price ID for the yearly subscription", "type": ["string", "null"]}, + "gift_1_month": {"description": "Stripe price ID for the 1 month gift", "type": ["string", "null"]}, + "gift_1_year": {"description": "Stripe price ID for the 1 year gift", "type": ["string", "null"]}, "monthly_amount_minor": { "description": "Monthly price amount in the currency minor unit", "anyOf": [{"type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991}, {"type": "null"}] @@ -25730,8 +25608,8 @@ "description": "The current list price for the same cycle/currency, in the currency minor unit" }, "list_price_id": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The current list Stripe price ID for the same cycle/currency" + "description": "The current list Stripe price ID for the same cycle/currency", + "type": ["string", "null"] } }, "required": [ @@ -25777,16 +25655,10 @@ }, "username": {"type": "string", "description": "The username of the user"}, "discriminator": {"type": "string", "description": "The discriminator of the user"}, - "global_name": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The global display name of the user" - }, - "avatar": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The avatar hash of the user"}, - "email": {"description": "The email address of the user", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "verified": { - "description": "Whether the user has verified their email", - "anyOf": [{"type": "boolean"}, {"type": "null"}] - }, + "global_name": {"description": "The global display name of the user", "type": ["string", "null"]}, + "avatar": {"description": "The avatar hash of the user", "type": ["string", "null"]}, + "email": {"description": "The email address of the user", "type": ["string", "null"]}, + "verified": {"description": "Whether the user has verified their email", "type": ["boolean", "null"]}, "flags": {"$ref": "#/components/schemas/PublicUserFlags", "description": "The user flags"} }, "required": ["sub", "id", "username", "discriminator", "global_name", "avatar"], @@ -25891,11 +25763,8 @@ "$ref": "#/components/schemas/SnowflakeStringType" }, "name": {"type": "string", "description": "The name of the application"}, - "icon": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The icon hash of the application"}, - "description": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The description of the application" - }, + "icon": {"description": "The icon hash of the application", "type": ["string", "null"]}, + "description": {"description": "The description of the application", "type": ["string", "null"]}, "redirect_uris": { "maxItems": 10, "type": "array", @@ -25920,18 +25789,9 @@ }, "username": {"type": "string", "description": "The username of the bot"}, "discriminator": {"type": "string", "description": "The discriminator of the bot"}, - "avatar": { - "description": "The avatar hash of the bot", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "banner": { - "description": "The banner hash of the bot", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "bio": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The bio or description of the bot" - }, + "avatar": {"description": "The avatar hash of the bot", "type": ["string", "null"]}, + "banner": {"description": "The banner hash of the bot", "type": ["string", "null"]}, + "bio": {"description": "The bio or description of the bot", "type": ["string", "null"]}, "token": {"description": "The bot token for authentication", "type": "string"}, "flags": {"$ref": "#/components/schemas/BotFlags"} }, @@ -25978,12 +25838,9 @@ }, "username": {"type": "string", "description": "The username of the bot"}, "discriminator": {"type": "string", "description": "The discriminator of the bot"}, - "avatar": {"description": "The avatar hash of the bot", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "banner": {"description": "The banner hash of the bot", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "bio": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The bio or description of the bot" - }, + "avatar": {"description": "The avatar hash of the bot", "type": ["string", "null"]}, + "banner": {"description": "The banner hash of the bot", "type": ["string", "null"]}, + "bio": {"description": "The bio or description of the bot", "type": ["string", "null"]}, "token": {"description": "The bot token for authentication", "type": "string"}, "mfa_enabled": {"description": "Whether the bot has MFA enabled", "type": "boolean"}, "authenticator_types": { @@ -26014,12 +25871,9 @@ }, "username": {"type": "string", "description": "The username of the bot"}, "discriminator": {"type": "string", "description": "The discriminator of the bot"}, - "avatar": {"description": "The avatar hash of the bot", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "banner": {"description": "The banner hash of the bot", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "bio": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The bio or description of the bot" - }, + "avatar": {"description": "The avatar hash of the bot", "type": ["string", "null"]}, + "banner": {"description": "The banner hash of the bot", "type": ["string", "null"]}, + "bio": {"description": "The bio or description of the bot", "type": ["string", "null"]}, "token": {"description": "The bot token for authentication", "type": "string"}, "mfa_enabled": {"description": "Whether the bot has MFA enabled", "type": "boolean"}, "authenticator_types": { @@ -26054,7 +25908,7 @@ "description": "The banner image as base64", "anyOf": [{"$ref": "#/components/schemas/Base64ImageType"}, {"type": "null"}] }, - "bio": {"description": "The bio or description of the bot", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "bio": {"description": "The bio or description of the bot", "type": ["string", "null"]}, "bot_flags": {"$ref": "#/components/schemas/BotFlags"} } }, @@ -26067,9 +25921,9 @@ }, "username": {"type": "string", "description": "The username of the bot"}, "discriminator": {"type": "string", "description": "The discriminator of the bot"}, - "avatar": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The avatar hash of the bot"}, - "banner": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The banner hash of the bot"}, - "bio": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The bio or description of the bot"}, + "avatar": {"description": "The avatar hash of the bot", "type": ["string", "null"]}, + "banner": {"description": "The banner hash of the bot", "type": ["string", "null"]}, + "bio": {"description": "The bio or description of the bot", "type": ["string", "null"]}, "flags": {"$ref": "#/components/schemas/BotFlags"} }, "required": ["id", "username", "discriminator", "avatar", "banner", "bio", "flags"], @@ -26134,14 +25988,8 @@ "$ref": "#/components/schemas/SnowflakeStringType" }, "name": {"type": "string", "description": "The name of the application"}, - "icon": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The icon hash of the application" - }, - "description": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The description of the application" - }, + "icon": {"description": "The icon hash of the application", "type": ["string", "null"]}, + "description": {"description": "The description of the application", "type": ["string", "null"]}, "bot_public": {"type": "boolean", "description": "Whether the bot can be invited by anyone"}, "bot_require_code_grant": { "type": "boolean", @@ -26170,11 +26018,8 @@ }, "username": {"type": "string", "description": "The username of the user"}, "discriminator": {"type": "string", "description": "The discriminator of the user"}, - "global_name": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The global display name of the user" - }, - "avatar": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The avatar hash of the user"}, + "global_name": {"description": "The global display name of the user", "type": ["string", "null"]}, + "avatar": {"description": "The avatar hash of the user", "type": ["string", "null"]}, "avatar_color": { "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}], "description": "The default avatar color of the user" @@ -26182,14 +26027,8 @@ "bot": {"description": "Whether the user is a bot", "type": "boolean"}, "system": {"description": "Whether the user is a system user", "type": "boolean"}, "flags": {"$ref": "#/components/schemas/PublicUserFlags", "description": "The user flags"}, - "email": { - "description": "The email address of the user", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "verified": { - "description": "Whether the user has verified their email", - "anyOf": [{"type": "boolean"}, {"type": "null"}] - } + "email": {"description": "The email address of the user", "type": ["string", "null"]}, + "verified": {"description": "Whether the user has verified their email", "type": ["boolean", "null"]} }, "required": ["id", "username", "discriminator", "global_name", "avatar", "avatar_color", "flags"], "additionalProperties": false @@ -26202,20 +26041,20 @@ "type": "object", "properties": { "countryCode": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO 3166-1 alpha-2 country code resolved for the client, or null when it cannot be resolved" + "description": "ISO 3166-1 alpha-2 country code resolved for the client, or null when it cannot be resolved", + "type": ["string", "null"] }, "regionCode": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO 3166-2 subdivision code resolved for the client, or null when it cannot be resolved" + "description": "ISO 3166-2 subdivision code resolved for the client, or null when it cannot be resolved", + "type": ["string", "null"] }, "latitude": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Approximate latitude of the client, or null when it cannot be resolved" + "description": "Approximate latitude of the client, or null when it cannot be resolved", + "type": ["string", "null"] }, "longitude": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Approximate longitude of the client, or null when it cannot be resolved" + "description": "Approximate longitude of the client, or null when it cannot be resolved", + "type": ["string", "null"] }, "ageRestrictedGeos": { "type": "array", @@ -26249,7 +26088,7 @@ "properties": { "code": { "description": "The new vanity URL code (2-32 characters, alphanumeric and hyphens)", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] } } }, @@ -26267,7 +26106,7 @@ "GuildVanityURLResponse": { "type": "object", "properties": { - "code": {"description": "The vanity URL code for the guild", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "code": {"description": "The vanity URL code for the guild", "type": ["string", "null"]}, "uses": { "description": "The number of times this vanity URL has been used", "$ref": "#/components/schemas/Int32Type" @@ -26314,8 +26153,8 @@ "$ref": "#/components/schemas/SnowflakeStringType" }, "name": {"type": "string", "description": "The name of the guild"}, - "icon": {"description": "The hash of the guild icon", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "banner": {"description": "The hash of the guild banner", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "icon": {"description": "The hash of the guild icon", "type": ["string", "null"]}, + "banner": {"description": "The hash of the guild banner", "type": ["string", "null"]}, "banner_width": { "description": "The width of the guild banner in pixels", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] @@ -26324,10 +26163,7 @@ "description": "The height of the guild banner in pixels", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] }, - "splash": { - "description": "The hash of the guild splash screen", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "splash": {"description": "The hash of the guild splash screen", "type": ["string", "null"]}, "splash_width": { "description": "The width of the guild splash in pixels", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] @@ -26347,10 +26183,7 @@ "enum": [0, 1, 2], "type": "integer" }, - "embed_splash": { - "description": "The hash of the embedded invite splash", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "embed_splash": {"description": "The hash of the embedded invite splash", "type": ["string", "null"]}, "embed_splash_width": { "description": "The width of the embedded invite splash in pixels", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] @@ -26359,10 +26192,7 @@ "description": "The height of the embedded invite splash in pixels", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] }, - "vanity_url_code": { - "description": "The vanity URL code for the guild", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "vanity_url_code": {"description": "The vanity URL code for the guild", "type": ["string", "null"]}, "owner_id": {"description": "The ID of the guild owner", "$ref": "#/components/schemas/SnowflakeStringType"}, "system_channel_id": { "description": "The ID of the channel where system messages are sent", @@ -26402,7 +26232,7 @@ }, "content_warning_text": { "description": "Custom guild-wide content warning text; null falls back to a localized default", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "explicit_content_filter": {"$ref": "#/components/schemas/GuildExplicitContentFilter"}, "default_message_notifications": {"$ref": "#/components/schemas/DefaultMessageNotifications"}, @@ -26413,7 +26243,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -26482,10 +26312,7 @@ "type": "object", "properties": { "name": {"description": "The name of the sticker (2-30 characters)", "type": "string"}, - "description": { - "description": "Description of the sticker (1-500 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "description": {"description": "Description of the sticker (1-500 characters)", "type": ["string", "null"]}, "tags": { "default": [], "description": "Array of autocomplete/suggestion tags (max 10 tags, each 1-30 characters)", @@ -26580,10 +26407,7 @@ "type": "object", "properties": { "name": {"description": "The name of the sticker (2-30 characters)", "type": "string"}, - "description": { - "description": "Description of the sticker (1-500 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "description": {"description": "Description of the sticker (1-500 characters)", "type": ["string", "null"]}, "tags": { "default": [], "description": "Array of autocomplete/suggestion tags (max 10 tags, each 1-30 characters)", @@ -26642,10 +26466,7 @@ }, "hoist": {"type": "boolean", "description": "Whether this role is displayed separately in the member list"}, "mentionable": {"type": "boolean", "description": "Whether this role can be mentioned by anyone"}, - "unicode_emoji": { - "description": "The unicode emoji for this role", - "anyOf": [{"type": "string"}, {"type": "null"}] - } + "unicode_emoji": {"description": "The unicode emoji for this role", "type": ["string", "null"]} }, "required": ["id", "name", "color", "position", "permissions", "hoist", "mentionable"], "additionalProperties": false @@ -26702,10 +26523,7 @@ "GuildMemberUpdateRequest": { "type": "object", "properties": { - "nick": { - "description": "The nickname to set for the member (1-32 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "nick": {"description": "The nickname to set for the member (1-32 characters)", "type": ["string", "null"]}, "roles": { "description": "Array of role IDs to assign to the member (max 250)", "maxItems": 250, @@ -26720,13 +26538,10 @@ "description": "Base64-encoded image data for the member guild banner", "anyOf": [{"$ref": "#/components/schemas/Base64ImageType"}, {"type": "null"}] }, - "bio": { - "description": "The member guild profile bio (1-320 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "bio": {"description": "The member guild profile bio (1-320 characters)", "type": ["string", "null"]}, "pronouns": { "description": "The member guild profile pronouns (1-40 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "accent_color": { "description": "The accent color for the member guild profile as an integer", @@ -26758,25 +26573,21 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] }, "timeout_reason": { "description": "The reason for timing out the member (1-512 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "channel_id": { "description": "The voice channel ID to move the member to", "anyOf": [{"$ref": "#/components/schemas/SnowflakeType"}, {"type": "null"}] }, - "connection_id": { - "description": "The voice connection ID for the member", - "anyOf": [{"type": "string"}, {"type": "null"}] - } - }, - "required": ["nick", "communication_disabled_until"] + "connection_id": {"description": "The voice connection ID for the member", "type": ["string", "null"]} + } }, "GuildMemberResponse": { "type": "object", @@ -26785,18 +26596,9 @@ "description": "The user this guild member represents", "$ref": "#/components/schemas/UserPartialResponse" }, - "nick": { - "description": "The nickname of the member in this guild", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "avatar": { - "description": "The hash of the member guild-specific avatar", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "banner": { - "description": "The hash of the member guild-specific banner", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "nick": {"description": "The nickname of the member in this guild", "type": ["string", "null"]}, + "avatar": {"description": "The hash of the member guild-specific avatar", "type": ["string", "null"]}, + "banner": {"description": "The hash of the member guild-specific banner", "type": ["string", "null"]}, "accent_color": { "description": "The accent colour of the member guild profile as an integer", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] @@ -26810,7 +26612,7 @@ "joined_at": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "ISO8601 timestamp of when the user joined the guild" }, "mute": {"type": "boolean", "description": "Whether the member is muted in voice channels"}, @@ -26821,7 +26623,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -26843,10 +26645,7 @@ "MyGuildMemberUpdateRequest": { "type": "object", "properties": { - "nick": { - "description": "The nickname to set for the member (1-32 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "nick": {"description": "The nickname to set for the member (1-32 characters)", "type": ["string", "null"]}, "avatar": { "description": "Base64-encoded image data for the member guild avatar", "anyOf": [{"$ref": "#/components/schemas/Base64ImageType"}, {"type": "null"}] @@ -26855,13 +26654,10 @@ "description": "Base64-encoded image data for the member guild banner", "anyOf": [{"$ref": "#/components/schemas/Base64ImageType"}, {"type": "null"}] }, - "bio": { - "description": "The member guild profile bio (1-320 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "bio": {"description": "The member guild profile bio (1-320 characters)", "type": ["string", "null"]}, "pronouns": { "description": "The member guild profile pronouns (1-40 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "accent_color": { "description": "The accent color for the member guild profile as an integer", @@ -26893,23 +26689,20 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] }, "timeout_reason": { "description": "The reason for timing out the member (1-512 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "channel_id": { "description": "The voice channel ID to move the member to", "anyOf": [{"$ref": "#/components/schemas/SnowflakeType"}, {"type": "null"}] }, - "connection_id": { - "description": "The voice connection ID for the member", - "anyOf": [{"type": "string"}, {"type": "null"}] - } + "connection_id": {"description": "The voice connection ID for the member", "type": ["string", "null"]} } }, "GuildMemberSearchRequest": { @@ -27162,19 +26955,13 @@ "status": {"type": "string", "description": "Application status"}, "description": {"type": "string", "description": "Discovery description"}, "category_type": {"type": "number", "description": "Discovery category type"}, - "primary_language": { - "description": "Primary community language", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "primary_language": {"description": "Primary community language", "type": ["string", "null"]}, "custom_tags": {"type": "array", "items": {"type": "string"}, "description": "Custom discovery tags"}, "applied_at": {"type": "string", "description": "Application timestamp"}, - "reviewed_at": {"description": "Review timestamp", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "review_reason": { - "description": "Review reason (approval/rejection)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "removed_at": {"description": "Removal timestamp", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "removal_reason": {"description": "Removal reason", "anyOf": [{"type": "string"}, {"type": "null"}]} + "reviewed_at": {"description": "Review timestamp", "type": ["string", "null"]}, + "review_reason": {"description": "Review reason (approval/rejection)", "type": ["string", "null"]}, + "removed_at": {"description": "Removal timestamp", "type": ["string", "null"]}, + "removal_reason": {"description": "Removal reason", "type": ["string", "null"]} }, "required": ["guild_id", "status", "description", "category_type", "custom_tags", "applied_at"], "additionalProperties": false @@ -27273,10 +27060,7 @@ "minimum": 0, "maximum": 604800 }, - "reason": { - "description": "The reason for the ban (max 512 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "reason": {"description": "The reason for the ban (max 512 characters)", "type": ["string", "null"]}, "ban_duration_seconds": { "description": "Duration of the ban in seconds (0 for permanent, or between 60 and 63072000 seconds for a temporary ban)", "type": "integer", @@ -27475,7 +27259,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -27631,7 +27415,7 @@ "type": "string", "maxLength": 254, "format": "email", - "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", + "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", "description": "Email address to send the magic link to" } }, @@ -27644,7 +27428,7 @@ "type": "string", "maxLength": 254, "format": "email", - "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", + "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", "description": "Donor email address" }, "amount_cents": { @@ -27746,7 +27530,7 @@ "pub_date": {"type": "string", "description": "ISO 8601 date when this version was published"}, "minimum_system_version": { "description": "Minimum operating system version required by this release, when applicable", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "files": { "type": "object", @@ -27755,13 +27539,10 @@ "type": "object", "properties": { "url": {"type": "string", "description": "Download URL for this file"}, - "sha256": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "SHA-256 hash of the file for verification" - }, + "sha256": {"description": "SHA-256 hash of the file for verification", "type": ["string", "null"]}, "checksum_url": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Plain text .sha256 checksum file URL for this file" + "description": "Plain text .sha256 checksum file URL for this file", + "type": ["string", "null"] } }, "required": ["url", "sha256", "checksum_url"], @@ -27783,17 +27564,11 @@ "properties": { "id": {"description": "Guild ID", "$ref": "#/components/schemas/SnowflakeStringType"}, "name": {"type": "string", "description": "Guild name"}, - "icon": {"description": "Guild icon hash", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "banner": {"description": "Guild banner hash", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "description": { - "description": "Discovery description", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "icon": {"description": "Guild icon hash", "type": ["string", "null"]}, + "banner": {"description": "Guild banner hash", "type": ["string", "null"]}, + "description": {"description": "Discovery description", "type": ["string", "null"]}, "category_type": {"type": "number", "description": "Discovery category type"}, - "primary_language": { - "description": "Primary community language", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "primary_language": {"description": "Primary community language", "type": ["string", "null"]}, "custom_tags": {"type": "array", "items": {"type": "string"}, "description": "Custom discovery tags"}, "member_count": {"type": "number", "description": "Approximate member count"}, "online_count": {"type": "number", "description": "Approximate online member count"}, @@ -27863,7 +27638,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ], @@ -27915,10 +27690,7 @@ "type": "object", "properties": { "name": {"description": "Display name for the meme", "type": "string"}, - "alt_text": { - "description": "Alternative text description for accessibility", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "alt_text": {"description": "Alternative text description for accessibility", "type": ["string", "null"]}, "tags": { "description": "Tags for categorizing and searching the meme", "default": [], @@ -27991,11 +27763,11 @@ }, "title": { "description": "A title for the attachment (1-1024 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "description": { "description": "Alt text description for the attachment (1-4096 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] } }, "required": ["id"] @@ -28101,12 +27873,12 @@ "unique": { "default": false, "description": "Whether to create a new unique invite or reuse an existing one", - "anyOf": [{"type": "boolean"}, {"type": "null"}] + "type": ["boolean", "null"] }, "temporary": { "default": false, "description": "Whether members that joined via this invite should be kicked after disconnecting", - "anyOf": [{"type": "boolean"}, {"type": "null"}] + "type": ["boolean", "null"] } } }, @@ -28133,7 +27905,7 @@ "properties": { "region": { "description": "The preferred voice region for the call (1-64 characters). Omit or set to null for automatic region selection.", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "latitude": {"description": "Client latitude used for automatic region selection", "type": "string"}, "longitude": {"description": "Client longitude used for automatic region selection", "type": "string"} @@ -28203,11 +27975,8 @@ { "type": "object", "properties": { - "topic": { - "description": "The channel topic (1-1024 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "url": {"description": "External URL for link channels", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "topic": {"description": "The channel topic (1-1024 characters)", "type": ["string", "null"]}, + "url": {"description": "External URL for link channels", "type": ["string", "null"]}, "parent_id": { "description": "ID of the parent category for this channel", "anyOf": [{"$ref": "#/components/schemas/SnowflakeType"}, {"type": "null"}] @@ -28258,11 +28027,11 @@ }, "nsfw": { "description": "Legacy: setting true maps to nsfw_override=true; setting false maps to nsfw_override=null (inherit). Prefer nsfw_override.", - "anyOf": [{"type": "boolean"}, {"type": "null"}] + "type": ["boolean", "null"] }, "nsfw_override": { "description": "Per-channel adult-content override (true=on, false=off, null=inherit from category then guild). Takes precedence over the legacy `nsfw` field if both are present.", - "anyOf": [{"type": "boolean"}, {"type": "null"}] + "type": ["boolean", "null"] }, "content_warning_level": { "description": "Channel-level content warning override (0=inherit, 1=force-warn)", @@ -28286,19 +28055,16 @@ }, "rtc_region": { "description": "Voice region ID for the voice channel (1-64 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, - "name": {"description": "The name of the channel", "anyOf": [{"type": "string"}, {"type": "null"}]} + "name": {"description": "The name of the channel", "type": ["string", "null"]} } }, { "type": "object", "properties": { - "topic": { - "description": "The channel topic (1-1024 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "url": {"description": "External URL for link channels", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "topic": {"description": "The channel topic (1-1024 characters)", "type": ["string", "null"]}, + "url": {"description": "External URL for link channels", "type": ["string", "null"]}, "parent_id": { "description": "ID of the parent category for this channel", "anyOf": [{"$ref": "#/components/schemas/SnowflakeType"}, {"type": "null"}] @@ -28349,11 +28115,11 @@ }, "nsfw": { "description": "Legacy: setting true maps to nsfw_override=true; setting false maps to nsfw_override=null (inherit). Prefer nsfw_override.", - "anyOf": [{"type": "boolean"}, {"type": "null"}] + "type": ["boolean", "null"] }, "nsfw_override": { "description": "Per-channel adult-content override (true=on, false=off, null=inherit from category then guild). Takes precedence over the legacy `nsfw` field if both are present.", - "anyOf": [{"type": "boolean"}, {"type": "null"}] + "type": ["boolean", "null"] }, "content_warning_level": { "description": "Channel-level content warning override (0=inherit, 1=force-warn)", @@ -28377,19 +28143,16 @@ }, "rtc_region": { "description": "Voice region ID for the voice channel (1-64 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, - "name": {"description": "The name of the channel", "anyOf": [{"type": "string"}, {"type": "null"}]} + "name": {"description": "The name of the channel", "type": ["string", "null"]} } }, { "type": "object", "properties": { - "topic": { - "description": "The channel topic (1-1024 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "url": {"description": "External URL for link channels", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "topic": {"description": "The channel topic (1-1024 characters)", "type": ["string", "null"]}, + "url": {"description": "External URL for link channels", "type": ["string", "null"]}, "parent_id": { "description": "ID of the parent category for this channel", "anyOf": [{"$ref": "#/components/schemas/SnowflakeType"}, {"type": "null"}] @@ -28440,11 +28203,11 @@ }, "nsfw": { "description": "Legacy: setting true maps to nsfw_override=true; setting false maps to nsfw_override=null (inherit). Prefer nsfw_override.", - "anyOf": [{"type": "boolean"}, {"type": "null"}] + "type": ["boolean", "null"] }, "nsfw_override": { "description": "Per-channel adult-content override (true=on, false=off, null=inherit from category then guild). Takes precedence over the legacy `nsfw` field if both are present.", - "anyOf": [{"type": "boolean"}, {"type": "null"}] + "type": ["boolean", "null"] }, "content_warning_level": { "description": "Channel-level content warning override (0=inherit, 1=force-warn)", @@ -28468,19 +28231,16 @@ }, "rtc_region": { "description": "Voice region ID for the voice channel (1-64 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, - "name": {"description": "The name of the category", "anyOf": [{"type": "string"}, {"type": "null"}]} + "name": {"description": "The name of the category", "type": ["string", "null"]} } }, { "type": "object", "properties": { - "topic": { - "description": "The channel topic (1-1024 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "url": {"description": "External URL for link channels", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "topic": {"description": "The channel topic (1-1024 characters)", "type": ["string", "null"]}, + "url": {"description": "External URL for link channels", "type": ["string", "null"]}, "parent_id": { "description": "ID of the parent category for this channel", "anyOf": [{"$ref": "#/components/schemas/SnowflakeType"}, {"type": "null"}] @@ -28531,11 +28291,11 @@ }, "nsfw": { "description": "Legacy: setting true maps to nsfw_override=true; setting false maps to nsfw_override=null (inherit). Prefer nsfw_override.", - "anyOf": [{"type": "boolean"}, {"type": "null"}] + "type": ["boolean", "null"] }, "nsfw_override": { "description": "Per-channel adult-content override (true=on, false=off, null=inherit from category then guild). Takes precedence over the legacy `nsfw` field if both are present.", - "anyOf": [{"type": "boolean"}, {"type": "null"}] + "type": ["boolean", "null"] }, "content_warning_level": { "description": "Channel-level content warning override (0=inherit, 1=force-warn)", @@ -28559,15 +28319,15 @@ }, "rtc_region": { "description": "Voice region ID for the voice channel (1-64 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, - "name": {"description": "The name of the channel", "anyOf": [{"type": "string"}, {"type": "null"}]} + "name": {"description": "The name of the channel", "type": ["string", "null"]} } }, { "type": "object", "properties": { - "name": {"description": "The name of the group DM", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "name": {"description": "The name of the group DM", "type": ["string", "null"]}, "icon": { "description": "Base64-encoded icon image for the group DM", "anyOf": [{"$ref": "#/components/schemas/Base64ImageType"}, {"type": "null"}] @@ -28736,10 +28496,7 @@ "properties": { "enabled": {"type": "boolean", "description": "Whether SSO is enabled for this instance"}, "enforced": {"type": "boolean", "description": "Whether SSO is required for all users"}, - "display_name": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Display name of the SSO provider" - }, + "display_name": {"description": "Display name of the SSO provider", "type": ["string", "null"]}, "redirect_uri": {"type": "string", "description": "OAuth redirect URI for SSO"} }, "required": ["enabled", "enforced", "display_name", "redirect_uri"], @@ -28748,13 +28505,10 @@ "SsoStartRequest": { "type": "object", "properties": { - "redirect_to": { - "description": "URL to redirect to after SSO completion", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "redirect_to": {"description": "URL to redirect to after SSO completion", "type": ["string", "null"]}, "redirect_uri": { "description": "OAuth redirect URI to use for the SSO provider callback", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] } } }, @@ -28880,13 +28634,10 @@ "password": {"description": "Password for the new account", "$ref": "#/components/schemas/PasswordType"}, "date_of_birth": {"description": "Date of birth in YYYY-MM-DD format", "type": "string"}, "consent": {"default": false, "description": "Whether user consents to terms of service", "type": "boolean"}, - "invite_code": { - "description": "Guild invite code to join after registration", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "invite_code": {"description": "Guild invite code to join after registration", "type": ["string", "null"]}, "registration_url_code": { "description": "Admin-issued registration URL code to use for this registration", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "theme": { "description": "Initial UI theme preference for the new account", @@ -28960,10 +28711,7 @@ "properties": { "email": {"description": "Email address for authentication", "$ref": "#/components/schemas/EmailType"}, "password": {"description": "Account password", "$ref": "#/components/schemas/PasswordType"}, - "invite_code": { - "description": "Guild invite code to join after login", - "anyOf": [{"type": "string"}, {"type": "null"}] - } + "invite_code": {"description": "Guild invite code to join after login", "type": ["string", "null"]} }, "required": ["email", "password"] }, @@ -28971,10 +28719,7 @@ "type": "object", "properties": { "completed": {"type": "boolean", "description": "Whether the IP authorization has been completed"}, - "token": { - "description": "Authentication token if authorization is complete", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "token": {"description": "Authentication token if authorization is complete", "type": ["string", "null"]}, "user_id": { "description": "User ID if authorization is complete", "anyOf": [{"$ref": "#/components/schemas/SnowflakeStringType"}, {"type": "null"}] @@ -28998,10 +28743,7 @@ "type": "object", "properties": { "status": {"type": "string", "description": "Current status of the handoff (pending, completed, expired)"}, - "token": { - "description": "Authentication token if handoff is complete", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "token": {"description": "Authentication token if handoff is complete", "type": ["string", "null"]}, "user_id": { "description": "User ID if handoff is complete", "anyOf": [{"$ref": "#/components/schemas/SnowflakeStringType"}, {"type": "null"}] @@ -29024,14 +28766,8 @@ { "type": "object", "properties": { - "platform": { - "description": "The platform of the requesting device", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "os": { - "description": "The operating system of the requesting device", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "platform": {"description": "The platform of the requesting device", "type": ["string", "null"]}, + "os": {"description": "The operating system of the requesting device", "type": ["string", "null"]}, "device": { "type": "string", "enum": ["mobile", "desktop"], @@ -29066,7 +28802,7 @@ "expires_at": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "ISO 8601 timestamp when the handoff code expires" }, "poll_secret": { @@ -29118,12 +28854,12 @@ }, "name": {"type": "string", "description": "The name of the application"}, "icon": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The persisted bot avatar hash used as the application icon, if available" + "description": "The persisted bot avatar hash used as the application icon, if available", + "type": ["string", "null"] }, "description": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The persisted bot profile bio used as the application description" + "description": "The persisted bot profile bio used as the application description", + "type": ["string", "null"] }, "bot_public": {"type": "boolean", "description": "Whether the bot can be invited by anyone"}, "bot_require_code_grant": {"type": "boolean", "description": "Whether the bot requires OAuth2 code grant"}, @@ -29142,12 +28878,9 @@ }, "username": {"type": "string", "description": "The username of the bot"}, "discriminator": {"type": "string", "description": "The discriminator of the bot"}, - "avatar": {"description": "The avatar hash of the bot", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "banner": {"description": "The banner hash of the bot", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "bio": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The bio or description of the bot" - }, + "avatar": {"description": "The avatar hash of the bot", "type": ["string", "null"]}, + "banner": {"description": "The banner hash of the bot", "type": ["string", "null"]}, + "bio": {"description": "The bio or description of the bot", "type": ["string", "null"]}, "token": {"description": "The bot token for authentication", "type": "string"}, "mfa_enabled": {"description": "Whether the bot has MFA enabled", "type": "boolean"}, "authenticator_types": { @@ -29259,12 +28992,12 @@ "type": "object", "properties": { "terms_url": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Optional public terms of service URL for account registration" + "description": "Optional public terms of service URL for account registration", + "type": ["string", "null"] }, "privacy_url": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Optional public privacy policy URL for account registration" + "description": "Optional public privacy policy URL for account registration", + "type": ["string", "null"] } }, "required": ["terms_url", "privacy_url"], @@ -29313,12 +29046,12 @@ "type": "object", "properties": { "terms_url": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Optional public terms of service URL for account registration" + "description": "Optional public terms of service URL for account registration", + "type": ["string", "null"] }, "privacy_url": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Optional public privacy policy URL for account registration" + "description": "Optional public privacy policy URL for account registration", + "type": ["string", "null"] } }, "required": ["terms_url", "privacy_url"], @@ -29348,10 +29081,7 @@ "type": "boolean", "description": "Whether the instance administrator has completed initial setup" }, - "admin_url": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Admin panel URL to continue instance setup" - } + "admin_url": {"description": "Admin panel URL to continue instance setup", "type": ["string", "null"]} }, "required": ["configured", "admin_url"], "additionalProperties": false, @@ -29361,37 +29091,22 @@ "type": "object", "properties": { "product_name": {"type": "string", "description": "Public product name shown by client applications"}, - "icon_url": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Optional image URL for the full application icon" - }, + "icon_url": {"description": "Optional image URL for the full application icon", "type": ["string", "null"]}, "symbol_url": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Optional image URL for the compact application symbol" - }, - "logo_url": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Optional image URL for the application logo" + "description": "Optional image URL for the compact application symbol", + "type": ["string", "null"] }, + "logo_url": {"description": "Optional image URL for the application logo", "type": ["string", "null"]}, "wordmark_url": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Optional image URL for the application wordmark" - }, - "favicon_url": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Optional favicon URL for browser metadata" - }, - "theme_color": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Optional browser theme color" - }, - "status_page_url": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Optional public status page URL" + "description": "Optional image URL for the application wordmark", + "type": ["string", "null"] }, + "favicon_url": {"description": "Optional favicon URL for browser metadata", "type": ["string", "null"]}, + "theme_color": {"description": "Optional browser theme color", "type": ["string", "null"]}, + "status_page_url": {"description": "Optional public status page URL", "type": ["string", "null"]}, "status_page_incident_history_url": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Optional public status page incident history URL" + "description": "Optional public status page incident history URL", + "type": ["string", "null"] } }, "required": [ @@ -29411,10 +29126,7 @@ "InstancePushSchema": { "type": "object", "properties": { - "public_vapid_key": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "VAPID public key for web push notifications" - } + "public_vapid_key": {"description": "VAPID public key for web push notifications", "type": ["string", "null"]} }, "required": ["public_vapid_key"], "additionalProperties": false, @@ -29445,8 +29157,8 @@ "description": "Whether this instance runs as a single community that every user automatically joins" }, "single_community_guild_id": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The stock community guild ID when single-community mode is enabled" + "description": "The stock community guild ID when single-community mode is enabled", + "type": ["string", "null"] }, "direct_messages_disabled": { "type": "boolean", @@ -29478,10 +29190,7 @@ "properties": { "enabled": {"type": "boolean", "description": "Whether SSO is enabled for this instance"}, "enforced": {"type": "boolean", "description": "Whether SSO is required for all users"}, - "display_name": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Display name of the SSO provider" - }, + "display_name": {"description": "Display name of the SSO provider", "type": ["string", "null"]}, "redirect_uri": {"type": "string", "description": "OAuth redirect URI for SSO"} }, "required": ["enabled", "enforced", "display_name", "redirect_uri"], @@ -29534,13 +29243,10 @@ "description": "Captcha provider name (hcaptcha, turnstile, none)", "$ref": "#/components/schemas/InstanceCaptchaProviderSchema" }, - "hcaptcha_site_key": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "hCaptcha site key if using hCaptcha" - }, + "hcaptcha_site_key": {"description": "hCaptcha site key if using hCaptcha", "type": ["string", "null"]}, "turnstile_site_key": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Cloudflare Turnstile site key if using Turnstile" + "description": "Cloudflare Turnstile site key if using Turnstile", + "type": ["string", "null"] } }, "required": ["provider", "hcaptcha_site_key", "turnstile_site_key"], @@ -29650,18 +29356,9 @@ "AuthSessionLocation": { "type": "object", "properties": { - "city": { - "description": "The city name reported by the client", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "region": { - "description": "The region reported by the client", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "country": { - "description": "The country reported by the client", - "anyOf": [{"type": "string"}, {"type": "null"}] - } + "city": {"description": "The city name reported by the client", "type": ["string", "null"]}, + "region": {"description": "The region reported by the client", "type": ["string", "null"]}, + "country": {"description": "The country reported by the client", "type": ["string", "null"]} }, "additionalProperties": false }, @@ -29722,18 +29419,9 @@ { "type": "object", "properties": { - "platform": { - "description": "The platform reported by the client", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "os": { - "description": "The operating system reported by the client", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "browser": { - "description": "The browser reported by the client", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "platform": {"description": "The platform reported by the client", "type": ["string", "null"]}, + "os": {"description": "The operating system reported by the client", "type": ["string", "null"]}, + "browser": {"description": "The browser reported by the client", "type": ["string", "null"]}, "device": { "type": "string", "enum": ["mobile", "desktop"], @@ -29751,8 +29439,8 @@ ] }, "masked_ip": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Semi-redacted IP address recorded for this session" + "description": "Semi-redacted IP address recorded for this session", + "type": ["string", "null"] }, "approx_last_used_at": { "description": "Approximate timestamp of the last session activity", @@ -29760,7 +29448,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -29773,10 +29461,7 @@ "ChannelNicknameOverrides": { "type": "object", "propertyNames": {"type": "string", "description": "User ID"}, - "additionalProperties": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Nickname or null to clear" - }, + "additionalProperties": {"description": "Nickname or null to clear", "type": ["string", "null"]}, "description": "User nickname overrides (user ID to nickname mapping)" }, "Base64ImageType": {"type": "string"}, @@ -29970,7 +29655,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -29988,7 +29673,7 @@ "created_at": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "ISO8601 timestamp of when the invite was created" }, "uses": { @@ -30017,7 +29702,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -30031,11 +29716,8 @@ "$ref": "#/components/schemas/SnowflakeStringType" }, "name": {"type": "string", "description": "The name of the guild"}, - "icon": {"description": "The hash of the guild icon", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "banner": { - "description": "The hash of the guild banner", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "icon": {"description": "The hash of the guild icon", "type": ["string", "null"]}, + "banner": {"description": "The hash of the guild banner", "type": ["string", "null"]}, "banner_width": { "description": "The width of the guild banner in pixels", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] @@ -30044,10 +29726,7 @@ "description": "The height of the guild banner in pixels", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] }, - "splash": { - "description": "The hash of the guild splash screen", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "splash": {"description": "The hash of the guild splash screen", "type": ["string", "null"]}, "splash_width": { "description": "The width of the guild splash in pixels", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] @@ -30067,10 +29746,7 @@ "enum": [0, 1, 2], "type": "integer" }, - "embed_splash": { - "description": "The hash of the embedded invite splash", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "embed_splash": {"description": "The hash of the embedded invite splash", "type": ["string", "null"]}, "embed_splash_width": { "description": "The width of the embedded invite splash in pixels", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] @@ -30103,7 +29779,7 @@ "created_at": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "ISO8601 timestamp of when the invite was created" }, "uses": { @@ -30141,7 +29817,7 @@ "description": "The unique identifier (snowflake) for this channel", "$ref": "#/components/schemas/SnowflakeStringType" }, - "name": {"description": "The name of the channel", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "name": {"description": "The name of the channel", "type": ["string", "null"]}, "type": {"$ref": "#/components/schemas/ChannelType"}, "recipients": { "description": "The recipients of the DM channel", @@ -30166,8 +29842,8 @@ "$ref": "#/components/schemas/SnowflakeStringType" }, "name": {"type": "string", "description": "The name of the guild"}, - "icon": {"description": "The hash of the guild icon", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "banner": {"description": "The hash of the guild banner", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "icon": {"description": "The hash of the guild icon", "type": ["string", "null"]}, + "banner": {"description": "The hash of the guild banner", "type": ["string", "null"]}, "banner_width": { "description": "The width of the guild banner in pixels", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] @@ -30176,10 +29852,7 @@ "description": "The height of the guild banner in pixels", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] }, - "splash": { - "description": "The hash of the guild splash screen", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "splash": {"description": "The hash of the guild splash screen", "type": ["string", "null"]}, "splash_width": { "description": "The width of the guild splash in pixels", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] @@ -30199,10 +29872,7 @@ "enum": [0, 1, 2], "type": "integer" }, - "embed_splash": { - "description": "The hash of the embedded invite splash", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "embed_splash": {"description": "The hash of the embedded invite splash", "type": ["string", "null"]}, "embed_splash_width": { "description": "The width of the embedded invite splash in pixels", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] @@ -30412,23 +30082,17 @@ "ClientAttachmentRequest": { "type": "object", "properties": { - "title": { - "description": "A title for the attachment (1-1024 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "title": {"description": "A title for the attachment (1-1024 characters)", "type": ["string", "null"]}, "description": { "description": "An alt text description of the attachment (1-4096 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "flags": {"$ref": "#/components/schemas/MessageAttachmentFlags", "description": "Attachment flags"}, "duration": { "description": "The duration of the audio file in seconds", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] }, - "waveform": { - "description": "Base64 encoded audio waveform data", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "waveform": {"description": "Base64 encoded audio waveform data", "type": ["string", "null"]}, "id": { "description": "The client-side identifier for this attachment", "$ref": "#/components/schemas/Int32Type" @@ -30446,23 +30110,17 @@ "ClientUploadedAttachmentRequest": { "type": "object", "properties": { - "title": { - "description": "A title for the attachment (1-1024 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "title": {"description": "A title for the attachment (1-1024 characters)", "type": ["string", "null"]}, "description": { "description": "An alt text description of the attachment (1-4096 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "flags": {"$ref": "#/components/schemas/MessageAttachmentFlags", "description": "Attachment flags"}, "duration": { "description": "The duration of the audio file in seconds", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] }, - "waveform": { - "description": "Base64 encoded audio waveform data", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "waveform": {"description": "Base64 encoded audio waveform data", "type": ["string", "null"]}, "id": { "description": "The client-side identifier for this attachment", "$ref": "#/components/schemas/Int32Type" @@ -30488,11 +30146,8 @@ "RichEmbedRequest": { "type": "object", "properties": { - "url": {"description": "URL of the embed", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "title": { - "description": "Title of the embed (0-256 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "url": {"description": "URL of the embed", "type": ["string", "null"]}, + "title": {"description": "Title of the embed (0-256 characters)", "type": ["string", "null"]}, "color": { "description": "Color code of the embed (hex integer)", "anyOf": [{"$ref": "#/components/schemas/ColorType"}, {"type": "null"}] @@ -30512,10 +30167,7 @@ {"type": "null"} ] }, - "description": { - "description": "Description of the embed (1-4096 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "description": {"description": "Description of the embed (1-4096 characters)", "type": ["string", "null"]}, "author": { "description": "Author information", "anyOf": [{"$ref": "#/components/schemas/RichEmbedAuthorRequest"}, {"type": "null"}] @@ -30555,8 +30207,7 @@ {"type": "null"} ] } - }, - "required": ["description"] + } }, "MessageContentRequest": { "type": "string", @@ -30568,7 +30219,7 @@ "type": "object", "properties": { "text": {"description": "Footer text (1-2048 characters)", "type": "string"}, - "icon_url": {"description": "URL of the footer icon", "anyOf": [{"type": "string"}, {"type": "null"}]} + "icon_url": {"description": "URL of the footer icon", "type": ["string", "null"]} }, "required": ["text"] }, @@ -30581,10 +30232,7 @@ "type": "object", "properties": { "url": {"description": "URL of the media (image, video, etc.)", "type": "string"}, - "description": { - "description": "Alt text description of the media", - "anyOf": [{"type": "string"}, {"type": "null"}] - } + "description": {"description": "Alt text description of the media", "type": ["string", "null"]} }, "required": ["url"] }, @@ -30597,11 +30245,8 @@ "type": "object", "properties": { "name": {"description": "Name of the embed author", "type": "string"}, - "url": { - "description": "URL to link from the author name", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "icon_url": {"description": "URL of the author icon", "anyOf": [{"type": "string"}, {"type": "null"}]} + "url": {"description": "URL to link from the author name", "type": ["string", "null"]}, + "icon_url": {"description": "URL of the author icon", "type": ["string", "null"]} }, "required": ["name"] }, @@ -30666,7 +30311,7 @@ "timestamp": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "The ISO 8601 timestamp of when the message was created" }, "edited_timestamp": { @@ -30675,7 +30320,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -30761,10 +30406,7 @@ {"type": "null"} ] }, - "nonce": { - "description": "A client-provided value for message deduplication", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "nonce": {"description": "A client-provided value for message deduplication", "type": ["string", "null"]}, "call": { "description": "Call information if this message represents a call", "anyOf": [ @@ -30782,7 +30424,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -30815,7 +30457,7 @@ "pinned_at": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "The ISO 8601 timestamp of when the message was pinned" } }, @@ -30825,14 +30467,11 @@ "MessageSnapshotResponse": { "type": "object", "properties": { - "content": { - "description": "The text content of the snapshot", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "content": {"description": "The text content of the snapshot", "type": ["string", "null"]}, "timestamp": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "The ISO 8601 timestamp of when the original message was created" }, "edited_timestamp": { @@ -30841,7 +30480,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -30917,28 +30556,16 @@ "$ref": "#/components/schemas/SnowflakeStringType" }, "filename": {"type": "string", "description": "The name of the attached file"}, - "title": {"description": "The title of the attachment", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "description": { - "description": "The description of the attachment", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "content_type": { - "description": "The MIME type of the attachment", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "content_hash": { - "description": "The hash of the attachment content", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "title": {"description": "The title of the attachment", "type": ["string", "null"]}, + "description": {"description": "The description of the attachment", "type": ["string", "null"]}, + "content_type": {"description": "The MIME type of the attachment", "type": ["string", "null"]}, + "content_hash": {"description": "The hash of the attachment content", "type": ["string", "null"]}, "size": { "description": "The size of the attachment in bytes", "$ref": "#/components/schemas/NonNegativeSafeIntegerType" }, - "url": {"description": "The URL of the attachment", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "proxy_url": { - "description": "The proxied URL of the attachment", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "url": {"description": "The URL of the attachment", "type": ["string", "null"]}, + "proxy_url": {"description": "The proxied URL of the attachment", "type": ["string", "null"]}, "width": { "description": "The width of the attachment in pixels (for images/videos)", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] @@ -30949,29 +30576,20 @@ }, "placeholder": { "description": "The base64 encoded placeholder image for lazy loading", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "flags": {"$ref": "#/components/schemas/MessageAttachmentFlags"}, - "nsfw": { - "description": "Whether the attachment is flagged as NSFW", - "anyOf": [{"type": "boolean"}, {"type": "null"}] - }, + "nsfw": {"description": "Whether the attachment is flagged as NSFW", "type": ["boolean", "null"]}, "duration": { "description": "The duration of the media in seconds", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] }, - "waveform": { - "description": "The base64 encoded audio waveform data", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "waveform": {"description": "The base64 encoded audio waveform data", "type": ["string", "null"]}, "expires_at": { "description": "The ISO 8601 timestamp when the attachment URL expires", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, - "expired": { - "description": "Whether the attachment URL has expired", - "anyOf": [{"type": "boolean"}, {"type": "null"}] - } + "expired": {"description": "Whether the attachment URL has expired", "type": ["boolean", "null"]} }, "required": ["id", "filename", "size", "flags"], "additionalProperties": false @@ -30987,7 +30605,7 @@ "description": "The URL of the embed", "anyOf": [{"type": "string", "format": "uri"}, {"type": "null"}] }, - "title": {"description": "The title of the embed", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "title": {"description": "The title of the embed", "type": ["string", "null"]}, "color": { "description": "The color code of the embed sidebar", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] @@ -30998,15 +30616,12 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] }, - "description": { - "description": "The description of the embed", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "description": {"description": "The description of the embed", "type": ["string", "null"]}, "author": { "description": "The author information of the embed", "anyOf": [{"$ref": "#/components/schemas/EmbedAuthorResponse"}, {"type": "null"}] @@ -31041,7 +30656,7 @@ }, "html": { "description": "Sanitized oEmbed HTML for trusted specialized embed renderers", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "html_width": { "description": "The preferred width of sanitized oEmbed HTML", @@ -31051,10 +30666,7 @@ "description": "The preferred height of sanitized oEmbed HTML", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] }, - "nsfw": { - "description": "Whether the embed is flagged as NSFW", - "anyOf": [{"type": "boolean"}, {"type": "null"}] - }, + "nsfw": {"description": "Whether the embed is flagged as NSFW", "type": ["boolean", "null"]}, "children": { "description": "Internal nested embeds generated by unfurlers", "anyOf": [ @@ -31115,7 +30727,7 @@ "description": "The URL of the embed", "anyOf": [{"type": "string", "format": "uri"}, {"type": "null"}] }, - "title": {"description": "The title of the embed", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "title": {"description": "The title of the embed", "type": ["string", "null"]}, "color": { "description": "The color code of the embed sidebar", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] @@ -31126,15 +30738,12 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] }, - "description": { - "description": "The description of the embed", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "description": {"description": "The description of the embed", "type": ["string", "null"]}, "author": { "description": "The author information of the embed", "anyOf": [{"$ref": "#/components/schemas/EmbedAuthorResponse"}, {"type": "null"}] @@ -31169,7 +30778,7 @@ }, "html": { "description": "Sanitized oEmbed HTML for trusted specialized embed renderers", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "html_width": { "description": "The preferred width of sanitized oEmbed HTML", @@ -31179,10 +30788,7 @@ "description": "The preferred height of sanitized oEmbed HTML", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] }, - "nsfw": { - "description": "Whether the embed is flagged as NSFW", - "anyOf": [{"type": "boolean"}, {"type": "null"}] - } + "nsfw": {"description": "Whether the embed is flagged as NSFW", "type": ["boolean", "null"]} }, "required": ["type"], "additionalProperties": false @@ -31195,14 +30801,8 @@ "description": "The proxied URL of the media", "anyOf": [{"type": "string", "format": "uri"}, {"type": "null"}] }, - "content_type": { - "description": "The MIME type of the media", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "content_hash": { - "description": "The hash of the media content", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "content_type": {"description": "The MIME type of the media", "type": ["string", "null"]}, + "content_hash": {"description": "The hash of the media content", "type": ["string", "null"]}, "width": { "description": "The width of the media in pixels", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] @@ -31211,13 +30811,10 @@ "description": "The height of the media in pixels", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] }, - "description": { - "description": "The description of the media", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "description": {"description": "The description of the media", "type": ["string", "null"]}, "placeholder": { "description": "The base64 encoded placeholder image for lazy loading", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "duration": { "description": "The duration of the media in seconds", @@ -31288,23 +30885,17 @@ "ClientAttachmentReferenceRequest": { "type": "object", "properties": { - "title": { - "description": "A title for the attachment (1-1024 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "title": {"description": "A title for the attachment (1-1024 characters)", "type": ["string", "null"]}, "description": { "description": "An alt text description of the attachment (1-4096 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "flags": {"$ref": "#/components/schemas/MessageAttachmentFlags", "description": "Attachment flags"}, "duration": { "description": "The duration of the audio file in seconds", "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"type": "null"}] }, - "waveform": { - "description": "Base64 encoded audio waveform data", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "waveform": {"description": "Base64 encoded audio waveform data", "type": ["string", "null"]}, "id": { "anyOf": [{"$ref": "#/components/schemas/Int32Type"}, {"$ref": "#/components/schemas/SnowflakeType"}], "description": "The identifier of the attachment being referenced (snowflake ID or file index)" @@ -31315,8 +30906,7 @@ "minLength": 1, "maxLength": 255 } - }, - "required": ["id"] + } }, "ChannelOverwriteType": { "description": "The type of entity the overwrite applies to", @@ -31407,10 +30997,7 @@ "type": "object", "properties": { "name": {"type": "string", "description": "The name of the template guild"}, - "description": { - "description": "The description of the template guild", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "description": {"description": "The description of the template guild", "type": ["string", "null"]}, "verification_level": {"description": "The verification level", "type": "number"}, "default_message_notifications": {"description": "The default message notification level", "type": "number"}, "explicit_content_filter": {"description": "The explicit content filter level", "type": "number"}, @@ -31447,8 +31034,8 @@ "description": "The template-local channel ID" }, "type": {"type": "number", "description": "The channel type (0 = text, 2 = voice, 4 = category)"}, - "name": {"description": "The name of the channel", "anyOf": [{"type": "string"}, {"type": "null"}]}, - "topic": {"description": "The channel topic", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "name": {"description": "The name of the channel", "type": ["string", "null"]}, + "topic": {"description": "The channel topic", "type": ["string", "null"]}, "position": {"type": "number", "description": "The position of the channel"}, "parent_id": { "description": "The template-local ID of the parent category", @@ -31460,14 +31047,11 @@ {"type": "null"} ] }, - "bitrate": {"description": "The bitrate for voice channels", "anyOf": [{"type": "number"}, {"type": "null"}]}, - "user_limit": { - "description": "The user limit for voice channels", - "anyOf": [{"type": "number"}, {"type": "null"}] - }, + "bitrate": {"description": "The bitrate for voice channels", "type": ["number", "null"]}, + "user_limit": {"description": "The user limit for voice channels", "type": ["number", "null"]}, "voice_connection_limit": { "description": "The per-user voice connection limit for voice channels", - "anyOf": [{"type": "number"}, {"type": "null"}] + "type": ["number", "null"] }, "nsfw": {"description": "Whether the channel is NSFW", "type": "boolean"}, "rate_limit_per_user": {"description": "Slowmode rate limit in seconds", "type": "number"}, @@ -31483,7 +31067,7 @@ }, "type": { "description": "The type of overwrite (0/role = role, 1/member = member)", - "anyOf": [{"type": "number"}, {"type": "string"}] + "type": ["number", "string"] }, "allow": { "anyOf": [{"type": "string"}, {"type": "integer", "minimum": 0, "maximum": 9007199254740991}], @@ -31507,7 +31091,7 @@ "anyOf": [{"type": "integer", "minimum": 0, "maximum": 9007199254740991}, {"type": "string"}], "description": "The template-local role ID" }, - "name": {"description": "The name of the role", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "name": {"description": "The name of the role", "type": ["string", "null"]}, "permissions": { "description": "The permissions bitfield as a string (legacy)", "anyOf": [{"type": "string"}, {"type": "integer", "minimum": 0, "maximum": 9007199254740991}] @@ -31519,10 +31103,7 @@ "color": {"description": "The colour of the role as an integer", "type": "number"}, "hoist": {"description": "Whether the role is hoisted", "type": "boolean"}, "mentionable": {"description": "Whether the role is mentionable", "type": "boolean"}, - "unicode_emoji": { - "description": "The unicode emoji for the role icon", - "anyOf": [{"type": "string"}, {"type": "null"}] - } + "unicode_emoji": {"description": "The unicode emoji for the role icon", "type": ["string", "null"]} }, "required": ["id"] }, @@ -31617,10 +31198,7 @@ "anyOf": [{"$ref": "#/components/schemas/SnowflakeStringType"}, {"type": "null"}] }, "name": {"type": "string", "description": "The name of the webhook"}, - "avatar_hash": { - "description": "The hash of the webhook avatar", - "anyOf": [{"type": "string"}, {"type": "null"}] - } + "avatar_hash": {"description": "The hash of the webhook avatar", "type": ["string", "null"]} }, "required": ["id", "type", "name"], "additionalProperties": false @@ -31639,7 +31217,7 @@ }, "target_id": { "description": "The ID of the affected entity (user, channel, role, invite code, etc.)", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "reason": { "description": "The audit log reason. For bans and timeouts without an X-Audit-Log-Reason header this is the reason sent in the request body", @@ -31828,7 +31406,7 @@ "type": "object", "properties": { "user": {"description": "The banned user", "$ref": "#/components/schemas/UserPartialResponse"}, - "reason": {"description": "The reason for the ban", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "reason": {"description": "The reason for the ban", "type": ["string", "null"]}, "moderator_id": { "description": "The ID of the moderator who issued the ban", "$ref": "#/components/schemas/SnowflakeStringType" @@ -31836,7 +31414,7 @@ "banned_at": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "ISO8601 timestamp of when the ban was issued" }, "expires_at": { @@ -31845,7 +31423,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -31857,11 +31435,8 @@ "GuildLinkChannelCreateRequest": { "type": "object", "properties": { - "topic": { - "description": "The channel topic (1-1024 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "url": {"description": "External URL for link channels", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "topic": {"description": "The channel topic (1-1024 characters)", "type": ["string", "null"]}, + "url": {"description": "External URL for link channels", "type": ["string", "null"]}, "parent_id": { "description": "ID of the parent category for this channel", "anyOf": [{"$ref": "#/components/schemas/SnowflakeType"}, {"type": "null"}] @@ -31913,7 +31488,7 @@ "nsfw": {"default": false, "description": "Whether the channel is marked as NSFW", "type": "boolean"}, "nsfw_override": { "description": "Per-channel adult-content override (true=on, false=off, null=inherit from category then guild). Takes precedence over the legacy `nsfw` field if both are present.", - "anyOf": [{"type": "boolean"}, {"type": "null"}] + "type": ["boolean", "null"] }, "content_warning_level": { "description": "Channel-level content warning override (0=inherit, 1=force-warn)", @@ -31936,11 +31511,8 @@ "GuildCategoryChannelCreateRequest": { "type": "object", "properties": { - "topic": { - "description": "The channel topic (1-1024 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "url": {"description": "External URL for link channels", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "topic": {"description": "The channel topic (1-1024 characters)", "type": ["string", "null"]}, + "url": {"description": "External URL for link channels", "type": ["string", "null"]}, "parent_id": { "description": "ID of the parent category for this channel", "anyOf": [{"$ref": "#/components/schemas/SnowflakeType"}, {"type": "null"}] @@ -31992,7 +31564,7 @@ "nsfw": {"default": false, "description": "Whether the channel is marked as NSFW", "type": "boolean"}, "nsfw_override": { "description": "Per-channel adult-content override (true=on, false=off, null=inherit from category then guild). Takes precedence over the legacy `nsfw` field if both are present.", - "anyOf": [{"type": "boolean"}, {"type": "null"}] + "type": ["boolean", "null"] }, "content_warning_level": { "description": "Channel-level content warning override (0=inherit, 1=force-warn)", @@ -32015,11 +31587,8 @@ "GuildVoiceChannelCreateRequest": { "type": "object", "properties": { - "topic": { - "description": "The channel topic (1-1024 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "url": {"description": "External URL for link channels", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "topic": {"description": "The channel topic (1-1024 characters)", "type": ["string", "null"]}, + "url": {"description": "External URL for link channels", "type": ["string", "null"]}, "parent_id": { "description": "ID of the parent category for this channel", "anyOf": [{"$ref": "#/components/schemas/SnowflakeType"}, {"type": "null"}] @@ -32071,7 +31640,7 @@ "nsfw": {"default": false, "description": "Whether the channel is marked as NSFW", "type": "boolean"}, "nsfw_override": { "description": "Per-channel adult-content override (true=on, false=off, null=inherit from category then guild). Takes precedence over the legacy `nsfw` field if both are present.", - "anyOf": [{"type": "boolean"}, {"type": "null"}] + "type": ["boolean", "null"] }, "content_warning_level": { "description": "Channel-level content warning override (0=inherit, 1=force-warn)", @@ -32094,11 +31663,8 @@ "GuildTextChannelCreateRequest": { "type": "object", "properties": { - "topic": { - "description": "The channel topic (1-1024 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, - "url": {"description": "External URL for link channels", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "topic": {"description": "The channel topic (1-1024 characters)", "type": ["string", "null"]}, + "url": {"description": "External URL for link channels", "type": ["string", "null"]}, "parent_id": { "description": "ID of the parent category for this channel", "anyOf": [{"$ref": "#/components/schemas/SnowflakeType"}, {"type": "null"}] @@ -32150,7 +31716,7 @@ "nsfw": {"default": false, "description": "Whether the channel is marked as NSFW", "type": "boolean"}, "nsfw_override": { "description": "Per-channel adult-content override (true=on, false=off, null=inherit from category then guild). Takes precedence over the legacy `nsfw` field if both are present.", - "anyOf": [{"type": "boolean"}, {"type": "null"}] + "type": ["boolean", "null"] }, "content_warning_level": { "description": "Channel-level content warning override (0=inherit, 1=force-warn)", @@ -32207,8 +31773,8 @@ "user_id": {"type": "string", "description": "User ID"}, "username": {"type": "string", "description": "Username"}, "discriminator": {"type": "string", "description": "Zero-padded 4-digit discriminator"}, - "global_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Global display name"}, - "nickname": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Guild nickname"}, + "global_name": {"description": "Global display name", "type": ["string", "null"]}, + "nickname": {"description": "Guild nickname", "type": ["string", "null"]}, "role_ids": {"type": "array", "items": {"type": "string"}, "description": "Role IDs"}, "joined_at": {"type": "number", "description": "Unix timestamp of when the member joined"}, "supplemental": { @@ -32218,14 +31784,8 @@ "description": "How the member joined", "anyOf": [{"$ref": "#/components/schemas/JoinSourceType"}, {"type": "null"}] }, - "source_invite_code": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Invite code used to join" - }, - "inviter_id": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "User ID of the member who sent the invite" - } + "source_invite_code": {"description": "Invite code used to join", "type": ["string", "null"]}, + "inviter_id": {"description": "User ID of the member who sent the invite", "type": ["string", "null"]} }, "required": ["source_invite_code", "inviter_id"], "additionalProperties": false, @@ -32485,7 +32045,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -32518,7 +32078,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -32547,8 +32107,8 @@ "properties": { "countryCode": {"type": "string", "description": "ISO 3166-1 alpha-2 country code"}, "regionCode": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO 3166-2 subdivision code, or null when the entry covers the whole country" + "description": "ISO 3166-2 subdivision code, or null when the entry covers the whole country", + "type": ["string", "null"] } }, "required": ["countryCode", "regionCode"], @@ -32573,14 +32133,8 @@ "$ref": "#/components/schemas/SnowflakeStringType" }, "name": {"type": "string", "description": "The name of the application"}, - "icon": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The icon hash of the application" - }, - "description": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "The description of the application" - }, + "icon": {"description": "The icon hash of the application", "type": ["string", "null"]}, + "description": {"description": "The description of the application", "type": ["string", "null"]}, "bot_public": {"type": "boolean", "description": "Whether the bot can be invited by anyone"} }, "required": ["id", "name", "icon", "description", "bot_public"], @@ -32660,9 +32214,9 @@ "type": "object", "properties": { "id": {"type": "string"}, - "type": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "card_brand": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "card_last4": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "type": {"type": ["string", "null"]}, + "card_brand": {"type": ["string", "null"]}, + "card_last4": {"type": ["string", "null"]}, "card_exp_month": { "anyOf": [{"type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991}, {"type": "null"}] }, @@ -32678,17 +32232,17 @@ "type": "object", "properties": { "id": {"type": "string"}, - "number": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "number": {"type": ["string", "null"]}, "amount_due": {"type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991}, "amount_paid": {"type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991}, "currency": {"type": "string"}, - "status": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "created_at": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "paid_at": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "billing_reason": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "subscription_id": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "hosted_invoice_url": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "invoice_pdf": {"anyOf": [{"type": "string"}, {"type": "null"}]} + "status": {"type": ["string", "null"]}, + "created_at": {"type": ["string", "null"]}, + "paid_at": {"type": ["string", "null"]}, + "billing_reason": {"type": ["string", "null"]}, + "subscription_id": {"type": ["string", "null"]}, + "hosted_invoice_url": {"type": ["string", "null"]}, + "invoice_pdf": {"type": ["string", "null"]} }, "required": [ "id", @@ -32710,18 +32264,18 @@ "type": "object", "properties": { "id": {"type": "string"}, - "status": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "current_period_start": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "current_period_end": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "status": {"type": ["string", "null"]}, + "current_period_start": {"type": ["string", "null"]}, + "current_period_end": {"type": ["string", "null"]}, "cancel_at_period_end": {"type": "boolean"}, - "cancel_at": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "canceled_at": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "plan_interval": {"anyOf": [{"type": "string"}, {"type": "null"}]}, + "cancel_at": {"type": ["string", "null"]}, + "canceled_at": {"type": ["string", "null"]}, + "plan_interval": {"type": ["string", "null"]}, "plan_amount_minor": { "anyOf": [{"type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991}, {"type": "null"}] }, - "plan_currency": {"anyOf": [{"type": "string"}, {"type": "null"}]}, - "default_payment_method_id": {"anyOf": [{"type": "string"}, {"type": "null"}]} + "plan_currency": {"type": ["string", "null"]}, + "default_payment_method_id": {"type": ["string", "null"]} }, "required": [ "id", @@ -32754,16 +32308,16 @@ "description": "Whether a switch to the current list price is already scheduled" }, "current_price_id": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Stripe price ID the subscription is billed against today" + "description": "Stripe price ID the subscription is billed against today", + "type": ["string", "null"] }, "current_amount_minor": { "anyOf": [{"type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991}, {"type": "null"}], "description": "Amount the subscription is billed today, in the currency minor unit" }, "list_price_id": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Current list Stripe price ID for the same cycle and currency" + "description": "Current list Stripe price ID for the same cycle and currency", + "type": ["string", "null"] }, "list_amount_minor": { "anyOf": [{"type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991}, {"type": "null"}], @@ -32778,8 +32332,8 @@ "description": "Recurring billing cycle the switch applies to" }, "effective_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO timestamp the switch takes effect, which is the end of the current billing period" + "description": "ISO timestamp the switch takes effect, which is the end of the current billing period", + "type": ["string", "null"] } }, "required": [ @@ -32819,13 +32373,10 @@ "description": "Recurring billing cycle that will start later" }, "effective_at": {"type": "string", "description": "ISO timestamp when the pending change takes effect"}, - "current_price_id": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Current Stripe price ID, when known" - }, + "current_price_id": {"description": "Current Stripe price ID, when known", "type": ["string", "null"]}, "target_price_id": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "Stripe price ID that will be used after the change" + "description": "Stripe price ID that will be used after the change", + "type": ["string", "null"] }, "target_amount_minor": { "anyOf": [ @@ -33015,8 +32566,8 @@ "description": "The ID of the last message read" }, "last_pin_timestamp": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "ISO8601 timestamp of the last pinned message acknowledged" + "description": "ISO8601 timestamp of the last pinned message acknowledged", + "type": ["string", "null"] }, "version": { "description": "Read-state version for ordering updates as a decimal uint64", @@ -33537,7 +33088,7 @@ "timestamp": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "The ISO 8601 timestamp of when the message was created" }, "edited_timestamp": { @@ -33546,7 +33097,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -33641,7 +33192,7 @@ }, "nonce": { "description": "A client-provided value for message deduplication", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] }, "call": { "description": "Call information if this message represents a call", @@ -33660,7 +33211,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -33728,10 +33279,7 @@ "type": "string", "description": "The name of the emoji (or Unicode character for standard emojis)" }, - "animated": { - "description": "Whether the emoji is animated", - "anyOf": [{"type": "boolean"}, {"type": "null"}] - } + "animated": {"description": "Whether the emoji is animated", "type": ["boolean", "null"]} }, "required": ["name"], "additionalProperties": false, @@ -33741,10 +33289,7 @@ "description": "The total number of times this reaction has been used", "$ref": "#/components/schemas/Int32Type" }, - "me": { - "description": "Whether the current user has reacted with this emoji", - "anyOf": [{"type": "boolean"}, {"type": "null"}] - } + "me": {"description": "Whether the current user has reacted with this emoji", "type": ["boolean", "null"]} }, "required": ["emoji", "count"], "additionalProperties": false @@ -33945,7 +33490,7 @@ }, "placeholder": { "description": "Compact thumbhash placeholder produced by the media proxy. Clients render it as a low-res preview while the GIF loads, and persist it on favourites so the picker has a fallback if the source URL later disappears.", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] } }, "required": ["id", "slug", "provider", "title", "url", "src", "proxy_src", "width", "height", "media"], @@ -34046,7 +33591,7 @@ }, "placeholder": { "description": "Compact thumbhash placeholder produced by the media proxy. Persisted with the favorite so the picker can show a low-res preview while the GIF loads, and a fallback if the source URL later disappears.", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] } }, "required": ["url", "proxy_url", "width", "height", "media", "content_type"], @@ -34073,7 +33618,7 @@ "created_at": { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$", "description": "Timestamp when the gift code was created" }, "redeemed_at": { @@ -34082,7 +33627,7 @@ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -34171,10 +33716,7 @@ "id": {"type": "string", "description": "The credential ID"}, "name": {"type": "string", "description": "User-assigned name for the credential"}, "created_at": {"type": "string", "description": "When the credential was registered"}, - "last_used_at": { - "anyOf": [{"type": "string"}, {"type": "null"}], - "description": "When the credential was last used" - } + "last_used_at": {"description": "When the credential was last used", "type": ["string", "null"]} }, "required": ["id", "name", "created_at", "last_used_at"], "additionalProperties": false @@ -34329,14 +33871,14 @@ "CustomStatusResponse": { "type": "object", "properties": { - "text": {"description": "The custom status message text", "anyOf": [{"type": "string"}, {"type": "null"}]}, + "text": {"description": "The custom status message text", "type": ["string", "null"]}, "expires_at": { "description": "ISO8601 timestamp of when the custom status expires", "anyOf": [ { "type": "string", "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$" }, {"type": "null"} ] @@ -34345,10 +33887,7 @@ "description": "The ID of the custom emoji used in the status", "anyOf": [{"$ref": "#/components/schemas/SnowflakeStringType"}, {"type": "null"}] }, - "emoji_name": { - "description": "The name of the emoji used in the status", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "emoji_name": {"description": "The name of the emoji used in the status", "type": ["string", "null"]}, "emoji_animated": {"type": "boolean", "description": "Whether the status emoji is animated"} }, "required": ["emoji_animated"], @@ -34523,10 +34062,7 @@ "CustomStatusPayload": { "type": "object", "properties": { - "text": { - "description": "Custom status text (max 128 characters)", - "anyOf": [{"type": "string"}, {"type": "null"}] - }, + "text": {"description": "Custom status text (max 128 characters)", "type": ["string", "null"]}, "expires_at": { "description": "When the custom status expires", "anyOf": [ @@ -34548,7 +34084,7 @@ }, "emoji_name": { "description": "Unicode emoji to display (ignored when emoji_id is provided)", - "anyOf": [{"type": "string"}, {"type": "null"}] + "type": ["string", "null"] } } }, diff --git a/fluxer_api/src/api/risk/DeterministicRiskEngine.ts b/fluxer_api/src/api/risk/DeterministicRiskEngine.ts index d6ef799f4..3df4c5c84 100644 --- a/fluxer_api/src/api/risk/DeterministicRiskEngine.ts +++ b/fluxer_api/src/api/risk/DeterministicRiskEngine.ts @@ -519,7 +519,7 @@ function scoreUserAgent(signals: RiskSignals): Array { function scoreGeoLocale(signals: RiskSignals): Array { const geo = signals.localeGeoMatch; - if (!geo || !geo.mismatchDetected) return []; + if (!geo?.mismatchDetected) return []; return [ { rule: RULE.geoMismatch, @@ -606,7 +606,7 @@ function applySharedConnectionDampener( function scoreTiming(signals: RiskSignals): Array { const timing = signals.registrationTiming; - if (!timing || !timing.isSuspiciousHour) return []; + if (!timing?.isSuspiciousHour) return []; return [ { rule: RULE.suspiciousHour, diff --git a/fluxer_api/src/api/risk/__tests__/IpInfoServiceCache.test.ts b/fluxer_api/src/api/risk/__tests__/IpInfoServiceCache.test.ts index dd471a4fd..bab6b607b 100644 --- a/fluxer_api/src/api/risk/__tests__/IpInfoServiceCache.test.ts +++ b/fluxer_api/src/api/risk/__tests__/IpInfoServiceCache.test.ts @@ -101,7 +101,7 @@ describe('IpInfoService caching', () => { expect(result.available).toBe(false); expect(sets[0]?.ttlSeconds).toBe(60); - expect((sets[0]?.value as CachedIpInfoFailure).failureOutcome).toBe('request_failed'); + expect((sets[0]?.value as CachedIpInfoFailure)?.failureOutcome).toBe('request_failed'); }); it('negative-caches a schema mismatch', async () => { @@ -113,8 +113,8 @@ describe('IpInfoService caching', () => { expect(result.available).toBe(false); expect(sets[0]?.ttlSeconds).toBe(600); - expect((sets[0]?.value as CachedIpInfoFailure).failureOutcome).toBe('schema_mismatch'); - expect((sets[0]?.value as CachedIpInfoFailure).failureHttpStatus).toBe(200); + expect((sets[0]?.value as CachedIpInfoFailure)?.failureOutcome).toBe('schema_mismatch'); + expect((sets[0]?.value as CachedIpInfoFailure)?.failureHttpStatus).toBe(200); }); it('negative-caches a quota rejection for longer', async () => { diff --git a/fluxer_api/src/api/rpc/RpcService.ts b/fluxer_api/src/api/rpc/RpcService.ts index 9a8e75120..b11e9c25d 100644 --- a/fluxer_api/src/api/rpc/RpcService.ts +++ b/fluxer_api/src/api/rpc/RpcService.ts @@ -958,7 +958,7 @@ export class RpcService { const loadUserDataStartedAtNs = startRpcTiming(); const userData = await this.getUserData({userId, includePrivateChannels: true, timingSteps: loadUserDataSteps}); timings.record('load_user_data', loadUserDataStartedAtNs, loadUserDataSteps); - if (!userData || !userData.user) { + if (!userData?.user) { Logger.warn( { tokenType, diff --git a/fluxer_api/src/api/search/tests/MessageSearchPermissions.test.ts b/fluxer_api/src/api/search/tests/MessageSearchPermissions.test.ts index 08747260f..2e441c40c 100644 --- a/fluxer_api/src/api/search/tests/MessageSearchPermissions.test.ts +++ b/fluxer_api/src/api/search/tests/MessageSearchPermissions.test.ts @@ -659,35 +659,33 @@ describe('Message Search Permissions', () => { expect(user12Messages.length).toBeGreaterThan(0); expect(user34Messages.length).toBe(0); }); - test.each([ - 'all_dms', - 'open_dms', - 'all', - 'open_dms_and_all_guilds', - ] as const)('scope: %s does not trust foreign DM context_channel_id', async (scope) => { - const user1 = await createTestAccount(harness); - const user2 = await createTestAccount(harness); - const attacker = await createTestAccount(harness); - await createFriendship(harness, user1, user2); - const dmChannel = await createDmChannel(harness, user1.token, user2.userId); - const canary = `foreign-dm-context-canary-${Date.now()}-${scope}`; - await sendChannelMessage(harness, user1.token, dmChannel.id, canary); - await markChannelAsIndexed(harness, dmChannel.id); - const result = await createBuilder(harness, attacker.token) - .post('/search/messages') - .body({ - content: canary, - scope, - context_channel_id: dmChannel.id, - }) - .expect(HTTP_STATUS.OK) - .execute(); - if (!isSearchResult(result)) { - expect.fail('Expected search result but got indexing response'); - } - expect(result.messages.some((message) => message.channel_id === dmChannel.id)).toBe(false); - expect(result.messages.some((message) => message.content === canary)).toBe(false); - }); + test.each(['all_dms', 'open_dms', 'all', 'open_dms_and_all_guilds'] as const)( + 'scope: %s does not trust foreign DM context_channel_id', + async (scope) => { + const user1 = await createTestAccount(harness); + const user2 = await createTestAccount(harness); + const attacker = await createTestAccount(harness); + await createFriendship(harness, user1, user2); + const dmChannel = await createDmChannel(harness, user1.token, user2.userId); + const canary = `foreign-dm-context-canary-${Date.now()}-${scope}`; + await sendChannelMessage(harness, user1.token, dmChannel.id, canary); + await markChannelAsIndexed(harness, dmChannel.id); + const result = await createBuilder(harness, attacker.token) + .post('/search/messages') + .body({ + content: canary, + scope, + context_channel_id: dmChannel.id, + }) + .expect(HTTP_STATUS.OK) + .execute(); + if (!isSearchResult(result)) { + expect.fail('Expected search result but got indexing response'); + } + expect(result.messages.some((message) => message.channel_id === dmChannel.id)).toBe(false); + expect(result.messages.some((message) => message.content === canary)).toBe(false); + }, + ); test('scope: all_dms does not trust a guild context_channel_id', async () => { const owner = await createTestAccount(harness); const attacker = await createTestAccount(harness); diff --git a/fluxer_api/src/api/search/tests/MessageSearchReferencedMessage.test.ts b/fluxer_api/src/api/search/tests/MessageSearchReferencedMessage.test.ts index a1c0da863..2c1c538f5 100644 --- a/fluxer_api/src/api/search/tests/MessageSearchReferencedMessage.test.ts +++ b/fluxer_api/src/api/search/tests/MessageSearchReferencedMessage.test.ts @@ -59,7 +59,7 @@ describe('Message Search Referenced Message', () => { try { await createBuilder(harness, token).post('/search/messages').body(body).expect(HTTP_STATUS.OK).execute(); const [invocation] = spy.mock.results; - if (!invocation || invocation.type !== 'return') { + if (invocation?.type !== 'return') { throw new Error('SearchService.searchMessages did not return a result'); } return await invocation.value; diff --git a/fluxer_api/src/api/stripe/StripeApiVersion.ts b/fluxer_api/src/api/stripe/StripeApiVersion.ts index ed4834770..2f6334df4 100644 --- a/fluxer_api/src/api/stripe/StripeApiVersion.ts +++ b/fluxer_api/src/api/stripe/StripeApiVersion.ts @@ -1,3 +1,3 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -export const STRIPE_API_VERSION = '2026-03-25.dahlia'; +export const STRIPE_API_VERSION = '2026-08-26.dahlia'; diff --git a/fluxer_api/src/api/test/TestHarnessController.ts b/fluxer_api/src/api/test/TestHarnessController.ts index 74bf0bdc5..6c5fbb841 100644 --- a/fluxer_api/src/api/test/TestHarnessController.ts +++ b/fluxer_api/src/api/test/TestHarnessController.ts @@ -1618,7 +1618,7 @@ export function TestHarnessController(app: HonoApp) { '[test/worker/process-pending-deletions] Processing deletion', ); const user = await userRepository.findUnique(userId); - if (!user || !user.pendingDeletionAt) { + if (!user?.pendingDeletionAt) { Logger.info( { userId: userId.toString(), diff --git a/fluxer_api/src/api/test/mocks/RepositoryBackedMessageResponseDataService.ts b/fluxer_api/src/api/test/mocks/RepositoryBackedMessageResponseDataService.ts index 68565740b..f8e023974 100644 --- a/fluxer_api/src/api/test/mocks/RepositoryBackedMessageResponseDataService.ts +++ b/fluxer_api/src/api/test/mocks/RepositoryBackedMessageResponseDataService.ts @@ -41,8 +41,8 @@ import type { } from '@fluxer/schema/src/domains/message/MessageResponseSchemas'; import type {UserPartialResponse} from '@fluxer/schema/src/domains/user/UserResponseSchemas'; import {snowflakeToDate} from '@fluxer/snowflake/src/Snowflake'; +import type {NatsConnection} from '@nats-io/transport-node'; import type {INatsConnectionManager} from '@pkgs/nats/src/INatsConnectionManager'; -import type {NatsConnection} from 'nats'; class NoopNatsConnectionManager implements INatsConnectionManager { async connect(): Promise {} diff --git a/fluxer_api/src/api/user/repositories/account/crud/UserEmailOwnershipRepository.ts b/fluxer_api/src/api/user/repositories/account/crud/UserEmailOwnershipRepository.ts index be68fb2f7..f7fdb2d9a 100644 --- a/fluxer_api/src/api/user/repositories/account/crud/UserEmailOwnershipRepository.ts +++ b/fluxer_api/src/api/user/repositories/account/crud/UserEmailOwnershipRepository.ts @@ -449,7 +449,7 @@ export class UserEmailOwnershipRepository { private async releaseClaimRow(emailLower: string, expectedOwnerId?: UserID): Promise { const ownerRow = await this.fetchOwnerRow(emailLower); const currentOwnerId = parseOptionalUserId(ownerRow?.user_id); - if (!ownerRow || ownerRow.claimed !== true || currentOwnerId === null) { + if (ownerRow?.claimed !== true || currentOwnerId === null) { return; } if (expectedOwnerId !== undefined && currentOwnerId !== expectedOwnerId) { @@ -484,7 +484,7 @@ export class UserEmailOwnershipRepository { private async findValidClaimedOwnerId(emailLower: string): Promise { const ownerRow = await this.fetchOwnerRow(emailLower); - if (!ownerRow || ownerRow.claimed !== true) { + if (ownerRow?.claimed !== true) { return null; } const ownerId = parseOptionalUserId(ownerRow.user_id); diff --git a/fluxer_api/src/api/user/repositories/account/crud/UserIndexRepository.ts b/fluxer_api/src/api/user/repositories/account/crud/UserIndexRepository.ts index 55f422a7c..38b902a49 100644 --- a/fluxer_api/src/api/user/repositories/account/crud/UserIndexRepository.ts +++ b/fluxer_api/src/api/user/repositories/account/crud/UserIndexRepository.ts @@ -16,7 +16,7 @@ import {getSameIpDecisionKey} from '@fluxer/ip_utils/src/IpAddress'; export class UserIndexRepository { async syncIndices(data: UserRow, oldData?: UserRow | null): Promise { const batch = new BatchBuilder(); - if (!!data.username && data.discriminator != null && data.discriminator !== undefined) { + if (data.username && data.discriminator != null && data.discriminator !== undefined) { batch.addPrepared( UserByUsername.upsertAll({ username: data.username.toLowerCase(), diff --git a/fluxer_api/src/api/user/services/UserContentService.ts b/fluxer_api/src/api/user/services/UserContentService.ts index 66665395f..386e9ebc0 100644 --- a/fluxer_api/src/api/user/services/UserContentService.ts +++ b/fluxer_api/src/api/user/services/UserContentService.ts @@ -570,7 +570,7 @@ export class UserContentService { } const harvestRepository = new UserHarvestRepository(); const harvest = await harvestRepository.findByUserAndHarvestId(userId, params.harvestId); - if (!harvest || !harvest.completedAt || !harvest.storageKey || harvest.failedAt) { + if (!harvest?.completedAt || !harvest.storageKey || harvest.failedAt) { return null; } if (harvest.downloadUrlExpiresAt && harvest.downloadUrlExpiresAt < new Date()) { diff --git a/fluxer_api/src/api/user/tests/UserSyntheticWriteGuard.test.ts b/fluxer_api/src/api/user/tests/UserSyntheticWriteGuard.test.ts index 144bf1926..106bf000b 100644 --- a/fluxer_api/src/api/user/tests/UserSyntheticWriteGuard.test.ts +++ b/fluxer_api/src/api/user/tests/UserSyntheticWriteGuard.test.ts @@ -32,13 +32,14 @@ describe('users table write guard for synthetic accounts', () => { await expect(repository.updateLastActiveAt({userId, lastActiveAt: new Date(0)})).rejects.toThrow(); expect(await repository.listUsers([userId])).toEqual([]); }); - test.each( - SYNTHETIC_USER_IDS, - )('findUnique still synthesises user %s after a refused write', async (_label, userId) => { - const repository = new UserRepository(); - await expect(repository.patchUpsert(userId, {bio: 'written by a test'})).rejects.toThrow(); - const user = await repository.findUnique(userId); - expect(user).not.toBeNull(); - expect(user?.id.toString()).toBe(userId.toString()); - }); + test.each(SYNTHETIC_USER_IDS)( + 'findUnique still synthesises user %s after a refused write', + async (_label, userId) => { + const repository = new UserRepository(); + await expect(repository.patchUpsert(userId, {bio: 'written by a test'})).rejects.toThrow(); + const user = await repository.findUnique(userId); + expect(user).not.toBeNull(); + expect(user?.id.toString()).toBe(userId.toString()); + }, + ); }); diff --git a/fluxer_api/src/api/utils/tests/ArrayUtils.test.ts b/fluxer_api/src/api/utils/tests/ArrayUtils.test.ts index fd624b923..0100141fe 100644 --- a/fluxer_api/src/api/utils/tests/ArrayUtils.test.ts +++ b/fluxer_api/src/api/utils/tests/ArrayUtils.test.ts @@ -23,15 +23,11 @@ describe('chunkArray', () => { expect(chunkArray([], 2)).toEqual([]); }); - it.each([ - 0, - -1, - 1.5, - Number.NaN, - Number.POSITIVE_INFINITY, - Number.MAX_SAFE_INTEGER + 1, - ])('rejects invalid chunk size %j even for empty input', (size) => { - expect(() => chunkArray([1], size)).toThrow('Chunk size must be a positive safe integer'); - expect(() => chunkArray([], size)).toThrow('Chunk size must be a positive safe integer'); - }); + it.each([0, -1, 1.5, Number.NaN, Number.POSITIVE_INFINITY, Number.MAX_SAFE_INTEGER + 1])( + 'rejects invalid chunk size %j even for empty input', + (size) => { + expect(() => chunkArray([1], size)).toThrow('Chunk size must be a positive safe integer'); + expect(() => chunkArray([], size)).toThrow('Chunk size must be a positive safe integer'); + }, + ); }); diff --git a/fluxer_api/src/api/utils/tests/ConcurrencyUtils.test.ts b/fluxer_api/src/api/utils/tests/ConcurrencyUtils.test.ts index 1e43521d5..74329aeeb 100644 --- a/fluxer_api/src/api/utils/tests/ConcurrencyUtils.test.ts +++ b/fluxer_api/src/api/utils/tests/ConcurrencyUtils.test.ts @@ -69,27 +69,23 @@ describe('mapWithConcurrency', () => { ).resolves.toEqual([]); }); - it.each([ - 0, - -1, - 1.5, - Number.NaN, - Number.POSITIVE_INFINITY, - Number.MAX_SAFE_INTEGER + 1, - ])('rejects invalid concurrency %j before scheduling work', async (concurrency) => { - let calls = 0; - const mapper = async () => { - calls++; - return 1; - }; - await expect(mapWithConcurrency([1], concurrency, mapper)).rejects.toThrow( - 'Concurrency must be a positive safe integer', - ); - await expect(mapWithConcurrency([], concurrency, mapper)).rejects.toThrow( - 'Concurrency must be a positive safe integer', - ); - expect(calls).toBe(0); - }); + it.each([0, -1, 1.5, Number.NaN, Number.POSITIVE_INFINITY, Number.MAX_SAFE_INTEGER + 1])( + 'rejects invalid concurrency %j before scheduling work', + async (concurrency) => { + let calls = 0; + const mapper = async () => { + calls++; + return 1; + }; + await expect(mapWithConcurrency([1], concurrency, mapper)).rejects.toThrow( + 'Concurrency must be a positive safe integer', + ); + await expect(mapWithConcurrency([], concurrency, mapper)).rejects.toThrow( + 'Concurrency must be a positive safe integer', + ); + expect(calls).toBe(0); + }, + ); it('waits for in-flight work before propagating a mapper rejection', async () => { const first = Promise.withResolvers(); diff --git a/fluxer_api/src/api/utils/tests/StringUtils.test.ts b/fluxer_api/src/api/utils/tests/StringUtils.test.ts index 760720271..826920aba 100644 --- a/fluxer_api/src/api/utils/tests/StringUtils.test.ts +++ b/fluxer_api/src/api/utils/tests/StringUtils.test.ts @@ -28,14 +28,12 @@ describe('parseString', () => { }); describe('hasVisibleContent', () => { - it.each([ - '', - ' \t\n', - '\u200e \u200b\ufeff', - '\u2800\u3164\u{e0100}', - ])('rejects whitespace or invisible-only input %j', (input) => { - expect(hasVisibleContent(input)).toBe(false); - }); + it.each(['', ' \t\n', '\u200e \u200b\ufeff', '\u2800\u3164\u{e0100}'])( + 'rejects whitespace or invisible-only input %j', + (input) => { + expect(hasVisibleContent(input)).toBe(false); + }, + ); it.each(['hello', '\u200e hello', '🙂', '` `'])('accepts visible input %j', (input) => { expect(hasVisibleContent(input)).toBe(true); diff --git a/fluxer_api/src/api/worker/JetStreamWorkerQueue.ts b/fluxer_api/src/api/worker/JetStreamWorkerQueue.ts index 4b4f1d1f3..29a245519 100644 --- a/fluxer_api/src/api/worker/JetStreamWorkerQueue.ts +++ b/fluxer_api/src/api/worker/JetStreamWorkerQueue.ts @@ -4,22 +4,22 @@ import {randomUUID} from 'node:crypto'; import {Logger} from '@app/api/Logger'; import type {WorkerLaneDefinition} from '@app/api/worker/WorkerLaneConfig'; import {WorkerQueueOverflowError} from '@app/api/worker/WorkerQueueOverflowError'; -import type {JetStreamConnectionManager} from '@pkgs/nats/src/JetStreamConnectionManager'; -import type {WorkerJobPayload} from '@pkgs/worker/src/contracts/WorkerTypes'; import { AckPolicy, type ConsumerInfo, type ConsumerUpdateConfig, DeliverPolicy, DiscardPolicy, + JetStreamApiError, type JetStreamManager, - NatsError, - nanos, ReplayPolicy, RetentionPolicy, StorageType, type StreamConfig, -} from 'nats'; +} from '@nats-io/jetstream'; +import {nanos} from '@nats-io/transport-node'; +import type {JetStreamConnectionManager} from '@pkgs/nats/src/JetStreamConnectionManager'; +import type {WorkerJobPayload} from '@pkgs/worker/src/contracts/WorkerTypes'; const STREAM_NAME = 'JOBS'; const SUBJECT_PREFIX = 'jobs.'; @@ -55,12 +55,6 @@ interface WorkerStreamDefinition { discardNewPerSubject: boolean; } -interface WorkerStreamConfiguration extends StreamConfig { - persist_mode?: string; - allow_msg_ttl?: boolean; - allow_msg_counter?: boolean; -} - const JOBS_STREAM: WorkerStreamDefinition = { name: STREAM_NAME, subject: `${SUBJECT_PREFIX}>`, @@ -95,21 +89,14 @@ export interface WorkerDeadLetterMetadata { } function jsErrorCode(error: unknown): number | null { - if (!(error instanceof NatsError)) { - return null; - } - return error.jsError()?.err_code ?? null; + return error instanceof JetStreamApiError ? error.code : null; } function describeStreamRejection(error: unknown): string | null { - if (!(error instanceof NatsError)) { + if (!(error instanceof JetStreamApiError) || !STREAM_FULL_ERR_CODES.has(error.code)) { return null; } - const apiError = error.jsError(); - if (apiError === null || !STREAM_FULL_ERR_CODES.has(apiError.err_code ?? 0)) { - return null; - } - return apiError.description ?? 'stream rejected the publish'; + return error.apiError().description || 'stream rejected the publish'; } export class JetStreamWorkerQueue { @@ -155,7 +142,7 @@ export class JetStreamWorkerQueue { } } - private async applyStreamLimits(jsm: JetStreamManager, existing: WorkerStreamConfiguration): Promise { + private async applyStreamLimits(jsm: JetStreamManager, existing: StreamConfig): Promise { const unmanaged = this.unmanagedStreamSettings(existing, JOBS_STREAM); if (unmanaged.length > 0) { Logger.warn( @@ -205,7 +192,7 @@ export class JetStreamWorkerQueue { } } - private assertStreamIdentity(config: WorkerStreamConfiguration, stream: WorkerStreamDefinition): void { + private assertStreamIdentity(config: StreamConfig, stream: WorkerStreamDefinition): void { const incompatible: Array = []; if (config.name !== stream.name) incompatible.push('name'); if (config.subjects?.length !== 1 || config.subjects[0] !== stream.subject) incompatible.push('subjects'); @@ -222,7 +209,7 @@ export class JetStreamWorkerQueue { } } - private diffStreamLimits(config: WorkerStreamConfiguration, stream: WorkerStreamDefinition): Array { + private diffStreamLimits(config: StreamConfig, stream: WorkerStreamDefinition): Array { const drifted: Array = []; if (!Number.isSafeInteger(config.max_bytes) || config.max_bytes < stream.minBytes) drifted.push('max_bytes'); if (config.max_msgs !== stream.maxMessages) drifted.push('max_msgs'); @@ -234,7 +221,7 @@ export class JetStreamWorkerQueue { return drifted; } - private unmanagedStreamSettings(config: WorkerStreamConfiguration, stream: WorkerStreamDefinition): Array { + private unmanagedStreamSettings(config: StreamConfig, stream: WorkerStreamDefinition): Array { const unmanaged: Array = []; if (config.max_age !== nanos(stream.maxAgeMs)) unmanaged.push('max_age'); if (config.duplicate_window !== nanos(DUPLICATE_WINDOW_MS)) unmanaged.push('duplicate_window'); diff --git a/fluxer_api/src/api/worker/WorkerRunner.ts b/fluxer_api/src/api/worker/WorkerRunner.ts index 452582727..097d9cffe 100644 --- a/fluxer_api/src/api/worker/WorkerRunner.ts +++ b/fluxer_api/src/api/worker/WorkerRunner.ts @@ -14,9 +14,9 @@ import { type WorkerHeartbeat, type WorkerHeartbeatSignal, } from '@app/api/worker/WorkerHeartbeat'; +import type {ConsumerMessages, FetchOptions, JsMsg} from '@nats-io/jetstream'; import type {IWorkerService} from '@pkgs/worker/src/contracts/IWorkerService'; import {JobCancelledError, type WorkerTaskHandler} from '@pkgs/worker/src/contracts/WorkerTask'; -import type {ConsumerMessages, FetchOptions, JsMsg} from 'nats'; const MAX_DLQ_PUBLISH_ATTEMPTS = 3; const DLQ_RETRY_DELAY_MS = 250; diff --git a/fluxer_api/src/api/worker/tasks/ExtractEmbeds.ts b/fluxer_api/src/api/worker/tasks/ExtractEmbeds.ts index e6290d817..190ffb928 100644 --- a/fluxer_api/src/api/worker/tasks/ExtractEmbeds.ts +++ b/fluxer_api/src/api/worker/tasks/ExtractEmbeds.ts @@ -428,7 +428,7 @@ const extractEmbeds: WorkerTaskHandler = async (payload, helpers) => { messageId, validated.expectedContentHash, ); - if (!message || !message.content) { + if (!message?.content) { Logger.info({messageId: messageId.toString()}, 'Skipping extractEmbeds: message not found or no content'); return; } diff --git a/fluxer_api/src/api/worker/tasks/UserProcessPendingDeletions.ts b/fluxer_api/src/api/worker/tasks/UserProcessPendingDeletions.ts index 746b44c53..ae8de1079 100644 --- a/fluxer_api/src/api/worker/tasks/UserProcessPendingDeletions.ts +++ b/fluxer_api/src/api/worker/tasks/UserProcessPendingDeletions.ts @@ -43,7 +43,7 @@ const userProcessPendingDeletions: WorkerTaskHandler = async (_payload, helpers) try { const userId = createUserID(deletion.userId); const user = await userRepository.findUnique(userId); - if (!user || !user.pendingDeletionAt) { + if (!user?.pendingDeletionAt) { Logger.warn({userId}, 'User not found or not pending deletion in Cassandra, removing from KV'); await deletionQueueService.removeFromQueue(userId); continue; diff --git a/fluxer_api/src/api/worker/tests/JetStreamWorkerQueue.test.ts b/fluxer_api/src/api/worker/tests/JetStreamWorkerQueue.test.ts index a5ce087bf..9b463f885 100644 --- a/fluxer_api/src/api/worker/tests/JetStreamWorkerQueue.test.ts +++ b/fluxer_api/src/api/worker/tests/JetStreamWorkerQueue.test.ts @@ -3,8 +3,8 @@ import {JetStreamWorkerQueue} from '@app/api/worker/JetStreamWorkerQueue'; import {WORKER_LANES} from '@app/api/worker/WorkerLaneConfig'; import {WorkerQueueOverflowError} from '@app/api/worker/WorkerQueueOverflowError'; +import {DiscardPolicy, JetStreamApiError, RetentionPolicy, StorageType, type StreamConfig} from '@nats-io/jetstream'; import type {JetStreamConnectionManager} from '@pkgs/nats/src/JetStreamConnectionManager'; -import {DiscardPolicy, NatsError, RetentionPolicy, StorageType, type StreamConfig} from 'nats'; import {describe, expect, it} from 'vitest'; const GIB = 1024 * 1024 * 1024; @@ -51,29 +51,24 @@ function withStreamDefaults(config: Partial): Partial) => Error | null { @@ -205,7 +200,7 @@ describe('jobs stream limits', () => { it('fails the boot when even the smallest jobs stream does not fit', async () => { const {queue, added} = createQueue({existing: null, reject: storageBudget(0)}); - await expect(queue.ensureStream()).rejects.toBeInstanceOf(NatsError); + await expect(queue.ensureStream()).rejects.toBeInstanceOf(JetStreamApiError); expect(added).toHaveLength(8); expect(added[7]?.max_bytes).toBe(64 * MIB); }); diff --git a/fluxer_api/src/api/worker/tests/SendSystemDmCancel.test.ts b/fluxer_api/src/api/worker/tests/SendSystemDmCancel.test.ts index 317e3e05c..b103860e4 100644 --- a/fluxer_api/src/api/worker/tests/SendSystemDmCancel.test.ts +++ b/fluxer_api/src/api/worker/tests/SendSystemDmCancel.test.ts @@ -8,7 +8,7 @@ import type {UserRepository} from '@app/api/user/repositories/UserRepository'; import {sendSystemDm} from '@app/api/worker/tasks/SendSystemDm'; import {clearWorkerDependencies, setWorkerDependenciesForTest} from '@app/api/worker/WorkerContext'; import {WorkerRunner} from '@app/api/worker/WorkerRunner'; -import type {JsMsg} from 'nats'; +import type {JsMsg} from '@nats-io/jetstream'; import {afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; const TASK_TYPE = 'sendSystemDm'; diff --git a/fluxer_api/src/api/worker/tests/WorkerAckHeartbeat.test.ts b/fluxer_api/src/api/worker/tests/WorkerAckHeartbeat.test.ts index c3e058c97..0d75d70f3 100644 --- a/fluxer_api/src/api/worker/tests/WorkerAckHeartbeat.test.ts +++ b/fluxer_api/src/api/worker/tests/WorkerAckHeartbeat.test.ts @@ -4,8 +4,8 @@ import type {IJobLedgerRepository} from '@app/api/jobs/IJobLedgerRepository'; import {setInjectedWorkerService} from '@app/api/middleware/ServiceRegistry'; import {NoopWorkerService} from '@app/api/test/NoopWorkerService'; import {WorkerRunner} from '@app/api/worker/WorkerRunner'; +import type {JsMsg} from '@nats-io/jetstream'; import {JobCancelledError} from '@pkgs/worker/src/contracts/WorkerTask'; -import type {JsMsg} from 'nats'; import {afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; const LANE_ACK_WAIT_MS = 120000; diff --git a/fluxer_api/src/api/worker/tests/WorkerHeartbeat.test.ts b/fluxer_api/src/api/worker/tests/WorkerHeartbeat.test.ts index 76f76b0a5..91a33666a 100644 --- a/fluxer_api/src/api/worker/tests/WorkerHeartbeat.test.ts +++ b/fluxer_api/src/api/worker/tests/WorkerHeartbeat.test.ts @@ -13,8 +13,8 @@ import { import {WorkerRunner} from '@app/api/worker/WorkerRunner'; import type {WorkerService} from '@app/api/worker/WorkerService'; import type {LoggerInterface} from '@fluxer/logger/src/LoggerInterface'; +import type {ConsumerMessages, JsMsg} from '@nats-io/jetstream'; import type {IKVProvider} from '@pkgs/kv_client/src/IKVProvider'; -import type {ConsumerMessages, JsMsg} from 'nats'; import {afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; const HEARTBEAT_PATH = '/tmp/fluxer-worker-heartbeat-test'; diff --git a/fluxer_api/src/api/worker/tests/WorkerProcessErrorHandler.test.ts b/fluxer_api/src/api/worker/tests/WorkerProcessErrorHandler.test.ts index 8359a783b..3d4701856 100644 --- a/fluxer_api/src/api/worker/tests/WorkerProcessErrorHandler.test.ts +++ b/fluxer_api/src/api/worker/tests/WorkerProcessErrorHandler.test.ts @@ -66,17 +66,17 @@ describe('Worker process error handler', () => { expect(exit).not.toHaveBeenCalled(); }); - it.each([ - ['uncaughtException' as WorkerProcessErrorSource], - ['unhandledRejection' as WorkerProcessErrorSource], - ])('survives a transient error arriving as %s', async (source) => { - const {exit, shutdown, handle} = createHarness(); + it.each([['uncaughtException' as WorkerProcessErrorSource], ['unhandledRejection' as WorkerProcessErrorSource]])( + 'survives a transient error arriving as %s', + async (source) => { + const {exit, shutdown, handle} = createHarness(); - await handle(source, adminShutdownError()); + await handle(source, adminShutdownError()); - expect(shutdown).not.toHaveBeenCalled(); - expect(exit).not.toHaveBeenCalled(); - }); + expect(shutdown).not.toHaveBeenCalled(); + expect(exit).not.toHaveBeenCalled(); + }, + ); it('survives a socket error raised by a pooled Postgres client', async () => { const {exit, shutdown, handle} = createHarness(); diff --git a/fluxer_api/src/api/worker/tests/WorkerRetiredTask.test.ts b/fluxer_api/src/api/worker/tests/WorkerRetiredTask.test.ts index b5bd606a0..878ae0495 100644 --- a/fluxer_api/src/api/worker/tests/WorkerRetiredTask.test.ts +++ b/fluxer_api/src/api/worker/tests/WorkerRetiredTask.test.ts @@ -4,7 +4,7 @@ import type {IJobLedgerRepository} from '@app/api/jobs/IJobLedgerRepository'; import {setInjectedWorkerService} from '@app/api/middleware/ServiceRegistry'; import {NoopWorkerService} from '@app/api/test/NoopWorkerService'; import {WorkerRunner} from '@app/api/worker/WorkerRunner'; -import type {JsMsg} from 'nats'; +import type {JsMsg} from '@nats-io/jetstream'; import {afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; const RETIRED_TASK_TYPE = 'sendScheduledMessage'; diff --git a/fluxer_api/src/api/worker/tests/WorkerRunnerResubscribe.test.ts b/fluxer_api/src/api/worker/tests/WorkerRunnerResubscribe.test.ts index 8466bb91b..031df0601 100644 --- a/fluxer_api/src/api/worker/tests/WorkerRunnerResubscribe.test.ts +++ b/fluxer_api/src/api/worker/tests/WorkerRunnerResubscribe.test.ts @@ -4,7 +4,7 @@ import type {IJobLedgerRepository} from '@app/api/jobs/IJobLedgerRepository'; import {setInjectedWorkerService} from '@app/api/middleware/ServiceRegistry'; import {NoopWorkerService} from '@app/api/test/NoopWorkerService'; import {WorkerRunner} from '@app/api/worker/WorkerRunner'; -import type {ConsumerMessages, JsMsg} from 'nats'; +import type {ConsumerMessages, JsMsg} from '@nats-io/jetstream'; import {afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; const TASK_TYPE = 'processInactivityDeletions'; diff --git a/fluxer_api/src/api/worker/tests/WorkerRunnerShutdown.test.ts b/fluxer_api/src/api/worker/tests/WorkerRunnerShutdown.test.ts index a44b5bc39..7be261bd7 100644 --- a/fluxer_api/src/api/worker/tests/WorkerRunnerShutdown.test.ts +++ b/fluxer_api/src/api/worker/tests/WorkerRunnerShutdown.test.ts @@ -4,7 +4,7 @@ import type {IJobLedgerRepository} from '@app/api/jobs/IJobLedgerRepository'; import {setInjectedWorkerService} from '@app/api/middleware/ServiceRegistry'; import {NoopWorkerService} from '@app/api/test/NoopWorkerService'; import {WorkerRunner} from '@app/api/worker/WorkerRunner'; -import type {ConsumerMessages, JsMsg} from 'nats'; +import type {ConsumerMessages, JsMsg} from '@nats-io/jetstream'; import {beforeAll, describe, expect, it, vi} from 'vitest'; const TASK_TYPE = 'processInactivityDeletions'; diff --git a/fluxer_api/src/api/worker/utils/ArchiveFile.ts b/fluxer_api/src/api/worker/utils/ArchiveFile.ts index 499278948..cb3469b11 100644 --- a/fluxer_api/src/api/worker/utils/ArchiveFile.ts +++ b/fluxer_api/src/api/worker/utils/ArchiveFile.ts @@ -3,7 +3,7 @@ import {lstat, opendir, readlink} from 'node:fs/promises'; import path from 'node:path'; import type {Readable} from 'node:stream'; import {finished, pipeline} from 'node:stream/promises'; -import archiver, {type Archiver, type EntryData} from 'archiver'; +import {type Archiver, type EntryData, ZipArchive} from 'archiver'; export interface ArchiveEntryWriter { append(source: Readable | Buffer | string, data: EntryData): Promise; @@ -27,19 +27,18 @@ export async function writeZipArchive( filePath: string, produce: (archive: ArchiveFileWriter) => void | Promise, ): Promise { - const archive: Archiver = archiver('zip', {zlib: {level: 6}}); + const archive: Archiver = new ZipArchive({zlib: {level: 6}}); const output = createWriteStream(filePath); const outputClosed = new Promise((resolve) => output.once('close', resolve)); const archiveClosed = new Promise((resolve) => archive.once('close', resolve)); const inputs = new Map>(); - const entries = new Map(); + const entries: Array = []; let failure: {error: unknown} | undefined; function fail(error: unknown): void { if (failure) return; failure = {error}; - for (const entry of entries.values()) entry.reject(error); - entries.clear(); + for (const entry of entries.splice(0)) entry.reject(error); const streamError = error instanceof Error ? error : new Error('Archive creation failed', {cause: error}); for (const source of inputs.keys()) source.destroy(streamError); archive.abort(); @@ -76,7 +75,7 @@ export async function writeZipArchive( } requireWritable(); const entry = {...data}; - const processed = new Promise((resolve, reject) => entries.set(entry, {resolve, reject})); + const processed = new Promise((resolve, reject) => entries.push({resolve, reject})); const completed = Promise.all([processed, completion]); try { archive.append(source, entry); @@ -117,14 +116,13 @@ export async function writeZipArchive( archive.on('warning', fail); archive.on('error', fail); - archive.on('entry', (entry) => { + archive.on('entry', () => { if (failure) return; - const pending = entries.get(entry); + const pending = entries.shift(); if (!pending) { fail(new Error('Archive completed an unknown entry')); return; } - entries.delete(entry); pending.resolve(); }); output.on('error', fail); diff --git a/fluxer_api/src/types/idna-uts46-hx.d.ts b/fluxer_api/src/types/idna-uts46-hx.d.ts new file mode 100644 index 000000000..75d21452b --- /dev/null +++ b/fluxer_api/src/types/idna-uts46-hx.d.ts @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +declare module 'idna-uts46-hx' { + interface Options { + transitional?: boolean; + useStd3ASCII?: boolean; + verifyDnsLength?: boolean; + } + export function toAscii(domain: string, options?: Options): string; + export function toUnicode(domain: string, options?: Options): string; +} diff --git a/fluxer_app/index.html b/fluxer_app/index.html index c979f75e0..38cb35690 100644 --- a/fluxer_app/index.html +++ b/fluxer_app/index.html @@ -1,5 +1,5 @@ - + diff --git a/fluxer_app/lingui.config.js b/fluxer_app/lingui.config.js index 5b87a0454..ca341dab9 100644 --- a/fluxer_app/lingui.config.js +++ b/fluxer_app/lingui.config.js @@ -1,6 +1,8 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -module.exports = { +import {formatter} from '@lingui/format-po'; + +export default { locales: [ 'ar', 'bg', @@ -45,6 +47,6 @@ module.exports = { exclude: ['**/node_modules/**', '**/*.d.ts', '**/*.test.*', '**/*.spec.*', '**/testing/**'], }, ], - format: 'po', + format: formatter(), compileNamespace: 'es', }; diff --git a/fluxer_app/package.json b/fluxer_app/package.json index 93b776a20..9e2a1d935 100644 --- a/fluxer_app/package.json +++ b/fluxer_app/package.json @@ -22,8 +22,8 @@ "bench:gif-picker": "vitest bench --run src/features/channel/components/pickers/gif/GifPickerStateMachine.bench.ts src/features/channel/components/pickers/gif/GifPickerGridData.bench.ts src/features/channel/components/pickers/gif/GifPickerLoadingSkeletonGridLayout.bench.ts src/features/channel/components/pickers/shared/TileFlowSolver.bench.ts", "bench:messages": "vitest bench --run src/features/messaging/utils/MessageGroupingUtils.bench.ts src/features/channel/components/ChannelMessageStreamUtils.bench.ts src/features/messaging/components/markdown/MarkdownRendering.bench.ts src/features/channel/components/MessageAttachmentUtils.bench.ts src/features/messaging/utils/MessagePaginationUtils.bench.ts src/features/platform/utils/ScrollPosition.bench.ts src/features/messaging/state/ReactionStateMachine.bench.ts", "test:watch": "vitest", - "typecheck": "pnpm wasm:codegen && pnpm generate:colors && pnpm generate:message-layout && pnpm generate:theme-variables && pnpm generate:masks && pnpm generate:css-types && pnpm lingui:compile && tsgo --noEmit", - "typecheck:only": "tsgo --noEmit", + "typecheck": "pnpm wasm:codegen && pnpm generate:colors && pnpm generate:message-layout && pnpm generate:theme-variables && pnpm generate:masks && pnpm generate:css-types && pnpm lingui:compile && tsc --noEmit", + "typecheck:only": "tsc --noEmit", "check:message-layout": "pnpm tsx scripts/GenerateMessageLayoutCss.ts --check", "generate:colors": "pnpm tsx scripts/GenerateColorSystem.ts", "generate:css-types": "pnpm tsx scripts/GenerateCssTypes.ts", @@ -41,7 +41,7 @@ "i18n:refresh": "pnpm i18n:extract && pnpm i18n:auto && pnpm i18n:compile", "lingui:compile": "lingui compile --strict", "lingui:extract": "lingui extract --clean", - "tsc:all": "pnpm wasm:codegen && pnpm tsgo -p tsconfig.json", + "tsc:all": "pnpm wasm:codegen && pnpm tsc -p tsconfig.json", "wasm:bench": "pnpm wasm:codegen && node scripts/BenchLibfluxcore.mjs", "wasm:bench:download-realmedia": "node scripts/BenchLibfluxcore.mjs --download-realmedia", "wasm:bench:highres": "pnpm wasm:codegen && node scripts/BenchLibfluxcore.mjs --profile=highres", @@ -61,118 +61,118 @@ "not op_mini all" ], "dependencies": { - "@arborium/ada": "2.16.0", - "@arborium/agda": "2.16.0", + "@arborium/ada": "2.18.2", + "@arborium/agda": "2.18.2", "@arborium/arborium": "catalog:", - "@arborium/asciidoc": "2.16.0", - "@arborium/asm": "2.16.0", - "@arborium/awk": "2.16.0", - "@arborium/bash": "2.16.0", - "@arborium/batch": "2.16.0", - "@arborium/c": "2.16.0", - "@arborium/c-sharp": "2.16.0", - "@arborium/caddy": "2.16.0", - "@arborium/capnp": "2.16.0", - "@arborium/cedar": "2.16.0", - "@arborium/cedarschema": "2.16.0", - "@arborium/clojure": "2.16.0", - "@arborium/cmake": "2.16.0", - "@arborium/cobol": "2.16.0", - "@arborium/commonlisp": "2.16.0", - "@arborium/cpp": "2.16.0", - "@arborium/css": "2.16.0", - "@arborium/d": "2.16.0", - "@arborium/dart": "2.16.0", - "@arborium/devicetree": "2.16.0", - "@arborium/diff": "2.16.0", - "@arborium/dockerfile": "2.16.0", - "@arborium/dot": "2.16.0", - "@arborium/elisp": "2.16.0", - "@arborium/elixir": "2.16.0", - "@arborium/elm": "2.16.0", - "@arborium/erlang": "2.16.0", - "@arborium/fish": "2.16.0", - "@arborium/fsharp": "2.16.0", - "@arborium/gleam": "2.16.0", - "@arborium/glsl": "2.16.0", - "@arborium/go": "2.16.0", - "@arborium/graphql": "2.16.0", - "@arborium/groovy": "2.16.0", - "@arborium/haskell": "2.16.0", - "@arborium/hcl": "2.16.0", - "@arborium/hlsl": "2.16.0", - "@arborium/html": "2.16.0", - "@arborium/idris": "2.16.0", - "@arborium/ini": "2.16.0", - "@arborium/java": "2.16.0", - "@arborium/javascript": "2.16.0", - "@arborium/jinja2": "2.16.0", - "@arborium/jq": "2.16.0", - "@arborium/json": "2.16.0", - "@arborium/julia": "2.16.0", - "@arborium/kotlin": "2.16.0", - "@arborium/lean": "2.16.0", - "@arborium/lua": "2.16.0", - "@arborium/markdown": "2.16.0", - "@arborium/matlab": "2.16.0", - "@arborium/meson": "2.16.0", - "@arborium/nginx": "2.16.0", - "@arborium/ninja": "2.16.0", - "@arborium/nix": "2.16.0", - "@arborium/objc": "2.16.0", - "@arborium/ocaml": "2.16.0", - "@arborium/perl": "2.16.0", - "@arborium/php": "2.16.0", - "@arborium/postscript": "2.16.0", - "@arborium/powershell": "2.16.0", - "@arborium/prolog": "2.16.0", - "@arborium/python": "2.16.0", - "@arborium/query": "2.16.0", - "@arborium/r": "2.16.0", - "@arborium/rego": "2.16.0", - "@arborium/rescript": "2.16.0", - "@arborium/ron": "2.16.0", - "@arborium/ruby": "2.16.0", - "@arborium/rust": "2.16.0", - "@arborium/scala": "2.16.0", - "@arborium/scheme": "2.16.0", - "@arborium/scss": "2.16.0", - "@arborium/solidity": "2.16.0", - "@arborium/sparql": "2.16.0", - "@arborium/sql": "2.16.0", - "@arborium/ssh-config": "2.16.0", - "@arborium/starlark": "2.16.0", - "@arborium/styx": "2.16.0", - "@arborium/svelte": "2.16.0", - "@arborium/swift": "2.16.0", - "@arborium/textproto": "2.16.0", - "@arborium/thrift": "2.16.0", - "@arborium/tlaplus": "2.16.0", - "@arborium/toml": "2.16.0", - "@arborium/tsx": "2.16.0", - "@arborium/typescript": "2.16.0", - "@arborium/typst": "2.16.0", - "@arborium/uiua": "2.16.0", - "@arborium/vb": "2.16.0", - "@arborium/verilog": "2.16.0", - "@arborium/vhdl": "2.16.0", - "@arborium/vim": "2.16.0", - "@arborium/vue": "2.16.0", - "@arborium/wit": "2.16.0", - "@arborium/x86asm": "2.16.0", - "@arborium/xml": "2.16.0", - "@arborium/yaml": "2.16.0", - "@arborium/yuri": "2.16.0", - "@arborium/zig": "2.16.0", - "@arborium/zsh": "2.16.0", + "@arborium/asciidoc": "2.18.2", + "@arborium/asm": "2.18.2", + "@arborium/awk": "2.18.2", + "@arborium/bash": "2.18.2", + "@arborium/batch": "2.18.2", + "@arborium/c": "2.18.2", + "@arborium/c-sharp": "2.18.2", + "@arborium/caddy": "2.18.2", + "@arborium/capnp": "2.18.2", + "@arborium/cedar": "2.18.2", + "@arborium/cedarschema": "2.18.2", + "@arborium/clojure": "2.18.2", + "@arborium/cmake": "2.18.2", + "@arborium/cobol": "2.18.2", + "@arborium/commonlisp": "2.18.2", + "@arborium/cpp": "2.18.2", + "@arborium/css": "2.18.2", + "@arborium/d": "2.18.2", + "@arborium/dart": "2.18.2", + "@arborium/devicetree": "2.18.2", + "@arborium/diff": "2.18.2", + "@arborium/dockerfile": "2.18.2", + "@arborium/dot": "2.18.2", + "@arborium/elisp": "2.18.2", + "@arborium/elixir": "2.18.2", + "@arborium/elm": "2.18.2", + "@arborium/erlang": "2.18.2", + "@arborium/fish": "2.18.2", + "@arborium/fsharp": "2.18.2", + "@arborium/gleam": "2.18.2", + "@arborium/glsl": "2.18.2", + "@arborium/go": "2.18.2", + "@arborium/graphql": "2.18.2", + "@arborium/groovy": "2.18.2", + "@arborium/haskell": "2.18.2", + "@arborium/hcl": "2.18.2", + "@arborium/hlsl": "2.18.2", + "@arborium/html": "2.18.2", + "@arborium/idris": "2.18.2", + "@arborium/ini": "2.18.2", + "@arborium/java": "2.18.2", + "@arborium/javascript": "2.18.2", + "@arborium/jinja2": "2.18.2", + "@arborium/jq": "2.18.2", + "@arborium/json": "2.18.2", + "@arborium/julia": "2.18.2", + "@arborium/kotlin": "2.18.2", + "@arborium/lean": "2.18.2", + "@arborium/lua": "2.18.2", + "@arborium/markdown": "2.18.2", + "@arborium/matlab": "2.18.2", + "@arborium/meson": "2.18.2", + "@arborium/nginx": "2.18.2", + "@arborium/ninja": "2.18.2", + "@arborium/nix": "2.18.2", + "@arborium/objc": "2.18.2", + "@arborium/ocaml": "2.18.2", + "@arborium/perl": "2.18.2", + "@arborium/php": "2.18.2", + "@arborium/postscript": "2.18.2", + "@arborium/powershell": "2.18.2", + "@arborium/prolog": "2.18.2", + "@arborium/python": "2.18.2", + "@arborium/query": "2.18.2", + "@arborium/r": "2.18.2", + "@arborium/rego": "2.18.2", + "@arborium/rescript": "2.18.2", + "@arborium/ron": "2.18.2", + "@arborium/ruby": "2.18.2", + "@arborium/rust": "2.18.2", + "@arborium/scala": "2.18.2", + "@arborium/scheme": "2.18.2", + "@arborium/scss": "2.18.2", + "@arborium/solidity": "2.18.2", + "@arborium/sparql": "2.18.2", + "@arborium/sql": "2.18.2", + "@arborium/ssh-config": "2.18.2", + "@arborium/starlark": "2.18.2", + "@arborium/styx": "2.18.2", + "@arborium/svelte": "2.18.2", + "@arborium/swift": "2.18.2", + "@arborium/textproto": "2.18.2", + "@arborium/thrift": "2.18.2", + "@arborium/tlaplus": "2.18.2", + "@arborium/toml": "2.18.2", + "@arborium/tsx": "2.18.2", + "@arborium/typescript": "2.18.2", + "@arborium/typst": "2.18.2", + "@arborium/uiua": "2.18.2", + "@arborium/vb": "2.18.2", + "@arborium/verilog": "2.18.2", + "@arborium/vhdl": "2.18.2", + "@arborium/vim": "2.18.2", + "@arborium/vue": "2.18.2", + "@arborium/wit": "2.18.2", + "@arborium/x86asm": "2.18.2", + "@arborium/xml": "2.18.2", + "@arborium/yaml": "2.18.2", + "@arborium/yuri": "2.18.2", + "@arborium/zig": "2.18.2", + "@arborium/zsh": "2.18.2", "@base-ui/react": "catalog:", - "@bufbuild/protobuf": "^2.12.0", - "@codemirror/autocomplete": "^6.20.2", - "@codemirror/commands": "^6.10.3", + "@bufbuild/protobuf": "^2.15.0", + "@codemirror/autocomplete": "^6.20.3", + "@codemirror/commands": "^6.11.1", "@codemirror/lang-css": "^6.3.1", - "@codemirror/language": "^6.12.3", - "@codemirror/state": "^6.6.0", - "@codemirror/view": "^6.43.0", + "@codemirror/language": "^6.12.4", + "@codemirror/state": "^6.7.5", + "@codemirror/view": "^6.43.12", "@floating-ui/react": "catalog:", "@floating-ui/react-dom": "catalog:", "@fluxer/constants": "workspace:*", @@ -200,7 +200,7 @@ "@radix-ui/react-switch": "catalog:", "@sapphi-red/web-noise-suppressor": "catalog:", "@simplewebauthn/browser": "catalog:", - "@tanstack/react-virtual": "^3.13.23", + "@tanstack/react-virtual": "^3.14.13", "animejs": "4.5.0", "bowser": "catalog:", "clsx": "catalog:", @@ -211,7 +211,7 @@ "eventemitter3": "catalog:", "fast-png": "^8.0.0", "favico.js": "catalog:", - "fflate": "^0.8.2", + "fflate": "^0.8.3", "framer-motion": "catalog:", "gifenc": "^1.0.3", "gifuct-js": "^2.1.2", @@ -250,14 +250,16 @@ "upng-js": "^2.1.0", "urlpattern-polyfill": "catalog:", "valibot": "catalog:", - "xstate": "5.31.1" + "xstate": "5.33.2" }, "devDependencies": { - "@babel/parser": "7.29.0", + "@babel/parser": "8.0.5", "@lingui/cli": "catalog:", + "@lingui/format-po": "catalog:", "@lingui/swc-plugin": "catalog:", "@rspack/cli": "catalog:", "@rspack/core": "catalog:", + "@rspack/dev-server": "catalog:", "@svgr/webpack": "catalog:", "@types/combokeys": "catalog:", "@types/lodash": "catalog:", @@ -266,11 +268,10 @@ "@types/qrcode": "catalog:", "@types/react": "catalog:", "@types/react-dom": "catalog:", - "@typescript/native-preview": "catalog:", "@webgpu/types": "catalog:", "autoprefixer": "catalog:", "esbuild": "catalog:", - "happy-dom": "20.12.0", + "happy-dom": "20.14.5", "postcss": "catalog:", "postcss-discard-comments": "catalog:", "postcss-loader": "catalog:", @@ -278,7 +279,8 @@ "sharp": "catalog:", "tsx": "catalog:", "typed-css-modules": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" }, - "packageManager": "pnpm@10.29.3" + "packageManager": "pnpm@12.4.2" } diff --git a/fluxer_app/pkgs/livekit-client/VENDORING.md b/fluxer_app/pkgs/livekit-client/VENDORING.md index b32d98bca..2c2ac31a2 100644 --- a/fluxer_app/pkgs/livekit-client/VENDORING.md +++ b/fluxer_app/pkgs/livekit-client/VENDORING.md @@ -1,37 +1,44 @@ -# Vendored: livekit-client +# Vendored livekit-client -- **Upstream:** https://github.com/livekit/client-sdk-js -- **Version:** v2.17.2 (git tag `v2.17.2`) -- **License:** Apache-2.0 -- **Date vendored:** 2026-05-25 +Vendored from https://github.com/livekit/client-sdk-js at tag `v2.22.3` (commit `53dd840`) under the Apache-2.0 licence. Re-vendored from `v2.17.2` on 2026-09-17. + +## Source transforms + +Every file went through the same mechanical steps, so a fresh upstream tree can be brought into this shape before merging. + +1. Test files, `src/test` and snapshots are dropped. Files that are not reachable from `src/index.ts` or `src/e2ee/worker/e2ee.worker.ts` are dropped too. +2. Comments are stripped. `/// ` lines, `@ts-expect-error` directives that are still needed and `biome-ignore` lines stay. +3. Relative imports get explicit `.ts` extensions, and directory imports point at `index.ts`. +4. Each file starts with the LiveKit SPDX header. +5. `biome check --write --unsafe` runs with the repo config. The unsafe fixes are reviewed by hand, because `useOptionalChain` turned `callback && callback(x)` into a call on `false` in `room/debounce.ts`, and `noUnusedPrivateClassMembers` deleted a field that was still written in `utils/dataPacketBuffer.ts`. +6. The tree is made to pass `tsgo --noEmit` under `fluxer_app/tsconfig.json`. That means `override` modifiers, explicit `return undefined`, typed `let` declarations, no async promise executors, literal enum members and no unused `@ts-expect-error` directives. +7. `@livekit/throws-transformer/throws` imports point at `src/utils/throws.ts`, which copies its type definitions, so the dev-only package is not a dependency. ## Fluxer modifications -Changes applied on top of the upstream v2.17.2 source. These were previously a pnpm patch at `patches/livekit-client@2.17.2.patch` and are now plain source edits in this package. +1. **AV1 end-to-end encryption** (`src/e2ee/worker/av1Utils.ts`, `FrameCryptor.ts`, `src/room/track/utils.ts`) -1. **AV1 E2EE support** (`src/e2ee/worker/av1Crypto.ts`, `FrameCryptor.ts`, `e2ee.worker.ts`) + OBU-level AV1 encryption and decryption with an E2EE metadata OBU. `video/AV1X` maps to `av1`. - OBU-level AV1 encryption and decryption for end-to-end encrypted voice and video. +2. **Cryptor context for reused senders** (`src/e2ee/E2eeManager.ts`, `src/e2ee/worker/FrameCryptor.ts`) -2. **UpdateTrackContext message** (`src/e2ee/types.ts`, worker dispatch) + Upstream 2.22 tracks the id of a reused receiver in `E2EE_TRACK_ID` and sends `updateCodec` with `previousTrackId`. Fluxer applies the same to senders, passes the codec and track id from `LocalSenderCreated`, and resets codec detection whenever a cryptor moves to another track id or codec. This replaces the old `updateTrackContext` message and `get/setE2EETransformState`. - `updateCodec` replaced with `updateTrackContext`, which carries participant identity and track id so a reused track cannot pick up the wrong codec. +3. **E2EE frame guards** (`src/e2ee/worker/FrameCryptor.ts`, `naluUtils.ts`) -3. **E2EEManager state tracking** (`src/e2ee/E2eeManager.ts`) + Trailer, IV, tag and clear-prefix bounds are checked before any view is built, and malformed frames are dropped without ending the transform. NALU clear bytes are clamped to the frame length. H.265 slices keep 3 clear bytes where upstream keeps 2. The SIF trailer check is bounds safe. - `getE2EETransformState()` and `setE2EETransformState()` for transform lifecycle management. +4. **No plaintext before the encryption state is known** (`src/e2ee/worker/FrameCryptor.ts`) -4. **Screen share scalability mode** (`src/room/participant/LocalParticipant.ts`) + The encoder drops frames while the participant's encryption state is unknown. Upstream passes them through. Upstream 2.22 already drops them on decode. - A caller-supplied `scalabilityMode` is preserved for screen shares instead of being forced to `L3T3_KEY`, so VP9 and AV1 screen shares use the browser default unless Fluxer asks for a specific SVC layout. +5. **Screen share scalability mode** (`src/room/participant/LocalParticipant.ts`) -5. **E2EE frame layout guards** (`src/e2ee/worker/FrameCryptor.ts`) - - Encrypted frame trailer, IV, tag and clear-prefix bounds are validated before any typed-array view is constructed, and malformed frames are dropped without tearing down the transform stream. + A caller-supplied `scalabilityMode` is kept for screen shares. Upstream forces `L1T3` and `contentHint = 'motion'`. `L3T3_KEY` is only defaulted for cameras, and SVC layers are only sent to the server when an encoding has a scalability mode. 6. **Encrypted backup codec publishing** (`src/room/participant/LocalParticipant.ts`, `src/e2ee/E2eeManager.ts`) - Backup codec tracks can be advertised and published while E2EE is on, with sender transforms attached using the cloned media track id and codec. + Backup codecs are advertised and published while E2EE is on. The simulcast sender emits `LocalSenderCreated` with its codec and track id so it gets its own transform. A failed backup codec publish stops the cloned track and is logged instead of thrown. 7. **Publisher codec preferences** (`src/room/RTCEngine.ts`) @@ -43,34 +50,57 @@ Changes applied on top of the upstream v2.17.2 source. These were previously a p 8. **Media publishing defaults** (`src/room/defaults.ts`, `src/room/utils.ts`, `src/room/track/options.ts`) - Codec fallback follows actual sender capabilities in the order H.264, VP9, VP8, AV1, HEVC. Advanced codecs are paired with an H.264 backup simulcast, and screen shares default to maintain-resolution with a 4K60-ready bitrate cap. AV1 and HEVC come last because both are opt-in in Fluxer, so a fallback inside `publishTrack` must not land on a codec the user did not enable. Fluxer picks the codec itself before publishing, so this order only applies when the client overrides the request, such as the reconnect republish that runs outside Fluxer's own flows. + Codec fallback follows actual sender capabilities in the order H.264, VP9, VP8, AV1, HEVC through `supportsVideoCodec()` and `selectPreferredVideoCodec()`. HEVC is never reported on Firefox. Advanced codecs get an H.264 backup simulcast, dynacast is on, DTX is off, degradation preference is `maintain-resolution`, and screen shares default to the `original` preset at 20 Mbps and 60 fps. `musicHighQualityStereo` is 510 kbps. AV1 and HEVC come last because both are opt-in in Fluxer, so a fallback inside `publishTrack` must not land on a codec the user did not enable. -9. **High-fidelity Opus SDP munging** (`src/room/PCTransport.ts`) +9. **High-fidelity Opus SDP munging** (`src/room/PCTransport.ts`, `src/room/participant/LocalParticipant.ts`) - Local offers and remote answers are munged to force Opus RED and FEC, 10 ms packet time, no DTX, and a 510 kbps maximum average bitrate. Stereo signalling stays opt-in. `stereo=1` and `sprop-stereo=1` are added only for publications whose `TrackBitrateInfo.stereo` is set (studio mode above the stereo bitrate threshold, and screen-share audio) and for the subscriber mids the server advertised as stereo, so a mono microphone is not encoded and decoded as a two-channel stream. + Local offers and remote answers force Opus RED and FEC, 10 ms packet time, no DTX and a 510 kbps maximum average bitrate. `stereo=1` and `sprop-stereo=1` are only added for publications whose `TrackBitrateInfo.stereo` is set and for the subscriber mids the server advertised as stereo. Audio bitrates are registered on every browser, not only Firefox. The initial offer sent with the join request is not munged, as upstream does not munge it either. -10. **Remote audio volume restore at exactly zero** (`src/room/track/RemoteAudioTrack.ts`) +10. **Remote audio volume held at zero** (`src/room/track/RemoteAudioTrack.ts`) - `attach()`, `connectWebAudio()` and `getVolume()` guarded the remembered `elementVolume` with a truthiness check, so a track deliberately held at `0` came back at full volume whenever it was re-attached or its Web Audio graph was rebuilt. All three now test `!== undefined`. Remote gains above `1.0` are only legal because `setVolume()` takes the Web Audio `gainNode` branch, as the `el.volume` branch would throw `IndexSizeError`, so `webAudioMix` must stay unconditional. + `attach()`, `connectWebAudio()` and `getVolume()` test `elementVolume !== undefined`, so a track held at `0` stays silent after re-attach. Remote gains above `1.0` rely on the Web Audio `gainNode` branch, so `webAudioMix` must stay on. 11. **Processor teardown before source stop** (`src/room/track/LocalTrack.ts`) - `stop()` called `super.stop()` first, killing the source `MediaStreamTrack` and closing the readable that feeds a track processor before `processor.destroy()` ran. A camera-effect worker therefore saw input EOF before its owner's stop command and reported an operational failure during an ordinary camera-off. The processor is now captured, detached and torn down before `super.stop()`. + `stop()` detaches and destroys the processor before `super.stop()` ends the source track. 12. **Transactional source and processor swaps** (`src/room/track/LocalTrack.ts`, `LocalVideoTrack.ts`, `LocalAudioTrack.ts`) - `setMediaStreamTrack()` applied the new source, restarted the processor and re-armed the sender with no unwind path, so a failure part-way through left a half-applied track with listeners moved, elements detached and the sender pointing at a dead track. It now takes `SetMediaStreamTrackOptions` (`force`, `deferEndedListener`, `preservePreviousTrack`) and, on failure, restores the previous source, constraints, `enabled` state, listeners, processor and sender. It throws `TrackInvalidError` when the previous source is no longer `live`, because an ended track cannot be restored, and surfaces both failures as an `AggregateError` when the unwind itself fails. + `setMediaStreamTrack()` takes `SetMediaStreamTrackOptions` (`force`, `deferEndedListener`, `preservePreviousTrack`, `isUnmuting`) and restores the previous source, constraints, `enabled` state, listeners, processor and sender when a swap fails. `stageTrackReplacement()` and `commitStagedTrackReplacement()` give a two-phase swap. `runWithTrackChangeLock()` and `stopProcessorIfCurrent()` are public for the app. Secondary simulcast senders get the processed track, and processor install and teardown roll back every sender. Upstream's `onSenderTrackSwapped()` hook runs after a successful `replaceTrack`, `stageTrackReplacement`, `setProcessor`, `stopProcessor` and `stopProcessorIfCurrent`. - `stageTrackReplacement()` and `commitStagedTrackReplacement()` add a two-phase swap. The candidate becomes the active source with its `ended` listener deferred and the previous source preserved, and only the commit adopts the `ended` listener and clears the staged identity, so a caller can validate its publication before the swap is observable. `replaceTrack()` and `restart()` guard the `providedByUser` flip behind a `replacementCommitted` flag. `restart()` still detaches and stops the previous source before calling `getUserMedia()`, as upstream does, because Safari ends a freshly acquired track with a capture failure while the old track for the same device is still live. `setSimulcastTrackSender()` routes an installed processor's `processedTrack` to a newly registered secondary sender so a backup codec never publishes raw frames while the primary is processed. Processor install and teardown in all three classes roll the processed and raw sender track back, including `LocalVideoTrack`'s secondary simulcast senders, and aggregate every cleanup failure instead of discarding it. +13. **Track bitrate entries are replaced** (`src/room/PCTransport.ts`) -13. **Start bitrate for every video codec** (`src/room/PCTransport.ts`, `src/room/participant/LocalParticipant.ts`, `src/room/participant/publishUtils.ts`) + `setTrackCodecBitrate()` replaces the entry for the same cid or transceiver instead of appending, because `trackBitrates` is never cleared. Start bitrates for every video codec are upstream since 2.22 through `applyVideoStartBitrate()`. - `x-google-start-bitrate` was reachable only by AV1 and VP9 because it was gated twice. The publish path registered a track bitrate only for SVC codecs, and the offer munging returned early for everything else. H.264, H.265 and VP8 therefore opened at the Chromium default and had to ramp, which showed up as a 3000 kbps screen share encoding at 346 kbps twenty seconds in. The bitrate is now registered for every video codec from the highest encoding (`maxEncodingBitrate()`, so a simulcast ladder contributes its top layer), and the offer munging applies it whenever a max bitrate is known. The dependency descriptor extension stays SVC-only. `appendStartBitrateToFmtp()` holds the fmtp edit so it can be tested, and `setTrackCodecBitrate()` replaces an entry for the same cid or transceiver instead of appending, since `trackBitrates` is never cleared. +14. **Subscriber video decoder exclusions** (`src/options.ts`, `src/room/RTCEngine.ts`, `src/room/PCTransportManager.ts`, `src/room/PCTransport.ts`) + + `RoomOptions.subscriberVideoCodecExclusions` removes codecs from receive transceivers with `setCodecPreferences()` before every offer and answer, including the initial offer sent with the join request. Firefox and Safari are skipped. + +15. **ICE diagnostics** (`src/room/PCTransportManager.ts`) + + ICE candidate errors are logged once per transport, code, URL and address until the next ICE restart. The transport connect timeout names each transport's connection, ICE and signalling state. + +16. **Screen share capture options** (`src/room/track/options.ts`, `src/room/track/utils.ts`) + + `ScreenShareCaptureOptions` has `windowAudio`, `monitorTypeSurfaces` and `restrictOwnAudio`. `restrictOwnAudio` and `suppressLocalAudioPlayback` are passed as audio constraints. + +17. **Stats and monitors** (`src/room/stats.ts`, `src/room/track/Track.ts`, `LocalVideoTrack.ts`, `RemoteVideoTrack.ts`, `RemoteTrack.ts`, `LocalAudioTrack.ts`) + + Sender stats have `encoderImplementation` and `powerEfficientEncoder`, receiver stats have `powerEfficientDecoder`. `runMonitor()` skips a stats poll while the previous one is still running. Adaptive stream tracks that are not visible skip receiver stats. `setPublishingLayersForSender` writes `maxFramerate` where upstream writes a misspelt `maxFrameRate`, and `videoLayersFromEncodings` handles an SVC codec without a scalability mode. + +18. **Smaller fixes** (`src/api/SignalClient.ts`, `src/api/utils.ts`, `src/room/Room.ts`, `src/room/timers.ts`, `src/room/utils.ts`, `src/e2ee/worker/e2ee.worker.ts`) + + The abort path passes its reason to `SignalClient.close()` as the reason instead of `updateState`. `handleOnClose` is public so `simulateScenario` needs no suppression. Queue bypass checks no longer log every request. Abort reasons that are numbers, booleans, bigints or symbols become strings. `Room` connect rejections are always `Error` instances. `CriticalTimers` binds the native timers when the module loads. `Future` rejects when its executor throws. The e2ee worker listens with `addEventListener`, and the outgoing data stream sink no longer logs aborts to `console`. + +## Removed upstream code + +`connectionHelper`, `createLocalScreenTracks`, `getStereoAudioStreamTrack`, `isLocalPub`, the frame metadata worker, `room/token-source/test-tokens.ts`, `utils/subscribeToEvents.ts`, and the `DataTrackPacket`, data track packet extension and `LocalTrackRecorder` exports. `createV0RtcUrl`, `truncateBytes`, `videoQualityForRid` and `STOP_REFETCH_DELAY_MS` are no longer exported. ## Updating from upstream -1. Check the upstream changelog for the target version. -2. `git diff v2.17.2..v -- src/` to see what changed. -3. Apply relevant upstream changes to this package's `src/`. -4. Update the version field in `package.json` to match the new upstream version. -5. Update this file with the new version and date. +1. Read the upstream changelog for the target version. +2. Run the source transforms on the old tag and on the new tag. Keep the old result as the merge base and the new result as the other side. +3. Strip blank lines from the base, this tree and the new tree, run `git merge-file --diff3 --diff-algorithm=histogram` per file, and put blank lines back from the new tree. Blank-line drift between the trees otherwise turns into conflicts. +4. Resolve conflicts with the modification list above. Where upstream rewrote a function that carries a Fluxer change, start from the upstream function and reapply the change. +5. Diff the result against the transformed new tag after compiling both to JavaScript without types. Every hunk should belong to a modification listed here. +6. Run `tsgo --noEmit` under the app tsconfig, `biome check`, `knip` and `pnpm --filter livekit-client test`, then update the version in `package.json` and this file. diff --git a/fluxer_app/pkgs/livekit-client/package.json b/fluxer_app/pkgs/livekit-client/package.json index 4709daa45..b9a50570f 100644 --- a/fluxer_app/pkgs/livekit-client/package.json +++ b/fluxer_app/pkgs/livekit-client/package.json @@ -1,6 +1,6 @@ { "name": "livekit-client", - "version": "2.17.2", + "version": "2.22.3", "private": true, "type": "module", "exports": { @@ -14,18 +14,18 @@ }, "dependencies": { "@livekit/mutex": "1.1.1", - "@livekit/protocol": "1.42.2", + "@livekit/protocol": "1.51.0", "events": "^3.3.0", "jose": "^6.1.0", "loglevel": "^1.9.2", + "machina": "^7.0.1", "sdp-transform": "^2.15.0", - "ts-debounce": "^4.0.0", "typed-emitter": "^2.1.0", - "webrtc-adapter": "^9.0.1" + "webrtc-adapter": "^9.0.6" }, "devDependencies": { "@types/events": "^3.0.0", - "@types/sdp-transform": "^2.4.9", + "@types/sdp-transform": "^2.15.0", "vitest": "catalog:" } } diff --git a/fluxer_app/pkgs/livekit-client/src/api/SignalClient.ts b/fluxer_app/pkgs/livekit-client/src/api/SignalClient.ts index bf58312b5..c4a5a981a 100644 --- a/fluxer_app/pkgs/livekit-client/src/api/SignalClient.ts +++ b/fluxer_app/pkgs/livekit-client/src/api/SignalClient.ts @@ -6,9 +6,12 @@ import { type AddTrackRequest, type AudioTrackFeature, type ClientInfo, + type ClientInfo_Capability, type ConnectionQualityUpdate, ConnectionSettings, + type DataTrackSubscriberHandles, DisconnectReason, + Encryption_Type, JoinRequest, type JoinResponse, LeaveRequest, @@ -17,6 +20,8 @@ import { MuteTrackRequest, type ParticipantInfo, Ping, + PublishDataTrackRequest, + type PublishDataTrackResponse, protoInt64, type ReconnectReason, type ReconnectResponse, @@ -39,6 +44,10 @@ import { type TrackPublishedResponse, type TrackUnpublishedResponse, TrickleRequest, + UnpublishDataTrackRequest, + type UnpublishDataTrackResponse, + UpdateDataSubscription, + UpdateDataSubscription_Update, UpdateLocalAudioTrack, UpdateParticipantMetadata, type UpdateSubscription, @@ -46,13 +55,24 @@ import { UpdateVideoLayers, type VideoLayer, WrappedJoinRequest, + WrappedJoinRequest_Compression, } from '@livekit/protocol'; import log, {getLogger, LoggerNames} from '../logger.ts'; -import {ConnectionError} from '../room/errors.ts'; +import type {DataTrackHandle} from '../room/data-track/handle.ts'; +import type {DataTrackSid} from '../room/data-track/types.ts'; +import {ConnectionError, ConnectionErrorReason} from '../room/errors.ts'; import CriticalTimers, {type TimerHandle} from '../room/timers.ts'; import type {LoggerOptions} from '../room/types.ts'; -import {getClientInfo, isReactNative, sleep} from '../room/utils.ts'; +import {getClientInfo, isCompressionStreamSupported, isReactNative, sleep} from '../room/utils.ts'; +import type {NonSharedUint8Array} from '../type-polyfills/non-shared-typed-arrays.ts'; import {AsyncQueue} from '../utils/AsyncQueue.ts'; +import {announceMachine} from '../utils/machineInspector.ts'; +import { + createSignalMachine, + type SignalLifecycleState, + type SignalMachine, + type SignalMachineInput, +} from './SignalClientStateMachine.ts'; import {createRtcUrl, createValidateUrl, getAbortReasonAsString, parseSignalResponse} from './utils.ts'; import {type WebSocketConnection, WebSocketStream} from './WebSocketStream.ts'; @@ -65,6 +85,7 @@ interface ConnectOpts extends SignalOptions { export interface SignalOptions { autoSubscribe: boolean; adaptiveStream?: boolean; + clientInfoCapabilities?: Array; maxRetries: number; e2eeEnabled: boolean; websocketTimeout: number; @@ -76,6 +97,13 @@ type SignalKind = NonNullable['case']; const passThroughQueueSignals: Array = ['syncState', 'trickle', 'offer', 'answer', 'simulate', 'leave']; +function isRecoverableReconnectError(error: unknown): boolean { + if (error instanceof ConnectionError) { + return error.reason !== ConnectionErrorReason.LeaveRequest && error.reason !== ConnectionErrorReason.NotAllowed; + } + return true; +} + function canPassThroughQueue(req: SignalMessage): boolean { return passThroughQueueSignals.indexOf(req!.case) >= 0; } @@ -88,8 +116,25 @@ export enum SignalConnectionState { DISCONNECTED, } +function lifecycleToConnectionState(lifecycle: SignalLifecycleState): SignalConnectionState { + switch (lifecycle) { + case 'connected': + return SignalConnectionState.CONNECTED; + case 'connecting': + return SignalConnectionState.CONNECTING; + case 'reconnecting': + return SignalConnectionState.RECONNECTING; + case 'disconnecting': + return SignalConnectionState.DISCONNECTING; + default: + return SignalConnectionState.DISCONNECTED; + } +} + const MAX_WS_CLOSE_TIME = 250; +const JOIN_RESPONSE_TIMEOUT = 5_000; + export class SignalClient { requestQueue: AsyncQueue; @@ -145,20 +190,48 @@ export class SignalClient { onMediaSectionsRequirement?: (requirement: MediaSectionsRequirement) => void; + onPublishDataTrackResponse?: (event: PublishDataTrackResponse) => void; + + onUnPublishDataTrackResponse?: (event: UnpublishDataTrackResponse) => void; + + onDataTrackSubscriberHandles?: (event: DataTrackSubscriberHandles) => void; + + onJoined?: (event: JoinResponse) => void; + connectOptions?: ConnectOpts; ws?: WebSocketStream; get currentState() { - return this.state; + return lifecycleToConnectionState(this.lifecycleState); } get isDisconnected() { - return this.state === SignalConnectionState.DISCONNECTING || this.state === SignalConnectionState.DISCONNECTED; + const state = this.currentState; + return state === SignalConnectionState.DISCONNECTING || state === SignalConnectionState.DISCONNECTED; + } + + private get lifecycleState(): SignalLifecycleState { + return this.machine.currentState(); + } + + private get attemptId() { + return this.machine.context.attemptId; + } + + private sendLifecycleInput(input: SignalMachineInput): boolean { + const before = this.lifecycleState; + this.machine.handle(input.type, input); + return this.lifecycleState !== before; + } + + private async settleInFlightClose() { + this.log.debug('waiting for an in-flight close to settle before establishing a session'); + (await this.closingLock.lock())(); } private get isEstablishingConnection() { - return this.state === SignalConnectionState.CONNECTING || this.state === SignalConnectionState.RECONNECTING; + return this.lifecycleState === 'connecting' || this.lifecycleState === 'reconnecting'; } private getNextRequestId() { @@ -178,7 +251,7 @@ export class SignalClient { private closingLock: Mutex; - private state: SignalConnectionState = SignalConnectionState.DISCONNECTED; + private machine: SignalMachine; private connectionLock: Mutex; @@ -193,14 +266,21 @@ export class SignalClient { private useV0SignalPath = false; constructor(useJSON: boolean = false, loggerOptions: LoggerOptions = {}) { - this.log = getLogger(loggerOptions.loggerName ?? LoggerNames.Signal); this.loggerContextCb = loggerOptions.loggerContextCb; + this.log = getLogger(loggerOptions.loggerName ?? LoggerNames.Signal, () => this.logContext); this.useJSON = useJSON; this.requestQueue = new AsyncQueue(); this.queuedRequests = []; this.closingLock = new Mutex(); this.connectionLock = new Mutex(); - this.state = SignalConnectionState.DISCONNECTED; + this.machine = createSignalMachine(); + this.machine.on('transitioned', ({fromState, toState}) => { + this.log.debug(`signal lifecycle: ${fromState} -> ${toState}`); + }); + this.machine.on('nohandler', ({inputName}) => { + this.log.debug(`ignoring signal lifecycle input ${inputName} in state ${this.lifecycleState}`); + }); + announceMachine('signal', this.machine); } private get logContext() { @@ -213,11 +293,24 @@ export class SignalClient { opts: SignalOptions, abortSignal?: AbortSignal, useV0Path: boolean = false, + publisherOffer?: SessionDescription, ): Promise { - this.state = SignalConnectionState.CONNECTING; + if (this.lifecycleState === 'disconnecting') { + await this.settleInFlightClose(); + } + if (!this.sendLifecycleInput({type: 'connect'})) { + throw ConnectionError.internal( + `cannot establish a signal session from '${this.lifecycleState}', close the current one first`, + ); + } this.options = opts; - const res = await this.connect(url, token, opts, abortSignal, useV0Path); - return res as JoinResponse; + try { + const res = await this.connect(url, token, opts, abortSignal, useV0Path, publisherOffer); + return res as JoinResponse; + } catch (e) { + this.sendLifecycleInput({type: 'connectFailed', error: e}); + throw e; + } } async reconnect( @@ -227,25 +320,39 @@ export class SignalClient { reason?: ReconnectReason, ): Promise { if (!this.options) { - this.log.warn('attempted to reconnect without signal options being set, ignoring', this.logContext); + this.log.warn('attempted to reconnect without signal options being set, ignoring'); return; } - this.state = SignalConnectionState.RECONNECTING; + if (this.lifecycleState === 'disconnecting') { + await this.settleInFlightClose(); + } + if (!this.sendLifecycleInput({type: 'reconnect'})) { + throw ConnectionError.internal(`cannot resume the signal session from '${this.lifecycleState}'`); + } this.clearPingInterval(); - const res = (await this.connect( - url, - token, - { - ...this.options, - reconnect: true, - sid, - reconnectReason: reason, - }, - undefined, - this.useV0SignalPath, - )) as ReconnectResponse | undefined; - return res; + try { + const res = (await this.connect( + url, + token, + { + ...this.options, + reconnect: true, + sid, + reconnectReason: reason, + }, + undefined, + this.useV0SignalPath, + )) as ReconnectResponse | undefined; + return res; + } catch (e) { + this.sendLifecycleInput({ + type: 'reconnectFailed', + error: e, + recoverable: isRecoverableReconnectError(e), + }); + throw e; + } } private async connect( @@ -254,16 +361,17 @@ export class SignalClient { opts: ConnectOpts, abortSignal?: AbortSignal, useV0Path: boolean = false, + publisherOffer?: SessionDescription, ): Promise { const unlock = await this.connectionLock.lock(); this.connectOptions = opts; this.useV0SignalPath = useV0Path; - const clientInfo = getClientInfo(); + const clientInfo = getClientInfo(opts.clientInfoCapabilities); const params = useV0Path ? createConnectionParams(token, clientInfo, opts) - : createJoinRequestConnectionParams(token, clientInfo, opts); + : await createJoinRequestConnectionParams(token, clientInfo, opts, publisherOffer); const rtcUrl = createRtcUrl(url, params, useV0Path).toString(); const validateUrl = createValidateUrl(rtcUrl).toString(); @@ -289,71 +397,75 @@ export class SignalClient { this.close(); } cleanupAbortHandlers(); - reject(ConnectionError.cancelled(reason)); + reject(eventOrError instanceof ConnectionError ? eventOrError : ConnectionError.cancelled(reason)); }; abortSignal?.addEventListener('abort', abortHandler); const cleanupAbortHandlers = () => { - CriticalTimers.clearTimeout(wsTimeout); + clearTimeout(wsTimeout); abortSignal?.removeEventListener('abort', abortHandler); }; - const wsTimeout = CriticalTimers.setTimeout(() => { + const wsTimeout = setTimeout(() => { abortHandler(ConnectionError.timeout('room connection has timed out (signal)')); }, opts.websocketTimeout); - const handleSignalConnected = (connection: WebSocketConnection, firstMessage?: SignalResponse) => { - this.handleSignalConnected(connection, wsTimeout, firstMessage); - }; - const redactedUrl = new URL(rtcUrl); if (redactedUrl.searchParams.has('access_token')) { redactedUrl.searchParams.set('access_token', ''); } - this.log.debug(`connecting to ${redactedUrl}`, { + + if (this.ws) { + const startClose = performance.now(); + await this.teardownTransport('replaced by a new connection attempt'); + this.log.debug(`closed previous ws connection in ${performance.now() - startClose}ms`); + } + + const attemptId = this.attemptId; + + this.log.info(`signal connecting to ${redactedUrl}`, { reconnect: opts.reconnect, reconnectReason: opts.reconnectReason, - ...this.logContext, }); - if (this.ws) { - await this.close(false); - } this.ws = new WebSocketStream(rtcUrl); + let upgradeFailed = false; + this.ws.opened.catch(() => { + upgradeFailed = true; + }); + try { this.ws.closed .then((closeInfo) => { - if (this.isEstablishingConnection) { + if (this.isEstablishingConnection && !upgradeFailed) { reject( ConnectionError.internal( `Websocket got closed during a (re)connection attempt: ${closeInfo.reason}`, ), ); } - if (closeInfo.closeCode !== 1000) { - this.log.warn(`websocket closed`, { - ...this.logContext, - reason: closeInfo.reason, - code: closeInfo.closeCode, - wasClean: closeInfo.closeCode === 1000, - state: this.state, - }); - if (this.state === SignalConnectionState.CONNECTED) { - this.handleOnClose(closeInfo.reason ?? 'Unexpected WS error'); - } - } + this.log.debug('websocket closed', { + reason: closeInfo.reason, + code: closeInfo.closeCode, + attemptId, + state: this.lifecycleState, + }); + this.handleOnClose( + closeInfo.reason || + (closeInfo.closeCode === 1000 ? 'server closed the signal connection' : 'Unexpected WS error'), + attemptId, + ); return; }) .catch((reason) => { - if (this.isEstablishingConnection) { + if (this.isEstablishingConnection && !upgradeFailed) { reject(ConnectionError.internal(`Websocket error during a (re)connection attempt: ${reason}`)); } }); const connection = await this.ws.opened.catch(async (reason: unknown) => { - if (this.state !== SignalConnectionState.CONNECTED) { - this.state = SignalConnectionState.DISCONNECTED; - CriticalTimers.clearTimeout(wsTimeout); + if (this.lifecycleState !== 'connected') { + clearTimeout(wsTimeout); const error = await this.handleConnectionError(reason, validateUrl); reject(error); return; @@ -362,13 +474,34 @@ export class SignalClient { reject(reason); return; }); - CriticalTimers.clearTimeout(wsTimeout); + clearTimeout(wsTimeout); if (!connection) { return; } const signalReader = connection.readable.getReader(); this.streamWriter = connection.writable.getWriter(); - const firstMessage = await signalReader.read(); + + let firstMessage: ReadableStreamReadResult; + let firstMessageTimeout: ReturnType | undefined; + try { + firstMessage = await Promise.race([ + signalReader.read(), + new Promise((_, rejectRead) => { + firstMessageTimeout = setTimeout(() => { + rejectRead( + ConnectionError.timeout('signal connection timed out while waiting for the first message'), + ); + }, JOIN_RESPONSE_TIMEOUT); + }), + ]); + } catch (e) { + signalReader.releaseLock(); + reject(e); + this.close(); + return; + } finally { + clearTimeout(firstMessageTimeout); + } signalReader.releaseLock(); if (!firstMessage.value) { throw ConnectionError.internal('no message received as first message'); @@ -389,15 +522,18 @@ export class SignalClient { if (this.pingTimeoutDuration && this.pingTimeoutDuration > 0) { this.log.debug('ping config', { - ...this.logContext, timeout: this.pingTimeoutDuration, interval: this.pingIntervalDuration, }); } + + if (this.onJoined) { + this.onJoined(firstSignalResponse.message.value); + } } const firstMessageToProcess = validation.shouldProcessFirstMessage ? firstSignalResponse : undefined; - handleSignalConnected(connection, firstMessageToProcess); + this.handleSignalConnected(connection, wsTimeout, attemptId, firstMessageToProcess); resolve(validation.response); } catch (e) { reject(e); @@ -418,16 +554,23 @@ export class SignalClient { if (firstMessage) { this.handleSignalResponse(firstMessage); } + const attemptId = this.attemptId; while (true) { if (this.signalLatency) { await sleep(this.signalLatency); } - const {done, value} = await signalReader.read(); - if (done) { + try { + const {done, value} = await signalReader.read(); + if (done) { + break; + } + const resp = parseSignalResponse(value); + this.handleSignalResponse(resp); + } catch (e) { + this.log.error(`error reading from signal stream`, {error: e}); + await this.handleOnClose('error in reading loop', attemptId); break; } - const resp = parseSignalResponse(value); - this.handleSignalResponse(resp); } } @@ -447,16 +590,21 @@ export class SignalClient { }; async close(updateState: boolean = true, reason = 'Close method called on signal client') { - if ([SignalConnectionState.DISCONNECTING || SignalConnectionState.DISCONNECTED].includes(this.state)) { - this.log.debug(`ignoring signal close as it's already in disconnecting state`); - return; - } + const drivesLifecycle = updateState && this.sendLifecycleInput({type: 'close', reason}); const unlock = await this.closingLock.lock(); try { - this.clearPingInterval(); - if (updateState) { - this.state = SignalConnectionState.DISCONNECTING; + await this.teardownTransport(reason); + } finally { + if (drivesLifecycle) { + this.sendLifecycleInput({type: 'closeComplete'}); } + unlock(); + } + } + + private async teardownTransport(reason: string) { + try { + this.clearPingInterval(); if (this.ws) { this.ws.close({closeCode: 1000, reason}); @@ -466,17 +614,12 @@ export class SignalClient { await Promise.race([closePromise, sleep(MAX_WS_CLOSE_TIME)]); } } catch (e) { - this.log.debug('websocket error while closing', {...this.logContext, error: e}); - } finally { - if (updateState) { - this.state = SignalConnectionState.DISCONNECTED; - } - unlock(); + this.log.debug('websocket error while closing', {error: e}); } } sendOffer(offer: RTCSessionDescriptionInit, offerId: number) { - this.log.debug('sending offer', {...this.logContext, offerSdp: offer.sdp}); + this.log.debug('sending offer', {offerSdp: offer.sdp}); this.sendRequest({ case: 'offer', value: toProtoSessionDescription(offer, offerId), @@ -484,7 +627,7 @@ export class SignalClient { } sendAnswer(answer: RTCSessionDescriptionInit, offerId: number) { - this.log.debug('sending answer', {...this.logContext, answerSdp: answer.sdp}); + this.log.debug('sending answer', {answerSdp: answer.sdp}); return this.sendRequest({ case: 'answer', value: toProtoSessionDescription(answer, offerId), @@ -492,7 +635,7 @@ export class SignalClient { } sendIceCandidate(candidate: RTCIceCandidateInit, target: SignalTarget) { - this.log.debug('sending ice candidate', {...this.logContext, candidate}); + this.log.debug('sending ice candidate', {candidate}); return this.sendRequest({ case: 'trickle', value: new TrickleRequest({ @@ -614,9 +757,42 @@ export class SignalClient { }); } - async sendRequest(message: SignalMessage, fromQueue: boolean = false) { + sendPublishDataTrackRequest(handle: DataTrackHandle, name: string, usesE2ee: boolean) { + return this.sendRequest({ + case: 'publishDataTrackRequest', + value: new PublishDataTrackRequest({ + pubHandle: handle, + name: name, + encryption: usesE2ee ? Encryption_Type.GCM : Encryption_Type.NONE, + }), + }); + } + + sendUnPublishDataTrackRequest(handle: DataTrackHandle) { + return this.sendRequest({ + case: 'unpublishDataTrackRequest', + value: new UnpublishDataTrackRequest({pubHandle: handle}), + }); + } + + sendUpdateDataSubscription(sid: DataTrackSid, subscribe: boolean) { + return this.sendRequest({ + case: 'updateDataSubscription', + value: new UpdateDataSubscription({ + updates: [ + new UpdateDataSubscription_Update({ + trackSid: sid, + subscribe, + }), + ], + }), + }); + } + + private async sendRequest(message: SignalMessage, fromQueue: boolean = false) { const canQueue = !fromQueue && !canPassThroughQueue(message); - if (canQueue && this.state === SignalConnectionState.RECONNECTING) { + const isHoldingRequests = this.lifecycleState === 'reconnecting' || this.queuedRequests.length > 0; + if (canQueue && isHoldingRequests) { this.queuedRequests.push(async () => { await this.sendRequest(message, true); }); @@ -628,12 +804,13 @@ export class SignalClient { if (this.signalLatency) { await sleep(this.signalLatency); } - if (this.isDisconnected) { + const isLeaveOnShutdown = message.case === 'leave' && !!this.streamWriter; + if (this.isDisconnected && !isLeaveOnShutdown) { this.log.debug(`skipping signal request (type: ${message.case}) - SignalClient disconnected`); return; } if (!this.streamWriter) { - this.log.error(`cannot send signal request before connected, type: ${message?.case}`, this.logContext); + this.log.error(`cannot send signal request before connected, type: ${message?.case}`); return; } const req = new SignalRequest({message}); @@ -642,17 +819,17 @@ export class SignalClient { if (this.useJSON) { await this.streamWriter.write(req.toJsonString()); } else { - await this.streamWriter.write(req.toBinary().buffer as ArrayBuffer); + await this.streamWriter.write((req.toBinary() as NonSharedUint8Array).buffer); } } catch (e) { - this.log.error('error sending signal message', {...this.logContext, error: e}); + this.log.error('error sending signal message', {error: e}); } } private handleSignalResponse(res: SignalResponse) { const msg = res.message; if (msg === undefined) { - this.log.debug('received unsupported message', this.logContext); + this.log.debug('received unsupported message'); return; } @@ -748,8 +925,20 @@ export class SignalClient { if (this.onMediaSectionsRequirement) { this.onMediaSectionsRequirement(msg.value); } + } else if (msg.case === 'publishDataTrackResponse') { + if (this.onPublishDataTrackResponse) { + this.onPublishDataTrackResponse(msg.value); + } + } else if (msg.case === 'unpublishDataTrackResponse') { + if (this.onUnPublishDataTrackResponse) { + this.onUnPublishDataTrackResponse(msg.value); + } + } else if (msg.case === 'dataTrackSubscriberHandles') { + if (this.onDataTrackSubscriberHandles) { + this.onDataTrackSubscriberHandles(msg.value); + } } else { - this.log.debug('unsupported message', {...this.logContext, msgCase: msg.case}); + this.log.debug('unsupported message', {msgCase: msg.case}); } if (!pingHandled) { @@ -766,24 +955,31 @@ export class SignalClient { } } - async handleOnClose(reason: string) { - if (this.state === SignalConnectionState.DISCONNECTED) return; + async handleOnClose(reason: string, attemptId: number = this.attemptId) { const onCloseCallback = this.onClose; - await this.close(undefined, reason); - this.log.debug(`websocket connection closed: ${reason}`, {...this.logContext, reason}); + if (!this.sendLifecycleInput({type: 'transportFailed', attemptId, reason})) { + this.log.debug(`ignoring transport close in state ${this.lifecycleState}`, { + reason, + attemptId, + currentAttemptId: this.attemptId, + }); + return; + } + await this.teardownTransport(reason); + this.log.info(`websocket connection closed: ${reason}`, {reason}); if (onCloseCallback) { onCloseCallback(reason); } } private handleWSError(error: unknown) { - this.log.error('websocket error', {...this.logContext, error}); + this.log.error('websocket error', {error}); } private resetPingTimeout() { this.clearPingTimeout(); if (!this.pingTimeoutDuration) { - this.log.warn('ping timeout duration not set', this.logContext); + this.log.warn('ping timeout duration not set'); return; } this.pingTimeout = CriticalTimers.setTimeout(() => { @@ -791,7 +987,6 @@ export class SignalClient { `ping timeout triggered. last pong received at: ${new Date( Date.now() - this.pingTimeoutDuration! * 1000, ).toUTCString()}`, - this.logContext, ); this.handleOnClose('ping timeout'); }, this.pingTimeoutDuration * 1000); @@ -807,17 +1002,17 @@ export class SignalClient { this.clearPingInterval(); this.resetPingTimeout(); if (!this.pingIntervalDuration) { - this.log.warn('ping interval duration not set', this.logContext); + this.log.warn('ping interval duration not set'); return; } - this.log.debug('start ping interval', this.logContext); + this.log.debug('start ping interval'); this.pingInterval = CriticalTimers.setInterval(() => { this.sendPing(); }, this.pingIntervalDuration * 1000); } private clearPingInterval() { - this.log.debug('clearing ping interval', this.logContext); + this.log.debug('clearing ping interval'); this.clearPingTimeout(); if (this.pingInterval) { CriticalTimers.clearInterval(this.pingInterval); @@ -826,11 +1021,25 @@ export class SignalClient { private handleSignalConnected( connection: WebSocketConnection, - timeoutHandle: TimerHandle, + timeoutHandle: ReturnType, + attemptId: number, firstMessage?: SignalResponse, ) { - this.state = SignalConnectionState.CONNECTED; - CriticalTimers.clearTimeout(timeoutHandle); + clearTimeout(timeoutHandle); + const established = this.sendLifecycleInput( + this.lifecycleState === 'reconnecting' + ? {type: 'reconnectComplete', attemptId} + : {type: 'connectComplete', attemptId}, + ); + if (!established) { + this.log.debug('discarding a connection whose attempt no longer owns the session', { + attemptId, + currentAttemptId: this.attemptId, + state: this.lifecycleState, + }); + return; + } + this.log.info('signal connected'); this.startPingInterval(); this.startReadingLoop(connection.readable.getReader(), firstMessage); } @@ -849,14 +1058,14 @@ export class SignalClient { isValid: true, response: firstSignalResponse.message.value, }; - } else if (this.state === SignalConnectionState.RECONNECTING && firstSignalResponse.message?.case !== 'leave') { + } else if (this.lifecycleState === 'reconnecting' && firstSignalResponse.message?.case !== 'leave') { if (firstSignalResponse.message?.case === 'reconnect') { return { isValid: true, response: firstSignalResponse.message.value, }; } else { - this.log.debug('declaring signal reconnected without reconnect response received', this.logContext); + this.log.debug('declaring signal reconnected without reconnect response received'); return { isValid: true, response: undefined, @@ -891,11 +1100,16 @@ export class SignalClient { const resp = await fetch(validateUrl); switch (resp.status) { - case 404: + case 404: { + const errorMsg = await resp.text(); + if (errorMsg.includes('requested room does not exist')) { + return ConnectionError.notAllowed(errorMsg, resp.status); + } return ConnectionError.serviceNotFound( 'v1 RTC path not found. Consider upgrading your LiveKit server version', 'v0-rtc', ); + } case 401: case 403: { const msg = await resp.text(); @@ -967,6 +1181,7 @@ function createConnectionParams(token: string, info: ClientInfo, opts: ConnectOp params.set('sdk', isReactNative() ? 'reactnative' : 'js'); params.set('version', info.version!); params.set('protocol', info.protocol!.toString()); + params.set('client_protocol', info.clientProtocol!.toString()); if (info.deviceModel) { params.set('device_model', info.deviceModel); } @@ -991,15 +1206,21 @@ function createConnectionParams(token: string, info: ClientInfo, opts: ConnectOp params.set('reconnect_reason', opts.reconnectReason.toString()); } - const conn = (navigator as Navigator & {connection?: {type?: string}}).connection; - if (conn?.type) { - params.set('network', conn.type); + // @ts-expect-error + if (navigator.connection?.type) { + // @ts-expect-error + params.set('network', navigator.connection.type); } return params; } -function createJoinRequestConnectionParams(token: string, info: ClientInfo, opts: ConnectOpts): URLSearchParams { +async function createJoinRequestConnectionParams( + token: string, + info: ClientInfo, + opts: ConnectOpts, + publisherOffer?: SessionDescription, +): Promise { const params = new URLSearchParams(); params.set('access_token', token); @@ -1011,14 +1232,49 @@ function createJoinRequestConnectionParams(token: string, info: ClientInfo, opts }), reconnect: !!opts.reconnect, participantSid: opts.sid ? opts.sid : undefined, + publisherOffer: publisherOffer, }); if (opts.reconnectReason) { joinRequest.reconnectReason = opts.reconnectReason; } + const joinRequestBytes = joinRequest.toBinary(); + let requestBytes: Uint8Array; + let compression: WrappedJoinRequest_Compression; + if (isCompressionStreamSupported()) { + const stream = new CompressionStream('gzip'); + const writer = stream.writable.getWriter(); + writer.write(new Uint8Array(joinRequestBytes)); + writer.close(); + const chunks: Array = []; + const reader = stream.readable.getReader(); + while (true) { + const {done, value} = await reader.read(); + if (done) break; + chunks.push(value); + } + const totalLength = chunks.reduce((acc, chunk) => acc + chunk.length, 0); + const result = new Uint8Array(totalLength); + let offset = 0; + for (const chunk of chunks) { + result.set(chunk, offset); + offset += chunk.length; + } + requestBytes = result; + compression = WrappedJoinRequest_Compression.GZIP; + } else { + requestBytes = joinRequestBytes; + compression = WrappedJoinRequest_Compression.NONE; + } const wrappedJoinRequest = new WrappedJoinRequest({ - joinRequest: joinRequest.toBinary(), + joinRequest: requestBytes, + compression, }); - params.set('join_request', btoa(new TextDecoder('utf-8').decode(wrappedJoinRequest.toBinary()))); + const wrappedBytes = wrappedJoinRequest.toBinary(); + const bytesToBase64 = (bytes: Uint8Array) => { + const binString = Array.from(bytes, (byte) => String.fromCodePoint(byte)).join(''); + return btoa(binString); + }; + params.set('join_request', bytesToBase64(wrappedBytes).replace(/\+/g, '-').replace(/\//g, '_')); return params; } diff --git a/fluxer_app/pkgs/livekit-client/src/api/SignalClientStateMachine.ts b/fluxer_app/pkgs/livekit-client/src/api/SignalClientStateMachine.ts new file mode 100644 index 000000000..e53aead75 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/api/SignalClientStateMachine.ts @@ -0,0 +1,128 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import {createFsm, type HandlerArgs, type HandlerFn} from 'machina'; + +export type SignalLifecycleState = + | 'new' + | 'connecting' + | 'connected' + | 'offline' + | 'reconnecting' + | 'disconnecting' + | 'closed'; + +export interface SignalMachineContext { + attemptId: number; + lastError?: unknown; + closeReason?: string; +} + +export type SignalMachineInput = + | {type: 'connect'} + | {type: 'reconnect'} + | {type: 'connectComplete'; attemptId: number} + | {type: 'connectFailed'; error?: unknown} + | {type: 'reconnectComplete'; attemptId: number} + | {type: 'reconnectFailed'; error?: unknown; recoverable: boolean} + | {type: 'transportFailed'; attemptId: number; reason: string} + | {type: 'close'; reason: string} + | {type: 'closeComplete'}; + +type Args = HandlerArgs; + +type Handler = HandlerFn; + +function on( + handler: (args: Args, event: Extract) => SignalLifecycleState | undefined, +): Handler { + return handler as Handler; +} + +function isCurrentAttempt(ctx: SignalMachineContext, event: {attemptId: number}) { + return event.attemptId === ctx.attemptId; +} + +const attemptEstablished = on<'connectComplete' | 'reconnectComplete'>(({ctx}, event) => { + if (!isCurrentAttempt(ctx, event)) { + return; + } + return 'connected'; +}); + +const startConnect = on<'connect'>(({ctx}) => { + ctx.attemptId += 1; + ctx.lastError = undefined; + return 'connecting'; +}); + +const startReconnect = on<'reconnect'>(({ctx}) => { + ctx.attemptId += 1; + ctx.lastError = undefined; + return 'reconnecting'; +}); + +const requestClose = on<'close'>(({ctx}, event) => { + ctx.closeReason = event.reason; + return 'disconnecting'; +}); + +const signalStates = { + new: { + connect: startConnect, + close: requestClose, + }, + connecting: { + connectComplete: attemptEstablished, + connectFailed: on<'connectFailed'>(({ctx}, event) => { + ctx.lastError = event.error; + return 'closed'; + }), + close: requestClose, + }, + connected: { + reconnect: startReconnect, + transportFailed: on<'transportFailed'>(({ctx}, event) => { + if (!isCurrentAttempt(ctx, event)) { + return; + } + ctx.lastError = event.reason; + return 'offline'; + }), + close: requestClose, + }, + offline: { + connect: startConnect, + reconnect: startReconnect, + close: requestClose, + }, + reconnecting: { + reconnectComplete: attemptEstablished, + reconnectFailed: on<'reconnectFailed'>(({ctx}, event) => { + ctx.lastError = event.error; + return event.recoverable ? 'offline' : 'closed'; + }), + close: requestClose, + }, + disconnecting: { + closeComplete: 'closed', + }, + closed: { + connect: startConnect, + reconnect: startReconnect, + }, +} as const; + +export function createSignalMachine(initialState: SignalLifecycleState = 'new') { + const context: SignalMachineContext = {attemptId: 0}; + return createFsm({ + id: 'signal', + initialState: initialState, + context, + states: signalStates, + }); +} + +export type SignalMachine = ReturnType; + +export const signalLifecycleStates = Object.keys(signalStates) as Array; diff --git a/fluxer_app/pkgs/livekit-client/src/api/WebSocketStream.ts b/fluxer_app/pkgs/livekit-client/src/api/WebSocketStream.ts index 8815e45f3..49f8016b0 100644 --- a/fluxer_app/pkgs/livekit-client/src/api/WebSocketStream.ts +++ b/fluxer_app/pkgs/livekit-client/src/api/WebSocketStream.ts @@ -4,6 +4,7 @@ import {ConnectionError} from '../room/errors.ts'; import {sleep} from '../room/utils.ts'; import TypedPromise from '../utils/TypedPromise.ts'; +import {getErrorDescription} from './utils.ts'; export interface WebSocketConnection { readable: ReadableStream; @@ -61,7 +62,14 @@ export class WebSocketStream({ start(controller) { ws.onmessage = ({data}) => controller.enqueue(data); - ws.onerror = (e) => controller.error(e); + ws.onerror = (e) => controller.error(ConnectionError.websocket(getErrorDescription(e, 'websocket'))); + ws.onclose = (ev) => { + if (ev.wasClean || ev.code === 1000) { + controller.close(); + } else { + controller.error(ConnectionError.websocket(`WS closed unexpectedly with code ${ev.code}`)); + } + }; }, cancel: closeWithInfo, }), @@ -103,10 +111,10 @@ export class WebSocketStream { + ws.addEventListener('close', ({code, reason}) => { resolve({closeCode: code, reason}); ws.removeEventListener('error', rejectHandler); - }; + }); ws.addEventListener('error', rejectHandler); }); diff --git a/fluxer_app/pkgs/livekit-client/src/api/utils.ts b/fluxer_app/pkgs/livekit-client/src/api/utils.ts index 3b8a7040d..81444b779 100644 --- a/fluxer_app/pkgs/livekit-client/src/api/utils.ts +++ b/fluxer_app/pkgs/livekit-client/src/api/utils.ts @@ -45,6 +45,9 @@ export function parseSignalResponse(value: ArrayBuffer | string) { } export function getAbortReasonAsString(signal: AbortSignal | Error | unknown, defaultMessage = 'Unknown reason') { + if (signal instanceof Error) { + return signal.message; + } if (!(signal instanceof AbortSignal)) { return defaultMessage; } @@ -63,3 +66,13 @@ export function getAbortReasonAsString(signal: AbortSignal | Error | unknown, de return defaultMessage; } } + +export function getErrorDescription(error: unknown, errorCategory: string): string { + if (error instanceof Error) { + if (error.name && error.message) { + return `${error.name}: ${error.message}`; + } + return error.name; + } + return `Encountered unknown ${errorCategory} error: ${String(error)}`; +} diff --git a/fluxer_app/pkgs/livekit-client/src/e2ee/E2eeManager.ts b/fluxer_app/pkgs/livekit-client/src/e2ee/E2eeManager.ts index 27022c83c..6bcaa2584 100644 --- a/fluxer_app/pkgs/livekit-client/src/e2ee/E2eeManager.ts +++ b/fluxer_app/pkgs/livekit-client/src/e2ee/E2eeManager.ts @@ -4,18 +4,24 @@ import {Encryption_Type, type TrackInfo} from '@livekit/protocol'; import {EventEmitter} from 'events'; import type TypedEventEmitter from 'typed-emitter'; -import log, {type LogLevel, workerLogger} from '../logger.ts'; +import type {FrameMetadata} from '../frameMetadata/types.ts'; +import {hasFrameMetadataPublishOptions} from '../frameMetadata/utils.ts'; +import {getLogger, LoggerNames, type LogLevel, onWorkerLogLevelChanged, workerLogger} from '../logger.ts'; import {DeviceUnsupportedError} from '../room/errors.ts'; import {EngineEvent, ParticipantEvent, RoomEvent} from '../room/events.ts'; import type Room from '../room/Room.ts'; import {ConnectionState} from '../room/Room.ts'; import type RTCEngine from '../room/RTCEngine.ts'; -import type {VideoCodec} from '../room/track/options.ts'; +import type {TrackPublishOptions, VideoCodec} from '../room/track/options.ts'; import type RemoteTrack from '../room/track/RemoteTrack.ts'; +import RemoteVideoTrack from '../room/track/RemoteVideoTrack.ts'; import type {Track} from '../room/track/Track.ts'; +import type {TrackPublication} from '../room/track/TrackPublication.ts'; import {mimeTypeToVideoCodecString} from '../room/track/utils.ts'; -import {Future, isChromiumBased, isLocalTrack, isSafariBased, isVideoTrack} from '../room/utils.ts'; -import {E2EE_FLAG} from './constants.ts'; +import {Future, isLocalTrack, isSafariBased, isScriptTransformSupportedForWorker, isVideoTrack} from '../room/utils.ts'; +import type {NonSharedUint8Array} from '../type-polyfills/non-shared-typed-arrays.ts'; +import {E2EE_FLAG, E2EE_TRACK_ID} from './constants.ts'; +import {CryptorError, CryptorErrorReason} from './errors.ts'; import {type E2EEManagerCallbacks, EncryptionEvent, KeyProviderEvent} from './events.ts'; import type {BaseKeyProvider} from './KeyProvider.ts'; import type { @@ -36,9 +42,8 @@ import type { SetKeyMessage, SifTrailerMessage, UpdateCodecMessage, - UpdateTrackContextMessage, } from './types.ts'; -import {isE2EESupported, isScriptTransformSupported} from './utils.ts'; +import {isE2EESupported} from './utils.ts'; export interface BaseE2EEManager { setup(room: Room): void; @@ -46,22 +51,18 @@ export interface BaseE2EEManager { isEnabled: boolean; isDataChannelEncryptionEnabled: boolean; setParticipantCryptorEnabled(enabled: boolean, participantIdentity: string): void; - setSifTrailer(trailer: Uint8Array): void; - encryptData(data: Uint8Array): Promise; + setSifTrailer(trailer: NonSharedUint8Array): void; + encryptData(data: NonSharedUint8Array): Promise; handleEncryptedData( - payload: Uint8Array, - iv: Uint8Array, + payload: NonSharedUint8Array, + iv: NonSharedUint8Array, participantIdentity: string, keyIndex: number, ): Promise; on(event: E, listener: E2EEManagerCallbacks[E]): this; + dispose?(): void; } -type E2EETransformState = { - participantIdentity: string; - trackId: string; -}; - export class E2EEManager extends (EventEmitter as new () => TypedEventEmitter) implements BaseE2EEManager @@ -80,6 +81,24 @@ export class E2EEManager private dataChannelEncryptionEnabled: boolean; + private unsubscribeLogLevel?: () => void; + + private log = getLogger(LoggerNames.E2EE, () => this.logContext); + + get logContext() { + return { + room: this.room?.name, + participant: this.room?.localParticipant.identity, + }; + } + + private static disposeRegistry = + typeof FinalizationRegistry !== 'undefined' && + typeof WeakRef !== 'undefined' && + new FinalizationRegistry((cleanup: () => void) => { + cleanup(); + }); + constructor(options: E2EEManagerOptions, dcEncryptionEnabled: boolean) { super(); this.keyProvider = options.keyProvider; @@ -100,7 +119,7 @@ export class E2EEManager if (!isE2EESupported()) { throw new DeviceUnsupportedError('tried to setup end-to-end encryption on an unsupported browser'); } - log.info('setting up e2ee'); + this.log.info('setting up e2ee'); if (room !== this.room) { this.room = room; this.setupEventListeners(room, this.keyProvider); @@ -112,22 +131,69 @@ export class E2EEManager }, }; if (this.worker) { - log.info(`initializing worker`, {worker: this.worker}); + this.log.info(`initializing worker`, {worker: this.worker}); this.worker.onmessage = this.onWorkerMessage; this.worker.onerror = this.onWorkerError; this.worker.postMessage(msg); + this.subscribeToLogLevelChanges(); } } } + private subscribeToLogLevelChanges() { + this.unsubscribeLogLevel?.(); + + let unsub: (() => void) | undefined; + if (E2EEManager.disposeRegistry) { + const workerRef = new WeakRef(this.worker); + unsub = onWorkerLogLevelChanged((level) => { + const worker = workerRef.deref(); + if (!worker) { + unsub?.(); + return; + } + worker.postMessage({kind: 'setLogLevel', data: {level}}); + }); + E2EEManager.disposeRegistry.register(this, unsub, this); + } else { + const worker = this.worker; + unsub = onWorkerLogLevelChanged((level) => { + worker.postMessage({kind: 'setLogLevel', data: {level}}); + }); + } + this.unsubscribeLogLevel = unsub; + } + + dispose() { + this.unsubscribeLogLevel?.(); + this.unsubscribeLogLevel = undefined; + if (E2EEManager.disposeRegistry) { + E2EEManager.disposeRegistry.unregister(this); + } + + const disposalError = new CryptorError('E2EEManager disposed', CryptorErrorReason.InternalError); + for (const future of [...this.encryptDataRequests.values()]) { + future.reject?.(disposalError); + } + for (const future of [...this.decryptDataRequests.values()]) { + future.reject?.(disposalError); + } + + if (this.worker) { + this.worker.onmessage = null; + this.worker.onerror = null; + } + this.removeAllListeners(); + } + setParticipantCryptorEnabled(enabled: boolean, participantIdentity: string) { - log.debug(`set e2ee to ${enabled} for participant ${participantIdentity}`); + this.log.debug(`set e2ee to ${enabled} for participant ${participantIdentity}`); this.postEnable(enabled, participantIdentity); } - setSifTrailer(trailer: Uint8Array) { + setSifTrailer(trailer: NonSharedUint8Array) { if (!trailer || trailer.length === 0) { - log.warn("ignoring server sent trailer as it's empty"); + this.log.warn("ignoring server sent trailer as it's empty"); } else { this.postSifTrailer(trailer); } @@ -137,8 +203,6 @@ export class E2EEManager const {kind, data} = ev.data; switch (kind) { case 'error': - log.error(data.error.message); - if (data.uuid) { const decryptFuture = this.decryptDataRequests.get(data.uuid); if (decryptFuture?.reject) { @@ -152,13 +216,13 @@ export class E2EEManager break; } } - + this.log.error(data.error.message); this.emit(EncryptionEvent.EncryptionError, data.error, data.participantIdentity); break; case 'initAck': if (data.enabled) { this.keyProvider.getKeys().forEach((keyInfo) => { - this.postKey(keyInfo); + this.postKey(keyInfo, false); }); } break; @@ -166,7 +230,7 @@ export class E2EEManager case 'enable': if (data.enabled) { this.keyProvider.getKeys().forEach((keyInfo) => { - this.postKey(keyInfo); + this.postKey(keyInfo, false); }); } if ( @@ -206,47 +270,57 @@ export class E2EEManager } break; } + case 'packetTrailerMetadata': + this.handleFrameMetadata(data.trackId, data.rtpTimestamp, data.ssrc, data.metadata); + break; + case 'log': + workerLogger[data.level](data.msg, data.context); + break; default: break; } }; private onWorkerError = (ev: ErrorEvent) => { - log.error('e2ee worker encountered an error:', {error: ev.error}); + this.log.error('e2ee worker encountered an error:', {error: ev.error}); this.emit(EncryptionEvent.EncryptionError, ev.error, undefined); }; + private handleFrameMetadata(trackId: string, rtpTimestamp: number, ssrc: number, metadata: FrameMetadata) { + if (!this.room) { + return; + } + for (const participant of [this.room.localParticipant, ...this.room.remoteParticipants.values()]) { + for (const pub of participant.trackPublications.values()) { + if ( + pub.track && + pub.track.mediaStreamID === trackId && + pub.track instanceof RemoteVideoTrack && + pub.track.frameMetadataExtractor + ) { + pub.track.frameMetadataExtractor.storeMetadata(rtpTimestamp, ssrc, metadata); + return; + } + } + } + } + public setupEngine(engine: RTCEngine) { engine.on(EngineEvent.RTPVideoMapUpdate, (rtpMap) => { this.postRTPMap(rtpMap); }); } - private getE2EETransformState(target: RTCRtpReceiver | RTCRtpSender) { - const state = (target as RTCRtpReceiver & RTCRtpSender & Record)[E2EE_FLAG]; - if (state && typeof state === 'object') { - return state as E2EETransformState; - } - return undefined; - } - - private setE2EETransformState(target: RTCRtpReceiver | RTCRtpSender, state: E2EETransformState) { - (target as RTCRtpReceiver & RTCRtpSender & Record)[E2EE_FLAG] = state; - } - private setupEventListeners(room: Room, keyProvider: BaseKeyProvider) { room.on(RoomEvent.TrackPublished, (pub, participant) => - this.setParticipantCryptorEnabled(pub.trackInfo!.encryption !== Encryption_Type.NONE, participant.identity), + this.setParticipantCryptorEnabledForPublication(pub, participant.identity), ); room .on(RoomEvent.ConnectionStateChanged, (state) => { if (state === ConnectionState.Connected) { room.remoteParticipants.forEach((participant) => { participant.trackPublications.forEach((pub) => { - this.setParticipantCryptorEnabled( - pub.trackInfo!.encryption !== Encryption_Type.NONE, - participant.identity, - ); + this.setParticipantCryptorEnabledForPublication(pub, participant.identity); }); }); } @@ -268,8 +342,9 @@ export class E2EEManager if (!this.room) { throw new TypeError(`expected room to be present on signal connect`); } + const latestKeyIndex = keyProvider.getLatestManuallySetKeyIndex(); keyProvider.getKeys().forEach((keyInfo) => { - this.postKey(keyInfo); + this.postKey(keyInfo, latestKeyIndex === (keyInfo.keyIndex ?? 0)); }); this.setParticipantCryptorEnabled( this.room.localParticipant.isE2EEEnabled, @@ -291,6 +366,7 @@ export class E2EEManager trackId: publication.track!.mediaStreamID, codec: mimeTypeToVideoCodecString(publication.trackInfo!.codecs[0].mimeType), participantIdentity: this.room!.localParticipant.identity, + hasPacketTrailer: false, }, }; @@ -298,13 +374,15 @@ export class E2EEManager }); keyProvider - .on(KeyProviderEvent.SetKey, (keyInfo) => this.postKey(keyInfo)) + .on(KeyProviderEvent.SetKey, (keyInfo, updateCurrentKeyIndex) => + this.postKey(keyInfo, updateCurrentKeyIndex ?? true), + ) .on(KeyProviderEvent.RatchetRequest, (participantId, keyIndex) => this.postRatchetRequest(participantId, keyIndex), ); } - async encryptData(data: Uint8Array): Promise { + async encryptData(data: NonSharedUint8Array): Promise { if (!this.worker) { throw Error('could not encrypt data, worker is missing'); } @@ -326,7 +404,12 @@ export class E2EEManager return future!.promise!; } - handleEncryptedData(payload: Uint8Array, iv: Uint8Array, participantIdentity: string, keyIndex: number) { + handleEncryptedData( + payload: NonSharedUint8Array, + iv: NonSharedUint8Array, + participantIdentity: string, + keyIndex: number, + ) { if (!this.worker) { throw Error('could not handle encrypted data, worker is missing'); } @@ -364,7 +447,7 @@ export class E2EEManager this.worker.postMessage(msg); } - private postKey({key, participantIdentity, keyIndex}: KeyInfo) { + private postKey({key, participantIdentity, keyIndex}: KeyInfo, updateCurrentKeyIndex: boolean) { if (!this.worker) { throw Error('could not set key, worker is missing'); } @@ -375,6 +458,7 @@ export class E2EEManager isPublisher: participantIdentity === this.room?.localParticipant.identity, key, keyIndex, + updateCurrentKeyIndex, }, }; this.worker.postMessage(msg); @@ -412,7 +496,7 @@ export class E2EEManager this.worker.postMessage(msg); } - private postSifTrailer(trailer: Uint8Array) { + private postSifTrailer(trailer: NonSharedUint8Array) { if (!this.worker) { throw Error('could not post SIF trailer, worker is missing'); } @@ -425,6 +509,16 @@ export class E2EEManager this.worker.postMessage(msg); } + private setParticipantCryptorEnabledForPublication(pub: TrackPublication, participantIdentity: string) { + if (!pub.trackInfo) { + this.log.warn('skipping e2ee enabled update for publication without trackInfo', { + trackSid: pub.trackSid, + }); + return; + } + this.setParticipantCryptorEnabled(pub.trackInfo.encryption !== Encryption_Type.NONE, participantIdentity); + } + private setupE2EEReceiver(track: RemoteTrack, remoteId: string, trackInfo?: TrackInfo) { if (!track.receiver) { return; @@ -432,64 +526,76 @@ export class E2EEManager if (!trackInfo?.mimeType || trackInfo.mimeType === '') { throw new TypeError('MimeType missing from trackInfo, cannot set up E2EE cryptor'); } + const hasPacketTrailer = + track.kind === 'video' && !!trackInfo.packetTrailerFeatures && trackInfo.packetTrailerFeatures.length > 0; this.handleReceiver( track.receiver, track.mediaStreamID, remoteId, track.kind === 'video' ? mimeTypeToVideoCodecString(trackInfo.mimeType) : undefined, + hasPacketTrailer, ); } private setupE2EESender(track: Track, sender: RTCRtpSender, codec?: VideoCodec, trackId?: string) { if (!isLocalTrack(track) || !sender) { - if (!sender) log.warn('early return because sender is not ready'); + if (!sender) this.log.warn('early return because sender is not ready'); return; } const resolvedCodec = track.kind === 'video' ? (codec ?? (this.room?.options?.publishDefaults?.videoCodec as VideoCodec)) : undefined; - this.handleSender(sender, trackId ?? track.mediaStreamID, resolvedCodec); + this.handleSender( + sender, + trackId ?? track.mediaStreamID, + resolvedCodec, + isVideoTrack(track) ? (track.publishOptions?.frameMetadata ?? track.publishOptions?.packetTrailer) : undefined, + ); } private async handleReceiver( receiver: RTCRtpReceiver, trackId: string, participantIdentity: string, - codec?: VideoCodec, + codec: VideoCodec | undefined, + hasPacketTrailer: boolean, ) { if (!this.worker) { return; } - if (isScriptTransformSupported() && !isChromiumBased()) { + if (isScriptTransformSupportedForWorker()) { const options: ScriptTransformOptions = { kind: 'decode', participantIdentity, trackId, codec, + hasPacketTrailer, }; receiver.transform = new RTCRtpScriptTransform(this.worker, options); } else { - if (E2EE_FLAG in receiver) { - const previousState = this.getE2EETransformState(receiver); - const msg: UpdateTrackContextMessage = { - kind: 'updateTrackContext', + if (E2EE_FLAG in receiver && E2EE_TRACK_ID in receiver) { + const msg: UpdateCodecMessage = { + kind: 'updateCodec', data: { - previousParticipantIdentity: previousState?.participantIdentity, - previousTrackId: previousState?.trackId, trackId, - participantIdentity, + previousTrackId: receiver[E2EE_TRACK_ID] as string, codec, + participantIdentity, + hasPacketTrailer, }, }; this.worker.postMessage(msg); - this.setE2EETransformState(receiver, {trackId, participantIdentity}); + receiver[E2EE_TRACK_ID] = trackId; return; } - let writable: WritableStream | undefined = receiver.writableStream; - let readable: ReadableStream | undefined = receiver.readableStream; + // @ts-expect-error + let writable: WritableStream = receiver.writableStream; + // @ts-expect-error + let readable: ReadableStream = receiver.readableStream; if (!writable || !readable) { - const receiverStreams = receiver.createEncodedStreams!(); + // @ts-expect-error + const receiverStreams = receiver.createEncodedStreams(); receiver.writableStream = receiverStreams.writable; writable = receiverStreams.writable; receiver.readableStream = receiverStreams.readable; @@ -504,16 +610,24 @@ export class E2EEManager trackId: trackId, codec, participantIdentity: participantIdentity, - isReuse: E2EE_FLAG in receiver, + hasPacketTrailer, }, }; this.worker.postMessage(msg, [readable, writable]); } - this.setE2EETransformState(receiver, {trackId, participantIdentity}); + // @ts-expect-error + receiver[E2EE_FLAG] = true; + // @ts-expect-error + receiver[E2EE_TRACK_ID] = trackId; } - private handleSender(sender: RTCRtpSender, trackId: string, codec?: VideoCodec) { + private handleSender( + sender: RTCRtpSender, + trackId: string, + codec?: VideoCodec, + frameMetadata?: TrackPublishOptions['frameMetadata'], + ) { if (!this.worker) { return; } @@ -521,37 +635,40 @@ export class E2EEManager if (!this.room?.localParticipant.identity || this.room.localParticipant.identity === '') { throw TypeError('local identity needs to be known in order to set up encrypted sender'); } - const participantIdentity = this.room.localParticipant.identity; if (E2EE_FLAG in sender) { - const previousState = this.getE2EETransformState(sender); - const msg: UpdateTrackContextMessage = { - kind: 'updateTrackContext', - data: { - previousParticipantIdentity: previousState?.participantIdentity, - previousTrackId: previousState?.trackId, - trackId, - participantIdentity, - codec, - }, - }; - this.worker.postMessage(msg); - this.setE2EETransformState(sender, {trackId, participantIdentity}); + if (E2EE_TRACK_ID in sender) { + const msg: UpdateCodecMessage = { + kind: 'updateCodec', + data: { + trackId, + previousTrackId: sender[E2EE_TRACK_ID] as string, + codec, + participantIdentity: this.room.localParticipant.identity, + hasPacketTrailer: hasFrameMetadataPublishOptions(frameMetadata), + }, + }; + this.worker.postMessage(msg); + sender[E2EE_TRACK_ID] = trackId; + } return; } - if (isScriptTransformSupported() && !isChromiumBased()) { - log.info('initialize script transform'); - const options = { + if (isScriptTransformSupportedForWorker()) { + this.log.info('initialize script transform'); + const options: ScriptTransformOptions = { kind: 'encode', - participantIdentity, + participantIdentity: this.room.localParticipant.identity, trackId, codec, + hasPacketTrailer: hasFrameMetadataPublishOptions(frameMetadata), + packetTrailer: frameMetadata, }; sender.transform = new RTCRtpScriptTransform(this.worker, options); } else { - log.info('initialize encoded streams'); - const senderStreams = sender.createEncodedStreams!(); + this.log.info('initialize encoded streams'); + // @ts-expect-error + const senderStreams = sender.createEncodedStreams(); const msg: EncodeMessage = { kind: 'encode', data: { @@ -559,13 +676,17 @@ export class E2EEManager writableStream: senderStreams.writable, codec, trackId, - participantIdentity, - isReuse: false, + participantIdentity: this.room.localParticipant.identity, + hasPacketTrailer: hasFrameMetadataPublishOptions(frameMetadata), + packetTrailer: frameMetadata, }, }; this.worker.postMessage(msg, [senderStreams.readable, senderStreams.writable]); } - this.setE2EETransformState(sender, {trackId, participantIdentity}); + // @ts-expect-error + sender[E2EE_FLAG] = true; + // @ts-expect-error + sender[E2EE_TRACK_ID] = trackId; } } diff --git a/fluxer_app/pkgs/livekit-client/src/e2ee/KeyProvider.ts b/fluxer_app/pkgs/livekit-client/src/e2ee/KeyProvider.ts index 00736a952..1a7dc47b4 100644 --- a/fluxer_app/pkgs/livekit-client/src/e2ee/KeyProvider.ts +++ b/fluxer_app/pkgs/livekit-client/src/e2ee/KeyProvider.ts @@ -14,6 +14,8 @@ export class BaseKeyProvider extends (EventEmitter as new () => TypedEventEmitte private readonly options: KeyProviderOptions; + private latestManuallySetKeyIndex = 0; + constructor(options: Partial = {}) { super(); this.keyInfoMap = new Map(); @@ -27,7 +29,10 @@ export class BaseKeyProvider extends (EventEmitter as new () => TypedEventEmitte throw new Error('participant identity needs to be passed for encryption key if sharedKey option is false'); } this.keyInfoMap.set(`${participantIdentity ?? 'shared'}-${keyIndex ?? 0}`, keyInfo); - this.emit(KeyProviderEvent.SetKey, keyInfo); + if (keyIndex !== undefined) { + this.latestManuallySetKeyIndex = keyIndex; + } + this.emit(KeyProviderEvent.SetKey, keyInfo, keyIndex !== undefined); } protected onKeyRatcheted = (ratchetResult: RatchetResult, participantId?: string, keyIndex?: number) => { @@ -38,6 +43,10 @@ export class BaseKeyProvider extends (EventEmitter as new () => TypedEventEmitte return Array.from(this.keyInfoMap.values()); } + getLatestManuallySetKeyIndex() { + return this.latestManuallySetKeyIndex; + } + getOptions() { return this.options; } diff --git a/fluxer_app/pkgs/livekit-client/src/e2ee/constants.ts b/fluxer_app/pkgs/livekit-client/src/e2ee/constants.ts index 95a8b1f41..6cec08737 100644 --- a/fluxer_app/pkgs/livekit-client/src/e2ee/constants.ts +++ b/fluxer_app/pkgs/livekit-client/src/e2ee/constants.ts @@ -18,6 +18,8 @@ export const IV_LENGTH = 12; export const E2EE_FLAG = 'lk_e2ee'; +export const E2EE_TRACK_ID = 'lk_e2ee_track_id'; + export const SALT = 'LKFrameEncryptionKey'; export const KEY_PROVIDER_DEFAULTS: KeyProviderOptions = { @@ -26,6 +28,7 @@ export const KEY_PROVIDER_DEFAULTS: KeyProviderOptions = { ratchetWindowSize: 8, failureTolerance: DECRYPTION_FAILURE_TOLERANCE, keyringSize: 16, + keySize: 128, } as const; export const MAX_SIF_COUNT = 100; diff --git a/fluxer_app/pkgs/livekit-client/src/e2ee/events.ts b/fluxer_app/pkgs/livekit-client/src/e2ee/events.ts index 990db2371..3d86e8a2e 100644 --- a/fluxer_app/pkgs/livekit-client/src/e2ee/events.ts +++ b/fluxer_app/pkgs/livekit-client/src/e2ee/events.ts @@ -12,7 +12,7 @@ export enum KeyProviderEvent { } export type KeyProviderCallbacks = { - [KeyProviderEvent.SetKey]: (keyInfo: KeyInfo) => void; + [KeyProviderEvent.SetKey]: (keyInfo: KeyInfo, updateCurrentKeyIndex: boolean) => void; [KeyProviderEvent.RatchetRequest]: (participantIdentity?: string, keyIndex?: number) => void; [KeyProviderEvent.KeyRatcheted]: ( ratchetedResult: RatchetResult, diff --git a/fluxer_app/pkgs/livekit-client/src/e2ee/index.ts b/fluxer_app/pkgs/livekit-client/src/e2ee/index.ts index 85d5d7367..aa6529293 100644 --- a/fluxer_app/pkgs/livekit-client/src/e2ee/index.ts +++ b/fluxer_app/pkgs/livekit-client/src/e2ee/index.ts @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2024 LiveKit, Inc. // // SPDX-License-Identifier: Apache-2.0 + export * from './errors.ts'; export * from './events.ts'; export * from './KeyProvider.ts'; diff --git a/fluxer_app/pkgs/livekit-client/src/e2ee/types.ts b/fluxer_app/pkgs/livekit-client/src/e2ee/types.ts index bc205190a..d6f705841 100644 --- a/fluxer_app/pkgs/livekit-client/src/e2ee/types.ts +++ b/fluxer_app/pkgs/livekit-client/src/e2ee/types.ts @@ -1,8 +1,11 @@ // SPDX-FileCopyrightText: 2024 LiveKit, Inc. // // SPDX-License-Identifier: Apache-2.0 +import type {FrameMetadataPayload} from '../frameMetadata/frameMetadata.ts'; +import type {FrameMetadataPublishOptions} from '../frameMetadata/types.ts'; import type {LogLevel} from '../logger.ts'; import type {VideoCodec} from '../room/track/options.ts'; +import type {NonSharedUint8Array} from '../type-polyfills/non-shared-typed-arrays.ts'; import type {BaseE2EEManager} from './E2eeManager.ts'; import type {BaseKeyProvider} from './KeyProvider.ts'; @@ -26,6 +29,7 @@ export interface SetKeyMessage extends BaseMessage { isPublisher: boolean; key: CryptoKey; keyIndex?: number; + updateCurrentKeyIndex: boolean; }; } @@ -40,7 +44,7 @@ export interface RTPVideoMapMessage extends BaseMessage { export interface SifTrailerMessage extends BaseMessage { kind: 'setSifTrailer'; data: { - trailer: Uint8Array; + trailer: NonSharedUint8Array; }; } @@ -52,7 +56,8 @@ export interface EncodeMessage extends BaseMessage { writableStream: WritableStream; trackId: string; codec?: VideoCodec; - isReuse: boolean; + hasPacketTrailer: boolean; + packetTrailer?: FrameMetadataPublishOptions; }; } @@ -67,20 +72,11 @@ export interface RemoveTransformMessage extends BaseMessage { export interface UpdateCodecMessage extends BaseMessage { kind: 'updateCodec'; data: { - participantIdentity: string; - trackId: string; - codec: VideoCodec; - }; -} - -export interface UpdateTrackContextMessage extends BaseMessage { - kind: 'updateTrackContext'; - data: { - previousParticipantIdentity?: string; - previousTrackId?: string; participantIdentity: string; trackId: string; codec?: VideoCodec; + previousTrackId?: string; + hasPacketTrailer: boolean; }; } @@ -129,8 +125,8 @@ export interface DecryptDataRequestMessage extends BaseMessage { kind: 'decryptDataRequest'; data: { uuid: string; - payload: Uint8Array; - iv: Uint8Array; + payload: NonSharedUint8Array; + iv: NonSharedUint8Array; participantIdentity: string; keyIndex: number; }; @@ -140,7 +136,7 @@ export interface DecryptDataResponseMessage extends BaseMessage { kind: 'decryptDataResponse'; data: { uuid: string; - payload: Uint8Array; + payload: NonSharedUint8Array; }; } @@ -148,7 +144,7 @@ export interface EncryptDataRequestMessage extends BaseMessage { kind: 'encryptDataRequest'; data: { uuid: string; - payload: Uint8Array; + payload: NonSharedUint8Array; participantIdentity: string; }; } @@ -157,12 +153,33 @@ export interface EncryptDataResponseMessage extends BaseMessage { kind: 'encryptDataResponse'; data: { uuid: string; - payload: Uint8Array; - iv: Uint8Array; + payload: NonSharedUint8Array; + iv: NonSharedUint8Array; keyIndex: number; }; } +export interface PTMetadataFromE2EEMessage extends BaseMessage { + kind: 'packetTrailerMetadata'; + data: FrameMetadataPayload; +} + +export interface LogMessage extends BaseMessage { + kind: 'log'; + data: { + level: 'trace' | 'debug' | 'info' | 'warn' | 'error'; + msg: string; + context?: object; + }; +} + +export interface SetLogLevelMessage extends BaseMessage { + kind: 'setLogLevel'; + data: { + level: LogLevel; + }; +} + export type E2EEWorkerMessage = | InitMessage | SetKeyMessage @@ -172,7 +189,6 @@ export type E2EEWorkerMessage = | RemoveTransformMessage | RTPVideoMapMessage | UpdateCodecMessage - | UpdateTrackContextMessage | RatchetRequestMessage | RatchetMessage | SifTrailerMessage @@ -180,7 +196,10 @@ export type E2EEWorkerMessage = | DecryptDataRequestMessage | DecryptDataResponseMessage | EncryptDataRequestMessage - | EncryptDataResponseMessage; + | EncryptDataResponseMessage + | PTMetadataFromE2EEMessage + | LogMessage + | SetLogLevelMessage; export type KeySet = {material: CryptoKey; encryptionKey: CryptoKey}; @@ -195,6 +214,7 @@ export type KeyProviderOptions = { ratchetWindowSize: number; failureTolerance: number; keyringSize: number; + keySize: 128 | 256; }; export type KeyInfo = { @@ -224,4 +244,6 @@ export type ScriptTransformOptions = { participantIdentity: string; trackId: string; codec?: VideoCodec; + hasPacketTrailer: boolean; + packetTrailer?: FrameMetadataPublishOptions; }; diff --git a/fluxer_app/pkgs/livekit-client/src/e2ee/utils.ts b/fluxer_app/pkgs/livekit-client/src/e2ee/utils.ts index f3f348596..1dbdbfd0a 100644 --- a/fluxer_app/pkgs/livekit-client/src/e2ee/utils.ts +++ b/fluxer_app/pkgs/livekit-client/src/e2ee/utils.ts @@ -2,18 +2,21 @@ // // SPDX-License-Identifier: Apache-2.0 import {type DataPacket, EncryptedPacketPayload} from '@livekit/protocol'; +import type {NonSharedUint8Array} from '../type-polyfills/non-shared-typed-arrays.ts'; import {ENCRYPTION_ALGORITHM} from './constants.ts'; +import type {KeyProviderOptions} from './types.ts'; export function isE2EESupported() { return isInsertableStreamSupported() || isScriptTransformSupported(); } export function isScriptTransformSupported() { - return typeof window.RTCRtpScriptTransform !== 'undefined'; + return typeof window !== 'undefined' && typeof window.RTCRtpScriptTransform !== 'undefined'; } export function isInsertableStreamSupported() { return ( + typeof window !== 'undefined' && typeof window.RTCRtpSender !== 'undefined' && typeof window.RTCRtpSender.prototype.createEncodedStreams !== 'undefined' ); @@ -24,14 +27,13 @@ export function isVideoFrame(frame: RTCEncodedAudioFrame | RTCEncodedVideoFrame) } export async function importKey( - keyBytes: Uint8Array | ArrayBuffer, + keyBytes: NonSharedUint8Array | ArrayBuffer, algorithm: string | {name: string} = {name: ENCRYPTION_ALGORITHM}, usage: 'derive' | 'encrypt' = 'encrypt', ) { - const rawKey = keyBytes instanceof Uint8Array ? new Uint8Array(keyBytes).buffer : keyBytes; return crypto.subtle.importKey( 'raw', - rawKey, + keyBytes, algorithm, false, usage === 'derive' ? ['deriveBits', 'deriveKey'] : ['encrypt', 'decrypt'], @@ -84,15 +86,15 @@ function getAlgoOptions(algorithmName: string, salt: string) { } } -export async function deriveKeys(material: CryptoKey, salt: string) { - const algorithmOptions = getAlgoOptions(material.algorithm.name, salt); +export async function deriveKeys(material: CryptoKey, options: KeyProviderOptions) { + const algorithmOptions = getAlgoOptions(material.algorithm.name, options.ratchetSalt); const encryptionKey = await crypto.subtle.deriveKey( algorithmOptions, material, { name: ENCRYPTION_ALGORITHM, - length: 128, + length: options.keySize, }, false, ['encrypt', 'decrypt'], @@ -101,7 +103,7 @@ export async function deriveKeys(material: CryptoKey, salt: string) { return {material, encryptionKey}; } -export function createE2EEKey(): Uint8Array { +export function createE2EEKey(): NonSharedUint8Array { return window.crypto.getRandomValues(new Uint8Array(32)); } @@ -111,14 +113,13 @@ export async function ratchet(material: CryptoKey, salt: string): Promise { const iv = DataCryptor.makeIV(performance.now()); @@ -36,6 +39,7 @@ export class DataCryptor { if (!keySet) { throw new Error('No key set found'); } + const cipherText = await crypto.subtle.encrypt( { name: ENCRYPTION_ALGORITHM, @@ -44,6 +48,7 @@ export class DataCryptor { keySet.encryptionKey, new Uint8Array(data), ); + return { payload: new Uint8Array(cipherText), iv: new Uint8Array(iv), @@ -52,19 +57,20 @@ export class DataCryptor { } static async decrypt( - data: Uint8Array, - iv: Uint8Array, + data: NonSharedUint8Array, + iv: NonSharedUint8Array, keys: ParticipantKeyHandler, keyIndex: number = 0, initialMaterial?: KeySet, ratchetOpts: DecodeRatchetOptions = {ratchetCount: 0}, ): Promise<{ - payload: Uint8Array; + payload: NonSharedUint8Array; }> { const keySet = await keys.getKeySet(keyIndex); if (!keySet) { throw new Error('No key set found'); } + try { const plainText = await crypto.subtle.decrypt( { @@ -85,16 +91,20 @@ export class DataCryptor { keys.keyProviderOptions.ratchetWindowSize }, for data packet`, ); + let ratchetedKeySet: KeySet | undefined; let ratchetResult: RatchetResult | undefined; if ((initialMaterial ?? keySet) === keys.getKeySet(keyIndex)) { ratchetResult = await keys.ratchetKey(keyIndex, false); - ratchetedKeySet = await deriveKeys(ratchetResult.cryptoKey, keys.keyProviderOptions.ratchetSalt); + + ratchetedKeySet = await deriveKeys(ratchetResult.cryptoKey, keys.keyProviderOptions); } + const decryptedData = await DataCryptor.decrypt(data, iv, keys, keyIndex, initialMaterial, { ratchetCount: ratchetOpts.ratchetCount + 1, encryptionKey: ratchetedKeySet?.encryptionKey, }); + if (decryptedData && ratchetedKeySet) { if ((initialMaterial ?? keySet) === keys.getKeySet(keyIndex)) { keys.setKeySet(ratchetedKeySet, keyIndex, ratchetResult); @@ -112,7 +122,7 @@ export class DataCryptor { } } else { throw new CryptorError( - `DataCryptor: Decryption failed: ${error instanceof Error ? error.message : String(error)}`, + `DataCryptor: Decryption failed: ${getErrorDescription(error, 'decryption')}`, CryptorErrorReason.InvalidKey, keys.participantIdentity, ); diff --git a/fluxer_app/pkgs/livekit-client/src/e2ee/worker/ErrorRateLimiter.ts b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/ErrorRateLimiter.ts new file mode 100644 index 000000000..55b7a4948 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/ErrorRateLimiter.ts @@ -0,0 +1,46 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +export class ErrorRateLimiter { + private lastAt: Map = new Map(); + + private counts: Map = new Map(); + + constructor( + private readonly throttleMs: number = 1000, + private readonly windowMs: number = 60_000, + private readonly maxPerWindow: number = 5, + ) {} + + reset() { + this.lastAt.clear(); + this.counts.clear(); + } + + countFor(key: string): number { + return this.counts.get(key) ?? 0; + } + + shouldEmit(key: string, onSuppress?: () => void): boolean { + const now = Date.now(); + const last = this.lastAt.get(key) ?? 0; + const count = this.counts.get(key) ?? 0; + + if (now - last > this.windowMs) { + this.counts.set(key, 0); + this.lastAt.set(key, now); + return true; + } + if (now - last < this.throttleMs) return false; + if (count >= this.maxPerWindow) { + if (count === this.maxPerWindow) { + onSuppress?.(); + this.counts.set(key, count + 1); + } + return false; + } + this.lastAt.set(key, now); + this.counts.set(key, count + 1); + return true; + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/e2ee/worker/FrameCryptor.bench.ts b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/FrameCryptor.bench.ts index 96b5d5a8f..120247a5b 100644 --- a/fluxer_app/pkgs/livekit-client/src/e2ee/worker/FrameCryptor.bench.ts +++ b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/FrameCryptor.bench.ts @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2024 LiveKit, Inc. // // SPDX-License-Identifier: Apache-2.0 -import {bench, describe} from 'vitest'; +import {test} from 'vitest'; import {getEncryptedFrameLayout, isFrameServerInjected} from './FrameCryptor.ts'; const sifTrailer = Uint8Array.from([0xde, 0xad, 0xbe, 0xef]); @@ -15,14 +15,14 @@ function makeEncryptedFrame(): Uint8Array { return frame; } -describe('FrameCryptor frame guards', () => { - bench('valid encrypted frame layout', () => { +test('FrameCryptor frame guards', async ({bench}) => { + await bench('valid encrypted frame layout', () => { getEncryptedFrameLayout(encryptedFrame.buffer, 10); - }); - bench('short encrypted frame layout rejection', () => { + }).run(); + await bench('short encrypted frame layout rejection', () => { getEncryptedFrameLayout(shortFrame.buffer, 10); - }); - bench('short SIF trailer rejection', () => { + }).run(); + await bench('short SIF trailer rejection', () => { isFrameServerInjected(shortFrame.buffer, sifTrailer); - }); + }).run(); }); diff --git a/fluxer_app/pkgs/livekit-client/src/e2ee/worker/FrameCryptor.ts b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/FrameCryptor.ts index 30dd6d9bb..40b9e2f09 100644 --- a/fluxer_app/pkgs/livekit-client/src/e2ee/worker/FrameCryptor.ts +++ b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/FrameCryptor.ts @@ -3,12 +3,24 @@ // SPDX-License-Identifier: Apache-2.0 import {EventEmitter} from 'events'; import type TypedEventEmitter from 'typed-emitter'; +import {getErrorDescription} from '../../api/utils.ts'; +import {appendPacketTrailerToEncodedFrame, processPacketTrailer} from '../../frameMetadata/frameMetadata.ts'; +import type {FrameMetadataPublishOptions} from '../../frameMetadata/types.ts'; +import {hasFrameMetadataPublishOptions} from '../../frameMetadata/utils.ts'; import {workerLogger} from '../../logger.ts'; -import type {VideoCodec} from '../../room/track/options.ts'; +import {type VideoCodec, videoCodecs} from '../../room/track/options.ts'; +import {mimeTypeToVideoCodecString} from '../../room/track/utils.ts'; +import type {NonSharedUint8Array} from '../../type-polyfills/non-shared-typed-arrays.ts'; import {ENCRYPTION_ALGORITHM, IV_LENGTH, UNENCRYPTED_BYTES} from '../constants.ts'; import {CryptorError, CryptorErrorReason} from '../errors.ts'; import {type CryptorCallbacks, CryptorEvent} from '../events.ts'; -import type {DecodeRatchetOptions, KeyProviderOptions, KeySet, RatchetResult} from '../types.ts'; +import type { + DecodeRatchetOptions, + KeyProviderOptions, + KeySet, + PTMetadataFromE2EEMessage, + RatchetResult, +} from '../types.ts'; import {deriveKeys, isVideoFrame, needsRbspUnescaping, parseRbsp, writeRbsp} from '../utils.ts'; import { type Av1E2eeMetadata, @@ -17,11 +29,13 @@ import { extractAv1E2eeMetadataObu, GCM_TAG_LENGTH_BYTES, } from './av1Utils.ts'; +import {ErrorRateLimiter} from './ErrorRateLimiter.ts'; import {processNALUsForEncryption} from './naluUtils.ts'; import type {ParticipantKeyHandler} from './ParticipantKeyHandler.ts'; import {identifySifPayload} from './sifPayload.ts'; export const encryptionEnabledMap: Map = new Map(); + const FRAME_TRAILER_LENGTH = 2; export interface EncryptedFrameLayout { @@ -74,10 +88,6 @@ export interface TransformerInfo { type EncodedFrame = RTCEncodedVideoFrame | RTCEncodedAudioFrame; -function getErrorMessage(error: unknown): string { - return error instanceof Error ? error.message : String(error); -} - export class BaseFrameCryptor extends (EventEmitter as new () => TypedEventEmitter) { protected encodeFunction(_encodedFrame: EncodedFrame, _controller: TransformStreamDefaultController): Promise { throw Error('not implemented for subclass'); @@ -90,28 +100,54 @@ export class BaseFrameCryptor extends (EventEmitter as new () => TypedEventEmitt export class FrameCryptor extends BaseFrameCryptor { private sendCounts: Map; - private av1LayoutFailureLogged: boolean = false; + private participantIdentity: string | undefined; + private trackId: string | undefined; + private keys: ParticipantKeyHandler; + private videoCodec?: VideoCodec; + private rtpMap: Map; + private keyProviderOptions: KeyProviderOptions; - private sifTrailer: Uint8Array; + + private sifTrailer: NonSharedUint8Array; + private detectedCodec?: VideoCodec; + + private av1LayoutFailureLogged: boolean = false; + private currentTransform?: TransformerInfo; - private lastErrorTimestamp: Map = new Map(); - private errorCounts: Map = new Map(); - private readonly ERROR_THROTTLE_MS = 1000; - private readonly MAX_ERRORS_PER_MINUTE = 5; - private readonly ERROR_WINDOW_MS = 60000; - private readonly encodeTrailer: Uint8Array = new Uint8Array(2); + + private retainedStreams?: { + readable: ReadableStream; + writable: WritableStream; + operation: 'encode' | 'decode'; + }; + + private hasFrameMetadata: boolean = false; + + private frameMetadataOpts?: FrameMetadataPublishOptions; + + private frameMetadataFrameId = 0; + + private errorLimiter = new ErrorRateLimiter(); + + private undecryptedTrackTimeout?: ReturnType; + + private readonly UNDECRYPTED_TRACK_GRACE_MS = 2000; + + private loggedNALUFallbacks: Set = new Set(); + + private readonly encodeTrailer: NonSharedUint8Array = new Uint8Array(FRAME_TRAILER_LENGTH); constructor(opts: { keys: ParticipantKeyHandler; participantIdentity: string; keyProviderOptions: KeyProviderOptions; - sifTrailer?: Uint8Array; + sifTrailer?: NonSharedUint8Array; }) { super(); this.sendCounts = new Map(); @@ -136,6 +172,7 @@ export class FrameCryptor extends BaseFrameCryptor { newParticipant: id, hadPreviousParticipant: !!this.participantIdentity, }); + if (this.participantIdentity && this.participantIdentity !== id) { workerLogger.warn('cryptor has already a participant set, cleaning up before switching', { oldParticipant: this.participantIdentity, @@ -144,20 +181,20 @@ export class FrameCryptor extends BaseFrameCryptor { }); this.unsetParticipant(); } + this.participantIdentity = id; this.keys = keys; } unsetParticipant() { workerLogger.debug('unsetting participant', this.logContext); - if (this.currentTransform) { - this.currentTransform = undefined; - } + + clearTimeout(this.undecryptedTrackTimeout); + this.undecryptedTrackTimeout = undefined; this.participantIdentity = undefined; this.videoCodec = undefined; this.resetCodecState(); - this.lastErrorTimestamp = new Map(); - this.errorCounts = new Map(); + this.errorLimiter.reset(); } isEnabled() { @@ -176,23 +213,54 @@ export class FrameCryptor extends BaseFrameCryptor { return this.trackId; } - updateTrackContext(trackId: string, codec?: VideoCodec) { - const trackChanged = this.trackId !== trackId; - if (trackChanged) { - workerLogger.debug('updating track context on cryptor', { - ...this.logContext, - oldTrackId: this.trackId, - newTrackId: trackId, - }); - this.trackId = trackId; - this.resetCodecState(); - if (!codec) { - this.videoCodec = undefined; + setTrackId(trackId: string) { + if (this.trackId === trackId) { + return; + } + workerLogger.debug('re-pointing cryptor at new trackId', { + ...this.logContext, + newTrackId: trackId, + }); + this.trackId = trackId; + this.resetCodecState(); + } + + hasActiveTransform() { + return !!this.currentTransform; + } + + private scheduleUndecryptedTrackWatchdog(operation: 'encode' | 'decode') { + clearTimeout(this.undecryptedTrackTimeout); + this.undecryptedTrackTimeout = undefined; + if (operation !== 'decode') { + return; + } + this.undecryptedTrackTimeout = setTimeout(() => { + if (this.currentTransform || !this.isEnabled()) { + return; } + workerLogger.warn('encrypted track has no active decrypt transform', this.logContext); + this.emitThrottledError( + new CryptorError( + `no active decrypt transform for encrypted track ${this.trackId}`, + CryptorErrorReason.InternalError, + this.participantIdentity, + ), + ); + }, this.UNDECRYPTED_TRACK_GRACE_MS); + } + + ensureTransform() { + if (this.currentTransform) { + return true; } - if (codec) { - this.setVideoCodec(codec); + if (!this.retainedStreams || this.trackId === undefined) { + workerLogger.warn('no streams retained, cannot re-establish transform', this.logContext); + return false; } + const {readable, writable, operation} = this.retainedStreams; + workerLogger.info('re-establishing transform', {...this.logContext, operation}); + return this.setupTransform(operation, readable, writable, this.trackId); } setVideoCodec(codec: VideoCodec) { @@ -206,40 +274,54 @@ export class FrameCryptor extends BaseFrameCryptor { this.rtpMap = map; } + setHasFrameMetadata(hasFrameMetadata: boolean) { + this.hasFrameMetadata = hasFrameMetadata; + } + + setFrameMetadataOpts(frameMetadata?: FrameMetadataPublishOptions) { + this.frameMetadataOpts = frameMetadata; + this.frameMetadataFrameId = 0; + } + setupTransform( operation: 'encode' | 'decode', - readable: ReadableStream, - writable: WritableStream, + readable: ReadableStream, + writable: WritableStream, trackId: string, - isReuse: boolean, codec?: VideoCodec, + frameMetadata?: FrameMetadataPublishOptions, ) { - this.updateTrackContext(trackId, codec); + const trackChanged = this.trackId !== trackId; + this.setTrackId(trackId); + if (codec) { + workerLogger.info('setting codec on cryptor to', {codec}); + this.setVideoCodec(codec); + } else if (trackChanged) { + this.videoCodec = undefined; + } + if (operation === 'encode') { + this.setFrameMetadataOpts(frameMetadata); + } + workerLogger.debug('Setting up frame cryptor transform', { operation, passedTrackId: trackId, codec, - isReuse, hasCurrentTransform: !!this.currentTransform, ...this.logContext, }); - if ( - isReuse && - this.currentTransform && - readable === this.currentTransform.readable && - writable === this.currentTransform.writable - ) { - workerLogger.debug('reusing existing transform', { - ...this.logContext, - trackId, - }); - return; - } + + this.retainedStreams = {readable, writable, operation}; + + clearTimeout(this.undecryptedTrackTimeout); + const symbol = Symbol('transform'); + const transformFn = operation === 'encode' ? this.encodeFunction : this.decodeFunction; const transformStream = new TransformStream({ transform: transformFn.bind(this), }); + this.currentTransform = { readable, writable, @@ -247,75 +329,76 @@ export class FrameCryptor extends BaseFrameCryptor { trackId, symbol, }; - readable - .pipeThrough(transformStream) - .pipeTo(writable) - .catch((e) => { - if (e instanceof TypeError && e.message === 'Destination stream closed') { - workerLogger.debug('destination stream closed'); - } else { - workerLogger.warn('transform error', {error: e, ...this.logContext}); - this.emit( - CryptorEvent.Error, - e instanceof CryptorError ? e : new CryptorError(e.message, undefined, this.participantIdentity), - ); - } - }) - .finally(() => { - if (this.currentTransform?.symbol === symbol) { - workerLogger.debug('transform completed', { - ...this.logContext, - trackId, - }); - this.currentTransform = undefined; - } - }); + + try { + readable + .pipeThrough(transformStream) + .pipeTo(writable) + .catch((e) => { + if (e instanceof TypeError && e.message === 'Destination stream closed') { + workerLogger.debug('destination stream closed'); + } else { + workerLogger.warn('transform error', {error: e, ...this.logContext}); + this.emit( + CryptorEvent.Error, + e instanceof CryptorError ? e : new CryptorError(e.message, undefined, this.participantIdentity), + ); + } + }) + .finally(() => { + if (this.currentTransform?.symbol === symbol) { + workerLogger.debug('transform completed', { + ...this.logContext, + trackId, + }); + this.currentTransform = undefined; + } + this.scheduleUndecryptedTrackWatchdog(operation); + }); + } catch (e: unknown) { + if (this.currentTransform?.symbol === symbol) { + this.currentTransform = undefined; + } + workerLogger.error('failed to set up transform', {error: e, ...this.logContext}); + this.emit( + CryptorEvent.Error, + e instanceof CryptorError + ? e + : new CryptorError( + getErrorDescription(e, 'transform'), + CryptorErrorReason.InternalError, + this.participantIdentity, + ), + ); + return false; + } + + return true; } - setSifTrailer(trailer: Uint8Array) { + setSifTrailer(trailer: NonSharedUint8Array) { workerLogger.debug('setting SIF trailer', {...this.logContext, trailer}); this.sifTrailer = trailer; } - private shouldEmitError(errorKey: string): boolean { - const now = Date.now(); - const lastErrorTime = this.lastErrorTimestamp.get(errorKey) ?? 0; - const errorCount = this.errorCounts.get(errorKey) ?? 0; - if (now - lastErrorTime > this.ERROR_WINDOW_MS) { - this.errorCounts.set(errorKey, 0); - this.lastErrorTimestamp.set(errorKey, now); - return true; - } - if (now - lastErrorTime < this.ERROR_THROTTLE_MS) { - return false; - } - if (errorCount >= this.MAX_ERRORS_PER_MINUTE) { - if (errorCount === this.MAX_ERRORS_PER_MINUTE) { - workerLogger.warn(`Suppressing further decryption errors for ${this.participantIdentity}`, { - ...this.logContext, - errorKey, - }); - this.errorCounts.set(errorKey, errorCount + 1); - } - return false; - } - this.lastErrorTimestamp.set(errorKey, now); - this.errorCounts.set(errorKey, errorCount + 1); - return true; - } - private emitThrottledError(error: CryptorError) { const errorKey = `${this.participantIdentity}-${error.reason}-decrypt`; - if (this.shouldEmitError(errorKey)) { - const errorCount = this.errorCounts.get(errorKey) ?? 0; - if (errorCount > 1) { - workerLogger.debug(`Decryption error (${errorCount} occurrences in window)`, { - ...this.logContext, - reason: CryptorErrorReason[error.reason], - }); - } - this.emit(CryptorEvent.Error, error); + const emit = this.errorLimiter.shouldEmit(errorKey, () => { + workerLogger.warn(`Suppressing further decryption errors for ${this.participantIdentity}`, { + ...this.logContext, + errorKey, + }); + }); + if (!emit) return; + + const count = this.errorLimiter.countFor(errorKey); + if (count > 1) { + workerLogger.debug(`Decryption error (${count} occurrences in window)`, { + ...this.logContext, + reason: CryptorErrorReason[error.reason], + }); } + this.emit(CryptorEvent.Error, error); } private resetCodecState() { @@ -323,18 +406,17 @@ export class FrameCryptor extends BaseFrameCryptor { this.av1LayoutFailureLogged = false; } - protected async encodeFunction( - encodedFrame: EncodedFrame, - controller: TransformStreamDefaultController, - ): Promise { + protected override async encodeFunction(encodedFrame: EncodedFrame, controller: TransformStreamDefaultController) { if (encodedFrame.data.byteLength === 0) { controller.enqueue(encodedFrame); - return undefined; + return; } + const encryptionEnabled = this.isEnabled(); if (encryptionEnabled === false) { + this.appendFrameMetadata(encodedFrame); controller.enqueue(encodedFrame); - return undefined; + return; } if (encryptionEnabled !== true) { return; @@ -352,92 +434,23 @@ export class FrameCryptor extends BaseFrameCryptor { } const {encryptionKey} = keySet; const keyIndex = this.keys.getCurrentKeyIndex(); + if (encryptionKey) { const iv = this.makeIV(encodedFrame.getMetadata().synchronizationSource ?? -1, encodedFrame.timestamp); const frameInfo = this.getUnencryptedBytes(encodedFrame); + if (isVideoFrame(encodedFrame) && this.detectedCodec === 'av1') { - const plainPayload = new Uint8Array(encodedFrame.data); - const layout = computeAv1EncryptionLayout(plainPayload); - if (!layout) { - const debugInfo = this.av1LayoutFailureLogged - ? undefined - : { - length: plainPayload.byteLength, - firstByte: plainPayload[0], - looksLikeRtpAggregationHeader: (plainPayload[0] & 0x07) === 0, - looksLikeObuHeader: (plainPayload[0] & 0x80) === 0 && (plainPayload[0] & 0x01) === 0, - }; - this.av1LayoutFailureLogged = true; - workerLogger.warn('AV1 E2EE could not determine encryption layout, dropping frame', { - ...this.logContext, - ...(debugInfo ? {debugInfo} : {}), - }); - this.emitThrottledError( - new CryptorError( - `unable to encrypt AV1 frame: layout detection failed`, - CryptorErrorReason.InternalError, - this.participantIdentity, - ), - ); - return; - } - try { - const plainProtected = layout.extractProtected(plainPayload); - const cipherProtectedWithTag = new Uint8Array( - await crypto.subtle.encrypt( - { - name: ENCRYPTION_ALGORITHM, - iv, - additionalData: layout.buildAAD(plainPayload) as BufferSource, - }, - encryptionKey, - plainProtected as BufferSource, - ), - ); - if (cipherProtectedWithTag.byteLength !== plainProtected.byteLength + GCM_TAG_LENGTH_BYTES) { - throw new Error( - `Unexpected AES-GCM output length: got ${cipherProtectedWithTag.byteLength}, expected ${ - plainProtected.byteLength + GCM_TAG_LENGTH_BYTES - }`, - ); - } - const cipherProtected = cipherProtectedWithTag.subarray(0, plainProtected.byteLength); - const tag = cipherProtectedWithTag.subarray(plainProtected.byteLength); - const metadataObu = buildAv1E2eeMetadataObu({ - keyIndex, - iv: new Uint8Array(iv), - tag, - }); - const newPayload = new Uint8Array(plainPayload.byteLength + metadataObu.byteLength); - newPayload.set(plainPayload); - layout.writeProtected(newPayload, cipherProtected); - newPayload.set(metadataObu, plainPayload.byteLength); - encodedFrame.data = newPayload.buffer; - controller.enqueue(encodedFrame); - return undefined; - } catch (e: unknown) { - const errorMessage = getErrorMessage(e); - workerLogger.error('AV1 E2EE encryption failed, dropping frame', { - error: e, - errorName: e instanceof Error ? e.name : undefined, - errorMessage, - ...this.logContext, - }); - this.emitThrottledError( - new CryptorError( - `unable to encrypt AV1 frame: ${errorMessage}`, - CryptorErrorReason.InternalError, - this.participantIdentity, - ), - ); - return; - } + await this.encodeAv1Frame(encodedFrame, controller, encryptionKey, iv, keyIndex); + return; } + const frameHeaderLength = getFrameHeaderLength(frameInfo.unencryptedBytes, encodedFrame.data.byteLength); - const frameHeader = new Uint8Array(encodedFrame.data, 0, frameHeaderLength); + const frameHeader: NonSharedUint8Array = new Uint8Array(encodedFrame.data, 0, frameHeaderLength); const frameTrailer = this.encodeTrailer; + frameTrailer[0] = IV_LENGTH; frameTrailer[1] = keyIndex; + try { const cipherText = await crypto.subtle.encrypt( { @@ -448,25 +461,29 @@ export class FrameCryptor extends BaseFrameCryptor { encryptionKey, new Uint8Array(encodedFrame.data, frameHeaderLength), ); - const cipherView = new Uint8Array(cipherText); - const ivView = new Uint8Array(iv); - let newDataWithoutHeader: Uint8Array = new Uint8Array( + + let newDataWithoutHeader: NonSharedUint8Array = new Uint8Array( cipherText.byteLength + iv.byteLength + frameTrailer.byteLength, ); - newDataWithoutHeader.set(cipherView); - newDataWithoutHeader.set(ivView, cipherText.byteLength); + newDataWithoutHeader.set(new Uint8Array(cipherText)); + newDataWithoutHeader.set(new Uint8Array(iv), cipherText.byteLength); newDataWithoutHeader.set(frameTrailer, cipherText.byteLength + iv.byteLength); + if (frameInfo.requiresNALUProcessing) { newDataWithoutHeader = writeRbsp(newDataWithoutHeader); } + const newData = new Uint8Array(frameHeader.byteLength + newDataWithoutHeader.byteLength); newData.set(frameHeader); newData.set(newDataWithoutHeader, frameHeader.byteLength); + encodedFrame.data = newData.buffer; + this.appendFrameMetadata(encodedFrame); + controller.enqueue(encodedFrame); - return undefined; + return; } catch (e: unknown) { - workerLogger.error(e); + workerLogger.error(`error while encrypting`, {...this.logContext, error: e}); } } else { workerLogger.debug('failed to encrypt, emitting error', this.logContext); @@ -480,51 +497,169 @@ export class FrameCryptor extends BaseFrameCryptor { } } - protected async decodeFunction( - encodedFrame: EncodedFrame, + private async encodeAv1Frame( + encodedFrame: RTCEncodedVideoFrame, controller: TransformStreamDefaultController, - ): Promise { - if (encodedFrame.data.byteLength === 0) { - controller.enqueue(encodedFrame); - return undefined; - } - const encryptionEnabled = this.isEnabled(); - if (encryptionEnabled === false) { - controller.enqueue(encodedFrame); - return undefined; - } - if (encryptionEnabled !== true) { + encryptionKey: CryptoKey, + iv: ArrayBuffer, + keyIndex: number, + ) { + const plainPayload: NonSharedUint8Array = new Uint8Array(encodedFrame.data); + const layout = computeAv1EncryptionLayout(plainPayload); + if (!layout) { + const debugInfo = this.av1LayoutFailureLogged + ? undefined + : { + length: plainPayload.byteLength, + firstByte: plainPayload[0], + looksLikeRtpAggregationHeader: (plainPayload[0] & 0x07) === 0, + looksLikeObuHeader: (plainPayload[0] & 0x80) === 0 && (plainPayload[0] & 0x01) === 0, + }; + this.av1LayoutFailureLogged = true; + workerLogger.warn('AV1 E2EE could not determine encryption layout, dropping frame', { + ...this.logContext, + ...(debugInfo ? {debugInfo} : {}), + }); + this.emitThrottledError( + new CryptorError( + `unable to encrypt AV1 frame: layout detection failed`, + CryptorErrorReason.InternalError, + this.participantIdentity, + ), + ); return; } + try { + const plainProtected = layout.extractProtected(plainPayload); + const cipherProtectedWithTag = new Uint8Array( + await crypto.subtle.encrypt( + { + name: ENCRYPTION_ALGORITHM, + iv, + additionalData: layout.buildAAD(plainPayload) as BufferSource, + }, + encryptionKey, + plainProtected as BufferSource, + ), + ); + if (cipherProtectedWithTag.byteLength !== plainProtected.byteLength + GCM_TAG_LENGTH_BYTES) { + throw new Error( + `Unexpected AES-GCM output length: got ${cipherProtectedWithTag.byteLength}, expected ${ + plainProtected.byteLength + GCM_TAG_LENGTH_BYTES + }`, + ); + } + const cipherProtected = cipherProtectedWithTag.subarray(0, plainProtected.byteLength); + const tag = cipherProtectedWithTag.subarray(plainProtected.byteLength); + const metadataObu = buildAv1E2eeMetadataObu({ + keyIndex, + iv: new Uint8Array(iv), + tag, + }); + const newPayload = new Uint8Array(plainPayload.byteLength + metadataObu.byteLength); + newPayload.set(plainPayload); + layout.writeProtected(newPayload, cipherProtected); + newPayload.set(metadataObu, plainPayload.byteLength); + encodedFrame.data = newPayload.buffer; + this.appendFrameMetadata(encodedFrame); + controller.enqueue(encodedFrame); + } catch (e: unknown) { + const errorMessage = getErrorDescription(e, 'encryption'); + workerLogger.error('AV1 E2EE encryption failed, dropping frame', { + error: e, + errorMessage, + ...this.logContext, + }); + this.emitThrottledError( + new CryptorError( + `unable to encrypt AV1 frame: ${errorMessage}`, + CryptorErrorReason.InternalError, + this.participantIdentity, + ), + ); + } + } + + private appendFrameMetadata(encodedFrame: EncodedFrame) { + if (!hasFrameMetadataPublishOptions(this.frameMetadataOpts) || !isVideoFrame(encodedFrame)) { + return; + } + + if (this.frameMetadataOpts?.frameId) { + this.frameMetadataFrameId = this.frameMetadataFrameId === 0xffffffff ? 1 : this.frameMetadataFrameId + 1; + } + appendPacketTrailerToEncodedFrame(encodedFrame, this.frameMetadataOpts, this.frameMetadataFrameId); + } + + protected override async decodeFunction(encodedFrame: EncodedFrame, controller: TransformStreamDefaultController) { + if (this.hasFrameMetadata && isVideoFrame(encodedFrame)) { + try { + const ptResult = processPacketTrailer(encodedFrame, this.trackId); + if (ptResult.data) { + encodedFrame.data = ptResult.data; + } + if (ptResult.payload && this.participantIdentity) { + const msg: PTMetadataFromE2EEMessage = { + kind: 'packetTrailerMetadata', + data: ptResult.payload, + }; + postMessage(msg); + } + } catch {} + } + + if (encodedFrame.data.byteLength === 0) { + controller.enqueue(encodedFrame); + return; + } + + const encryptionEnabled = this.isEnabled(); + + if (encryptionEnabled === undefined) { + if (this.participantIdentity === undefined) { + workerLogger.debug('dropping frame for unassigned cryptor', this.logContext); + return; + } + this.emitThrottledError( + new CryptorError( + `encryption state unknown for track ${this.trackId}, dropping frame`, + CryptorErrorReason.InternalError, + this.participantIdentity, + ), + ); + return; + } + + if (!encryptionEnabled) { + controller.enqueue(encodedFrame); + return; + } + if (isFrameServerInjected(encodedFrame.data, this.sifTrailer)) { encodedFrame.data = encodedFrame.data.slice(0, encodedFrame.data.byteLength - this.sifTrailer.byteLength); if (await identifySifPayload(encodedFrame.data)) { workerLogger.debug('enqueue SIF', this.logContext); controller.enqueue(encodedFrame); - return undefined; + return; } else { workerLogger.warn('Unexpected SIF frame payload, dropping frame', this.logContext); return; } } - const data = new Uint8Array(encodedFrame.data); + const data: NonSharedUint8Array = new Uint8Array(encodedFrame.data); const extractedAv1 = isVideoFrame(encodedFrame) ? extractAv1E2eeMetadataObu(data) : undefined; let keyIndex: number; - let av1Payload: Uint8Array | undefined; - let av1Meta: Av1E2eeMetadata | undefined; if (extractedAv1) { keyIndex = extractedAv1.meta.keyIndex; - av1Payload = extractedAv1.payload; - av1Meta = extractedAv1.meta; - if (this.detectedCodec !== 'av1') { - this.detectedCodec = 'av1'; - } + this.detectedCodec = 'av1'; } else { keyIndex = data[encodedFrame.data.byteLength - 1]; } + if (this.keys.hasInvalidKeyAtIndex(keyIndex)) { return; } + if (this.keys.getKeySet(keyIndex)) { try { const decodedFrame = await this.decryptFrame( @@ -532,12 +667,12 @@ export class FrameCryptor extends BaseFrameCryptor { keyIndex, undefined, {ratchetCount: 0}, - extractedAv1 ? {payload: av1Payload, meta: av1Meta} : undefined, + extractedAv1 ? {payload: extractedAv1.payload, meta: extractedAv1.meta} : undefined, ); this.keys.decryptionSuccess(keyIndex); if (decodedFrame) { controller.enqueue(decodedFrame); - return undefined; + return; } } catch (error) { if (error instanceof CryptorError && error.reason === CryptorErrorReason.InvalidKey) { @@ -566,20 +701,21 @@ export class FrameCryptor extends BaseFrameCryptor { } private async decryptFrame( - encodedFrame: RTCEncodedVideoFrame | RTCEncodedAudioFrame, + encodedFrame: EncodedFrame, keyIndex: number, initialMaterial: KeySet | undefined = undefined, ratchetOpts: DecodeRatchetOptions = {ratchetCount: 0}, - av1?: {payload?: Uint8Array; meta?: Av1E2eeMetadata}, - ): Promise { + av1?: {payload: Uint8Array; meta: Av1E2eeMetadata}, + ): Promise { const keySet = this.keys.getKeySet(keyIndex); if (!ratchetOpts.encryptionKey && !keySet) { throw new TypeError(`no encryption key found for decryption of ${this.participantIdentity}`); } const frameInfo = this.getUnencryptedBytes(encodedFrame); + try { - if (isVideoFrame(encodedFrame) && av1?.payload && av1.meta) { - const {payload, meta} = av1 as {payload: Uint8Array; meta: Av1E2eeMetadata}; + if (isVideoFrame(encodedFrame) && av1) { + const {payload, meta} = av1; if (meta.keyIndex !== keyIndex) { throw new Error(`AV1 key index mismatch (meta=${meta.keyIndex}, expected=${keyIndex})`); } @@ -608,9 +744,10 @@ export class FrameCryptor extends BaseFrameCryptor { encodedFrame.data = newPayload.buffer; return encodedFrame; } + const frameHeaderLength = getFrameHeaderLength(frameInfo.unencryptedBytes, encodedFrame.data.byteLength); - let frameHeader = new Uint8Array(encodedFrame.data, 0, frameHeaderLength); - let encryptedData: Uint8Array = new Uint8Array( + let frameHeader: NonSharedUint8Array = new Uint8Array(encodedFrame.data, 0, frameHeaderLength); + let encryptedData: NonSharedUint8Array = new Uint8Array( encodedFrame.data, frameHeader.length, encodedFrame.data.byteLength - frameHeader.length, @@ -622,6 +759,7 @@ export class FrameCryptor extends BaseFrameCryptor { newUint8.set(encryptedData, frameHeader.byteLength); encodedFrame.data = newUint8.buffer; } + const encryptedFrameLayout = getEncryptedFrameLayout(encodedFrame.data, frameHeader.byteLength); if (!encryptedFrameLayout) { throw new CryptorError( @@ -632,6 +770,7 @@ export class FrameCryptor extends BaseFrameCryptor { } frameHeader = new Uint8Array(encodedFrame.data, 0, encryptedFrameLayout.frameHeaderLength); const iv = new Uint8Array(encodedFrame.data, encryptedFrameLayout.ivStart, encryptedFrameLayout.ivLength); + const plainText = await crypto.subtle.decrypt( { name: ENCRYPTION_ALGORITHM, @@ -641,11 +780,15 @@ export class FrameCryptor extends BaseFrameCryptor { ratchetOpts.encryptionKey ?? keySet!.encryptionKey, new Uint8Array(encodedFrame.data, encryptedFrameLayout.cipherTextStart, encryptedFrameLayout.cipherTextLength), ); + const newData = new ArrayBuffer(frameHeader.byteLength + plainText.byteLength); const newUint8 = new Uint8Array(newData); + newUint8.set(frameHeader); newUint8.set(new Uint8Array(plainText), frameHeader.byteLength); + encodedFrame.data = newData; + return encodedFrame; } catch (error: unknown) { if (error instanceof CryptorError && error.reason === CryptorErrorReason.InternalError) { @@ -658,12 +801,15 @@ export class FrameCryptor extends BaseFrameCryptor { this.keyProviderOptions.ratchetWindowSize }, for kind ${isVideoFrame(encodedFrame) ? 'video' : 'audio'}`, ); + let ratchetedKeySet: KeySet | undefined; let ratchetResult: RatchetResult | undefined; if ((initialMaterial ?? keySet) === this.keys.getKeySet(keyIndex)) { ratchetResult = await this.keys.ratchetKey(keyIndex, false); - ratchetedKeySet = await deriveKeys(ratchetResult.cryptoKey, this.keyProviderOptions.ratchetSalt); + + ratchetedKeySet = await deriveKeys(ratchetResult.cryptoKey, this.keyProviderOptions); } + const frame = await this.decryptFrame( encodedFrame, keyIndex, @@ -691,7 +837,7 @@ export class FrameCryptor extends BaseFrameCryptor { } } else { throw new CryptorError( - `Decryption failed: ${getErrorMessage(error)}`, + `Decryption failed: ${getErrorDescription(error, 'decryption')}`, CryptorErrorReason.InvalidKey, this.participantIdentity, ); @@ -702,14 +848,19 @@ export class FrameCryptor extends BaseFrameCryptor { private makeIV(synchronizationSource: number, timestamp: number): ArrayBuffer { const iv = new ArrayBuffer(IV_LENGTH); const ivView = new DataView(iv); + if (!this.sendCounts.has(synchronizationSource)) { this.sendCounts.set(synchronizationSource, Math.floor(Math.random() * 0xffff)); } + const sendCount = this.sendCounts.get(synchronizationSource) ?? 0; + ivView.setUint32(0, synchronizationSource); ivView.setUint32(4, timestamp); ivView.setUint32(8, timestamp - (sendCount % 0xffff)); + this.sendCounts.set(synchronizationSource, sendCount + 1); + return iv; } @@ -717,23 +868,27 @@ export class FrameCryptor extends BaseFrameCryptor { unencryptedBytes: UNENCRYPTED_BYTES.audio, requiresNALUProcessing: false, } as const; + private static readonly FRAME_INFO_VP8_KEY = { unencryptedBytes: UNENCRYPTED_BYTES.key, requiresNALUProcessing: false, } as const; + private static readonly FRAME_INFO_VP8_DELTA = { unencryptedBytes: UNENCRYPTED_BYTES.delta, requiresNALUProcessing: false, } as const; + private static readonly FRAME_INFO_ZERO = {unencryptedBytes: 0, requiresNALUProcessing: false} as const; - private getUnencryptedBytes(frame: RTCEncodedVideoFrame | RTCEncodedAudioFrame): { + private getUnencryptedBytes(frame: EncodedFrame): { readonly unencryptedBytes: number; readonly requiresNALUProcessing: boolean; } { if (!isVideoFrame(frame)) { return FrameCryptor.FRAME_INFO_AUDIO; } + const detectedCodec = this.getVideoCodec(frame) ?? this.videoCodec; if (detectedCodec !== this.detectedCodec) { workerLogger.debug('detected different codec', { @@ -743,41 +898,63 @@ export class FrameCryptor extends BaseFrameCryptor { }); this.detectedCodec = detectedCodec; } + if (detectedCodec === 'vp8') { return frame.type === 'key' ? FrameCryptor.FRAME_INFO_VP8_KEY : FrameCryptor.FRAME_INFO_VP8_DELTA; } if (detectedCodec === 'vp9' || detectedCodec === 'av1') { return FrameCryptor.FRAME_INFO_ZERO; } + + const payloadType = frame.getMetadata().payloadType; + const fallbackKey = `${this.participantIdentity}-${this.trackId}-${payloadType}`; try { const knownCodec = detectedCodec === 'h264' || detectedCodec === 'h265' ? detectedCodec : undefined; const naluResult = processNALUsForEncryption(new Uint8Array(frame.data), knownCodec); + if (naluResult.requiresNALUProcessing) { + this.loggedNALUFallbacks.delete(fallbackKey); return { unencryptedBytes: naluResult.unencryptedBytes, requiresNALUProcessing: true, }; } } catch (e) { - workerLogger.debug('NALU processing failed, falling back to VP8 handling', { - error: e, - ...this.logContext, - }); + this.logNALUFallbackOnce(fallbackKey, payloadType, e); } + return frame.type === 'key' ? FrameCryptor.FRAME_INFO_VP8_KEY : FrameCryptor.FRAME_INFO_VP8_DELTA; } + private logNALUFallbackOnce(fallbackKey: string, payloadType: number | undefined, error: unknown) { + if (this.loggedNALUFallbacks.has(fallbackKey)) { + return; + } + this.loggedNALUFallbacks.add(fallbackKey); + workerLogger.warn('NALU processing failed, falling back to VP8 handling', { + error, + payloadType, + ...this.logContext, + }); + } + private getVideoCodec(frame: RTCEncodedVideoFrame): VideoCodec | undefined { + const metadata = frame.getMetadata(); + if (metadata.mimeType) { + const maybeKnownCodec = mimeTypeToVideoCodecString(metadata.mimeType); + if (videoCodecs.includes(maybeKnownCodec)) { + return maybeKnownCodec; + } + } if (this.rtpMap.size === 0) { return undefined; } - const payloadType = frame.getMetadata().payloadType; - const codec = payloadType !== undefined ? this.rtpMap.get(payloadType) : undefined; - return codec; + const payloadType = metadata.payloadType; + return payloadType !== undefined ? this.rtpMap.get(payloadType) : undefined; } } -export function isFrameServerInjected(frameData: ArrayBufferLike, trailerBytes: Uint8Array): boolean { +export function isFrameServerInjected(frameData: ArrayBufferLike, trailerBytes: NonSharedUint8Array): boolean { const trailerLen = trailerBytes.byteLength; if (trailerLen === 0) { return false; diff --git a/fluxer_app/pkgs/livekit-client/src/e2ee/worker/ParticipantKeyHandler.ts b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/ParticipantKeyHandler.ts index 306a1d6b4..e9f886e94 100644 --- a/fluxer_app/pkgs/livekit-client/src/e2ee/worker/ParticipantKeyHandler.ts +++ b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/ParticipantKeyHandler.ts @@ -101,13 +101,20 @@ export class ParticipantKeyHandler extends (EventEmitter as new () => TypedEvent return ratchetPromise; } - async setKey(material: CryptoKey, keyIndex = 0) { - await this.setKeyFromMaterial(material, keyIndex); - this.resetKeyStatus(keyIndex); + async setKey(material: CryptoKey, keyIndex = 0, updateCurrentKeyIndex = true) { + await this.setKeyFromMaterial(material, keyIndex, null, updateCurrentKeyIndex); + if (updateCurrentKeyIndex) { + this.resetKeyStatus(keyIndex); + } } - async setKeyFromMaterial(material: CryptoKey, keyIndex: number, ratchetedResult: RatchetResult | null = null) { - const keySet = await deriveKeys(material, this.keyProviderOptions.ratchetSalt); + async setKeyFromMaterial( + material: CryptoKey, + keyIndex: number, + ratchetedResult: RatchetResult | null = null, + updateCurrentKeyIndex = true, + ) { + const keySet = await deriveKeys(material, this.keyProviderOptions); const newIndex = keyIndex >= 0 ? keyIndex % this.cryptoKeyRing.length : this.currentKeyIndex; workerLogger.debug(`setting new key with index ${keyIndex}`, { usage: material.usages, @@ -115,7 +122,7 @@ export class ParticipantKeyHandler extends (EventEmitter as new () => TypedEvent ratchetSalt: this.keyProviderOptions.ratchetSalt, }); this.setKeySet(keySet, newIndex, ratchetedResult); - if (newIndex >= 0) this.currentKeyIndex = newIndex; + if (newIndex >= 0 && updateCurrentKeyIndex) this.currentKeyIndex = newIndex; } setKeySet(keySet: KeySet, keyIndex: number, ratchetedResult: RatchetResult | null = null) { diff --git a/fluxer_app/pkgs/livekit-client/src/e2ee/worker/av1Utils.ts b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/av1Utils.ts index 8727c73f5..4d7eab4f8 100644 --- a/fluxer_app/pkgs/livekit-client/src/e2ee/worker/av1Utils.ts +++ b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/av1Utils.ts @@ -25,10 +25,6 @@ type Av1EncryptionLayoutBase = Omit Av1EncryptionLayoutBase | undefined; -function _sumRanges(ranges: Array): number { - return ranges.reduce((sum, range) => sum + (range.end - range.start), 0); -} - function isValidRange(range: ByteRange, dataLength: number): boolean { return range.start >= 0 && range.end >= range.start && range.end <= dataLength; } @@ -81,20 +77,6 @@ function readLeb128(data: Uint8Array, offset: number): {value: number; length: n return undefined; } -const _leb128Buf = new Uint8Array(5); - -function _writeLeb128(value: number): Uint8Array { - if (!Number.isFinite(value) || value < 0) throw new Error(`Invalid leb128 value: ${value}`); - let v = value >>> 0; - let length = 0; - while (v >= 0x80) { - _leb128Buf[length++] = (v & 0x7f) | 0x80; - v >>>= 7; - } - _leb128Buf[length++] = v & 0x7f; - return _leb128Buf.slice(0, length); -} - function parseObuHeader(byte: number): { obuType: number; extensionFlag: boolean; diff --git a/fluxer_app/pkgs/livekit-client/src/e2ee/worker/e2ee.worker.ts b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/e2ee.worker.ts index 8ab25f4db..50914ea07 100644 --- a/fluxer_app/pkgs/livekit-client/src/e2ee/worker/e2ee.worker.ts +++ b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/e2ee.worker.ts @@ -3,6 +3,7 @@ // SPDX-License-Identifier: Apache-2.0 import {workerLogger} from '../../logger.ts'; import type {VideoCodec} from '../../room/track/options.ts'; +import type {NonSharedUint8Array} from '../../type-polyfills/non-shared-typed-arrays.ts'; import {AsyncQueue} from '../../utils/AsyncQueue.ts'; import {KEY_PROVIDER_DEFAULTS} from '../constants.ts'; import {CryptorErrorReason} from '../errors.ts'; @@ -18,9 +19,9 @@ import type { RatchetRequestMessage, RatchetResult, ScriptTransformOptions, - UpdateTrackContextMessage, } from '../types.ts'; import {DataCryptor} from './DataCryptor.ts'; +import {ErrorRateLimiter} from './ErrorRateLimiter.ts'; import {encryptionEnabledMap, FrameCryptor} from './FrameCryptor.ts'; import {ParticipantKeyHandler} from './ParticipantKeyHandler.ts'; @@ -33,13 +34,22 @@ const isEncryptionEnabled: boolean = false; let useSharedKey: boolean = false; -let sifTrailer: Uint8Array | undefined; +let sifTrailer: NonSharedUint8Array | undefined; let keyProviderOptions: KeyProviderOptions = KEY_PROVIDER_DEFAULTS; let rtpMap: Map = new Map(); +const dataDecryptErrorLimiter = new ErrorRateLimiter(); + workerLogger.setDefaultLevel('info'); +workerLogger.methodFactory = (methodName) => (msg, context) => { + postMessage({ + kind: 'log', + data: {level: methodName, msg, context}, + }); +}; +workerLogger.setLevel(workerLogger.getLevel()); self.addEventListener('message', (ev) => { messageQueue.run(async () => { @@ -48,7 +58,7 @@ self.addEventListener('message', (ev) => { switch (kind) { case 'init': { workerLogger.setLevel(data.loglevel); - workerLogger.info('worker initialized'); + workerLogger.info('e2ee worker initialized'); keyProviderOptions = data.keyProviderOptions; useSharedKey = !!data.keyProviderOptions.sharedKey; const ackMsg: InitAck = { @@ -58,6 +68,9 @@ self.addEventListener('message', (ev) => { postMessage(ackMsg); break; } + case 'setLogLevel': + workerLogger.setLevel(data.level); + break; case 'enable': setEncryptionEnabled(data.enabled, data.participantIdentity); workerLogger.info(`updated e2ee enabled status for ${data.participantIdentity} to ${data.enabled}`); @@ -65,18 +78,20 @@ self.addEventListener('message', (ev) => { break; case 'decode': { const cryptor = getTrackCryptor(data.participantIdentity, data.trackId); - cryptor.setupTransform(kind, data.readableStream, data.writableStream, data.trackId, data.isReuse, data.codec); + cryptor.setHasFrameMetadata(data.hasPacketTrailer); + cryptor.setupTransform(kind, data.readableStream, data.writableStream, data.trackId, data.codec); break; } case 'encode': { const pubCryptor = getTrackCryptor(data.participantIdentity, data.trackId); + pubCryptor.setHasFrameMetadata(data.hasPacketTrailer); pubCryptor.setupTransform( kind, data.readableStream, data.writableStream, data.trackId, - data.isReuse, data.codec, + data.packetTrailer, ); break; } @@ -112,11 +127,17 @@ self.addEventListener('message', (ev) => { data: {payload: decryptedPayload, uuid: data.uuid}, } satisfies DecryptDataResponseMessage); } catch (error) { - workerLogger.error('DataCryptor decryption failed', { - error, - participantIdentity: data.participantIdentity, - uuid: data.uuid, + const errorKey = `${data.participantIdentity}-datadecrypt`; + const shouldLog = dataDecryptErrorLimiter.shouldEmit(errorKey, () => { + workerLogger.warn(`Suppressing further data decryption errors for ${data.participantIdentity}`, {errorKey}); }); + if (shouldLog) { + workerLogger.error('DataCryptor decryption failed', { + error, + participantIdentity: data.participantIdentity, + uuid: data.uuid, + }); + } postMessage({ kind: 'error', data: { @@ -129,10 +150,14 @@ self.addEventListener('message', (ev) => { case 'setKey': if (useSharedKey) { - await setSharedKey(data.key, data.keyIndex); + await setSharedKey(data.key, data.keyIndex, data.updateCurrentKeyIndex); } else if (data.participantIdentity) { workerLogger.info(`set participant sender key ${data.participantIdentity} index ${data.keyIndex}`); - await getParticipantKeyHandler(data.participantIdentity).setKey(data.key, data.keyIndex); + await getParticipantKeyHandler(data.participantIdentity).setKey( + data.key, + data.keyIndex, + data.updateCurrentKeyIndex, + ); } else { workerLogger.error('no participant Id was provided and shared key usage is disabled'); } @@ -140,17 +165,28 @@ self.addEventListener('message', (ev) => { case 'removeTransform': unsetCryptorParticipant(data.trackId, data.participantIdentity); break; - case 'updateCodec': - getTrackCryptor(data.participantIdentity, data.trackId).setVideoCodec(data.codec); + case 'updateCodec': { + const trackCryptor = getTrackCryptor(data.participantIdentity, data.trackId, data.previousTrackId); + if (data.codec) { + trackCryptor.setVideoCodec(data.codec); + } + trackCryptor.setHasFrameMetadata(data.hasPacketTrailer); workerLogger.info('updated codec', { participantIdentity: data.participantIdentity, trackId: data.trackId, + previousTrackId: data.previousTrackId, codec: data.codec, + hasPacketTrailer: data.hasPacketTrailer, }); + if (data.previousTrackId !== undefined && !trackCryptor.ensureTransform()) { + workerLogger.error('could not re-establish transform for reused sender or receiver', { + participantIdentity: data.participantIdentity, + trackId: data.trackId, + previousTrackId: data.previousTrackId, + }); + } break; - case 'updateTrackContext': - updateTrackContext(data); - break; + } case 'setRTPMap': rtpMap = data.map; participantCryptors.forEach((cr) => { @@ -185,8 +221,22 @@ async function handleRatchetRequest(data: RatchetRequestMessage['data']) { } } -function getTrackCryptor(participantIdentity: string, trackId: string) { - const cryptors = participantCryptors.filter((c) => c.getTrackId() === trackId); +function getTrackCryptor(participantIdentity: string, trackId: string, previousTrackId?: string) { + let cryptors = participantCryptors.filter((c) => c.getTrackId() === trackId); + + if (cryptors.length === 0 && previousTrackId !== undefined && previousTrackId !== trackId) { + const previous = participantCryptors.filter((c) => c.getTrackId() === previousTrackId); + if (previous.length > 0) { + workerLogger.info('reusing cryptor from previous trackId', { + participantIdentity, + trackId, + previousTrackId, + }); + previous[0].setTrackId(trackId); + cryptors = previous; + } + } + if (cryptors.length > 1) { const debugInfo = cryptors .map((c) => { @@ -220,26 +270,6 @@ function getTrackCryptor(participantIdentity: string, trackId: string) { return cryptor; } -function updateTrackContext(data: UpdateTrackContextMessage['data']) { - const cryptor = - participantCryptors.find( - (c) => c.getParticipantIdentity() === data.previousParticipantIdentity && c.getTrackId() === data.previousTrackId, - ) ?? - participantCryptors.find((c) => c.getTrackId() === data.previousTrackId) ?? - participantCryptors.find( - (c) => c.getParticipantIdentity() === data.participantIdentity && c.getTrackId() === data.trackId, - ) ?? - participantCryptors.find((c) => c.getTrackId() === data.trackId); - if (!cryptor) { - workerLogger.warn('could not update cryptor track context', data); - return; - } - if (cryptor.getParticipantIdentity() !== data.participantIdentity) { - cryptor.setParticipant(data.participantIdentity, getParticipantKeyHandler(data.participantIdentity)); - } - cryptor.updateTrackContext(data.trackId, data.codec); -} - function getParticipantKeyHandler(participantIdentity: string) { if (useSharedKey) { return getSharedKeyHandler(); @@ -286,9 +316,9 @@ function setEncryptionEnabled(enable: boolean, participantIdentity: string) { encryptionEnabledMap.set(participantIdentity, enable); } -async function setSharedKey(key: CryptoKey, index?: number) { +async function setSharedKey(key: CryptoKey, index?: number, updateCurrentKeyIndex?: boolean) { workerLogger.info('set shared key', {index}); - await getSharedKeyHandler().setKey(key, index); + await getSharedKeyHandler().setKey(key, index, updateCurrentKeyIndex); } function setupCryptorErrorEvents(cryptor: FrameCryptor) { @@ -316,22 +346,29 @@ function emitRatchetedKeys(ratchetResult: RatchetResult, participantIdentity: st postMessage(msg); } -function handleSifTrailer(trailer: Uint8Array) { +function handleSifTrailer(trailer: NonSharedUint8Array) { sifTrailer = trailer; participantCryptors.forEach((c) => { c.setSifTrailer(trailer); }); } - if (self.RTCTransformEvent) { - workerLogger.debug('setup transform event'); self.onrtctransform = (event: RTCTransformEvent) => { const transformer = event.transformer; - workerLogger.debug('transformer', transformer); - - const {kind, participantIdentity, trackId, codec} = transformer.options as ScriptTransformOptions; - const cryptor = getTrackCryptor(participantIdentity, trackId); - workerLogger.debug('transform', {codec}); - cryptor.setupTransform(kind, transformer.readable, transformer.writable, trackId, false, codec); + const options = transformer.options as ScriptTransformOptions; + const {kind, participantIdentity, trackId, codec, hasPacketTrailer} = options; + messageQueue.run(async () => { + const cryptor = getTrackCryptor(participantIdentity, trackId); + cryptor.setHasFrameMetadata(hasPacketTrailer); + workerLogger.debug('onrtctransform setup', {participantIdentity, trackId, codec}); + cryptor.setupTransform( + kind, + transformer.readable, + transformer.writable, + trackId, + codec, + kind === 'encode' ? options.packetTrailer : undefined, + ); + }); }; } diff --git a/fluxer_app/pkgs/livekit-client/src/e2ee/worker/naluUtils.ts b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/naluUtils.ts index 2b68a6e46..2df4de149 100644 --- a/fluxer_app/pkgs/livekit-client/src/e2ee/worker/naluUtils.ts +++ b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/naluUtils.ts @@ -1,6 +1,8 @@ // SPDX-FileCopyrightText: 2024 LiveKit, Inc. // // SPDX-License-Identifier: Apache-2.0 +import type {NonSharedUint8Array} from '../../type-polyfills/non-shared-typed-arrays.ts'; + const kH264NaluTypeMask = 0x1f; const kH264SliceClearBytes = 2; const kH265SliceClearBytes = 3; @@ -99,7 +101,7 @@ export interface NALUProcessingResult { requiresNALUProcessing: boolean; } -function detectCodecFromNALUs(data: Uint8Array, naluIndices: Array): DetectedCodec { +function detectCodecFromNALUs(data: NonSharedUint8Array, naluIndices: Array): DetectedCodec { for (const naluIndex of naluIndices) { if (isH264SliceNALU(parseH264NALUType(data[naluIndex]))) return 'h264'; if (isH265SliceNALU(parseH265NALUType(data[naluIndex]))) return 'h265'; @@ -108,7 +110,7 @@ function detectCodecFromNALUs(data: Uint8Array, naluIndices: Array): Det } function findSliceNALUUnencryptedBytes( - data: Uint8Array, + data: NonSharedUint8Array, naluIndices: Array, codec: 'h264' | 'h265', ): number | null { @@ -128,7 +130,7 @@ function findSliceNALUUnencryptedBytes( return null; } -function findNALUIndices(stream: Uint8Array): Array { +function findNALUIndices(stream: NonSharedUint8Array): Array { const result: Array = []; let start = 0, pos = 0, @@ -178,7 +180,10 @@ function findNALUIndices(stream: Uint8Array): Array { return result; } -export function processNALUsForEncryption(data: Uint8Array, knownCodec?: 'h264' | 'h265'): NALUProcessingResult { +export function processNALUsForEncryption( + data: NonSharedUint8Array, + knownCodec?: 'h264' | 'h265', +): NALUProcessingResult { const naluIndices = findNALUIndices(data); const detectedCodec = knownCodec ?? detectCodecFromNALUs(data, naluIndices); diff --git a/fluxer_app/pkgs/livekit-client/src/e2ee/worker/sifPayload.ts b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/sifPayload.ts index 55e63e5ff..a4d54dc72 100644 --- a/fluxer_app/pkgs/livekit-client/src/e2ee/worker/sifPayload.ts +++ b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/sifPayload.ts @@ -2,30 +2,35 @@ // // SPDX-License-Identifier: Apache-2.0 import type {VideoCodec} from '../../index.ts'; +import type {NonSharedUint8Array} from '../../type-polyfills/non-shared-typed-arrays.ts'; -export const VP8KeyFrame8x8: Uint8Array = new Uint8Array([ +export const VP8KeyFrame8x8: NonSharedUint8Array = new Uint8Array([ 0x10, 0x02, 0x00, 0x9d, 0x01, 0x2a, 0x08, 0x00, 0x08, 0x00, 0x00, 0x47, 0x08, 0x85, 0x85, 0x88, 0x85, 0x84, 0x88, 0x02, 0x02, 0x00, 0x0c, 0x0d, 0x60, 0x00, 0xfe, 0xff, 0xab, 0x50, 0x80, ]); -export const H264KeyFrame2x2SPS: Uint8Array = new Uint8Array([ + +export const H264KeyFrame2x2SPS: NonSharedUint8Array = new Uint8Array([ 0x67, 0x42, 0xc0, 0x1f, 0x0f, 0xd9, 0x1f, 0x88, 0x88, 0x84, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0xc8, 0x3c, 0x60, 0xc9, 0x20, ]); -export const H264KeyFrame2x2PPS: Uint8Array = new Uint8Array([0x68, 0x87, 0xcb, 0x83, 0xcb, 0x20]); -export const H264KeyFrame2x2IDR: Uint8Array = new Uint8Array([ + +export const H264KeyFrame2x2PPS: NonSharedUint8Array = new Uint8Array([0x68, 0x87, 0xcb, 0x83, 0xcb, 0x20]); + +export const H264KeyFrame2x2IDR: NonSharedUint8Array = new Uint8Array([ 0x65, 0x88, 0x84, 0x0a, 0xf2, 0x62, 0x80, 0x00, 0xa7, 0xbe, ]); -export const H264KeyFrame2x2: Array = [H264KeyFrame2x2SPS, H264KeyFrame2x2PPS, H264KeyFrame2x2IDR]; -export const OpusSilenceFrame: Uint8Array = new Uint8Array([ + +export const H264KeyFrame2x2: Array = [H264KeyFrame2x2SPS, H264KeyFrame2x2PPS, H264KeyFrame2x2IDR]; + +export const OpusSilenceFrame: NonSharedUint8Array = new Uint8Array([ 0xf8, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ]); - -async function cryptoHash(data: Uint8Array | ArrayBuffer): Promise { - const hashBuffer = await crypto.subtle.digest('SHA-256', data as BufferSource); +async function cryptoHash(data: NonSharedUint8Array | ArrayBuffer): Promise { + const hashBuffer = await crypto.subtle.digest('SHA-256', data); const hashArray = new Uint8Array(hashBuffer); return Array.from(hashArray) .map((b) => b.toString(16).padStart(2, '0')) @@ -40,8 +45,9 @@ export const CryptoHashes = { OpusSilenceFrame: 'aad8d31fc56b2802ca500e58c2fb9d0b29ad71bb7cb52cd6530251eade188988', } as const; -export async function identifySifPayload(data: Uint8Array | ArrayBuffer): Promise { +export async function identifySifPayload(data: NonSharedUint8Array | ArrayBuffer): Promise { const hash = await cryptoHash(data); + switch (hash) { case CryptoHashes.VP8KeyFrame8x8: return 'vp8'; diff --git a/fluxer_app/pkgs/livekit-client/src/e2ee/worker/tsconfig.json b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/tsconfig.json index 92b155cd3..e75d28f34 100644 --- a/fluxer_app/pkgs/livekit-client/src/e2ee/worker/tsconfig.json +++ b/fluxer_app/pkgs/livekit-client/src/e2ee/worker/tsconfig.json @@ -1,6 +1,17 @@ { "extends": "../../../tsconfig.json", "compilerOptions": { - "lib": ["DOM", "DOM.Iterable", "ES2017", "ES2018.Promise", "WebWorker", "ES2021.WeakRef", "DOM.AsyncIterable"] + "lib": [ + "DOM", + "DOM.Iterable", + "ES2017", + "ES2018.Promise", + "WebWorker", + "ES2021.WeakRef", + "DOM.AsyncIterable", + "ES2020.BigInt", + "ES2018.AsyncIterable", + "ES2018.AsyncGenerator" + ] } } diff --git a/fluxer_app/pkgs/livekit-client/src/frameMetadata/FrameMetadataManager.ts b/fluxer_app/pkgs/livekit-client/src/frameMetadata/FrameMetadataManager.ts new file mode 100644 index 000000000..4c13e04dc --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/frameMetadata/FrameMetadataManager.ts @@ -0,0 +1,200 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import type {TrackInfo} from '@livekit/protocol'; +import log from '../logger.ts'; +import {RoomEvent} from '../room/events.ts'; +import type Room from '../room/Room.ts'; +import {FrameMetadataExtractor} from '../room/track/FrameMetadataExtractor.ts'; +import type RemoteTrack from '../room/track/RemoteTrack.ts'; +import RemoteVideoTrack from '../room/track/RemoteVideoTrack.ts'; +import type {PTDecodeMessage, PTUpdateTrackIdMessage, PTWorkerMessage} from './types.ts'; +import {isFrameMetadataSupported, shouldUseFrameMetadataScriptTransform} from './utils.ts'; + +export interface FrameMetadataOptions { + worker: Worker; +} + +export class FrameMetadataManager { + private worker?: Worker; + + private room?: Room; + + private extractors = new Map(); + + private workerPipelines = new Map(); + + constructor(options?: FrameMetadataOptions) { + this.worker = options?.worker; + } + + setup(room: Room) { + if (room === this.room) { + return; + } + this.room = room; + + if (this.worker) { + this.worker.onmessage = this.onWorkerMessage; + this.worker.onerror = this.onWorkerError; + this.worker.postMessage({kind: 'init'}); + } + + room + .on(RoomEvent.TrackSubscribed, (track, pub, _participant) => { + if (track.kind !== 'video') { + return; + } + this.setupReceiver(track as unknown as RemoteVideoTrack, pub.trackInfo); + }) + .on(RoomEvent.TrackUnsubscribed, (track) => { + this.teardownTrack(track); + }) + .on(RoomEvent.Disconnected, () => { + this.cleanup(); + }); + } + + private setupReceiver(track: RemoteVideoTrack, trackInfo?: TrackInfo) { + const receiver = track.receiver; + if (!receiver) { + return; + } + + const hasFeatures = !!trackInfo?.packetTrailerFeatures && trackInfo.packetTrailerFeatures.length > 0; + if (!hasFeatures) { + if (!this.room?.hasE2EESetup) { + this.setupPassthroughReceiver(receiver, track.mediaStreamID); + } + return; + } + + if (!isFrameMetadataSupported(this.worker ? {worker: this.worker} : undefined) && !this.room?.hasE2EESetup) { + log.warn('frame metadata transform not supported; skipping extraction'); + return; + } + + const extractor = new FrameMetadataExtractor(); + const trackId = track.mediaStreamID; + + this.extractors.set(trackId, extractor); + track.frameMetadataExtractor = extractor; + + if (this.room?.hasE2EESetup) { + return; + } + + this.setupWorkerReceiver(receiver, trackId, true); + } + + private setupPassthroughReceiver(receiver: RTCRtpReceiver, trackId: string) { + if (shouldUseFrameMetadataScriptTransform()) { + if ('transform' in receiver) { + receiver.transform = null; + } + return; + } + + if (this.worker && isFrameMetadataSupported({worker: this.worker}) && !this.workerPipelines.has(receiver)) { + this.setupWorkerReceiver(receiver, trackId, false); + return; + } + + if (this.worker && this.workerPipelines.has(receiver)) { + this.setupWorkerReceiver(receiver, trackId, false); + } + } + + private setupWorkerReceiver(receiver: RTCRtpReceiver, newTrackId: string, hasPacketTrailer = true) { + const worker = this.worker; + if (!worker) { + return; + } + + if (shouldUseFrameMetadataScriptTransform()) { + receiver.transform = new RTCRtpScriptTransform(worker, { + kind: 'decode', + trackId: newTrackId, + }); + return; + } + + const existingTrackId = this.workerPipelines.get(receiver); + + if (existingTrackId) { + const msg: PTUpdateTrackIdMessage = { + kind: 'updateTrackId', + data: {oldTrackId: existingTrackId, newTrackId, hasPacketTrailer}, + }; + worker.postMessage(msg); + this.workerPipelines.set(receiver, newTrackId); + return; + } + + if (!('createEncodedStreams' in receiver)) { + log.warn('createEncodedStreams not supported'); + return; + } + + let streams: {readable: ReadableStream; writable: WritableStream}; + try { + // @ts-expect-error — createEncodedStreams is not in standard typings + streams = receiver.createEncodedStreams(); + } catch (err) { + log.warn('failed to create encoded streams', {error: err}); + return; + } + + const msg: PTDecodeMessage = { + kind: 'decode', + data: { + readableStream: streams.readable, + writableStream: streams.writable, + trackId: newTrackId, + hasPacketTrailer, + }, + }; + worker.postMessage(msg, [streams.readable, streams.writable]); + this.workerPipelines.set(receiver, newTrackId); + } + + private teardownTrack(track: RemoteTrack) { + const trackId = track.mediaStreamID; + const extractor = this.extractors.get(trackId); + if (extractor) { + extractor.dispose(); + this.extractors.delete(trackId); + } + + if (track instanceof RemoteVideoTrack) { + track.frameMetadataExtractor = undefined; + } + } + + private cleanup() { + for (const extractor of this.extractors.values()) { + extractor.dispose(); + } + this.extractors.clear(); + this.workerPipelines.clear(); + this.worker?.terminate(); + } + + private onWorkerMessage = (ev: MessageEvent) => { + const msg = ev.data; + if (msg.kind === 'metadata') { + const extractor = this.extractors.get(msg.data.trackId); + if (extractor) { + extractor.storeMetadata(msg.data.rtpTimestamp, msg.data.ssrc, msg.data.metadata); + } + } + }; + + private onWorkerError = (ev: ErrorEvent) => { + log.error('frame metadata worker encountered an error:', {error: ev.error}); + }; +} + +export const PacketTrailerManager = FrameMetadataManager; + +export type PacketTrailerOptions = FrameMetadataOptions; diff --git a/fluxer_app/pkgs/livekit-client/src/frameMetadata/frameMetadata.ts b/fluxer_app/pkgs/livekit-client/src/frameMetadata/frameMetadata.ts new file mode 100644 index 000000000..e3ce12f94 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/frameMetadata/frameMetadata.ts @@ -0,0 +1,268 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import type {FrameMetadata, FrameMetadataPublishOptions} from './types.ts'; +import {hasFrameMetadataPublishOptions} from './utils.ts'; + +export const PACKET_TRAILER_MAGIC = Uint8Array.from([ + 'L'.charCodeAt(0), + 'K'.charCodeAt(0), + 'T'.charCodeAt(0), + 'S'.charCodeAt(0), +]); + +export const PACKET_TRAILER_TIMESTAMP_TAG = 0x01; +export const PACKET_TRAILER_FRAME_ID_TAG = 0x02; +export const PACKET_TRAILER_USER_DATA_TAG = 0x03; +export const PACKET_TRAILER_ENVELOPE_SIZE = 5; + +const TIMESTAMP_TLV_SIZE = 10; +const FRAME_ID_TLV_SIZE = 6; + +export interface ExtractPacketTrailerResult { + data: Uint8Array; + metadata?: FrameMetadata; +} + +export function appendPacketTrailer(data: Uint8Array, userTimestamp: bigint, frameId: number): Uint8Array { + const hasTimestamp = userTimestamp !== BigInt(0); + const hasFrameId = frameId !== 0; + + if (!hasTimestamp && !hasFrameId) { + return data; + } + + const trailerLength = + (hasTimestamp ? TIMESTAMP_TLV_SIZE : 0) + (hasFrameId ? FRAME_ID_TLV_SIZE : 0) + PACKET_TRAILER_ENVELOPE_SIZE; + const result = new Uint8Array(data.length + trailerLength); + let offset = 0; + + result.set(data, offset); + offset += data.length; + + if (hasTimestamp) { + result[offset++] = PACKET_TRAILER_TIMESTAMP_TAG ^ 0xff; + result[offset++] = 8 ^ 0xff; + writeUint64Xor(result, offset, userTimestamp); + offset += 8; + } + + if (hasFrameId) { + result[offset++] = PACKET_TRAILER_FRAME_ID_TAG ^ 0xff; + result[offset++] = 4 ^ 0xff; + writeUint32Xor(result, offset, frameId); + offset += 4; + } + + result[offset++] = trailerLength ^ 0xff; + result.set(PACKET_TRAILER_MAGIC, offset); + + return result; +} + +export function appendPacketTrailerToEncodedFrame( + frame: RTCEncodedVideoFrame, + options: FrameMetadataPublishOptions | undefined, + frameId: number, +): boolean { + if (!hasFrameMetadataPublishOptions(options) || frame.data.byteLength === 0) { + return false; + } + + const userTimestamp = options?.timestamp ? BigInt(Date.now()) * BigInt(1000) : BigInt(0); + const packetTrailerFrameId = options?.frameId ? frameId : 0; + const data = new Uint8Array(frame.data); + const result = appendPacketTrailer(data, userTimestamp, packetTrailerFrameId); + + if (result.byteLength === data.byteLength) { + return false; + } + + frame.data = result.buffer.slice(result.byteOffset, result.byteOffset + result.byteLength) as ArrayBuffer; + return true; +} + +export function extractPacketTrailer(data: ArrayBuffer | Uint8Array): ExtractPacketTrailerResult { + const bytes = data instanceof Uint8Array ? data : new Uint8Array(data); + if (bytes.length < PACKET_TRAILER_ENVELOPE_SIZE) { + return {data: bytes}; + } + + const magicOffset = bytes.length - PACKET_TRAILER_MAGIC.length; + if (!matchesMagic(bytes, magicOffset)) { + return {data: bytes}; + } + + const trailerLength = bytes[bytes.length - PACKET_TRAILER_ENVELOPE_SIZE] ^ 0xff; + if (trailerLength < PACKET_TRAILER_ENVELOPE_SIZE || trailerLength > bytes.length) { + return {data: bytes}; + } + + const trailerStart = bytes.length - trailerLength; + const trailerEnd = bytes.length - PACKET_TRAILER_ENVELOPE_SIZE; + const strippedData = bytes.subarray(0, trailerStart); + let offset = trailerStart; + let foundAny = false; + const metadata: FrameMetadata = { + userTimestamp: BigInt(0), + frameId: 0, + }; + + while (offset + 2 <= trailerEnd) { + const tag = bytes[offset++] ^ 0xff; + const length = bytes[offset++] ^ 0xff; + + if (offset + length > trailerEnd) { + break; + } + + if (tag === PACKET_TRAILER_TIMESTAMP_TAG && length === 8) { + metadata.userTimestamp = readUint64Xor(bytes, offset); + foundAny = true; + } else if (tag === PACKET_TRAILER_FRAME_ID_TAG && length === 4) { + metadata.frameId = readUint32Xor(bytes, offset, length); + foundAny = true; + } else if (tag === PACKET_TRAILER_USER_DATA_TAG) { + const userData = new Uint8Array(length); + for (let index = 0; index < length; index += 1) { + userData[index] = bytes[offset + index] ^ 0xff; + } + metadata.userData = userData; + foundAny = true; + } + + offset += length; + } + + if (!foundAny) { + return {data: bytes}; + } + + return {data: strippedData, metadata}; +} + +function matchesMagic(data: Uint8Array, offset: number) { + for (let index = 0; index < PACKET_TRAILER_MAGIC.length; index += 1) { + if (data[offset + index] !== PACKET_TRAILER_MAGIC[index]) { + return false; + } + } + return true; +} + +function readUint64Xor(data: Uint8Array, offset: number): bigint { + const hi = BigInt( + (((data[offset] ^ 0xff) << 24) | + ((data[offset + 1] ^ 0xff) << 16) | + ((data[offset + 2] ^ 0xff) << 8) | + (data[offset + 3] ^ 0xff)) >>> + 0, + ); + const lo = BigInt( + (((data[offset + 4] ^ 0xff) << 24) | + ((data[offset + 5] ^ 0xff) << 16) | + ((data[offset + 6] ^ 0xff) << 8) | + (data[offset + 7] ^ 0xff)) >>> + 0, + ); + return (hi << BigInt(32)) | lo; +} + +function readUint32Xor(data: Uint8Array, offset: number, length: number) { + let value = 0; + for (let index = 0; index < length; index += 1) { + value = (value << 8) | (data[offset + index] ^ 0xff); + } + return value >>> 0; +} + +function writeUint64Xor(target: Uint8Array, offset: number, value: bigint) { + const hi = Number((value >> BigInt(32)) & BigInt(0xffffffff)); + const lo = Number(value & BigInt(0xffffffff)); + target[offset] = (hi >>> 24) ^ 0xff; + target[offset + 1] = ((hi >>> 16) & 0xff) ^ 0xff; + target[offset + 2] = ((hi >>> 8) & 0xff) ^ 0xff; + target[offset + 3] = (hi & 0xff) ^ 0xff; + target[offset + 4] = (lo >>> 24) ^ 0xff; + target[offset + 5] = ((lo >>> 16) & 0xff) ^ 0xff; + target[offset + 6] = ((lo >>> 8) & 0xff) ^ 0xff; + target[offset + 7] = (lo & 0xff) ^ 0xff; +} + +function writeUint32Xor(target: Uint8Array, offset: number, value: number) { + for (let index = 3; index >= 0; index -= 1) { + target[offset + (3 - index)] = ((value >> (index * 8)) & 0xff) ^ 0xff; + } +} + +export function getFrameRtpTimestamp(frame: RTCEncodedVideoFrame | RTCEncodedAudioFrame): number | undefined { + try { + const metadata = frame.getMetadata() as Record; + if (typeof metadata.rtpTimestamp === 'number') { + return metadata.rtpTimestamp; + } + if (typeof metadata.timestamp === 'number') { + return metadata.timestamp; + } + } catch {} + if (typeof frame.timestamp === 'number') { + return frame.timestamp; + } + return undefined; +} + +export function getFrameSsrc(frame: RTCEncodedVideoFrame | RTCEncodedAudioFrame): number { + try { + const metadata = frame.getMetadata() as Record; + if (typeof metadata.synchronizationSource === 'number') { + return metadata.synchronizationSource; + } + } catch {} + return 0; +} + +export interface FrameMetadataPayload { + trackId: string; + rtpTimestamp: number; + ssrc: number; + metadata: FrameMetadata; +} + +export interface ProcessPacketTrailerResult { + data?: ArrayBuffer; + payload?: FrameMetadataPayload; +} + +export function processPacketTrailer( + frame: RTCEncodedVideoFrame | RTCEncodedAudioFrame, + trackId: string | undefined, +): ProcessPacketTrailerResult { + if (frame.data.byteLength === 0) { + return {}; + } + + const result = extractPacketTrailer(frame.data); + if (!result.metadata) { + return {}; + } + + const strippedData = (result.data.buffer as ArrayBuffer).slice( + result.data.byteOffset, + result.data.byteOffset + result.data.byteLength, + ); + + const rtpTimestamp = getFrameRtpTimestamp(frame); + if (rtpTimestamp === undefined || !trackId) { + return {data: strippedData}; + } + + return { + data: strippedData, + payload: { + trackId, + rtpTimestamp, + ssrc: getFrameSsrc(frame), + metadata: result.metadata, + }, + }; +} diff --git a/fluxer_app/pkgs/livekit-client/src/frameMetadata/types.ts b/fluxer_app/pkgs/livekit-client/src/frameMetadata/types.ts new file mode 100644 index 000000000..d2052ca80 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/frameMetadata/types.ts @@ -0,0 +1,83 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import type {FrameMetadataPayload} from './frameMetadata.ts'; + +export interface FrameMetadata { + userTimestamp: bigint; + frameId: number; + userData?: Uint8Array; +} + +export type PacketTrailerMetadata = FrameMetadata; + +export interface FrameMetadataPublishOptions { + timestamp?: boolean; + frameId?: boolean; +} + +export type PacketTrailerPublishOptions = FrameMetadataPublishOptions; + +export interface PTBaseMessage { + kind: string; + data?: unknown; +} + +export interface PTInitMessage extends PTBaseMessage { + kind: 'init'; +} + +export interface PTInitAck extends PTBaseMessage { + kind: 'initAck'; +} + +export interface PTDecodeMessage extends PTBaseMessage { + kind: 'decode'; + data: { + readableStream: ReadableStream; + writableStream: WritableStream; + trackId: string; + hasPacketTrailer: boolean; + }; +} + +export interface PTEncodeMessage extends PTBaseMessage { + kind: 'encode'; + data: { + readableStream: ReadableStream; + writableStream: WritableStream; + packetTrailer?: FrameMetadataPublishOptions; + }; +} + +export type PTScriptTransformOptions = + | { + kind: 'decode'; + trackId: string; + } + | { + kind: 'encode'; + packetTrailer?: FrameMetadataPublishOptions; + }; + +export interface PTMetadataMessage extends PTBaseMessage { + kind: 'metadata'; + data: FrameMetadataPayload; +} + +export interface PTUpdateTrackIdMessage extends PTBaseMessage { + kind: 'updateTrackId'; + data: { + oldTrackId: string; + newTrackId: string; + hasPacketTrailer: boolean; + }; +} + +export type PTWorkerMessage = + | PTInitMessage + | PTInitAck + | PTDecodeMessage + | PTEncodeMessage + | PTUpdateTrackIdMessage + | PTMetadataMessage; diff --git a/fluxer_app/pkgs/livekit-client/src/frameMetadata/utils.ts b/fluxer_app/pkgs/livekit-client/src/frameMetadata/utils.ts new file mode 100644 index 000000000..c31cb9513 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/frameMetadata/utils.ts @@ -0,0 +1,49 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import {PacketTrailerFeature} from '@livekit/protocol'; +import {isInsertableStreamSupported} from '../e2ee/utils.ts'; +import {isScriptTransformSupportedForWorker} from '../room/utils.ts'; +import type {FrameMetadataOptions} from './FrameMetadataManager.ts'; +import type {FrameMetadataPublishOptions} from './types.ts'; + +export function shouldUseFrameMetadataScriptTransform() { + return isScriptTransformSupportedForWorker(); +} + +export function isFrameMetadataSupported(options?: FrameMetadataOptions) { + return !!options?.worker && (isInsertableStreamSupported() || shouldUseFrameMetadataScriptTransform()); +} + +export function hasFrameMetadataPublishOptions(options?: FrameMetadataPublishOptions): boolean { + return !!(options?.timestamp || options?.frameId); +} + +export function getFrameMetadataFeatures(options?: FrameMetadataPublishOptions): Array { + const features: Array = []; + if (options?.timestamp) { + features.push(PacketTrailerFeature.PTF_USER_TIMESTAMP); + } + if (options?.frameId) { + features.push(PacketTrailerFeature.PTF_FRAME_ID); + } + return features; +} + +export function getFrameMetadataPublishOptions( + features?: Array, +): FrameMetadataPublishOptions | undefined { + if (!features || features.length === 0) { + return undefined; + } + + const options: FrameMetadataPublishOptions = {}; + if (features.includes(PacketTrailerFeature.PTF_USER_TIMESTAMP)) { + options.timestamp = true; + } + if (features.includes(PacketTrailerFeature.PTF_FRAME_ID)) { + options.frameId = true; + } + + return options.timestamp || options.frameId ? options : undefined; +} diff --git a/fluxer_app/pkgs/livekit-client/src/index.ts b/fluxer_app/pkgs/livekit-client/src/index.ts index e3d06b8ec..7502be326 100644 --- a/fluxer_app/pkgs/livekit-client/src/index.ts +++ b/fluxer_app/pkgs/livekit-client/src/index.ts @@ -6,6 +6,9 @@ import {DataPacket_Kind, DisconnectReason, Encryption_Type, SubscriptionError, T import {getLogger, LoggerNames, LogLevel, setLogExtension, setLogLevel} from './logger.ts'; import * as attributes from './room/attribute-typings.ts'; import DefaultReconnectPolicy from './room/DefaultReconnectPolicy.ts'; +import LocalDataTrack from './room/data-track/LocalDataTrack.ts'; +import RemoteDataTrack, {type DataTrackSubscribeOptions} from './room/data-track/RemoteDataTrack.ts'; +import type {RemoteDataTrackPipelineOptions} from './room/data-track/types.ts'; import LocalParticipant from './room/participant/LocalParticipant.ts'; import Participant, { ConnectionQuality, @@ -42,6 +45,7 @@ import { isLocalTrack, isRemoteParticipant, isRemoteTrack, + isSVCCodec, isVideoCodec, isVideoTrack, selectPreferredVideoCodec, @@ -57,12 +61,26 @@ import {getBrowser} from './utils/browserParser.ts'; export type {BaseE2EEManager} from './e2ee/E2eeManager.ts'; export * from './e2ee/index.ts'; +export { + FrameMetadataManager, + type FrameMetadataOptions, + PacketTrailerManager, + type PacketTrailerOptions, +} from './frameMetadata/FrameMetadataManager.ts'; +export type { + FrameMetadata, + FrameMetadataPublishOptions, + PacketTrailerMetadata, + PacketTrailerPublishOptions, +} from './frameMetadata/types.ts'; export * from './options.ts'; export type * from './room/data-stream/incoming/StreamReader.ts'; export type * from './room/data-stream/outgoing/StreamWriter.ts'; +export type {DataTrackFrame} from './room/data-track/frame.ts'; export * from './room/errors.ts'; export * from './room/events.ts'; -export {type PerformRpcParams, RpcError, type RpcInvocationData} from './room/rpc.ts'; +export type {DataChannelKind} from './room/RTCEngine.ts'; +export {type PerformRpcParams, RpcError, type RpcInvocationData} from './room/rpc/index.ts'; export * from './room/token-source/TokenSource.ts'; export * from './room/token-source/types.ts'; export * from './room/track/create.ts'; @@ -72,80 +90,94 @@ export * from './room/track/processor/types.ts'; export * from './room/track/Track.ts'; export * from './room/track/types.ts'; export type { + ByteStreamInfo, ChatMessage, DataPublishOptions, + SendBytesOptions, SendTextOptions, SimulationScenario, TranscriptionSegment, } from './room/types.ts'; +export { + isSerializer, + type Serializer, + type SerializerInput, + type SerializerOutput, + serializers, +} from './utils/serializer.ts'; export * from './version.ts'; +export type { + AudioAnalyserOptions, + AudioReceiverStats, + AudioSenderStats, + DataTrackSubscribeOptions, + ElementInfo, + LiveKitReactNativeInfo, + ParticipantEventCallbacks, + ParticipantTrackPermission, + PublicationEventCallbacks, + ReconnectContext, + ReconnectPolicy, + RemoteDataTrackPipelineOptions, + RoomEventCallbacks, + TextStreamInfo, + VideoReceiverStats, + VideoSenderStats, +}; export { attributes, ConnectionQuality, ConnectionState, CriticalTimers, + compareVersions, + createAudioAnalyser, DataPacket_Kind, - Encryption_Type, DefaultReconnectPolicy, DisconnectReason, + Encryption_Type, + getBrowser, + getEmptyAudioStreamTrack, + getEmptyVideoStreamTrack, + getLogger, + isAudioCodec, + isAudioTrack, + isBrowserSupported, + isLocalParticipant, + isLocalTrack, + isRemoteParticipant, + isRemoteTrack, + isSVCCodec, + isVideoCodec, + isVideoTrack, LocalAudioTrack, + LocalDataTrack, LocalParticipant, LocalTrack, LocalTrackPublication, LocalVideoTrack, - LogLevel, LoggerNames, + LogLevel, + Mutex, Participant, - RemoteAudioTrack, - RemoteParticipant, ParticipantKind, + RemoteAudioTrack, + RemoteDataTrack, + RemoteParticipant, RemoteTrack, RemoteTrackPublication, RemoteVideoTrack, Room, SubscriptionError, - TrackPublication, - TrackType, - compareVersions, - createAudioAnalyser, - getBrowser, - getEmptyAudioStreamTrack, - getEmptyVideoStreamTrack, - getLogger, - isBrowserSupported, + selectPreferredVideoCodec, setLogExtension, setLogLevel, - selectPreferredVideoCodec, - supportsAV1, supportsAdaptiveStream, supportsAudioOutputSelection, + supportsAV1, supportsDynacast, supportsH265, supportsVideoCodec, supportsVP9, - Mutex, - isAudioCodec, - isAudioTrack, - isLocalTrack, - isRemoteTrack, - isVideoCodec, - isVideoTrack, - isLocalParticipant, - isRemoteParticipant, -}; -export type { - AudioAnalyserOptions, - ElementInfo, - LiveKitReactNativeInfo, - TextStreamInfo, - ParticipantTrackPermission, - AudioReceiverStats, - AudioSenderStats, - VideoReceiverStats, - VideoSenderStats, - ReconnectContext, - ReconnectPolicy, - RoomEventCallbacks, - ParticipantEventCallbacks, - PublicationEventCallbacks, + TrackPublication, + TrackType, }; diff --git a/fluxer_app/pkgs/livekit-client/src/logger.ts b/fluxer_app/pkgs/livekit-client/src/logger.ts index 26026c08a..58b515b75 100644 --- a/fluxer_app/pkgs/livekit-client/src/logger.ts +++ b/fluxer_app/pkgs/livekit-client/src/logger.ts @@ -25,6 +25,9 @@ export enum LoggerNames { PCTransport = 'livekit-pc-transport', E2EE = 'lk-e2ee', DataTracks = 'livekit-data-tracks', + Region = 'livekit-region', + ICE = 'livekit-ice', + Stats = 'livekit-stats', } type LogLevelString = keyof typeof LogLevel; @@ -40,17 +43,39 @@ export type StructuredLogger = log.Logger & { getLevel: () => number; }; -const livekitLogger = log.getLogger('livekit'); +export type ContextProvider = () => object | undefined; + +const livekitLogger = log.getLogger(LoggerNames.Default); const livekitLoggers = Object.values(LoggerNames).map((name) => log.getLogger(name)); livekitLogger.setDefaultLevel(LogLevel.info); export default livekitLogger as StructuredLogger; -export function getLogger(name: string) { +export function getLogger(name: string, ctxFn?: ContextProvider) { const logger = log.getLogger(name); logger.setDefaultLevel(livekitLogger.getLevel()); - return logger as StructuredLogger; + if (!ctxFn) { + return logger as StructuredLogger; + } + return wrapWithContext(logger as StructuredLogger, ctxFn); +} + +function wrapWithContext(base: StructuredLogger, ctxFn: ContextProvider): StructuredLogger { + type LogMethod = 'trace' | 'debug' | 'info' | 'warn' | 'error'; + const wrap = (method: LogMethod) => (msg: string, extra?: object) => { + const ctx = ctxFn(); + const merged = ctx || extra ? {...ctx, ...extra} : undefined; + base[method](msg, merged); + }; + + const proxy = Object.create(base) as StructuredLogger; + proxy.trace = wrap('trace'); + proxy.debug = wrap('debug'); + proxy.info = wrap('info'); + proxy.warn = wrap('warn'); + proxy.error = wrap('error'); + return proxy; } export function setLogLevel(level: LogLevel | LogLevelString, loggerName?: LoggerNames) { @@ -89,4 +114,24 @@ export function setLogExtension(extension: LogExtension, logger?: StructuredLogg }); } -export const workerLogger = log.getLogger('lk-e2ee') as StructuredLogger; +export const workerLogger = log.getLogger(LoggerNames.E2EE) as StructuredLogger; + +const workerLogLevelListeners = new Set<(level: LogLevel) => void>(); + +const originalWorkerSetLevel = workerLogger.setLevel.bind(workerLogger); +workerLogger.setLevel = ((level: log.LogLevelDesc, persist?: boolean) => { + originalWorkerSetLevel(level, persist); + const numeric = workerLogger.getLevel() as LogLevel; + workerLogLevelListeners.forEach((cb) => cb(numeric)); +}) as typeof workerLogger.setLevel; + +export function onWorkerLogLevelChanged(cb: (level: LogLevel) => void): () => void { + workerLogLevelListeners.add(cb); + return () => { + workerLogLevelListeners.delete(cb); + }; +} + +export function getWorkerLogLevelListenerCount(): number { + return workerLogLevelListeners.size; +} diff --git a/fluxer_app/pkgs/livekit-client/src/options.ts b/fluxer_app/pkgs/livekit-client/src/options.ts index 8ae64b0f6..75f11d3e7 100644 --- a/fluxer_app/pkgs/livekit-client/src/options.ts +++ b/fluxer_app/pkgs/livekit-client/src/options.ts @@ -2,6 +2,7 @@ // // SPDX-License-Identifier: Apache-2.0 import type {E2EEOptions} from './e2ee/types.ts'; +import type {FrameMetadataOptions} from './frameMetadata/FrameMetadataManager.ts'; import type {ReconnectPolicy} from './room/ReconnectPolicy.ts'; import type { AudioCaptureOptions, @@ -45,9 +46,16 @@ export interface InternalRoomOptions { loggerName?: string; - singlePeerConnection: boolean; + frameMetadata?: FrameMetadataOptions; + packetTrailer?: FrameMetadataOptions; + + singlePeerConnection: boolean; subscriberVideoCodecExclusions?: Array; + dataStream?: RoomDataStreamOptions; +} +export interface RoomDataStreamOptions { + maxPayloadByteLength?: number; } export interface RoomOptions extends Partial {} diff --git a/fluxer_app/pkgs/livekit-client/src/room/PCTransport.test.ts b/fluxer_app/pkgs/livekit-client/src/room/PCTransport.test.ts index 6cefd0617..ead5c7ec3 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/PCTransport.test.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/PCTransport.test.ts @@ -4,10 +4,14 @@ import type {MediaDescription} from 'sdp-transform'; import {describe, expect, it} from 'vitest'; import type {TrackBitrateInfo} from './PCTransport.ts'; -import {appendStartBitrateToFmtp, collectStereoMids, ensureAudioNackAndStereo, ensureOpusFmtp} from './PCTransport.ts'; +import {applyVideoStartBitrate, collectStereoMids, ensureAudioNackAndStereo, ensureOpusFmtp} from './PCTransport.ts'; -function mediaWithFmtp(entries: Array<{payload: number; config: string}>): MediaDescription { - return {fmtp: entries} as unknown as MediaDescription; +function videoMedia( + trackId: string, + fmtp: Array<{payload: number; config: string}>, + rtp: Array<{payload: number; codec: string}> = [{payload: 96, codec: 'H264'}], +): MediaDescription { + return {type: 'video', msid: `stream ${trackId}`, rtp, fmtp} as unknown as MediaDescription; } function opusMedia(config: string, mid = '0'): MediaDescription { @@ -40,38 +44,56 @@ function opusConfig(media: MediaDescription): string { return media.fmtp.find((fmtp) => fmtp.payload === 109)?.config ?? ''; } -describe('appendStartBitrateToFmtp', () => { - it('appends the start bitrate to a non-SVC codec fmtp line', () => { - const media = mediaWithFmtp([ +describe('applyVideoStartBitrate', () => { + it('adds a start bitrate to a non-SVC codec section', () => { + const media = videoMedia('camera-track', [ {payload: 96, config: 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f'}, ]); - appendStartBitrateToFmtp(media, 96, 2100); + expect(applyVideoStartBitrate(media, 'camera-track', 'H264', 1000)).toBe(96); expect(media.fmtp[0]?.config).toBe( - 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f;x-google-start-bitrate=2100', + 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f;x-google-start-bitrate=900', ); }); + it('caps camera start bitrates but not screen share start bitrates', () => { + const camera = videoMedia('camera-track', [{payload: 96, config: 'profile-level-id=42e01f'}]); + applyVideoStartBitrate(camera, 'camera-track', 'H264', 3000); + expect(camera.fmtp[0]?.config).toBe('profile-level-id=42e01f;x-google-start-bitrate=1000'); + + const screen = videoMedia('screen-track', [{payload: 96, config: 'profile-level-id=42e01f'}]); + applyVideoStartBitrate(screen, 'screen-track', 'H264', 3000, true); + expect(screen.fmtp[0]?.config).toBe('profile-level-id=42e01f;x-google-start-bitrate=2700'); + }); + it('only touches the fmtp line for the matching payload', () => { - const media = mediaWithFmtp([ - {payload: 96, config: 'profile-level-id=42e01f'}, - {payload: 98, config: 'profile-id=0'}, - ]); - appendStartBitrateToFmtp(media, 98, 1400); + const media = videoMedia( + 'screen-track', + [ + {payload: 96, config: 'profile-level-id=42e01f'}, + {payload: 98, config: 'profile-id=0'}, + ], + [ + {payload: 96, codec: 'H264'}, + {payload: 98, codec: 'VP9'}, + ], + ); + applyVideoStartBitrate(media, 'screen-track', 'VP9', 1500, true); expect(media.fmtp[0]?.config).toBe('profile-level-id=42e01f'); - expect(media.fmtp[1]?.config).toBe('profile-id=0;x-google-start-bitrate=1400'); + expect(media.fmtp[1]?.config).toBe('profile-id=0;x-google-start-bitrate=1350'); }); it('never appends a second start bitrate', () => { - const media = mediaWithFmtp([{payload: 96, config: 'profile-level-id=42e01f;x-google-start-bitrate=900'}]); - appendStartBitrateToFmtp(media, 96, 2100); + const media = videoMedia('camera-track', [ + {payload: 96, config: 'profile-level-id=42e01f;x-google-start-bitrate=900'}, + ]); + applyVideoStartBitrate(media, 'camera-track', 'H264', 2000); expect(media.fmtp[0]?.config).toBe('profile-level-id=42e01f;x-google-start-bitrate=900'); }); - it('does nothing without a usable bitrate or a matching payload', () => { - const media = mediaWithFmtp([{payload: 96, config: 'profile-level-id=42e01f'}]); - appendStartBitrateToFmtp(media, 96, 0); - appendStartBitrateToFmtp(media, 96, -1); - appendStartBitrateToFmtp(media, 111, 2100); + it('leaves other tracks and missing codecs alone', () => { + const media = videoMedia('camera-track', [{payload: 96, config: 'profile-level-id=42e01f'}]); + expect(applyVideoStartBitrate(media, 'other-track', 'H264', 2000)).toBeUndefined(); + expect(applyVideoStartBitrate(media, 'camera-track', 'AV1', 2000)).toBe(0); expect(media.fmtp[0]?.config).toBe('profile-level-id=42e01f'); }); }); diff --git a/fluxer_app/pkgs/livekit-client/src/room/PCTransport.ts b/fluxer_app/pkgs/livekit-client/src/room/PCTransport.ts index 40af3bab0..f71e291e9 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/PCTransport.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/PCTransport.ts @@ -3,10 +3,11 @@ // SPDX-License-Identifier: Apache-2.0 import {Mutex} from '@livekit/mutex'; import {EventEmitter} from 'events'; -import type {MediaDescription, SessionDescription} from 'sdp-transform'; +import type {MediaAttributes, MediaDescription, SessionDescription} from 'sdp-transform'; import {parse, write} from 'sdp-transform'; -import {debounce} from 'ts-debounce'; +import type TypedEmitter from 'typed-emitter'; import log, {getLogger, LoggerNames} from '../logger.ts'; +import {debounce} from './debounce.ts'; import {NegotiationError, UnexpectedConnectionState} from './errors.ts'; import type {LoggerOptions} from './types.ts'; import {ddExtensionURI, isFireFox, isSafari, isSVCCodec} from './utils.ts'; @@ -16,40 +17,68 @@ export interface TrackBitrateInfo { transceiver?: RTCRtpTransceiver; codec: string; maxbr: number; + isScreenShare?: boolean; stereo?: boolean; } -const startBitrateFraction = 0.7; +const startBitrateMultiplier = 0.9; + +const maxStartBitrateKbps = 1000; + +const debounceInterval = 20; + const opusMaxAverageBitrateBps = 510000; + const opusPacketTimeMs = 10; + const requiredOpusFmtpParameters = { minptime: '10', useinbandfec: '1', usedtx: '0', }; -const debounceInterval = 20; -export const PCEvents = { - NegotiationStarted: 'negotiationStarted', - NegotiationComplete: 'negotiationComplete', - RTPVideoPayloadTypes: 'rtpVideoPayloadTypes', -} as const; -export function appendStartBitrateToFmtp(media: MediaDescription, codecPayload: number, startBitrate: number): void { - if (startBitrate <= 0) { - return; +export function applyVideoStartBitrate( + media: MediaDescription, + cid: string, + codec: string, + maxbr: number, + isScreenShare = false, +): number | undefined { + if (!media.msid?.includes(cid)) { + return undefined; } - for (const fmtp of media.fmtp) { - if (fmtp.payload !== codecPayload) { - continue; - } + + const codecPayload = media.rtp.find((rtp) => rtp.codec.toUpperCase() === codec.toUpperCase())?.payload ?? 0; + if (codecPayload === 0) { + return 0; + } + + const calculatedStartBitrate = Math.round(maxbr * startBitrateMultiplier); + const startBitrate = isScreenShare ? calculatedStartBitrate : Math.min(calculatedStartBitrate, maxStartBitrateKbps); + + const fmtp = media.fmtp.find((entry) => entry.payload === codecPayload); + if (fmtp) { if (!fmtp.config.includes('x-google-start-bitrate')) { fmtp.config += `;x-google-start-bitrate=${startBitrate}`; } - return; + } else { + media.fmtp.push({ + payload: codecPayload, + config: `x-google-start-bitrate=${startBitrate}`, + }); } + + return codecPayload; } -export default class PCTransport extends EventEmitter { +export const PCEvents = { + NegotiationStarted: 'negotiationStarted', + NegotiationComplete: 'negotiationComplete', + OfferAnswered: 'offerAnswered', + RTPVideoPayloadTypes: 'rtpVideoPayloadTypes', +} as const; + +export default class PCTransport extends (EventEmitter as new () => TypedEmitter) { private _pc: RTCPeerConnection | null; private get pc() { @@ -60,31 +89,58 @@ export default class PCTransport extends EventEmitter { } private config?: RTCConfiguration; + private log = log; + + private iceLog = log; + private loggerOptions: LoggerOptions; + private ddExtID = 0; - private latestOfferId: number = 0; + + latestOfferId: number = 0; + + latestAcknowledgedOfferId: number = 0; + private offerLock: Mutex; + + private pendingInitialOffer?: RTCSessionDescriptionInit; + pendingCandidates: Array = []; + restartingIce: boolean = false; + renegotiate: boolean = false; + trackBitrates: Array = []; + remoteStereoMids: Array = []; + remoteNackMids: Array = []; + excludedVideoDecoderMimeTypes: Set = new Set(); + onOffer?: (offer: RTCSessionDescriptionInit, offerId: number) => void; + onIceCandidate?: (candidate: RTCIceCandidate) => void; + onIceCandidateError?: (ev: Event) => void; + onConnectionStateChange?: (state: RTCPeerConnectionState) => void; + onIceConnectionStateChange?: (state: RTCIceConnectionState) => void; + onSignalingStatechange?: (state: RTCSignalingState) => void; + onDataChannel?: (ev: RTCDataChannelEvent) => void; + onTrack?: (ev: RTCTrackEvent) => void; constructor(config?: RTCConfiguration, loggerOptions: LoggerOptions = {}) { super(); - this.log = getLogger(loggerOptions.loggerName ?? LoggerNames.PCTransport); this.loggerOptions = loggerOptions; + this.log = getLogger(loggerOptions.loggerName ?? LoggerNames.PCTransport, () => this.logContext); + this.iceLog = getLogger(LoggerNames.ICE, () => this.logContext); this.config = config; this._pc = this.createPC(); this.offerLock = new Mutex(); @@ -92,23 +148,36 @@ export default class PCTransport extends EventEmitter { private createPC() { const pc = new RTCPeerConnection(this.config); + pc.onicecandidate = (ev) => { if (!ev.candidate) return; + this.iceLog.debug('local ICE candidate gathered', {candidate: ev.candidate.candidate}); this.onIceCandidate?.(ev.candidate); }; pc.onicecandidateerror = (ev) => { + this.iceLog.debug('ICE candidate error', {event: ev}); this.onIceCandidateError?.(ev); }; + pc.oniceconnectionstatechange = () => { + this.iceLog.debug(`ICE connection state: ${pc.iceConnectionState}`); this.onIceConnectionStateChange?.(pc.iceConnectionState); }; + pc.onsignalingstatechange = () => { + this.log.debug(`signaling state: ${pc.signalingState}`); this.onSignalingStatechange?.(pc.signalingState); }; + pc.onconnectionstatechange = () => { + this.log.debug(`connection state: ${pc.connectionState}`); this.onConnectionStateChange?.(pc.connectionState); }; pc.ondatachannel = (ev) => { + this.log.debug('data channel opened by peer', { + label: ev.channel.label, + id: ev.channel.id, + }); this.onDataChannel?.(ev); }; pc.ontrack = (ev) => { @@ -133,13 +202,15 @@ export default class PCTransport extends EventEmitter { if (this.pc.remoteDescription && !this.restartingIce) { return this.pc.addIceCandidate(candidate); } + this.iceLog.debug('queuing remote ICE candidate until remote description applied', { + pendingCount: this.pendingCandidates.length + 1, + }); this.pendingCandidates.push(candidate); } async setRemoteDescription(sd: RTCSessionDescriptionInit, offerId: number): Promise { if (sd.type === 'answer' && this.latestOfferId > 0 && offerId > 0 && offerId !== this.latestOfferId) { this.log.warn('ignoring answer for old offer', { - ...this.logContext, offerId, latestOfferId: this.latestOfferId, }); @@ -151,6 +222,16 @@ export default class PCTransport extends EventEmitter { this.remoteStereoMids = stereoMids; this.remoteNackMids = nackMids; } else if (sd.type === 'answer') { + if (this.pendingInitialOffer && this._pc) { + const initialOffer = this.pendingInitialOffer; + this.pendingInitialOffer = undefined; + const sdpParsed = parse(initialOffer.sdp ?? ''); + sdpParsed.media.forEach((media) => { + ensureIPAddrMatchVersion(media); + }); + this.log.debug('setting pending initial offer before processing answer'); + await this.setMungedSDP(initialOffer, write(sdpParsed)); + } const sdpParsed = parse(sd.sdp ?? ''); sdpParsed.media.forEach((media) => { const mid = getMidString(media.mid!); @@ -169,14 +250,30 @@ export default class PCTransport extends EventEmitter { } } }); + const placeholderMids = this.getPlaceholderMids(); + if (placeholderMids.size > 0) { + conformBundledCodecFmtp(sdpParsed.media, (media) => placeholderMids.has(getMidString(media.mid!))); + } mungedSDP = write(sdpParsed); } await this.setMungedSDP(sd, mungedSDP, true); + + if (this.pendingCandidates.length > 0) { + this.iceLog.debug('flushing queued ICE candidates', { + count: this.pendingCandidates.length, + }); + } this.pendingCandidates.forEach((candidate) => { this.pc.addIceCandidate(candidate); }); this.pendingCandidates = []; this.restartingIce = false; + + if (sd.type === 'answer') { + this.latestAcknowledgedOfferId = offerId; + this.emit(PCEvents.OfferAnswered, offerId); + } + if (this.renegotiate) { this.renegotiate = false; await this.createAndSendOffer(); @@ -207,35 +304,67 @@ export default class PCTransport extends EventEmitter { } }, debounceInterval); + async createInitialOffer() { + const unlock = await this.offerLock.lock(); + try { + if (this.pc.signalingState !== 'stable') { + this.log.warn('signaling state is not stable, cannot create initial offer'); + return; + } + const offerId = this.latestOfferId + 1; + this.latestOfferId = offerId; + this.applyVideoDecoderCodecExclusions(); + const offer = await this.pc.createOffer(); + this.pendingInitialOffer = {sdp: offer.sdp, type: offer.type}; + const sdpParsed = parse(offer.sdp ?? ''); + sdpParsed.media.forEach((media) => { + ensureIPAddrMatchVersion(media); + }); + offer.sdp = write(sdpParsed); + return {offer, offerId}; + } finally { + unlock(); + } + } + async createAndSendOffer(options?: RTCOfferOptions) { const unlock = await this.offerLock.lock(); + try { if (this.onOffer === undefined) { return; } + if (options?.iceRestart) { - this.log.debug('restarting ICE', this.logContext); + this.iceLog.debug('restarting ICE'); this.restartingIce = true; } - if (this._pc && this._pc.signalingState === 'have-local-offer') { + + if (this._pc && (this._pc.signalingState === 'have-local-offer' || this.pendingInitialOffer)) { const currentSD = this._pc.remoteDescription; if (options?.iceRestart && currentSD) { await this._pc.setRemoteDescription(currentSD); + } else if (options?.iceRestart) { + throw new NegotiationError( + 'ICE restart requested without a remote description, peer connection must be recreated', + ); } else { this.renegotiate = true; - this.log.debug('requesting renegotiation', {...this.logContext}); + this.log.debug('requesting renegotiation'); return; } } else if (!this._pc || this._pc.signalingState === 'closed') { - this.log.warn('could not createOffer with closed peer connection', this.logContext); + this.log.warn('could not createOffer with closed peer connection'); return; } - this.log.debug('starting to negotiate', this.logContext); + + this.log.debug('starting to negotiate'); const offerId = this.latestOfferId + 1; this.latestOfferId = offerId; this.applyVideoDecoderCodecExclusions(); const offer = await this.pc.createOffer(options); - this.log.debug('original offer', {sdp: offer.sdp, ...this.logContext}); + this.log.debug('original offer', {sdp: offer.sdp}); + const sdpParsed = parse(offer.sdp ?? ''); const stereoMids = collectStereoMids(this.trackBitrates, sdpParsed.media); sdpParsed.media.forEach((media) => { @@ -244,34 +373,35 @@ export default class PCTransport extends EventEmitter { ensureAudioNackAndStereo(media, stereoMids, []); } else if (media.type === 'video') { this.trackBitrates.some((trackbr): boolean => { - if (!media.msid || !trackbr.cid || !media.msid.includes(trackbr.cid)) { + if (!trackbr.cid) { return false; } - let codecPayload = 0; - media.rtp.some((rtp): boolean => { - if (rtp.codec.toUpperCase() === trackbr.codec.toUpperCase()) { - codecPayload = rtp.payload; - return true; - } + + const codecPayload = applyVideoStartBitrate( + media, + trackbr.cid, + trackbr.codec, + trackbr.maxbr, + trackbr.isScreenShare, + ); + if (codecPayload === undefined) { return false; - }); - if (codecPayload === 0) { - return true; } - if (isSVCCodec(trackbr.codec) && !isSafari()) { - this.ensureVideoDDExtensionForSVC(media, sdpParsed); + + if (codecPayload > 0 && isSVCCodec(trackbr.codec) && !isSafari()) { + this.ddExtID = ensureVideoDDExtension(media, sdpParsed, this.ddExtID); } - if (trackbr.maxbr <= 0) { - return true; - } - appendStartBitrateToFmtp(media, codecPayload, Math.round(trackbr.maxbr * startBitrateFraction)); + return true; }); } }); + const placeholderMids = this.getPlaceholderMids(); + if (placeholderMids.size > 0) { + conformBundledCodecFmtp(sdpParsed.media, (media) => placeholderMids.has(getMidString(media.mid!))); + } if (this.latestOfferId > offerId) { this.log.warn('latestOfferId mismatch', { - ...this.logContext, latestOfferId: this.latestOfferId, offerId, }); @@ -316,11 +446,15 @@ export default class PCTransport extends EventEmitter { try { transceiver.setCodecPreferences(allowed); } catch (e) { - this.log.warn('failed to set subscriber codec preferences', {...this.logContext, error: e}); + this.log.warn('failed to set subscriber codec preferences', {error: e}); } } } + private getPlaceholderMids(): Set { + return placeholderMidsFromTransceivers(this._pc?.getTransceivers() ?? []); + } + createDataChannel(label: string, dataChannelDict: RTCDataChannelInit) { return this.pc.createDataChannel(label, dataChannelDict); } @@ -397,7 +531,11 @@ export default class PCTransport extends EventEmitter { } getStats() { - return this.pc.getStats(); + return this._pc?.getStats(); + } + + getMaxMessageSize() { + return this._pc?.sctp?.maxMessageSize; } async getConnectedAddress(): Promise { @@ -425,6 +563,7 @@ export default class PCTransport extends EventEmitter { default: } }); + if (selectedCandidatePairId === '') { return undefined; } @@ -439,6 +578,8 @@ export default class PCTransport extends EventEmitter { if (!this._pc) { return; } + this.log.debug('closing peer connection'); + this.pendingInitialOffer = undefined; this._pc.close(); this._pc.onconnectionstatechange = null; this._pc.oniceconnectionstatechange = null; @@ -455,11 +596,11 @@ export default class PCTransport extends EventEmitter { }; private async setMungedSDP(sd: RTCSessionDescriptionInit, munged?: string, remote?: boolean) { + const originalSdp = sd.sdp; if (munged) { - const originalSdp = sd.sdp; sd.sdp = munged; try { - this.log.debug(`setting munged ${remote ? 'remote' : 'local'} description`, this.logContext); + this.log.debug(`setting munged ${remote ? 'remote' : 'local'} description`); if (remote) { await this.pc.setRemoteDescription(sd); } else { @@ -468,18 +609,19 @@ export default class PCTransport extends EventEmitter { return; } catch (e) { this.log.warn(`not able to set ${sd.type}, falling back to unmodified sdp`, { - ...this.logContext, error: e, - sdp: munged, + mungedSdp: munged, + originalSdp, }); sd.sdp = originalSdp; } } + try { if (remote) { - await this.pc.setRemoteDescription(sd); + await this._pc?.setRemoteDescription(sd); } else { - await this.pc.setLocalDescription(sd); + await this._pc?.setLocalDescription(sd); } } catch (e) { let msg = 'unknown error'; @@ -488,58 +630,92 @@ export default class PCTransport extends EventEmitter { } else if (typeof e === 'string') { msg = e; } + const fields: { error: string; sdp?: string; + mungedSdp?: string; remoteSdp?: RTCSessionDescription | null; } = { error: msg, sdp: sd.sdp, }; + if (munged && munged !== originalSdp) { + fields.mungedSdp = munged; + } if (!remote && this.pc.remoteDescription) { fields.remoteSdp = this.pc.remoteDescription; } - this.log.error(`unable to set ${sd.type}`, {...this.logContext, fields}); + this.log.error(`unable to set ${sd.type}`, {fields}); throw new NegotiationError(msg); } } +} - private ensureVideoDDExtensionForSVC( - media: { - type: string; - port: number; - protocol: string; - payloads?: string | undefined; - } & MediaDescription, - sdp: SessionDescription, - ) { - const ddFound = media.ext?.some((ext): boolean => { - if (ext.uri === ddExtensionURI) { - return true; - } - return false; +export function ensureVideoDDExtension( + media: { + type: string; + port: number; + protocol: string; + payloads?: string | undefined; + } & MediaDescription, + sdp: SessionDescription, + ddExtID: number, +): number { + const id = ddExtensionIDFor(sdp, ddExtID); + if (id === undefined) { + return ddExtID; + } + + if (!media.ext?.some((ext) => ext.uri === ddExtensionURI)) { + media.ext ??= []; + media.ext.push({ + value: id, + uri: ddExtensionURI, }); - if (!ddFound) { - if (this.ddExtID === 0) { - let maxID = 0; - sdp.media.forEach((m) => { - if (m.type !== 'video') { - return; - } - m.ext?.forEach((ext) => { - if (ext.value > maxID) { - maxID = ext.value; - } - }); - }); - this.ddExtID = maxID + 1; - } - media.ext?.push({ - value: this.ddExtID, - uri: ddExtensionURI, - }); + } + return id; +} + +function ddExtensionIDFor(sdp: SessionDescription, cachedID: number): number | undefined { + const mapped = mappedExtensionID(sdp, ddExtensionURI); + if (mapped !== undefined) { + return usedForOtherURI(sdp, mapped, ddExtensionURI) ? undefined : mapped; + } + if (cachedID !== 0 && !usedForOtherURI(sdp, cachedID, ddExtensionURI)) { + return cachedID; + } + return unusedExtensionID(sdp); +} + +function mappedExtensionID(sdp: SessionDescription, uri: string): number | undefined { + for (const media of sdp.media) { + const ext = media.ext?.find((candidate) => candidate.uri === uri); + if (ext) { + return ext.value; } } + return undefined; +} + +function usedForOtherURI(sdp: SessionDescription, id: number, uri: string): boolean { + return sdp.media.some((media) => media.ext?.some((ext) => ext.value === id && ext.uri !== uri)); +} + +function unusedExtensionID(sdp: SessionDescription): number { + let maxID = 0; + sdp.media.forEach((media) => { + media.ext?.forEach((ext) => { + if (ext.value > maxID) { + maxID = ext.value; + } + }); + }); + return maxID + 1 === 15 ? 16 : maxID + 1; +} + +export function fmtpConfigHasParam(config: string, param: string): boolean { + return config.split(';').some((entry) => entry.trim() === param); } function getCodecPayload(media: MediaDescription, codec: string): number { @@ -626,6 +802,7 @@ export function ensureAudioNackAndStereo( if (!media.rtcpFb) { media.rtcpFb = []; } + if (nackMids.includes(mid) && !media.rtcpFb.some((fb) => fb.payload === opusPayload && fb.type === 'nack')) { media.rtcpFb.push({ payload: opusPayload, @@ -661,7 +838,51 @@ export function collectStereoMids( return stereoMids; } -function extractStereoAndNackAudioFromOffer(offer: RTCSessionDescriptionInit): { +export function placeholderMidsFromTransceivers(transceivers: ReadonlyArray): Set { + const mids = new Set(); + for (const transceiver of transceivers) { + if (transceiver.mid && !transceiver.sender.track) { + mids.add(transceiver.mid); + } + } + return mids; +} + +export function conformBundledCodecFmtp( + media: Array, + isPlaceholder: (media: MediaDescription) => boolean, +) { + const canonicalByPayload = new Map(); + const fromRealSection = new Set(); + for (const m of media) { + const placeholder = isPlaceholder(m); + for (const fmtp of m.fmtp ?? []) { + if (!placeholder) { + canonicalByPayload.set(fmtp.payload, fmtp.config); + fromRealSection.add(fmtp.payload); + } else if (!canonicalByPayload.has(fmtp.payload)) { + canonicalByPayload.set(fmtp.payload, fmtp.config); + } + } + } + if (canonicalByPayload.size === 0) { + return; + } + + for (const m of media) { + if (!isPlaceholder(m)) { + continue; + } + for (const fmtp of m.fmtp ?? []) { + const config = canonicalByPayload.get(fmtp.payload); + if (config !== undefined && fmtp.config !== config) { + fmtp.config = config; + } + } + } +} + +export function extractStereoAndNackAudioFromOffer(offer: RTCSessionDescriptionInit): { stereoMids: Array; nackMids: Array; } { @@ -673,18 +894,20 @@ function extractStereoAndNackAudioFromOffer(offer: RTCSessionDescriptionInit): { const mid = getMidString(media.mid!); if (media.type === 'audio') { media.rtp.some((rtp): boolean => { - if (rtp.codec === 'opus') { + if (rtp.codec.toLowerCase() === 'opus') { opusPayload = rtp.payload; return true; } return false; }); + if (media.rtcpFb?.some((fb) => fb.payload === opusPayload && fb.type === 'nack')) { nackMids.push(mid); } + media.fmtp.some((fmtp): boolean => { if (fmtp.payload === opusPayload) { - if (fmtp.config.includes('sprop-stereo=1')) { + if (fmtpConfigHasParam(fmtp.config, 'sprop-stereo=1')) { stereoMids.push(mid); } return true; @@ -709,3 +932,10 @@ function ensureIPAddrMatchVersion(media: MediaDescription) { function getMidString(mid: string | number) { return typeof mid === 'number' ? mid.toFixed(0) : mid; } + +type PCTransportEventCallbacks = { + negotiationStarted: () => void; + negotiationComplete: () => void; + offerAnswered: (offerId: number) => void; + rtpVideoPayloadTypes: (attributes: MediaAttributes['rtp']) => void; +}; diff --git a/fluxer_app/pkgs/livekit-client/src/room/PCTransportManager.ts b/fluxer_app/pkgs/livekit-client/src/room/PCTransportManager.ts index 968c68308..ca56d04d8 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/PCTransportManager.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/PCTransportManager.ts @@ -5,6 +5,7 @@ import {Mutex} from '@livekit/mutex'; import {SignalTarget} from '@livekit/protocol'; import log, {getLogger, LoggerNames} from '../logger.ts'; import TypedPromise from '../utils/TypedPromise.ts'; +import type {Throws} from '../utils/throws.ts'; import {roomConnectOptionDefaults} from './defaults.ts'; import {ConnectionError, NegotiationError} from './errors.ts'; import PCTransport, {PCEvents} from './PCTransport.ts'; @@ -36,7 +37,6 @@ function describeIceCandidateErrorEvent(event: Event) { port: typeof candidateError.port === 'number' ? candidateError.port : undefined, }; } - export class PCTransportManager { public publisher: PCTransport; @@ -82,6 +82,8 @@ export class PCTransportManager { private log = log; + private iceLog = log; + private loggerOptions: LoggerOptions; private _mode: PCMode; @@ -91,15 +93,15 @@ export class PCTransportManager { get mode(): PCMode { return this._mode; } - constructor( - rtcConfig: RTCConfiguration, mode: PCMode, loggerOptions: LoggerOptions, + rtcConfig?: RTCConfiguration, subscriberVideoCodecExclusions?: Array, ) { - this.log = getLogger(loggerOptions.loggerName ?? LoggerNames.PCManager); this.loggerOptions = loggerOptions; + this.log = getLogger(loggerOptions.loggerName ?? LoggerNames.PCManager, () => this.logContext); + this.iceLog = getLogger(LoggerNames.ICE, () => this.logContext); this.isPublisherConnectionRequired = mode !== 'subscriber-primary'; this.isSubscriberConnectionRequired = mode === 'subscriber-primary'; @@ -233,7 +235,7 @@ export class PCTransportManager { publisher.removeTrack(sender); } } catch (e) { - this.log.warn('could not removeTrack', {...this.logContext, error: e}); + this.log.warn('could not removeTrack', {error: e}); } } } @@ -243,15 +245,14 @@ export class PCTransportManager { async triggerIceRestart() { this.seenIceCandidateErrorKeys.clear(); - if (this.subscriber) { - this.subscriber.restartingIce = true; - } + this.iceLog.warn('triggering ICE restart'); if (this.needsPublisher) { await this.createAndSendPublisherOffer({iceRestart: true}); } } async addIceCandidate(candidate: RTCIceCandidateInit, target: SignalTarget) { + this.iceLog.debug('adding remote ICE candidate', {target, candidate}); if (target === SignalTarget.PUBLISHER) { await this.publisher.addIceCandidate(candidate); } else { @@ -261,7 +262,6 @@ export class PCTransportManager { async createSubscriberAnswerFromOffer(sd: RTCSessionDescriptionInit, offerId: number) { this.log.debug('received server offer', { - ...this.logContext, RTCSdpType: sd.type, sdp: sd.sdp, signalingState: this.subscriber?.getSignallingState().toString(), @@ -281,6 +281,7 @@ export class PCTransportManager { } updateConfiguration(config: RTCConfiguration, iceRestart?: boolean) { + this.log.debug('updating rtc configuration', {iceRestart}); this.publisher.setConfiguration(config); this.subscriber?.setConfiguration(config); if (iceRestart) { @@ -296,7 +297,7 @@ export class PCTransportManager { this.publisher.getConnectionState() !== 'connected' && this.publisher.getConnectionState() !== 'connecting' ) { - this.log.debug('negotiation required, start negotiating', this.logContext); + this.log.debug('negotiation required, start negotiating'); this.publisher.negotiate(); } await Promise.all( @@ -307,42 +308,46 @@ export class PCTransportManager { } } - async negotiate(abortController: AbortController) { - return new TypedPromise(async (resolve, reject) => { - let negotiationTimeout = setTimeout(() => { - reject(new NegotiationError('negotiation timed out')); - }, this.peerConnectionTimeout); + async negotiate(abortController: AbortController): Promise> { + return new TypedPromise((resolve, reject) => { + const checkpoint = this.publisher.latestOfferId; + if (this.publisher.latestAcknowledgedOfferId > checkpoint) { + this.log.debug(`negotiation already handled in more recent acknowledged offer`, this.logContext); + resolve(); + return; + } + + let cleanedUp = false; const cleanup = () => { - clearTimeout(negotiationTimeout); - this.publisher.off(PCEvents.NegotiationStarted, onNegotiationStarted); - abortController.signal.removeEventListener('abort', abortHandler); + if (cleanedUp) return; + cleanedUp = true; + clearTimeout(deadlineTimer); + this.publisher.off(PCEvents.OfferAnswered, onAnswered); + abortController.signal.removeEventListener('abort', onAbort); }; - const abortHandler = () => { + const onAnswered = (offerId: number) => { + if (offerId > checkpoint) { + cleanup(); + resolve(); + } + }; + + const onAbort = () => { cleanup(); reject(new NegotiationError('negotiation aborted')); }; - const onNegotiationStarted = () => { - if (abortController.signal.aborted) { - return; - } - clearTimeout(negotiationTimeout); - negotiationTimeout = setTimeout(() => { - cleanup(); - reject(new NegotiationError('negotiation timed out')); - }, this.peerConnectionTimeout); - }; - - abortController.signal.addEventListener('abort', abortHandler); - this.publisher.on(PCEvents.NegotiationStarted, onNegotiationStarted); - this.publisher.once(PCEvents.NegotiationComplete, () => { + const deadlineTimer = setTimeout(() => { cleanup(); - resolve(); - }); + reject(new NegotiationError('negotiation timed out')); + }, this.peerConnectionTimeout); - await this.publisher.negotiate((e) => { + abortController.signal.addEventListener('abort', onAbort); + this.publisher.on(PCEvents.OfferAnswered, onAnswered); + + this.publisher.negotiate((e) => { cleanup(); if (e instanceof Error) { reject(e); @@ -367,6 +372,10 @@ export class PCTransportManager { return matchingTransceiver?.mid; } + getMaxPublisherMessageSize() { + return this.publisher.getMaxMessageSize(); + } + addPublisherTrack(track: MediaStreamTrack) { return this.publisher.addTrack(track); } @@ -414,10 +423,7 @@ export class PCTransportManager { } if (previousState !== this.state) { - this.log.debug( - `pc state change: from ${PCTransportState[previousState]} to ${PCTransportState[this.state]}`, - this.logContext, - ); + this.log.debug(`pc state change: from ${PCTransportState[previousState]} to ${PCTransportState[this.state]}`); this.onStateChange?.(this.state, this.publisher.getConnectionState(), this.subscriber?.getConnectionState()); } }; @@ -448,7 +454,7 @@ export class PCTransportManager { reject(error); }; const abortHandler = () => { - this.log.warn('abort transport connection', this.logContext); + this.log.warn('abort transport connection'); rejectOnce(ConnectionError.cancelled('room connection has been cancelled')); }; if (abortController?.signal.aborted) { diff --git a/fluxer_app/pkgs/livekit-client/src/room/RTCEngine.ts b/fluxer_app/pkgs/livekit-client/src/room/RTCEngine.ts index 0fd79b9c6..28df91ebf 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/RTCEngine.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/RTCEngine.ts @@ -11,7 +11,8 @@ import { DataChannelReceiveState, DataPacket, DataPacket_Kind, - type DisconnectReason, + type DataTrackSubscriberHandles, + DisconnectReason, EncryptedPacket, EncryptedPacketPayload, Encryption_Type, @@ -20,13 +21,17 @@ import { LeaveRequest_Action, type MediaSectionsRequirement, type ParticipantInfo, + ConnectionQuality as ProtoConnectionQuality, + PublishDataTrackResponse, ReconnectReason, type ReconnectResponse, + type RegionSettings, type RequestResponse, type Room as RoomModel, type RoomMovedResponse, RpcAck, - RpcResponse, + type ServerInfo, + type SessionDescription, SignalTarget, type SpeakerInfo, type StreamStateUpdate, @@ -38,6 +43,7 @@ import { type TrackPublishedResponse, type TrackUnpublishedResponse, type Transcription, + type UnpublishDataTrackResponse, UpdateSubscription, type UserPacket, } from '@livekit/protocol'; @@ -47,17 +53,29 @@ import type TypedEventEmitter from 'typed-emitter'; import type {SignalOptions} from '../api/SignalClient.ts'; import {SignalClient, SignalConnectionState, toProtoSessionDescription} from '../api/SignalClient.ts'; import type {BaseE2EEManager} from '../e2ee/E2eeManager.ts'; -import {asEncryptablePacket} from '../e2ee/utils.ts'; +import {asEncryptablePacket, isInsertableStreamSupported} from '../e2ee/utils.ts'; +import { + hasFrameMetadataPublishOptions, + isFrameMetadataSupported, + shouldUseFrameMetadataScriptTransform, +} from '../frameMetadata/utils.ts'; import log, {getLogger, LoggerNames} from '../logger.ts'; import type {InternalRoomOptions} from '../options.ts'; -import {DataPacketBuffer} from '../utils/dataPacketBuffer.ts'; +import type {NonSharedUint8Array} from '../type-polyfills/non-shared-typed-arrays.ts'; import TypedPromise from '../utils/TypedPromise.ts'; import {TTLMap} from '../utils/ttlmap.ts'; +import {DataChannelManager} from './data-channel/DataChannelManager.ts'; +import type {FlowControlledDataChannel} from './data-channel/FlowControlledDataChannel.ts'; +import type {LossyDataChannel} from './data-channel/LossyDataChannel.ts'; +import type {ReliableDataChannel} from './data-channel/ReliableDataChannel.ts'; +import {DataChannelKind} from './data-channel/types.ts'; +import {DataTrackInfo} from './data-track/types.ts'; import {roomConnectOptionDefaults} from './defaults.ts'; import { ConnectionError, ConnectionErrorReason, NegotiationError, + PublishDataError, SignalReconnectError, TrackInvalidError, UnexpectedConnectionState, @@ -67,8 +85,6 @@ import type PCTransport from './PCTransport.ts'; import {PCEvents} from './PCTransport.ts'; import {PCTransportManager, PCTransportState} from './PCTransportManager.ts'; import type {ReconnectContext, ReconnectPolicy} from './ReconnectPolicy.ts'; -import {DEFAULT_MAX_AGE_MS, type RegionUrlProvider} from './RegionUrlProvider.ts'; -import type {RpcError} from './rpc.ts'; import CriticalTimers, {type TimerHandle} from './timers.ts'; import type LocalTrack from './track/LocalTrack.ts'; import type LocalTrackPublication from './track/LocalTrackPublication.ts'; @@ -79,15 +95,26 @@ import type RemoteTrackPublication from './track/RemoteTrackPublication.ts'; import type {Track} from './track/Track.ts'; import {getTrackPublicationInfo} from './track/utils.ts'; import type {LoggerOptions} from './types.ts'; -import {isVideoCodec, isVideoTrack, isWeb, sleep, supportsAddTrack, supportsTransceiver, toHttpUrl} from './utils.ts'; +import { + isPublisherOfferWithJoinSupported, + isReactNative, + isVideoCodec, + isVideoTrack, + isWeb, + negotiateDependencyDescriptor, + sleep, + supportsAddTrack, + supportsTransceiver, + toHttpUrl, +} from './utils.ts'; -const lossyDataChannel = '_lossy'; -const reliableDataChannel = '_reliable'; const minReconnectWait = 2 * 1000; const leaveReconnect = 'leave-reconnect'; + +const connectionQualityLostTimeout = 10 * 1000; const reliabeReceiveStateTTL = 30_000; -const lossyDataChannelBufferThresholdMin = 8 * 1024; -const lossyDataChannelBufferThresholdMax = 256 * 1024; +const initialMediaSectionsAudio = 3; +const initialMediaSectionsVideo = 3; const videoCodecMimeTypes: Record> = { av1: ['video/av1', 'video/av1x'], h265: ['video/h265'], @@ -107,6 +134,10 @@ enum PCState { Closed, } +export {DataChannelKind}; + +const DEFAULT_MAX_MESSAGE_SIZE = 64_000; + export default class RTCEngine extends (EventEmitter as new () => TypedEventEmitter) { client: SignalClient; @@ -128,19 +159,26 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit return this._isClosed; } + get isNewlyCreated() { + return this._isNewlyCreated; + } + get pendingReconnect() { return !!this.reconnectTimeout; } - - private lossyDC?: RTCDataChannel; - - private lossyDCSub?: RTCDataChannel; - - private reliableDC?: RTCDataChannel; - - private dcBufferStatus: Map; - - private reliableDCSub?: RTCDataChannel; + get serverVersion(): string | undefined { + return this.latestJoinResponse?.serverInfo?.version || this.latestJoinResponse?.serverVersion || undefined; + } + private dataChannels: DataChannelManager; + private get reliableChannel(): ReliableDataChannel { + return this.dataChannels.reliable; + } + private get lossyChannel(): LossyDataChannel { + return this.dataChannels.lossy; + } + private get dataTrackChannel(): LossyDataChannel { + return this.dataChannels.dataTrack; + } private subscriberPrimary: boolean = false; @@ -148,6 +186,8 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit private _isClosed: boolean = true; + private _isNewlyCreated: boolean = true; + private pendingTrackResolvers: { [key: string]: {resolve: (info: TrackInfo) => void; reject: () => void}; } = {}; @@ -182,7 +222,9 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit private shouldFailNext: boolean = false; - private regionUrlProvider?: RegionUrlProvider; + private shouldFailOnV1Path: boolean = false; + + private regionStrategy?: RegionStrategy; private log = log; @@ -190,27 +232,19 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit private publisherConnectionPromise: Promise | undefined; - private reliableDataSequence: number = 1; - - private reliableMessageBuffer = new DataPacketBuffer(); - private reliableReceivedState: TTLMap = new TTLMap(reliabeReceiveStateTTL); - private lossyDataStatCurrentBytes: number = 0; - - private lossyDataStatByterate: number = 0; - - private lossyDataStatInterval: TimerHandle | undefined; - - private lossyDataDropCount: number = 0; - private midToTrackId: {[key: string]: string} = {}; private isWaitingForNetworkReconnect: boolean = false; + private lostQualityTimeout?: TimerHandle; + + private transportConnectingSince?: number; + constructor(private options: InternalRoomOptions) { super(); - this.log = getLogger(options.loggerName ?? LoggerNames.Engine); + this.log = getLogger(options.loggerName ?? LoggerNames.Engine, () => this.logContext); this.loggerOptions = { loggerName: options.loggerName, loggerContextCb: () => this.logContext, @@ -220,13 +254,21 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.reconnectPolicy = this.options.reconnectPolicy; this.closingLock = new Mutex(); this.dataProcessLock = new Mutex(); - this.dcBufferStatus = new Map([ - [DataPacket_Kind.LOSSY, true], - [DataPacket_Kind.RELIABLE, true], - ]); + this.dataChannels = new DataChannelManager({ + isEngineClosed: () => this.isClosed, + isReconnecting: () => this.attemptingReconnect, + onDataMessage: (message) => this.handleDataMessage(message), + onDataTrackMessage: (message) => this.handleDataTrackMessage(message), + onDataError: (event) => this.handleDataError(event), + onChannelClose: (kind) => this.handleDataChannelClose(kind)(), + onBufferStatusChanged: (kind, isLow) => this.emit(EngineEvent.DCBufferStatusChanged, isLow, kind), + }); this.client.onParticipantUpdate = (updates) => this.emit(EngineEvent.ParticipantUpdate, updates); - this.client.onConnectionQuality = (update) => this.emit(EngineEvent.ConnectionQualityUpdate, update); + this.client.onConnectionQuality = (update) => { + this.handleLocalConnectionQuality(update); + this.emit(EngineEvent.ConnectionQualityUpdate, update); + }; this.client.onRoomUpdate = (update) => this.emit(EngineEvent.RoomUpdate, update); this.client.onSubscriptionError = (resp) => this.emit(EngineEvent.SubscriptionError, resp); this.client.onSubscriptionPermissionUpdate = (update) => @@ -234,6 +276,8 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.client.onSpeakersChanged = (update) => this.emit(EngineEvent.SpeakersChanged, update); this.client.onStreamStateUpdate = (update) => this.emit(EngineEvent.StreamStateChanged, update); this.client.onRequestResponse = (response) => this.emit(EngineEvent.SignalRequestResponse, response); + this.client.onParticipantUpdate = (updates) => this.emit(EngineEvent.ParticipantUpdate, updates); + this.client.onJoined = (joinResponse) => this.emit(EngineEvent.Joined, joinResponse); } get logContext() { @@ -241,7 +285,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit room: this.latestJoinResponse?.room?.name, roomID: this.latestJoinResponse?.room?.sid, participant: this.latestJoinResponse?.participant?.identity, - pID: this.participantSid, + participantID: this.participantSid, }; } @@ -251,7 +295,8 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit opts: SignalOptions, abortSignal?: AbortSignal, useV0Path: boolean = false, - ): Promise { + ): Promise<{joinResponse: JoinResponse; serverInfo: Partial}> { + this._isNewlyCreated = false; this.url = url; this.token = token; this.signalOpts = opts; @@ -260,37 +305,78 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.joinAttempts += 1; this.setupSignalClientCallbacks(); - const joinResponse = await this.client.join(url, token, opts, abortSignal, useV0Path); - this._isClosed = false; - this.latestJoinResponse = joinResponse; + const sendOfferWithJoin = !useV0Path && isPublisherOfferWithJoinSupported(); - this.subscriberPrimary = joinResponse.subscriberPrimary; - if (!this.pcManager) { - await this.configure(joinResponse, !useV0Path); + let offerProto: SessionDescription | undefined; + if (sendOfferWithJoin) { + if (!this.pcManager) { + await this.configure(); + this.applyInitialPublisherLayout(); + } + const offer = await this.pcManager?.publisher.createInitialOffer(); + if (offer) { + offerProto = toProtoSessionDescription(offer.offer, offer.offerId); + } } - if (!this.subscriberPrimary || joinResponse.fastPublish) { - this.negotiate().catch((err) => { - log.error(err, this.logContext); - }); + if (abortSignal?.aborted) { + throw ConnectionError.cancelled('Connection aborted'); + } + + if (!useV0Path && this.shouldFailOnV1Path) { + this.shouldFailOnV1Path = false; + throw ConnectionError.serviceNotFound('Simulated v1 path failure', 'v0-rtc'); + } + const joinResponse = await this.client.join(url, token, opts, abortSignal, useV0Path, offerProto); + this._isClosed = false; + this.latestJoinResponse = joinResponse; + this.participantSid = joinResponse.participant?.sid; + + this.subscriberPrimary = joinResponse.subscriberPrimary; + if (sendOfferWithJoin) { + this.pcManager?.updateConfiguration(this.makeRTCConfiguration(joinResponse)); + } else { + if (!this.pcManager) { + await this.configure(joinResponse, !useV0Path); + if (!useV0Path) { + this.applyInitialPublisherLayout(); + } + } + if (!this.subscriberPrimary || joinResponse.fastPublish) { + this.negotiate().catch((err) => { + this.log.error(err); + }); + } } this.registerOnLineListener(); this.clientConfiguration = joinResponse.clientConfiguration; this.emit(EngineEvent.SignalConnected, joinResponse); - return joinResponse; + + let serverInfo: Partial | undefined = joinResponse.serverInfo; + if (!serverInfo) { + serverInfo = {version: joinResponse.serverVersion, region: joinResponse.serverRegion}; + } + this.log.info( + `connected to Livekit Server ${Object.entries(serverInfo) + .map(([key, value]) => `${key}: ${value}`) + .join(', ')}`, + ); + + return {joinResponse, serverInfo}; } catch (e) { if (e instanceof ConnectionError) { if (e.reason === ConnectionErrorReason.ServerUnreachable) { - this.log.warn( - `Couldn't connect to server, attempt ${this.joinAttempts} of ${this.maxJoinAttempts}`, - this.logContext, - ); + this.log.warn(`Couldn't connect to server, attempt ${this.joinAttempts} of ${this.maxJoinAttempts}`); if (this.joinAttempts < this.maxJoinAttempts) { return this.join(url, token, opts, abortSignal, useV0Path); } } else if (e.reason === ConnectionErrorReason.ServiceNotFound) { this.log.warn(`Initial connection failed: ${e.message} – Retrying`); + if (this.pcManager) { + this.pcManager.onStateChange = undefined; + await this.cleanupPeerConnections(); + } return this.join(url, token, opts, abortSignal, true); } } @@ -298,7 +384,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit } } - async close() { + async close(reason?: string) { const unlock = await this.closingLock.lock(); if (this.isClosed) { unlock(); @@ -311,55 +397,36 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.removeAllListeners(); this.deregisterOnLineListener(); this.clearPendingReconnect(); + this.clearLostQualityTimeout(); this.cleanupLossyDataStats(); await this.cleanupPeerConnections(); - await this.cleanupClient(); + await this.cleanupClient(reason); } finally { unlock(); } } async cleanupPeerConnections() { + this.dataChannels.teardown(); + await this.pcManager?.close(); this.pcManager = undefined; + this.transportConnectingSince = undefined; - const dcCleanup = (dc: RTCDataChannel | undefined) => { - if (!dc) return; - dc.close(); - dc.onbufferedamountlow = null; - dc.onclose = null; - dc.onclosing = null; - dc.onerror = null; - dc.onmessage = null; - dc.onopen = null; - }; - dcCleanup(this.lossyDC); - dcCleanup(this.lossyDCSub); - dcCleanup(this.reliableDC); - dcCleanup(this.reliableDCSub); - - this.lossyDC = undefined; - this.lossyDCSub = undefined; - this.reliableDC = undefined; - this.reliableDCSub = undefined; - this.reliableMessageBuffer = new DataPacketBuffer(); - this.reliableDataSequence = 1; this.reliableReceivedState.clear(); } cleanupLossyDataStats() { - this.lossyDataStatByterate = 0; - this.lossyDataStatCurrentBytes = 0; - if (this.lossyDataStatInterval) { - CriticalTimers.clearInterval(this.lossyDataStatInterval); - this.lossyDataStatInterval = undefined; - } - this.lossyDataDropCount = 0; + this.lossyChannel.stopThresholdTuning(); } - async cleanupClient() { - await this.client.close(); + async cleanupClient(reason?: string) { + await this.client.close(true, reason); this.client.resetCallbacks(); + for (const cid of Object.keys(this.pendingTrackResolvers)) { + this.pendingTrackResolvers[cid].reject(); + } + this.pendingTrackResolvers = {}; } addTrack(req: AddTrackRequest): Promise { @@ -367,17 +434,17 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit throw new TrackInvalidError('a track with the same ID has already been published'); } return new Promise((resolve, reject) => { - const publicationTimeout = setTimeout(() => { + const publicationTimeout = CriticalTimers.setTimeout(() => { delete this.pendingTrackResolvers[req.cid]; reject(ConnectionError.timeout('publication of local track timed out, no response from server')); }, 10_000); this.pendingTrackResolvers[req.cid] = { resolve: (info: TrackInfo) => { - clearTimeout(publicationTimeout); + CriticalTimers.clearTimeout(publicationTimeout); resolve(info); }, reject: () => { - clearTimeout(publicationTimeout); + CriticalTimers.clearTimeout(publicationTimeout); reject(new Error('Cancelled publication by calling unpublish')); }, }; @@ -397,7 +464,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.pcManager!.removeTrack(sender); return true; } catch (e: unknown) { - this.log.warn('failed to remove track', {...this.logContext, error: e}); + this.log.warn('failed to remove track', {error: e}); } return false; } @@ -407,36 +474,43 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit } get dataSubscriberReadyState(): string | undefined { - return this.reliableDCSub?.readyState; + return this.dataChannelForKind(DataChannelKind.RELIABLE, true)?.readyState; } async getConnectedServerAddress(): Promise { return this.pcManager?.getConnectedAddress(); } - setRegionUrlProvider(provider: RegionUrlProvider) { - this.regionUrlProvider = provider; + setRegionStrategy(strategy: RegionStrategy | undefined) { + this.regionStrategy = strategy; } - private async configure(joinResponse: JoinResponse, useSinglePeerConnection: boolean) { + private async configure(joinResponse?: JoinResponse, useSinglePeerConnection?: boolean) { if (this.pcManager && this.pcManager.currentState !== PCTransportState.NEW) { return; } - - this.participantSid = joinResponse.participant?.sid; - - const rtcConfig = this.makeRTCConfiguration(joinResponse); - - this.pcManager = new PCTransportManager( - rtcConfig, - useSinglePeerConnection - ? 'publisher-only' - : joinResponse.subscriberPrimary - ? 'subscriber-primary' - : 'publisher-primary', - this.loggerOptions, - this.options.subscriberVideoCodecExclusions, - ); + if (!joinResponse) { + const rtcConfig = this.makeRTCConfiguration(); + this.pcManager = new PCTransportManager( + 'publisher-only', + this.loggerOptions, + rtcConfig, + this.options.subscriberVideoCodecExclusions, + ); + } else { + this.participantSid = joinResponse.participant?.sid; + const rtcConfig = this.makeRTCConfiguration(joinResponse); + this.pcManager = new PCTransportManager( + useSinglePeerConnection + ? 'publisher-only' + : joinResponse.subscriberPrimary + ? 'subscriber-primary' + : 'publisher-primary', + this.loggerOptions, + rtcConfig, + this.options.subscriberVideoCodecExclusions, + ); + } this.emit(EngineEvent.TransportsCreated, this.pcManager.publisher, this.pcManager.subscriber); @@ -450,7 +524,13 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.pcManager.onDataChannel = this.handleDataChannel; this.pcManager.onStateChange = async (connectionState, publisherState, subscriberState) => { - this.log.debug(`primary PC state changed ${connectionState}`, this.logContext); + this.log.debug(`primary PC state changed ${connectionState}`); + + if (connectionState === PCTransportState.CONNECTING) { + this.transportConnectingSince = Date.now(); + } else { + this.transportConnectingSince = undefined; + } if (['closed', 'disconnected', 'failed'].includes(publisherState)) { this.publisherConnectionPromise = undefined; @@ -459,7 +539,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit const shouldEmit = this.pcState === PCState.New; this.pcState = PCState.Connected; if (shouldEmit) { - this.emit(EngineEvent.Connected, joinResponse); + this.emit(EngineEvent.Connected, this.latestJoinResponse!); } } else if (connectionState === PCTransportState.FAILED) { if (this.pcState === PCState.Connected || this.pcState === PCState.Reconnecting) { @@ -485,10 +565,6 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit if (ev.streams.length === 0) return; this.emit(EngineEvent.MediaTrackAdded, ev.track, ev.streams[0], ev.receiver); }; - - if (!supportOptionalDatachannel(joinResponse.serverInfo?.protocol)) { - this.createDataChannels(); - } } private setupSignalClientCallbacks() { @@ -497,12 +573,13 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit return; } this.log.debug('received server answer', { - ...this.logContext, RTCSdpType: sd.type, sdp: sd.sdp, midToTrackId, }); - this.midToTrackId = midToTrackId; + if (this.pcManager.mode === 'publisher-only') { + this.midToTrackId = midToTrackId; + } await this.pcManager.setPublisherAnswer(sd, offerId); }; @@ -510,7 +587,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit if (!this.pcManager) { return; } - this.log.debug('got ICE candidate from peer', {...this.logContext, candidate, target}); + this.log.debug('got ICE candidate from peer', {candidate, target}); this.pcManager.addIceCandidate(candidate, target); }; @@ -528,15 +605,11 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.client.onLocalTrackPublished = (res: TrackPublishedResponse) => { this.log.debug('received trackPublishedResponse', { - ...this.logContext, cid: res.cid, track: res.track?.sid, }); if (!this.pendingTrackResolvers[res.cid]) { - this.log.error(`missing track resolver for ${res.cid}`, { - ...this.logContext, - cid: res.cid, - }); + this.log.error(`missing track resolver for ${res.cid}`, {cid: res.cid}); return; } const {resolve} = this.pendingTrackResolvers[res.cid]; @@ -554,7 +627,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.client.onTokenRefresh = (token: string) => { this.token = token; - this.regionUrlProvider?.updateToken(token); + this.emit(EngineEvent.TokenRefreshed, token); }; this.client.onRemoteMuteChanged = (trackSid: string, muted: boolean) => { @@ -574,35 +647,38 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit }; this.client.onMediaSectionsRequirement = (requirement: MediaSectionsRequirement) => { - const transceiverInit: RTCRtpTransceiverInit = {direction: 'recvonly'}; - for (let i: number = 0; i < requirement.numAudios; i++) { - this.pcManager?.addPublisherTransceiverOfKind('audio', transceiverInit); - } - for (let i: number = 0; i < requirement.numVideos; i++) { - this.pcManager?.addPublisherTransceiverOfKind('video', transceiverInit); - } - + this.addMediaSections(requirement.numAudios, requirement.numVideos); this.negotiate(); }; + this.client.onPublishDataTrackResponse = (event: PublishDataTrackResponse) => { + this.emit(EngineEvent.PublishDataTrackResponse, event); + }; + + this.client.onUnPublishDataTrackResponse = (event: UnpublishDataTrackResponse) => { + this.emit(EngineEvent.UnPublishDataTrackResponse, event); + }; + + this.client.onDataTrackSubscriberHandles = (event: DataTrackSubscriberHandles) => { + this.emit(EngineEvent.DataTrackSubscriberHandles, event); + }; + this.client.onClose = () => { this.handleDisconnect('signal', ReconnectReason.RR_SIGNAL_DISCONNECTED); }; this.client.onLeave = (leave: LeaveRequest) => { - this.log.debug('client leave request', {...this.logContext, reason: leave?.reason}); - if (leave.regions && this.regionUrlProvider) { - this.log.debug('updating regions', this.logContext); - this.regionUrlProvider.setServerReportedRegions({ - updatedAtInMs: Date.now(), - maxAgeInMs: DEFAULT_MAX_AGE_MS, - regionSettings: leave.regions, - }); + this.log.info(`client leave request received (action=${leave?.action})`, { + reason: leave?.reason, + }); + if (leave.regions) { + this.log.debug('updating regions'); + this.emit(EngineEvent.ServerRegionsReported, leave.regions); } switch (leave.action) { case LeaveRequest_Action.DISCONNECT: this.emit(EngineEvent.Disconnected, leave?.reason); - this.close(); + this.close(`server leave: ${DisconnectReason[leave.reason] ?? leave.reason}`); break; case LeaveRequest_Action.RECONNECT: this.fullReconnectOnNext = true; @@ -617,14 +693,22 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit }; } - private makeRTCConfiguration(serverResponse: JoinResponse | ReconnectResponse): RTCConfiguration { + private makeRTCConfiguration(serverResponse?: JoinResponse | ReconnectResponse): RTCConfiguration { const rtcConfig = {...this.rtcConfig}; - - if (this.signalOpts?.e2eeEnabled) { - this.log.debug('E2EE - setting up transports with insertable streams', this.logContext); + const needsInsertableStreams = + this.signalOpts?.e2eeEnabled || (this.frameMetadataWorker && !shouldUseFrameMetadataScriptTransform()); + if (needsInsertableStreams && isInsertableStreamSupported()) { + this.log.debug('E2EE - setting up transports with insertable streams'); rtcConfig.encodedInsertableStreams = true; } + rtcConfig.sdpSemantics = 'unified-plan'; + rtcConfig.continualGatheringPolicy = 'gather_continually'; + + if (!serverResponse) { + return rtcConfig; + } + if (serverResponse.iceServers && !rtcConfig.iceServers) { const rtcIceServers: Array = []; serverResponse.iceServers.forEach((iceServer) => { @@ -647,90 +731,68 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit rtcConfig.iceTransportPolicy = 'relay'; } - rtcConfig.sdpSemantics = 'unified-plan'; - rtcConfig.continualGatheringPolicy = 'gather_continually'; - return rtcConfig; } + private applyInitialPublisherLayout() { + this.createDataChannels(); + if (!isReactNative()) { + this.addMediaSections(initialMediaSectionsAudio, initialMediaSectionsVideo); + } + } + + private addMediaSections(numAudios: number, numVideos: number) { + const transceiverInit: RTCRtpTransceiverInit = {direction: 'recvonly'}; + for (let i: number = 0; i < numAudios; i++) { + this.pcManager?.addPublisherTransceiverOfKind('audio', transceiverInit); + } + const receivesMedia = this.pcManager?.mode === 'publisher-only'; + for (let i: number = 0; i < numVideos; i++) { + const transceiver = this.pcManager?.addPublisherTransceiverOfKind('video', transceiverInit); + if (receivesMedia && transceiver) { + const negotiated = negotiateDependencyDescriptor(transceiver); + + this.log.debug('dependency descriptor negotiated for received video', {negotiated}); + } + } + } + private createDataChannels() { if (!this.pcManager) { return; } - if (this.lossyDC) { - this.lossyDC.onmessage = null; - this.lossyDC.onerror = null; - } - if (this.reliableDC) { - this.reliableDC.onmessage = null; - this.reliableDC.onerror = null; - } - - this.lossyDC = this.pcManager.createPublisherDataChannel(lossyDataChannel, { - ordered: false, - maxRetransmits: 0, - }); - this.reliableDC = this.pcManager.createPublisherDataChannel(reliableDataChannel, { - ordered: true, - }); - - this.lossyDC.onmessage = this.handleDataMessage; - this.reliableDC.onmessage = this.handleDataMessage; - - this.lossyDC.onerror = this.handleDataError; - this.reliableDC.onerror = this.handleDataError; - - this.lossyDC.bufferedAmountLowThreshold = 65535; - this.reliableDC.bufferedAmountLowThreshold = 65535; - - this.lossyDC.onbufferedamountlow = this.handleBufferedAmountLow; - this.reliableDC.onbufferedamountlow = this.handleBufferedAmountLow; - - this.cleanupLossyDataStats(); - this.lossyDataStatInterval = setInterval(() => { - this.lossyDataStatByterate = this.lossyDataStatCurrentBytes; - this.lossyDataStatCurrentBytes = 0; - - const dc = this.dataChannelForKind(DataPacket_Kind.LOSSY); - if (dc) { - const threshold = this.lossyDataStatByterate / 10; - dc.bufferedAmountLowThreshold = Math.min( - Math.max(threshold, lossyDataChannelBufferThresholdMin), - lossyDataChannelBufferThresholdMax, - ); - } - }, 1000); + this.dataChannels.createPublisherChannels(this.pcManager); } private handleDataChannel = async ({channel}: RTCDataChannelEvent) => { if (!channel) { return; } - if (channel.label === reliableDataChannel) { - this.reliableDCSub = channel; - } else if (channel.label === lossyDataChannel) { - this.lossyDCSub = channel; - } else { - return; + if (this.dataChannels.adoptSubscriberChannel(channel)) { + this.log.debug(`on data channel ${channel.id}, ${channel.label}`); } - this.log.debug(`on data channel ${channel.id}, ${channel.label}`, this.logContext); - channel.onmessage = this.handleDataMessage; }; + private async decodeDataMessage(message: MessageEvent): Promise { + if (message.data instanceof ArrayBuffer) { + return new Uint8Array(message.data); + } + if (message.data instanceof Blob) { + return new Uint8Array(await message.data.arrayBuffer()); + } + this.log.error('unsupported data type', {data: message.data}); + return undefined; + } + private handleDataMessage = async (message: MessageEvent) => { const unlock = await this.dataProcessLock.lock(); try { - let buffer: ArrayBuffer | undefined; - if (message.data instanceof ArrayBuffer) { - buffer = message.data; - } else if (message.data instanceof Blob) { - buffer = await message.data.arrayBuffer(); - } else { - this.log.error('unsupported data type', {...this.logContext, data: message.data}); + const bytes = await this.decodeDataMessage(message); + if (!bytes) { return; } - const dp = DataPacket.fromBinary(new Uint8Array(buffer)); + const dp = DataPacket.fromBinary(bytes); if (dp.sequence > 0 && dp.participantSid !== '') { const lastSeq = this.reliableReceivedState.get(dp.participantSid); @@ -744,15 +806,24 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.emit(EngineEvent.ActiveSpeakersUpdate, dp.value.value.speakers); } else if (dp.value?.case === 'encryptedPacket') { if (!this.e2eeManager) { - this.log.error('Received encrypted packet but E2EE not set up', this.logContext); + this.log.error('Received encrypted packet but E2EE not set up'); + return; + } + let decryptedData: Awaited>; + try { + decryptedData = await this.e2eeManager.handleEncryptedData( + dp.value.value.encryptedValue as NonSharedUint8Array, + dp.value.value.iv as NonSharedUint8Array, + dp.participantIdentity, + dp.value.value.keyIndex, + ); + } catch (err) { + this.log.debug('failed to decrypt data packet', { + error: err, + participantIdentity: dp.participantIdentity, + }); return; } - const decryptedData = await this.e2eeManager?.handleEncryptedData( - dp.value.value.encryptedValue, - dp.value.value.iv, - dp.participantIdentity, - dp.value.value.keyIndex, - ); const decryptedPacket = EncryptedPacketPayload.fromBinary(decryptedData.payload); const newDp = new DataPacket({ value: decryptedPacket.value, @@ -774,39 +845,52 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit } }; + private handleDataTrackMessage = async (message: MessageEvent) => { + const bytes = await this.decodeDataMessage(message); + if (!bytes) { + return; + } + this.emit('dataTrackPacketReceived', bytes); + }; + private handleDataError = (event: Event) => { + if (this._isClosed) { + return; + } + const channel = event.currentTarget as RTCDataChannel; const channelKind = channel.maxRetransmits === 0 ? 'lossy' : 'reliable'; - if (event instanceof ErrorEvent && event.error) { - const {error} = event.error; - this.log.error(`DataChannel error on ${channelKind}: ${event.message}`, { - ...this.logContext, + if (typeof RTCErrorEvent !== 'undefined' && event instanceof RTCErrorEvent && event.error) { + const {error} = event; + this.log.error(`DataChannel error on ${channelKind}: ${error.message}`, { error, + errorDetail: error.errorDetail, + sctpCauseCode: error.sctpCauseCode, }); } else { - this.log.error(`Unknown DataChannel error on ${channelKind}`, {...this.logContext, event}); + this.log.error(`Unknown DataChannel error on ${channelKind}`, {event}); } }; - private handleBufferedAmountLow = (event: Event) => { - const channel = event.currentTarget as RTCDataChannel; - const channelKind = channel.maxRetransmits === 0 ? DataPacket_Kind.LOSSY : DataPacket_Kind.RELIABLE; - - this.updateAndEmitDCBufferStatus(channelKind); + private handleDataChannelClose = (kind: DataChannelKind) => () => { + if (!this._isClosed && this.pcManager?.publisher.getConnectionState() === 'connected') { + this.log.error(`publisher data channel '${DataChannelKind[kind]}' closed unexpectedly`, this.logContext); + } }; async createSender(track: LocalTrack, opts: TrackPublishOptions, encodings?: Array) { + let sender: RTCRtpSender; if (supportsTransceiver()) { - const sender = await this.createTransceiverRTCRtpSender(track, opts, encodings); - return sender; + sender = await this.createTransceiverRTCRtpSender(track, opts, encodings); + } else if (supportsAddTrack()) { + this.log.warn('using add-track fallback'); + sender = await this.createRTCRtpSender(track.mediaStreamTrack); + } else { + throw new UnexpectedConnectionState('Required webRTC APIs not supported on this device'); } - if (supportsAddTrack()) { - this.log.warn('using add-track fallback', this.logContext); - const sender = await this.createRTCRtpSender(track.mediaStreamTrack); - return sender; - } - throw new UnexpectedConnectionState('Required webRTC APIs not supported on this device'); + this.setupFrameMetadataSender(sender, opts); + return sender; } async createSimulcastSender( @@ -815,15 +899,71 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit opts: TrackPublishOptions, encodings?: Array, ) { + let sender: RTCRtpSender | undefined; if (supportsTransceiver()) { - return this.createSimulcastTransceiverSender(track, simulcastTrack, opts, encodings); + sender = await this.createSimulcastTransceiverSender(track, simulcastTrack, opts, encodings); + } else if (supportsAddTrack()) { + this.log.debug('using add-track fallback'); + sender = await this.createRTCRtpSender(track.mediaStreamTrack); + } else { + throw new UnexpectedConnectionState('Cannot stream on this device'); } - if (supportsAddTrack()) { - this.log.debug('using add-track fallback', this.logContext); - return this.createRTCRtpSender(track.mediaStreamTrack); + if (sender) { + this.setupFrameMetadataSender(sender, opts); + } + return sender; + } + + private get frameMetadataWorker(): Worker | undefined { + return (this.options.frameMetadata ?? this.options.packetTrailer)?.worker; + } + + private setupFrameMetadataSender(sender: RTCRtpSender, opts: TrackPublishOptions = {}) { + const worker = this.frameMetadataWorker; + if (!worker || this.signalOpts?.e2eeEnabled) { + return; } - throw new UnexpectedConnectionState('Cannot stream on this device'); + const frameMetadata = opts.frameMetadata ?? opts.packetTrailer; + const hasMetadata = hasFrameMetadataPublishOptions(frameMetadata); + + if (shouldUseFrameMetadataScriptTransform()) { + if (hasMetadata) { + sender.transform = new RTCRtpScriptTransform(worker, { + kind: 'encode', + packetTrailer: frameMetadata, + }); + } + return; + } + + if ( + !isFrameMetadataSupported(this.options.frameMetadata ?? this.options.packetTrailer) || + !('createEncodedStreams' in sender) + ) { + if (hasMetadata) { + this.log.warn('frame metadata transform not supported; skipping write', this.logContext); + } + return; + } + + // @ts-expect-error + const {readable, writable} = sender.createEncodedStreams(); + if (hasMetadata) { + worker.postMessage( + { + kind: 'encode', + data: { + readableStream: readable, + writableStream: writable, + packetTrailer: frameMetadata, + }, + }, + [readable, writable], + ); + } else { + readable.pipeTo(writable); + } } private async createTransceiverRTCRtpSender( @@ -876,7 +1016,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit if (!opts.videoCodec) { return; } - track.setSimulcastTrackSender(opts.videoCodec, transceiver.sender); + await track.setSimulcastTrackSender(opts.videoCodec, transceiver.sender); return transceiver.sender; } @@ -907,18 +1047,15 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit return; } - this.log.warn(`${connection} disconnected`, this.logContext); + this.log.warn(`${connection} disconnected`); if (this.reconnectAttempts === 0) { this.reconnectStart = Date.now(); } const disconnect = (duration: number) => { - this.log.warn( - `could not recover connection after ${this.reconnectAttempts} attempts, ${duration}ms. giving up`, - this.logContext, - ); + this.log.warn(`could not recover connection after ${this.reconnectAttempts} attempts, ${duration}ms. giving up`); this.emit(EngineEvent.Disconnected); - this.close(); + this.close(`gave up reconnecting after ${this.reconnectAttempts} attempts, ${duration}ms`); }; const duration = Date.now() - this.reconnectStart; @@ -935,11 +1072,11 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit delay = 0; } - this.log.debug(`reconnecting in ${delay}ms`, this.logContext); + this.log.debug(`reconnecting in ${delay}ms`); this.clearReconnectTimeout(); - if (this.token && this.regionUrlProvider) { - this.regionUrlProvider.updateToken(this.token); + if (this.token) { + this.emit(EngineEvent.TokenRefreshed, this.token); } this.reconnectTimeout = CriticalTimers.setTimeout( () => this.attemptReconnect(disconnectReason).finally(() => (this.reconnectTimeout = undefined)), @@ -947,14 +1084,69 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit ); }; + private handleLocalConnectionQuality(update: ConnectionQualityUpdate) { + if (!this.participantSid) { + return; + } + const localUpdate = update.updates.find((u) => u.participantSid === this.participantSid); + if (!localUpdate) { + return; + } + if (localUpdate.quality === ProtoConnectionQuality.LOST) { + this.scheduleLostQualityReconnect(); + } else { + this.clearLostQualityTimeout(); + } + } + + private scheduleLostQualityReconnect() { + if (this.lostQualityTimeout) { + return; + } + this.lostQualityTimeout = CriticalTimers.setTimeout(() => { + this.lostQualityTimeout = undefined; + if (this._isClosed || this.pcState !== PCState.Connected || this.attemptingReconnect) { + return; + } + if (!this.hasActivePublisherSenders()) { + return; + } + this.log.warn('local connection quality lost while publishing, triggering full reconnect', this.logContext); + this.fullReconnectOnNext = true; + this.handleDisconnect('connection quality lost', ReconnectReason.RR_PUBLISHER_FAILED); + }, connectionQualityLostTimeout); + } + + private clearLostQualityTimeout() { + if (this.lostQualityTimeout) { + CriticalTimers.clearTimeout(this.lostQualityTimeout); + this.lostQualityTimeout = undefined; + } + } + + private hasActivePublisherSenders(): boolean { + return ( + this.pcManager?.publisher.getSenders().some((sender) => !!sender.track && sender.track.readyState === 'live') ?? + false + ); + } + + reconnect(reason: ReconnectReason = ReconnectReason.RR_UNKNOWN) { + this.fullReconnectOnNext = true; + this.handleDisconnect('reconcile', reason); + } + private async attemptReconnect(reason?: ReconnectReason) { if (this._isClosed) { return; } if (this.attemptingReconnect) { - log.warn('already attempting reconnect, returning early', this.logContext); + this.log.warn('already attempting reconnect, returning early'); return; } + + this.clearLostQualityTimeout(); + if ( this.clientConfiguration?.resumeConnection === ClientConfigSetting.DISABLED || (this.pcManager?.currentState ?? PCTransportState.NEW) === PCTransportState.NEW @@ -962,22 +1154,26 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.fullReconnectOnNext = true; } + const fullReconnect = this.fullReconnectOnNext; + this.fullReconnectOnNext = false; + + let succeeded = false; try { this.attemptingReconnect = true; - if (this.fullReconnectOnNext) { + if (fullReconnect) { await this.restartConnection(); } else { await this.resumeConnection(reason); } this.clearPendingReconnect(); - this.fullReconnectOnNext = false; + succeeded = true; } catch (e) { this.reconnectAttempts += 1; let recoverable = true; if (e instanceof UnexpectedConnectionState) { - this.log.debug('received unrecoverable error', {...this.logContext, error: e}); + this.log.debug('received unrecoverable error', {error: e}); recoverable = false; - } else if (!(e instanceof SignalReconnectError)) { + } else if (fullReconnect || !(e instanceof SignalReconnectError)) { this.fullReconnectOnNext = true; } @@ -988,13 +1184,19 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit `could not recover connection after ${this.reconnectAttempts} attempts, ${ Date.now() - this.reconnectStart }ms. giving up`, - this.logContext, ); this.emit(EngineEvent.Disconnected); - await this.close(); + await this.close( + `gave up reconnecting after ${this.reconnectAttempts} attempts, ${Date.now() - this.reconnectStart}ms`, + ); } } finally { this.attemptingReconnect = false; + + if (succeeded && this.fullReconnectOnNext && !this._isClosed) { + this.log.debug('full reconnect requested during in-progress attempt, dispatching'); + this.handleDisconnect('reconnect'); + } } } @@ -1002,7 +1204,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit try { return this.reconnectPolicy.nextRetryDelayInMs(context); } catch (e) { - this.log.warn('encountered error in reconnect policy', {...this.logContext, error: e}); + this.log.warn('encountered error in reconnect policy', {error: e}); } return null; @@ -1014,7 +1216,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit throw new UnexpectedConnectionState('could not reconnect, url or token not saved'); } - this.log.info(`reconnecting, attempt: ${this.reconnectAttempts}`, this.logContext); + this.log.info(`reconnecting, attempt: ${this.reconnectAttempts}`); this.emit(EngineEvent.Restarting); if (!this.client.isDisconnected) { @@ -1026,16 +1228,18 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit let joinResponse: JoinResponse; try { if (!this.signalOpts) { - this.log.warn('attempted connection restart, without signal options present', this.logContext); + this.log.warn('attempted connection restart, without signal options present'); throw new SignalReconnectError(); } - joinResponse = await this.join( - regionUrl ?? this.url, - this.token, - this.signalOpts, - undefined, - !this.options.singlePeerConnection, - ); + joinResponse = ( + await this.join( + regionUrl ?? this.url, + this.token, + this.signalOpts, + undefined, + !this.options.singlePeerConnection, + ) + ).joinResponse; } catch (e) { if (e instanceof ConnectionError && e.reason === ConnectionErrorReason.NotAllowed) { throw new UnexpectedConnectionState('could not reconnect, token might be expired'); @@ -1057,15 +1261,15 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit throw new SignalReconnectError('Signal connection got severed during reconnect'); } - this.regionUrlProvider?.resetAttempts(); + this.regionStrategy?.resetAttempts(); this.emit(EngineEvent.Restarted); } catch (error) { - const nextRegionUrl = await this.regionUrlProvider?.getNextBestRegionUrl(); + const nextRegionUrl = await this.regionStrategy?.getNextUrl(); if (nextRegionUrl) { await this.restartConnection(nextRegionUrl); return; } else { - this.regionUrlProvider?.resetAttempts(); + this.regionStrategy?.resetAttempts(); throw error; } } @@ -1079,7 +1283,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit throw new UnexpectedConnectionState('publisher and subscriber connections unset'); } - this.log.info(`resuming signal connection, attempt ${this.reconnectAttempts}`, this.logContext); + this.log.info(`resuming signal connection, attempt ${this.reconnectAttempts}`); this.emit(EngineEvent.Resuming); let res: ReconnectResponse | undefined; try { @@ -1089,7 +1293,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit let message = ''; if (error instanceof Error) { message = error.message; - this.log.error(error.message, {...this.logContext, error}); + this.log.error(error.message, {error}); } if (error instanceof ConnectionError && error.reason === ConnectionErrorReason.NotAllowed) { throw new UnexpectedConnectionState('could not reconnect, token might be expired'); @@ -1108,7 +1312,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.latestJoinResponse.serverInfo = res.serverInfo; } } else { - this.log.warn('Did not receive reconnect response', this.logContext); + this.log.warn('Did not receive reconnect response'); } if (this.shouldFailNext) { @@ -1126,12 +1330,18 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.client.setReconnected(); - if (this.reliableDC?.readyState === 'open' && this.reliableDC.id === null) { + const reliableDC = this.dataChannelForKind(DataChannelKind.RELIABLE); + if (reliableDC?.readyState === 'open' && reliableDC.id === null) { this.createDataChannels(); } if (res?.lastMessageSeq) { - this.resendReliableMessagesForResume(res.lastMessageSeq); + this.resendReliableMessagesForResume(res.lastMessageSeq).catch((error) => { + this.log.warn('failed to resend reliable messages after resume', { + ...this.logContext, + error, + }); + }); } this.emit(EngineEvent.Resumed); @@ -1147,7 +1357,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit private async waitForPCReconnected() { this.pcState = PCState.Reconnecting; - this.log.debug('waiting for peer connection to reconnect', this.logContext); + this.log.debug('waiting for peer connection to reconnect'); try { await sleep(minReconnectWait); if (!this.pcManager) { @@ -1180,27 +1390,6 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit }); }; - async publishRpcResponse( - destinationIdentity: string, - requestId: string, - payload: string | null, - error: RpcError | null, - ) { - const packet = new DataPacket({ - destinationIdentities: [destinationIdentity], - kind: DataPacket_Kind.RELIABLE, - value: { - case: 'rpcResponse', - value: new RpcResponse({ - requestId, - value: error ? {case: 'error', value: error.toProto()} : {case: 'payload', value: payload ?? ''}, - }), - }, - }); - - await this.sendDataPacket(packet, DataPacket_Kind.RELIABLE); - } - async publishRpcAck(destinationIdentity: string, requestId: string) { const packet = new DataPacket({ destinationIdentities: [destinationIdentity], @@ -1212,16 +1401,16 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit }), }, }); - await this.sendDataPacket(packet, DataPacket_Kind.RELIABLE); + await this.sendDataPacket(packet, DataChannelKind.RELIABLE); } - async sendDataPacket(packet: DataPacket, kind: DataPacket_Kind) { + async sendDataPacket(packet: DataPacket, kind: Exclude) { await this.ensurePublisherConnected(kind); if (this.e2eeManager?.isDataChannelEncryptionEnabled) { const encryptablePacket = asEncryptablePacket(packet); if (encryptablePacket) { - const encryptedData = await this.e2eeManager.encryptData(encryptablePacket.toBinary()); + const encryptedData = await this.e2eeManager.encryptData(encryptablePacket.toBinary() as NonSharedUint8Array); packet.value = { case: 'encryptedPacket', value: new EncryptedPacket({ @@ -1233,94 +1422,49 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit } } - if (kind === DataPacket_Kind.RELIABLE) { - packet.sequence = this.reliableDataSequence; - this.reliableDataSequence += 1; + if (kind === DataChannelKind.RELIABLE) { + packet.sequence = this.reliableChannel.nextSequence(); + } + const msg = packet.toBinary() as Uint8Array; + const maxPublisherMessageSizeBytes = Math.min( + this.pcManager?.getMaxPublisherMessageSize() ?? DEFAULT_MAX_MESSAGE_SIZE, + DEFAULT_MAX_MESSAGE_SIZE, + ); + if ( + typeof maxPublisherMessageSizeBytes !== 'undefined' && + maxPublisherMessageSizeBytes !== 0 && + msg.byteLength > maxPublisherMessageSizeBytes + ) { + throw new PublishDataError( + `cannot publish data packet larger than ${maxPublisherMessageSizeBytes} bytes (got ${msg.byteLength})`, + ); } - const msg = packet.toBinary(); - - const dc = this.dataChannelForKind(kind); - if (dc) { - if (kind === DataPacket_Kind.RELIABLE) { - await this.waitForBufferStatusLow(kind); - this.reliableMessageBuffer.push({data: msg, sequence: packet.sequence}); - } else { - if (!this.isBufferStatusLow(kind)) { - this.lossyDataDropCount += 1; - if (this.lossyDataDropCount % 100 === 0) { - this.log.warn( - `dropping lossy data channel messages, total dropped: ${this.lossyDataDropCount}`, - this.logContext, - ); - } - return; - } - this.lossyDataStatCurrentBytes += msg.byteLength; - } - - if (this.attemptingReconnect) { - return; - } - - dc.send(new Uint8Array(msg)); + if (kind === DataChannelKind.RELIABLE) { + await this.reliableChannel.send(msg, packet.sequence); + } else { + await this.lossyChannel.send(msg); } + } - this.updateAndEmitDCBufferStatus(kind); + async sendDataTrackFrame(bytes: NonSharedUint8Array) { + await this.ensurePublisherConnected(DataChannelKind.DATA_TRACK_LOSSY); + await this.dataTrackChannel.send(bytes); } private async resendReliableMessagesForResume(lastMessageSeq: number) { - await this.ensurePublisherConnected(DataPacket_Kind.RELIABLE); - const dc = this.dataChannelForKind(DataPacket_Kind.RELIABLE); - if (dc) { - this.reliableMessageBuffer.popToSequence(lastMessageSeq); - this.reliableMessageBuffer.getAll().forEach((msg) => { - dc.send(new Uint8Array(msg.data)); - }); - } - this.updateAndEmitDCBufferStatus(DataPacket_Kind.RELIABLE); + await this.ensurePublisherConnected(DataChannelKind.RELIABLE); + await this.reliableChannel.replay(lastMessageSeq); + } + private flowControlFor(kind: DataChannelKind): FlowControlledDataChannel { + return this.dataChannels.channelFor(kind); } - private updateAndEmitDCBufferStatus = (kind: DataPacket_Kind) => { - if (kind === DataPacket_Kind.RELIABLE) { - const dc = this.dataChannelForKind(kind); - if (dc) { - this.reliableMessageBuffer.alignBufferedAmount(dc.bufferedAmount); - } - } - - const status = this.isBufferStatusLow(kind); - if (typeof status !== 'undefined' && status !== this.dcBufferStatus.get(kind)) { - this.dcBufferStatus.set(kind, status); - this.emit(EngineEvent.DCBufferStatusChanged, status, kind); - } - }; - - private isBufferStatusLow = (kind: DataPacket_Kind): boolean | undefined => { - const dc = this.dataChannelForKind(kind); - if (dc) { - return dc.bufferedAmount <= dc.bufferedAmountLowThreshold; - } - return undefined; - }; - - waitForBufferStatusLow(kind: DataPacket_Kind): TypedPromise { - return new TypedPromise(async (resolve, reject) => { - if (this.isBufferStatusLow(kind)) { - resolve(); - } else { - const onClosing = () => reject(new UnexpectedConnectionState('engine closed')); - this.once(EngineEvent.Closing, onClosing); - while (!this.dcBufferStatus.get(kind)) { - await sleep(10); - } - this.off(EngineEvent.Closing, onClosing); - resolve(); - } - }); + async waitForBufferHeadroom(kind: DataChannelKind) { + return this.flowControlFor(kind).waitForHeadroomWithLock(); } - async ensureDataTransportConnected(kind: DataPacket_Kind, subscriber: boolean = this.subscriberPrimary) { + async ensureDataTransportConnected(kind: DataChannelKind, subscriber: boolean = this.subscriberPrimary) { if (!this.pcManager) { throw new UnexpectedConnectionState('PC manager is closed'); } @@ -1346,7 +1490,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit } if (needNegotiation) { this.negotiate().catch((err) => { - log.error(err, this.logContext); + this.log.error(err); }); } @@ -1368,7 +1512,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit ); } - private async ensurePublisherConnected(kind: DataPacket_Kind) { + private async ensurePublisherConnected(kind: DataChannelKind) { if (!this.publisherConnectionPromise) { this.publisherConnectionPromise = this.ensureDataTransportConnected(kind, false); } @@ -1379,14 +1523,25 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit if (!this.pcManager) { return false; } + const state = this.pcManager.currentState; const allowedConnectionStates: Array = [PCTransportState.CONNECTING, PCTransportState.CONNECTED]; - if (!allowedConnectionStates.includes(this.pcManager.currentState)) { + if (!allowedConnectionStates.includes(state)) { return false; } if (!this.client.ws || this.client.ws.readyState === WebSocket.CLOSED) { return false; } + + if ( + state === PCTransportState.CONNECTING && + this.transportConnectingSince !== undefined && + Date.now() - this.transportConnectingSince > this.peerConnectionTimeout + ) { + this.log.warn('transport stuck in connecting state', this.logContext); + return false; + } + return true; } @@ -1398,7 +1553,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit } this.pcManager.requirePublisher(); - if (this.pcManager.publisher.getTransceivers().length === 0 && !this.lossyDC && !this.reliableDC) { + if (this.pcManager.publisher.getTransceivers().length === 0 && !this.dataChannels.hasPublisherChannels) { this.createDataChannels(); } @@ -1406,7 +1561,7 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit const handleClosed = () => { abortController.abort(); - this.log.debug('engine disconnected while negotiation was ongoing', this.logContext); + this.log.debug('engine disconnected while negotiation was ongoing'); resolve(); return; }; @@ -1416,17 +1571,8 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit } this.on(EngineEvent.Closing, handleClosed); this.on(EngineEvent.Restarting, handleClosed); - - this.pcManager.publisher.once(PCEvents.RTPVideoPayloadTypes, (rtpTypes: MediaAttributes['rtp']) => { - const rtpMap = new Map(); - rtpTypes.forEach((rtp) => { - const codec = rtp.codec.toLowerCase(); - if (isVideoCodec(codec)) { - rtpMap.set(rtp.payload, codec); - } - }); - this.emit(EngineEvent.RTPVideoMapUpdate, rtpMap); - }); + this.pcManager.publisher.off(PCEvents.RTPVideoPayloadTypes, this.onRtpMapAvailable); + this.pcManager.publisher.once(PCEvents.RTPVideoPayloadTypes, this.onRtpMapAvailable); try { await this.pcManager.negotiate(abortController); @@ -1451,29 +1597,17 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit } }); } - - dataChannelForKind(kind: DataPacket_Kind, sub?: boolean): RTCDataChannel | undefined { - if (!sub) { - if (kind === DataPacket_Kind.LOSSY) { - return this.lossyDC; - } - if (kind === DataPacket_Kind.RELIABLE) { - return this.reliableDC; - } - } else { - if (kind === DataPacket_Kind.LOSSY) { - return this.lossyDCSub; - } - if (kind === DataPacket_Kind.RELIABLE) { - return this.reliableDCSub; - } - } - return undefined; + dataChannelForKind(kind: DataChannelKind, sub?: boolean): RTCDataChannel | undefined { + return this.dataChannels.getHandle(kind, sub); } - sendSyncState(remoteTracks: Array, localTracks: Array) { + sendSyncState( + remoteTracks: Array, + localTracks: Array, + localDataTrackInfos: Array, + ) { if (!this.pcManager) { - this.log.warn('sync state cannot be sent without peer connection setup', this.logContext); + this.log.warn('sync state cannot be sent without peer connection setup'); return; } const previousPublisherOffer = this.pcManager.publisher.getLocalDescription(); @@ -1538,6 +1672,9 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit lastSeq: seq, }); }), + publishDataTracks: localDataTrackInfos.map((info) => { + return new PublishDataTrackResponse({info: DataTrackInfo.toProtobuf(info)}); + }), }), ); } @@ -1546,6 +1683,21 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit this.shouldFailNext = true; } + failNextV1Path() { + this.shouldFailOnV1Path = true; + } + + private onRtpMapAvailable = (rtpTypes: MediaAttributes['rtp']) => { + const rtpMap = new Map(); + rtpTypes.forEach((rtp) => { + const codec = rtp.codec.toLowerCase(); + if (isVideoCodec(codec)) { + rtpMap.set(rtp.payload, codec); + } + }); + this.emit(EngineEvent.RTPVideoMapUpdate, rtpMap); + }; + private dataChannelsInfo(): Array { const infos: Array = []; const getInfo = (dc: RTCDataChannel | undefined, target: SignalTarget) => { @@ -1559,10 +1711,10 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit ); } }; - getInfo(this.dataChannelForKind(DataPacket_Kind.LOSSY), SignalTarget.PUBLISHER); - getInfo(this.dataChannelForKind(DataPacket_Kind.RELIABLE), SignalTarget.PUBLISHER); - getInfo(this.dataChannelForKind(DataPacket_Kind.LOSSY, true), SignalTarget.SUBSCRIBER); - getInfo(this.dataChannelForKind(DataPacket_Kind.RELIABLE, true), SignalTarget.SUBSCRIBER); + getInfo(this.dataChannelForKind(DataChannelKind.LOSSY), SignalTarget.PUBLISHER); + getInfo(this.dataChannelForKind(DataChannelKind.RELIABLE), SignalTarget.PUBLISHER); + getInfo(this.dataChannelForKind(DataChannelKind.LOSSY, true), SignalTarget.SUBSCRIBER); + getInfo(this.dataChannelForKind(DataChannelKind.RELIABLE, true), SignalTarget.SUBSCRIBER); return infos; } @@ -1697,7 +1849,7 @@ export type EngineEventCallbacks = { transportsCreated: (publisher: PCTransport, subscriber?: PCTransport) => void; trackSenderAdded: (track: Track, sender: RTCRtpSender) => void; rtpVideoMapUpdate: (rtpMap: Map) => void; - dcBufferStatusChanged: (isLow: boolean, kind: DataPacket_Kind) => void; + dcBufferStatusChanged: (isLow: boolean, kind: DataChannelKind) => void; participantUpdate: (infos: Array) => void; roomUpdate: (room: RoomModel) => void; roomMoved: (room: RoomMovedResponse) => void; @@ -1713,10 +1865,18 @@ export type EngineEventCallbacks = { offline: () => void; signalRequestResponse: (response: RequestResponse) => void; signalConnected: (joinResp: JoinResponse) => void; + publishDataTrackResponse: (event: PublishDataTrackResponse) => void; + unPublishDataTrackResponse: (event: UnpublishDataTrackResponse) => void; + dataTrackSubscriberHandles: (event: DataTrackSubscriberHandles) => void; + dataTrackPacketReceived: (packet: Uint8Array) => void; + joined: (joinResponse: JoinResponse) => void; + tokenRefreshed: (token: string) => void; + serverRegionsReported: (regions: RegionSettings) => void; }; -function supportOptionalDatachannel(protocol: number | undefined): boolean { - return protocol !== undefined && protocol > 13; +export interface RegionStrategy { + getNextUrl(abortSignal?: AbortSignal): Promise; + resetAttempts(): void; } function applyUserDataCompat(newObj: DataPacket, oldObj: UserPacket) { diff --git a/fluxer_app/pkgs/livekit-client/src/room/RegionUrlProvider.ts b/fluxer_app/pkgs/livekit-client/src/room/RegionUrlProvider.ts index d43c38ad0..40fb766f2 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/RegionUrlProvider.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/RegionUrlProvider.ts @@ -3,11 +3,13 @@ // SPDX-License-Identifier: Apache-2.0 import {Mutex} from '@livekit/mutex'; import type {RegionInfo, RegionSettings} from '@livekit/protocol'; -import log from '../logger.ts'; +import {getLogger, LoggerNames} from '../logger.ts'; import {ConnectionError, ConnectionErrorReason} from './errors.ts'; import CriticalTimers, {type TimerHandle} from './timers.ts'; import {extractMaxAgeFromRequestHeaders, isCloud} from './utils.ts'; +const log = getLogger(LoggerNames.Region); + export const DEFAULT_MAX_AGE_MS = 5_000; const STOP_REFETCH_DELAY_MS = 30_000; @@ -177,6 +179,9 @@ export class RegionUrlProvider { updateToken(token: string) { this.token = token; + const url = this.getServerUrl(); + const settings = RegionUrlProvider.cache.get(url.hostname); + RegionUrlProvider.scheduleRefetch(this.serverUrl, this.token, settings?.maxAgeInMs ?? DEFAULT_MAX_AGE_MS); } isCloud() { @@ -209,7 +214,7 @@ export class RegionUrlProvider { if (regionsLeft.length > 0) { const nextRegion = regionsLeft[0]; this.attemptedRegions.push(nextRegion); - log.debug(`next region: ${nextRegion.region}`); + log.info(`switching to region: ${nextRegion.region}`, {region: nextRegion.region}); return nextRegion.url; } else { return null; diff --git a/fluxer_app/pkgs/livekit-client/src/room/Room.ts b/fluxer_app/pkgs/livekit-client/src/room/Room.ts index 1bccde93e..81c619ab4 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/Room.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/Room.ts @@ -4,11 +4,12 @@ import {Mutex} from '@livekit/mutex'; import { type ChatMessage as ChatMessageModel, + ClientInfo_Capability, type ConnectionQualityUpdate, type DataPacket, type DataPacket_Kind, DisconnectReason, - type Encryption_Type, + Encryption_Type, type JoinResponse, LeaveRequest, LeaveRequest_Action, @@ -39,15 +40,24 @@ import type TypedEmitter from 'typed-emitter'; import {ensureTrailingSlash} from '../api/utils.ts'; import {type BaseE2EEManager, E2EEManager} from '../e2ee/E2eeManager.ts'; import {EncryptionEvent} from '../e2ee/index.ts'; +import {FrameMetadataManager} from '../frameMetadata/FrameMetadataManager.ts'; +import {isFrameMetadataSupported} from '../frameMetadata/utils.ts'; import log, {getLogger, LoggerNames} from '../logger.ts'; import type {InternalRoomConnectOptions, InternalRoomOptions, RoomConnectOptions, RoomOptions} from '../options.ts'; +import type {NonSharedUint8Array} from '../type-polyfills/non-shared-typed-arrays.ts'; import {getBrowser} from '../utils/browserParser.ts'; import TypedPromise from '../utils/TypedPromise.ts'; +import {CLIENT_PROTOCOL_DEFAULT} from '../version.ts'; import {BackOffStrategy} from './BackOffStrategy.ts'; import DeviceManager from './DeviceManager.ts'; import IncomingDataStreamManager from './data-stream/incoming/IncomingDataStreamManager.ts'; import type {ByteStreamHandler, TextStreamHandler} from './data-stream/incoming/StreamReader.ts'; import OutgoingDataStreamManager from './data-stream/outgoing/OutgoingDataStreamManager.ts'; +import IncomingDataTrackManager from './data-track/incoming/IncomingDataTrackManager.ts'; +import type LocalDataTrack from './data-track/LocalDataTrack.ts'; +import OutgoingDataTrackManager from './data-track/outgoing/OutgoingDataTrackManager.ts'; +import type RemoteDataTrack from './data-track/RemoteDataTrack.ts'; +import {DataTrackInfo, type DataTrackSid} from './data-track/types.ts'; import { audioDefaults, publishDefaults, @@ -58,12 +68,19 @@ import { import {ConnectionError, ConnectionErrorReason, UnexpectedConnectionState, UnsupportedServer} from './errors.ts'; import {EngineEvent, ParticipantEvent, RoomEvent, TrackEvent} from './events.ts'; import LocalParticipant from './participant/LocalParticipant.ts'; -import type Participant from './participant/Participant.ts'; -import {type ConnectionQuality, ParticipantKind} from './participant/Participant.ts'; +import Participant, {type ConnectionQuality, ParticipantKind} from './participant/Participant.ts'; import RemoteParticipant from './participant/RemoteParticipant.ts'; -import {RegionUrlProvider} from './RegionUrlProvider.ts'; -import RTCEngine from './RTCEngine.ts'; -import {byteLength, MAX_PAYLOAD_BYTES, RpcError, type RpcInvocationData} from './rpc.ts'; +import {DEFAULT_MAX_AGE_MS, RegionUrlProvider} from './RegionUrlProvider.ts'; +import RTCEngine, {DataChannelKind, type RegionStrategy} from './RTCEngine.ts'; +import { + RPC_REQUEST_DATA_STREAM_TOPIC, + RPC_RESPONSE_DATA_STREAM_TOPIC, + RpcClientManager, + RpcError, + type RpcInvocationData, + RpcServerManager, +} from './rpc/index.ts'; +import {summarizeStatsReport} from './statsSummary.ts'; import CriticalTimers, {type TimerHandle} from './timers.ts'; import LocalAudioTrack from './track/LocalAudioTrack.ts'; import type LocalTrack from './track/LocalTrack.ts'; @@ -79,12 +96,14 @@ import type {ChatMessage, SimulationOptions, SimulationScenario, TranscriptionSe import { createDummyVideoStreamTrack, extractChatMessage, + extractTrackSid, extractTranscriptionSegments, Future, getDisconnectReasonFromConnectionError, getEmptyAudioStreamTrack, isBrowserSupported, isCloud, + isCompressionStreamSupported, isLocalAudioTrack, isLocalParticipant, isReactNative, @@ -108,15 +127,14 @@ export enum ConnectionState { } const CONNECTION_RECONCILE_FREQUENCY_MS = 4 * 1000; - -type RoomEventArguments = RoomEventArgumentMap[E]; - +type RoomEventArguments = Parameters; type BufferedRoomEvent = { [E in keyof RoomEventCallbacks]: { event: E; args: RoomEventArguments; }; }[keyof RoomEventCallbacks]; +const STATS_LOG_FREQUENCY_MS = 30 * 1000; class Room extends (EventEmitter as new () => TypedEmitter) { state: ConnectionState = ConnectionState.Disconnected; @@ -152,8 +170,10 @@ class Room extends (EventEmitter as new () => TypedEmitter) private disconnectLock: Mutex; private e2eeManager: BaseE2EEManager | undefined; - + private frameMetadataManager: FrameMetadataManager | undefined; + private e2eeStateMutex: Mutex = new Mutex(); private connectionReconcileInterval?: TimerHandle; + private statsLogInterval?: TimerHandle; private regionUrlProvider?: RegionUrlProvider; @@ -162,18 +182,26 @@ class Room extends (EventEmitter as new () => TypedEmitter) private isVideoPlaybackBlocked: boolean = false; private log = log; - + private statsLog = log; private bufferedEvents: Array = []; private isResuming: boolean = false; + private pendingTrackAddedCallbacks = new Map void>>(); + private transcriptionReceivedTimes: Map; private incomingDataStreamManager: IncomingDataStreamManager; private outgoingDataStreamManager: OutgoingDataStreamManager; - private rpcHandlers: Map Promise> = new Map(); + private incomingDataTrackManager: IncomingDataTrackManager; + + private outgoingDataTrackManager: OutgoingDataTrackManager; + + private rpcClientManager: RpcClientManager; + + private rpcServerManager: RpcServerManager; get hasE2EESetup(): boolean { return this.e2eeManager !== undefined; @@ -186,7 +214,8 @@ class Room extends (EventEmitter as new () => TypedEmitter) this.sidToIdentity = new Map(); this.options = {...roomOptionDefaults, ...options}; - this.log = getLogger(this.options.loggerName ?? LoggerNames.Room); + this.log = getLogger(this.options.loggerName ?? LoggerNames.Room, () => this.logContext); + this.statsLog = getLogger(LoggerNames.Stats, () => this.logContext); this.transcriptionReceivedTimes = new Map(); this.options.audioCaptureDefaults = { @@ -204,25 +233,96 @@ class Room extends (EventEmitter as new () => TypedEmitter) this.maybeCreateEngine(); - this.incomingDataStreamManager = new IncomingDataStreamManager(); - this.outgoingDataStreamManager = new OutgoingDataStreamManager(this.engine, this.log); + this.incomingDataStreamManager = new IncomingDataStreamManager(this.options.dataStream?.maxPayloadByteLength); + this.outgoingDataStreamManager = new OutgoingDataStreamManager( + this.engine, + this.log, + this.getRemoteParticipantClientProtocol, + this.getRemoteParticipantCapabilities, + this.getAllRemoteParticipantIdentities, + ); + + this.incomingDataTrackManager = new IncomingDataTrackManager({e2eeManager: this.e2eeManager}); + this.incomingDataTrackManager + .on('sfuUpdateSubscription', (event) => { + this.engine.client.sendUpdateDataSubscription(event.sid, event.subscribe); + }) + .on('trackPublished', (event) => { + if (event.track.publisherIdentity === this.localParticipant.identity) { + return; + } + this.emit(RoomEvent.DataTrackPublished, event.track); + this.remoteParticipants.get(event.track.publisherIdentity)?.addRemoteDataTrack(event.track); + }) + .on('trackUnpublished', (event) => { + if (event.publisherIdentity === this.localParticipant.identity) { + return; + } + this.emit(RoomEvent.DataTrackUnpublished, event.sid); + this.remoteParticipants.get(event.publisherIdentity)?.removeRemoteDataTrack(event.sid); + }); + + this.outgoingDataTrackManager = new OutgoingDataTrackManager({e2eeManager: this.e2eeManager}); + this.outgoingDataTrackManager + .on('sfuPublishRequest', (event) => { + this.engine.client.sendPublishDataTrackRequest(event.handle, event.name, event.usesE2ee); + }) + .on('sfuUnpublishRequest', (event) => { + this.engine.client.sendUnPublishDataTrackRequest(event.handle); + }) + .on('trackPublished', (event) => { + this.emit(RoomEvent.LocalDataTrackPublished, event.track); + }) + .on('trackUnpublished', (event) => { + this.emit(RoomEvent.LocalDataTrackUnpublished, event.sid); + }) + .on('packetAvailable', ({handle, bytes}) => { + this.engine + .sendDataTrackFrame(bytes) + .finally(() => this.outgoingDataTrackManager.handlePacketSendComplete(handle)); + }); + + this.registerRpcDataStreamHandler(); + + this.rpcClientManager = new RpcClientManager( + this.log, + this.outgoingDataStreamManager, + this.getRemoteParticipantClientProtocol, + () => this.engine?.serverVersion, + ); + this.rpcClientManager.on('sendDataPacket', ({packet}) => { + this.engine?.sendDataPacket(packet, DataChannelKind.RELIABLE); + }); + this.rpcServerManager = new RpcServerManager( + this.log, + this.outgoingDataStreamManager, + this.getRemoteParticipantClientProtocol, + ); + this.rpcServerManager.on('sendDataPacket', ({packet}) => { + this.engine?.sendDataPacket(packet, DataChannelKind.RELIABLE); + }); this.disconnectLock = new Mutex(); - this.localParticipant = new LocalParticipant( '', '', this.engine, this.options, - this.rpcHandlers, this.outgoingDataStreamManager, + this.outgoingDataTrackManager, + this.rpcClientManager, + this.rpcServerManager, ); + this.setupFrameMetadata(); + if (this.options.e2ee || this.options.encryption) { this.setupE2EE(); } this.engine.e2eeManager = this.e2eeManager; + this.incomingDataTrackManager.updateE2eeManager(this.e2eeManager ?? null); + this.outgoingDataTrackManager.updateE2eeManager(this.e2eeManager ?? null); if (this.options.videoCaptureDefaults.deviceId) { this.localParticipant.activeDeviceMap.set( @@ -238,22 +338,33 @@ class Room extends (EventEmitter as new () => TypedEmitter) } if (this.options.audioOutput?.deviceId) { this.switchActiveDevice('audiooutput', unwrapConstraint(this.options.audioOutput.deviceId)).catch((e) => - this.log.warn(`Could not set audio output: ${e.message}`, this.logContext), + this.log.warn(`Could not set audio output: ${e.message}`), ); } if (isWeb()) { - const abortController = new AbortController(); - - navigator.mediaDevices?.addEventListener?.('devicechange', this.handleDeviceChange, { - signal: abortController.signal, - }); + const cleanupController = new AbortController(); + let onDeviceChange: () => void; if (Room.cleanupRegistry) { + const roomRef = new WeakRef(this); + onDeviceChange = () => { + const self = roomRef.deref(); + if (!self) { + return; + } + self.handleDeviceChange(); + }; Room.cleanupRegistry.register(this, () => { - abortController.abort(); + cleanupController.abort(); }); + } else { + onDeviceChange = this.handleDeviceChange; } + + navigator.mediaDevices?.addEventListener?.('devicechange', onDeviceChange, { + signal: cleanupController.signal, + }); } } @@ -274,26 +385,29 @@ class Room extends (EventEmitter as new () => TypedEmitter) } registerRpcMethod(method: string, handler: (data: RpcInvocationData) => Promise) { - if (this.rpcHandlers.has(method)) { - throw Error( - `RPC handler already registered for method ${method}, unregisterRpcMethod before trying to register again`, - ); - } - this.rpcHandlers.set(method, handler); + this.rpcServerManager.registerRpcMethod(method, handler); } unregisterRpcMethod(method: string) { - this.rpcHandlers.delete(method); + this.rpcServerManager.unregisterRpcMethod(method); } async setE2EEEnabled(enabled: boolean) { - if (this.e2eeManager) { - await Promise.all([this.localParticipant.setE2EEEnabled(enabled)]); - if (this.localParticipant.identity !== '') { - this.e2eeManager.setParticipantCryptorEnabled(enabled, this.localParticipant.identity); + const unlock = await this.e2eeStateMutex.lock(); + try { + if (this.e2eeManager) { + if (this.isE2EEEnabled !== enabled) { + await this.localParticipant.setE2EEEnabled(enabled); + + if (this.localParticipant.identity !== '') { + this.e2eeManager.setParticipantCryptorEnabled(enabled, this.localParticipant.identity); + } + } + } else { + throw Error('e2ee not configured, please set e2ee settings within the room options'); } - } else { - throw Error('e2ee not configured, please set e2ee settings within the room options'); + } finally { + unlock(); } } @@ -319,15 +433,22 @@ class Room extends (EventEmitter as new () => TypedEmitter) this.emit(RoomEvent.EncryptionError, error, participant); }); this.e2eeManager?.setup(this); + this.e2eeManager?.setupEngine(this.engine); } } + private setupFrameMetadata() { + const opts = this.options.frameMetadata ?? this.options.packetTrailer; + this.frameMetadataManager = new FrameMetadataManager(opts); + this.frameMetadataManager.setup(this); + } + private get logContext() { return { room: this.name, roomID: this.roomInfo?.sid, - participant: this.localParticipant.identity, - pID: this.localParticipant.sid, + participant: this.localParticipant?.identity, + participantID: this.localParticipant?.sid, }; } @@ -374,7 +495,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) } private maybeCreateEngine() { - if (this.engine && !this.engine.isClosed) { + if (this.engine && (this.engine.isNewlyCreated || !this.engine.isClosed)) { return; } @@ -403,7 +524,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) .on(EngineEvent.Resuming, () => { this.clearConnectionReconcile(); this.isResuming = true; - this.log.info('Resuming signal connection', this.logContext); + this.log.debug('Resuming signal connection'); if (this.setAndEmitConnectionState(ConnectionState.SignalReconnecting)) { this.emit(RoomEvent.SignalReconnecting); } @@ -411,20 +532,21 @@ class Room extends (EventEmitter as new () => TypedEmitter) .on(EngineEvent.Resumed, () => { this.registerConnectionReconcile(); this.isResuming = false; - this.log.info('Resumed signal connection', this.logContext); + this.log.debug('Resumed signal connection'); this.updateSubscriptions(); - this.emitBufferedEvents(); if (this.setAndEmitConnectionState(ConnectionState.Connected)) { this.emit(RoomEvent.Reconnected); } + this.emitBufferedEvents(); }) .on(EngineEvent.SignalResumed, () => { - this.bufferedEvents = []; if (this.state === ConnectionState.Reconnecting || this.isResuming) { this.sendSyncState(); } + this.emitBufferedEvents(); }) .on(EngineEvent.Restarting, this.handleRestarting) + .on(EngineEvent.Restarted, this.handleRestarted) .on(EngineEvent.SignalRestarted, this.handleSignalRestarted) .on(EngineEvent.Offline, () => { if (this.setAndEmitConnectionState(ConnectionState.Reconnecting)) { @@ -435,15 +557,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) this.emit(RoomEvent.DCBufferStatusChanged, status, kind); }) .on(EngineEvent.LocalTrackSubscribed, (subscribedSid) => { - const trackPublication = this.localParticipant - .getTrackPublications() - .find(({trackSid}) => trackSid === subscribedSid) as LocalTrackPublication | undefined; - if (!trackPublication) { - this.log.warn('could not find local track subscription for subscribed event', this.logContext); - return; - } - this.localParticipant.emit(ParticipantEvent.LocalTrackSubscribed, trackPublication); - this.emitWhenConnected(RoomEvent.LocalTrackSubscribed, trackPublication, this.localParticipant); + this.handleLocalTrackSubscribed(subscribedSid); }) .on(EngineEvent.RoomMoved, (roomMoved) => { this.log.debug('room moved', roomMoved); @@ -463,6 +577,60 @@ class Room extends (EventEmitter as new () => TypedEmitter) } else { this.handleParticipantUpdates(roomMoved.otherParticipants); } + }) + .on(EngineEvent.PublishDataTrackResponse, (event) => { + if (!event.info) { + this.log.warn(`received PublishDataTrackResponse, but event.info was ${event.info}, so skipping.`); + return; + } + + this.outgoingDataTrackManager.receivedSfuPublishResponse(event.info.pubHandle, { + type: 'ok', + data: { + sid: event.info.sid, + pubHandle: event.info.pubHandle, + name: event.info.name, + usesE2ee: event.info.encryption !== Encryption_Type.NONE, + }, + }); + }) + .on(EngineEvent.UnPublishDataTrackResponse, (event) => { + if (!event.info) { + this.log.warn(`received UnPublishDataTrackResponse, but event.info was ${event.info}, so skipping.`); + return; + } + + this.outgoingDataTrackManager.receivedSfuUnpublishResponse(event.info.pubHandle); + }) + .on(EngineEvent.DataTrackSubscriberHandles, (event) => { + const handleToSidMapping = new Map( + Object.entries(event.subHandles).map(([key, value]) => { + return [parseInt(key, 10), value.trackSid]; + }), + ); + + this.incomingDataTrackManager.receivedSfuSubscriberHandles(handleToSidMapping); + }) + .on(EngineEvent.DataTrackPacketReceived, (packetBytes) => { + this.incomingDataTrackManager.packetReceived(packetBytes); + }) + .on(EngineEvent.Joined, (joinResponse) => { + const mapped = new Map( + joinResponse.otherParticipants.map((participant) => { + return [participant.identity, participant.dataTracks.map((info) => DataTrackInfo.from(info))]; + }), + ); + this.incomingDataTrackManager.receiveSfuPublicationUpdates(mapped); + }) + .on(EngineEvent.TokenRefreshed, (token) => { + this.regionUrlProvider?.updateToken(token); + }) + .on(EngineEvent.ServerRegionsReported, (regions) => { + this.regionUrlProvider?.setServerReportedRegions({ + regionSettings: regions, + updatedAtInMs: Date.now(), + maxAgeInMs: DEFAULT_MAX_AGE_MS, + }); }); if (this.localParticipant) { @@ -476,12 +644,21 @@ class Room extends (EventEmitter as new () => TypedEmitter) } } + private createRegionStrategy(): RegionStrategy { + return { + getNextUrl: async (signal?: AbortSignal) => + this.regionUrlProvider ? this.regionUrlProvider.getNextBestRegionUrl(signal) : null, + resetAttempts: () => this.regionUrlProvider?.resetAttempts(), + }; + } + static getLocalDevices(kind?: MediaDeviceKind, requestPermissions: boolean = true): Promise> { return DeviceManager.getInstance().getDevices(kind, requestPermissions); } static cleanupRegistry = typeof FinalizationRegistry !== 'undefined' && + typeof WeakRef !== 'undefined' && new FinalizationRegistry((cleanup: () => void) => { cleanup(); }); @@ -490,7 +667,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (this.state !== ConnectionState.Disconnected) { return; } - this.log.debug(`prepareConnection to ${url}`, this.logContext); + this.log.debug(`prepareConnection to ${url}`); try { if (isCloud(new URL(url)) && token) { this.regionUrlProvider = new RegionUrlProvider(url, token); @@ -498,13 +675,13 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (regionUrl && this.state === ConnectionState.Disconnected) { this.regionUrl = regionUrl; await fetch(toHttpUrl(regionUrl), {method: 'HEAD'}); - this.log.debug(`prepared connection to ${regionUrl}`, this.logContext); + this.log.debug(`prepared connection to ${regionUrl}`); } } else { await fetch(toHttpUrl(url), {method: 'HEAD'}); } } catch (e) { - this.log.warn('could not prepare connection', {...this.logContext, error: e}); + this.log.warn('could not prepare connection', {error: e}); } } @@ -522,7 +699,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) const unlockDisconnect = await this.disconnectLock.lock(); if (this.state === ConnectionState.Connected) { - this.log.info(`already connected to room ${this.name}`, this.logContext); + this.log.info(`already connected to room ${this.name}`); unlockDisconnect(); return Promise.resolve(); } @@ -549,7 +726,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) this.regionUrlProvider?.setServerReportedRegions(settings); }) .catch((e) => { - this.log.warn('could not fetch region settings', {...this.logContext, error: e}); + this.log.warn('could not fetch region settings', {error: e}); }); } @@ -605,9 +782,8 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (nextUrl && !this.abortController?.signal.aborted) { this.log.info( `Initial connection failed with ConnectionError: ${error.message}. Retrying with another region: ${nextUrl}`, - this.logContext, ); - this.recreateEngine(); + this.recreateEngine(true); await connectFn(resolve, reject, nextUrl); } else { this.handleDisconnect( @@ -649,12 +825,13 @@ class Room extends (EventEmitter as new () => TypedEmitter) roomOptions: InternalRoomOptions, abortController: AbortController, ): Promise => { - const joinResponse = await engine.join( + const {joinResponse, serverInfo} = await engine.join( url, token, { autoSubscribe: connectOptions.autoSubscribe, adaptiveStream: typeof roomOptions.adaptiveStream === 'object' ? true : roomOptions.adaptiveStream, + clientInfoCapabilities: this.getClientInfoCapabilities(roomOptions), maxRetries: connectOptions.maxRetries, e2eeEnabled: !!this.e2eeManager, websocketTimeout: connectOptions.websocketTimeout, @@ -663,29 +840,14 @@ class Room extends (EventEmitter as new () => TypedEmitter) !roomOptions.singlePeerConnection, ); - let serverInfo: Partial | undefined = joinResponse.serverInfo; - if (!serverInfo) { - serverInfo = {version: joinResponse.serverVersion, region: joinResponse.serverRegion}; - } this.serverInfo = serverInfo; - this.log.debug( - `connected to Livekit Server ${Object.entries(serverInfo) - .map(([key, value]) => `${key}: ${value}`) - .join(', ')}`, - { - room: joinResponse.room?.name, - roomSid: joinResponse.room?.sid, - identity: joinResponse.participant?.identity, - }, - ); - if (!serverInfo.version) { throw new UnsupportedServer('unknown server version'); } if (serverInfo.version === '0.15.1' && this.options.dynacast) { - this.log.debug('disabling dynacast due to server version', this.logContext); + this.log.debug('disabling dynacast due to server version'); roomOptions.dynacast = false; } @@ -701,10 +863,9 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (this.e2eeManager) { try { - this.e2eeManager.setSifTrailer(joinResponse.sifTrailer); + this.e2eeManager.setSifTrailer(joinResponse.sifTrailer as NonSharedUint8Array); } catch (e: unknown) { this.log.error(e instanceof Error ? e.message : 'Could not set SifTrailer', { - ...this.logContext, error: e, }); } @@ -724,13 +885,13 @@ class Room extends (EventEmitter as new () => TypedEmitter) abortController: AbortController, ) => { if (this.state === ConnectionState.Reconnecting || this.isResuming || this.engine?.pendingReconnect) { - this.log.info('Reconnection attempt replaced by new connection attempt', this.logContext); - this.recreateEngine(); + this.log.info('Reconnection attempt replaced by new connection attempt'); + this.recreateEngine(true); } else { this.maybeCreateEngine(); } if (this.regionUrlProvider?.isCloud()) { - this.engine.setRegionUrlProvider(this.regionUrlProvider); + this.engine.setRegionStrategy(this.createRegionStrategy()); } this.acquireAudioContext(); @@ -773,7 +934,6 @@ class Room extends (EventEmitter as new () => TypedEmitter) resultingError.status = err.status; } this.log.debug(`error trying to establish signal connection`, { - ...this.logContext, error: err, }); throw resultingError; @@ -814,15 +974,13 @@ class Room extends (EventEmitter as new () => TypedEmitter) const unlock = await this.disconnectLock.lock(); try { if (this.state === ConnectionState.Disconnected) { - this.log.debug('already disconnected', this.logContext); + this.log.debug('already disconnected'); return; } - this.log.info('disconnect from room', { - ...this.logContext, - }); + this.log.info('disconnect from room'); if (this.state === ConnectionState.Connecting || this.state === ConnectionState.Reconnecting || this.isResuming) { const msg = 'Abort connection attempt due to user initiated disconnect'; - this.log.warn(msg, this.logContext); + this.log.warn(msg); this.abortController?.abort(msg); this.connectFuture?.reject?.(ConnectionError.cancelled('Client initiated disconnect')); this.connectFuture = undefined; @@ -859,6 +1017,9 @@ class Room extends (EventEmitter as new () => TypedEmitter) case 'signal-reconnect': await this.engine.client.handleOnClose('simulate disconnect'); break; + case 'fail-on-v1-path': + this.engine.failNextV1Path(); + break; case 'speaker': req = new SimulateScenario({ scenario: { @@ -969,7 +1130,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) } private onPageLeave = async () => { - this.log.info('Page leave detected, disconnecting', this.logContext); + this.log.info('Page leave detected, disconnecting'); await this.disconnect(); }; @@ -994,10 +1155,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) } dummyAudioEl.srcObject = document.hidden ? null : stream; if (!document.hidden) { - this.log.debug( - 'page visible again, triggering startAudio to resume playback and update playback status', - this.logContext, - ); + this.log.debug('page visible again, triggering startAudio to resume playback and update playback status'); this.startAudio(); } }); @@ -1024,7 +1182,9 @@ class Room extends (EventEmitter as new () => TypedEmitter) await Promise.all([ this.acquireAudioContext(), ...elements.map((e) => { - e.muted = false; + if (!this.options.webAudioMix) { + e.muted = false; + } return e.play(); }), ]); @@ -1056,7 +1216,6 @@ class Room extends (EventEmitter as new () => TypedEmitter) } else { this.log.warn( 'Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler', - this.logContext, ); } }); @@ -1162,9 +1321,13 @@ class Room extends (EventEmitter as new () => TypedEmitter) .on(ParticipantEvent.ChatMessage, this.onLocalChatMessageSent) .on(ParticipantEvent.ParticipantPermissionsChanged, this.onLocalParticipantPermissionsChanged); } - - private recreateEngine() { - this.engine?.close(); + private recreateEngine(sendLeave?: boolean) { + const oldEngine = this.engine; + if (sendLeave && oldEngine && !oldEngine.client.isDisconnected) { + oldEngine.client.sendLeave().finally(() => oldEngine.close()); + } else { + oldEngine?.close(); + } this.engine = undefined!; this.isResuming = false; @@ -1175,42 +1338,54 @@ class Room extends (EventEmitter as new () => TypedEmitter) } private onTrackAdded(mediaTrack: MediaStreamTrack, stream: MediaStream, receiver: RTCRtpReceiver) { - if (this.state === ConnectionState.Connecting || this.state === ConnectionState.Reconnecting) { + if ([ConnectionState.Connecting, ConnectionState.Reconnecting].includes(this.state)) { + const pendingTrackSid = extractTrackSid(mediaTrack, stream); + this.log.debug('deferring on track for later', { + mediaTrackId: mediaTrack.id, + mediaStreamId: stream.id, + tracksInStream: stream.getTracks().map((track) => track.id), + }); const reconnectedHandler = () => { - this.log.debug('deferring on track for later', { - mediaTrackId: mediaTrack.id, - mediaStreamId: stream.id, - tracksInStream: stream.getTracks().map((track) => track.id), - }); - this.onTrackAdded(mediaTrack, stream, receiver); cleanup(); + this.onTrackAdded(mediaTrack, stream, receiver); }; const cleanup = () => { this.off(RoomEvent.Reconnected, reconnectedHandler); this.off(RoomEvent.Connected, reconnectedHandler); this.off(RoomEvent.Disconnected, cleanup); + if (pendingTrackSid) { + const pendingCallbacks = this.pendingTrackAddedCallbacks.get(pendingTrackSid); + pendingCallbacks?.delete(cleanup); + if (pendingCallbacks?.size === 0) { + this.pendingTrackAddedCallbacks.delete(pendingTrackSid); + } + } }; this.once(RoomEvent.Reconnected, reconnectedHandler); this.once(RoomEvent.Connected, reconnectedHandler); this.once(RoomEvent.Disconnected, cleanup); + if (pendingTrackSid) { + const pendingCallbacks = this.pendingTrackAddedCallbacks.get(pendingTrackSid) ?? new Set<() => void>(); + pendingCallbacks.add(cleanup); + this.pendingTrackAddedCallbacks.set(pendingTrackSid, pendingCallbacks); + } return; } if (this.state === ConnectionState.Disconnected) { - this.log.warn('skipping incoming track after Room disconnected', this.logContext); + this.log.warn('skipping incoming track after Room disconnected'); return; } if (mediaTrack.readyState === 'ended') { - this.log.info('skipping incoming track as it already ended', this.logContext); + this.log.debug('skipping incoming track as it already ended'); return; } const parts = unpackStreamId(stream.id); const participantSid = parts[0]; const streamId = parts[1]; - let trackId = mediaTrack.id; - if (streamId?.startsWith('TR')) trackId = streamId; + let trackId = extractTrackSid(mediaTrack, stream) ?? mediaTrack.id; if (participantSid === this.localParticipant.sid) { - this.log.warn('tried to create RemoteParticipant for local participant', this.logContext); + this.log.warn('tried to create RemoteParticipant for local participant'); return; } @@ -1219,10 +1394,9 @@ class Room extends (EventEmitter as new () => TypedEmitter) | undefined; if (!participant) { - this.log.error( - `Tried to add a track for a participant, that's not present. Sid: ${participantSid}`, - this.logContext, - ); + if (participantSid.startsWith('PA')) { + this.log.error(`Tried to add a track for a participant, that's not present. Sid: ${participantSid}`); + } return; } @@ -1231,7 +1405,6 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (!id) { this.log.error( `Tried to add a track whose 'sid' could not be found for a participant, that's not present. Sid: ${participantSid}`, - this.logContext, ); return; } @@ -1241,7 +1414,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (!trackId.startsWith('TR')) { this.log.warn( `Tried to add a track whose 'sid' could not be determined for a participant, that's not present. Sid: ${participantSid}, streamId: ${streamId}, trackId: ${trackId}`, - {...this.logContext, rpID: participantSid, streamId, trackId}, + {remoteParticipantID: participantSid, streamId, trackId}, ); } @@ -1272,6 +1445,63 @@ class Room extends (EventEmitter as new () => TypedEmitter) } } + private cancelPendingTrackAdded(trackSid: Track.SID) { + this.pendingTrackAddedCallbacks.get(trackSid)?.forEach((cleanup) => cleanup()); + } + + private handleLocalTrackSubscribed(subscribedSid: string) { + const findPublication = () => + this.localParticipant.getTrackPublications().find(({trackSid}) => trackSid === subscribedSid) as + | LocalTrackPublication + | undefined; + + const trackPublication = findPublication(); + if (trackPublication) { + this.emitLocalTrackSubscribed(trackPublication); + return; + } + + this.log.debug('deferring LocalTrackSubscribed, publication not yet available', { + subscribedSid, + }); + + const TIMEOUT_MS = 10_000; + let timer: ReturnType; + + const onPublished = (pub: LocalTrackPublication) => { + if (pub.trackSid === subscribedSid) { + cleanup(); + this.emitLocalTrackSubscribed(pub); + } + }; + + const cleanup = () => { + clearTimeout(timer); + this.localParticipant.off(ParticipantEvent.LocalTrackPublished, onPublished); + this.off(RoomEvent.Disconnected, cleanup); + }; + + this.localParticipant.on(ParticipantEvent.LocalTrackPublished, onPublished); + this.once(RoomEvent.Disconnected, cleanup); + + timer = setTimeout(() => { + cleanup(); + const pub = findPublication(); + if (pub) { + this.emitLocalTrackSubscribed(pub); + } else { + this.log.warn('could not find local track publication for LocalTrackSubscribed event after timeout', { + subscribedSid, + }); + } + }, TIMEOUT_MS); + } + + private emitLocalTrackSubscribed(trackPublication: LocalTrackPublication) { + this.localParticipant.emit(ParticipantEvent.LocalTrackSubscribed, trackPublication); + this.emitWhenConnected(RoomEvent.LocalTrackSubscribed, trackPublication, this.localParticipant); + } + private handleRestarting = () => { this.clearConnectionReconcile(); this.isResuming = false; @@ -1285,9 +1515,13 @@ class Room extends (EventEmitter as new () => TypedEmitter) } }; + private handleRestarted = () => { + this.outgoingDataTrackManager.sfuWillRepublishTracks(); + this.incomingDataTrackManager.resendSubscriptionUpdates(); + }; + private handleSignalRestarted = async (joinResponse: JoinResponse) => { this.log.debug(`signal reconnected to server, region ${joinResponse.serverRegion}`, { - ...this.logContext, region: joinResponse.serverRegion, }); this.bufferedEvents = []; @@ -1297,18 +1531,12 @@ class Room extends (EventEmitter as new () => TypedEmitter) try { await this.localParticipant.republishAllTracks(undefined, true); } catch (error) { - this.log.error('error trying to re-publish tracks after reconnection', { - ...this.logContext, - error, - }); + this.log.error('error trying to re-publish tracks after reconnection', {error}); } try { await this.engine.waitForRestarted(); - this.log.debug(`fully reconnected to server`, { - ...this.logContext, - region: joinResponse.serverRegion, - }); + this.log.debug(`fully reconnected to server`, {region: joinResponse.serverRegion}); } catch { return; } @@ -1324,6 +1552,8 @@ class Room extends (EventEmitter as new () => TypedEmitter) this.bufferedEvents = []; this.transcriptionReceivedTimes.clear(); this.incomingDataStreamManager.clearControllers(); + this.incomingDataTrackManager.reset(); + this.outgoingDataTrackManager.reset(); if (this.state === ConnectionState.Disconnected) { return; } @@ -1391,40 +1621,58 @@ class Room extends (EventEmitter as new () => TypedEmitter) } private handleParticipantUpdates = (participantInfos: Array) => { - participantInfos.forEach((info) => { + for (const info of participantInfos) { if (info.identity === this.localParticipant.identity) { this.localParticipant.updateInfo(info); - return; + continue; } if (info.identity === '') { info.identity = this.sidToIdentity.get(info.sid) ?? ''; } - let remoteParticipant = this.remoteParticipants.get(info.identity); + const remoteParticipant = this.remoteParticipants.get(info.identity); if (info.state === ParticipantInfo_State.DISCONNECTED) { - this.handleParticipantDisconnected(info.identity, remoteParticipant); + this.handleParticipantDisconnected( + info.identity, + remoteParticipant, + info.disconnectReason === DisconnectReason.UNKNOWN_REASON ? undefined : info.disconnectReason, + ); } else { - remoteParticipant = this.getOrCreateParticipant(info.identity, info); + this.getOrCreateParticipant(info.identity, info); } - }); + } + + const mapped = new Map( + participantInfos + .filter((p) => p.identity !== this.localParticipant.identity) + .map((info) => { + return [info.identity, info.dataTracks.map((dataTrack) => DataTrackInfo.from(dataTrack))]; + }), + ); + this.incomingDataTrackManager.receiveSfuPublicationUpdates(mapped); }; - private handleParticipantDisconnected(identity: string, participant?: RemoteParticipant) { + private handleParticipantDisconnected( + identity: string, + participant?: RemoteParticipant, + disconnectReason?: DisconnectReason, + ) { this.remoteParticipants.delete(identity); if (!participant) { return; } this.incomingDataStreamManager.validateParticipantHasNoActiveDataStreams(identity); + this.incomingDataTrackManager.handleRemoteParticipantDisconnected(identity); participant.trackPublications.forEach((publication) => { participant.unpublishTrack(publication.trackSid, true); }); - this.emit(RoomEvent.ParticipantDisconnected, participant); + this.emit(RoomEvent.ParticipantDisconnected, participant, disconnectReason); participant.setDisconnected(); - this.localParticipant?.handleParticipantDisconnected(participant.identity); + this.rpcClientManager.handleParticipantDisconnected(participant.identity); } private handleActiveSpeakersUpdate = (speakers: Array) => { @@ -1500,12 +1748,13 @@ class Room extends (EventEmitter as new () => TypedEmitter) return; } const pub = participant.getTrackPublicationBySid(streamState.trackSid); - if (!pub || !pub.track) { + if (!pub?.track) { return; } const newStreamState = Track.streamStateFromProto(streamState.state); + const prevStreamState = pub.track.streamState; pub.track.setStreamState(newStreamState); - if (newStreamState !== pub.track.streamState) { + if (newStreamState !== prevStreamState) { participant.emit(ParticipantEvent.TrackStreamStateChanged, pub, pub.track.streamState); this.emitWhenConnected(RoomEvent.TrackStreamStateChanged, pub, pub.track.streamState, participant); } @@ -1526,6 +1775,8 @@ class Room extends (EventEmitter as new () => TypedEmitter) }; private handleSubscriptionError = (update: SubscriptionResponse) => { + this.cancelPendingTrackAdded(update.trackSid); + const participant = Array.from(this.remoteParticipants.values()).find((p) => p.trackPublications.has(update.trackSid), ); @@ -1560,14 +1811,25 @@ class Room extends (EventEmitter as new () => TypedEmitter) this.handleDataStream(packet, encryptionType); } else if (packet.value.case === 'rpcRequest') { const rpc = packet.value.value; - this.handleIncomingRpcRequest( - packet.participantIdentity, - rpc.id, - rpc.method, - rpc.payload, - rpc.responseTimeoutMs, - rpc.version, - ); + this.rpcServerManager.handleIncomingRpcRequest(packet.participantIdentity, rpc); + } else if (packet.value.case === 'rpcResponse') { + const rpcResponse = packet.value.value; + switch (rpcResponse.value.case) { + case 'payload': + this.rpcClientManager.handleIncomingRpcResponseSuccess(rpcResponse.requestId, rpcResponse.value.value); + break; + case 'error': + this.rpcClientManager.handleIncomingRpcResponseFailure( + rpcResponse.requestId, + RpcError.fromProto(rpcResponse.value.value), + ); + break; + default: + this.log.warn(`Unknown rpcResponse.value.case: ${rpcResponse.value.case}`, this.logContext); + break; + } + } else if (packet.value.case === 'rpcAck') { + this.rpcClientManager.handleIncomingRpcAck(packet.value.value.requestId); } }; @@ -1577,9 +1839,16 @@ class Room extends (EventEmitter as new () => TypedEmitter) kind: DataPacket_Kind, encryptionType: Encryption_Type, ) => { - this.emit(RoomEvent.DataReceived, userPacket.payload, participant, kind, userPacket.topic, encryptionType); + this.emit( + RoomEvent.DataReceived, + userPacket.payload as NonSharedUint8Array, + participant, + kind, + userPacket.topic, + encryptionType, + ); - participant?.emit(ParticipantEvent.DataReceived, userPacket.payload, kind, encryptionType); + participant?.emit(ParticipantEvent.DataReceived, userPacket.payload as NonSharedUint8Array, kind, encryptionType); }; private handleSipDtmf = (participant: RemoteParticipant | undefined, dtmf: SipDTMF) => { @@ -1618,58 +1887,6 @@ class Room extends (EventEmitter as new () => TypedEmitter) this.incomingDataStreamManager.handleDataStreamPacket(packet, encryptionType); }; - private async handleIncomingRpcRequest( - callerIdentity: string, - requestId: string, - method: string, - payload: string, - responseTimeout: number, - version: number, - ) { - await this.engine.publishRpcAck(callerIdentity, requestId); - - if (version !== 1) { - await this.engine.publishRpcResponse(callerIdentity, requestId, null, RpcError.builtIn('UNSUPPORTED_VERSION')); - return; - } - - const handler = this.rpcHandlers.get(method); - - if (!handler) { - await this.engine.publishRpcResponse(callerIdentity, requestId, null, RpcError.builtIn('UNSUPPORTED_METHOD')); - return; - } - - let responseError: RpcError | null = null; - let responsePayload: string | null = null; - - try { - const response = await handler({ - requestId, - callerIdentity, - payload, - responseTimeout, - }); - if (byteLength(response) > MAX_PAYLOAD_BYTES) { - responseError = RpcError.builtIn('RESPONSE_PAYLOAD_TOO_LARGE'); - this.log.warn(`RPC Response payload too large for ${method}`); - } else { - responsePayload = response; - } - } catch (error) { - if (error instanceof RpcError) { - responseError = error; - } else { - this.log.warn( - `Uncaught error returned by RPC handler for ${method}. Returning APPLICATION_ERROR instead.`, - error, - ); - responseError = RpcError.builtIn('APPLICATION_ERROR'); - } - } - await this.engine.publishRpcResponse(callerIdentity, requestId, responsePayload, responseError); - } - bufferedSegments: Map = new Map(); private handleAudioPlaybackStarted = () => { @@ -1679,9 +1896,8 @@ class Room extends (EventEmitter as new () => TypedEmitter) this.audioEnabled = true; this.emit(RoomEvent.AudioPlaybackStatusChanged, true); }; - private handleAudioPlaybackFailed = (e: unknown) => { - this.log.warn('could not playback audio', {...this.logContext, error: e}); + this.log.warn('could not playback audio', {error: e}); if (!this.canPlaybackAudio) { return; } @@ -1801,7 +2017,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) try { await Promise.race([this.audioContext.resume(), sleep(200)]); } catch (e: unknown) { - this.log.warn('Could not resume audio context', {...this.logContext, error: e}); + this.log.warn('Could not resume audio context', {error: e}); } } @@ -1815,10 +2031,15 @@ class Room extends (EventEmitter as new () => TypedEmitter) private createParticipant(identity: string, info?: ParticipantInfo): RemoteParticipant { let participant: RemoteParticipant; if (info) { - participant = RemoteParticipant.fromParticipantInfo(this.engine.client, info, { - loggerContextCb: () => this.logContext, - loggerName: this.options.loggerName, - }); + participant = RemoteParticipant.fromParticipantInfo( + this.engine.client, + info, + { + loggerContextCb: () => this.logContext, + loggerName: this.options.loggerName, + }, + this.incomingDataTrackManager, + ); } else { participant = new RemoteParticipant(this.engine.client, '', identity, undefined, undefined, undefined, { loggerContextCb: () => this.logContext, @@ -1831,7 +2052,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (this.options.audioOutput?.deviceId) { participant .setAudioOutput(this.options.audioOutput) - .catch((e) => this.log.warn(`Could not set audio output: ${e.message}`, this.logContext)); + .catch((e) => this.log.warn(`Could not set audio output: ${e.message}`)); } return participant; } @@ -1865,9 +2086,10 @@ class Room extends (EventEmitter as new () => TypedEmitter) track.on(TrackEvent.VideoPlaybackFailed, this.handleVideoPlaybackFailed); track.on(TrackEvent.VideoPlaybackStarted, this.handleVideoPlaybackStarted); } - this.emit(RoomEvent.TrackSubscribed, track, publication, participant); + this.emitWhenConnected(RoomEvent.TrackSubscribed, track, publication, participant); }) .on(ParticipantEvent.TrackUnpublished, (publication: RemoteTrackPublication) => { + this.cancelPendingTrackAdded(publication.trackSid); this.emit(RoomEvent.TrackUnpublished, publication, participant); }) .on(ParticipantEvent.TrackUnsubscribed, (track: RemoteTrack, publication: RemoteTrackPublication) => { @@ -1925,7 +2147,8 @@ class Room extends (EventEmitter as new () => TypedEmitter) [] as Array, ); const localTracks = this.localParticipant.getTrackPublications() as Array; - this.engine.sendSyncState(remoteTracks, localTracks); + const localDataTrackInfos = this.outgoingDataTrackManager.queryPublished(); + this.engine.sendSyncState(remoteTracks, localTracks, localDataTrackInfos); } private updateSubscriptions() { @@ -1946,6 +2169,82 @@ class Room extends (EventEmitter as new () => TypedEmitter) return undefined; } + private getClientInfoCapabilities(roomOptions: InternalRoomOptions): Array { + const capabilities: Array = []; + if (isFrameMetadataSupported(roomOptions.frameMetadata ?? roomOptions.packetTrailer) || this.e2eeManager) { + capabilities.push(ClientInfo_Capability.CAP_PACKET_TRAILER); + } + if (isCompressionStreamSupported()) { + capabilities.push(ClientInfo_Capability.CAP_COMPRESSION_DEFLATE_RAW); + } + return capabilities; + } + + private getRemoteParticipantClientProtocol = (identity: Participant['identity']) => { + return this.remoteParticipants.get(identity)?.clientProtocol ?? CLIENT_PROTOCOL_DEFAULT; + }; + + private getRemoteParticipantCapabilities = (identity: Participant['identity']): Array => { + return this.remoteParticipants.get(identity)?.capabilities ?? []; + }; + + private getAllRemoteParticipantIdentities = () => { + return Array.from(this.remoteParticipants.keys()); + }; + + private registerRpcDataStreamHandler() { + this.incomingDataStreamManager.registerTextStreamHandler( + RPC_REQUEST_DATA_STREAM_TOPIC, + async (reader, {identity}) => { + const attributes = reader.info.attributes ?? {}; + await this.rpcServerManager.handleIncomingDataStream(reader, identity, attributes); + }, + ); + this.incomingDataStreamManager.registerTextStreamHandler( + RPC_RESPONSE_DATA_STREAM_TOPIC, + async (reader, {identity}) => { + const attributes = reader.info.attributes ?? {}; + await this.rpcClientManager.handleIncomingDataStream(reader, identity, attributes); + }, + ); + } + + private setStatsLogging(enabled: boolean) { + if (enabled) { + if (!this.statsLogInterval) { + this.statsLogInterval = CriticalTimers.setInterval(() => { + this.logWebRTCStats(); + }, STATS_LOG_FREQUENCY_MS); + } + } else if (this.statsLogInterval) { + CriticalTimers.clearInterval(this.statsLogInterval); + this.statsLogInterval = undefined; + } + } + + private logWebRTCStats = async () => { + const pcManager = this.engine?.pcManager; + if (!pcManager) { + return; + } + try { + const [publisher, subscriber] = await Promise.all([ + pcManager.publisher.getStats(), + pcManager.subscriber?.getStats(), + ]); + const publisherStats = publisher && summarizeStatsReport(publisher); + const subscriberStats = subscriber && summarizeStatsReport(subscriber); + this.statsLog.info(`webrtc stats`, { + publisher: publisherStats?.connection, + subscriber: subscriberStats?.connection, + inbound: [...(publisherStats?.inbound ?? []), ...(subscriberStats?.inbound ?? [])], + outbound: publisherStats?.outbound, + }); + } catch (error) { + this.statsLog.debug('could not collect webrtc stats', {error}); + } + }; + private registerConnectionReconcile() { this.clearConnectionReconcile(); let consecutiveFailures = 0; @@ -1953,7 +2252,6 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (!this.engine || this.engine.isClosed || !this.engine.verifyTransport()) { consecutiveFailures++; this.log.warn('detected connection state mismatch', { - ...this.logContext, numFailures: consecutiveFailures, engine: this.engine ? { @@ -1963,8 +2261,14 @@ class Room extends (EventEmitter as new () => TypedEmitter) : undefined, }); if (consecutiveFailures >= 3) { - this.recreateEngine(); - this.handleDisconnect(this.options.stopLocalTrackOnUnpublish, DisconnectReason.STATE_MISMATCH); + this.clearConnectionReconcile(); + if (this.engine && !this.engine.isClosed) { + this.log.warn('detected connection state mismatch, attempting full reconnect'); + this.engine.reconnect(); + } else { + this.recreateEngine(); + this.handleDisconnect(this.options.stopLocalTrackOnUnpublish, DisconnectReason.STATE_MISMATCH); + } } } else { consecutiveFailures = 0; @@ -1982,8 +2286,13 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (state === this.state) { return false; } + this.log.info(`connection state changed: ${this.state} -> ${state}`); this.state = state; + this.incomingDataStreamManager.setConnected(state === ConnectionState.Connected); + this.setStatsLogging(state === ConnectionState.Connected); + this.emit(RoomEvent.ConnectionStateChanged, this.state); + return true; } @@ -2065,7 +2374,7 @@ class Room extends (EventEmitter as new () => TypedEmitter) const deviceId = await track.getDeviceId(false); const deviceKind = sourceToKind(track.source); if (deviceKind && deviceId && deviceId !== this.localParticipant.activeDeviceMap.get(deviceKind)) { - this.log.debug(`local track restarted, setting ${deviceKind} ${deviceId} active`, this.logContext); + this.log.debug(`local track restarted, setting ${deviceKind} ${deviceId} active`); this.localParticipant.activeDeviceMap.set(deviceKind, deviceId); this.emit(RoomEvent.ActiveDeviceChanged, deviceKind, deviceId); } @@ -2214,13 +2523,9 @@ class Room extends (EventEmitter as new () => TypedEmitter) if (event !== RoomEvent.ActiveSpeakersChanged && event !== RoomEvent.TranscriptionReceived) { const minimizedArgs = mapArgs(args).filter((arg: unknown) => arg !== undefined); if (event === RoomEvent.TrackSubscribed || event === RoomEvent.TrackUnsubscribed) { - this.log.trace(`subscribe trace: ${event}`, { - ...this.logContext, - event, - args: minimizedArgs, - }); + this.log.trace(`subscribe trace: ${event}`, {event, args: minimizedArgs}); } - this.log.debug(`room event ${event}`, {...this.logContext, event, args: minimizedArgs}); + this.log.debug(`room event ${event}`, {event, args: minimizedArgs}); } return EventEmitter.prototype.emit.call(this, event, ...args); } @@ -2242,84 +2547,83 @@ function mapArgs(args: Array): Array { } export default Room; - -export type RoomEventArgumentMap = { - connected: []; - reconnecting: []; - signalReconnecting: []; - reconnected: []; - disconnected: [reason?: DisconnectReason]; - connectionStateChanged: [state: ConnectionState]; - moved: [name: string]; - mediaDevicesChanged: []; - participantConnected: [participant: RemoteParticipant]; - participantDisconnected: [participant: RemoteParticipant]; - trackPublished: [publication: RemoteTrackPublication, participant: RemoteParticipant]; - trackSubscribed: [track: RemoteTrack, publication: RemoteTrackPublication, participant: RemoteParticipant]; - trackSubscriptionFailed: [trackSid: string, participant: RemoteParticipant, reason?: SubscriptionError]; - trackUnpublished: [publication: RemoteTrackPublication, participant: RemoteParticipant]; - trackUnsubscribed: [track: RemoteTrack, publication: RemoteTrackPublication, participant: RemoteParticipant]; - trackMuted: [publication: TrackPublication, participant: Participant]; - trackUnmuted: [publication: TrackPublication, participant: Participant]; - localTrackPublished: [publication: LocalTrackPublication, participant: LocalParticipant]; - localTrackUnpublished: [publication: LocalTrackPublication, participant: LocalParticipant]; - localAudioSilenceDetected: [publication: LocalTrackPublication]; - participantMetadataChanged: [metadata: string | undefined, participant: RemoteParticipant | LocalParticipant]; - participantNameChanged: [name: string, participant: RemoteParticipant | LocalParticipant]; - participantPermissionsChanged: [ +export type RoomEventCallbacks = { + connected: () => void; + reconnecting: () => void; + signalReconnecting: () => void; + reconnected: () => void; + disconnected: (reason?: DisconnectReason) => void; + connectionStateChanged: (state: ConnectionState) => void; + moved: (name: string) => void; + mediaDevicesChanged: () => void; + participantConnected: (participant: RemoteParticipant) => void; + participantDisconnected: (participant: RemoteParticipant, disconnectReason?: DisconnectReason) => void; + trackPublished: (publication: RemoteTrackPublication, participant: RemoteParticipant) => void; + trackSubscribed: (track: RemoteTrack, publication: RemoteTrackPublication, participant: RemoteParticipant) => void; + trackSubscriptionFailed: (trackSid: string, participant: RemoteParticipant, reason?: SubscriptionError) => void; + trackUnpublished: (publication: RemoteTrackPublication, participant: RemoteParticipant) => void; + trackUnsubscribed: (track: RemoteTrack, publication: RemoteTrackPublication, participant: RemoteParticipant) => void; + trackMuted: (publication: TrackPublication, participant: Participant) => void; + trackUnmuted: (publication: TrackPublication, participant: Participant) => void; + localTrackPublished: (publication: LocalTrackPublication, participant: LocalParticipant) => void; + localTrackUnpublished: (publication: LocalTrackPublication, participant: LocalParticipant) => void; + localAudioSilenceDetected: (publication: LocalTrackPublication) => void; + participantMetadataChanged: (metadata: string | undefined, participant: RemoteParticipant | LocalParticipant) => void; + participantNameChanged: (name: string, participant: RemoteParticipant | LocalParticipant) => void; + participantPermissionsChanged: ( prevPermissions: ParticipantPermission | undefined, participant: RemoteParticipant | LocalParticipant, - ]; - participantAttributesChanged: [ + ) => void; + participantAttributesChanged: ( changedAttributes: Record, participant: RemoteParticipant | LocalParticipant, - ]; - activeSpeakersChanged: [speakers: Array]; - roomMetadataChanged: [metadata: string]; - dataReceived: [ - payload: Uint8Array, + ) => void; + activeSpeakersChanged: (speakers: Array) => void; + roomMetadataChanged: (metadata: string) => void; + dataReceived: ( + payload: NonSharedUint8Array, participant?: RemoteParticipant, kind?: DataPacket_Kind, topic?: string, encryptionType?: Encryption_Type, - ]; - sipDTMFReceived: [dtmf: SipDTMF, participant?: RemoteParticipant]; - transcriptionReceived: [ + ) => void; + sipDTMFReceived: (dtmf: SipDTMF, participant?: RemoteParticipant) => void; + transcriptionReceived: ( transcription: Array, participant?: Participant, publication?: TrackPublication, - ]; - connectionQualityChanged: [quality: ConnectionQuality, participant: Participant]; - mediaDevicesError: [error: Error, kind?: MediaDeviceKind]; - trackStreamStateChanged: [ + ) => void; + connectionQualityChanged: (quality: ConnectionQuality, participant: Participant) => void; + mediaDevicesError: (error: Error, kind?: MediaDeviceKind) => void; + trackStreamStateChanged: ( publication: RemoteTrackPublication, streamState: Track.StreamState, participant: RemoteParticipant, - ]; - trackSubscriptionPermissionChanged: [ + ) => void; + trackSubscriptionPermissionChanged: ( publication: RemoteTrackPublication, status: TrackPublication.PermissionStatus, participant: RemoteParticipant, - ]; - trackSubscriptionStatusChanged: [ + ) => void; + trackSubscriptionStatusChanged: ( publication: RemoteTrackPublication, status: TrackPublication.SubscriptionStatus, participant: RemoteParticipant, - ]; - audioPlaybackChanged: [playing: boolean]; - videoPlaybackChanged: [playing: boolean]; - signalConnected: []; - recordingStatusChanged: [recording: boolean]; - participantEncryptionStatusChanged: [encrypted: boolean, participant?: Participant]; - encryptionError: [error: Error, participant?: Participant]; - dcBufferStatusChanged: [isLow: boolean, kind: DataPacket_Kind]; - activeDeviceChanged: [kind: MediaDeviceKind, deviceId: string]; - chatMessage: [message: ChatMessage, participant?: RemoteParticipant | LocalParticipant]; - localTrackSubscribed: [publication: LocalTrackPublication, participant: LocalParticipant]; - metricsReceived: [metrics: MetricsBatch, participant?: Participant]; - participantActive: [participant: Participant]; -}; - -export type RoomEventCallbacks = { - [E in keyof RoomEventArgumentMap]: (...args: RoomEventArgumentMap[E]) => void; + ) => void; + audioPlaybackChanged: (playing: boolean) => void; + videoPlaybackChanged: (playing: boolean) => void; + signalConnected: () => void; + recordingStatusChanged: (recording: boolean) => void; + participantEncryptionStatusChanged: (encrypted: boolean, participant?: Participant) => void; + encryptionError: (error: Error, participant?: Participant) => void; + dcBufferStatusChanged: (isLow: boolean, kind: DataChannelKind) => void; + activeDeviceChanged: (kind: MediaDeviceKind, deviceId: string) => void; + chatMessage: (message: ChatMessage, participant?: RemoteParticipant | LocalParticipant) => void; + localTrackSubscribed: (publication: LocalTrackPublication, participant: LocalParticipant) => void; + metricsReceived: (metrics: MetricsBatch, participant?: Participant) => void; + participantActive: (participant: Participant) => void; + dataTrackPublished: (track: RemoteDataTrack) => void; + dataTrackUnpublished: (sid: DataTrackSid) => void; + localDataTrackPublished: (track: LocalDataTrack) => void; + localDataTrackUnpublished: (sid: DataTrackSid) => void; }; diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-channel/DataChannelManager.ts b/fluxer_app/pkgs/livekit-client/src/room/data-channel/DataChannelManager.ts new file mode 100644 index 000000000..aebaa1396 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-channel/DataChannelManager.ts @@ -0,0 +1,191 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import type {PCTransportManager} from '../PCTransportManager.ts'; +import type {FlowControlledDataChannel} from './FlowControlledDataChannel.ts'; +import {LossyDataChannel} from './LossyDataChannel.ts'; +import {ReliableDataChannel} from './ReliableDataChannel.ts'; +import {DataChannelKind, dataChannelHighWaterMark, dataChannelLowWaterMark} from './types.ts'; + +const lossyDataChannelLabel = '_lossy'; +const reliableDataChannelLabel = '_reliable'; +const dataTrackDataChannelLabel = '_data_track'; + +export interface DataChannelManagerOptions { + isEngineClosed: () => boolean; + isReconnecting: () => boolean; + onDataMessage: (message: MessageEvent) => void; + onDataTrackMessage: (message: MessageEvent) => void; + onDataError: (event: Event) => void; + onChannelClose: (kind: DataChannelKind) => void; + onBufferStatusChanged: (kind: DataChannelKind, isLow: boolean) => void; +} + +export class DataChannelManager { + readonly reliable: ReliableDataChannel; + + readonly lossy: LossyDataChannel; + + readonly dataTrack: LossyDataChannel; + + private reliableSub?: RTCDataChannel; + + private lossySub?: RTCDataChannel; + + private dataTrackSub?: RTCDataChannel; + + private opts: DataChannelManagerOptions; + + constructor(opts: DataChannelManagerOptions) { + this.opts = opts; + const flowControlOptions = (kind: DataChannelKind) => ({ + kind, + lowWaterMark: dataChannelLowWaterMark(kind), + highWaterMark: dataChannelHighWaterMark(kind), + isEngineClosed: opts.isEngineClosed, + onBufferStatusChanged: (isLow: boolean) => opts.onBufferStatusChanged(kind, isLow), + }); + this.reliable = new ReliableDataChannel({ + ...flowControlOptions(DataChannelKind.RELIABLE), + isDeferringSends: opts.isReconnecting, + }); + this.lossy = new LossyDataChannel({ + ...flowControlOptions(DataChannelKind.LOSSY), + bufferFullBehavior: 'drop', + shouldSkipSends: opts.isReconnecting, + }); + this.dataTrack = new LossyDataChannel({ + ...flowControlOptions(DataChannelKind.DATA_TRACK_LOSSY), + bufferFullBehavior: 'wait', + shouldSkipSends: opts.isReconnecting, + }); + } + + channelFor(kind: DataChannelKind): FlowControlledDataChannel { + switch (kind) { + case DataChannelKind.RELIABLE: + return this.reliable; + case DataChannelKind.LOSSY: + return this.lossy; + case DataChannelKind.DATA_TRACK_LOSSY: + return this.dataTrack; + } + } + + getHandle(kind: DataChannelKind, subscriber: boolean = false): RTCDataChannel | undefined { + if (!subscriber) { + return this.channelFor(kind).channelHandle; + } + switch (kind) { + case DataChannelKind.RELIABLE: + return this.reliableSub; + case DataChannelKind.LOSSY: + return this.lossySub; + case DataChannelKind.DATA_TRACK_LOSSY: + return this.dataTrackSub; + } + } + + get hasPublisherChannels(): boolean { + return Boolean(this.reliable.channelHandle || this.lossy.channelHandle || this.dataTrack.channelHandle); + } + + createPublisherChannels(pcManager: PCTransportManager) { + for (const channel of [this.lossy, this.reliable, this.dataTrack]) { + const old = channel.channelHandle; + if (old) { + old.onmessage = null; + old.onerror = null; + old.onclose = null; + } + } + + const wire = ( + channel: FlowControlledDataChannel, + dc: RTCDataChannel, + onMessage: (message: MessageEvent) => void, + ) => { + dc.onmessage = onMessage; + dc.onerror = this.opts.onDataError; + dc.onclose = () => this.opts.onChannelClose(channel.kind); + dc.bufferedAmountLowThreshold = channel.lowWaterMark; + dc.onbufferedamountlow = () => channel.refreshBufferStatus(); + channel.attach(dc); + }; + + wire( + this.lossy, + pcManager.createPublisherDataChannel(lossyDataChannelLabel, { + ordered: false, + maxRetransmits: 0, + }), + this.opts.onDataMessage, + ); + wire( + this.reliable, + pcManager.createPublisherDataChannel(reliableDataChannelLabel, { + ordered: true, + }), + this.opts.onDataMessage, + ); + wire( + this.dataTrack, + pcManager.createPublisherDataChannel(dataTrackDataChannelLabel, { + ordered: false, + maxRetransmits: 0, + }), + this.opts.onDataTrackMessage, + ); + + this.lossy.startThresholdTuning(); + } + + adoptSubscriberChannel(channel: RTCDataChannel): boolean { + let handler: (message: MessageEvent) => void; + if (channel.label === reliableDataChannelLabel) { + this.reliableSub = channel; + handler = this.opts.onDataMessage; + } else if (channel.label === lossyDataChannelLabel) { + this.lossySub = channel; + handler = this.opts.onDataMessage; + } else if (channel.label === dataTrackDataChannelLabel) { + this.dataTrackSub = channel; + handler = this.opts.onDataTrackMessage; + } else { + return false; + } + channel.onmessage = handler; + return true; + } + + teardown() { + const dcCleanup = (dc: RTCDataChannel | undefined) => { + if (!dc) { + return; + } + + dc.onbufferedamountlow = null; + dc.onclose = null; + dc.onclosing = null; + dc.onerror = null; + dc.onmessage = null; + dc.onopen = null; + + dc.close(); + }; + + for (const channel of [this.lossy, this.reliable, this.dataTrack]) { + const dc = channel.channelHandle; + channel.detach('peer connections cleaned up'); + dcCleanup(dc); + } + dcCleanup(this.lossySub); + dcCleanup(this.reliableSub); + dcCleanup(this.dataTrackSub); + this.lossySub = undefined; + this.reliableSub = undefined; + this.dataTrackSub = undefined; + + this.reliable.reset(); + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-channel/FlowControlledDataChannel.ts b/fluxer_app/pkgs/livekit-client/src/room/data-channel/FlowControlledDataChannel.ts new file mode 100644 index 000000000..4bef5b3fe --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-channel/FlowControlledDataChannel.ts @@ -0,0 +1,147 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import {Mutex} from '@livekit/mutex'; +import TypedPromise from '../../utils/TypedPromise.ts'; +import {UnexpectedConnectionState} from '../errors.ts'; +import type {DataChannelKind} from './types.ts'; + +export interface FlowControlledDataChannelOptions { + kind: DataChannelKind; + lowWaterMark: number; + highWaterMark: number; + isEngineClosed: () => boolean; + onBufferStatusChanged?: (isLow: boolean) => void; +} + +export class FlowControlledDataChannel { + readonly kind: DataChannelKind; + + readonly lowWaterMark: number; + + readonly highWaterMark: number; + + protected isEngineClosed: () => boolean; + + private onBufferStatusChanged?: (isLow: boolean) => void; + + private bufferStatusLow = true; + + private handle?: RTCDataChannel; + + private headroomLock = new Mutex(); + + private waiterAbortController = new AbortController(); + + constructor(opts: FlowControlledDataChannelOptions) { + this.kind = opts.kind; + this.lowWaterMark = opts.lowWaterMark; + this.highWaterMark = opts.highWaterMark; + this.isEngineClosed = opts.isEngineClosed; + this.onBufferStatusChanged = opts.onBufferStatusChanged; + } + + get channelHandle(): RTCDataChannel | undefined { + return this.handle; + } + + attach(dc: RTCDataChannel) { + if (this.handle && this.handle !== dc) { + this.invalidateWaiters('data channel replaced'); + } + this.handle = dc; + } + + detach(reason: string = 'data channel torn down') { + if (this.handle) { + this.invalidateWaiters(reason); + } + this.handle = undefined; + } + + protected getChannel(): RTCDataChannel | undefined { + return this.handle; + } + + isBelowHighWaterMark(dc: RTCDataChannel): boolean { + return dc.bufferedAmount <= this.highWaterMark; + } + + isBelowLowWaterMark(dc: RTCDataChannel): boolean { + return dc.bufferedAmount <= dc.bufferedAmountLowThreshold; + } + + lockHeadroom(): Promise<() => void> { + return this.headroomLock.lock(); + } + + async waitForHeadroomWithLock() { + const unlock = await this.lockHeadroom(); + try { + await this.waitForHeadroomWithoutLock(); + } finally { + unlock(); + } + } + + async waitForHeadroomWithoutLock() { + if (this.isEngineClosed()) { + throw new UnexpectedConnectionState('engine closed'); + } + const dc = this.getChannel(); + if (!dc) { + throw new UnexpectedConnectionState(`DataChannel not found, kind: ${this.kind}`); + } + if (this.isBelowHighWaterMark(dc)) { + return; + } + const abortSignal = this.waiterAbortController.signal; + await new TypedPromise((resolve, reject) => { + const onBufferedAmountLow = () => { + cleanup(); + resolve(); + }; + const onDCClose = () => { + cleanup(); + reject(new UnexpectedConnectionState(`DataChannel ${this.kind} closed while draining the buffer`)); + }; + const onAbort = () => { + cleanup(); + reject( + new UnexpectedConnectionState( + `DataChannel ${this.kind} was replaced or torn down while waiting for headroom`, + ), + ); + }; + const cleanup = () => { + dc.removeEventListener('bufferedamountlow', onBufferedAmountLow); + dc.removeEventListener('close', onDCClose); + abortSignal.removeEventListener('abort', onAbort); + }; + if (abortSignal.aborted) { + onAbort(); + return; + } + dc.addEventListener('bufferedamountlow', onBufferedAmountLow); + dc.addEventListener('close', onDCClose); + abortSignal.addEventListener('abort', onAbort); + }); + } + + invalidateWaiters(reason: string) { + this.waiterAbortController.abort(reason); + this.waiterAbortController = new AbortController(); + } + + refreshBufferStatus() { + const dc = this.getChannel(); + if (!dc) { + return; + } + const isLow = this.isBelowLowWaterMark(dc); + if (isLow !== this.bufferStatusLow) { + this.bufferStatusLow = isLow; + this.onBufferStatusChanged?.(isLow); + } + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-channel/LossyDataChannel.ts b/fluxer_app/pkgs/livekit-client/src/room/data-channel/LossyDataChannel.ts new file mode 100644 index 000000000..39f819042 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-channel/LossyDataChannel.ts @@ -0,0 +1,94 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import log from '../../logger.ts'; +import type {NonSharedUint8Array} from '../../type-polyfills/non-shared-typed-arrays.ts'; +import CriticalTimers, {type TimerHandle} from '../timers.ts'; +import {FlowControlledDataChannel, type FlowControlledDataChannelOptions} from './FlowControlledDataChannel.ts'; + +export interface LossyDataChannelOptions extends FlowControlledDataChannelOptions { + bufferFullBehavior: 'drop' | 'wait'; + shouldSkipSends: () => boolean; +} + +export class LossyDataChannel extends FlowControlledDataChannel { + private bufferFullBehavior: 'drop' | 'wait'; + + private shouldSkipSends: () => boolean; + + private statCurrentBytes = 0; + + private statByterate = 0; + + private statInterval: TimerHandle | undefined; + + private dropCount = 0; + + constructor(opts: LossyDataChannelOptions) { + super(opts); + this.bufferFullBehavior = opts.bufferFullBehavior; + this.shouldSkipSends = opts.shouldSkipSends; + } + + async send(msg: NonSharedUint8Array) { + const dc = this.getChannel(); + if (!dc) { + return; + } + switch (this.bufferFullBehavior) { + case 'wait': + if (!this.isBelowHighWaterMark(dc)) { + await this.waitForHeadroomWithLock(); + } + break; + case 'drop': + if (!this.isBelowLowWaterMark(dc)) { + this.dropCount += 1; + if (this.dropCount % 100 === 0) { + log.warn(`dropping lossy data channel messages, total dropped: ${this.dropCount}`); + } + return; + } + } + this.statCurrentBytes += msg.byteLength; + + if (this.shouldSkipSends()) { + return; + } + + try { + dc.send(msg); + this.refreshBufferStatus(); + } catch (error: unknown) { + if (error instanceof TypeError) { + log.error(error); + } else { + throw error; + } + } + } + + startThresholdTuning() { + this.stopThresholdTuning(); + this.statInterval = CriticalTimers.setInterval(() => { + this.statByterate = this.statCurrentBytes; + this.statCurrentBytes = 0; + + const dc = this.getChannel(); + if (dc) { + const threshold = this.statByterate / 10; + dc.bufferedAmountLowThreshold = Math.min(Math.max(threshold, this.lowWaterMark), this.highWaterMark); + } + }, 1000); + } + + stopThresholdTuning() { + this.statByterate = 0; + this.statCurrentBytes = 0; + if (this.statInterval) { + CriticalTimers.clearInterval(this.statInterval); + this.statInterval = undefined; + } + this.dropCount = 0; + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-channel/ReliableDataChannel.ts b/fluxer_app/pkgs/livekit-client/src/room/data-channel/ReliableDataChannel.ts new file mode 100644 index 000000000..ad1352881 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-channel/ReliableDataChannel.ts @@ -0,0 +1,95 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import type {NonSharedUint8Array} from '../../type-polyfills/non-shared-typed-arrays.ts'; +import {DataPacketBuffer} from '../../utils/dataPacketBuffer.ts'; +import {FlowControlledDataChannel, type FlowControlledDataChannelOptions} from './FlowControlledDataChannel.ts'; + +export interface ReliableDataChannelOptions extends FlowControlledDataChannelOptions { + isDeferringSends: () => boolean; +} + +export class ReliableDataChannel extends FlowControlledDataChannel { + private messageBuffer = new DataPacketBuffer(); + + private sequence = 1; + + private isDeferringSends: () => boolean; + + constructor(opts: ReliableDataChannelOptions) { + super(opts); + this.isDeferringSends = opts.isDeferringSends; + } + + nextSequence(): number { + const sequence = this.sequence; + this.sequence += 1; + return sequence; + } + + async send(msg: NonSharedUint8Array, sequence: number) { + if (this.isDeferringSends()) { + this.messageBuffer.push({data: msg, sequence, sent: false}); + return; + } + + const dc = this.getChannel(); + if (!dc) { + return; + } + + try { + await this.waitForHeadroomWithLock(); + } catch (error) { + if (this.isEngineClosed()) { + throw error; + } + this.messageBuffer.push({data: msg, sequence, sent: false}); + return; + } + + if (this.isDeferringSends()) { + this.messageBuffer.push({data: msg, sequence, sent: false}); + return; + } + + this.messageBuffer.push({data: msg, sequence, sent: true}); + dc.send(msg); + this.refreshBufferStatus(); + } + + async replay(lastMessageSeq: number) { + const dc = this.getChannel(); + if (!dc) { + return; + } + this.messageBuffer.popToSequence(lastMessageSeq); + const unlock = await this.lockHeadroom(); + try { + this.messageBuffer.markAllUnsent(); + for (let batch = this.messageBuffer.getUnsent(); batch.length > 0; batch = this.messageBuffer.getUnsent()) { + for (const item of batch) { + await this.waitForHeadroomWithoutLock(); + dc.send(item.data); + this.messageBuffer.markSent(item); + } + } + } finally { + unlock(); + } + this.refreshBufferStatus(); + } + + override refreshBufferStatus() { + const dc = this.channelHandle; + if (dc) { + this.messageBuffer.alignBufferedAmount(dc.bufferedAmount); + } + super.refreshBufferStatus(); + } + + reset() { + this.messageBuffer = new DataPacketBuffer(); + this.sequence = 1; + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-channel/types.ts b/fluxer_app/pkgs/livekit-client/src/room/data-channel/types.ts new file mode 100644 index 000000000..898837c35 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-channel/types.ts @@ -0,0 +1,21 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +export enum DataChannelKind { + RELIABLE = 0, + LOSSY = 1, + DATA_TRACK_LOSSY = 2, +} + +export const reliableDataChannelWaterMarkLow = 64 * 1024; +export const reliableDataChannelWaterMarkHigh = 1024 * 1024; +export const lossyDataChannelWaterMarkLow = 8 * 1024; +export const lossyDataChannelWaterMarkHigh = 256 * 1024; + +export function dataChannelLowWaterMark(kind: DataChannelKind): number { + return kind === DataChannelKind.RELIABLE ? reliableDataChannelWaterMarkLow : lossyDataChannelWaterMarkLow; +} + +export function dataChannelHighWaterMark(kind: DataChannelKind): number { + return kind === DataChannelKind.RELIABLE ? reliableDataChannelWaterMarkHigh : lossyDataChannelWaterMarkHigh; +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-stream/compression.ts b/fluxer_app/pkgs/livekit-client/src/room/data-stream/compression.ts new file mode 100644 index 000000000..d6a9615c3 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-stream/compression.ts @@ -0,0 +1,69 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import type {NonSharedUint8Array} from '../../type-polyfills/non-shared-typed-arrays.ts'; +import {DataStreamError, DataStreamErrorReason} from '../errors.ts'; + +export function deflateRawTransform(): ReadableWritablePair { + return new CompressionStream('deflate-raw') as unknown as ReadableWritablePair< + NonSharedUint8Array, + NonSharedUint8Array + >; +} + +export function inflateRawTransform(): ReadableWritablePair { + return new DecompressionStream('deflate-raw') as unknown as ReadableWritablePair< + NonSharedUint8Array, + NonSharedUint8Array + >; +} + +export async function deflateRawCompress(data: NonSharedUint8Array): Promise { + const cs = new CompressionStream('deflate-raw'); + const writer = cs.writable.getWriter(); + writer.write(data as NonSharedUint8Array); + writer.close(); + return collect(cs.readable); +} + +export async function deflateRawDecompress( + data: NonSharedUint8Array, + maxByteLength?: number, +): Promise { + const ds = new DecompressionStream('deflate-raw'); + const writer = ds.writable.getWriter(); + writer.write(data as NonSharedUint8Array).catch(() => {}); + writer.close().catch(() => {}); + return collect(ds.readable, maxByteLength); +} + +export async function collect( + stream: ReadableStream, + maxByteLength?: number, +): Promise { + const reader = stream.getReader(); + const chunks: Array = []; + let total = 0; + while (true) { + const {done, value} = await reader.read(); + if (done) { + break; + } + chunks.push(value); + total += value.byteLength; + if (typeof maxByteLength === 'number' && total > maxByteLength) { + await reader.cancel(); + throw new DataStreamError( + `Decompressed payload exceeds the maximum payload size of ${maxByteLength} bytes`, + DataStreamErrorReason.PayloadTooLarge, + ); + } + } + const result = new Uint8Array(total); + let offset = 0; + for (const chunk of chunks) { + result.set(chunk, offset); + offset += chunk.byteLength; + } + return result; +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-stream/constants.ts b/fluxer_app/pkgs/livekit-client/src/room/data-stream/constants.ts new file mode 100644 index 000000000..748abd2b1 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-stream/constants.ts @@ -0,0 +1,6 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +export const STREAM_CHUNK_SIZE_BYTES = 15_000; + +export const DEFAULT_MAX_PAYLOAD_BYTE_LENGTH = 5_000_000_000; diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-stream/incoming/IncomingDataStreamManager.ts b/fluxer_app/pkgs/livekit-client/src/room/data-stream/incoming/IncomingDataStreamManager.ts index a2b15281c..5779987ef 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/data-stream/incoming/IncomingDataStreamManager.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/data-stream/incoming/IncomingDataStreamManager.ts @@ -1,22 +1,32 @@ // SPDX-FileCopyrightText: 2024 LiveKit, Inc. // // SPDX-License-Identifier: Apache-2.0 -import type { - DataPacket, +import { + type DataPacket, DataStream_Chunk, - DataStream_Header, - DataStream_Trailer, - Encryption_Type, + DataStream_CompressionType, + type DataStream_Header, + type DataStream_Trailer, + type Encryption_Type, } from '@livekit/protocol'; import log from '../../../logger.ts'; +import type {NonSharedUint8Array} from '../../../type-polyfills/non-shared-typed-arrays.ts'; import {DataStreamError, DataStreamErrorReason} from '../../errors.ts'; import type {ByteStreamInfo, StreamController, TextStreamInfo} from '../../types.ts'; -import {bigIntToNumber, Future} from '../../utils.ts'; +import {bigIntToNumber, isCompressionStreamSupported, numberToBigInt} from '../../utils.ts'; +import {deflateRawDecompress, inflateRawTransform} from '../compression.ts'; +import {DEFAULT_MAX_PAYLOAD_BYTE_LENGTH} from '../constants.ts'; import {type ByteStreamHandler, ByteStreamReader, type TextStreamHandler, TextStreamReader} from './StreamReader.ts'; export default class IncomingDataStreamManager { private log = log; + private maxPayloadByteLength: number; + + constructor(maxPayloadByteLength: number = DEFAULT_MAX_PAYLOAD_BYTE_LENGTH) { + this.maxPayloadByteLength = maxPayloadByteLength; + } + private byteStreamControllers = new Map>(); private textStreamControllers = new Map>(); @@ -25,6 +35,25 @@ export default class IncomingDataStreamManager { private textStreamHandlers = new Map(); + private isConnected = false; + + private bufferedPackets: Array<{packet: DataPacket; encryptionType: Encryption_Type}> = []; + + setConnected(connected: boolean) { + this.isConnected = connected; + if (connected) { + this.flushBufferedPackets(); + } + } + + private flushBufferedPackets() { + const packets = this.bufferedPackets; + this.bufferedPackets = []; + for (const {packet, encryptionType} of packets) { + this.handleDataStreamPacket(packet, encryptionType); + } + } + registerTextStreamHandler(topic: string, callback: TextStreamHandler) { if (this.textStreamHandlers.has(topic)) { throw new DataStreamError( @@ -56,6 +85,7 @@ export default class IncomingDataStreamManager { clearControllers() { this.byteStreamControllers.clear(); this.textStreamControllers.clear(); + this.bufferedPackets = []; } validateParticipantHasNoActiveDataStreams(participantIdentity: string) { @@ -75,17 +105,21 @@ export default class IncomingDataStreamManager { DataStreamErrorReason.AbnormalEnd, ); for (const [id, controller] of byteStreamsBeingSentByDisconnectingParticipant) { - controller.outOfBandFailureRejectingFuture.reject?.(abnormalEndError); + controller.controller.error(abnormalEndError); this.byteStreamControllers.delete(id); } for (const [id, controller] of textStreamsBeingSentByDisconnectingParticipant) { - controller.outOfBandFailureRejectingFuture.reject?.(abnormalEndError); + controller.controller.error(abnormalEndError); this.textStreamControllers.delete(id); } } } - async handleDataStreamPacket(packet: DataPacket, encryptionType: Encryption_Type) { + handleDataStreamPacket(packet: DataPacket, encryptionType: Encryption_Type) { + if (!this.isConnected) { + this.bufferedPackets.push({packet, encryptionType}); + return; + } switch (packet.value.case) { case 'streamHeader': return this.handleStreamHeader(packet.value.value, packet.participantIdentity, encryptionType); @@ -98,108 +132,188 @@ export default class IncomingDataStreamManager { } } - private async handleStreamHeader( + private handleStreamHeader( streamHeader: DataStream_Header, participantIdentity: string, encryptionType: Encryption_Type, ) { - if (streamHeader.contentHeader.case === 'byteHeader') { - const streamHandlerCallback = this.byteStreamHandlers.get(streamHeader.topic); - if (!streamHandlerCallback) { - this.log.debug('ignoring incoming byte stream due to no handler for topic', streamHeader.topic); + switch (streamHeader.contentHeader.case) { + case 'byteHeader': { + const streamHandlerCallback = this.byteStreamHandlers.get(streamHeader.topic); + if (!streamHandlerCallback) { + this.log.debug('ignoring incoming byte stream due to no handler for topic', streamHeader.topic); + return; + } + + let streamController: ReadableStreamDefaultController; + + const info: ByteStreamInfo = { + id: streamHeader.streamId, + name: streamHeader.contentHeader.value.name ?? 'unknown', + mimeType: streamHeader.mimeType, + size: streamHeader.totalLength ? Number(streamHeader.totalLength) : undefined, + topic: streamHeader.topic, + timestamp: bigIntToNumber(streamHeader.timestamp), + attributes: streamHeader.attributes, + encryptionType, + }; + + let compressed: boolean; + switch (streamHeader.compression) { + case DataStream_CompressionType.DEFLATE_RAW: + if (!isCompressionStreamSupported()) { + log.warn( + `Data stream ${streamHeader.streamId} received with deflate-raw compression, but this browser does not have support for DecompressionStream. Dropping...`, + ); + return; + } + compressed = true; + break; + case DataStream_CompressionType.NONE: + compressed = false; + break; + default: + log.warn( + `Data stream ${streamHeader.streamId} received with unknown compression type ${streamHeader.compression}, dropping...`, + ); + return; + } + + const inlineContent = streamHeader.inlineContent as NonSharedUint8Array; + if (typeof inlineContent !== 'undefined') { + streamHandlerCallback( + new ByteStreamReader( + info, + createInlineStream( + streamHeader.streamId, + compressed ? deflateRawDecompress(inlineContent, this.maxPayloadByteLength) : inlineContent, + ), + bigIntToNumber(streamHeader.totalLength), + ), + {identity: participantIdentity}, + ); + return; + } + + const stream = new ReadableStream({ + start: (controller) => { + streamController = controller; + + if (this.byteStreamControllers.has(streamHeader.streamId)) { + throw new DataStreamError( + `A data stream read is already in progress for a stream with id ${streamHeader.streamId}.`, + DataStreamErrorReason.AlreadyOpened, + ); + } + + this.byteStreamControllers.set(streamHeader.streamId, { + info, + controller: streamController, + startTime: Date.now(), + sendingParticipantIdentity: participantIdentity, + }); + }, + }); + streamHandlerCallback( + new ByteStreamReader( + info, + compressed + ? inflateRawByteChunkStream(stream, streamHeader.streamId, this.maxPayloadByteLength) + : stream.pipeThrough(ensureOrderedChunks(streamHeader.streamId)), + bigIntToNumber(streamHeader.totalLength), + ), + { + identity: participantIdentity, + }, + ); return; } + case 'textHeader': { + const streamHandlerCallback = this.textStreamHandlers.get(streamHeader.topic); + if (!streamHandlerCallback) { + this.log.debug('ignoring incoming text stream due to no handler for topic', streamHeader.topic); + return; + } - let streamController: ReadableStreamDefaultController; - const outOfBandFailureRejectingFuture = new Future(); - outOfBandFailureRejectingFuture.promise.catch((err) => { - this.log.error(err); - }); + let streamController: ReadableStreamDefaultController; - const info: ByteStreamInfo = { - id: streamHeader.streamId, - name: streamHeader.contentHeader.value.name ?? 'unknown', - mimeType: streamHeader.mimeType, - size: streamHeader.totalLength ? Number(streamHeader.totalLength) : undefined, - topic: streamHeader.topic, - timestamp: bigIntToNumber(streamHeader.timestamp), - attributes: streamHeader.attributes, - encryptionType, - }; - const stream = new ReadableStream({ - start: (controller) => { - streamController = controller; + const info: TextStreamInfo = { + id: streamHeader.streamId, + mimeType: streamHeader.mimeType, + size: streamHeader.totalLength ? Number(streamHeader.totalLength) : undefined, + topic: streamHeader.topic, + timestamp: Number(streamHeader.timestamp), + attributes: streamHeader.attributes, + encryptionType, + attachedStreamIds: streamHeader.contentHeader.value.attachedStreamIds, + }; - if (this.textStreamControllers.has(streamHeader.streamId)) { - throw new DataStreamError( - `A data stream read is already in progress for a stream with id ${streamHeader.streamId}.`, - DataStreamErrorReason.AlreadyOpened, + let compressed: boolean; + switch (streamHeader.compression) { + case DataStream_CompressionType.DEFLATE_RAW: + if (!isCompressionStreamSupported()) { + log.warn( + `Data stream ${streamHeader.streamId} received with deflate-raw compression, but this browser does not have support for DecompressionStream. Dropping...`, + ); + return; + } + compressed = true; + break; + case DataStream_CompressionType.NONE: + compressed = false; + break; + default: + log.warn( + `Data stream ${streamHeader.streamId} received with unknown compression type ${streamHeader.compression}, dropping...`, ); - } + return; + } - this.byteStreamControllers.set(streamHeader.streamId, { + const inlineContent = streamHeader.inlineContent as NonSharedUint8Array; + if (typeof inlineContent !== 'undefined') { + const content = compressed ? deflateRawDecompress(inlineContent, this.maxPayloadByteLength) : inlineContent; + streamHandlerCallback( + new TextStreamReader( + info, + createInlineStream(streamHeader.streamId, content), + bigIntToNumber(streamHeader.totalLength), + ), + {identity: participantIdentity}, + ); + return; + } + + const stream = new ReadableStream({ + start: (controller) => { + streamController = controller; + + if (this.textStreamControllers.has(streamHeader.streamId)) { + throw new DataStreamError( + `A data stream read is already in progress for a stream with id ${streamHeader.streamId}.`, + DataStreamErrorReason.AlreadyOpened, + ); + } + + this.textStreamControllers.set(streamHeader.streamId, { + info, + controller: streamController, + startTime: Date.now(), + sendingParticipantIdentity: participantIdentity, + }); + }, + }); + streamHandlerCallback( + new TextStreamReader( info, - controller: streamController, - startTime: Date.now(), - sendingParticipantIdentity: participantIdentity, - outOfBandFailureRejectingFuture, - }); - }, - }); - streamHandlerCallback( - new ByteStreamReader(info, stream, bigIntToNumber(streamHeader.totalLength), outOfBandFailureRejectingFuture), - { - identity: participantIdentity, - }, - ); - } else if (streamHeader.contentHeader.case === 'textHeader') { - const streamHandlerCallback = this.textStreamHandlers.get(streamHeader.topic); - if (!streamHandlerCallback) { - this.log.debug('ignoring incoming text stream due to no handler for topic', streamHeader.topic); + compressed + ? inflateRawChunkStream(stream, streamHeader.streamId, this.maxPayloadByteLength) + : stream.pipeThrough(ensureOrderedChunks(streamHeader.streamId)), + bigIntToNumber(streamHeader.totalLength), + ), + {identity: participantIdentity}, + ); return; } - - let streamController: ReadableStreamDefaultController; - const outOfBandFailureRejectingFuture = new Future(); - outOfBandFailureRejectingFuture.promise.catch((err) => { - this.log.error(err); - }); - - const info: TextStreamInfo = { - id: streamHeader.streamId, - mimeType: streamHeader.mimeType, - size: streamHeader.totalLength ? Number(streamHeader.totalLength) : undefined, - topic: streamHeader.topic, - timestamp: Number(streamHeader.timestamp), - attributes: streamHeader.attributes, - encryptionType, - attachedStreamIds: streamHeader.contentHeader.value.attachedStreamIds, - }; - - const stream = new ReadableStream({ - start: (controller) => { - streamController = controller; - - if (this.textStreamControllers.has(streamHeader.streamId)) { - throw new DataStreamError( - `A data stream read is already in progress for a stream with id ${streamHeader.streamId}.`, - DataStreamErrorReason.AlreadyOpened, - ); - } - - this.textStreamControllers.set(streamHeader.streamId, { - info, - controller: streamController, - startTime: Date.now(), - sendingParticipantIdentity: participantIdentity, - outOfBandFailureRejectingFuture, - }); - }, - }); - streamHandlerCallback( - new TextStreamReader(info, stream, bigIntToNumber(streamHeader.totalLength), outOfBandFailureRejectingFuture), - {identity: participantIdentity}, - ); } } @@ -214,7 +328,7 @@ export default class IncomingDataStreamManager { ), ); this.byteStreamControllers.delete(chunk.streamId); - } else if (chunk.content.length > 0) { + } else { fileBuffer.controller.enqueue(chunk); } } @@ -228,7 +342,7 @@ export default class IncomingDataStreamManager { ), ); this.textStreamControllers.delete(chunk.streamId); - } else if (chunk.content.length > 0) { + } else { textBuffer.controller.enqueue(chunk); } } @@ -246,9 +360,18 @@ export default class IncomingDataStreamManager { ); } else { textBuffer.info.attributes = {...textBuffer.info.attributes, ...trailer.attributes}; - textBuffer.controller.close(); - this.textStreamControllers.delete(trailer.streamId); + if (trailer.reason) { + textBuffer.controller.error( + new DataStreamError( + `Data stream ${trailer.streamId} closed abnormally: ${trailer.reason}`, + DataStreamErrorReason.AbnormalEnd, + ), + ); + } else { + textBuffer.controller.close(); + } } + this.textStreamControllers.delete(trailer.streamId); } const fileBuffer = this.byteStreamControllers.get(trailer.streamId); @@ -262,9 +385,171 @@ export default class IncomingDataStreamManager { ); } else { fileBuffer.info.attributes = {...fileBuffer.info.attributes, ...trailer.attributes}; - fileBuffer.controller.close(); + if (trailer.reason) { + fileBuffer.controller.error( + new DataStreamError( + `Data stream ${trailer.streamId} closed abnormally: ${trailer.reason}`, + DataStreamErrorReason.AbnormalEnd, + ), + ); + } else { + fileBuffer.controller.close(); + } } this.byteStreamControllers.delete(trailer.streamId); } } } + +function createInlineStream( + streamId: string, + content: Uint8Array | Promise, +): ReadableStream { + return new ReadableStream({ + start: async (controller) => { + const bytes = await content; + controller.enqueue(new DataStream_Chunk({streamId, chunkIndex: BigInt(0), content: bytes})); + controller.close(); + }, + }); +} + +function ensureOrderedChunks(streamId: string): TransformStream { + let lastChunkIndex = -1; + return new TransformStream({ + transform: (value, controller) => { + const index = bigIntToNumber(value.chunkIndex); + if (index <= lastChunkIndex) { + log.warn( + `ignoring duplicate chunk ${index} ${value.version > 0 ? `(version ${value.version})` : ''} for data stream ${streamId} (last processed: ${lastChunkIndex})`, + ); + return; + } + if (index > lastChunkIndex + 1) { + throw new DataStreamError( + `Missing chunk(s) ${lastChunkIndex + 1}..${index - 1} for data stream ${streamId} - cannot reassemble payload`, + DataStreamErrorReason.Incomplete, + ); + } + lastChunkIndex = index; + if (value.content.length === 0) { + return; + } + controller.enqueue(value); + }, + }); +} + +function chunksToBytes(): TransformStream { + return new TransformStream({ + transform: (value, controller) => { + controller.enqueue(value.content); + }, + }); +} + +function bytesToChunks(streamId: string): TransformStream { + let outIndex = 0; + return new TransformStream({ + transform: (value, controller) => { + if (value.byteLength > 0) { + controller.enqueue( + new DataStream_Chunk({ + streamId, + chunkIndex: numberToBigInt(outIndex), + content: value, + }), + ); + outIndex += 1; + } + }, + }); +} + +function bytesToDecodedUtf8(streamId: string): TransformStream { + const decoder = new TextDecoder('utf-8'); + const encoder = new TextEncoder(); + + let outIndex = 0; + const decodeOrThrow = (bytes?: Uint8Array): string => { + try { + return bytes ? decoder.decode(bytes, {stream: true}) : decoder.decode(); + } catch (err) { + throw new DataStreamError( + `Cannot decode compressed data stream ${streamId} as text: ${err}`, + DataStreamErrorReason.DecodeFailed, + ); + } + }; + + return new TransformStream({ + transform: (value, controller) => { + const text = decodeOrThrow(value); + if (text.length > 0) { + controller.enqueue( + new DataStream_Chunk({ + streamId, + chunkIndex: numberToBigInt(outIndex), + content: encoder.encode(text), + }), + ); + outIndex += 1; + } + }, + flush: (controller) => { + const tail = decodeOrThrow(); + if (tail.length > 0) { + controller.enqueue( + new DataStream_Chunk({ + streamId, + chunkIndex: numberToBigInt(outIndex), + content: encoder.encode(tail), + }), + ); + outIndex += 1; + } + }, + }); +} + +function inflateRawByteChunkStream( + raw: ReadableStream, + streamId: string, + maxPayloadByteLength: number, +): ReadableStream { + return raw + .pipeThrough(ensureOrderedChunks(streamId)) + .pipeThrough(chunksToBytes()) + .pipeThrough(inflateRawTransform()) + .pipeThrough(maxDecompressedLengthGuard(streamId, maxPayloadByteLength)) + .pipeThrough(bytesToChunks(streamId)); +} + +function inflateRawChunkStream( + raw: ReadableStream, + streamId: string, + maxPayloadByteLength: number, +): ReadableStream { + return raw + .pipeThrough(ensureOrderedChunks(streamId)) + .pipeThrough(chunksToBytes()) + .pipeThrough(inflateRawTransform()) + .pipeThrough(maxDecompressedLengthGuard(streamId, maxPayloadByteLength)) + .pipeThrough(bytesToDecodedUtf8(streamId)); +} + +function maxDecompressedLengthGuard(streamId: string, maxByteLength: number): TransformStream { + let total = 0; + return new TransformStream({ + transform: (value, controller) => { + total += value.byteLength; + if (total > maxByteLength) { + throw new DataStreamError( + `Data stream ${streamId} exceeds the maximum payload size of ${maxByteLength} bytes`, + DataStreamErrorReason.PayloadTooLarge, + ); + } + controller.enqueue(value); + }, + }); +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-stream/incoming/StreamReader.ts b/fluxer_app/pkgs/livekit-client/src/room/data-stream/incoming/StreamReader.ts index a2d11aeec..dac1fc224 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/data-stream/incoming/StreamReader.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/data-stream/incoming/StreamReader.ts @@ -4,7 +4,6 @@ import type {DataStream_Chunk} from '@livekit/protocol'; import {DataStreamError, DataStreamErrorReason} from '../../errors.ts'; import type {BaseStreamInfo, ByteStreamInfo, TextStreamInfo} from '../../types.ts'; -import {bigIntToNumber, Future} from '../../utils.ts'; export type BaseStreamReaderReadAllOpts = { signal?: AbortSignal; @@ -19,8 +18,6 @@ abstract class BaseStreamReader { protected bytesReceived: number; - protected outOfBandFailureRejectingFuture?: Future; - get info() { return this._info; } @@ -43,27 +40,13 @@ abstract class BaseStreamReader { } } - constructor( - info: T, - stream: ReadableStream, - totalByteSize?: number, - outOfBandFailureRejectingFuture?: Future, - ) { + constructor(info: T, stream: ReadableStream, totalByteSize?: number) { this.reader = stream; this.totalByteSize = totalByteSize; this._info = info; this.bytesReceived = 0; - this.outOfBandFailureRejectingFuture = outOfBandFailureRejectingFuture; } - protected abstract handleChunkReceived(chunk: DataStream_Chunk): void; - - onProgress?: (progress: number | undefined) => void; - - abstract readAll(opts?: BaseStreamReaderReadAllOpts): Promise>; -} - -export class ByteStreamReader extends BaseStreamReader { protected handleChunkReceived(chunk: DataStream_Chunk) { this.bytesReceived += chunk.content.byteLength; this.validateBytesReceived(); @@ -72,47 +55,53 @@ export class ByteStreamReader extends BaseStreamReader { this.onProgress?.(currentProgress); } + onProgress?: (progress: number | undefined) => void; + + abstract readAll(opts?: BaseStreamReaderReadAllOpts): Promise>; +} + +export class ByteStreamReader extends BaseStreamReader { signal?: AbortSignal; - [Symbol.asyncIterator](): AsyncIterator { + [Symbol.asyncIterator]() { const reader = this.reader.getReader(); - - const rejectingSignalFuture = new Future(); - let activeSignal: AbortSignal | null = null; - let onAbort: (() => void) | null = null; - if (this.signal) { - const signal = this.signal; - onAbort = () => { - rejectingSignalFuture.reject?.(signal.reason); - }; - signal.addEventListener('abort', onAbort); - activeSignal = signal; - } + reader.closed.catch(() => {}); const cleanup = () => { reader.releaseLock(); - - if (activeSignal && onAbort) { - activeSignal.removeEventListener('abort', onAbort); - } - this.signal = undefined; }; return { - next: async (): Promise> => { + next: async (): Promise> => { try { - const {done, value} = await Promise.race([ - reader.read(), - rejectingSignalFuture.promise, - this.outOfBandFailureRejectingFuture?.promise ?? new Promise(() => {}), - ]); - if (done) { + const signal = this.signal; + if (signal?.aborted) { + throw signal.reason; + } + const result = await new Promise>((resolve, reject) => { + if (signal) { + const onAbort = () => reject(signal.reason); + signal.addEventListener('abort', onAbort, {once: true}); + reader + .read() + .then(resolve, reject) + .finally(() => { + signal.removeEventListener('abort', onAbort); + }); + } else { + reader.read().then(resolve, reject); + } + }); + if (result.done) { this.validateBytesReceived(true); - return {done: true, value: undefined}; + if (typeof this.totalByteSize === 'number') { + this.onProgress?.(1); + } + return {done: true, value: undefined as any}; } else { - this.handleChunkReceived(value); - return {done: false, value: value.content}; + this.handleChunkReceived(result.value); + return {done: false, value: result.value.content}; } } catch (err) { cleanup(); @@ -120,7 +109,7 @@ export class ByteStreamReader extends BaseStreamReader { } }, - async return(): Promise> { + async return(): Promise> { cleanup(); return {done: true, value: undefined}; }, @@ -143,81 +132,54 @@ export class ByteStreamReader extends BaseStreamReader { } export class TextStreamReader extends BaseStreamReader { - private receivedChunks: Map; - signal?: AbortSignal; - constructor( - info: TextStreamInfo, - stream: ReadableStream, - totalChunkCount?: number, - outOfBandFailureRejectingFuture?: Future, - ) { - super(info, stream, totalChunkCount, outOfBandFailureRejectingFuture); - this.receivedChunks = new Map(); - } - - protected handleChunkReceived(chunk: DataStream_Chunk) { - const index = bigIntToNumber(chunk.chunkIndex); - const previousChunkAtIndex = this.receivedChunks.get(index); - if (previousChunkAtIndex && previousChunkAtIndex.version > chunk.version) { - return; - } - this.receivedChunks.set(index, chunk); - - this.bytesReceived += chunk.content.byteLength; - this.validateBytesReceived(); - - const currentProgress = this.totalByteSize ? this.bytesReceived / this.totalByteSize : undefined; - this.onProgress?.(currentProgress); - } - [Symbol.asyncIterator]() { const reader = this.reader.getReader(); - const decoder = new TextDecoder('utf-8', {fatal: true}); - - const rejectingSignalFuture = new Future(); - let activeSignal: AbortSignal | null = null; - let onAbort: (() => void) | null = null; - if (this.signal) { - const signal = this.signal; - onAbort = () => { - rejectingSignalFuture.reject?.(signal.reason); - }; - signal.addEventListener('abort', onAbort); - activeSignal = signal; - } + reader.closed.catch(() => {}); + const decoder = new TextDecoder('utf-8'); + const signal = this.signal; const cleanup = () => { reader.releaseLock(); - - if (activeSignal && onAbort) { - activeSignal.removeEventListener('abort', onAbort); - } - this.signal = undefined; }; return { next: async (): Promise> => { try { - const {done, value} = await Promise.race([ - reader.read(), - rejectingSignalFuture.promise, - this.outOfBandFailureRejectingFuture?.promise ?? new Promise(() => {}), - ]); - if (done) { + if (signal?.aborted) { + throw signal.reason; + } + const result = await new Promise>((resolve, reject) => { + if (signal) { + const onAbort = () => reject(signal.reason); + signal.addEventListener('abort', onAbort, {once: true}); + reader + .read() + .then(resolve, reject) + .finally(() => { + signal.removeEventListener('abort', onAbort); + }); + } else { + reader.read().then(resolve, reject); + } + }); + if (result.done) { this.validateBytesReceived(true); + if (typeof this.totalByteSize === 'number') { + this.onProgress?.(1); + } return {done: true, value: undefined}; } else { - this.handleChunkReceived(value); + this.handleChunkReceived(result.value); let decodedResult: string; try { - decodedResult = decoder.decode(value.content); + decodedResult = decoder.decode(result.value.content); } catch (err) { throw new DataStreamError( - `Cannot decode datastream chunk ${value.chunkIndex} as text: ${err}`, + `Cannot decode datastream chunk ${result.value.chunkIndex} as text: ${err}`, DataStreamErrorReason.DecodeFailed, ); } diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-stream/outgoing/OutgoingDataStreamManager.ts b/fluxer_app/pkgs/livekit-client/src/room/data-stream/outgoing/OutgoingDataStreamManager.ts index 3e5700503..4c67101d6 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/data-stream/outgoing/OutgoingDataStreamManager.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/data-stream/outgoing/OutgoingDataStreamManager.ts @@ -3,40 +3,66 @@ // SPDX-License-Identifier: Apache-2.0 import {Mutex} from '@livekit/mutex'; import { + ClientInfo_Capability, DataPacket, - DataPacket_Kind, - DataStream_ByteHeader, DataStream_Chunk, - DataStream_Header, - DataStream_OperationType, - DataStream_TextHeader, + DataStream_CompressionType, DataStream_Trailer, Encryption_Type, } from '@livekit/protocol'; import type {StructuredLogger} from '../../../logger.ts'; +import type {NonSharedUint8Array} from '../../../type-polyfills/non-shared-typed-arrays.ts'; +import {CLIENT_PROTOCOL_DATA_STREAM_V2} from '../../../version.ts'; +import {DataStreamError, DataStreamErrorReason} from '../../errors.ts'; import {EngineEvent} from '../../events.ts'; import type RTCEngine from '../../RTCEngine.ts'; +import {DataChannelKind} from '../../RTCEngine.ts'; import type { ByteStreamInfo, + SendBytesOptions, SendFileOptions, SendTextOptions, StreamBytesOptions, StreamTextOptions, TextStreamInfo, } from '../../types.ts'; -import {numberToBigInt, splitUtf8} from '../../utils.ts'; +import { + isCompressionStreamSupported, + numberToBigInt, + readableFromBytes, + readBytesInChunks, + splitUtf8, +} from '../../utils.ts'; +import {collect, deflateRawTransform} from '../compression.ts'; +import {STREAM_CHUNK_SIZE_BYTES} from '../constants.ts'; +import {buildByteStreamHeader, buildTextStreamHeader, createStreamHeaderPacket} from './header-utils.ts'; import {ByteStreamWriter, TextStreamWriter} from './StreamWriter.ts'; -const STREAM_CHUNK_SIZE = 15_000; +const textEncoder = new TextEncoder(); export default class OutgoingDataStreamManager { protected engine: RTCEngine; protected log: StructuredLogger; - constructor(engine: RTCEngine, log: StructuredLogger) { + protected getRemoteParticipantClientProtocol: (identity: string) => number; + + protected getRemoteParticipantCapabilities: (identity: string) => Array; + + protected getAllRemoteParticipantIdentities: () => Array; + + constructor( + engine: RTCEngine, + log: StructuredLogger, + getRemoteParticipantClientProtocol: (identity: string) => number, + getRemoteParticipantCapabilities: (identity: string) => Array, + getAllRemoteParticipantIdentities: () => Array, + ) { this.engine = engine; this.log = log; + this.getRemoteParticipantClientProtocol = getRemoteParticipantClientProtocol; + this.getRemoteParticipantCapabilities = getRemoteParticipantCapabilities; + this.getAllRemoteParticipantIdentities = getAllRemoteParticipantIdentities; } setupEngine(engine: RTCEngine) { @@ -45,32 +71,98 @@ export default class OutgoingDataStreamManager { async sendText(text: string, options?: SendTextOptions): Promise { const streamId = crypto.randomUUID(); - const textInBytes = new TextEncoder().encode(text); + const textInBytes = textEncoder.encode(text); const totalTextLength = textInBytes.byteLength; + const compress = options?.compress ?? true; + + let info: TextStreamInfo = { + id: streamId, + mimeType: 'text/plain', + timestamp: Date.now(), + topic: options?.topic ?? '', + size: totalTextLength, + attributes: options?.attributes, + encryptionType: this.engine.e2eeManager?.isDataChannelEncryptionEnabled + ? Encryption_Type.GCM + : Encryption_Type.NONE, + }; + + const compressEligible = + compress && + isCompressionStreamSupported() && + this.allRecipientsSupportV2(options?.destinationIdentities) && + this.allRecipientsSupportCompression(options?.destinationIdentities); + const compressedStream = compressEligible + ? MaybeCollectedStream.fromStream(readableFromBytes(textInBytes).pipeThrough(deflateRawTransform())) + : null; + + const noAttachments = !options?.attachments || options.attachments.length === 0; + if (noAttachments && this.allRecipientsSupportV2(options?.destinationIdentities)) { + let inlineContent: Uint8Array = textInBytes; + let compression = DataStream_CompressionType.NONE; + if (compressedStream) { + const collectedBytes = await compressedStream.collect(); + if (collectedBytes.byteLength < textInBytes.byteLength) { + inlineContent = collectedBytes; + compression = DataStream_CompressionType.DEFLATE_RAW; + } + } + + const header = buildTextStreamHeader(info, undefined, {compression, inlineContent}); + const packet = createStreamHeaderPacket(header, options?.destinationIdentities); + + if (packet.toBinary().byteLength <= STREAM_CHUNK_SIZE_BYTES) { + await this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE); + options?.onProgress?.(1); + return info; + } + } const fileIds = options?.attachments?.map(() => crypto.randomUUID()); - const progresses = new Array(fileIds ? fileIds.length + 1 : 1).fill(0); + const parts = fileIds ? fileIds.length + 1 : 1; + const progresses = new Array(parts).fill(0); const handleProgress = (progress: number, idx: number) => { progresses[idx] = progress; - const totalProgress = progresses.reduce((acc, val) => acc + val, 0); - options?.onProgress?.(totalProgress); + options?.onProgress?.(progresses.reduce((acc, val) => acc + val, 0) / parts); }; - const writer = await this.streamText({ - streamId, - totalSize: totalTextLength, - destinationIdentities: options?.destinationIdentities, - topic: options?.topic, - attachedStreamIds: fileIds, - attributes: options?.attributes, - }); + if (compressedStream) { + info.attachedStreamIds = fileIds; - await writer.write(text); - handleProgress(1, 0); + const header = buildTextStreamHeader(info, undefined, { + compression: DataStream_CompressionType.DEFLATE_RAW, + }); + const packet = createStreamHeaderPacket(header, options?.destinationIdentities); + await this.sendChunkedByteStream( + packet, + streamId, + options?.destinationIdentities, + compressedStream + .stream() + .pipeThrough(progressReportingStream(textInBytes.length, (progress) => handleProgress(progress, 0))), + ); - await writer.close(); + if (textInBytes.length === 0) { + handleProgress(1, 0); + } + } else { + const writer = await this.streamText({ + streamId, + totalSize: totalTextLength, + destinationIdentities: options?.destinationIdentities, + topic: options?.topic, + attachedStreamIds: fileIds, + attributes: options?.attributes, + }); + + await writer.write(text); + handleProgress(1, 0); + + await writer.close(); + info = writer.info; + } if (options?.attachments && fileIds) { await Promise.all( @@ -78,6 +170,8 @@ export default class OutgoingDataStreamManager { this._sendFile(fileIds[idx], file, { topic: options.topic, mimeType: file.type, + destinationIdentities: options.destinationIdentities, + compress: options.compress, onProgress: (progress) => { handleProgress(progress, idx + 1); }, @@ -85,11 +179,131 @@ export default class OutgoingDataStreamManager { ), ); } - return writer.info; + return info; + } + + async sendBytes(bytes: Uint8Array, options?: SendBytesOptions): Promise { + const streamId = crypto.randomUUID(); + const destinationIdentities = options?.destinationIdentities; + const compress = options?.compress ?? true; + + const info: ByteStreamInfo = { + id: streamId, + name: options?.name ?? 'unknown', + mimeType: options?.mimeType ?? 'application/octet-stream', + timestamp: Date.now(), + topic: options?.topic ?? '', + size: bytes.byteLength, + attributes: options?.attributes, + encryptionType: this.engine.e2eeManager?.isDataChannelEncryptionEnabled + ? Encryption_Type.GCM + : Encryption_Type.NONE, + }; + + const progressMonitorTap = progressReportingStream(bytes.length, options?.onProgress); + + const compressEligible = + compress && + isCompressionStreamSupported() && + this.allRecipientsSupportV2(destinationIdentities) && + this.allRecipientsSupportCompression(destinationIdentities); + const compressedStream = compressEligible + ? MaybeCollectedStream.fromStream( + readableFromBytes(bytes as NonSharedUint8Array) + .pipeThrough(progressMonitorTap) + .pipeThrough(deflateRawTransform()), + ) + : null; + + if (this.allRecipientsSupportV2(destinationIdentities)) { + let inlineContent: Uint8Array = bytes; + let compression = DataStream_CompressionType.NONE; + if (compressedStream) { + const collectedBytes = await compressedStream.collect(); + if (collectedBytes.byteLength < bytes.byteLength) { + inlineContent = collectedBytes; + compression = DataStream_CompressionType.DEFLATE_RAW; + } + } + + const header = buildByteStreamHeader(info, {compression, inlineContent}); + const packet = createStreamHeaderPacket(header, destinationIdentities); + + if (packet.toBinary().byteLength <= STREAM_CHUNK_SIZE_BYTES) { + await this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE); + options?.onProgress?.(1); + return info; + } + } + + const header = buildByteStreamHeader(info, { + compression: compressedStream ? DataStream_CompressionType.DEFLATE_RAW : DataStream_CompressionType.NONE, + }); + const packet = createStreamHeaderPacket(header, destinationIdentities); + const source = compressedStream + ? compressedStream.stream() + : readableFromBytes(bytes as NonSharedUint8Array).pipeThrough(progressMonitorTap); + await this.sendChunkedByteStream(packet, streamId, destinationIdentities, source); + + if (bytes.length === 0) { + options?.onProgress?.(1); + } + + return info; + } + + private allRecipientsSupportV2(destinationIdentities?: Array): boolean { + const identities = + destinationIdentities && destinationIdentities.length > 0 + ? destinationIdentities + : this.getAllRemoteParticipantIdentities(); + return identities.every( + (identity) => this.getRemoteParticipantClientProtocol(identity) >= CLIENT_PROTOCOL_DATA_STREAM_V2, + ); + } + + private allRecipientsSupportCompression(destinationIdentities?: Array): boolean { + const identities = + destinationIdentities && destinationIdentities.length > 0 + ? destinationIdentities + : this.getAllRemoteParticipantIdentities(); + return identities.every((identity) => + this.getRemoteParticipantCapabilities(identity).includes(ClientInfo_Capability.CAP_COMPRESSION_DEFLATE_RAW), + ); + } + + private async sendChunkedByteStream( + headerPacket: DataPacket, + streamId: string, + destinationIdentities: Array | undefined, + source: ReadableStream, + ): Promise { + const engine = this.engine; + await sendHeaderPacket(engine, headerPacket); + + let chunkId = 0; + for await (const chunk of readBytesInChunks(source, STREAM_CHUNK_SIZE_BYTES)) { + const chunkPacket = new DataPacket({ + destinationIdentities, + value: { + case: 'streamChunk', + value: new DataStream_Chunk({ + content: chunk, + streamId, + chunkIndex: numberToBigInt(chunkId), + }), + }, + }); + await engine.sendDataPacket(chunkPacket, DataChannelKind.RELIABLE); + chunkId += 1; + } + + await sendStreamTrailer(streamId, destinationIdentities, engine); } async streamText(options?: StreamTextOptions): Promise { const streamId = options?.streamId ?? crypto.randomUUID(); + const destinationIdentities = options?.destinationIdentities; const info: TextStreamInfo = { id: streamId, @@ -103,39 +317,16 @@ export default class OutgoingDataStreamManager { : Encryption_Type.NONE, attachedStreamIds: options?.attachedStreamIds, }; - const header = new DataStream_Header({ - streamId, - mimeType: info.mimeType, - topic: info.topic, - timestamp: numberToBigInt(info.timestamp), - totalLength: numberToBigInt(options?.totalSize), - attributes: info.attributes, - contentHeader: { - case: 'textHeader', - value: new DataStream_TextHeader({ - version: options?.version, - attachedStreamIds: info.attachedStreamIds, - replyToStreamId: options?.replyToStreamId, - operationType: options?.type === 'update' ? DataStream_OperationType.UPDATE : DataStream_OperationType.CREATE, - }), - }, - }); - const destinationIdentities = options?.destinationIdentities; - const packet = new DataPacket({ - destinationIdentities, - value: { - case: 'streamHeader', - value: header, - }, - }); - await this.engine.sendDataPacket(packet, DataPacket_Kind.RELIABLE); + const header = buildTextStreamHeader(info, options); + const packet = createStreamHeaderPacket(header, destinationIdentities); + await sendHeaderPacket(this.engine, packet); let chunkId = 0; const engine = this.engine; const writableStream = new WritableStream({ async write(text) { - for (const textByteChunk of splitUtf8(text, STREAM_CHUNK_SIZE)) { + for (const textByteChunk of splitUtf8(text, STREAM_CHUNK_SIZE_BYTES)) { const chunk = new DataStream_Chunk({ content: textByteChunk, streamId, @@ -148,23 +339,13 @@ export default class OutgoingDataStreamManager { value: chunk, }, }); - await engine.sendDataPacket(chunkPacket, DataPacket_Kind.RELIABLE); + await engine.sendDataPacket(chunkPacket, DataChannelKind.RELIABLE); chunkId += 1; } }, async close() { - const trailer = new DataStream_Trailer({ - streamId, - }); - const trailerPacket = new DataPacket({ - destinationIdentities, - value: { - case: 'streamTrailer', - value: trailer, - }, - }); - await engine.sendDataPacket(trailerPacket, DataPacket_Kind.RELIABLE); + await sendStreamTrailer(streamId, destinationIdentities, engine); }, abort(_err) {}, }); @@ -188,25 +369,40 @@ export default class OutgoingDataStreamManager { return {id: streamId}; } - private async _sendFile(streamId: string, file: File, options?: SendFileOptions) { - const writer = await this.streamBytes({ - streamId, - totalSize: file.size, + private async _sendFile(streamId: string, file: File, options?: SendFileOptions): Promise { + const destinationIdentities = options?.destinationIdentities; + const compress = + (options?.compress ?? true) && + isCompressionStreamSupported() && + this.allRecipientsSupportV2(destinationIdentities) && + this.allRecipientsSupportCompression(destinationIdentities); + + const info: ByteStreamInfo = { + id: streamId, name: file.name, mimeType: options?.mimeType ?? file.type, - topic: options?.topic, - destinationIdentities: options?.destinationIdentities, + topic: options?.topic ?? '', + timestamp: Date.now(), + size: file.size, + encryptionType: this.engine.e2eeManager?.isDataChannelEncryptionEnabled + ? Encryption_Type.GCM + : Encryption_Type.NONE, + }; + + const header = buildByteStreamHeader(info, { + compression: compress ? DataStream_CompressionType.DEFLATE_RAW : DataStream_CompressionType.NONE, }); - const reader = file.stream().getReader(); - while (true) { - const {done, value} = await reader.read(); - if (done) { - break; - } - await writer.write(value); + const packet = createStreamHeaderPacket(header, destinationIdentities); + + const tapped = file.stream().pipeThrough(progressReportingStream(file.size, options?.onProgress)); + const source = compress ? tapped.pipeThrough(deflateRawTransform()) : tapped; + await this.sendChunkedByteStream(packet, streamId, destinationIdentities, source); + + if (file.size === 0) { + options?.onProgress?.(1); } - await writer.close(); - return writer.info; + + return info; } async streamBytes(options?: StreamBytesOptions) { @@ -226,30 +422,10 @@ export default class OutgoingDataStreamManager { : Encryption_Type.NONE, }; - const header = new DataStream_Header({ - totalLength: numberToBigInt(info.size ?? 0), - mimeType: info.mimeType, - streamId, - topic: info.topic, - timestamp: numberToBigInt(Date.now()), - attributes: info.attributes, - contentHeader: { - case: 'byteHeader', - value: new DataStream_ByteHeader({ - name: info.name, - }), - }, - }); + const header = buildByteStreamHeader(info); + const packet = createStreamHeaderPacket(header, destinationIdentities); - const packet = new DataPacket({ - destinationIdentities, - value: { - case: 'streamHeader', - value: header, - }, - }); - - await this.engine.sendDataPacket(packet, DataPacket_Kind.RELIABLE); + await sendHeaderPacket(this.engine, packet); let chunkId = 0; const writeMutex = new Mutex(); @@ -263,7 +439,7 @@ export default class OutgoingDataStreamManager { let byteOffset = 0; try { while (byteOffset < chunk.byteLength) { - const subChunk = chunk.slice(byteOffset, byteOffset + STREAM_CHUNK_SIZE); + const subChunk = chunk.slice(byteOffset, byteOffset + STREAM_CHUNK_SIZE_BYTES); const chunkPacket = new DataPacket({ destinationIdentities, value: { @@ -275,7 +451,7 @@ export default class OutgoingDataStreamManager { }), }, }); - await engine.sendDataPacket(chunkPacket, DataPacket_Kind.RELIABLE); + await engine.sendDataPacket(chunkPacket, DataChannelKind.RELIABLE); chunkId += 1; byteOffset += subChunk.byteLength; } @@ -284,17 +460,7 @@ export default class OutgoingDataStreamManager { } }, async close() { - const trailer = new DataStream_Trailer({ - streamId, - }); - const trailerPacket = new DataPacket({ - destinationIdentities, - value: { - case: 'streamTrailer', - value: trailer, - }, - }); - await engine.sendDataPacket(trailerPacket, DataPacket_Kind.RELIABLE); + await sendStreamTrailer(streamId, destinationIdentities, engine); }, abort(err) { logLocal.error('Sink error:', err); @@ -306,3 +472,76 @@ export default class OutgoingDataStreamManager { return byteWriter; } } + +class MaybeCollectedStream { + private state: + | {type: 'stream'; stream: ReadableStream} + | {type: 'collected'; bytes: NonSharedUint8Array}; + + private constructor(state: typeof this.state) { + this.state = state; + } + + static fromStream(stream: ReadableStream) { + return new MaybeCollectedStream({type: 'stream', stream}); + } + + async collect() { + switch (this.state.type) { + case 'stream': { + const bytes = await collect(this.state.stream); + this.state = {type: 'collected', bytes}; + return bytes; + } + case 'collected': + return this.state.bytes; + } + } + + stream() { + switch (this.state.type) { + case 'stream': + return this.state.stream; + case 'collected': + return readableFromBytes(this.state.bytes); + } + } +} + +function progressReportingStream( + totalPreCompressionLength: number | undefined, + onProgress?: (progress: number) => void, +): ReadableWritablePair { + let sent = 0; + return new TransformStream({ + transform(chunk, controller) { + sent += chunk.byteLength; + if (onProgress && typeof totalPreCompressionLength === 'number' && totalPreCompressionLength > 0) { + onProgress(Math.min(sent / totalPreCompressionLength, 1)); + } + controller.enqueue(chunk); + }, + }); +} + +async function sendHeaderPacket(engine: RTCEngine, packet: DataPacket): Promise { + if (packet.toBinary().byteLength > STREAM_CHUNK_SIZE_BYTES) { + throw new DataStreamError( + `data stream header exceeds the ${STREAM_CHUNK_SIZE_BYTES}-byte limit; reduce attribute size`, + DataStreamErrorReason.HeaderTooLarge, + ); + } + await engine.sendDataPacket(packet, DataChannelKind.RELIABLE); +} + +async function sendStreamTrailer( + streamId: string, + destinationIdentities: Array | undefined, + engine: RTCEngine, +): Promise { + const trailerPacket = new DataPacket({ + destinationIdentities, + value: {case: 'streamTrailer', value: new DataStream_Trailer({streamId})}, + }); + await engine.sendDataPacket(trailerPacket, DataChannelKind.RELIABLE); +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-stream/outgoing/header-utils.ts b/fluxer_app/pkgs/livekit-client/src/room/data-stream/outgoing/header-utils.ts new file mode 100644 index 000000000..99a167276 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-stream/outgoing/header-utils.ts @@ -0,0 +1,73 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import { + DataPacket, + DataStream_ByteHeader, + DataStream_CompressionType, + DataStream_Header, + DataStream_OperationType, + DataStream_TextHeader, +} from '@livekit/protocol'; +import type {ByteStreamInfo, StreamTextOptions, TextStreamInfo} from '../../types.ts'; +import {numberToBigInt} from '../../utils.ts'; + +export interface StreamHeaderV2Fields { + compression?: DataStream_CompressionType; + inlineContent?: Uint8Array; +} + +export function buildTextStreamHeader( + info: TextStreamInfo, + options?: Pick, + v2?: StreamHeaderV2Fields, +): DataStream_Header { + return new DataStream_Header({ + streamId: info.id, + mimeType: info.mimeType, + topic: info.topic, + timestamp: numberToBigInt(info.timestamp), + totalLength: numberToBigInt(info.size), + attributes: info.attributes, + compression: v2?.compression ?? DataStream_CompressionType.NONE, + inlineContent: v2?.inlineContent, + contentHeader: { + case: 'textHeader', + value: new DataStream_TextHeader({ + version: options?.version, + attachedStreamIds: info.attachedStreamIds, + replyToStreamId: options?.replyToStreamId, + operationType: options?.type === 'update' ? DataStream_OperationType.UPDATE : DataStream_OperationType.CREATE, + }), + }, + }); +} + +export function buildByteStreamHeader(info: ByteStreamInfo, v2?: StreamHeaderV2Fields): DataStream_Header { + return new DataStream_Header({ + streamId: info.id, + mimeType: info.mimeType, + topic: info.topic, + timestamp: numberToBigInt(info.timestamp), + totalLength: numberToBigInt(info.size), + attributes: info.attributes, + compression: v2?.compression ?? DataStream_CompressionType.NONE, + inlineContent: v2?.inlineContent, + contentHeader: { + case: 'byteHeader', + value: new DataStream_ByteHeader({ + name: info.name, + }), + }, + }); +} + +export function createStreamHeaderPacket(header: DataStream_Header, destinationIdentities?: Array): DataPacket { + return new DataPacket({ + destinationIdentities, + value: { + case: 'streamHeader', + value: header, + }, + }); +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/LocalDataTrack.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/LocalDataTrack.ts new file mode 100644 index 000000000..e5f83767a --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/LocalDataTrack.ts @@ -0,0 +1,108 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import log, {getLogger, LoggerNames, type StructuredLogger} from '../../logger.ts'; +import {Future} from '../utils.ts'; +import {type DataTrackFrame, DataTrackFrameInternal} from './frame.ts'; +import type {DataTrackHandle} from './handle.ts'; +import {DataTrackPushFrameError} from './outgoing/errors.ts'; +import type OutgoingDataTrackManager from './outgoing/OutgoingDataTrackManager.ts'; +import type {DataTrackOptions, EventPacketsFlushedChange} from './outgoing/types.ts'; +import {DataTrackSymbol, type IDataTrack, type ILocalTrack, TrackSymbol} from './track-interfaces.ts'; +import type {DataTrackInfo} from './types.ts'; + +export default class LocalDataTrack implements ILocalTrack, IDataTrack { + readonly trackSymbol = TrackSymbol; + + readonly isLocal = true; + + readonly typeSymbol = DataTrackSymbol; + + protected options: DataTrackOptions; + + protected handle: DataTrackHandle | null = null; + + protected manager: OutgoingDataTrackManager; + + protected log: StructuredLogger = log; + + protected flushedFuture = new Future(); + + protected isFlushed = true; + + constructor(options: DataTrackOptions, manager: OutgoingDataTrackManager) { + this.options = options; + this.manager = manager; + + this.log = getLogger(LoggerNames.DataTracks); + + this.manager.on('packetsFlushedChange', this.handleManagerPacketsFlushedChange); + this.manager.on('reset', this.handleManagerReset); + } + + private handleManagerReset = () => { + this.flushedFuture.resolve?.(); + + this.manager.off('packetsFlushedChange', this.handleManagerPacketsFlushedChange); + this.manager.off('reset', this.handleManagerReset); + }; + + private handleManagerPacketsFlushedChange = (event: EventPacketsFlushedChange) => { + this.isFlushed = event.isFlushed; + if (event.isFlushed) { + this.flushedFuture.resolve?.(); + this.flushedFuture = new Future(); + } + }; + + static withExplicitHandle(options: DataTrackOptions, manager: OutgoingDataTrackManager, handle: DataTrackHandle) { + const track = new LocalDataTrack(options, manager); + track.handle = handle; + return track; + } + + get info() { + const descriptor = this.descriptor; + if (descriptor?.type === 'active') { + return descriptor.info; + } else { + return undefined; + } + } + + protected get descriptor() { + return this.handle ? this.manager.getDescriptor(this.handle) : null; + } + + async publish(signal?: AbortSignal) { + this.handle = await this.manager.publishRequest(this.options, signal); + } + + isPublished(): this is {info: DataTrackInfo} { + return this.descriptor?.type === 'active' && this.descriptor.publishState !== 'unpublished'; + } + + tryPush(frame: DataTrackFrame) { + if (!this.handle) { + throw DataTrackPushFrameError.trackUnpublished(); + } + + const internalFrame = DataTrackFrameInternal.from(frame); + return this.manager.tryProcessAndSend(this.handle, internalFrame); + } + + async flush(): Promise { + if (this.isFlushed) { + return; + } + return this.flushedFuture.promise; + } + + async unpublish() { + if (!this.handle) { + log.warn(`Data track "${this.options.name}" is not published, so unpublishing has no effect.`); + return; + } + await this.manager.unpublishRequest(this.handle); + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/RemoteDataTrack.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/RemoteDataTrack.ts new file mode 100644 index 000000000..13ad87544 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/RemoteDataTrack.ts @@ -0,0 +1,52 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import type Participant from '../participant/Participant.ts'; +import type {DataTrackFrame} from './frame.ts'; +import type IncomingDataTrackManager from './incoming/IncomingDataTrackManager.ts'; +import {DataTrackSymbol, type IDataTrack, type IRemoteTrack, TrackSymbol} from './track-interfaces.ts'; +import type {DataTrackInfo, RemoteDataTrackPipelineOptions} from './types.ts'; + +type RemoteDataTrackOptions = { + publisherIdentity: Participant['identity']; +}; + +export type DataTrackSubscribeOptions = { + signal?: AbortSignal; + + bufferSize?: number; +}; + +export default class RemoteDataTrack implements IRemoteTrack, IDataTrack { + readonly trackSymbol = TrackSymbol; + + readonly isLocal = false; + + readonly typeSymbol = DataTrackSymbol; + + info: DataTrackInfo; + + publisherIdentity: Participant['identity']; + + protected manager: IncomingDataTrackManager; + + constructor(info: DataTrackInfo, manager: IncomingDataTrackManager, options: RemoteDataTrackOptions) { + this.info = info; + this.manager = manager; + this.publisherIdentity = options.publisherIdentity; + } + + subscribe(options?: DataTrackSubscribeOptions): ReadableStream { + const [stream, sfuSubscriptionComplete] = this.manager.openSubscriptionStream( + this.info.sid, + options?.signal, + options?.bufferSize, + ); + sfuSubscriptionComplete.catch(() => {}); + return stream; + } + + setPipelineOptions(options: RemoteDataTrackPipelineOptions): void { + this.manager.setPipelineOptions(this.info.sid, options); + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/depacketizer.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/depacketizer.ts new file mode 100644 index 000000000..8d6dd3104 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/depacketizer.ts @@ -0,0 +1,266 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 + +import {getLogger, LoggerNames} from '../../logger.ts'; +import type {NonSharedUint8Array} from '../../type-polyfills/non-shared-typed-arrays.ts'; +import type {Throws} from '../../utils/throws.ts'; +import {LivekitReasonedError} from '../errors.ts'; +import type {DataTrackFrameInternal} from './frame.ts'; +import type {DataTrackExtensions} from './packet/extensions.ts'; +import {type DataTrackPacket, FrameMarker} from './packet/index.ts'; +import type {U16_MAX_SIZE, WrapAroundUnsignedInt} from './utils.ts'; + +const log = getLogger(LoggerNames.DataTracks); + +type PartialFrame = { + startSequence: WrapAroundUnsignedInt; + extensions: DataTrackExtensions; + payloads: Map; +}; + +export class DataTrackDepacketizerDropError< + Reason extends DataTrackDepacketizerDropReason = DataTrackDepacketizerDropReason, +> extends LivekitReasonedError { + override readonly name = 'DataTrackDepacketizerDropError'; + + reason: Reason; + + reasonName: string; + + frameNumber: number; + + constructor(message: string, reason: Reason, frameNumber: number, options?: {cause?: unknown}) { + super(19, `Frame ${frameNumber} dropped: ${message}`, options); + this.reason = reason; + this.reasonName = DataTrackDepacketizerDropReason[reason]; + this.frameNumber = frameNumber; + } + + static interrupted(frameNumber: number, newFrameNumber: number) { + return new DataTrackDepacketizerDropError( + `Interrupted by the start of a new frame ${newFrameNumber}`, + DataTrackDepacketizerDropReason.Interrupted, + frameNumber, + ); + } + + static unknownFrame(frameNumber: number) { + return new DataTrackDepacketizerDropError( + 'Initial packet was never received.', + DataTrackDepacketizerDropReason.UnknownFrame, + frameNumber, + ); + } + + static bufferFull(frameNumber: number) { + return new DataTrackDepacketizerDropError( + 'Reorder buffer is full.', + DataTrackDepacketizerDropReason.BufferFull, + frameNumber, + ); + } + + static incomplete(frameNumber: number, receivedPackets: number, expectedPackets: number) { + return new DataTrackDepacketizerDropError( + `Not all packets received before final packet. Received ${receivedPackets} packets, expected ${expectedPackets} packets.`, + DataTrackDepacketizerDropReason.Incomplete, + frameNumber, + ); + } +} + +export enum DataTrackDepacketizerDropReason { + Interrupted = 0, + UnknownFrame = 1, + BufferFull = 2, + Incomplete = 3, +} + +type PushOptions = { + throwOnInterruption: boolean; + + maxPartialFrames?: number; +}; + +export default class DataTrackDepacketizer { + static MAX_BUFFER_PACKETS = 128; + + private partials: Map = new Map(); + + push( + packet: DataTrackPacket, + options?: PushOptions, + ): Throws { + switch (packet.header.marker) { + case FrameMarker.Single: + return this.frameFromSingle(packet, options); + case FrameMarker.Start: + return this.beginPartial(packet, options); + case FrameMarker.Inter: + case FrameMarker.Final: + return this.pushToPartial(packet); + } + } + + reset() { + this.partials.clear(); + } + + private peekOldestPartialFrameNumber(): number | null { + const first = this.partials.keys().next(); + return first.done ? null : first.value; + } + + private frameFromSingle( + packet: DataTrackPacket, + options?: PushOptions, + ): Throws> { + if (packet.header.marker !== FrameMarker.Single) { + throw new Error( + `Depacketizer.frameFromSingle: packet.header.marker was not FrameMarker.Single, found ${packet.header.marker}.`, + ); + } + + const maxPartialFrames = options?.maxPartialFrames ?? 1; + if (this.partials.size >= maxPartialFrames) { + const oldestPartialFrameNumber = this.peekOldestPartialFrameNumber(); + if (typeof oldestPartialFrameNumber !== 'number') { + throw new Error( + `Depacketizer.frameFromSingle: no oldest frame number found, but partials.size is ${this.partials.size}.`, + ); + } + this.partials.delete(oldestPartialFrameNumber); + if (options?.throwOnInterruption) { + throw DataTrackDepacketizerDropError.interrupted(oldestPartialFrameNumber, packet.header.frameNumber.value); + } + log.warn( + `Data track frame ${oldestPartialFrameNumber} was interrupted by single-packet frame ${packet.header.frameNumber.value}, dropping.`, + ); + } + + return {payload: packet.payload, extensions: packet.header.extensions}; + } + + private beginPartial( + packet: DataTrackPacket, + options?: PushOptions, + ): Throws> { + if (packet.header.marker !== FrameMarker.Start) { + throw new Error( + `Depacketizer.beginPartial: packet.header.marker was not FrameMarker.Start, found ${packet.header.marker}.`, + ); + } + + const startSequence = packet.header.sequence; + const frameNumber = packet.header.frameNumber.value; + const partial: PartialFrame = { + startSequence, + extensions: packet.header.extensions, + payloads: new Map([[startSequence.value, packet.payload]]), + }; + + const maxPartialFrames = options?.maxPartialFrames ?? 1; + while (this.partials.size >= maxPartialFrames) { + const oldestPartialFrameNumber = this.peekOldestPartialFrameNumber(); + if (typeof oldestPartialFrameNumber !== 'number') { + break; + } + this.partials.delete(oldestPartialFrameNumber); + + if (options?.throwOnInterruption) { + throw DataTrackDepacketizerDropError.interrupted(oldestPartialFrameNumber, frameNumber); + } + log.warn( + `Data track partials full (max ${maxPartialFrames}), evicted oldest frame ${oldestPartialFrameNumber} to make room for new frame ${frameNumber}.`, + ); + } + this.partials.set(frameNumber, partial); + + return null; + } + + private pushToPartial( + packet: DataTrackPacket, + ): Throws { + if (packet.header.marker !== FrameMarker.Inter && packet.header.marker !== FrameMarker.Final) { + throw new Error( + `Depacketizer.pushToPartial: packet.header.marker was not FrameMarker.Inter or FrameMarker.Final, found ${packet.header.marker}.`, + ); + } + + const packetFrameNumber = packet.header.frameNumber.value; + const matchingPartial = this.partials.get(packetFrameNumber); + if (!matchingPartial) { + this.partials.delete(packetFrameNumber); + throw DataTrackDepacketizerDropError.unknownFrame(packetFrameNumber); + } + + if (matchingPartial.payloads.size >= DataTrackDepacketizer.MAX_BUFFER_PACKETS) { + this.partials.delete(packetFrameNumber); + throw DataTrackDepacketizerDropError.bufferFull(packetFrameNumber); + } + + if (matchingPartial.payloads.has(packet.header.sequence.value)) { + log.warn( + `Data track frame ${packetFrameNumber} received duplicate packet for sequence ${packet.header.sequence.value}, so replacing with newly received packet.`, + ); + } + matchingPartial.payloads.set(packet.header.sequence.value, packet.payload); + + if (packet.header.marker === FrameMarker.Final) { + return this.finalize(packetFrameNumber, matchingPartial, packet.header.sequence.value); + } + + return null; + } + + private finalize( + partialFrameNumber: number, + partial: PartialFrame, + endSequence: number, + ): Throws> { + const received = partial.payloads.size; + + let payloadLengthBytes = 0; + for (const p of partial.payloads.values()) { + payloadLengthBytes += p.length; + } + const payload = new Uint8Array(payloadLengthBytes); + + const sequencePointer = partial.startSequence.clone(); + let payloadOffsetPointerBytes = 0; + while (true) { + const partialPayload = partial.payloads.get(sequencePointer.value); + if (!partialPayload) { + break; + } + partial.payloads.delete(sequencePointer.value); + + const payloadRemainingBytes = payload.length - payloadOffsetPointerBytes; + if (partialPayload.length > payloadRemainingBytes) { + throw new Error( + `Depacketizer.finalize: Expected at least ${partialPayload.length} more bytes left in the payload buffer, only got ${payloadRemainingBytes} bytes.`, + ); + } + + payload.set(partialPayload, payloadOffsetPointerBytes); + payloadOffsetPointerBytes += partialPayload.length; + + if (sequencePointer.value !== endSequence) { + sequencePointer.increment(); + continue; + } + + this.partials.delete(partialFrameNumber); + return {payload, extensions: partial.extensions}; + } + + this.partials.delete(partialFrameNumber); + throw DataTrackDepacketizerDropError.incomplete( + partialFrameNumber, + received, + endSequence - partial.startSequence.value + 1, + ); + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/frame.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/frame.ts new file mode 100644 index 000000000..375541883 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/frame.ts @@ -0,0 +1,32 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import type {NonSharedUint8Array} from '../../type-polyfills/non-shared-typed-arrays.ts'; +import {DataTrackExtensions, DataTrackUserTimestampExtension} from './packet/extensions.ts'; + +export type DataTrackFrame = { + payload: NonSharedUint8Array; + userTimestamp?: bigint; +}; + +export type DataTrackFrameInternal = { + payload: NonSharedUint8Array; + extensions: DataTrackExtensions; +}; + +export const DataTrackFrameInternal = { + from(frame: DataTrackFrame) { + return { + payload: frame.payload, + extensions: new DataTrackExtensions({ + userTimestamp: frame.userTimestamp ? new DataTrackUserTimestampExtension(frame.userTimestamp) : undefined, + }), + }; + }, + lossyIntoFrame(frame: DataTrackFrameInternal): DataTrackFrame { + return { + payload: frame.payload, + userTimestamp: frame.extensions.userTimestamp?.timestamp, + }; + }, +}; diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/handle.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/handle.ts new file mode 100644 index 000000000..8ff084d45 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/handle.ts @@ -0,0 +1,71 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import type {Throws} from '../../utils/throws.ts'; +import {LivekitReasonedError} from '../errors.ts'; +import {U16_MAX_SIZE} from './utils.ts'; + +export enum DataTrackHandleErrorReason { + Reserved = 0, + TooLarge = 1, +} + +export class DataTrackHandleError< + Reason extends DataTrackHandleErrorReason = DataTrackHandleErrorReason, +> extends LivekitReasonedError { + override readonly name = 'DataTrackHandleError'; + + reason: Reason; + + reasonName: string; + + constructor(message: string, reason: Reason) { + super(19, message); + this.reason = reason; + this.reasonName = DataTrackHandleErrorReason[reason]; + } + + isReason(reason: R): this is DataTrackHandleError { + return (this.reason as unknown as R) === reason; + } + + static tooLarge() { + return new DataTrackHandleError('Value too large to be a valid track handle', DataTrackHandleErrorReason.TooLarge); + } + + static reserved(value: number) { + return new DataTrackHandleError( + `0x${value.toString(16)} is a reserved value.`, + DataTrackHandleErrorReason.Reserved, + ); + } +} + +export type DataTrackHandle = number; +export const DataTrackHandle = { + fromNumber(raw: number): Throws { + if (raw === 0) { + throw DataTrackHandleError.reserved(raw); + } + if (raw > U16_MAX_SIZE) { + throw DataTrackHandleError.tooLarge(); + } + return raw; + }, +}; + +export class DataTrackHandleAllocator { + value = 0; + + get(): DataTrackHandle | null { + this.value += 1; + if (this.value > U16_MAX_SIZE) { + return null; + } + return this.value; + } + + reset() { + this.value = 0; + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/incoming/IncomingDataTrackManager.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/incoming/IncomingDataTrackManager.ts new file mode 100644 index 000000000..6a29ce904 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/incoming/IncomingDataTrackManager.ts @@ -0,0 +1,573 @@ +import {EventEmitter} from 'events'; +import type TypedEmitter from 'typed-emitter'; +import type {BaseE2EEManager} from '../../../e2ee/E2eeManager.ts'; +import {getLogger, LoggerNames} from '../../../logger.ts'; +import {abortSignalAny, abortSignalTimeout} from '../../../utils/abort-signal-polyfill.ts'; +import type {Throws} from '../../../utils/throws.ts'; +import type Participant from '../../participant/Participant.ts'; +import type RemoteParticipant from '../../participant/RemoteParticipant.ts'; +import {Future} from '../../utils.ts'; +import type {DataTrackDepacketizerDropError} from '../depacketizer.ts'; +import {type DataTrackFrame, DataTrackFrameInternal} from '../frame.ts'; +import type {DataTrackHandle} from '../handle.ts'; +import {DataTrackPacket} from '../packet/index.ts'; +import RemoteDataTrack from '../RemoteDataTrack.ts'; +import type {DataTrackInfo, DataTrackSid, RemoteDataTrackPipelineOptions} from '../types.ts'; +import {DataTrackSubscribeError} from './errors.ts'; +import IncomingDataTrackPipeline from './pipeline.ts'; +import type {EventSfuUpdateSubscription, EventTrackAvailable, EventTrackUnavailable} from './types.ts'; + +const log = getLogger(LoggerNames.DataTracks); + +export type DataTrackIncomingManagerCallbacks = { + sfuUpdateSubscription: (event: EventSfuUpdateSubscription) => void; + + trackPublished: (event: EventTrackAvailable) => void; + + trackUnpublished: (event: EventTrackUnavailable) => void; +}; + +type SubscriptionStateNone = {type: 'none'}; +type SubscriptionStatePending = { + type: 'pending'; + completionFuture: Future; + pendingRequestCount: number; + cancel: () => void; +}; +type SubscriptionStateActive = { + type: 'active'; + subcriptionHandle: DataTrackHandle; + pipeline: IncomingDataTrackPipeline; + streamControllers: Map, () => void>; +}; + +type SubscriptionState = SubscriptionStateNone | SubscriptionStatePending | SubscriptionStateActive; + +type Descriptor = { + info: DataTrackInfo; + publisherIdentity: Participant['identity']; + subscription: S; + pipelineOptions: RemoteDataTrackPipelineOptions; +}; + +type IncomingDataTrackManagerOptions = { + e2eeManager?: BaseE2EEManager; +}; + +const SUBSCRIBE_TIMEOUT_MILLISECONDS = 10_000; + +const READABLE_STREAM_DEFAULT_BUFFER_SIZE = 16; + +export default class IncomingDataTrackManager extends (EventEmitter as new () => TypedEmitter) { + private e2eeManager: BaseE2EEManager | null; + + private descriptors = new Map>(); + + private subscriptionHandles = new Map(); + + constructor(options?: IncomingDataTrackManagerOptions) { + super(); + this.e2eeManager = options?.e2eeManager ?? null; + } + + updateE2eeManager(e2eeManager: BaseE2EEManager | null) { + this.e2eeManager = e2eeManager; + + for (const descriptor of this.descriptors.values()) { + if (descriptor.subscription.type === 'active') { + descriptor.subscription.pipeline.updateE2eeManager(e2eeManager); + } + } + } + + setPipelineOptions(sid: DataTrackSid, options: RemoteDataTrackPipelineOptions): void { + const descriptor = this.descriptors.get(sid); + if (!descriptor) { + log.warn(`Unknown track ${sid}, cannot set pipeline options.`); + return; + } + descriptor.pipelineOptions = options; + if (descriptor.subscription.type === 'active') { + descriptor.subscription.pipeline.setOptions(options); + } + } + + openSubscriptionStream( + sid: DataTrackSid, + signal?: AbortSignal, + bufferSize = READABLE_STREAM_DEFAULT_BUFFER_SIZE, + ): [ReadableStream, Promise>] { + let streamController: ReadableStreamDefaultController | null = null; + const sfuSubscriptionComplete = new Future(); + + const descriptor = this.descriptors.get(sid); + + const detachSignal = () => { + signal?.removeEventListener('abort', onAbort); + }; + + const cleanup = () => { + detachSignal(); + + if (!streamController) { + log.warn(`ReadableStream subscribed to ${sid} was not started.`); + return; + } + if (!descriptor || this.descriptors.get(descriptor.info.sid) !== descriptor) { + log.warn(`Unknown track ${sid}, skipping cancel...`); + return; + } + if (descriptor.subscription.type !== 'active') { + log.warn(`Subscription for track ${sid} is not active, skipping cancel...`); + return; + } + + descriptor.subscription.streamControllers.delete(streamController); + + if (descriptor.subscription.streamControllers.size === 0) { + this.unSubscribeRequest(descriptor.info.sid); + } + }; + + const onAbort = () => { + if (!streamController) { + return; + } + if (descriptor?.subscription.type === 'active') { + descriptor.subscription.streamControllers.delete(streamController); + } + + streamController.error(DataTrackSubscribeError.cancelled()); + sfuSubscriptionComplete.reject?.(DataTrackSubscribeError.cancelled()); + + cleanup(); + }; + + const stream = new ReadableStream( + { + start: (controller) => { + streamController = controller; + + this.subscribeRequest(sid, signal) + .then(async () => { + if (!descriptor || this.descriptors.get(descriptor.info.sid) !== descriptor) { + log.error(`Unknown track ${sid}`); + const err = DataTrackSubscribeError.disconnected(); + controller.error(err); + sfuSubscriptionComplete.reject?.(err); + return; + } + if (descriptor.subscription.type !== 'active') { + log.error(`Subscription for track ${sid} is not active`); + const err = DataTrackSubscribeError.disconnected(); + controller.error(err); + sfuSubscriptionComplete.reject?.(err); + return; + } + + if (signal?.aborted) { + onAbort(); + return; + } + signal?.addEventListener('abort', onAbort); + + descriptor.subscription.streamControllers.set(controller, detachSignal); + sfuSubscriptionComplete.resolve?.(); + }) + .catch((err) => { + controller.error(err); + sfuSubscriptionComplete.reject?.(err); + }); + }, + cancel: () => { + cleanup(); + }, + }, + new CountQueuingStrategy({highWaterMark: bufferSize}), + ); + + return [stream, sfuSubscriptionComplete.promise]; + } + + async subscribeRequest(sid: DataTrackSid, signal?: AbortSignal): Promise> { + const descriptor = this.descriptors.get(sid); + if (!descriptor) { + throw new Error('Cannot subscribe to unknown track'); + } + + const waitForCompletionFuture = async ( + currentDescriptor: Descriptor, + userProvidedSignal?: AbortSignal, + timeoutSignal?: AbortSignal, + ) => { + if (currentDescriptor.subscription.type === 'active') { + return; + } + if (currentDescriptor.subscription.type !== 'pending') { + throw new Error(`Descriptor for track ${sid} is not pending, found ${currentDescriptor.subscription.type}`); + } + + const combinedSignal = abortSignalAny( + [userProvidedSignal, timeoutSignal].filter((s): s is AbortSignal => typeof s !== 'undefined'), + ); + + const proxiedCompletionFuture = new Future(); + currentDescriptor.subscription.completionFuture.promise + .then(() => proxiedCompletionFuture.resolve?.()) + .catch((err) => proxiedCompletionFuture.reject?.(err)); + + const onAbort = () => { + if (currentDescriptor.subscription.type !== 'pending') { + return; + } + currentDescriptor.subscription.pendingRequestCount -= 1; + + if (timeoutSignal?.aborted) { + currentDescriptor.subscription.cancel(); + return; + } + + if (currentDescriptor.subscription.pendingRequestCount <= 0) { + currentDescriptor.subscription.cancel(); + return; + } + + proxiedCompletionFuture.reject?.(DataTrackSubscribeError.cancelled()); + }; + + if (combinedSignal.aborted) { + onAbort(); + } + combinedSignal.addEventListener('abort', onAbort); + await proxiedCompletionFuture.promise; + combinedSignal.removeEventListener('abort', onAbort); + }; + + switch (descriptor.subscription.type) { + case 'none': { + descriptor.subscription = { + type: 'pending', + completionFuture: new Future(), + pendingRequestCount: 1, + cancel: () => { + const previousDescriptorSubscription = descriptor.subscription; + descriptor.subscription = {type: 'none'}; + + this.emit('sfuUpdateSubscription', {sid: descriptor.info.sid, subscribe: false}); + + if (previousDescriptorSubscription.type === 'pending') { + previousDescriptorSubscription.completionFuture.reject?.( + timeoutSignal.aborted ? DataTrackSubscribeError.timeout() : DataTrackSubscribeError.cancelled(), + ); + } + }, + }; + + this.emit('sfuUpdateSubscription', {sid, subscribe: true}); + + const timeoutSignal = abortSignalTimeout(SUBSCRIBE_TIMEOUT_MILLISECONDS); + + await waitForCompletionFuture(descriptor, signal, timeoutSignal); + return; + } + case 'pending': { + descriptor.subscription.pendingRequestCount += 1; + + await waitForCompletionFuture(descriptor, signal); + return; + } + case 'active': { + return; + } + } + } + + async querySubscribed() { + const descriptorInfos = Array.from(this.descriptors.values()) + .filter( + (descriptor): descriptor is Descriptor => descriptor.subscription.type === 'active', + ) + .map( + (descriptor) => + [descriptor.info, descriptor.publisherIdentity] as [info: DataTrackInfo, identity: Participant['identity']], + ); + + return descriptorInfos; + } + + unSubscribeRequest(sid: DataTrackSid) { + const descriptor = this.descriptors.get(sid); + if (!descriptor) { + throw new Error('Cannot subscribe to unknown track'); + } + + if (descriptor.subscription.type !== 'active') { + log.warn( + `Unexpected descriptor state in unSubscribeRequest, expected active, found ${descriptor.subscription?.type}`, + ); + return; + } + + this.closeStreamControllers(descriptor.subscription.streamControllers, sid); + + const previousDescriptorSubscription = descriptor.subscription; + descriptor.subscription = {type: 'none'}; + this.subscriptionHandles.delete(previousDescriptorSubscription.subcriptionHandle); + + this.emit('sfuUpdateSubscription', {sid, subscribe: false}); + } + + private closeStreamControllers(streamControllers: SubscriptionStateActive['streamControllers'], sid: DataTrackSid) { + for (const [controller, detachSignal] of streamControllers) { + detachSignal(); + try { + controller.close(); + } catch (err) { + log.warn(`Failed to close readable stream for track ${sid}: ${err}`); + } + } + } + + async receiveSfuPublicationUpdates(updates: Map>) { + if (updates.size === 0) { + return; + } + + const publisherParticipantToSidsInUpdate = new Map>(); + for (const [publisherIdentity, infos] of updates.entries()) { + const sidsInUpdate = new Set(); + for (const info of infos) { + sidsInUpdate.add(info.sid); + if (this.descriptors.has(info.sid)) { + continue; + } + if (this.handleSidReassigned(publisherIdentity, info)) { + continue; + } + await this.handleTrackPublished(publisherIdentity, info); + } + publisherParticipantToSidsInUpdate.set(publisherIdentity, sidsInUpdate); + } + + for (const [publisherIdentity, sidsInUpdate] of publisherParticipantToSidsInUpdate.entries()) { + const descriptorsForPublisher = Array.from(this.descriptors.entries()) + .filter(([_sid, descriptor]) => descriptor.publisherIdentity === publisherIdentity) + .map(([sid]) => sid); + const unpublishedSids = descriptorsForPublisher.filter((sid) => !sidsInUpdate.has(sid)); + for (const sid of unpublishedSids) { + this.handleTrackUnpublished(sid); + } + } + } + + async queryPublications() { + return Array.from(this.descriptors.values()).map((descriptor) => descriptor.info); + } + + async handleTrackPublished(publisherIdentity: Participant['identity'], info: DataTrackInfo) { + if (this.descriptors.has(info.sid)) { + log.error(`Existing descriptor for track ${info.sid}`); + return; + } + const descriptor: Descriptor = { + info, + publisherIdentity, + subscription: {type: 'none'}, + pipelineOptions: {}, + }; + this.descriptors.set(descriptor.info.sid, descriptor); + + const track = new RemoteDataTrack(descriptor.info, this, {publisherIdentity}); + this.emit('trackPublished', {track}); + } + + private handleSidReassigned(publisherIdentity: Participant['identity'], info: DataTrackInfo): boolean { + const existingEntry = Array.from(this.descriptors.entries()).find( + ([_sid, descriptor]) => + descriptor.publisherIdentity === publisherIdentity && descriptor.info.pubHandle === info.pubHandle, + ); + if (!existingEntry) { + return false; + } + const [oldSid, descriptor] = existingEntry; + + const {name, usesE2ee} = descriptor.info; + if (name !== info.name || usesE2ee !== info.usesE2ee) { + log.warn(`Info mismatch for ${oldSid}, treating as new publication`); + return false; + } + + const newSid = info.sid; + log.debug(`SID reassigned: ${oldSid} -> ${newSid}`); + + if (!this.descriptors.delete(oldSid)) { + return false; + } + descriptor.info.sid = newSid; + + switch (descriptor.subscription.type) { + case 'none': + break; + case 'pending': + case 'active': + this.emit('sfuUpdateSubscription', {sid: newSid, subscribe: true}); + break; + } + if (descriptor.subscription.type === 'active') { + this.subscriptionHandles.set(descriptor.subscription.subcriptionHandle, newSid); + } + this.descriptors.set(newSid, descriptor); + return true; + } + + handleTrackUnpublished(sid: DataTrackSid) { + const descriptor = this.descriptors.get(sid); + if (!descriptor) { + log.error(`Unknown track ${sid}`); + return; + } + this.descriptors.delete(sid); + + if (descriptor.subscription.type === 'active') { + this.closeStreamControllers(descriptor.subscription.streamControllers, sid); + this.subscriptionHandles.delete(descriptor.subscription.subcriptionHandle); + } + + this.emit('trackUnpublished', {sid, publisherIdentity: descriptor.publisherIdentity}); + } + + receivedSfuSubscriberHandles(mapping: Map) { + for (const [handle, sid] of mapping.entries()) { + this.registerSubscriberHandle(handle, sid); + } + } + + private registerSubscriberHandle(assignedHandle: DataTrackHandle, sid: DataTrackSid) { + const descriptor = this.descriptors.get(sid); + if (!descriptor) { + log.error(`Unknown track ${sid}`); + return; + } + switch (descriptor.subscription.type) { + case 'none': { + log.warn(`No subscription for ${sid}`); + return; + } + case 'active': { + this.subscriptionHandles.delete(descriptor.subscription.subcriptionHandle); + descriptor.subscription.subcriptionHandle = assignedHandle; + this.subscriptionHandles.set(assignedHandle, sid); + return; + } + case 'pending': { + log.debug(`data track subscription activated`, {sid, handle: assignedHandle}); + const pipeline = new IncomingDataTrackPipeline({ + info: descriptor.info, + publisherIdentity: descriptor.publisherIdentity, + e2eeManager: this.e2eeManager, + pipelineOptions: descriptor.pipelineOptions, + }); + + const previousDescriptorSubscription = descriptor.subscription; + descriptor.subscription = { + type: 'active', + subcriptionHandle: assignedHandle, + pipeline, + streamControllers: new Map(), + }; + this.subscriptionHandles.set(assignedHandle, sid); + + previousDescriptorSubscription.completionFuture.resolve?.(); + } + } + } + + async packetReceived(bytes: Uint8Array): Promise> { + let packet: DataTrackPacket; + try { + [packet] = DataTrackPacket.fromBinary(bytes); + } catch (err) { + log.error(`Failed to deserialize packet: ${err}`); + return; + } + + const sid = this.subscriptionHandles.get(packet.header.trackHandle); + if (!sid) { + log.warn(`Unknown subscriber handle ${packet.header.trackHandle}`); + return; + } + + const descriptor = this.descriptors.get(sid); + if (!descriptor) { + log.error(`Missing descriptor for track ${sid}`); + return; + } + + if (descriptor.subscription.type !== 'active') { + log.warn(`Received packet for track ${sid} without active subscription`); + return; + } + + const internalFrame = await descriptor.subscription.pipeline.processPacket(packet); + if (!internalFrame) { + return; + } + + for (const controller of descriptor.subscription.streamControllers.keys()) { + if (controller.desiredSize !== null && controller.desiredSize <= 0) { + log.warn( + `Cannot send frame to subscribers: readable stream is full (desiredSize is ${controller.desiredSize}). To increase this threshold, set a higher 'options.highWaterMark' when calling .subscribe().`, + ); + continue; + } + const frame = DataTrackFrameInternal.lossyIntoFrame(internalFrame); + controller.enqueue(frame); + } + } + + resendSubscriptionUpdates() { + for (const [sid, descriptor] of this.descriptors) { + if (descriptor.subscription.type === 'none') { + continue; + } + this.emit('sfuUpdateSubscription', {sid, subscribe: true}); + } + } + + handleRemoteParticipantDisconnected(remoteParticipantIdentity: RemoteParticipant['identity']) { + for (const descriptor of this.descriptors.values()) { + if (descriptor.publisherIdentity !== remoteParticipantIdentity) { + continue; + } + switch (descriptor.subscription.type) { + case 'none': + break; + case 'pending': + descriptor.subscription.completionFuture.reject?.(DataTrackSubscribeError.disconnected()); + break; + case 'active': + this.unSubscribeRequest(descriptor.info.sid); + break; + } + } + } + + reset() { + for (const descriptor of this.descriptors.values()) { + this.emit('trackUnpublished', { + sid: descriptor.info.sid, + publisherIdentity: descriptor.publisherIdentity, + }); + + if (descriptor.subscription.type === 'pending') { + descriptor.subscription.completionFuture.reject?.(DataTrackSubscribeError.disconnected()); + } + + if (descriptor.subscription.type === 'active') { + this.closeStreamControllers(descriptor.subscription.streamControllers, descriptor.info.sid); + } + } + this.descriptors.clear(); + this.subscriptionHandles.clear(); + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/incoming/errors.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/incoming/errors.ts new file mode 100644 index 000000000..5dfd8c912 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/incoming/errors.ts @@ -0,0 +1,55 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import {LivekitReasonedError} from '../../errors.ts'; + +export enum DataTrackSubscribeErrorReason { + Unpublished = 0, + Timeout = 1, + Disconnected = 2, + Cancelled = 4, +} + +export class DataTrackSubscribeError< + Reason extends DataTrackSubscribeErrorReason = DataTrackSubscribeErrorReason, +> extends LivekitReasonedError { + override readonly name = 'DataTrackSubscribeError'; + + reason: Reason; + + reasonName: string; + + constructor(message: string, reason: Reason, options?: {cause?: unknown}) { + super(22, message, options); + this.reason = reason; + this.reasonName = DataTrackSubscribeErrorReason[reason]; + } + + static unpublished() { + return new DataTrackSubscribeError( + 'The track has been unpublished and is no longer available', + DataTrackSubscribeErrorReason.Unpublished, + ); + } + + static timeout() { + return new DataTrackSubscribeError( + 'Request to subscribe to data track timed-out', + DataTrackSubscribeErrorReason.Timeout, + ); + } + + static disconnected() { + return new DataTrackSubscribeError( + 'Cannot subscribe to data track when disconnected', + DataTrackSubscribeErrorReason.Disconnected, + ); + } + + static cancelled() { + return new DataTrackSubscribeError( + 'Subscription to data track cancelled by caller', + DataTrackSubscribeErrorReason.Cancelled, + ); + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/incoming/pipeline.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/incoming/pipeline.ts new file mode 100644 index 000000000..a4f75f82f --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/incoming/pipeline.ts @@ -0,0 +1,107 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 + +import type {BaseE2EEManager} from '../../../e2ee/E2eeManager.ts'; +import {getLogger, LoggerNames} from '../../../logger.ts'; +import type {Throws} from '../../../utils/throws.ts'; +import DataTrackDepacketizer, {type DataTrackDepacketizerDropError} from '../depacketizer.ts'; +import type {DataTrackFrameInternal} from '../frame.ts'; +import type {DataTrackPacket} from '../packet/index.ts'; +import type {DataTrackInfo, RemoteDataTrackPipelineOptions} from '../types.ts'; + +const log = getLogger(LoggerNames.DataTracks); + +type Options = { + info: DataTrackInfo; + publisherIdentity: string; + e2eeManager: BaseE2EEManager | null; + pipelineOptions?: RemoteDataTrackPipelineOptions; +}; + +export default class IncomingDataTrackPipeline { + private publisherIdentity: string; + + private e2eeManager: BaseE2EEManager | null; + + private depacketizer: DataTrackDepacketizer; + + private options: RemoteDataTrackPipelineOptions; + + constructor(options: Options) { + const hasProvider = options.e2eeManager !== null; + if (options.info.usesE2ee !== hasProvider) { + throw new Error('IncomingDataTrackPipeline: DataTrackInfo.usesE2ee must match presence of decryptionProvider'); + } + + const depacketizer = new DataTrackDepacketizer(); + + this.publisherIdentity = options.publisherIdentity; + this.e2eeManager = options.e2eeManager ?? null; + this.depacketizer = depacketizer; + this.options = options.pipelineOptions ?? {}; + } + + updateE2eeManager(e2eeManager: BaseE2EEManager | null) { + this.e2eeManager = e2eeManager; + } + + setOptions(options: RemoteDataTrackPipelineOptions): void { + this.options = options; + } + + async processPacket( + packet: DataTrackPacket, + ): Promise> { + const frame = this.depacketize(packet); + if (!frame) { + return null; + } + + const decrypted = await this.decryptIfNeeded(frame); + if (!decrypted) { + return null; + } + + return decrypted; + } + + private depacketize(packet: DataTrackPacket): Throws { + let frame: DataTrackFrameInternal | null; + try { + frame = this.depacketizer.push(packet, { + throwOnInterruption: false, + maxPartialFrames: this.options.maxPartialFrames, + }); + } catch (err) { + log.warn(`Data frame depacketize error: ${err}`); + return null; + } + return frame; + } + + private async decryptIfNeeded(frame: DataTrackFrameInternal): Promise { + const e2eeManager = this.e2eeManager; + + if (!e2eeManager) { + return frame; + } + + const e2ee = frame.extensions?.e2ee ?? null; + if (!e2ee) { + log.error('Missing E2EE meta'); + return null; + } + + let result: Awaited>; + try { + result = await e2eeManager.handleEncryptedData(frame.payload, e2ee.iv, this.publisherIdentity, e2ee.keyIndex); + } catch (err) { + log.error(`Error decrypting packet: ${err}`); + return null; + } + + frame.payload = result.payload; + return frame; + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/incoming/types.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/incoming/types.ts new file mode 100644 index 000000000..592e3f096 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/incoming/types.ts @@ -0,0 +1,20 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import type Participant from '../../participant/Participant.ts'; +import type RemoteDataTrack from '../RemoteDataTrack.ts'; +import type {DataTrackSid} from '../types.ts'; + +export type EventSfuUpdateSubscription = { + sid: DataTrackSid; + subscribe: boolean; +}; + +export type EventTrackAvailable = { + track: RemoteDataTrack; +}; + +export type EventTrackUnavailable = { + sid: DataTrackSid; + publisherIdentity: Participant['identity']; +}; diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/outgoing/OutgoingDataTrackManager.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/outgoing/OutgoingDataTrackManager.ts new file mode 100644 index 000000000..476a70fae --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/outgoing/OutgoingDataTrackManager.ts @@ -0,0 +1,351 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 + +import {EventEmitter} from 'events'; +import type TypedEmitter from 'typed-emitter'; +import type {BaseE2EEManager} from '../../../e2ee/E2eeManager.ts'; +import {getLogger, LoggerNames} from '../../../logger.ts'; +import {abortSignalAny, abortSignalTimeout} from '../../../utils/abort-signal-polyfill.ts'; +import type {Throws} from '../../../utils/throws.ts'; +import {Future} from '../../utils.ts'; +import type {DataTrackFrameInternal} from '../frame.ts'; +import {type DataTrackHandle, DataTrackHandleAllocator} from '../handle.ts'; +import LocalDataTrack from '../LocalDataTrack.ts'; +import type {DataTrackInfo} from '../types.ts'; +import {DataTrackPublishError, DataTrackPushFrameError, type DataTrackPushFrameErrorReason} from './errors.ts'; +import DataTrackOutgoingPipeline from './pipeline.ts'; +import type { + DataTrackOptions, + EventPacketAvailable, + EventPacketsFlushedChange, + EventSfuPublishRequest, + EventSfuUnpublishRequest, + EventTrackPublished, + EventTrackUnpublished, + SfuPublishResponseResult, +} from './types.ts'; + +const log = getLogger(LoggerNames.DataTracks); + +export type PendingDescriptor = { + type: 'pending'; + completionFuture: Future; +}; +export type ActiveDescriptor = { + type: 'active'; + info: DataTrackInfo; + + publishState: 'published' | 'republishing' | 'unpublished'; + + pipeline: DataTrackOutgoingPipeline; + + unpublishingFuture: Future; +}; +export type Descriptor = PendingDescriptor | ActiveDescriptor; + +export const Descriptor = { + pending(): PendingDescriptor { + return { + type: 'pending', + completionFuture: new Future(), + }; + }, + active(info: DataTrackInfo, e2eeManager: BaseE2EEManager | null): ActiveDescriptor { + return { + type: 'active', + info, + publishState: 'published', + pipeline: new DataTrackOutgoingPipeline({info, e2eeManager}), + unpublishingFuture: new Future(), + }; + }, +}; + +export type DataTrackOutgoingManagerCallbacks = { + sfuPublishRequest: (event: EventSfuPublishRequest) => void; + sfuUnpublishRequest: (event: EventSfuUnpublishRequest) => void; + packetAvailable: (event: EventPacketAvailable) => void; + trackPublished: (event: EventTrackPublished) => void; + trackUnpublished: (event: EventTrackUnpublished) => void; + packetsFlushedChange: (event: EventPacketsFlushedChange) => void; + reset: () => void; +}; + +type OutgoingDataTrackManagerOptions = { + e2eeManager?: BaseE2EEManager; +}; + +const PUBLISH_TIMEOUT_MILLISECONDS = 10_000; + +export default class OutgoingDataTrackManager extends (EventEmitter as new () => TypedEmitter) { + private e2eeManager: BaseE2EEManager | null; + + private handleAllocator = new DataTrackHandleAllocator(); + + private descriptors = new Map(); + + private inFlightPacketCounter = new Map(); + + constructor(options?: OutgoingDataTrackManagerOptions) { + super(); + this.e2eeManager = options?.e2eeManager ?? null; + } + + static withDescriptors(descriptors: Map) { + const manager = new OutgoingDataTrackManager(); + manager.descriptors = descriptors; + return manager; + } + + updateE2eeManager(e2eeManager: BaseE2EEManager | null) { + this.e2eeManager = e2eeManager; + + for (const descriptor of this.descriptors.values()) { + if (descriptor.type === 'active') { + descriptor.pipeline.updateE2eeManager(e2eeManager); + } + } + } + + getDescriptor(handle: DataTrackHandle) { + return this.descriptors.get(handle) ?? null; + } + + async tryProcessAndSend( + handle: DataTrackHandle, + frame: DataTrackFrameInternal, + ): Promise< + Throws< + void, + | DataTrackPushFrameError + | DataTrackPushFrameError + > + > { + const descriptor = this.getDescriptor(handle); + if (descriptor?.type !== 'active') { + throw DataTrackPushFrameError.trackUnpublished(); + } + + if (descriptor.publishState === 'unpublished') { + throw DataTrackPushFrameError.trackUnpublished(); + } + if (descriptor.publishState === 'republishing') { + throw DataTrackPushFrameError.dropped('Data track republishing'); + } + + try { + for await (const packet of descriptor.pipeline.processFrame(frame)) { + const prev = this.inFlightPacketCounter.get(handle) ?? 0; + this.inFlightPacketCounter.set(handle, prev + 1); + if (prev === 0) { + this.emit('packetsFlushedChange', {handle, isFlushed: false}); + } + + this.emit('packetAvailable', {handle, bytes: packet.toBinary()}); + } + } catch (err) { + throw DataTrackPushFrameError.dropped(err); + } + } + + handlePacketSendComplete(handle: DataTrackHandle) { + const prev = this.inFlightPacketCounter.get(handle) ?? 0; + let counter = prev - 1; + + if (counter < 0) { + log.warn( + `OutgoingDataTrackManager.handlePacketSendComplete: inFlightPacketCounter was decremented below 0 (got ${this.inFlightPacketCounter} - resetting to 0. Were more packets send than were emitted?`, + ); + counter = 0; + } + this.inFlightPacketCounter.set(handle, counter); + + if (counter === 0) { + this.emit('packetsFlushedChange', {handle, isFlushed: true}); + } + } + + async publishRequest( + options: DataTrackOptions, + signal?: AbortSignal, + ): Promise> { + const handle = this.handleAllocator.get(); + if (!handle) { + throw DataTrackPublishError.limitReached(); + } + + const timeoutSignal = abortSignalTimeout(PUBLISH_TIMEOUT_MILLISECONDS); + const combinedSignal = signal ? abortSignalAny([signal, timeoutSignal]) : timeoutSignal; + + if (this.descriptors.has(handle)) { + throw new Error('Descriptor for handle already exists'); + } + + const descriptor = Descriptor.pending(); + this.descriptors.set(handle, descriptor); + + const onAbort = () => { + const existingDescriptor = this.descriptors.get(handle); + if (!existingDescriptor) { + log.warn(`No descriptor for ${handle}`); + return; + } + this.descriptors.delete(handle); + + this.emit('sfuUnpublishRequest', {handle}); + + if (existingDescriptor.type === 'pending') { + existingDescriptor.completionFuture.reject?.( + timeoutSignal.aborted ? DataTrackPublishError.timeout() : DataTrackPublishError.cancelled(), + ); + } + }; + if (combinedSignal.aborted) { + onAbort(); + return descriptor.completionFuture.promise.then(() => handle); + } + combinedSignal.addEventListener('abort', onAbort); + + this.emit('sfuPublishRequest', { + handle, + name: options.name, + usesE2ee: this.e2eeManager !== null, + }); + + await descriptor.completionFuture.promise; + combinedSignal.removeEventListener('abort', onAbort); + + this.emit('trackPublished', { + track: LocalDataTrack.withExplicitHandle(options, this, handle), + }); + + return handle; + } + + queryPublished() { + const descriptorInfos = Array.from(this.descriptors.values()) + .filter((descriptor): descriptor is ActiveDescriptor => descriptor.type === 'active') + .map((descriptor) => descriptor.info); + + return descriptorInfos; + } + + async unpublishRequest(handle: DataTrackHandle) { + const descriptor = this.descriptors.get(handle); + if (!descriptor) { + log.warn(`No descriptor for ${handle}`); + return; + } + if (descriptor.type !== 'active') { + log.warn(`Track ${handle} not active`); + return; + } + + this.emit('sfuUnpublishRequest', {handle}); + + await descriptor.unpublishingFuture.promise; + + this.inFlightPacketCounter.delete(handle); + this.emit('trackUnpublished', {sid: descriptor.info.sid}); + } + + receivedSfuPublishResponse(handle: DataTrackHandle, result: SfuPublishResponseResult) { + const descriptor = this.descriptors.get(handle); + if (!descriptor) { + log.warn(`No descriptor for ${handle}`); + return; + } + this.descriptors.delete(handle); + + switch (descriptor.type) { + case 'pending': { + if (result.type === 'ok') { + const info = result.data; + log.debug(`SFU accepted publish request for handle ${handle}`, {sid: info.sid}); + const e2eeManager = info.usesE2ee ? this.e2eeManager : null; + this.descriptors.set(info.pubHandle, Descriptor.active(info, e2eeManager)); + + descriptor.completionFuture.resolve?.(); + } else { + log.debug(`SFU rejected publish request for handle ${handle}`, {error: result.error}); + descriptor.completionFuture.reject?.(result.error); + } + return; + } + case 'active': { + if (descriptor.publishState !== 'republishing') { + log.warn(`Track ${handle} already active`); + return; + } + if (result.type === 'error') { + log.warn(`Republish failed for track ${handle}`); + return; + } + + log.debug(`Track ${handle} republished`); + descriptor.info.sid = result.data.sid; + descriptor.publishState = 'published'; + this.descriptors.set(descriptor.info.pubHandle, descriptor); + } + } + } + + receivedSfuUnpublishResponse(handle: DataTrackHandle) { + const descriptor = this.descriptors.get(handle); + if (!descriptor) { + log.warn(`No descriptor for ${handle}`); + return; + } + this.descriptors.delete(handle); + + if (descriptor.type !== 'active') { + log.warn(`Track ${handle} not active`); + return; + } + + descriptor.publishState = 'unpublished'; + descriptor.unpublishingFuture.resolve?.(); + } + + sfuWillRepublishTracks() { + for (const [handle, descriptor] of this.descriptors.entries()) { + switch (descriptor.type) { + case 'pending': + this.descriptors.delete(handle); + descriptor.completionFuture.reject?.(DataTrackPublishError.disconnected()); + break; + case 'active': + descriptor.publishState = 'republishing'; + + this.emit('sfuPublishRequest', { + handle: descriptor.info.pubHandle, + name: descriptor.info.name, + usesE2ee: descriptor.info.usesE2ee, + }); + } + } + } + + async reset() { + this.handleAllocator.reset(); + + for (const descriptor of this.descriptors.values()) { + switch (descriptor.type) { + case 'pending': + descriptor.completionFuture.reject?.(DataTrackPublishError.disconnected()); + break; + case 'active': + descriptor.unpublishingFuture.resolve?.(); + + await this.unpublishRequest(descriptor.info.pubHandle); + break; + } + } + this.descriptors.clear(); + + this.inFlightPacketCounter.clear(); + + this.emit('reset'); + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/outgoing/errors.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/outgoing/errors.ts new file mode 100644 index 000000000..4a66fbbab --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/outgoing/errors.ts @@ -0,0 +1,154 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import {LivekitReasonedError} from '../../errors.ts'; +import type {DataTrackPacketizerError} from '../packetizer.ts'; + +export enum DataTrackPublishErrorReason { + NotAllowed = 0, + + DuplicateName = 1, + + Timeout = 2, + + LimitReached = 3, + + Disconnected = 4, + + Cancelled = 5, + + InvalidName = 6, + + Unknown = 7, +} + +export class DataTrackPublishError< + Reason extends DataTrackPublishErrorReason = DataTrackPublishErrorReason, +> extends LivekitReasonedError { + override readonly name = 'DataTrackPublishError'; + + reason: Reason; + + reasonName: string; + + rawMessage?: string; + + constructor(message: string, reason: Reason, options?: {rawMessage?: string; cause?: unknown}) { + super(21, message, options); + this.reason = reason; + this.reasonName = DataTrackPublishErrorReason[reason]; + this.rawMessage = options?.rawMessage; + } + + static notAllowed(rawMessage?: string) { + return new DataTrackPublishError('Data track publishing unauthorized', DataTrackPublishErrorReason.NotAllowed, { + rawMessage, + }); + } + + static duplicateName(rawMessage?: string) { + return new DataTrackPublishError('Track name already taken', DataTrackPublishErrorReason.DuplicateName, { + rawMessage, + }); + } + + static invalidName(rawMessage?: string) { + return new DataTrackPublishError('Track name is invalid', DataTrackPublishErrorReason.InvalidName, {rawMessage}); + } + + static timeout() { + return new DataTrackPublishError( + 'Publish data track timed-out. Does the LiveKit server support data tracks?', + DataTrackPublishErrorReason.Timeout, + ); + } + + static limitReached(rawMessage?: string) { + return new DataTrackPublishError('Data track publication limit reached', DataTrackPublishErrorReason.LimitReached, { + rawMessage, + }); + } + + static unknown(reason: number, message: string) { + return new DataTrackPublishError( + `Received RequestResponse for publishDataTrack, but reason was unrecognised (${reason}, ${message})`, + DataTrackPublishErrorReason.Unknown, + ); + } + + static disconnected() { + return new DataTrackPublishError('Room disconnected', DataTrackPublishErrorReason.Disconnected); + } + + static cancelled() { + return new DataTrackPublishError('Publish data track cancelled by caller', DataTrackPublishErrorReason.Cancelled); + } +} + +export enum DataTrackPushFrameErrorReason { + TrackUnpublished = 0, + Dropped = 1, +} + +export class DataTrackPushFrameError< + Reason extends DataTrackPushFrameErrorReason = DataTrackPushFrameErrorReason, +> extends LivekitReasonedError { + override readonly name = 'DataTrackPushFrameError'; + + reason: Reason; + + reasonName: string; + + constructor(message: string, reason: Reason, options?: {cause?: unknown}) { + super(22, message, options); + this.reason = reason; + this.reasonName = DataTrackPushFrameErrorReason[reason]; + } + + static trackUnpublished() { + return new DataTrackPushFrameError('Track is no longer published', DataTrackPushFrameErrorReason.TrackUnpublished); + } + + static dropped(cause?: unknown) { + return new DataTrackPushFrameError('Frame was dropped', DataTrackPushFrameErrorReason.Dropped, { + cause, + }); + } +} + +export enum DataTrackOutgoingPipelineErrorReason { + Packetizer = 0, + Encryption = 1, +} + +export class DataTrackOutgoingPipelineError< + Reason extends DataTrackOutgoingPipelineErrorReason = DataTrackOutgoingPipelineErrorReason, +> extends LivekitReasonedError { + override readonly name = 'DataTrackOutgoingPipelineError'; + + reason: Reason; + + reasonName: string; + + constructor(message: string, reason: Reason, options?: {cause?: unknown}) { + super(21, message, options); + this.reason = reason; + this.reasonName = DataTrackOutgoingPipelineErrorReason[reason]; + } + + static packetizer(cause: DataTrackPacketizerError) { + return new DataTrackOutgoingPipelineError( + 'Error packetizing frame', + DataTrackOutgoingPipelineErrorReason.Packetizer, + {cause}, + ); + } + + static encryption(cause: unknown) { + return new DataTrackOutgoingPipelineError( + 'Error encrypting frame', + DataTrackOutgoingPipelineErrorReason.Encryption, + {cause}, + ); + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/outgoing/pipeline.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/outgoing/pipeline.ts new file mode 100644 index 000000000..16b5aad25 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/outgoing/pipeline.ts @@ -0,0 +1,71 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 + +import type {BaseE2EEManager} from '../../../e2ee/E2eeManager.ts'; +import type {Throws} from '../../../utils/throws.ts'; +import type {DataTrackFrameInternal} from '../frame.ts'; +import {DataTrackE2eeExtension} from '../packet/extensions.ts'; +import type {DataTrackPacket} from '../packet/index.ts'; +import DataTrackPacketizer, {DataTrackPacketizerError} from '../packetizer.ts'; +import type {DataTrackInfo} from '../types.ts'; +import {DataTrackOutgoingPipelineError, type DataTrackOutgoingPipelineErrorReason} from './errors.ts'; + +type Options = { + info: DataTrackInfo; + e2eeManager: BaseE2EEManager | null; +}; + +export default class DataTrackOutgoingPipeline { + private e2eeManager: BaseE2EEManager | null; + + private packetizer: DataTrackPacketizer; + + private static TRANSPORT_MTU_BYTES = 16_000; + + constructor(options: Options) { + this.e2eeManager = options.e2eeManager; + this.packetizer = new DataTrackPacketizer(options.info.pubHandle, DataTrackOutgoingPipeline.TRANSPORT_MTU_BYTES); + } + + updateE2eeManager(e2eeManager: BaseE2EEManager | null) { + this.e2eeManager = e2eeManager; + } + + async *processFrame( + frame: DataTrackFrameInternal, + ): Throws, DataTrackOutgoingPipelineError> { + const encryptedFrame = await this.encryptIfNeeded(frame); + + try { + yield* this.packetizer.packetize(encryptedFrame); + } catch (error) { + if (error instanceof DataTrackPacketizerError) { + throw DataTrackOutgoingPipelineError.packetizer(error); + } + throw error; + } + } + + async encryptIfNeeded( + frame: DataTrackFrameInternal, + ): Promise< + Throws> + > { + if (!this.e2eeManager) { + return frame; + } + + let encryptedResult: Awaited>; + try { + encryptedResult = await this.e2eeManager.encryptData(frame.payload); + } catch (err) { + throw DataTrackOutgoingPipelineError.encryption(err); + } + + frame.payload = encryptedResult.payload; + frame.extensions.e2ee = new DataTrackE2eeExtension(encryptedResult.keyIndex, encryptedResult.iv); + + return frame; + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/outgoing/types.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/outgoing/types.ts new file mode 100644 index 000000000..4b17795ff --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/outgoing/types.ts @@ -0,0 +1,45 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import type {NonSharedUint8Array} from '../../../type-polyfills/non-shared-typed-arrays.ts'; +import type {DataTrackHandle} from '../handle.ts'; +import type LocalDataTrack from '../LocalDataTrack.ts'; +import type {DataTrackInfo, DataTrackSid} from '../types.ts'; +import type {DataTrackPublishError, DataTrackPublishErrorReason} from './errors.ts'; + +export type DataTrackOptions = { + name: string; +}; + +export type SfuPublishResponseResult = + | {type: 'ok'; data: DataTrackInfo} + | { + type: 'error'; + error: + | DataTrackPublishError + | DataTrackPublishError + | DataTrackPublishError + | DataTrackPublishError + | DataTrackPublishError; + }; + +export type EventSfuPublishRequest = { + handle: DataTrackHandle; + name: string; + usesE2ee: boolean; +}; + +export type EventSfuUnpublishRequest = { + handle: DataTrackHandle; +}; + +export type EventPacketAvailable = { + handle: DataTrackHandle; + bytes: NonSharedUint8Array; +}; + +export type EventTrackPublished = {track: LocalDataTrack}; + +export type EventTrackUnpublished = {sid: DataTrackSid}; + +export type EventPacketsFlushedChange = {handle: DataTrackHandle; isFlushed: boolean}; diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/packet/constants.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/packet/constants.ts new file mode 100644 index 000000000..18b4f2ff5 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/packet/constants.ts @@ -0,0 +1,27 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +export const U8_LENGTH_BYTES = 1; +export const U16_LENGTH_BYTES = 2; +export const U32_LENGTH_BYTES = 4; +export const U64_LENGTH_BYTES = 8; + +export const SUPPORTED_VERSION = 0; +export const BASE_HEADER_LEN = 12; + +export const VERSION_SHIFT = 5; +export const VERSION_MASK = 0x07; + +export const FRAME_MARKER_SHIFT = 3; +export const FRAME_MARKER_MASK = 0x3; + +export const FRAME_MARKER_START = 0x2; +export const FRAME_MARKER_FINAL = 0x1; +export const FRAME_MARKER_INTER = 0x0; +export const FRAME_MARKER_SINGLE = 0x3; + +export const EXT_WORDS_INDICATOR_SIZE = 2; +export const EXT_FLAG_SHIFT = 0x2; +export const EXT_FLAG_MASK = 0x1; +export const EXT_MARKER_LEN = 4; +export const EXT_TAG_PADDING = 0; diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/packet/errors.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/packet/errors.ts new file mode 100644 index 000000000..f4f9f930a --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/packet/errors.ts @@ -0,0 +1,104 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import {LivekitReasonedError} from '../../errors.ts'; +import type {DataTrackHandleError} from '../handle.ts'; + +export enum DataTrackDeserializeErrorReason { + TooShort = 0, + HeaderOverrun = 1, + MissingExtWords = 2, + UnsupportedVersion = 3, + InvalidHandle = 4, + MalformedExt = 5, +} + +export class DataTrackDeserializeError< + Reason extends DataTrackDeserializeErrorReason = DataTrackDeserializeErrorReason, +> extends LivekitReasonedError { + override readonly name = 'DataTrackDeserializeError'; + + reason: Reason; + + reasonName: string; + + declare cause?: Reason extends DataTrackDeserializeErrorReason.InvalidHandle ? DataTrackHandleError : never; + + constructor(message: string, reason: Reason, options?: {cause?: unknown}) { + super(19, message, options); + this.reason = reason; + this.reasonName = DataTrackDeserializeErrorReason[reason]; + } + + static tooShort() { + return new DataTrackDeserializeError( + 'Too short to contain a valid header', + DataTrackDeserializeErrorReason.TooShort, + ); + } + + static headerOverrun() { + return new DataTrackDeserializeError( + 'Header exceeds total packet length', + DataTrackDeserializeErrorReason.HeaderOverrun, + ); + } + + static missingExtWords() { + return new DataTrackDeserializeError( + 'Extension word indicator is missing', + DataTrackDeserializeErrorReason.MissingExtWords, + ); + } + + static unsupportedVersion(version: number) { + return new DataTrackDeserializeError( + `Unsupported version ${version}`, + DataTrackDeserializeErrorReason.UnsupportedVersion, + ); + } + + static invalidHandle(cause: DataTrackHandleError) { + return new DataTrackDeserializeError( + `invalid track handle: ${cause.message}`, + DataTrackDeserializeErrorReason.InvalidHandle, + {cause}, + ); + } + + static malformedExt(tag: number) { + return new DataTrackDeserializeError( + `Extension with tag ${tag} is malformed`, + DataTrackDeserializeErrorReason.MalformedExt, + ); + } +} + +export enum DataTrackSerializeErrorReason { + TooSmallForHeader = 0, + TooSmallForPayload = 1, +} + +export class DataTrackSerializeError< + Reason extends DataTrackSerializeErrorReason = DataTrackSerializeErrorReason, +> extends LivekitReasonedError { + override readonly name = 'DataTrackSerializeError'; + + reason: Reason; + + reasonName: string; + + constructor(message: string, reason: Reason, options?: {cause?: unknown}) { + super(19, message, options); + this.reason = reason; + this.reasonName = DataTrackSerializeErrorReason[reason]; + } + + static tooSmallForHeader() { + return new DataTrackSerializeError('Buffer cannot fit header', DataTrackSerializeErrorReason.TooSmallForHeader); + } + + static tooSmallForPayload() { + return new DataTrackSerializeError('Buffer cannot fit payload', DataTrackSerializeErrorReason.TooSmallForPayload); + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/packet/extensions.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/packet/extensions.ts new file mode 100644 index 000000000..e8267c8e5 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/packet/extensions.ts @@ -0,0 +1,245 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 + +import type {NonSharedUint8Array} from '../../../type-polyfills/non-shared-typed-arrays.ts'; +import type {Throws} from '../../../utils/throws.ts'; +import {coerceToDataView} from '../utils.ts'; +import {EXT_TAG_PADDING, U8_LENGTH_BYTES, U64_LENGTH_BYTES} from './constants.ts'; +import {DataTrackDeserializeError, type DataTrackDeserializeErrorReason} from './errors.ts'; +import Serializable from './serializable.ts'; + +export enum DataTrackExtensionTag { + UserTimestamp = 2, + E2ee = 1, +} + +abstract class DataTrackExtension extends Serializable { + static tag: DataTrackExtensionTag; + + static lengthBytes: number; +} + +export class DataTrackUserTimestampExtension extends DataTrackExtension { + static override tag = DataTrackExtensionTag.UserTimestamp; + + static override lengthBytes = 8; + + timestamp: bigint; + + constructor(timestamp: bigint) { + super(); + this.timestamp = timestamp; + } + + toBinaryLengthBytes(): number { + return U8_LENGTH_BYTES + U8_LENGTH_BYTES + DataTrackUserTimestampExtension.lengthBytes; + } + + toBinaryInto(dataView: DataView): Throws { + let byteIndex = 0; + + dataView.setUint8(byteIndex, DataTrackUserTimestampExtension.tag); + byteIndex += U8_LENGTH_BYTES; + + dataView.setUint8(byteIndex, DataTrackUserTimestampExtension.lengthBytes); + byteIndex += U8_LENGTH_BYTES; + + dataView.setBigUint64(byteIndex, this.timestamp); + byteIndex += U64_LENGTH_BYTES; + + const totalLengthBytes = this.toBinaryLengthBytes(); + if (byteIndex !== totalLengthBytes) { + throw new Error( + `DataTrackUserTimestampExtension.toBinaryInto: Wrote ${byteIndex} bytes but expected length was ${totalLengthBytes} bytes`, + ); + } + + return byteIndex; + } + + toJSON() { + return { + tag: DataTrackUserTimestampExtension.tag as number, + lengthBytes: DataTrackUserTimestampExtension.lengthBytes, + + timestamp: this.timestamp, + }; + } +} + +export class DataTrackE2eeExtension extends DataTrackExtension { + static override tag = DataTrackExtensionTag.E2ee; + + static override lengthBytes = 13; + + keyIndex: number; + + iv: NonSharedUint8Array; + + constructor(keyIndex: number, iv: NonSharedUint8Array) { + super(); + this.keyIndex = keyIndex; + this.iv = iv; + } + + toBinaryLengthBytes(): number { + return U8_LENGTH_BYTES + U8_LENGTH_BYTES + DataTrackE2eeExtension.lengthBytes; + } + + toBinaryInto(dataView: DataView): Throws { + let byteIndex = 0; + + dataView.setUint8(byteIndex, DataTrackE2eeExtension.tag); + byteIndex += U8_LENGTH_BYTES; + + dataView.setUint8(byteIndex, DataTrackE2eeExtension.lengthBytes); + byteIndex += U8_LENGTH_BYTES; + + dataView.setUint8(byteIndex, this.keyIndex); + byteIndex += U8_LENGTH_BYTES; + + for (let i = 0; i < this.iv.length; i += 1) { + dataView.setUint8(byteIndex, this.iv[i]); + byteIndex += U8_LENGTH_BYTES; + } + + const totalLengthBytes = this.toBinaryLengthBytes(); + if (byteIndex !== totalLengthBytes) { + throw new Error( + `DataTrackE2eeExtension.toBinaryInto: Wrote ${byteIndex} bytes but expected length was ${totalLengthBytes} bytes`, + ); + } + + return byteIndex; + } + + toJSON() { + return { + tag: DataTrackE2eeExtension.tag as number, + lengthBytes: DataTrackE2eeExtension.lengthBytes, + + keyIndex: this.keyIndex, + iv: this.iv, + }; + } +} + +export class DataTrackExtensions extends Serializable { + userTimestamp?: DataTrackUserTimestampExtension; + + e2ee?: DataTrackE2eeExtension; + + constructor(opts: {userTimestamp?: DataTrackUserTimestampExtension; e2ee?: DataTrackE2eeExtension} = {}) { + super(); + this.userTimestamp = opts.userTimestamp; + this.e2ee = opts.e2ee; + } + + toBinaryLengthBytes() { + let lengthBytes = 0; + if (this.userTimestamp) { + lengthBytes += this.userTimestamp.toBinaryLengthBytes(); + } + if (this.e2ee) { + lengthBytes += this.e2ee.toBinaryLengthBytes(); + } + return lengthBytes; + } + + toBinaryInto(dataView: DataView): Throws { + let byteIndex = 0; + + if (this.e2ee) { + const e2eeBytes = this.e2ee.toBinaryInto(dataView); + byteIndex += e2eeBytes; + } + + if (this.userTimestamp) { + const userTimestampBytes = this.userTimestamp.toBinaryInto( + new DataView(dataView.buffer, dataView.byteOffset + byteIndex), + ); + byteIndex += userTimestampBytes; + } + + const totalLengthBytes = this.toBinaryLengthBytes(); + if (byteIndex !== totalLengthBytes) { + throw new Error( + `DataTrackExtensions.toBinaryInto: Wrote ${byteIndex} bytes but expected length was ${totalLengthBytes} bytes`, + ); + } + + return byteIndex; + } + + static fromBinary( + input: Input, + ): Throws< + [extensions: DataTrackExtensions, byteLength: number], + DataTrackDeserializeError + > { + const dataView = coerceToDataView(input); + + let userTimestamp: DataTrackUserTimestampExtension | undefined; + let e2ee: DataTrackE2eeExtension | undefined; + + let byteIndex = 0; + while (dataView.byteLength - byteIndex >= U8_LENGTH_BYTES + U8_LENGTH_BYTES) { + const tag = dataView.getUint8(byteIndex); + byteIndex += U8_LENGTH_BYTES; + + const lengthBytes = dataView.getUint8(byteIndex); + byteIndex += U8_LENGTH_BYTES; + + if (tag === EXT_TAG_PADDING) { + continue; + } + + switch (tag) { + case DataTrackExtensionTag.UserTimestamp: + if (dataView.byteLength - byteIndex < DataTrackUserTimestampExtension.lengthBytes) { + throw DataTrackDeserializeError.malformedExt(tag); + } + userTimestamp = new DataTrackUserTimestampExtension(dataView.getBigUint64(byteIndex)); + byteIndex += lengthBytes; + break; + + case DataTrackExtensionTag.E2ee: { + if (dataView.byteLength - byteIndex < DataTrackE2eeExtension.lengthBytes) { + throw DataTrackDeserializeError.malformedExt(tag); + } + + const keyIndex = dataView.getUint8(byteIndex); + + const iv = new Uint8Array(12); + for (let i = 0; i < iv.length; i += 1) { + let byteIndexForIv = byteIndex; + byteIndexForIv += U8_LENGTH_BYTES; + byteIndexForIv += i * U8_LENGTH_BYTES; + iv[i] = dataView.getUint8(byteIndexForIv); + } + + e2ee = new DataTrackE2eeExtension(keyIndex, iv); + byteIndex += lengthBytes; + break; + } + + default: + if (dataView.byteLength - byteIndex < lengthBytes) { + throw DataTrackDeserializeError.malformedExt(tag); + } + byteIndex += lengthBytes; + break; + } + } + + return [new DataTrackExtensions({userTimestamp, e2ee}), dataView.byteLength]; + } + + toJSON() { + return { + userTimestamp: this.userTimestamp?.toJSON() ?? null, + e2ee: this.e2ee?.toJSON() ?? null, + }; + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/packet/index.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/packet/index.ts new file mode 100644 index 000000000..b6fb7e439 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/packet/index.ts @@ -0,0 +1,333 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 + +import type {NonSharedUint8Array} from '../../../type-polyfills/non-shared-typed-arrays.ts'; +import type {Throws} from '../../../utils/throws.ts'; +import {DataTrackHandle, DataTrackHandleError, DataTrackHandleErrorReason} from '../handle.ts'; +import {coerceToDataView, DataTrackTimestamp, type U16_MAX_SIZE, WrapAroundUnsignedInt} from '../utils.ts'; +import { + BASE_HEADER_LEN, + EXT_FLAG_MASK, + EXT_FLAG_SHIFT, + EXT_WORDS_INDICATOR_SIZE, + FRAME_MARKER_FINAL, + FRAME_MARKER_INTER, + FRAME_MARKER_MASK, + FRAME_MARKER_SHIFT, + FRAME_MARKER_SINGLE, + FRAME_MARKER_START, + SUPPORTED_VERSION, + U8_LENGTH_BYTES, + U16_LENGTH_BYTES, + U32_LENGTH_BYTES, + VERSION_MASK, + VERSION_SHIFT, +} from './constants.ts'; +import {DataTrackDeserializeError, DataTrackSerializeError, type DataTrackSerializeErrorReason} from './errors.ts'; +import {DataTrackExtensions} from './extensions.ts'; +import Serializable from './serializable.ts'; + +export class DataTrackPacketHeader extends Serializable { + marker: FrameMarker; + + trackHandle: DataTrackHandle; + + sequence: WrapAroundUnsignedInt; + + frameNumber: WrapAroundUnsignedInt; + + timestamp: DataTrackTimestamp<90_000>; + + extensions: DataTrackExtensions; + + constructor(opts: { + marker: FrameMarker; + trackHandle: DataTrackHandle; + sequence: WrapAroundUnsignedInt; + frameNumber: WrapAroundUnsignedInt; + timestamp: DataTrackTimestamp<90_000>; + extensions?: DataTrackExtensions; + }) { + super(); + this.marker = opts.marker; + this.trackHandle = opts.trackHandle; + this.sequence = opts.sequence; + this.frameNumber = opts.frameNumber; + this.timestamp = opts.timestamp; + this.extensions = opts.extensions ?? new DataTrackExtensions(); + } + + private extensionsMetrics() { + const lengthBytes = this.extensions.toBinaryLengthBytes(); + const lengthWords = Math.ceil((EXT_WORDS_INDICATOR_SIZE + lengthBytes) / 4); + const paddingLengthBytes = lengthWords * 4 - EXT_WORDS_INDICATOR_SIZE - lengthBytes; + + return {lengthBytes, lengthWords, paddingLengthBytes}; + } + + toBinaryLengthBytes() { + const {lengthBytes: extLengthBytes, paddingLengthBytes: extPaddingLengthBytes} = this.extensionsMetrics(); + + let totalLengthBytes = BASE_HEADER_LEN; + if (extLengthBytes > 0) { + totalLengthBytes += EXT_WORDS_INDICATOR_SIZE + extLengthBytes + extPaddingLengthBytes; + } + return totalLengthBytes; + } + + toBinaryInto( + dataView: DataView, + ): Throws> { + if (dataView.byteLength < this.toBinaryLengthBytes()) { + throw DataTrackSerializeError.tooSmallForHeader(); + } + + let initial = SUPPORTED_VERSION << VERSION_SHIFT; + + let marker: number; + switch (this.marker) { + case FrameMarker.Inter: + marker = FRAME_MARKER_INTER; + break; + case FrameMarker.Final: + marker = FRAME_MARKER_FINAL; + break; + case FrameMarker.Start: + marker = FRAME_MARKER_START; + break; + case FrameMarker.Single: + marker = FRAME_MARKER_SINGLE; + break; + } + initial |= marker << FRAME_MARKER_SHIFT; + + const { + lengthBytes: extensionsLengthBytes, + lengthWords: extensionsLengthWords, + paddingLengthBytes: extensionsPaddingLengthBytes, + } = this.extensionsMetrics(); + + if (extensionsLengthBytes > 0) { + initial |= 1 << EXT_FLAG_SHIFT; + } + + let byteIndex = 0; + dataView.setUint8(byteIndex, initial); + byteIndex += U8_LENGTH_BYTES; + dataView.setUint8(byteIndex, 0); + byteIndex += U8_LENGTH_BYTES; + + dataView.setUint16(byteIndex, this.trackHandle); + byteIndex += U16_LENGTH_BYTES; + dataView.setUint16(byteIndex, this.sequence.value); + byteIndex += U16_LENGTH_BYTES; + dataView.setUint16(byteIndex, this.frameNumber.value); + byteIndex += U16_LENGTH_BYTES; + dataView.setUint32(byteIndex, this.timestamp.asTicks()); + byteIndex += U32_LENGTH_BYTES; + + if (extensionsLengthBytes > 0) { + const rtpOrientedExtensionLengthWords = extensionsLengthWords - 1; + + dataView.setUint16(byteIndex, rtpOrientedExtensionLengthWords); + byteIndex += U16_LENGTH_BYTES; + const extensionBytes = this.extensions.toBinaryInto( + new DataView(dataView.buffer, dataView.byteOffset + byteIndex), + ); + byteIndex += extensionBytes; + for (let i = 0; i < extensionsPaddingLengthBytes; i += 1) { + dataView.setUint8(byteIndex, 0); + byteIndex += U8_LENGTH_BYTES; + } + } + + const totalLengthBytes = this.toBinaryLengthBytes(); + if (byteIndex !== totalLengthBytes) { + throw new Error( + `DataTrackPacketHeader.toBinaryInto: Wrote ${byteIndex} bytes but expected length was ${totalLengthBytes} bytes`, + ); + } + + return totalLengthBytes; + } + + static fromBinary( + input: Input, + ): Throws<[header: DataTrackPacketHeader, byteLength: number], DataTrackDeserializeError> { + const dataView = coerceToDataView(input); + + if (dataView.byteLength < BASE_HEADER_LEN) { + throw DataTrackDeserializeError.tooShort(); + } + + let byteIndex = 0; + + const initial = dataView.getUint8(byteIndex); + byteIndex += U8_LENGTH_BYTES; + + const version = (initial >> VERSION_SHIFT) & VERSION_MASK; + if (version > SUPPORTED_VERSION) { + throw DataTrackDeserializeError.unsupportedVersion(version); + } + + let marker: FrameMarker; + switch ((initial >> FRAME_MARKER_SHIFT) & FRAME_MARKER_MASK) { + case FRAME_MARKER_START: + marker = FrameMarker.Start; + break; + case FRAME_MARKER_FINAL: + marker = FrameMarker.Final; + break; + case FRAME_MARKER_SINGLE: + marker = FrameMarker.Single; + break; + default: + marker = FrameMarker.Inter; + break; + } + + const extensionsFlag = ((initial >> EXT_FLAG_SHIFT) & EXT_FLAG_MASK) > 0; + + byteIndex += U8_LENGTH_BYTES; + + let trackHandle: DataTrackHandle | undefined; + try { + trackHandle = DataTrackHandle.fromNumber(dataView.getUint16(byteIndex)); + } catch (e) { + if ( + e instanceof DataTrackHandleError && + (e.isReason(DataTrackHandleErrorReason.Reserved) || e.isReason(DataTrackHandleErrorReason.TooLarge)) + ) { + throw DataTrackDeserializeError.invalidHandle(e); + } else { + throw e; + } + } + byteIndex += U16_LENGTH_BYTES; + + const sequence = WrapAroundUnsignedInt.u16(dataView.getUint16(byteIndex)); + byteIndex += U16_LENGTH_BYTES; + + const frameNumber = WrapAroundUnsignedInt.u16(dataView.getUint16(byteIndex)); + byteIndex += U16_LENGTH_BYTES; + + const timestamp = DataTrackTimestamp.fromRtpTicks(dataView.getUint32(byteIndex)); + byteIndex += U32_LENGTH_BYTES; + + let extensions = new DataTrackExtensions(); + if (extensionsFlag) { + if (dataView.byteLength - byteIndex < U16_LENGTH_BYTES) { + throw DataTrackDeserializeError.missingExtWords(); + } + const rtpOrientedExtensionWords = dataView.getUint16(byteIndex); + byteIndex += U16_LENGTH_BYTES; + + const extensionWords = rtpOrientedExtensionWords + 1; + + const extensionLengthBytes = 4 * extensionWords - EXT_WORDS_INDICATOR_SIZE; + + if (byteIndex + extensionLengthBytes > dataView.byteLength) { + throw DataTrackDeserializeError.headerOverrun(); + } + + const extensionDataView = new DataView(dataView.buffer, dataView.byteOffset + byteIndex, extensionLengthBytes); + + const [result, readBytes] = DataTrackExtensions.fromBinary(extensionDataView); + extensions = result; + byteIndex += readBytes; + } + + return [ + new DataTrackPacketHeader({ + marker, + trackHandle: trackHandle!, + sequence, + frameNumber, + timestamp, + extensions, + }), + byteIndex, + ]; + } + + toJSON() { + return { + marker: this.marker, + trackHandle: this.trackHandle, + sequence: this.sequence.value, + frameNumber: this.frameNumber.value, + timestamp: this.timestamp.asTicks(), + extensions: this.extensions.toJSON(), + }; + } +} + +export enum FrameMarker { + Start = 0, + Inter = 1, + Final = 2, + Single = 3, +} + +export class DataTrackPacket extends Serializable { + header: DataTrackPacketHeader; + + payload: NonSharedUint8Array; + + constructor(header: DataTrackPacketHeader, payload: NonSharedUint8Array) { + super(); + this.header = header; + this.payload = payload; + } + + toBinaryLengthBytes() { + return this.header.toBinaryLengthBytes() + this.payload.byteLength; + } + + toBinaryInto(dataView: DataView): Throws { + let byteIndex = 0; + const headerLengthBytes = this.header.toBinaryInto(dataView); + byteIndex += headerLengthBytes; + + if (dataView.byteLength - byteIndex < this.payload.byteLength) { + throw DataTrackSerializeError.tooSmallForPayload(); + } + + for (let index = 0; index < this.payload.length; index += 1) { + dataView.setUint8(byteIndex, this.payload[index]); + byteIndex += U8_LENGTH_BYTES; + } + + const totalLengthBytes = this.toBinaryLengthBytes(); + if (byteIndex !== totalLengthBytes) { + throw new Error( + `DataTrackPacket.toBinaryInto: Wrote ${byteIndex} bytes but expected length was ${totalLengthBytes} bytes`, + ); + } + + return totalLengthBytes; + } + + static fromBinary( + input: Input, + ): Throws<[packet: DataTrackPacket, byteLength: number], DataTrackDeserializeError> { + const dataView = coerceToDataView(input); + + const [header, headerByteLength] = DataTrackPacketHeader.fromBinary(dataView); + + const payload = dataView.buffer.slice( + dataView.byteOffset + headerByteLength, + dataView.byteOffset + dataView.byteLength, + ); + + return [new DataTrackPacket(header, new Uint8Array(payload) as NonSharedUint8Array), dataView.byteLength] as [ + DataTrackPacket, + number, + ]; + } + + toJSON() { + return {header: this.header.toJSON(), payload: this.payload}; + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/packet/serializable.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/packet/serializable.ts new file mode 100644 index 000000000..7241dbbbf --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/packet/serializable.ts @@ -0,0 +1,29 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 + +import type {NonSharedUint8Array} from '../../../type-polyfills/non-shared-typed-arrays.ts'; +import type {Throws} from '../../../utils/throws.ts'; +import type {DataTrackSerializeError} from './errors.ts'; + +export default abstract class Serializable { + abstract toBinaryLengthBytes(): number; + + abstract toBinaryInto(dataView: DataView): Throws; + + toBinary(): Throws { + const lengthBytes = this.toBinaryLengthBytes(); + const output = new ArrayBuffer(lengthBytes); + const view = new DataView(output); + + const writtenBytes = this.toBinaryInto(view); + + if (lengthBytes !== writtenBytes) { + throw new Error( + `${this.constructor.name}.toBinary: written bytes (${writtenBytes} bytes) not equal to allocated array buffer length (${lengthBytes} bytes).`, + ); + } + + return new Uint8Array(output); + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/packetizer.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/packetizer.ts new file mode 100644 index 000000000..488b53f23 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/packetizer.ts @@ -0,0 +1,112 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import type {Throws} from '../../utils/throws.ts'; +import {LivekitReasonedError} from '../errors.ts'; +import type {DataTrackFrameInternal} from './frame.ts'; +import type {DataTrackHandle} from './handle.ts'; +import {DataTrackPacket, DataTrackPacketHeader, FrameMarker} from './packet/index.ts'; +import {DataTrackClock, DataTrackTimestamp, WrapAroundUnsignedInt} from './utils.ts'; + +type PacketizeOptions = { + now?: DataTrackTimestamp<90_000>; +}; + +export class DataTrackPacketizerError< + Reason extends DataTrackPacketizerReason = DataTrackPacketizerReason, +> extends LivekitReasonedError { + override readonly name = 'DataTrackPacketizerError'; + + reason: Reason; + + reasonName: string; + + constructor(message: string, reason: Reason, options?: {cause?: unknown}) { + super(19, message, options); + this.reason = reason; + this.reasonName = DataTrackPacketizerReason[reason]; + } + + static mtuTooShort() { + return new DataTrackPacketizerError('MTU is too short to send frame', DataTrackPacketizerReason.MtuTooShort); + } +} + +export enum DataTrackPacketizerReason { + MtuTooShort = 0, +} + +export default class DataTrackPacketizer { + private handle: DataTrackHandle; + + private mtuSizeBytes: number; + + private sequence = WrapAroundUnsignedInt.u16(0); + + private frameNumber = WrapAroundUnsignedInt.u16(0); + + private clock = DataTrackClock.rtpStartingNow(DataTrackTimestamp.rtpRandom()); + + constructor(trackHandle: DataTrackHandle, mtuSizeBytes: number) { + this.handle = trackHandle; + this.mtuSizeBytes = mtuSizeBytes; + } + + static computeFrameMarker(index: number, packetCount: number) { + if (packetCount <= 1) { + return FrameMarker.Single; + } + if (index === 0) { + return FrameMarker.Start; + } else if (index === packetCount - 1) { + return FrameMarker.Final; + } else { + return FrameMarker.Inter; + } + } + + *packetize( + frame: DataTrackFrameInternal, + options?: PacketizeOptions, + ): Throws, DataTrackPacketizerError> { + const frameNumber = this.frameNumber.getThenIncrement(); + const headerParams = { + marker: FrameMarker.Inter, + trackHandle: this.handle, + sequence: WrapAroundUnsignedInt.u16(0), + frameNumber, + timestamp: options?.now ?? this.clock.now(), + extensions: frame.extensions, + }; + const headerSerializedLengthBytes = new DataTrackPacketHeader(headerParams).toBinaryLengthBytes(); + if (headerSerializedLengthBytes >= this.mtuSizeBytes) { + throw DataTrackPacketizerError.mtuTooShort(); + } + + const maxPayloadSizeBytes = this.mtuSizeBytes - headerSerializedLengthBytes; + + const packetCount = Math.ceil(frame.payload.byteLength / maxPayloadSizeBytes); + + for ( + let index = 0, indexBytes = 0; + indexBytes < frame.payload.byteLength; + [index, indexBytes] = [index + 1, indexBytes + maxPayloadSizeBytes] + ) { + const sequence = this.sequence.getThenIncrement(); + const packetHeader = new DataTrackPacketHeader({ + ...headerParams, + marker: DataTrackPacketizer.computeFrameMarker(index, packetCount), + sequence, + }); + + const packetPayloadLengthBytes = Math.min(maxPayloadSizeBytes, frame.payload.byteLength - indexBytes); + const packetPayload = new Uint8Array( + frame.payload.buffer, + frame.payload.byteOffset + indexBytes, + packetPayloadLengthBytes, + ); + + yield new DataTrackPacket(packetHeader, packetPayload); + } + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/track-interfaces.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/track-interfaces.ts new file mode 100644 index 000000000..0dced41ed --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/track-interfaces.ts @@ -0,0 +1,51 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import type {DataTrackInfo} from './types.ts'; + +function isObject(subject: unknown): subject is object { + return subject !== null && typeof subject === 'object'; +} + +export const TrackSymbol: symbol = Symbol.for('lk.track'); + +export interface ITrack { + readonly trackSymbol: typeof TrackSymbol; +} + +function isTrack(subject: unknown): subject is ITrack { + return isObject(subject) && 'trackSymbol' in subject && subject.trackSymbol === TrackSymbol; +} + +export interface ILocalTrack extends ITrack { + readonly isLocal: true; + + isPublished(): boolean; +} + +// @ts-expect-error - Export this in the future when cutting over to new track interfaces more widely +function _isLocalTrack(subject: unknown): subject is ILocalTrack { + return isTrack(subject) && 'isLocal' in subject && subject.isLocal === true; +} + +export const RemoteTrackSymbol: symbol = Symbol.for('lk.remote-track'); + +export interface IRemoteTrack extends ITrack { + readonly isLocal: false; +} + +// @ts-expect-error - Export this in the future when cutting over to new track interfaces more widely +function _isRemoteTrack(subject: unknown): subject is IRemoteTrack { + return isTrack(subject) && 'localitySymbol' in subject && subject.localitySymbol === RemoteTrackSymbol; +} + +export const DataTrackSymbol: symbol = Symbol.for('lk.data-track'); +export interface IDataTrack extends ITrack { + readonly typeSymbol: typeof DataTrackSymbol; + + readonly info?: DataTrackInfo; +} + +export function isDataTrack(subject: unknown): subject is IDataTrack { + return isTrack(subject) && 'typeSymbol' in subject && subject.typeSymbol === DataTrackSymbol; +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/types.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/types.ts new file mode 100644 index 000000000..52e3acd15 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/types.ts @@ -0,0 +1,37 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import {Encryption_Type, DataTrackInfo as ProtocolDataTrackInfo} from '@livekit/protocol'; +import type {DataTrackHandle} from './handle.ts'; + +export type DataTrackSid = string; + +export type DataTrackInfo = { + sid: DataTrackSid; + pubHandle: DataTrackHandle; + name: string; + usesE2ee: boolean; +}; + +export type RemoteDataTrackPipelineOptions = { + maxPartialFrames?: number; +}; + +export const DataTrackInfo = { + from(protocolInfo: ProtocolDataTrackInfo): DataTrackInfo { + return { + sid: protocolInfo.sid, + pubHandle: protocolInfo.pubHandle, + name: protocolInfo.name, + usesE2ee: protocolInfo.encryption !== Encryption_Type.NONE, + }; + }, + toProtobuf(info: DataTrackInfo): ProtocolDataTrackInfo { + return new ProtocolDataTrackInfo({ + sid: info.sid, + pubHandle: info.pubHandle, + name: info.name, + encryption: info.usesE2ee ? Encryption_Type.GCM : Encryption_Type.NONE, + }); + }, +}; diff --git a/fluxer_app/pkgs/livekit-client/src/room/data-track/utils.ts b/fluxer_app/pkgs/livekit-client/src/room/data-track/utils.ts new file mode 100644 index 000000000..db8321fd0 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/data-track/utils.ts @@ -0,0 +1,175 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +export const U16_MAX_SIZE = 0xffff; +export const U32_MAX_SIZE = 0xffffffff; + +export class WrapAroundUnsignedInt { + value: number; + + private maxSize: MaxSize; + + static u16(raw: number) { + return new WrapAroundUnsignedInt(raw, U16_MAX_SIZE); + } + + static u32(raw: number) { + return new WrapAroundUnsignedInt(raw, U32_MAX_SIZE); + } + + constructor(raw: number, maxSize: MaxSize) { + this.value = raw; + if (raw < 0) { + throw new Error('WrapAroundUnsignedInt: cannot faithfully represent an integer smaller than 0'); + } + if (maxSize > Number.MAX_SAFE_INTEGER) { + throw new Error('WrapAroundUnsignedInt: cannot faithfully represent an integer bigger than MAX_SAFE_INTEGER.'); + } + this.maxSize = maxSize; + this.clamp(); + } + + clamp() { + while (this.value > this.maxSize) { + this.value -= this.maxSize + 1; + } + while (this.value < 0) { + this.value += this.maxSize + 1; + } + } + + clone() { + return new WrapAroundUnsignedInt(this.value, this.maxSize); + } + + update(updateFn: (value: number) => number) { + this.value = updateFn(this.value); + this.clamp(); + } + + increment(n = 1) { + this.update((value) => value + n); + } + + decrement(n = 1) { + this.update((value) => value - n); + } + + getThenIncrement() { + const previousValue = this.value; + this.increment(); + return new WrapAroundUnsignedInt(previousValue, this.maxSize); + } + + isBefore(other: WrapAroundUnsignedInt) { + const a = this.value >>> 0; + const b = other.value >>> 0; + const diff = (b - a) >>> 0; + return diff !== 0 && diff < this.maxSize + 1; + } +} + +export class DataTrackTimestamp { + rateInHz: RateInHz; + + timestamp: WrapAroundUnsignedInt; + + static fromRtpTicks(rtpTicks: number) { + return new DataTrackTimestamp(rtpTicks, 90_000); + } + + static rtpRandom() { + const randomValue = Math.round(Math.random() * U32_MAX_SIZE); + return DataTrackTimestamp.fromRtpTicks(randomValue); + } + + private constructor(raw: number, rateInHz: RateInHz) { + this.timestamp = WrapAroundUnsignedInt.u32(raw); + this.rateInHz = rateInHz; + } + + asTicks() { + return this.timestamp.value; + } + + clone() { + return new DataTrackTimestamp(this.timestamp.value, this.rateInHz); + } + + wrappingAdd(n: number) { + this.timestamp.increment(n); + } + + isBefore(other: DataTrackTimestamp) { + return this.timestamp.isBefore(other.timestamp); + } +} + +export class DataTrackClock { + epoch: Date; + + base: DataTrackTimestamp; + + previous: DataTrackTimestamp; + + rateInHz: RateInHz; + + private constructor(rateInHz: RateInHz, epoch: Date, base: DataTrackTimestamp) { + this.epoch = epoch; + this.base = base; + this.previous = base.clone(); + this.rateInHz = rateInHz; + } + + static startingNow(base: DataTrackTimestamp, rateInHz: RateInHz) { + return new DataTrackClock(rateInHz, new Date(), base); + } + + static startingAtTime(epoch: Date, base: DataTrackTimestamp, rateInHz: RateInHz) { + return new DataTrackClock(rateInHz, epoch, base); + } + + static rtpStartingNow(base: DataTrackTimestamp<90_000>) { + return DataTrackClock.startingNow(base, 90_000); + } + + static rtpStartingAtTime(epoch: Date, base: DataTrackTimestamp<90_000>) { + return DataTrackClock.startingAtTime(epoch, base, 90_000); + } + + now(): DataTrackTimestamp { + return this.at(new Date()); + } + + at(timestamp: Date) { + const elapsedMs = timestamp.getTime() - this.epoch.getTime(); + const durationTicks = DataTrackClock.durationInMsToTicks(elapsedMs, this.rateInHz); + + let result = this.base.clone(); + result.wrappingAdd(durationTicks); + + if (result.isBefore(this.previous)) { + result = this.previous; + } + this.previous = result.clone(); + return result.clone(); + } + + static durationInMsToTicks(durationMilliseconds: number, rateInHz: number) { + const durationNanoseconds = durationMilliseconds * 1e6; + const ticks = (durationNanoseconds * rateInHz + 500_000_000) / 1_000_000_000; + return Math.round(ticks); + } +} + +export function coerceToDataView(input: Input): DataView { + if (input instanceof DataView) { + return input; + } else if (input instanceof ArrayBuffer) { + return new DataView(input); + } else if (input instanceof Uint8Array) { + return new DataView(input.buffer, input.byteOffset, input.byteLength); + } else { + throw new Error(`Error coercing ${input} to DataView - input was not DataView, ArrayBuffer, or Uint8Array.`); + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/debounce.ts b/fluxer_app/pkgs/livekit-client/src/room/debounce.ts new file mode 100644 index 000000000..769a6f839 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/debounce.ts @@ -0,0 +1,86 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import CriticalTimers, {type TimerHandle} from './timers.ts'; + +export type Options = { + isImmediate?: boolean; + maxWait?: number; + callback?: (data: Result) => void; +}; + +export interface DebouncedFunction, F extends (...args: Args) => any> { + (this: ThisParameterType, ...args: Args & Parameters): Promise>; + cancel: (reason?: any) => void; +} + +interface DebouncedPromise { + resolve: (result: FunctionReturn) => void; + reject: (reason?: any) => void; +} + +export function debounce, F extends (...args: Args) => any>( + func: F, + waitMilliseconds = 50, + options: Options> = {}, +): DebouncedFunction { + let timeoutId: TimerHandle | undefined; + const isImmediate = options.isImmediate ?? false; + const callback = options.callback; + const maxWait = options.maxWait; + let lastInvokeTime = Date.now(); + + let promises: Array>> = []; + + function nextInvokeTimeout() { + if (maxWait !== undefined) { + const timeSinceLastInvocation = Date.now() - lastInvokeTime; + + if (timeSinceLastInvocation + waitMilliseconds >= maxWait) { + return maxWait - timeSinceLastInvocation; + } + } + + return waitMilliseconds; + } + + const debouncedFunction = function (this: ThisParameterType, ...args: Parameters) { + return new Promise>((resolve, reject) => { + const invokeFunction = () => { + timeoutId = undefined; + lastInvokeTime = Date.now(); + if (!isImmediate) { + const result = func.apply(this, args); + callback?.(result); + promises.forEach(({resolve}) => resolve(result)); + promises = []; + } + }; + + const shouldCallNow = isImmediate && timeoutId === undefined; + + if (timeoutId !== undefined) { + CriticalTimers.clearTimeout(timeoutId); + } + + timeoutId = CriticalTimers.setTimeout(invokeFunction, nextInvokeTimeout()); + + if (shouldCallNow) { + const result = func.apply(this, args); + callback?.(result); + return resolve(result); + } + promises.push({resolve, reject}); + }); + }; + + debouncedFunction.cancel = (reason?: any) => { + if (timeoutId !== undefined) { + CriticalTimers.clearTimeout(timeoutId); + } + promises.forEach(({reject}) => reject(reason)); + promises = []; + }; + + return debouncedFunction; +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/errors.ts b/fluxer_app/pkgs/livekit-client/src/room/errors.ts index 819bd9fc8..d3eb256a3 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/errors.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/errors.ts @@ -11,6 +11,7 @@ export class LivekitError extends Error { super(message || 'an error has occurred'); this.name = 'LiveKitError'; this.code = code; + if (typeof options?.cause !== 'undefined') { this.cause = options?.cause; } @@ -19,6 +20,7 @@ export class LivekitError extends Error { export abstract class LivekitReasonedError extends LivekitError { abstract reason: Reason; + abstract reasonName: string; } @@ -46,41 +48,49 @@ type NotAllowed = { status: number; context?: unknown; }; + type InternalError = { reason: ConnectionErrorReason.InternalError; status: never; context?: {status?: number; statusText?: string}; }; + type ConnectionTimeout = { reason: ConnectionErrorReason.Timeout; status: never; context: never; }; + type LeaveRequest = { reason: ConnectionErrorReason.LeaveRequest; status: never; context: DisconnectReason; }; + type Cancelled = { reason: ConnectionErrorReason.Cancelled; status: never; context: never; }; + type ServerUnreachable = { reason: ConnectionErrorReason.ServerUnreachable; status?: number; context?: never; }; + type WebSocket = { reason: ConnectionErrorReason.WebSocket; status?: number; context?: string; }; + type ServiceNotFound = { reason: ConnectionErrorReason.ServiceNotFound; status: never; context: string; }; + type ConnectionErrorVariants = | NotAllowed | ConnectionTimeout @@ -95,8 +105,11 @@ export class ConnectionError< Variant extends ConnectionErrorVariants = ConnectionErrorVariants, > extends LivekitReasonedError { status?: Variant['status']; + context: Variant['context']; + reason: Variant['reason']; + reasonName: string; override readonly name = 'ConnectionError'; @@ -166,7 +179,7 @@ export class UnsupportedServer extends LivekitError { override readonly name = 'UnsupportedServer'; constructor(message?: string) { - super(10, message ?? 'unsupported server'); + super(10, message || 'unsupported server'); } } @@ -174,7 +187,7 @@ export class UnexpectedConnectionState extends LivekitError { override readonly name = 'UnexpectedConnectionState'; constructor(message?: string) { - super(12, message ?? 'unexpected connection state'); + super(12, message || 'unexpected connection state'); } } @@ -182,7 +195,7 @@ export class NegotiationError extends LivekitError { override readonly name = 'NegotiationError'; constructor(message?: string) { - super(13, message ?? 'unable to negotiate'); + super(13, message || 'unable to negotiate'); } } @@ -190,12 +203,13 @@ export class PublishDataError extends LivekitError { override readonly name = 'PublishDataError'; constructor(message?: string) { - super(14, message ?? 'unable to publish data'); + super(14, message || 'unable to publish data'); } } export class PublishTrackError extends LivekitError { override readonly name = 'PublishTrackError'; + status: number; constructor(message: string, status: number) { @@ -208,7 +222,9 @@ export type RequestErrorReason = Exclude { override readonly name = 'SignalRequestError'; + reason: RequestErrorReason; + reasonName: string; constructor(message: string, reason: RequestErrorReason) { @@ -220,17 +236,29 @@ export class SignalRequestError extends LivekitReasonedError export enum DataStreamErrorReason { AlreadyOpened = 0, + AbnormalEnd = 1, + DecodeFailed = 2, + LengthExceeded = 3, + Incomplete = 4, + HandlerAlreadyRegistered = 7, + EncryptionTypeMismatch = 8, + + HeaderTooLarge = 9, + + PayloadTooLarge = 10, } export class DataStreamError extends LivekitReasonedError { override readonly name = 'DataStreamError'; + reason: DataStreamErrorReason; + reasonName: string; constructor(message: string, reason: DataStreamErrorReason) { diff --git a/fluxer_app/pkgs/livekit-client/src/room/events.ts b/fluxer_app/pkgs/livekit-client/src/room/events.ts index f4cf98dc5..82e64f5e4 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/events.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/events.ts @@ -91,6 +91,14 @@ export enum RoomEvent { LocalTrackSubscribed = 'localTrackSubscribed', MetricsReceived = 'metricsReceived', + + DataTrackPublished = 'dataTrackPublished', + + DataTrackUnpublished = 'dataTrackUnpublished', + + LocalDataTrackPublished = 'localDataTrackPublished', + + LocalDataTrackUnpublished = 'localDataTrackUnpublished', } export enum ParticipantEvent { @@ -186,6 +194,13 @@ export enum EngineEvent { SignalRequestResponse = 'signalRequestResponse', SignalConnected = 'signalConnected', RoomMoved = 'roomMoved', + PublishDataTrackResponse = 'publishDataTrackResponse', + UnPublishDataTrackResponse = 'unPublishDataTrackResponse', + DataTrackSubscriberHandles = 'dataTrackSubscriberHandles', + DataTrackPacketReceived = 'dataTrackPacketReceived', + Joined = 'joined', + TokenRefreshed = 'tokenRefreshed', + ServerRegionsReported = 'serverRegionsReported', } export enum TrackEvent { diff --git a/fluxer_app/pkgs/livekit-client/src/room/participant/LocalParticipant.ts b/fluxer_app/pkgs/livekit-client/src/room/participant/LocalParticipant.ts index 80233e5a4..4a0299b5b 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/participant/LocalParticipant.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/participant/LocalParticipant.ts @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2024 LiveKit, Inc. // // SPDX-License-Identifier: Apache-2.0 +import {Mutex} from '@livekit/mutex'; import { AddTrackRequest, AudioTrackFeature, @@ -11,29 +12,40 @@ import { DataPacket_Kind, Encryption_Type, type JoinResponse, + type PacketTrailerFeature, type ParticipantInfo, protoInt64, type RequestResponse, RequestResponse_Reason, - type RpcAck, - RpcRequest, - type RpcResponse, SimulcastCodec, SipDTMF, type SubscribedQualityUpdate, type TrackInfo, type TrackUnpublishedResponse, UserPacket, + VideoLayer_Mode, } from '@livekit/protocol'; import {SignalConnectionState} from '../../api/SignalClient.ts'; +import { + getFrameMetadataFeatures, + getFrameMetadataPublishOptions, + hasFrameMetadataPublishOptions, + isFrameMetadataSupported, +} from '../../frameMetadata/utils.ts'; import type {InternalRoomOptions} from '../../options.ts'; +import type {NonSharedUint8Array} from '../../type-polyfills/non-shared-typed-arrays.ts'; import TypedPromise from '../../utils/TypedPromise.ts'; import type OutgoingDataStreamManager from '../data-stream/outgoing/OutgoingDataStreamManager.ts'; import type {TextStreamWriter} from '../data-stream/outgoing/StreamWriter.ts'; +import LocalDataTrack from '../data-track/LocalDataTrack.ts'; +import {DataTrackPublishError} from '../data-track/outgoing/errors.ts'; +import type OutgoingDataTrackManager from '../data-track/outgoing/OutgoingDataTrackManager.ts'; +import type {DataTrackOptions} from '../data-track/outgoing/types.ts'; import {defaultVideoCodec} from '../defaults.ts'; import { DeviceUnsupportedError, type LivekitError, + NegotiationError, PublishTrackError, SignalRequestError, TrackInvalidError, @@ -42,7 +54,8 @@ import { import {EngineEvent, ParticipantEvent, TrackEvent} from '../events.ts'; import {PCTransportState} from '../PCTransportManager.ts'; import type RTCEngine from '../RTCEngine.ts'; -import {byteLength, MAX_PAYLOAD_BYTES, type PerformRpcParams, RpcError, type RpcInvocationData} from '../rpc.ts'; +import {DataChannelKind} from '../RTCEngine.ts'; +import type {PerformRpcParams, RpcClientManager, RpcError, RpcInvocationData, RpcServerManager} from '../rpc/index.ts'; import CriticalTimers, {type TimerHandle} from '../timers.ts'; import {createLocalTracks} from '../track/create.ts'; import LocalAudioTrack from '../track/LocalAudioTrack.ts'; @@ -68,8 +81,10 @@ import { sourceToKind, } from '../track/utils.ts'; import type { + ByteStreamInfo, ChatMessage, DataPublishOptions, + SendBytesOptions, SendFileOptions, SendTextOptions, StreamBytesOptions, @@ -77,7 +92,6 @@ import type { TextStreamInfo, } from '../types.ts'; import { - compareVersions, Future, isAudioTrack, isE2EESimulcastSupported, @@ -87,30 +101,27 @@ import { isLocalVideoTrack, isSafari17Based, isSVCCodec, + isSVCSimulcast, + isSVCSimulcastSupportedByServer, isVideoCodec, isVideoTrack, isWeb, selectPreferredVideoCodec, sleep, supportsVideoCodec, + usesLegacySVCEncodings, } from '../utils.ts'; import Participant from './Participant.ts'; import type {ParticipantTrackPermission} from './ParticipantTrackPermission.ts'; import {trackPermissionToProto} from './ParticipantTrackPermission.ts'; import { + computeStartTargetBitrate, computeTrackBackupEncodings, computeVideoEncodings, getDefaultDegradationPreference, - maxEncodingBitrate, } from './publishUtils.ts'; import type RemoteParticipant from './RemoteParticipant.ts'; -type PendingSignalRequestValues = { - metadata?: string; - name?: string; - attributes?: Record; -}; - export default class LocalParticipant extends Participant { override audioTrackPublications: Map; @@ -140,6 +151,8 @@ export default class LocalParticipant extends Participant { private encryptionType: Encryption_Type = Encryption_Type.NONE; + private e2eeStateMutex = new Mutex(); + private reconnectFuture?: Future; private signalConnectedFuture?: Future; @@ -148,38 +161,34 @@ export default class LocalParticipant extends Participant { private firstActiveAgent?: RemoteParticipant; - private rpcHandlers: Map Promise>; - private roomOutgoingDataStreamManager: OutgoingDataStreamManager; + private roomOutgoingDataTrackManager: OutgoingDataTrackManager; + + private rpcClientManager: RpcClientManager; + + private rpcServerManager: RpcServerManager; + private pendingSignalRequests: Map< number, { - resolve: () => void; + resolve: (arg: any) => void; reject: (reason: LivekitError) => void; - values: PendingSignalRequestValues; + values: Partial>; } >; private enabledPublishVideoCodecs: Array = []; - private pendingAcks = new Map void; participantIdentity: string}>(); - - private pendingResponses = new Map< - string, - { - resolve: (payload: string | null, error: RpcError | null) => void; - participantIdentity: string; - } - >(); - constructor( sid: string, identity: string, engine: RTCEngine, options: InternalRoomOptions, - roomRpcHandlers: Map Promise>, roomOutgoingDataStreamManager: OutgoingDataStreamManager, + roomOutgoingDataTrackManager: OutgoingDataTrackManager, + rpcClientManager: RpcClientManager, + rpcServerManager: RpcServerManager, ) { super(sid, identity, undefined, undefined, undefined, { loggerName: options.loggerName, @@ -197,8 +206,10 @@ export default class LocalParticipant extends Participant { ['audiooutput', 'default'], ]); this.pendingSignalRequests = new Map(); - this.rpcHandlers = roomRpcHandlers; this.roomOutgoingDataStreamManager = roomOutgoingDataStreamManager; + this.roomOutgoingDataTrackManager = roomOutgoingDataTrackManager; + this.rpcClientManager = rpcClientManager; + this.rpcServerManager = rpcServerManager; } get lastCameraError(): Error | undefined { @@ -233,7 +244,7 @@ export default class LocalParticipant extends Participant { this.engine = engine; this.engine.on(EngineEvent.RemoteMute, (trackSid: string, muted: boolean) => { const pub = this.trackPublications.get(trackSid); - if (!pub || !pub.track) { + if (!pub?.track) { return; } if (muted) { @@ -257,8 +268,7 @@ export default class LocalParticipant extends Participant { .on(EngineEvent.LocalTrackUnpublished, this.handleLocalTrackUnpublished) .on(EngineEvent.SubscribedQualityUpdate, this.handleSubscribedQualityUpdate) .on(EngineEvent.Closing, this.handleClosing) - .on(EngineEvent.SignalRequestResponse, this.handleSignalRequestResponse) - .on(EngineEvent.DataPacketReceived, this.handleDataPacket); + .on(EngineEvent.SignalRequestResponse, this.handleSignalRequestResponse); } private handleReconnecting = () => { @@ -275,7 +285,7 @@ export default class LocalParticipant extends Participant { private handleClosing = () => { if (this.reconnectFuture) { - this.reconnectFuture.promise.catch((e) => this.log.warn(e.message, this.logContext)); + this.reconnectFuture.promise.catch((e) => this.log.warn(e.message)); this.reconnectFuture?.reject?.(new Error('Got disconnected during reconnection attempt')); this.reconnectFuture = undefined; } @@ -309,26 +319,34 @@ export default class LocalParticipant extends Participant { } this.pendingSignalRequests.delete(requestId); } - }; - private handleDataPacket = (packet: DataPacket) => { - switch (packet.value.case) { - case 'rpcResponse': { - const rpcResponse = packet.value.value as RpcResponse; - let payload: string | null = null; - let error: RpcError | null = null; - - if (rpcResponse.value.case === 'payload') { - payload = rpcResponse.value.value; - } else if (rpcResponse.value.case === 'error') { - error = RpcError.fromProto(rpcResponse.value.value); + switch (response.request.case) { + case 'publishDataTrack': { + let error: ReturnType< + (typeof DataTrackPublishError)['notAllowed' | 'duplicateName' | 'invalidName' | 'limitReached' | 'unknown'] + >; + switch (response.reason) { + case RequestResponse_Reason.NOT_ALLOWED: + error = DataTrackPublishError.notAllowed(response.message); + break; + case RequestResponse_Reason.DUPLICATE_NAME: + error = DataTrackPublishError.duplicateName(response.message); + break; + case RequestResponse_Reason.INVALID_NAME: + error = DataTrackPublishError.invalidName(response.message); + break; + case RequestResponse_Reason.LIMIT_EXCEEDED: + error = DataTrackPublishError.limitReached(response.message); + break; + default: + error = DataTrackPublishError.unknown(response.reason, response.message); + break; } - this.handleIncomingRpcResponse(rpcResponse.requestId, payload, error); - break; - } - case 'rpcAck': { - const rpcAck = packet.value.value as RpcAck; - this.handleIncomingRpcAck(rpcAck.requestId); + + this.roomOutgoingDataTrackManager.receivedSfuPublishResponse(response.request.value.pubHandle, { + type: 'error', + error, + }); break; } } @@ -423,8 +441,20 @@ export default class LocalParticipant extends Participant { } async setE2EEEnabled(enabled: boolean) { - this.encryptionType = enabled ? Encryption_Type.GCM : Encryption_Type.NONE; - await this.republishAllTracks(undefined, false); + const unlock = await this.e2eeStateMutex.lock(); + try { + this.encryptionType = enabled ? Encryption_Type.GCM : Encryption_Type.NONE; + await Promise.all(this.pendingPublishPromises.values()); + if ( + this.trackPublications.size === 0 || + Array.from(this.trackPublications.values()).every((pub) => pub.isEncrypted === enabled) + ) { + return; + } + await this.republishAllTracks(undefined, false); + } finally { + unlock(); + } } private async setTrackEnabled( @@ -451,7 +481,7 @@ export default class LocalParticipant extends Participant { options?: VideoCaptureOptions | AudioCaptureOptions | ScreenShareCaptureOptions, publishOptions?: TrackPublishOptions, ) { - this.log.debug('setTrackEnabled', {...this.logContext, source, enabled}); + this.log.debug('setTrackEnabled', {source, enabled}); if (this.republishPromise) { await this.republishPromise; } @@ -464,10 +494,7 @@ export default class LocalParticipant extends Participant { if (this.pendingPublishing.has(source)) { const pendingTrack = await this.waitForPendingPublicationOfSource(source); if (!pendingTrack) { - this.log.info('waiting for pending publication promise timed out', { - ...this.logContext, - source, - }); + this.log.info('waiting for pending publication promise timed out', {source}); } await pendingTrack?.unmute(); return pendingTrack; @@ -511,9 +538,7 @@ export default class LocalParticipant extends Participant { ...options, }; if (source === Track.Source.Microphone && isAudioTrack(localTrack) && opts.preConnectBuffer) { - this.log.info('starting preconnect buffer for microphone', { - ...this.logContext, - }); + this.log.info('starting preconnect buffer for microphone'); localTrack.startPreConnectBuffer(); } } @@ -521,10 +546,7 @@ export default class LocalParticipant extends Participant { try { const publishPromises: Array> = []; for (const localTrack of localTracks) { - this.log.info('publishing track', { - ...this.logContext, - ...getLogContextFromTrack(localTrack), - }); + this.log.info('publishing track', getLogContextFromTrack(localTrack)); publishPromises.push(this.publishTrack(localTrack, publishOptions)); } @@ -544,19 +566,17 @@ export default class LocalParticipant extends Participant { if (!track?.track && this.pendingPublishing.has(source)) { track = await this.waitForPendingPublicationOfSource(source); if (!track) { - this.log.info('waiting for pending publication promise timed out', { - ...this.logContext, - source, - }); + this.log.info('waiting for pending publication promise timed out', {source}); } } if (track?.track) { if (source === Track.Source.ScreenShare) { - track = await this.unpublishTrack(track.track); + const unpublishPromises = [this.unpublishTrack(track.track)]; const screenAudioTrack = this.getTrackPublication(Track.Source.ScreenShareAudio); if (screenAudioTrack?.track) { - this.unpublishTrack(screenAudioTrack.track); + unpublishPromises.push(this.unpublishTrack(screenAudioTrack.track)); } + [track] = await Promise.all(unpublishPromises); } else { await track.mute(); } @@ -673,10 +693,35 @@ export default class LocalParticipant extends Participant { return this.publishOrRepublishTrack(track, options); } + private waitForNextEngineRestart(timeoutMs = 15_000): Promise { + return new Promise((resolve, reject) => { + const cleanup = () => { + clearTimeout(timeout); + this.engine.off(EngineEvent.Restarted, onRestarted); + this.engine.off(EngineEvent.Closing, onClosing); + }; + const onRestarted = () => { + cleanup(); + resolve(); + }; + const onClosing = () => { + cleanup(); + reject(new Error('engine closed before restart completed')); + }; + const timeout = setTimeout(() => { + cleanup(); + reject(new Error('timed out waiting for engine restart')); + }, timeoutMs); + this.engine.once(EngineEvent.Restarted, onRestarted); + this.engine.once(EngineEvent.Closing, onClosing); + }); + } + private async publishOrRepublishTrack( track: LocalTrack | MediaStreamTrack, options?: TrackPublishOptions, isRepublish = false, + hasRetriedAfterNegotiationError = false, ): Promise { if (isLocalAudioTrack(track)) { track.setAudioContext(this.audioContext); @@ -747,10 +792,7 @@ export default class LocalParticipant extends Participant { }); if (existingPublication) { - this.log.warn('track has already been published, skipping', { - ...this.logContext, - ...getLogContextFromTrack(existingPublication), - }); + this.log.warn('track has already been published, skipping', getLogContextFromTrack(existingPublication)); return existingPublication; } @@ -766,16 +808,13 @@ export default class LocalParticipant extends Participant { if (isStereo) { if (opts.dtx === undefined) { - this.log.info( + this.log.debug( `Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.`, - { - ...this.logContext, - ...getLogContextFromTrack(track), - }, + getLogContextFromTrack(track), ); } if (opts.red === undefined) { - this.log.info( + this.log.debug( `Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work.`, ); } @@ -786,9 +825,6 @@ export default class LocalParticipant extends Participant { if (!isE2EESimulcastSupported() && this.roomOptions.e2ee) { this.log.info( `End-to-end encryption is set up, simulcast publishing will be disabled on Safari versions and iOS browsers running iOS < v17.2`, - { - ...this.logContext, - }, ); opts.simulcast = false; } @@ -799,7 +835,6 @@ export default class LocalParticipant extends Participant { const publishPromise = (async (): Promise => { if (this.engine.client.currentState !== SignalConnectionState.CONNECTED) { this.log.debug('deferring track publication until signal is connected', { - ...this.logContext, track: getLogContextFromTrack(track), }); @@ -826,6 +861,16 @@ export default class LocalParticipant extends Participant { try { const publication = await publishPromise; return publication; + } catch (e) { + if (!hasRetriedAfterNegotiationError && e instanceof NegotiationError) { + this.log.warn('negotiation due to track publish failed, retrying after reconnect', { + error: e, + }); + this.pendingPublishPromises.delete(track); + await this.waitForNextEngineRestart(); + return await this.publishOrRepublishTrack(track, options, isRepublish, true); + } + throw e; } finally { this.pendingPublishPromises.delete(track); } @@ -840,10 +885,7 @@ export default class LocalParticipant extends Participant { private hasPermissionsToPublish(track: LocalTrack): boolean { if (!this.permissions) { - this.log.warn('no permissions present for publishing track', { - ...this.logContext, - ...getLogContextFromTrack(track), - }); + this.log.warn('no permissions present for publishing track', getLogContextFromTrack(track)); return false; } const {canPublish, canPublishSources} = this.permissions; @@ -854,10 +896,7 @@ export default class LocalParticipant extends Participant { ) { return true; } - this.log.warn('insufficient permissions to publish', { - ...this.logContext, - ...getLogContextFromTrack(track), - }); + this.log.warn('insufficient permissions to publish', getLogContextFromTrack(track)); return false; } @@ -869,10 +908,7 @@ export default class LocalParticipant extends Participant { (publishedTrack) => isLocalTrack(track) && publishedTrack.source === track.source, ); if (existingTrackOfSource && track.source !== Track.Source.Unknown) { - this.log.info(`publishing a second track with the same source: ${track.source}`, { - ...this.logContext, - ...getLogContextFromTrack(track), - }); + this.log.info(`publishing a second track with the same source: ${track.source}`, getLogContextFromTrack(track)); } if (opts.stopMicTrackOnMute && isAudioTrack(track)) { track.stopOnMute = true; @@ -925,6 +961,7 @@ export default class LocalParticipant extends Participant { if (isLocalAudioTrack(track) && track.hasPreConnectBuffer) { audioFeatures.push(AudioTrackFeature.TF_PRECONNECT_BUFFER); } + const packetTrailerFeatures: Array = this.normalizeRequestedFrameMetadataOptions(track, opts); const req = new AddTrackRequest({ cid: track.mediaStreamTrack.id, @@ -939,14 +976,12 @@ export default class LocalParticipant extends Participant { stream: opts?.stream, backupCodecPolicy: opts?.backupCodecPolicy as BackupCodecPolicy, audioFeatures, + packetTrailerFeatures, }); let encodings: Array | undefined; if (track.kind === Track.Kind.Video) { - let dims: Track.Dimensions = { - width: 0, - height: 0, - }; + let dims: Track.Dimensions; try { dims = await track.waitForDimensions(); } catch (_e) { @@ -956,7 +991,6 @@ export default class LocalParticipant extends Participant { height: defaultRes.height, }; this.log.error('could not determine track dimensions, using defaults', { - ...this.logContext, ...getLogContextFromTrack(track), dims, }); @@ -964,16 +998,27 @@ export default class LocalParticipant extends Participant { req.width = dims.width; req.height = dims.height; if (isLocalVideoTrack(track)) { - if (track.source !== Track.Source.ScreenShare && isSVCCodec(videoCodec)) { + if ( + isSVCSimulcast(videoCodec, opts) && + (usesLegacySVCEncodings() || !isSVCSimulcastSupportedByServer(this.engine?.serverVersion)) + ) { + opts.simulcast = false; + this.log.info('SVC simulcast is not supported, disabling simulcast.', getLogContextFromTrack(track)); + } + + const svcSimulcast = isSVCSimulcast(videoCodec, opts); + if (isSVCCodec(videoCodec) && !svcSimulcast && track.source !== Track.Source.ScreenShare) { opts.scalabilityMode = opts.scalabilityMode ?? 'L3T3_KEY'; } - req.simulcastCodecs = [ - new SimulcastCodec({ - codec: videoCodec, - cid: track.mediaStreamTrack.id, - }), - ]; + const primaryCodec = new SimulcastCodec({ + codec: videoCodec, + cid: track.mediaStreamTrack.id, + }); + if (svcSimulcast) { + primaryCodec.videoLayerMode = VideoLayer_Mode.ONE_SPATIAL_LAYER_PER_STREAM; + } + req.simulcastCodecs = [primaryCodec]; if (opts.backupCodec === true) { opts.backupCodec = {codec: 'h264'}; @@ -995,6 +1040,7 @@ export default class LocalParticipant extends Participant { encodings = computeVideoEncodings(track.source === Track.Source.ScreenShare, req.width, req.height, opts); const usesSvcLayers = isSVCCodec(opts.videoCodec) && + !isSVCSimulcast(opts.videoCodec, opts) && encodings.some( (encoding) => typeof encoding.scalabilityMode === 'string' && encoding.scalabilityMode.length > 0, ); @@ -1019,6 +1065,9 @@ export default class LocalParticipant extends Participant { } track.sender = await this.engine.createSender(track, opts, encodings); + if (isLocalVideoTrack(track)) { + track.publishOptions = opts; + } this.emit(ParticipantEvent.LocalSenderCreated, track.sender, track, opts.videoCodec, track.mediaStreamID); if (isLocalVideoTrack(track)) { @@ -1043,13 +1092,14 @@ export default class LocalParticipant extends Participant { stereo: isStereo, }); } - } else if (track.codec) { - const maxBitrate = maxEncodingBitrate(encodings); - if (maxBitrate > 0) { + } else if (track.codec && isVideoCodec(track.codec)) { + const targetBitrate = computeStartTargetBitrate(track.codec, opts, encodings); + if (targetBitrate > 0) { this.engine.pcManager.publisher.setTrackCodecBitrate({ cid: req.cid, codec: track.codec, - maxbr: maxBitrate / 1000, + maxbr: targetBitrate / 1000, + isScreenShare: track.source === Track.Source.ScreenShare, }); } } @@ -1064,10 +1114,13 @@ export default class LocalParticipant extends Participant { return await this.engine.addTrack(req); } catch (err) { if (track.sender && this.engine.pcManager?.publisher) { - this.engine.pcManager.publisher.removeTrack(track.sender); + try { + this.engine.pcManager.publisher.removeTrack(track.sender); + } catch (e) { + this.log.error(e); + } await this.engine.negotiate().catch((negotiateErr) => { this.log.error('failed to negotiate after removing track due to failed add track request', { - ...this.logContext, ...getLogContextFromTrack(track), error: negotiateErr, }); @@ -1076,7 +1129,7 @@ export default class LocalParticipant extends Participant { throw err; } })(); - if (this.enabledPublishVideoCodecs.length > 0) { + if (this.enabledPublishVideoCodecs.length > 0 && packetTrailerFeatures.length === 0) { const rets = await Promise.all([addTrackPromise, negotiate()]); ti = rets[0]; } else { @@ -1091,7 +1144,6 @@ export default class LocalParticipant extends Participant { const updatedCodec = mimeTypeToVideoCodecString(primaryCodecMime); if (updatedCodec !== videoCodec) { this.log.debug('falling back to server selected codec', { - ...this.logContext, ...getLogContextFromTrack(track), codec: updatedCodec, }); @@ -1113,11 +1165,14 @@ export default class LocalParticipant extends Participant { publication.options = opts; track.sid = ti.sid; - this.log.debug(`publishing ${track.kind} with encodings`, { - ...this.logContext, - encodings, - trackInfo: ti, - }); + if (isLocalVideoTrack(track)) { + track.publishOptions = opts; + if (req.width && req.height) { + track.lastEncodedDimensions = {width: req.width, height: req.height}; + } + } + + this.log.debug(`publishing ${track.kind} with encodings`, {encodings, trackInfo: ti}); if (isLocalVideoTrack(track)) { track.startMonitor(this.engine.client); @@ -1134,23 +1189,17 @@ export default class LocalParticipant extends Participant { this.on(ParticipantEvent.LocalTrackSubscribed, (pub) => { if (pub.trackSid === ti.sid) { if (!track.hasPreConnectBuffer) { - this.log.warn('subscribe event came to late, buffer already closed', this.logContext); + this.log.warn('subscribe event came to late, buffer already closed'); return; } - this.log.debug('finished recording preconnect buffer', { - ...this.logContext, - ...getLogContextFromTrack(track), - }); + this.log.debug('finished recording preconnect buffer', getLogContextFromTrack(track)); track.stopPreConnectBuffer(); } }); if (stream) { const bufferStreamPromise = (async (): Promise => { - this.log.debug('waiting for agent', { - ...this.logContext, - ...getLogContextFromTrack(track), - }); + this.log.debug('waiting for agent', getLogContextFromTrack(track)); let agentActiveTimeout: TimerHandle | undefined; let agent: RemoteParticipant; try { @@ -1167,10 +1216,7 @@ export default class LocalParticipant extends Participant { CriticalTimers.clearTimeout(agentActiveTimeout); } } - this.log.debug('sending preconnect buffer', { - ...this.logContext, - ...getLogContextFromTrack(track), - }); + this.log.debug('sending preconnect buffer', getLogContextFromTrack(track)); const writer = await this.streamBytes({ name: 'preconnect-buffer', mimeType, @@ -1189,14 +1235,10 @@ export default class LocalParticipant extends Participant { })(); bufferStreamPromise .then(() => { - this.log.debug('preconnect buffer sent successfully', { - ...this.logContext, - ...getLogContextFromTrack(track), - }); + this.log.debug('preconnect buffer sent successfully', getLogContextFromTrack(track)); }) .catch((e) => { this.log.error('error sending preconnect buffer', { - ...this.logContext, ...getLogContextFromTrack(track), error: e, }); @@ -1206,6 +1248,39 @@ export default class LocalParticipant extends Participant { return publication; } + private canPublishFrameMetadata() { + return !!( + this.roomOptions.e2ee || + this.roomOptions.encryption || + isFrameMetadataSupported(this.roomOptions.frameMetadata ?? this.roomOptions.packetTrailer) + ); + } + + private normalizeRequestedFrameMetadataOptions(track: LocalTrack, opts: TrackPublishOptions) { + const fmOpts = opts.frameMetadata ?? opts.packetTrailer; + if (track.kind !== Track.Kind.Video || !hasFrameMetadataPublishOptions(fmOpts)) { + opts.frameMetadata = undefined; + opts.packetTrailer = undefined; + return []; + } + + if (!this.canPublishFrameMetadata()) { + this.log.warn('frame metadata transform not supported; not advertising features', { + ...this.logContext, + ...getLogContextFromTrack(track), + }); + opts.frameMetadata = undefined; + opts.packetTrailer = undefined; + return []; + } + + const features = getFrameMetadataFeatures(fmOpts); + const normalized = getFrameMetadataPublishOptions(features); + opts.frameMetadata = normalized; + opts.packetTrailer = normalized; + return features; + } + override get isLocal(): boolean { return true; } @@ -1239,16 +1314,18 @@ export default class LocalParticipant extends Participant { const encodings = computeTrackBackupEncodings(track, videoCodec, opts); if (!encodings) { - this.log.info(`backup codec has been disabled, ignoring request to add additional codec for track`, { - ...this.logContext, - ...getLogContextFromTrack(track), - }); + this.log.info( + `backup codec has been disabled, ignoring request to add additional codec for track`, + getLogContextFromTrack(track), + ); return; } const simulcastTrack = track.addSimulcastTrack(videoCodec, encodings); if (!simulcastTrack) { return; } + const packetTrailerFeatures = this.normalizeRequestedFrameMetadataOptions(track, opts); + const req = new AddTrackRequest({ cid: simulcastTrack.mediaStreamTrack.id, type: Track.kindToProto(track.kind), @@ -1256,6 +1333,7 @@ export default class LocalParticipant extends Participant { source: Track.sourceToProto(track.source), sid: track.sid, encryption: this.encryptionType, + packetTrailerFeatures, simulcastCodecs: [ { codec: opts.videoCodec, @@ -1287,17 +1365,14 @@ export default class LocalParticipant extends Participant { const ti = rets[0]; this.log.debug(`published ${videoCodec} for track ${track.sid}`, { - ...this.logContext, encodings, trackInfo: ti, }); } catch (e) { - if (isLocalVideoTrack(track)) { - const scInfo = track.simulcastCodecs.get(videoCodec); - if (scInfo) { - scInfo.mediaStreamTrack.stop(); - track.simulcastCodecs.delete(videoCodec); - } + const scInfo = track.simulcastCodecs.get(videoCodec); + if (scInfo) { + scInfo.mediaStreamTrack.stop(); + track.simulcastCodecs.delete(videoCodec); } throw e; } @@ -1310,10 +1385,7 @@ export default class LocalParticipant extends Participant { if (isLocalTrack(track)) { const publishPromise = this.pendingPublishPromises.get(track); if (publishPromise) { - this.log.info('awaiting publish promise before attempting to unpublish', { - ...this.logContext, - ...getLogContextFromTrack(track), - }); + this.log.debug('awaiting publish promise before attempting to unpublish', getLogContextFromTrack(track)); await publishPromise; } } @@ -1321,16 +1393,10 @@ export default class LocalParticipant extends Participant { const pubLogContext = publication ? getLogContextFromTrack(publication) : undefined; - this.log.debug('unpublishing track', { - ...this.logContext, - ...pubLogContext, - }); + this.log.info('unpublishing track', pubLogContext); - if (!publication || !publication.track) { - this.log.warn('track was not unpublished because no publication was found', { - ...this.logContext, - ...pubLogContext, - }); + if (!publication?.track) { + this.log.warn('track was not unpublished because no publication was found', pubLogContext); return undefined; } @@ -1362,13 +1428,20 @@ export default class LocalParticipant extends Participant { negotiationNeeded = true; } } - if (this.engine.removeTrack(trackSender)) { + try { + negotiationNeeded = this.engine.removeTrack(trackSender); + } catch (e) { + this.log.warn(e); negotiationNeeded = true; } + if (isLocalVideoTrack(track)) { for (const [, trackInfo] of track.simulcastCodecs) { if (trackInfo.sender) { - if (this.engine.removeTrack(trackInfo.sender)) { + try { + negotiationNeeded = this.engine.removeTrack(trackInfo.sender); + } catch (e) { + this.log.warn(e); negotiationNeeded = true; } trackInfo.sender = undefined; @@ -1377,11 +1450,7 @@ export default class LocalParticipant extends Participant { track.simulcastCodecs.clear(); } } catch (e) { - this.log.warn('failed to unpublish track', { - ...this.logContext, - ...pubLogContext, - error: e, - }); + this.log.warn('failed to unpublish track', {...pubLogContext, error: e}); } } @@ -1439,10 +1508,7 @@ export default class LocalParticipant extends Participant { (isLocalAudioTrack(track) || isLocalVideoTrack(track)) && !track.isUserProvided ) { - this.log.debug('restarting existing track', { - ...this.logContext, - track: pub.trackSid, - }); + this.log.debug('restarting existing track', {track: pub.trackSid}); await track.restartTrack(); } await this.publishOrRepublishTrack(track, pub.options, true); @@ -1463,8 +1529,9 @@ export default class LocalParticipant extends Participant { await this.republishPromise; } - async publishData(data: Uint8Array, options: DataPublishOptions = {}): Promise { - const kind = options.reliable ? DataPacket_Kind.RELIABLE : DataPacket_Kind.LOSSY; + async publishData(data: NonSharedUint8Array, options: DataPublishOptions = {}): Promise { + const kind = options.reliable ? DataChannelKind.RELIABLE : DataChannelKind.LOSSY; + const dataPacketKind = options.reliable ? DataPacket_Kind.RELIABLE : DataPacket_Kind.LOSSY; const destinationIdentities = options.destinationIdentities; const topic = options.topic; @@ -1476,7 +1543,7 @@ export default class LocalParticipant extends Participant { }); const packet = new DataPacket({ - kind: kind, + kind: dataPacketKind, value: { case: 'user', value: userPacket, @@ -1498,7 +1565,7 @@ export default class LocalParticipant extends Participant { }, }); - await this.engine.sendDataPacket(packet, DataPacket_Kind.RELIABLE); + await this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE); } async sendChatMessage(text: string, options?: SendTextOptions): Promise { @@ -1517,7 +1584,7 @@ export default class LocalParticipant extends Participant { }), }, }); - await this.engine.sendDataPacket(packet, DataPacket_Kind.RELIABLE); + await this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE); this.emit(ParticipantEvent.ChatMessage, msg); return msg; @@ -1539,7 +1606,7 @@ export default class LocalParticipant extends Participant { }), }, }); - await this.engine.sendDataPacket(packet, DataPacket_Kind.RELIABLE); + await this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE); this.emit(ParticipantEvent.ChatMessage, msg); return msg; } @@ -1556,86 +1623,26 @@ export default class LocalParticipant extends Participant { return this.roomOutgoingDataStreamManager.sendFile(file, options); } + async sendBytes(bytes: Uint8Array, options?: SendBytesOptions): Promise { + return this.roomOutgoingDataStreamManager.sendBytes(bytes, options); + } + async streamBytes(options?: StreamBytesOptions) { return this.roomOutgoingDataStreamManager.streamBytes(options); } - performRpc({ - destinationIdentity, - method, - payload, - responseTimeout = 15000, - }: PerformRpcParams): TypedPromise { - const maxRoundTripLatency = 7000; - const minEffectiveTimeout = maxRoundTripLatency + 1000; - - return new TypedPromise(async (resolve, reject) => { - if (byteLength(payload) > MAX_PAYLOAD_BYTES) { - reject(RpcError.builtIn('REQUEST_PAYLOAD_TOO_LARGE')); - return; - } - - if ( - this.engine.latestJoinResponse?.serverInfo?.version && - compareVersions(this.engine.latestJoinResponse?.serverInfo?.version, '1.8.0') < 0 - ) { - reject(RpcError.builtIn('UNSUPPORTED_SERVER')); - return; - } - - const effectiveTimeout = Math.max(responseTimeout, minEffectiveTimeout); - const id = crypto.randomUUID(); - await this.publishRpcRequest(destinationIdentity, id, method, payload, effectiveTimeout); - - const ackTimeoutId = setTimeout(() => { - this.pendingAcks.delete(id); - reject(RpcError.builtIn('CONNECTION_TIMEOUT')); - this.pendingResponses.delete(id); - clearTimeout(responseTimeoutId); - }, maxRoundTripLatency); - - this.pendingAcks.set(id, { - resolve: () => { - clearTimeout(ackTimeoutId); - }, - participantIdentity: destinationIdentity, - }); - - const responseTimeoutId = setTimeout(() => { - this.pendingResponses.delete(id); - reject(RpcError.builtIn('RESPONSE_TIMEOUT')); - }, responseTimeout); - - this.pendingResponses.set(id, { - resolve: (responsePayload: string | null, responseError: RpcError | null) => { - clearTimeout(responseTimeoutId); - if (this.pendingAcks.has(id)) { - this.log.warn('RPC response received before ack', id); - this.pendingAcks.delete(id); - clearTimeout(ackTimeoutId); - } - - if (responseError) { - reject(responseError); - } else { - resolve(responsePayload ?? ''); - } - }, - participantIdentity: destinationIdentity, - }); + performRpc(params: PerformRpcParams): TypedPromise { + return this.rpcClientManager.performRpc(params).then(([_id, completionPromise]) => { + return completionPromise; }); } registerRpcMethod(method: string, handler: (data: RpcInvocationData) => Promise) { - if (this.rpcHandlers.has(method)) { - this.log.warn(`you're overriding the RPC handler for method ${method}, in the future this will throw an error`); - } - - this.rpcHandlers.set(method, handler); + this.rpcServerManager.registerRpcMethod(method, handler); } unregisterRpcMethod(method: string) { - this.rpcHandlers.delete(method); + this.rpcServerManager.unregisterRpcMethod(method); } setTrackSubscriptionPermissions( @@ -1649,66 +1656,6 @@ export default class LocalParticipant extends Participant { } } - private handleIncomingRpcAck(requestId: string) { - const handler = this.pendingAcks.get(requestId); - if (handler) { - handler.resolve(); - this.pendingAcks.delete(requestId); - } else { - this.log.warn('Ack received for unexpected RPC request', {...this.logContext, requestId}); - } - } - - private handleIncomingRpcResponse(requestId: string, payload: string | null, error: RpcError | null) { - const handler = this.pendingResponses.get(requestId); - if (handler) { - handler.resolve(payload, error); - this.pendingResponses.delete(requestId); - } else { - this.log.warn('Response received for unexpected RPC request', {...this.logContext, requestId}); - } - } - - private async publishRpcRequest( - destinationIdentity: string, - requestId: string, - method: string, - payload: string, - responseTimeout: number, - ) { - const packet = new DataPacket({ - destinationIdentities: [destinationIdentity], - kind: DataPacket_Kind.RELIABLE, - value: { - case: 'rpcRequest', - value: new RpcRequest({ - id: requestId, - method, - payload, - responseTimeoutMs: responseTimeout, - version: 1, - }), - }, - }); - - await this.engine.sendDataPacket(packet, DataPacket_Kind.RELIABLE); - } - - handleParticipantDisconnected(participantIdentity: string) { - for (const [id, {participantIdentity: pendingIdentity}] of this.pendingAcks) { - if (pendingIdentity === participantIdentity) { - this.pendingAcks.delete(id); - } - } - - for (const [id, {participantIdentity: pendingIdentity, resolve}] of this.pendingResponses) { - if (pendingIdentity === participantIdentity) { - resolve(null, RpcError.builtIn('RECIPIENT_DISCONNECTED')); - this.pendingResponses.delete(id); - } - } - } - setEnabledPublishCodecs(codecs: Array) { this.enabledPublishVideoCodecs = codecs.filter((c) => c.mime.split('/')[0].toLowerCase() === 'video'); } @@ -1725,7 +1672,6 @@ export default class LocalParticipant extends Participant { const mutedOnServer = pub.isMuted || (pub.track?.isUpstreamPaused ?? false); if (mutedOnServer !== ti.muted) { this.log.debug('updating server mute state after reconcile', { - ...this.logContext, ...getLogContextFromTrack(pub), mutedOnServer, }); @@ -1738,7 +1684,6 @@ export default class LocalParticipant extends Participant { private updateTrackSubscriptionPermissions = () => { this.log.debug('updating track subscription permissions', { - ...this.logContext, allParticipantsAllowed: this.allParticipantsAllowedToSubscribe, participantTrackPermissions: this.participantTrackPermissions, }); @@ -1781,10 +1726,7 @@ export default class LocalParticipant extends Participant { } if (!track.sid) { - this.log.error('could not update mute status for unpublished track', { - ...this.logContext, - ...getLogContextFromTrack(track), - }); + this.log.error('could not update mute status for unpublished track', getLogContextFromTrack(track)); return; } @@ -1792,38 +1734,26 @@ export default class LocalParticipant extends Participant { }; private onTrackUpstreamPaused = (track: LocalTrack) => { - this.log.debug('upstream paused', { - ...this.logContext, - ...getLogContextFromTrack(track), - }); + this.log.debug('upstream paused', getLogContextFromTrack(track)); this.onTrackMuted(track, true); }; private onTrackUpstreamResumed = (track: LocalTrack) => { - this.log.debug('upstream resumed', { - ...this.logContext, - ...getLogContextFromTrack(track), - }); + this.log.debug('upstream resumed', getLogContextFromTrack(track)); this.onTrackMuted(track, track.isMuted); }; private onTrackFeatureUpdate = (track: LocalAudioTrack) => { const pub = this.audioTrackPublications.get(track.sid!); if (!pub) { - this.log.warn( - `Could not update local audio track settings, missing publication for track ${track.sid}`, - this.logContext, - ); + this.log.warn(`Could not update local audio track settings, missing publication for track ${track.sid}`); return; } this.engine.client.sendUpdateLocalAudioTrack(pub.trackSid, pub.getTrackFeatures()); }; private onTrackCpuConstrained = (track: LocalVideoTrack, publication: LocalTrackPublication) => { - this.log.debug('track cpu constrained', { - ...this.logContext, - ...getLogContextFromTrack(publication), - }); + this.log.debug('track cpu constrained', getLogContextFromTrack(publication)); this.emit(ParticipantEvent.LocalTrackCpuConstrained, track, publication); }; @@ -1834,7 +1764,6 @@ export default class LocalParticipant extends Participant { const pub = this.videoTrackPublications.get(update.trackSid); if (!pub) { this.log.warn('received subscribed quality update for unknown track', { - ...this.logContext, trackSid: update.trackSid, }); return; @@ -1845,15 +1774,11 @@ export default class LocalParticipant extends Participant { const newCodecs = await pub.videoTrack.setPublishingCodecs(update.subscribedCodecs); for await (const codec of newCodecs) { if (isBackupCodec(codec)) { - this.log.debug(`publish ${codec} for ${pub.videoTrack.sid}`, { - ...this.logContext, - ...getLogContextFromTrack(pub), - }); + this.log.debug(`publish ${codec} for ${pub.videoTrack.sid}`, getLogContextFromTrack(pub)); try { await this.publishAdditionalCodecForTrack(pub.videoTrack, codec, pub.options); } catch (e) { this.log.warn(`failed to publish backup codec ${codec} for ${pub.videoTrack.sid}`, { - ...this.logContext, ...getLogContextFromTrack(pub), error: e, }); @@ -1866,7 +1791,6 @@ export default class LocalParticipant extends Participant { const track = this.trackPublications.get(unpublished.trackSid); if (!track) { this.log.warn('received unpublished event for unknown track', { - ...this.logContext, trackSid: unpublished.trackSid, }); return; @@ -1876,10 +1800,7 @@ export default class LocalParticipant extends Participant { private handleTrackEnded = async (track: LocalTrack) => { if (track.source === Track.Source.ScreenShare || track.source === Track.Source.ScreenShareAudio) { - this.log.debug('unpublishing local track due to TrackEnded', { - ...this.logContext, - ...getLogContextFromTrack(track), - }); + this.log.debug('unpublishing local track due to TrackEnded', getLogContextFromTrack(track)); this.unpublishTrack(track); } else if (track.isUserProvided) { await track.mute(); @@ -1891,10 +1812,7 @@ export default class LocalParticipant extends Participant { name: track.source === Track.Source.Camera ? 'camera' : 'microphone', }); if (currentPermissions && currentPermissions.state === 'denied') { - this.log.warn(`user has revoked access to ${track.source}`, { - ...this.logContext, - ...getLogContextFromTrack(track), - }); + this.log.warn(`user has revoked access to ${track.source}`, getLogContextFromTrack(track)); currentPermissions.onchange = () => { if (currentPermissions.state !== 'denied') { @@ -1906,13 +1824,10 @@ export default class LocalParticipant extends Participant { }; throw new Error('GetUserMedia Permission denied'); } - } catch (_e: unknown) {} + } catch (_e: any) {} } if (!track.isMuted) { - this.log.debug('track ended, attempting to use a different device', { - ...this.logContext, - ...getLogContextFromTrack(track), - }); + this.log.debug('track ended, attempting to use a different device', getLogContextFromTrack(track)); if (isLocalAudioTrack(track)) { await track.restartTrack({deviceId: 'default'}); } else { @@ -1920,10 +1835,7 @@ export default class LocalParticipant extends Participant { } } } catch (_e) { - this.log.warn(`could not restart track, muting instead`, { - ...this.logContext, - ...getLogContextFromTrack(track), - }); + this.log.warn(`could not restart track, muting instead`, getLogContextFromTrack(track)); await track.mute(); } } @@ -1965,4 +1877,11 @@ export default class LocalParticipant extends Participant { } return undefined; } + + async publishDataTrack(options: DataTrackOptions): Promise { + const track = new LocalDataTrack(options, this.roomOutgoingDataTrackManager); + await track.publish(); + + return track; + } } diff --git a/fluxer_app/pkgs/livekit-client/src/room/participant/Participant.ts b/fluxer_app/pkgs/livekit-client/src/room/participant/Participant.ts index ab55d49aa..d94d68822 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/participant/Participant.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/participant/Participant.ts @@ -15,6 +15,7 @@ import { import {EventEmitter} from 'events'; import type TypedEmitter from 'typed-emitter'; import log, {getLogger, LoggerNames, type StructuredLogger} from '../../logger.ts'; +import type {NonSharedUint8Array} from '../../type-polyfills/non-shared-typed-arrays.ts'; import {ParticipantEvent, TrackEvent} from '../events.ts'; import type LocalTrackPublication from '../track/LocalTrackPublication.ts'; import type LocalVideoTrack from '../track/LocalVideoTrack.ts'; @@ -128,8 +129,8 @@ export default class Participant extends (EventEmitter as new () => TypedEmitter ) { super(); - this.log = getLogger(loggerOptions?.loggerName ?? LoggerNames.Participant); this.loggerOptions = loggerOptions; + this.log = getLogger(loggerOptions?.loggerName ?? LoggerNames.Participant, () => this.logContext); this.setMaxListeners(100); this.sid = sid; @@ -309,8 +310,12 @@ export default class Participant extends (EventEmitter as new () => TypedEmitter this.audioContext = ctx; this.audioTrackPublications.forEach((track) => isAudioTrack(track.track) && track.track.setAudioContext(ctx)); } - addTrackPublication(publication: TrackPublication) { + this.log.debug(`adding track publication`, { + trackSid: publication.trackSid, + source: publication.source, + kind: publication.kind, + }); publication.on(TrackEvent.Muted, () => { this.emit(ParticipantEvent.TrackMuted, publication); }); @@ -337,7 +342,6 @@ export default class Participant extends (EventEmitter as new () => TypedEmitter } } } - export type ParticipantEventArgumentMap = { trackPublished: [publication: RemoteTrackPublication]; trackSubscribed: [track: RemoteTrack, publication: RemoteTrackPublication]; @@ -352,7 +356,7 @@ export type ParticipantEventArgumentMap = { localSenderCreated: [sender: RTCRtpSender, track: Track, codec?: VideoCodec, trackId?: string]; participantMetadataChanged: [prevMetadata: string | undefined, participant?: unknown]; participantNameChanged: [name: string]; - dataReceived: [payload: Uint8Array, kind: DataPacket_Kind, encryptionType?: Encryption_Type]; + dataReceived: [payload: NonSharedUint8Array, kind: DataPacket_Kind, encryptionType?: Encryption_Type]; sipDTMFReceived: [dtmf: SipDTMF]; transcriptionReceived: [transcription: Array, publication?: TrackPublication]; isSpeakingChanged: [speaking: boolean]; diff --git a/fluxer_app/pkgs/livekit-client/src/room/participant/RemoteParticipant.ts b/fluxer_app/pkgs/livekit-client/src/room/participant/RemoteParticipant.ts index 738c38fe3..2f2685c40 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/participant/RemoteParticipant.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/participant/RemoteParticipant.ts @@ -1,9 +1,20 @@ // SPDX-FileCopyrightText: 2024 LiveKit, Inc. // // SPDX-License-Identifier: Apache-2.0 -import type {ParticipantInfo, SubscriptionError, UpdateSubscription, UpdateTrackSettings} from '@livekit/protocol'; +import type { + ClientInfo_Capability, + ParticipantInfo, + SubscriptionError, + UpdateSubscription, + UpdateTrackSettings, +} from '@livekit/protocol'; import {EventEmitter} from 'events'; import type {SignalClient} from '../../api/SignalClient.ts'; +import {DeferrableMap} from '../../utils/deferrable-map.ts'; +import {CLIENT_PROTOCOL_DEFAULT} from '../../version.ts'; +import type IncomingDataTrackManager from '../data-track/incoming/IncomingDataTrackManager.ts'; +import RemoteDataTrack from '../data-track/RemoteDataTrack.ts'; +import {DataTrackInfo} from '../data-track/types.ts'; import {ParticipantEvent, TrackEvent} from '../events.ts'; import type {AudioOutputOptions} from '../track/options.ts'; import RemoteAudioTrack from '../track/RemoteAudioTrack.ts'; @@ -21,13 +32,16 @@ import Participant, {ParticipantKind} from './Participant.ts'; export default class RemoteParticipant extends Participant { override audioTrackPublications: Map; - override videoTrackPublications: Map; - override trackPublications: Map; + dataTracks: DeferrableMap; signalClient: SignalClient; + clientProtocol: number; + + capabilities: Array; + private volumeMap: Map; private audioOutput?: AudioOutputOptions; @@ -36,6 +50,7 @@ export default class RemoteParticipant extends Participant { signalClient: SignalClient, pi: ParticipantInfo, loggerOptions: LoggerOptions, + manager: IncomingDataTrackManager, ): RemoteParticipant { return new RemoteParticipant( signalClient, @@ -46,13 +61,19 @@ export default class RemoteParticipant extends Participant { pi.attributes, loggerOptions, pi.kind, + pi.dataTracks.map((dti) => { + const info = DataTrackInfo.from(dti); + return new RemoteDataTrack(info, manager, {publisherIdentity: pi.identity}); + }), + pi.clientProtocol, + pi.capabilities, ); } protected override get logContext() { return { ...super.logContext, - rpID: this.sid, + remoteParticipantID: this.sid, remoteParticipant: this.identity, }; } @@ -66,13 +87,23 @@ export default class RemoteParticipant extends Participant { attributes?: Record, loggerOptions?: LoggerOptions, kind: ParticipantKind = ParticipantKind.STANDARD, + remoteDataTracks: Array = [], + clientProtocol: number = CLIENT_PROTOCOL_DEFAULT, + capabilities: Array = [], ) { super(sid, identity || '', name, metadata, attributes, loggerOptions, kind); this.signalClient = signalClient; this.trackPublications = new Map(); this.audioTrackPublications = new Map(); this.videoTrackPublications = new Map(); + this.dataTracks = new DeferrableMap( + remoteDataTracks.map((remoteDataTrack) => { + return [remoteDataTrack.info.name, remoteDataTrack]; + }), + ); this.volumeMap = new Map(); + this.clientProtocol = clientProtocol; + this.capabilities = capabilities; } override addTrackPublication(publication: RemoteTrackPublication) { @@ -313,7 +344,16 @@ export default class RemoteParticipant extends Participant { }); await Promise.all(promises); } - + addRemoteDataTrack(remoteDataTrack: RemoteDataTrack) { + this.dataTracks.set(remoteDataTrack.info.name, remoteDataTrack); + } + removeRemoteDataTrack(remoteDataTrackSid: RemoteDataTrack['info']['sid']) { + for (const [name, dataTrack] of this.dataTracks.entries()) { + if (remoteDataTrackSid === dataTrack.info.sid) { + this.dataTracks.delete(name); + } + } + } override emit(event: E, ...args: ParticipantEventArguments): boolean { this.log.trace('participant event', {...this.logContext, event, args}); return EventEmitter.prototype.emit.call(this, event, ...args); diff --git a/fluxer_app/pkgs/livekit-client/src/room/participant/publishUtils.ts b/fluxer_app/pkgs/livekit-client/src/room/participant/publishUtils.ts index 41f7fd8a0..e29df29a3 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/participant/publishUtils.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/participant/publishUtils.ts @@ -11,14 +11,12 @@ import {ScreenSharePresets, VideoPreset, VideoPresets, VideoPresets43} from '../ import {Track} from '../track/Track.ts'; import type {LoggerOptions} from '../types.ts'; import { - compareVersions, getReactNativeOs, - isFireFox, isReactNative, - isSafariBased, isSafariSvcApi, isSVCCodec, - unwrapConstraint, + isSVCSimulcast, + usesLegacySVCEncodings, } from '../utils.ts'; export function mediaTrackToLocalTrack( @@ -83,6 +81,7 @@ export function computeVideoEncodings( const useSimulcast = options?.simulcast; const scalabilityMode = options?.scalabilityMode; const videoCodec = options?.videoCodec; + const useSVCSimulcast = isSVCSimulcast(videoCodec, options); if ((!videoEncoding && !useSimulcast && !scalabilityMode) || !width || !height) { return [{}]; @@ -103,7 +102,7 @@ export function computeVideoEncodings( videoEncoding.priority, ); - if (scalabilityMode && isSVCCodec(videoCodec)) { + if (scalabilityMode && isSVCCodec(videoCodec) && !useSVCSimulcast) { const sm = new ScalabilityMode(scalabilityMode); const encodings: Array = []; @@ -112,11 +111,7 @@ export function computeVideoEncodings( throw new Error(`unsupported scalabilityMode: ${scalabilityMode}`); } const browser = getBrowser(); - if ( - isSafariBased() || - isReactNative() || - (browser?.name === 'Chrome' && compareVersions(browser?.version, '113') < 0) - ) { + if (usesLegacySVCEncodings()) { const bitratesRatio = sm.suffix === 'h' ? 2 : 3; const requireScale = isSafariSvcApi(browser); for (let i = 0; i < sm.spatial; i += 1) { @@ -149,7 +144,16 @@ export function computeVideoEncodings( return [videoEncoding]; } - let presets: Array = []; + const applySVCSimulcastMode = (encodings: Array) => { + if (useSVCSimulcast) { + encodings.forEach((encoding) => { + encoding.scalabilityMode = scalabilityMode; + }); + } + return encodings; + }; + + let presets: Array; if (isScreenShare) { presets = sortPresets(options?.screenShareSimulcastLayers) ?? defaultSimulcastLayers(isScreenShare, original); } else { @@ -164,13 +168,26 @@ export function computeVideoEncodings( const size = Math.max(width, height); if (size >= 960 && midPreset) { - return encodingsFromPresets(width, height, [lowPreset, midPreset, original], sourceFramerate); + return applySVCSimulcastMode( + encodingsFromPresets(width, height, [lowPreset, midPreset, original], sourceFramerate), + ); } if (size >= 480) { - return encodingsFromPresets(width, height, [lowPreset, original], sourceFramerate); + return applySVCSimulcastMode(encodingsFromPresets(width, height, [lowPreset, original], sourceFramerate)); } } - return encodingsFromPresets(width, height, [original]); + return applySVCSimulcastMode(encodingsFromPresets(width, height, [original])); +} + +export function computeStartTargetBitrate( + codec: string, + options: TrackPublishOptions | undefined, + encodings: Array, +): number { + if (isSVCCodec(codec) && !isSVCSimulcast(codec, options)) { + return encodings[0]?.maxBitrate ?? 0; + } + return encodings.reduce((sum, enc) => sum + (enc.maxBitrate ?? 0), 0); } export function computeTrackBackupEncodings( @@ -289,7 +306,8 @@ function encodingsFromPresets( if (maxFramerate) { encoding.maxFramerate = maxFramerate; } - const canSetPriority = isFireFox() || idx === 0; + const browser = getBrowser(); + const canSetPriority = (browser?.name === 'Firefox' && browser.os !== 'iOS') || idx === 0; if (preset.encoding.priority && canSetPriority) { encoding.priority = preset.encoding.priority; encoding.networkPriority = preset.encoding.priority; @@ -325,7 +343,7 @@ function encodingsFromPresets( export function sortPresets(presets: Array | undefined) { if (!presets) return; - return presets.sort((a, b) => { + return presets.slice().sort((a, b) => { const {encoding: aEnc} = a; const {encoding: bEnc} = b; @@ -369,22 +387,13 @@ export class ScalabilityMode { return `L${this.spatial}T${this.temporal}${this.suffix ?? ''}`; } } - -export function maxEncodingBitrate(encodings: Array | undefined): number { - if (!encodings) { - return 0; - } - let maxBitrate = 0; - for (const encoding of encodings) { - if (typeof encoding.maxBitrate === 'number' && encoding.maxBitrate > maxBitrate) { - maxBitrate = encoding.maxBitrate; - } - } - return maxBitrate; -} - export function getDefaultDegradationPreference(track: LocalVideoTrack): RTCDegradationPreference { - if (track.source === Track.Source.ScreenShare) return 'maintain-resolution'; - if (track.constraints.height && unwrapConstraint(track.constraints.height) >= 1080) return 'maintain-resolution'; - return 'balanced'; + switch (track.source) { + case Track.Source.Camera: + return 'maintain-framerate'; + case Track.Source.ScreenShare: + return 'maintain-resolution'; + default: + return 'balanced'; + } } diff --git a/fluxer_app/pkgs/livekit-client/src/room/rpc/client/RpcClientManager.ts b/fluxer_app/pkgs/livekit-client/src/room/rpc/client/RpcClientManager.ts new file mode 100644 index 000000000..6465add0c --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/rpc/client/RpcClientManager.ts @@ -0,0 +1,243 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import {DataPacket, DataPacket_Kind, RpcRequest} from '@livekit/protocol'; +import {EventEmitter} from 'events'; +import type TypedEmitter from 'typed-emitter'; +import type {StructuredLogger} from '../../../logger.ts'; +import {CLIENT_PROTOCOL_DATA_STREAM_RPC} from '../../../version.ts'; +import type {TextStreamReader} from '../../data-stream/incoming/StreamReader.ts'; +import type OutgoingDataStreamManager from '../../data-stream/outgoing/OutgoingDataStreamManager.ts'; +import type Participant from '../../participant/Participant.ts'; +import {compareVersions, Future} from '../../utils.ts'; +import { + byteLength, + MAX_V1_PAYLOAD_BYTES, + type PerformRpcParams, + RPC_REQUEST_DATA_STREAM_TOPIC, + RPC_VERSION_V1, + RPC_VERSION_V2, + RpcError, + RpcRequestAttrs, +} from '../utils.ts'; +import type {RpcClientManagerCallbacks} from './events.ts'; + +export default class RpcClientManager extends (EventEmitter as new () => TypedEmitter) { + private log: StructuredLogger; + + private outgoingDataStreamManager: OutgoingDataStreamManager; + + private getRemoteParticipantClientProtocol: (identity: Participant['identity']) => number; + + private getServerVersion: () => string | undefined; + + private pendingAcks = new Map void; participantIdentity: string}>(); + + private pendingResponses = new Map< + string, + { + completionFuture: Future; + participantIdentity: string; + } + >(); + + constructor( + log: StructuredLogger, + outgoingDataStreamManager: OutgoingDataStreamManager, + getRemoteParticipantClientProtocol: (identity: Participant['identity']) => number, + getServerVersion: () => string | undefined, + ) { + super(); + this.log = log; + this.outgoingDataStreamManager = outgoingDataStreamManager; + this.getRemoteParticipantClientProtocol = getRemoteParticipantClientProtocol; + this.getServerVersion = getServerVersion; + } + + async performRpc({ + destinationIdentity, + method, + payload, + responseTimeout: responseTimeoutMs = 15000, + }: PerformRpcParams): Promise<[id: string, completionPromise: Promise]> { + const maxRoundTripLatencyMs = 7000; + const minEffectiveTimeoutMs = maxRoundTripLatencyMs + 1000; + + const remoteClientProtocol = this.getRemoteParticipantClientProtocol(destinationIdentity); + const payloadBytes = byteLength(payload); + + if (payloadBytes > MAX_V1_PAYLOAD_BYTES && remoteClientProtocol < CLIENT_PROTOCOL_DATA_STREAM_RPC) { + throw RpcError.builtIn('REQUEST_PAYLOAD_TOO_LARGE'); + } + + const serverVersion = this.getServerVersion(); + if (serverVersion && compareVersions(serverVersion, '1.8.0') < 0) { + throw RpcError.builtIn('UNSUPPORTED_SERVER'); + } + + const effectiveTimeoutMs = Math.max(responseTimeoutMs, minEffectiveTimeoutMs); + const id = crypto.randomUUID(); + + const completionFuture = new Future(); + + let responseTimeoutId: ReturnType | null = null; + const ackTimeoutId = setTimeout(() => { + this.pendingAcks.delete(id); + completionFuture.reject?.(RpcError.builtIn('CONNECTION_TIMEOUT')); + this.pendingResponses.delete(id); + if (responseTimeoutId !== null) { + clearTimeout(responseTimeoutId); + } + }, maxRoundTripLatencyMs); + + this.pendingAcks.set(id, { + resolve: () => { + clearTimeout(ackTimeoutId); + }, + participantIdentity: destinationIdentity, + }); + + this.pendingResponses.set(id, { + completionFuture, + participantIdentity: destinationIdentity, + }); + + await this.publishRpcRequest(destinationIdentity, id, method, payload, effectiveTimeoutMs, remoteClientProtocol); + + responseTimeoutId = setTimeout(() => { + this.pendingResponses.delete(id); + completionFuture.reject?.(RpcError.builtIn('RESPONSE_TIMEOUT')); + }, responseTimeoutMs); + + const completionPromise = completionFuture.promise.finally(() => { + clearTimeout(responseTimeoutId); + + if (this.pendingAcks.has(id)) { + this.log.warn('RPC response received before ack', id); + this.pendingAcks.delete(id); + clearTimeout(ackTimeoutId); + } + }); + + return [id, completionPromise]; + } + + private async publishRpcRequest( + destinationIdentity: string, + requestId: string, + method: string, + payload: string, + responseTimeout: number, + remoteClientProtocol: number, + ) { + if (remoteClientProtocol >= CLIENT_PROTOCOL_DATA_STREAM_RPC) { + await this.outgoingDataStreamManager.sendText(payload, { + topic: RPC_REQUEST_DATA_STREAM_TOPIC, + destinationIdentities: [destinationIdentity], + attributes: { + [RpcRequestAttrs.RPC_REQUEST_ID]: requestId, + [RpcRequestAttrs.RPC_REQUEST_METHOD]: method, + [RpcRequestAttrs.RPC_REQUEST_RESPONSE_TIMEOUT_MS]: `${responseTimeout}`, + [RpcRequestAttrs.RPC_REQUEST_VERSION]: `${RPC_VERSION_V2}`, + }, + }); + return; + } + + this.emit('sendDataPacket', { + packet: new DataPacket({ + destinationIdentities: [destinationIdentity], + kind: DataPacket_Kind.RELIABLE, + value: { + case: 'rpcRequest', + value: new RpcRequest({ + id: requestId, + method, + payload, + responseTimeoutMs: responseTimeout, + version: RPC_VERSION_V1, + }), + }, + }), + }); + } + + async handleIncomingDataStream( + reader: TextStreamReader, + senderIdentity: Participant['identity'], + attributes: Record, + ) { + const associatedRequestId = attributes[RpcRequestAttrs.RPC_REQUEST_ID]; + if (!associatedRequestId) { + this.log.warn(`RPC data stream malformed: ${RpcRequestAttrs.RPC_REQUEST_ID} not set.`); + return; + } + + const pending = this.pendingResponses.get(associatedRequestId); + if (pending && pending.participantIdentity !== senderIdentity) { + this.log.warn( + `RPC response stream for ${associatedRequestId} arrived from unexpected sender ${senderIdentity}, expected ${pending.participantIdentity}. Ignoring.`, + ); + return; + } + + let payload: string; + try { + payload = await reader.readAll(); + } catch (e) { + this.log.warn(`Error reading RPC response payload: ${e}`); + this.handleIncomingRpcResponseFailure( + associatedRequestId, + RpcError.builtIn('APPLICATION_ERROR', 'Error reading RPC response payload', {cause: e}), + ); + return; + } + + this.handleIncomingRpcResponseSuccess(associatedRequestId, payload); + } + + handleIncomingRpcResponseSuccess(requestId: string, payload: string) { + const handler = this.pendingResponses.get(requestId); + if (handler) { + handler.completionFuture.resolve?.(payload); + this.pendingResponses.delete(requestId); + } else { + this.log.error('Response received for unexpected RPC request', requestId); + } + } + + handleIncomingRpcResponseFailure(requestId: string, error: RpcError) { + const handler = this.pendingResponses.get(requestId); + if (handler) { + handler.completionFuture.reject?.(error); + this.pendingResponses.delete(requestId); + } else { + this.log.error('Response received for unexpected RPC request', requestId); + } + } + + handleIncomingRpcAck(requestId: string) { + const handler = this.pendingAcks.get(requestId); + if (handler) { + handler.resolve(); + this.pendingAcks.delete(requestId); + } else { + this.log.error(`Ack received for unexpected RPC request: ${requestId}`); + } + } + + handleParticipantDisconnected(participantIdentity: string) { + for (const [id, {participantIdentity: pendingIdentity}] of this.pendingAcks) { + if (pendingIdentity === participantIdentity) { + this.pendingAcks.delete(id); + } + } + + for (const [id, {participantIdentity: pendingIdentity, completionFuture}] of this.pendingResponses) { + if (pendingIdentity === participantIdentity) { + completionFuture.reject?.(RpcError.builtIn('RECIPIENT_DISCONNECTED')); + this.pendingResponses.delete(id); + } + } + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/rpc/client/events.ts b/fluxer_app/pkgs/livekit-client/src/room/rpc/client/events.ts new file mode 100644 index 000000000..cd375646e --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/rpc/client/events.ts @@ -0,0 +1,12 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import type {DataPacket} from '@livekit/protocol'; + +export type EventSendDataPacket = { + packet: DataPacket; +}; + +export type RpcClientManagerCallbacks = { + sendDataPacket: (event: EventSendDataPacket) => void; +}; diff --git a/fluxer_app/pkgs/livekit-client/src/room/rpc/index.ts b/fluxer_app/pkgs/livekit-client/src/room/rpc/index.ts new file mode 100644 index 000000000..6965a46d8 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/rpc/index.ts @@ -0,0 +1,18 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 + +export type {RpcClientManagerCallbacks} from './client/events.ts'; +export {default as RpcClientManager} from './client/RpcClientManager.ts'; +export type {RpcServerManagerCallbacks} from './server/events.ts'; +export {default as RpcServerManager} from './server/RpcServerManager.ts'; +export { + byteLength, + type PerformRpcParams, + RPC_REQUEST_DATA_STREAM_TOPIC, + RPC_RESPONSE_DATA_STREAM_TOPIC, + RpcError, + type RpcInvocationData, + RpcRequestAttrs, + truncateBytes, +} from './utils.ts'; diff --git a/fluxer_app/pkgs/livekit-client/src/room/rpc/server/RpcServerManager.ts b/fluxer_app/pkgs/livekit-client/src/room/rpc/server/RpcServerManager.ts new file mode 100644 index 000000000..368dad6ef --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/rpc/server/RpcServerManager.ts @@ -0,0 +1,242 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import {DataPacket, DataPacket_Kind, RpcAck, type RpcRequest, RpcResponse} from '@livekit/protocol'; +import {EventEmitter} from 'events'; +import type TypedEmitter from 'typed-emitter'; +import type {StructuredLogger} from '../../../logger.ts'; +import {CLIENT_PROTOCOL_DATA_STREAM_RPC} from '../../../version.ts'; +import type {TextStreamReader} from '../../data-stream/incoming/StreamReader.ts'; +import type OutgoingDataStreamManager from '../../data-stream/outgoing/OutgoingDataStreamManager.ts'; +import type Participant from '../../participant/Participant.ts'; +import { + byteLength, + MAX_V1_PAYLOAD_BYTES, + RPC_RESPONSE_DATA_STREAM_TOPIC, + RPC_VERSION_V2, + RpcError, + type RpcInvocationData, + RpcRequestAttrs, +} from '../utils.ts'; +import type {RpcServerManagerCallbacks} from './events.ts'; + +export default class RpcServerManager extends (EventEmitter as new () => TypedEmitter) { + private log: StructuredLogger; + + private outgoingDataStreamManager: OutgoingDataStreamManager; + + private getRemoteParticipantClientProtocol: (identity: Participant['identity']) => number; + + private rpcHandlers: Map Promise> = new Map(); + + constructor( + log: StructuredLogger, + outgoingDataStreamManager: OutgoingDataStreamManager, + getRemoteParticipantClientProtocol: (identity: Participant['identity']) => number, + ) { + super(); + this.log = log; + this.outgoingDataStreamManager = outgoingDataStreamManager; + this.getRemoteParticipantClientProtocol = getRemoteParticipantClientProtocol; + } + + registerRpcMethod(method: string, handler: (data: RpcInvocationData) => Promise) { + if (this.rpcHandlers.has(method)) { + throw Error( + `RPC handler already registered for method ${method}, unregisterRpcMethod before trying to register again`, + ); + } + this.rpcHandlers.set(method, handler); + } + + unregisterRpcMethod(method: string) { + this.rpcHandlers.delete(method); + } + + async handleIncomingRpcRequest(callerIdentity: string, rpcRequest: RpcRequest) { + this.publishRpcAck(callerIdentity, rpcRequest.id); + + if (rpcRequest.version !== 1) { + this.publishRpcResponsePacket(callerIdentity, rpcRequest.id, null, RpcError.builtIn('UNSUPPORTED_VERSION')); + return; + } + + const handler = this.rpcHandlers.get(rpcRequest.method); + + if (!handler) { + this.publishRpcResponsePacket(callerIdentity, rpcRequest.id, null, RpcError.builtIn('UNSUPPORTED_METHOD')); + return; + } + + let response: Awaited>; + try { + response = await handler({ + requestId: rpcRequest.id, + callerIdentity, + payload: rpcRequest.payload, + responseTimeout: rpcRequest.responseTimeoutMs, + }); + } catch (error) { + let responseError: RpcError; + if (error instanceof RpcError) { + responseError = error; + } else { + this.log.warn( + `Uncaught error returned by RPC handler for ${rpcRequest.method}. Returning APPLICATION_ERROR instead.`, + error, + ); + responseError = RpcError.builtIn('APPLICATION_ERROR', `Uncaught error: ${(error as Error)?.message ?? error}`, { + cause: error, + }); + } + + this.publishRpcResponsePacket(callerIdentity, rpcRequest.id, null, responseError); + return; + } + + await this.publishRpcResponse(callerIdentity, rpcRequest.id, response ?? ''); + } + + async handleIncomingDataStream( + reader: TextStreamReader, + callerIdentity: Participant['identity'], + dataStreamAttrs: Record, + ) { + const requestId = dataStreamAttrs[RpcRequestAttrs.RPC_REQUEST_ID]; + const method = dataStreamAttrs[RpcRequestAttrs.RPC_REQUEST_METHOD]; + const responseTimeout = parseInt(dataStreamAttrs[RpcRequestAttrs.RPC_REQUEST_RESPONSE_TIMEOUT_MS], 10); + const version = parseInt(dataStreamAttrs[RpcRequestAttrs.RPC_REQUEST_VERSION], 10); + + if (!requestId || !method || Number.isNaN(responseTimeout) || Number.isNaN(version)) { + this.log.warn( + `RPC data stream malformed: ${RpcRequestAttrs.RPC_REQUEST_ID} / ${RpcRequestAttrs.RPC_REQUEST_METHOD} / ${RpcRequestAttrs.RPC_REQUEST_RESPONSE_TIMEOUT_MS} / ${RpcRequestAttrs.RPC_REQUEST_VERSION} not set.`, + ); + this.publishRpcResponsePacket( + callerIdentity, + requestId, + null, + RpcError.builtIn('APPLICATION_ERROR', 'RPC data stream malformed'), + ); + return; + } + + this.publishRpcAck(callerIdentity, requestId); + + if (version !== RPC_VERSION_V2) { + this.publishRpcResponsePacket(callerIdentity, requestId, null, RpcError.builtIn('UNSUPPORTED_VERSION')); + return; + } + + let payload: string; + try { + payload = await reader.readAll(); + } catch (e) { + this.log.warn(`Error reading RPC request payload: ${e}`); + this.publishRpcResponsePacket( + callerIdentity, + requestId, + null, + RpcError.builtIn('APPLICATION_ERROR', 'Error reading RPC request payload', {cause: e}), + ); + return; + } + + const handler = this.rpcHandlers.get(method); + + if (!handler) { + this.publishRpcResponsePacket(callerIdentity, requestId, null, RpcError.builtIn('UNSUPPORTED_METHOD')); + return; + } + + let response: Awaited>; + try { + response = await handler({ + requestId, + callerIdentity, + payload, + responseTimeout, + }); + } catch (error) { + let responseError: RpcError; + if (error instanceof RpcError) { + responseError = error; + } else { + this.log.warn( + `Uncaught error returned by RPC handler for ${method}. Returning APPLICATION_ERROR instead.`, + error, + ); + responseError = RpcError.builtIn('APPLICATION_ERROR'); + } + + this.publishRpcResponsePacket(callerIdentity, requestId, null, responseError); + return; + } + + await this.publishRpcResponse(callerIdentity, requestId, response ?? ''); + } + + private publishRpcAck(destinationIdentity: string, requestId: string) { + this.emit('sendDataPacket', { + packet: new DataPacket({ + destinationIdentities: [destinationIdentity], + kind: DataPacket_Kind.RELIABLE, + value: { + case: 'rpcAck', + value: new RpcAck({ + requestId, + }), + }, + }), + }); + } + + private publishRpcResponsePacket( + destinationIdentity: string, + requestId: string, + payload: string | null, + error: RpcError | null, + ) { + this.emit('sendDataPacket', { + packet: new DataPacket({ + destinationIdentities: [destinationIdentity], + kind: DataPacket_Kind.RELIABLE, + value: { + case: 'rpcResponse', + value: new RpcResponse({ + requestId, + value: error ? {case: 'error', value: error.toProto()} : {case: 'payload', value: payload ?? ''}, + }), + }, + }), + }); + } + + private async publishRpcResponse(destinationIdentity: string, requestId: string, payload: string) { + const callerClientProtocol = this.getRemoteParticipantClientProtocol(destinationIdentity); + + if (callerClientProtocol >= CLIENT_PROTOCOL_DATA_STREAM_RPC) { + await this.outgoingDataStreamManager.sendText(payload, { + topic: RPC_RESPONSE_DATA_STREAM_TOPIC, + destinationIdentities: [destinationIdentity], + attributes: {[RpcRequestAttrs.RPC_REQUEST_ID]: requestId}, + }); + return; + } + + const responseBytes = byteLength(payload); + if (responseBytes > MAX_V1_PAYLOAD_BYTES) { + this.log.warn( + `RPC Response payload too large for request ${requestId}. To send larger responses, consider updating the sending client.`, + ); + this.publishRpcResponsePacket( + destinationIdentity, + requestId, + null, + RpcError.builtIn('RESPONSE_PAYLOAD_TOO_LARGE'), + ); + return; + } + + this.publishRpcResponsePacket(destinationIdentity, requestId, payload, null); + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/rpc/server/events.ts b/fluxer_app/pkgs/livekit-client/src/room/rpc/server/events.ts new file mode 100644 index 000000000..ba5ec335a --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/rpc/server/events.ts @@ -0,0 +1,12 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import type {DataPacket} from '@livekit/protocol'; + +export type EventSendDataPacket = { + packet: DataPacket; +}; + +export type RpcServerManagerCallbacks = { + sendDataPacket: (event: EventSendDataPacket) => void; +}; diff --git a/fluxer_app/pkgs/livekit-client/src/room/rpc.ts b/fluxer_app/pkgs/livekit-client/src/room/rpc/utils.ts similarity index 75% rename from fluxer_app/pkgs/livekit-client/src/room/rpc.ts rename to fluxer_app/pkgs/livekit-client/src/room/rpc/utils.ts index e2ca2512d..7f798c3f5 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/rpc.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/rpc/utils.ts @@ -29,11 +29,17 @@ export class RpcError extends Error { data?: string; - constructor(code: number, message: string, data?: string) { + override cause?: unknown; + + constructor(code: number, message: string, data?: string, options?: {cause?: unknown}) { super(message); this.code = code; this.message = truncateBytes(message, RpcError.MAX_MESSAGE_BYTES); this.data = data ? truncateBytes(data, RpcError.MAX_DATA_BYTES) : undefined; + + if (typeof options?.cause !== 'undefined') { + this.cause = options?.cause; + } } static fromProto(proto: RpcError_Proto) { @@ -78,19 +84,34 @@ export class RpcError extends Error { UNSUPPORTED_VERSION: 'Unsupported RPC version', } as const; - static builtIn(key: keyof typeof RpcError.ErrorCode, data?: string): RpcError { - return new RpcError(RpcError.ErrorCode[key], RpcError.ErrorMessage[key], data); + static builtIn(key: keyof typeof RpcError.ErrorCode, data?: string, options?: {cause?: unknown}): RpcError { + return new RpcError(RpcError.ErrorCode[key], RpcError.ErrorMessage[key], data, options); } } -export const MAX_PAYLOAD_BYTES = 15360; +export const MAX_V1_PAYLOAD_BYTES = 15360; + +export const RPC_REQUEST_DATA_STREAM_TOPIC = 'lk.rpc_request'; + +export const RPC_RESPONSE_DATA_STREAM_TOPIC = 'lk.rpc_response'; + +export enum RpcRequestAttrs { + RPC_REQUEST_ID = 'lk.rpc_request_id', + RPC_REQUEST_METHOD = 'lk.rpc_request_method', + RPC_REQUEST_RESPONSE_TIMEOUT_MS = 'lk.rpc_request_response_timeout_ms', + RPC_REQUEST_VERSION = 'lk.rpc_request_version', +} + +export const RPC_VERSION_V1 = 1; + +export const RPC_VERSION_V2 = 2; export function byteLength(str: string): number { const encoder = new TextEncoder(); return encoder.encode(str).length; } -function truncateBytes(str: string, maxBytes: number): string { +export function truncateBytes(str: string, maxBytes: number): string { if (byteLength(str) <= maxBytes) { return str; } diff --git a/fluxer_app/pkgs/livekit-client/src/room/statsSummary.ts b/fluxer_app/pkgs/livekit-client/src/room/statsSummary.ts new file mode 100644 index 000000000..f31ad8691 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/statsSummary.ts @@ -0,0 +1,162 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +type Summary = Record; + +function compact(summary: T): Summary { + const compacted: Summary = {}; + for (const [key, value] of Object.entries(summary)) { + if (value !== undefined) { + compacted[key] = value; + } + } + return compacted; +} + +function resolution(width?: number, height?: number): string | undefined { + return width && height ? `${width}x${height}` : undefined; +} + +function round(seconds: number): number { + return Math.round(seconds * 10_000) / 10_000; +} + +function jitterBuffer(stat: Summary): number | undefined { + const delay = stat.jitterBufferDelay as number | undefined; + const emitted = stat.jitterBufferEmittedCount as number | undefined; + return delay !== undefined && emitted ? round(delay / emitted) : undefined; +} + +function playoutDelay(stat: Summary, playout?: Summary): number | undefined { + if (stat.playoutDelay !== undefined) { + return round(stat.playoutDelay as number); + } + const total = playout?.totalPlayoutDelay as number | undefined; + const samples = playout?.totalSamplesCount as number | undefined; + return total !== undefined && samples ? round(total / samples) : undefined; +} + +export function summarizeStatsReport(report: RTCStatsReport) { + const byId = new Map(); + const candidatePairs: Array = []; + const inbound: Array = []; + const outbound: Array = []; + let transport: Summary | undefined; + + report.forEach((stat) => byId.set(stat.id, stat)); + + const codecOf = (stat: Summary) => (stat.codecId ? byId.get(stat.codecId as string)?.mimeType : undefined); + const relatedOf = (stat: Summary, key: 'remoteId' | 'mediaSourceId' | 'playoutId') => + stat[key] ? byId.get(stat[key] as string) : undefined; + + report.forEach((stat) => { + switch (stat.type) { + case 'inbound-rtp': { + const playout = relatedOf(stat, 'playoutId'); + inbound.push( + compact({ + kind: stat.kind, + ssrc: stat.ssrc, + mid: stat.mid, + trackId: stat.trackIdentifier, + codec: codecOf(stat), + decoder: stat.decoderImplementation, + resolution: resolution(stat.frameWidth, stat.frameHeight), + fps: stat.framesPerSecond, + bytesReceived: stat.bytesReceived, + packetsReceived: stat.packetsReceived, + packetsLost: stat.packetsLost, + packetsDiscarded: stat.packetsDiscarded, + framesReceived: stat.framesReceived, + framesDecoded: stat.framesDecoded, + framesDropped: stat.framesDropped, + keyFramesDecoded: stat.keyFramesDecoded, + freezeCount: stat.freezeCount, + totalFreezesDuration: stat.totalFreezesDuration, + pauseCount: stat.pauseCount, + nackCount: stat.nackCount, + pliCount: stat.pliCount, + firCount: stat.firCount, + jitter: stat.jitter, + jitterBuffer: jitterBuffer(stat), + playoutDelay: playoutDelay(stat, playout), + audioLevel: stat.audioLevel, + totalSamplesReceived: stat.totalSamplesReceived, + concealedSamples: stat.concealedSamples, + }), + ); + break; + } + case 'outbound-rtp': { + const remote = relatedOf(stat, 'remoteId'); + const source = relatedOf(stat, 'mediaSourceId'); + outbound.push( + compact({ + kind: stat.kind, + ssrc: stat.ssrc, + mid: stat.mid, + rid: stat.rid, + trackId: source?.trackIdentifier, + active: stat.active, + codec: codecOf(stat), + encoder: stat.encoderImplementation, + resolution: resolution(stat.frameWidth, stat.frameHeight), + fps: stat.framesPerSecond, + captureResolution: resolution(source?.width as number | undefined, source?.height as number | undefined), + captureFps: source?.framesPerSecond, + audioLevel: source?.audioLevel, + targetBitrate: stat.targetBitrate, + bytesSent: stat.bytesSent, + packetsSent: stat.packetsSent, + retransmittedPacketsSent: stat.retransmittedPacketsSent, + framesEncoded: stat.framesEncoded, + keyFramesEncoded: stat.keyFramesEncoded, + limitedBy: stat.qualityLimitationReason === 'none' ? undefined : stat.qualityLimitationReason, + nackCount: stat.nackCount, + pliCount: stat.pliCount, + firCount: stat.firCount, + remotePacketsLost: remote?.packetsLost, + remoteFractionLost: remote?.fractionLost, + remoteJitter: remote?.jitter, + remoteRoundTripTime: remote?.roundTripTime, + }), + ); + break; + } + case 'transport': + transport = stat; + break; + case 'candidate-pair': + candidatePairs.push(stat); + break; + default: + } + }); + + const selectedPairId = transport?.selectedCandidatePairId as string | undefined; + const pair = + (selectedPairId ? byId.get(selectedPairId) : undefined) ?? + candidatePairs.find((candidate) => candidate.selected) ?? + candidatePairs.find((candidate) => candidate.nominated); + const local = pair?.localCandidateId ? byId.get(pair.localCandidateId as string) : undefined; + const remote = pair?.remoteCandidateId ? byId.get(pair.remoteCandidateId as string) : undefined; + + const connection = compact({ + ice: transport?.iceState, + dtls: transport?.dtlsState, + route: local && remote ? `${local.candidateType}/${local.protocol} -> ${remote.candidateType}` : undefined, + network: local?.networkType, + currentRoundTripTime: pair?.currentRoundTripTime, + availableOutgoingBitrate: pair?.availableOutgoingBitrate, + availableIncomingBitrate: pair?.availableIncomingBitrate, + bytesSent: pair?.bytesSent, + bytesReceived: pair?.bytesReceived, + candidatePairChanges: transport?.selectedCandidatePairChanges, + }); + + return { + connection: Object.keys(connection).length > 0 ? connection : undefined, + outbound: outbound.length > 0 ? outbound : undefined, + inbound: inbound.length > 0 ? inbound : undefined, + }; +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/token-source/TokenSource.ts b/fluxer_app/pkgs/livekit-client/src/room/token-source/TokenSource.ts index f4d2cbe08..111b1d82d 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/token-source/TokenSource.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/token-source/TokenSource.ts @@ -17,6 +17,12 @@ abstract class TokenSourceCached extends TokenSourceConfigurable { private cachedResponse: TokenSourceResponse | null = null; private fetchMutex = new Mutex(); + private isSameAsCachedFetchOptions(options: TokenSourceFetchOptions) { + if (!this.cachedFetchOptions) { + return false; + } + return areTokenSourceFetchOptionsEqual(options, this.cachedFetchOptions); + } private shouldReturnCachedValueFromFetch(fetchOptions: TokenSourceFetchOptions) { if (!this.cachedResponse) { @@ -25,7 +31,10 @@ abstract class TokenSourceCached extends TokenSourceConfigurable { if (!isResponseTokenValid(this.cachedResponse)) { return false; } - return this.cachedFetchOptions !== null && areTokenSourceFetchOptionsEqual(this.cachedFetchOptions, fetchOptions); + if (!this.isSameAsCachedFetchOptions(fetchOptions)) { + return false; + } + return true; } getCachedResponseJwtPayload() { @@ -35,9 +44,12 @@ abstract class TokenSourceCached extends TokenSourceConfigurable { return decodeTokenPayload(this.cachedResponse.participantToken); } - async fetch(options: TokenSourceFetchOptions): Promise { + async fetch(options: TokenSourceFetchOptions, force?: boolean): Promise { const unlock = await this.fetchMutex.lock(); try { + if (force) { + this.cachedResponse = null; + } if (this.shouldReturnCachedValueFromFetch(options)) { return this.cachedResponse!.toJson() as TokenSourceResponseObject; } @@ -135,6 +147,14 @@ class TokenSourceEndpoint extends TokenSourceCached { request.roomConfig.agents[0].metadata = options.agentMetadata!; break; + case 'deployment': + request.roomConfig = request.roomConfig ?? new RoomConfiguration(); + if (request.roomConfig.agents.length === 0) { + request.roomConfig.agents.push(new RoomAgentDispatch()); + } + request.roomConfig.agents[0].deployment = options.deployment!; + break; + default: { const exhaustiveCheckedKey: never = key; throw new Error(`Options key ${exhaustiveCheckedKey} not being included in forming request!`); @@ -173,30 +193,34 @@ class TokenSourceEndpoint extends TokenSourceCached { } } -export type SandboxTokenServerOptions = { +export type DevelopmentTokenServerOptions = { baseUrl?: string; }; - -class TokenSourceSandboxTokenServer extends TokenSourceEndpoint { - constructor(sandboxId: string, options: SandboxTokenServerOptions) { +class TokenSourceDevelopmentTokenServer extends TokenSourceEndpoint { + constructor(tokenServerId: string, options: DevelopmentTokenServerOptions) { const {baseUrl = 'https://cloud-api.livekit.io', ...rest} = options; super(`${baseUrl}/api/v2/sandbox/connection-details`, { ...rest, headers: { - 'X-Sandbox-ID': sandboxId, + 'X-Sandbox-ID': tokenServerId, }, }); } } +export type SandboxTokenServerOptions = DevelopmentTokenServerOptions; + +class TokenSourceSandboxTokenServer extends TokenSourceDevelopmentTokenServer {} + export { - type TokenSourceLiteral, - type TokenSourceCustom, - type TokenSourceEndpoint, - type TokenSourceSandboxTokenServer, - decodeTokenPayload, areTokenSourceFetchOptionsEqual, + decodeTokenPayload, + type TokenSourceCustom, + type TokenSourceDevelopmentTokenServer, + type TokenSourceEndpoint, + type TokenSourceLiteral, + type TokenSourceSandboxTokenServer, }; export const TokenSource = { @@ -215,4 +239,8 @@ export const TokenSource = { sandboxTokenServer(sandboxId: string, options: SandboxTokenServerOptions = {}) { return new TokenSourceSandboxTokenServer(sandboxId, options); }, + + developmentTokenServer(tokenServerId: string, options: DevelopmentTokenServerOptions = {}) { + return new TokenSourceDevelopmentTokenServer(tokenServerId, options); + }, }; diff --git a/fluxer_app/pkgs/livekit-client/src/room/token-source/types.ts b/fluxer_app/pkgs/livekit-client/src/room/token-source/types.ts index b8144e54b..16a24a8b8 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/token-source/types.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/token-source/types.ts @@ -67,10 +67,12 @@ export type TokenSourceFetchOptions = { agentName?: string; agentMetadata?: string; + deployment?: string; }; export abstract class TokenSourceConfigurable { abstract fetch(options: TokenSourceFetchOptions): Promise; + abstract fetch(options: TokenSourceFetchOptions, force?: boolean): Promise; } export type TokenSourceBase = TokenSourceFixed | TokenSourceConfigurable; diff --git a/fluxer_app/pkgs/livekit-client/src/room/token-source/utils.ts b/fluxer_app/pkgs/livekit-client/src/room/token-source/utils.ts index 0239a221d..8b561d9e1 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/token-source/utils.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/token-source/utils.ts @@ -11,19 +11,24 @@ const ONE_MINUTE_IN_MILLISECONDS = 60 * ONE_SECOND_IN_MILLISECONDS; export function isResponseTokenValid(response: TokenSourceResponse) { const jwtPayload = decodeTokenPayload(response.participantToken); - if (!jwtPayload?.nbf || !jwtPayload?.exp) { - return true; + if (!jwtPayload?.exp) { + return false; } const now = new Date(); - const nbfInMilliseconds = jwtPayload.nbf * ONE_SECOND_IN_MILLISECONDS; - const nbfDate = new Date(nbfInMilliseconds); + if (jwtPayload.nbf) { + const nbfInMilliseconds = jwtPayload.nbf * ONE_SECOND_IN_MILLISECONDS; + const nbfDate = new Date(nbfInMilliseconds); + if (nbfDate > now) { + return false; + } + } const expInMilliseconds = jwtPayload.exp * ONE_SECOND_IN_MILLISECONDS; const expDate = new Date(expInMilliseconds - ONE_MINUTE_IN_MILLISECONDS); - return nbfDate <= now && expDate > now; + return expDate > now; } export function decodeTokenPayload(token: string) { @@ -34,7 +39,9 @@ export function decodeTokenPayload(token: string) { const mappedPayload: TokenPayload = { ...rest, roomConfig: payload.roomConfig - ? (RoomConfiguration.fromJson(toJsonObject(payload.roomConfig)) as RoomConfigurationObject) + ? (RoomConfiguration.fromJson(toJsonObject(payload.roomConfig), { + ignoreUnknownFields: true, + }) as RoomConfigurationObject) : undefined, }; @@ -60,6 +67,7 @@ export function areTokenSourceFetchOptionsEqual(a: TokenSourceFetchOptions, b: T case 'participantAttributes': case 'agentName': case 'agentMetadata': + case 'deployment': if (a[key] !== b[key]) { return false; } diff --git a/fluxer_app/pkgs/livekit-client/src/room/track/FrameMetadataExtractor.ts b/fluxer_app/pkgs/livekit-client/src/room/track/FrameMetadataExtractor.ts new file mode 100644 index 000000000..647ad1253 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/room/track/FrameMetadataExtractor.ts @@ -0,0 +1,35 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +import type {FrameMetadata} from '../../frameMetadata/types.ts'; + +const MAX_ENTRIES = 300; + +export class FrameMetadataExtractor { + private metadataMap = new Map(); + + private activeSsrc: number = 0; + + storeMetadata(rtpTimestamp: number, ssrc: number, metadata: FrameMetadata) { + if (this.activeSsrc !== 0 && this.activeSsrc !== ssrc) { + this.metadataMap.clear(); + } + this.activeSsrc = ssrc; + + while (this.metadataMap.size >= MAX_ENTRIES) { + const evicted = this.metadataMap.keys().next().value!; + this.metadataMap.delete(evicted); + } + + this.metadataMap.set(rtpTimestamp, metadata); + } + + lookupMetadata(rtpTimestamp: number): FrameMetadata | undefined { + return this.metadataMap.get(rtpTimestamp); + } + + dispose() { + this.metadataMap.clear(); + this.activeSsrc = 0; + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/room/track/LocalAudioTrack.ts b/fluxer_app/pkgs/livekit-client/src/room/track/LocalAudioTrack.ts index 4bb9d9fd0..f583435f8 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/track/LocalAudioTrack.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/track/LocalAudioTrack.ts @@ -71,7 +71,7 @@ export default class LocalAudioTrack extends LocalTrack { !this.isUserProvided ) { this.log.debug('reacquiring mic track', this.logContext); - await this.restartTrack(); + await this.restart(undefined, true); } await super.unmute(); @@ -91,9 +91,23 @@ export default class LocalAudioTrack extends LocalTrack { } await this.restart(constraints); } - - protected override async restart(constraints?: MediaTrackConstraints): Promise { - const track = await super.restart(constraints); + async applyConstraints( + constraints: Pick< + AudioCaptureOptions, + 'autoGainControl' | 'noiseSuppression' | 'echoCancellation' | 'voiceIsolation' + >, + ): Promise { + const unlock = await this.trackChangeLock.lock(); + try { + const res = await this._mediaStreamTrack.applyConstraints(constraints); + this._constraints = {...this._constraints, ...constraints}; + return res; + } finally { + unlock(); + } + } + protected override async restart(constraints?: MediaTrackConstraints, isUnmuting?: boolean): Promise { + const track = await super.restart(constraints, isUnmuting); this.checkForSilence(); return track; } @@ -157,6 +171,7 @@ export default class LocalAudioTrack extends LocalTrack { kind: this.kind, track: this._mediaStreamTrack, audioContext: this.audioContext as AudioContext, + localTrack: this, }; this.log.debug(`setting up audio processor ${processor.name}`, this.logContext); try { @@ -244,12 +259,16 @@ export default class LocalAudioTrack extends LocalTrack { type: 'audio', streamId: v.id, packetsSent: v.packetsSent, - packetsLost: v.packetsLost, bytesSent: v.bytesSent, timestamp: v.timestamp, - roundTripTime: v.roundTripTime, - jitter: v.jitter, }; + + const remote = stats.get(v.remoteId) as (RTCReceivedRtpStreamStats & {roundTripTime?: number}) | undefined; + if (remote) { + audioStats.packetsLost = remote.packetsLost; + audioStats.jitter = remote.jitter; + audioStats.roundTripTime = remote.roundTripTime; + } } }); diff --git a/fluxer_app/pkgs/livekit-client/src/room/track/LocalTrack.ts b/fluxer_app/pkgs/livekit-client/src/room/track/LocalTrack.ts index 2217a1fdb..47b68f539 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/track/LocalTrack.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/track/LocalTrack.ts @@ -2,9 +2,9 @@ // // SPDX-License-Identifier: Apache-2.0 import {Mutex} from '@livekit/mutex'; -import {debounce} from 'ts-debounce'; import {getBrowser} from '../../utils/browserParser.ts'; import DeviceManager from '../DeviceManager.ts'; +import {debounce} from '../debounce.ts'; import {DeviceUnsupportedError, TrackInvalidError} from '../errors.ts'; import {TrackEvent} from '../events.ts'; import CriticalTimers, {type TimerHandle} from '../timers.ts'; @@ -23,6 +23,7 @@ interface SetMediaStreamTrackOptions { force?: boolean; deferEndedListener?: boolean; preservePreviousTrack: boolean; + isUnmuting?: boolean; } export default abstract class LocalTrack extends Track { @@ -195,6 +196,7 @@ export default abstract class LocalTrack { attachToElement(processedTrack ?? newTrack, el); @@ -368,7 +371,6 @@ export default abstract class LocalTrack {} + async runWithTrackChangeLock(operation: () => Promise): Promise { const unlock = await this.trackChangeLock.lock(); try { @@ -413,7 +419,6 @@ export default abstract class LocalTrack { @@ -449,7 +456,7 @@ export default abstract class LocalTrack, keepElement = true): Promise { @@ -826,10 +836,11 @@ export default abstract class LocalTrack { private isCpuConstrained: boolean = false; private optimizeForPerformance: boolean = false; - + publishOptions?: TrackPublishOptions; + lastEncodedDimensions?: Track.Dimensions; override get sender(): RTCRtpSender | undefined { return this._sender; } @@ -182,7 +184,7 @@ export default class LocalVideoTrack extends LocalTrack { if (this.source === Track.Source.Camera && !this.isUserProvided) { this.log.debug('reacquiring camera track', this.logContext); - await this.restartTrack(); + await this.restart(undefined, true); } await super.unmute(); return this; @@ -252,6 +254,10 @@ export default class LocalVideoTrack extends LocalTrack { return items; } + private isSvcPublish(codec?: string): boolean { + return isSVCCodec(codec) && !isSVCSimulcast(codec, this.publishOptions); + } + setPublishingQuality(maxQuality: VideoQuality) { const qualities: Array = []; for (let q = VideoQuality.LOW; q <= VideoQuality.HIGH; q += 1) { @@ -263,7 +269,7 @@ export default class LocalVideoTrack extends LocalTrack { ); } this.log.debug(`setting publishing quality. max quality ${maxQuality}`, this.logContext); - this.setPublishingLayers(isSVCCodec(this.codec), qualities); + this.setPublishingLayers(this.isSvcPublish(this.codec), qualities); } async restartTrack(options?: VideoCaptureOptions) { @@ -279,6 +285,7 @@ export default class LocalVideoTrack extends LocalTrack { this.isCpuConstrained = false; const processedTrack = this.processor?.processedTrack; + for await (const sc of this.simulcastCodecs.values()) { if (sc.sender && sc.sender.transport?.state !== 'closed') { const previousTrack = sc.mediaStreamTrack; @@ -293,6 +300,102 @@ export default class LocalVideoTrack extends LocalTrack { } } } + + await this.onSenderTrackSwapped(); + } + + protected override async onSenderTrackSwapped(): Promise { + await this.refreshSenderEncodings(); + } + + private async refreshSenderEncodings() { + if (!this.sender || !this.publishOptions || this.optimizeForPerformance) { + return; + } + const unlock = await this.senderLock.lock(); + try { + let dims: Track.Dimensions; + try { + dims = await this.waitForDimensions(); + } catch (e) { + this.log.warn('could not determine new track dimensions, skipping encoding recompute', { + ...this.logContext, + error: e, + }); + return; + } + + if ( + this.lastEncodedDimensions && + this.lastEncodedDimensions.width === dims.width && + this.lastEncodedDimensions.height === dims.height + ) { + return; + } + + const isScreenShare = this.source === Track.Source.ScreenShare; + const newEncodings = computeVideoEncodings(isScreenShare, dims.width, dims.height, { + ...this.publishOptions, + }); + + await this.applyEncodingsToSender(this.sender, newEncodings); + this.encodings = newEncodings; + this.lastEncodedDimensions = dims; + + for (const [codec, sc] of this.simulcastCodecs) { + if (!sc.sender || sc.sender.transport?.state === 'closed') { + continue; + } + if (!isBackupVideoCodec(codec)) { + continue; + } + const backupOpts: TrackPublishOptions = {...this.publishOptions}; + const backupEncodings = computeTrackBackupEncodings(this, codec, backupOpts); + if (!backupEncodings) { + continue; + } + await this.applyEncodingsToSender(sc.sender, backupEncodings); + sc.encodings = backupEncodings; + } + } catch (e) { + this.log.warn('failed to apply recomputed encodings', { + ...this.logContext, + error: e, + }); + } finally { + unlock(); + } + } + + private async applyEncodingsToSender(sender: RTCRtpSender, encodings: Array) { + const params = sender.getParameters(); + if (!params.encodings || params.encodings.length !== encodings.length) { + return; + } + params.encodings.forEach((existing, idx) => { + if (existing.active === false) { + return; + } + const next = encodings[idx]; + if (next.scaleResolutionDownBy !== undefined) { + existing.scaleResolutionDownBy = next.scaleResolutionDownBy; + } + if (next.maxBitrate !== undefined) { + existing.maxBitrate = next.maxBitrate; + } + if (next.maxFramerate !== undefined) { + existing.maxFramerate = next.maxFramerate; + } + if (next.priority !== undefined) { + existing.priority = next.priority; + existing.networkPriority = next.priority; + } + }); + this.log.debug('updating sender encodings after track restart', { + ...this.logContext, + encodings: params.encodings, + }); + await sender.setParameters(params); } override async setProcessor(processor: TrackProcessor, showProcessedStreamLocally = true) { @@ -363,15 +466,23 @@ export default class LocalVideoTrack extends LocalTrack { async setDegradationPreference(preference: RTCDegradationPreference) { this.degradationPreference = preference; - if (this.sender) { - try { - this.log.debug(`setting degradationPreference to ${preference}`, this.logContext); - const params = this.sender.getParameters(); - params.degradationPreference = preference; - await this.sender.setParameters(params); - } catch (e: unknown) { - this.log.warn(`failed to set degradationPreference`, {error: e, ...this.logContext}); - } + await this.applyDegradationPreference(this.sender); + for (const sc of this.simulcastCodecs.values()) { + await this.applyDegradationPreference(sc.sender); + } + } + + private async applyDegradationPreference(sender?: RTCRtpSender) { + if (!sender) { + return; + } + try { + this.log.debug(`setting degradationPreference to ${this.degradationPreference}`, this.logContext); + const params = sender.getParameters(); + params.degradationPreference = this.degradationPreference; + await sender.setParameters(params); + } catch (e: unknown) { + this.log.warn(`failed to set degradationPreference`, {error: e, ...this.logContext}); } } @@ -390,7 +501,7 @@ export default class LocalVideoTrack extends LocalTrack { return simulcastCodecInfo; } - setSimulcastTrackSender(codec: VideoCodec, sender: RTCRtpSender) { + async setSimulcastTrackSender(codec: VideoCodec, sender: RTCRtpSender) { const simulcastCodecInfo = this.simulcastCodecs.get(codec); if (!simulcastCodecInfo) { return; @@ -402,6 +513,7 @@ export default class LocalVideoTrack extends LocalTrack { this.log.warn('failed to route processed track to secondary sender', {...this.logContext, error}); }); } + await this.applyDegradationPreference(sender); setTimeout(() => { if (this.subscribedCodecs) { @@ -417,7 +529,7 @@ export default class LocalVideoTrack extends LocalTrack { currentCodec: this.codec, }); if (!this.codec && codecs.length > 0) { - await this.setPublishingLayers(isSVCCodec(codecs[0].codec), codecs[0].qualities); + await this.setPublishingLayers(this.isSvcPublish(codecs[0].codec), codecs[0].qualities); return []; } @@ -427,14 +539,14 @@ export default class LocalVideoTrack extends LocalTrack { const newCodecs: Array = []; for await (const codec of codecs) { if (!this.codec || this.codec === codec.codec) { - await this.setPublishingLayers(isSVCCodec(codec.codec), codec.qualities); + await this.setPublishingLayers(this.isSvcPublish(codec.codec), codec.qualities); } else { const simulcastCodecInfo = this.simulcastCodecs.get(codec.codec as VideoCodec); this.log.debug(`try setPublishingCodec for ${codec.codec}`, { ...this.logContext, simulcastCodecInfo, }); - if (!simulcastCodecInfo || !simulcastCodecInfo.sender) { + if (!simulcastCodecInfo?.sender) { for (const q of codec.qualities) { if (q.enabled) { newCodecs.push(codec.codec as VideoCodec); @@ -448,7 +560,7 @@ export default class LocalVideoTrack extends LocalTrack { simulcastCodecInfo.encodings!, codec.qualities, this.senderLock, - isSVCCodec(codec.codec), + this.isSvcPublish(codec.codec), this.log, this.logContext, ); diff --git a/fluxer_app/pkgs/livekit-client/src/room/track/RemoteAudioTrack.ts b/fluxer_app/pkgs/livekit-client/src/room/track/RemoteAudioTrack.ts index bf391d537..a448384fe 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/track/RemoteAudioTrack.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/track/RemoteAudioTrack.ts @@ -209,7 +209,7 @@ export default class RemoteAudioTrack extends RemoteTrack { }; async getReceiverStats(): Promise { - if (!this.receiver || !this.receiver.getStats) { + if (!this.receiver?.getStats) { return; } diff --git a/fluxer_app/pkgs/livekit-client/src/room/track/RemoteTrack.ts b/fluxer_app/pkgs/livekit-client/src/room/track/RemoteTrack.ts index 761cc89a4..1389befe6 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/track/RemoteTrack.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/track/RemoteTrack.ts @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2024 LiveKit, Inc. // // SPDX-License-Identifier: Apache-2.0 -import {EventEmitter} from 'events'; +import type {EventEmitter} from 'events'; import {TrackEvent} from '../events.ts'; import {monitorFrequency} from '../stats.ts'; import type {LoggerOptions} from '../types.ts'; @@ -11,8 +11,6 @@ import {supportsSynchronizationSources} from './utils.ts'; export default abstract class RemoteTrack extends Track { receiver: RTCRtpReceiver | undefined; - private _monitorStarted: boolean = false; - constructor( mediaTrack: MediaStreamTrack, sid: string, @@ -24,17 +22,6 @@ export default abstract class RemoteTrack { - if ( - event === TrackEvent.TimeSyncUpdate && - this._monitorStarted && - this.timeSyncHandle === undefined && - supportsSynchronizationSources() - ) { - this.registerTimeSyncUpdate(); - } - }); } get isLocal() { @@ -71,7 +58,6 @@ export default abstract class RemoteTrack this.runMonitor(this.monitorReceiver), monitorFrequency); } - if (supportsSynchronizationSources() && this.listenerCount(TrackEvent.TimeSyncUpdate) > 0) { + if (supportsSynchronizationSources()) { this.registerTimeSyncUpdate(); } } + override stopMonitor() { + super.stopMonitor(); + (this as unknown as EventEmitter).off('newListener', this.onTimeSyncListenerAdded); + } + protected abstract monitorReceiver(): void; - registerTimeSyncUpdate() { - if (this.timeSyncHandle !== undefined) { + private timeSyncLoop = () => { + if (this.listenerCount(TrackEvent.TimeSyncUpdate) === 0) { + this.timeSyncHandle = undefined; return; } - const loop = () => { - this.timeSyncHandle = requestAnimationFrame(() => loop()); - const sources = this.receiver?.getSynchronizationSources()[0]; - if (sources) { - const {timestamp, rtpTimestamp} = sources; - if (rtpTimestamp && this.rtpTimestamp !== rtpTimestamp) { - this.emit(TrackEvent.TimeSyncUpdate, {timestamp, rtpTimestamp}); - this.rtpTimestamp = rtpTimestamp; - } + this.timeSyncHandle = requestAnimationFrame(this.timeSyncLoop); + const sources = this.receiver?.getSynchronizationSources()[0]; + if (sources) { + const {timestamp, rtpTimestamp} = sources; + if (rtpTimestamp && this.rtpTimestamp !== rtpTimestamp) { + this.emit(TrackEvent.TimeSyncUpdate, {timestamp, rtpTimestamp}); + this.rtpTimestamp = rtpTimestamp; } - }; - loop(); + } + }; + + private onTimeSyncListenerAdded = (event: string) => { + if (event === TrackEvent.TimeSyncUpdate && this.timeSyncHandle === undefined) { + this.timeSyncHandle = requestAnimationFrame(this.timeSyncLoop); + } + }; + + registerTimeSyncUpdate() { + const emitter = this as unknown as EventEmitter; + emitter.off('newListener', this.onTimeSyncListenerAdded); + emitter.on('newListener', this.onTimeSyncListenerAdded); + if (this.timeSyncHandle === undefined) { + this.timeSyncLoop(); + } } } diff --git a/fluxer_app/pkgs/livekit-client/src/room/track/RemoteVideoTrack.ts b/fluxer_app/pkgs/livekit-client/src/room/track/RemoteVideoTrack.ts index 5feb8d02e..7d2817004 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/track/RemoteVideoTrack.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/track/RemoteVideoTrack.ts @@ -2,8 +2,8 @@ // // SPDX-License-Identifier: Apache-2.0 /// - -import {debounce} from 'ts-debounce'; +import type {FrameMetadata} from '../../frameMetadata/types.ts'; +import {debounce} from '../debounce.ts'; import {TrackEvent} from '../events.ts'; import type {VideoReceiverStats} from '../stats.ts'; import {computeBitrate} from '../stats.ts'; @@ -11,6 +11,7 @@ import CriticalTimers from '../timers.ts'; import type {LoggerOptions} from '../types.ts'; import type {ObservableMediaElement} from '../utils.ts'; import {getDevicePixelRatio, getIntersectionObserver, getResizeObserver, isWeb} from '../utils.ts'; +import type {FrameMetadataExtractor} from './FrameMetadataExtractor.ts'; import RemoteTrack from './RemoteTrack.ts'; import {attachToElement, detachTrack, Track} from './Track.ts'; import type {AdaptiveStreamSettings} from './types.ts'; @@ -36,6 +37,8 @@ export default class RemoteVideoTrack extends RemoteTrack { private lastDimensions?: Track.Dimensions; + frameMetadataExtractor?: FrameMetadataExtractor; + constructor( mediaTrack: MediaStreamTrack, sid: string, @@ -51,6 +54,10 @@ export default class RemoteVideoTrack extends RemoteTrack { return this.adaptiveStreamSettings !== undefined; } + lookupFrameMetadata({rtpTimestamp}: {rtpTimestamp: number}): FrameMetadata | undefined { + return this.frameMetadataExtractor?.lookupMetadata(rtpTimestamp); + } + override setStreamState(value: Track.StreamState) { super.setStreamState(value); this.log.debug('setStreamState', value); @@ -121,16 +128,14 @@ export default class RemoteVideoTrack extends RemoteTrack { this.updateVisibility(); this.debouncedHandleResize(); } - override detach(): Array; override detach(element: HTMLMediaElement): HTMLMediaElement; override detach(element?: HTMLMediaElement): HTMLMediaElement | Array { - let detachedElements: Array = []; if (element) { this.stopObservingElement(element); return super.detach(element); } - detachedElements = super.detach(); + const detachedElements = super.detach(); for (const e of detachedElements) { this.stopObservingElement(e); @@ -163,7 +168,7 @@ export default class RemoteVideoTrack extends RemoteTrack { }; async getReceiverStats(): Promise { - if (!this.receiver || !this.receiver.getStats) { + if (!this.receiver?.getStats) { return; } @@ -366,8 +371,12 @@ class HTMLElementInfo implements ElementInfo { private onEnterPiP = () => { window.documentPictureInPicture?.window?.addEventListener('pagehide', this.onLeavePiP); - this.isPiP = isElementInPiP(this.element); - this.handleVisibilityChanged?.(); + queueMicrotask(() => { + requestAnimationFrame(() => { + this.isPiP = isElementInPiP(this.element); + this.handleVisibilityChanged?.(); + }); + }); }; private onLeavePiP = () => { diff --git a/fluxer_app/pkgs/livekit-client/src/room/track/Track.ts b/fluxer_app/pkgs/livekit-client/src/room/track/Track.ts index afe14b7c8..19823b58b 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/track/Track.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/track/Track.ts @@ -6,7 +6,9 @@ import {EventEmitter} from 'events'; import type TypedEventEmitter from 'typed-emitter'; import type {SignalClient} from '../../api/SignalClient.ts'; import log, {getLogger, LoggerNames, type StructuredLogger} from '../../logger.ts'; +import type {NonSharedUint8Array} from '../../type-polyfills/non-shared-typed-arrays.ts'; import {TrackEvent} from '../events.ts'; +import {summarizeStatsReport} from '../statsSummary.ts'; import CriticalTimers, {type TimerHandle} from '../timers.ts'; import type {LoggerOptions} from '../types.ts'; import {isFireFox, isSafari, isWeb} from '../utils.ts'; @@ -50,6 +52,9 @@ export abstract class Track< } setStreamState(value: Track.StreamState) { + if (this._streamState !== value) { + this.log.debug(`stream state changed: ${this._streamState} -> ${value}`); + } this._streamState = value; } @@ -68,17 +73,16 @@ export abstract class Track< protected timeSyncHandle: number | undefined; protected _currentBitrate: number = 0; - protected monitorInterval?: TimerHandle; - protected monitorInFlight: boolean = false; + private finalStatsLogged = false; protected log: StructuredLogger = log; protected constructor(mediaTrack: MediaStreamTrack, kind: TrackKind, loggerOptions: LoggerOptions = {}) { super(); - this.log = getLogger(loggerOptions.loggerName ?? LoggerNames.Track); this.loggerContextCb = loggerOptions.loggerContextCb; + this.log = getLogger(loggerOptions.loggerName ?? LoggerNames.Track, () => this.logContext); this.setMaxListeners(100); this.kind = kind; @@ -153,9 +157,9 @@ export abstract class Track< if (e.name === 'NotAllowedError') { this.emit(hasAudio ? TrackEvent.AudioPlaybackFailed : TrackEvent.VideoPlaybackFailed, e); } else if (e.name === 'AbortError') { - log.debug(`${hasAudio ? 'audio' : 'video'} playback aborted, likely due to new play request`); + this.log.debug(`${hasAudio ? 'audio' : 'video'} playback aborted, likely due to new play request`); } else { - log.warn(`could not playback ${hasAudio ? 'audio' : 'video'}`, e); + this.log.warn(`could not playback ${hasAudio ? 'audio' : 'video'}`, {error: e}); } if ( hasAudio && @@ -206,6 +210,7 @@ export abstract class Track< } stop() { + this.log.debug('stopping track'); this.stopMonitor(); this._mediaStreamTrack.stop(); } @@ -219,7 +224,6 @@ export abstract class Track< } abstract startMonitor(signalClient?: SignalClient): void; - protected runMonitor(monitor: () => void | Promise): void { if (this.monitorInFlight) return; this.monitorInFlight = true; @@ -229,6 +233,7 @@ export abstract class Track< this.monitorInFlight = false; }); } + abstract getRTCStatsReport(): Promise; stopMonitor() { if (this.monitorInterval) { @@ -236,19 +241,34 @@ export abstract class Track< this.monitorInterval = undefined; } this.monitorInFlight = false; - if (this.timeSyncHandle) { + if (this.timeSyncHandle !== undefined) { cancelAnimationFrame(this.timeSyncHandle); this.timeSyncHandle = undefined; } + this.logFinalStats(); + } + + private logFinalStats() { + if (this.finalStatsLogged) { + return; + } + this.finalStatsLogged = true; + this.getRTCStatsReport() + .then((report) => { + if (report) { + this.log.info('final track stats', summarizeStatsReport(report)); + } + }) + .catch((error) => this.log.debug('could not collect final track stats', {error})); } updateLoggerOptions(loggerOptions: LoggerOptions) { - if (loggerOptions.loggerName) { - this.log = getLogger(loggerOptions.loggerName); - } if (loggerOptions.loggerContextCb) { this.loggerContextCb = loggerOptions.loggerContextCb; } + if (loggerOptions.loggerName) { + this.log = getLogger(loggerOptions.loggerName, () => this.logContext); + } } private recycleElement(element: HTMLMediaElement) { @@ -467,6 +487,6 @@ export type TrackEventCallbacks = { trackProcessorUpdate: TrackEventHandler<[processor?: TrackProcessorEventValue]>; audioTrackFeatureUpdate: TrackEventHandler<[track: unknown, feature: AudioTrackFeature, enabled: boolean]>; timeSyncUpdate: TrackEventHandler<[update: {timestamp: number; rtpTimestamp: number}]>; - preConnectBufferFlushed: TrackEventHandler<[buffer: Array]>; + preConnectBufferFlushed: TrackEventHandler<[buffer: Array]>; cpuConstrained: TrackEventHandler; }; diff --git a/fluxer_app/pkgs/livekit-client/src/room/track/TrackPublication.ts b/fluxer_app/pkgs/livekit-client/src/room/track/TrackPublication.ts index 2e88a7772..0c20bc192 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/track/TrackPublication.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/track/TrackPublication.ts @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2024 LiveKit, Inc. // // SPDX-License-Identifier: Apache-2.0 + import type {SubscriptionError, TrackInfo, UpdateSubscription, UpdateTrackSettings} from '@livekit/protocol'; import {Encryption_Type} from '@livekit/protocol'; import {EventEmitter} from 'events'; diff --git a/fluxer_app/pkgs/livekit-client/src/room/track/create.ts b/fluxer_app/pkgs/livekit-client/src/room/track/create.ts index 8b0298bca..8d6d2cc72 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/track/create.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/track/create.ts @@ -93,10 +93,6 @@ export async function createLocalTracks( return await Promise.all( stream.getTracks().map(async (mediaStreamTrack) => { const isAudio = mediaStreamTrack.kind === 'audio'; - let trackOptions = isAudio ? opts!.audio : opts!.video; - if (typeof trackOptions === 'boolean' || !trackOptions) { - trackOptions = {}; - } let trackConstraints: MediaTrackConstraints | undefined; const conOrBool = isAudio ? constraints.audio : constraints.video; if (typeof conOrBool !== 'boolean') { diff --git a/fluxer_app/pkgs/livekit-client/src/room/track/options.ts b/fluxer_app/pkgs/livekit-client/src/room/track/options.ts index b2360f0e6..f1001bd2b 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/track/options.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/track/options.ts @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2024 LiveKit, Inc. // // SPDX-License-Identifier: Apache-2.0 +import type {FrameMetadataPublishOptions} from '../../frameMetadata/types.ts'; import type {AudioProcessorOptions, TrackProcessor, VideoProcessorOptions} from './processor/types.ts'; import type {Track} from './Track.ts'; @@ -36,6 +37,10 @@ export interface TrackPublishDefaults { stopMicTrackOnMute?: boolean; preConnectBuffer?: boolean; + + frameMetadata?: FrameMetadataPublishOptions; + + packetTrailer?: FrameMetadataPublishOptions; } export interface TrackPublishOptions extends TrackPublishDefaults { @@ -107,6 +112,8 @@ export interface AudioCaptureOptions { voiceIsolation?: ConstrainBoolean; + restrictOwnAudio?: ConstrainBoolean; + sampleRate?: ConstrainULong; sampleSize?: ConstrainULong; diff --git a/fluxer_app/pkgs/livekit-client/src/room/track/processor/types.ts b/fluxer_app/pkgs/livekit-client/src/room/track/processor/types.ts index d8b98ab2e..0ecd90b6c 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/track/processor/types.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/track/processor/types.ts @@ -2,6 +2,7 @@ // // SPDX-License-Identifier: Apache-2.0 import type Room from '../../Room.ts'; +import type LocalTrack from '../LocalTrack.ts'; import type {Track} from '../Track.ts'; export type ProcessorOptions = { @@ -9,6 +10,7 @@ export type ProcessorOptions = { track: MediaStreamTrack; element?: HTMLMediaElement; audioContext?: AudioContext; + localTrack?: LocalTrack; }; export interface AudioProcessorOptions extends ProcessorOptions { diff --git a/fluxer_app/pkgs/livekit-client/src/room/track/record.ts b/fluxer_app/pkgs/livekit-client/src/room/track/record.ts index 9b6fb8eec..04454216c 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/track/record.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/track/record.ts @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2024 LiveKit, Inc. // // SPDX-License-Identifier: Apache-2.0 +import type {NonSharedUint8Array} from '../../type-polyfills/non-shared-typed-arrays.ts'; import type LocalTrack from './LocalTrack.ts'; const isMediaRecorderAvailable = typeof MediaRecorder !== 'undefined'; @@ -51,11 +52,11 @@ class FallbackRecorder extends EventTarget implements MediaRecorder { const RecorderBase: typeof MediaRecorder = isMediaRecorderAvailable ? MediaRecorder : FallbackRecorder; -function readLegacyBlobByteArray(data: Blob): Uint8Array | undefined { +function readLegacyBlobByteArray(data: Blob): NonSharedUint8Array | undefined { if (!('byteArray' in data)) { return undefined; } - return data.byteArray instanceof Uint8Array ? data.byteArray : undefined; + return data.byteArray instanceof Uint8Array ? (data.byteArray as NonSharedUint8Array) : undefined; } export class LocalTrackRecorder extends RecorderBase { @@ -94,7 +95,7 @@ export class LocalTrackRecorder extends RecorderBase { start: (controller) => { streamController = controller; dataListener = async (event: BlobEvent) => { - let data: Uint8Array; + let data: NonSharedUint8Array; if (event.data.arrayBuffer) { const arrayBuffer = await event.data.arrayBuffer(); diff --git a/fluxer_app/pkgs/livekit-client/src/room/track/utils.ts b/fluxer_app/pkgs/livekit-client/src/room/track/utils.ts index 110eb845d..6f7ea3cbc 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/track/utils.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/track/utils.ts @@ -207,6 +207,7 @@ export function screenCaptureToDisplayMediaStreamOptions( return { audio: audioConstraints, video: videoConstraints, + controller: options.controller, selfBrowserSurface: options.selfBrowserSurface, surfaceSwitching: options.surfaceSwitching, systemAudio: options.systemAudio, @@ -265,7 +266,9 @@ export function getLogContextFromTrack(track: Track | TrackPublication): Record< } export function supportsSynchronizationSources(): boolean { - return typeof RTCRtpReceiver !== 'undefined' && 'getSynchronizationSources' in RTCRtpReceiver; + return ( + typeof RTCRtpReceiver !== 'undefined' && typeof RTCRtpReceiver.prototype.getSynchronizationSources === 'function' + ); } export function diffAttributes( diff --git a/fluxer_app/pkgs/livekit-client/src/room/types.ts b/fluxer_app/pkgs/livekit-client/src/room/types.ts index ef411066f..06bb69ce9 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/types.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/types.ts @@ -2,7 +2,6 @@ // // SPDX-License-Identifier: Apache-2.0 import type {DataStream_Chunk, Encryption_Type} from '@livekit/protocol'; -import type {Future} from './utils.ts'; export type SimulationOptions = { publish?: { @@ -24,6 +23,17 @@ export interface SendTextOptions { attachments?: Array; onProgress?: (progress: number) => void; attributes?: Record; + compress?: boolean; +} + +export interface SendBytesOptions { + topic?: string; + destinationIdentities?: Array; + attributes?: Record; + onProgress?: (progress: number) => void; + compress?: boolean; + name?: string; + mimeType?: string; } export interface StreamTextOptions { @@ -51,6 +61,7 @@ export type StreamBytesOptions = { export type SendFileOptions = Pick & { onProgress?: (progress: number) => void; encryptionType?: Encryption_Type.NONE; + compress?: boolean; }; export type DataPublishOptions = { @@ -77,7 +88,8 @@ export type SimulationScenario = | 'subscriber-bandwidth' | 'disconnect-signal-on-resume' | 'disconnect-signal-on-resume-no-messages' - | 'leave-full-reconnect'; + | 'leave-full-reconnect' + | 'fail-on-v1-path'; export type LoggerOptions = { loggerName?: string; @@ -109,7 +121,6 @@ export interface StreamController { startTime: number; endTime?: number; sendingParticipantIdentity: string; - outOfBandFailureRejectingFuture: Future; } export interface BaseStreamInfo { diff --git a/fluxer_app/pkgs/livekit-client/src/room/utils.ts b/fluxer_app/pkgs/livekit-client/src/room/utils.ts index 8c6e8b187..5b7f5f3fe 100644 --- a/fluxer_app/pkgs/livekit-client/src/room/utils.ts +++ b/fluxer_app/pkgs/livekit-client/src/room/utils.ts @@ -4,14 +4,17 @@ import { type ChatMessage as ChatMessageModel, ClientInfo, + type ClientInfo_Capability, ClientInfo_SDK, DisconnectReason, type Transcription as TranscriptionModel, } from '@livekit/protocol'; +import type {NonSharedUint8Array} from '../type-polyfills/non-shared-typed-arrays.ts'; import type {BrowserDetails} from '../utils/browserParser.ts'; import {getBrowser} from '../utils/browserParser.ts'; import TypedPromise from '../utils/TypedPromise.ts'; -import {protocolVersion, version} from '../version.ts'; +import type {Throws} from '../utils/throws.ts'; +import {clientProtocol, protocolVersion, version} from '../version.ts'; import {type ConnectionError, ConnectionErrorReason} from './errors.ts'; import type LocalParticipant from './participant/LocalParticipant.ts'; import type Participant from './participant/Participant.ts'; @@ -121,6 +124,7 @@ function hasSenderMimeType(mimeType: string): boolean { if (!hasSenderCapabilitiesApi()) { return false; } + const capabilities = RTCRtpSender.getCapabilities('video'); if (!capabilities) { return false; @@ -133,6 +137,47 @@ export function isSVCCodec(codec?: string): boolean { return codec === 'av1' || codec === 'vp9'; } +export function negotiateDependencyDescriptor(transceiver: RTCRtpTransceiver): boolean { + const extensions = transceiver.getHeaderExtensionsToNegotiate?.(); + if (!extensions || !transceiver.setHeaderExtensionsToNegotiate) { + return false; + } + const dd = extensions.find((ext) => ext.uri === ddExtensionURI); + if (!dd) { + return false; + } + if (dd.direction !== 'stopped') { + return true; + } + dd.direction = 'sendrecv'; + try { + transceiver.setHeaderExtensionsToNegotiate(extensions); + return true; + } catch (_e) { + return false; + } +} + +export function isSVCSimulcast(codec?: string, options?: {simulcast?: boolean; scalabilityMode?: string}): boolean { + return isSVCCodec(codec) && !!options?.simulcast && !!options.scalabilityMode?.startsWith('L1T'); +} + +export function usesLegacySVCEncodings(): boolean { + const browser = getBrowser(); + return ( + isSafariBased() || isReactNative() || (browser?.name === 'Chrome' && compareVersions(browser.version, '113') < 0) + ); +} + +const svcSimulcastMinServerVersion = '1.13.6'; + +export function isSVCSimulcastSupportedByServer(serverVersion?: string): boolean { + if (!serverVersion) { + return false; + } + return compareVersions(serverVersion, svcSimulcastMinServerVersion) > 0; +} + export function supportsSetSinkId(elm?: HTMLMediaElement): boolean { if (!document || isSafariBased()) { return false; @@ -163,6 +208,10 @@ export function isChromiumBased(): boolean { return !!browser && browser.name === 'Chrome' && browser.os !== 'iOS'; } +export function isScriptTransformSupportedForWorker(): boolean { + return typeof window !== 'undefined' && typeof window.RTCRtpScriptTransform !== 'undefined' && !isChromiumBased(); +} + export function isSafari(): boolean { return getBrowser()?.name === 'Safari'; } @@ -326,10 +375,12 @@ export interface ObservableMediaElement extends HTMLMediaElement { handleVisibilityChanged: (entry: IntersectionObserverEntry) => void; } -export function getClientInfo(): ClientInfo { +export function getClientInfo(capabilities?: Array): ClientInfo { const info = new ClientInfo({ + capabilities, sdk: ClientInfo_SDK.JS, protocol: protocolVersion, + clientProtocol, version, }); @@ -398,7 +449,7 @@ export function getEmptyAudioStreamTrack() { } export class Future { - promise: Promise; + promise: Promise>; resolve?: (arg: T) => void; @@ -427,7 +478,7 @@ export class Future { }).finally(() => { this._isResolved = true; this.onFinally?.(); - }); + }) as Promise>; } } @@ -630,11 +681,11 @@ export function isRemoteParticipant(p: Participant): p is RemoteParticipant { return !p.isLocal; } -export function splitUtf8(s: string, n: number): Array { +export function splitUtf8(s: string, n: number): Array { if (n < 4) { throw new Error('n must be at least 4 due to utf8 encoding rules'); } - const result: Array = []; + const result: Array = []; let encoded = new TextEncoder().encode(s); while (encoded.length > n) { let k = n; @@ -654,6 +705,64 @@ export function splitUtf8(s: string, n: number): Array { return result; } +export function readableFromBytes(bytes: NonSharedUint8Array): ReadableStream { + return new ReadableStream({ + start(controller) { + controller.enqueue(bytes); + controller.close(); + }, + }); +} + +export async function* readBytesInChunks( + source: ReadableStream, + chunkSize: number, +): AsyncGenerator { + const reader = source.getReader(); + let buffer = new Uint8Array(0); + try { + while (true) { + const {done, value} = await reader.read(); + if (done) { + break; + } + if (value.byteLength === 0) { + continue; + } + const merged = new Uint8Array(buffer.byteLength + value.byteLength); + merged.set(buffer); + merged.set(value, buffer.byteLength); + buffer = merged; + while (buffer.byteLength >= chunkSize) { + yield buffer.slice(0, chunkSize); + buffer = buffer.slice(chunkSize); + } + } + if (buffer.byteLength > 0) { + yield buffer; + } + } finally { + reader.releaseLock(); + } +} + +export function encodeBase64(bytes: Uint8Array): string { + let binary = ''; + for (let i = 0; i < bytes.byteLength; i++) { + binary += String.fromCharCode(bytes[i]!); + } + return btoa(binary); +} + +export function decodeBase64(base64: string): Uint8Array { + const binary = atob(base64); + const bytes = new Uint8Array(binary.length); + for (let i = 0; i < binary.length; i++) { + bytes[i] = binary.charCodeAt(i); + } + return bytes; +} + export function extractMaxAgeFromRequestHeaders(headers: Headers): number | undefined { const cacheControl = headers.get('Cache-Control'); if (cacheControl) { @@ -664,3 +773,22 @@ export function extractMaxAgeFromRequestHeaders(headers: Headers): number | unde } return undefined; } + +export function isCompressionStreamSupported() { + return typeof CompressionStream !== 'undefined'; +} + +export function isPublisherOfferWithJoinSupported() { + return isCompressionStreamSupported() && !isFireFox(); +} + +export function extractTrackSid(mediaTrack: MediaStreamTrack, stream: MediaStream): Track.SID | undefined { + const [, streamId] = unpackStreamId(stream.id); + if (streamId?.startsWith('TR')) { + return streamId; + } + if (mediaTrack.id.startsWith('TR')) { + return mediaTrack.id; + } + return undefined; +} diff --git a/fluxer_app/pkgs/livekit-client/src/type-polyfills/header-extensions.d.ts b/fluxer_app/pkgs/livekit-client/src/type-polyfills/header-extensions.d.ts new file mode 100644 index 000000000..e69f81616 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/type-polyfills/header-extensions.d.ts @@ -0,0 +1,11 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +interface RTCRtpTransceiver { + getHeaderExtensionsToNegotiate?(): Array; + setHeaderExtensionsToNegotiate?(extensions: Array): void; +} + +interface RTCRtpHeaderExtensionCapability { + direction?: 'sendrecv' | 'sendonly' | 'recvonly' | 'stopped'; +} diff --git a/fluxer_app/pkgs/livekit-client/src/type-polyfills/non-shared-typed-arrays.ts b/fluxer_app/pkgs/livekit-client/src/type-polyfills/non-shared-typed-arrays.ts new file mode 100644 index 000000000..01a109b55 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/type-polyfills/non-shared-typed-arrays.ts @@ -0,0 +1,4 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +export type NonSharedUint8Array = ReturnType; diff --git a/fluxer_app/pkgs/livekit-client/src/utils/abort-signal-polyfill.ts b/fluxer_app/pkgs/livekit-client/src/utils/abort-signal-polyfill.ts new file mode 100644 index 000000000..01d042dff --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/utils/abort-signal-polyfill.ts @@ -0,0 +1,50 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +export function abortSignalAny(signals: Array): AbortSignal { + if (signals.length === 0) { + const controller = new AbortController(); + return controller.signal; + } + + if (signals.length === 1) { + return signals[0]; + } + + for (const signal of signals) { + if (signal.aborted) { + return signal; + } + } + + const controller = new AbortController(); + const unlisteners: Array<() => void> = Array(signals.length); + + const cleanup = () => { + for (const unsubscribe of unlisteners) { + unsubscribe(); + } + }; + + signals.forEach((signal, index) => { + const handler = () => { + controller.abort(signal.reason); + cleanup(); + }; + + signal.addEventListener('abort', handler); + unlisteners[index] = () => signal.removeEventListener('abort', handler); + }); + + return controller.signal; +} + +export function abortSignalTimeout(ms: number): AbortSignal { + const controller = new AbortController(); + + setTimeout(() => { + controller.abort(new DOMException(`signal timed out after ${ms} ms`, 'TimeoutError')); + }, ms); + + return controller.signal; +} diff --git a/fluxer_app/pkgs/livekit-client/src/utils/dataPacketBuffer.ts b/fluxer_app/pkgs/livekit-client/src/utils/dataPacketBuffer.ts index d3a485273..867f93ebc 100644 --- a/fluxer_app/pkgs/livekit-client/src/utils/dataPacketBuffer.ts +++ b/fluxer_app/pkgs/livekit-client/src/utils/dataPacketBuffer.ts @@ -1,25 +1,32 @@ // SPDX-FileCopyrightText: 2024 LiveKit, Inc. // // SPDX-License-Identifier: Apache-2.0 +import type {NonSharedUint8Array} from '../type-polyfills/non-shared-typed-arrays.ts'; + export interface DataPacketItem { - data: Uint8Array; + data: NonSharedUint8Array; sequence: number; + sent: boolean; } export class DataPacketBuffer { private buffer: Array = []; - private _totalSize = 0; + private _sentSize = 0; push(item: DataPacketItem) { this.buffer.push(item); - this._totalSize += item.data.byteLength; + if (item.sent) { + this._sentSize += item.data.byteLength; + } } pop(): DataPacketItem | undefined { const item = this.buffer.shift(); if (item) { - this._totalSize -= item.data.byteLength; + if (item.sent) { + this._sentSize -= item.data.byteLength; + } } return item; } @@ -28,6 +35,24 @@ export class DataPacketBuffer { return this.buffer.slice(); } + getUnsent(): Array { + return this.buffer.filter((item) => !item.sent); + } + + markSent(item: DataPacketItem) { + if (!item.sent) { + item.sent = true; + this._sentSize += item.data.byteLength; + } + } + + markAllUnsent() { + for (const item of this.buffer) { + item.sent = false; + } + this._sentSize = 0; + } + popToSequence(sequence: number) { while (this.buffer.length > 0) { const first = this.buffer[0]; @@ -42,7 +67,10 @@ export class DataPacketBuffer { alignBufferedAmount(bufferedAmount: number) { while (this.buffer.length > 0) { const first = this.buffer[0]; - if (this._totalSize - first.data.byteLength <= bufferedAmount) { + if (!first.sent) { + break; + } + if (this._sentSize - first.data.byteLength <= bufferedAmount) { break; } this.pop(); diff --git a/fluxer_app/pkgs/livekit-client/src/utils/deferrable-map.ts b/fluxer_app/pkgs/livekit-client/src/utils/deferrable-map.ts new file mode 100644 index 000000000..6f2aeef98 --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/utils/deferrable-map.ts @@ -0,0 +1,89 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 + +import {Future} from '../room/utils.ts'; +import type {Throws} from './throws.ts'; + +export class DeferrableMapAbortError extends DOMException { + reason: unknown; + + constructor(message: string, reason?: unknown) { + super(message, 'AbortError'); + this.reason = reason; + } +} + +export class DeferrableMap extends Map { + private pending: Map>> = new Map(); + + override set(key: K, value: V): this { + super.set(key, value); + + const futures = this.pending?.get(key); + if (futures) { + for (const future of futures) { + if (!future.isResolved) { + future.resolve?.(value); + } + } + this.pending.delete(key); + } + + return this; + } + + override get [Symbol.toStringTag](): string { + return 'DeferrableMap'; + } + + getDeferred(key: K): Promise; + getDeferred(key: K, signal: AbortSignal): Promise>; + async getDeferred(key: K, signal?: AbortSignal) { + const existing = this.get(key); + if (typeof existing !== 'undefined') { + return existing; + } + + if (signal?.aborted) { + throw new DeferrableMapAbortError('The operation was aborted.', signal.reason); + } + + const future = new Future(undefined, () => { + const futures = this.pending.get(key); + if (!futures) { + return; + } + + const idx = futures.indexOf(future); + if (idx !== -1) { + futures.splice(idx, 1); + } + if (futures.length === 0) { + this.pending.delete(key); + } + }); + + const existingFutures = this.pending.get(key); + if (existingFutures) { + existingFutures.push(future); + } else { + this.pending.set(key, [future]); + } + + if (signal) { + const onAbort = () => { + if (!future.isResolved) { + future.reject?.(new DeferrableMapAbortError('The operation was aborted.', signal.reason)); + } + }; + signal.addEventListener('abort', onAbort, {once: true}); + + future.promise.finally(() => { + signal.removeEventListener('abort', onAbort); + }); + } + + return future.promise; + } +} diff --git a/fluxer_app/pkgs/livekit-client/src/utils/machineInspector.ts b/fluxer_app/pkgs/livekit-client/src/utils/machineInspector.ts new file mode 100644 index 000000000..2bfbf9a0e --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/utils/machineInspector.ts @@ -0,0 +1,59 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +export interface InspectableMachine { + readonly id: string; + readonly initialState: string; + readonly states: Record>; + readonly context?: unknown; + currentState(): string; + canHandle(input: string): boolean; + on(eventName: string, callback: (data: any) => void): {off(): void}; +} + +export interface MachineAnnouncement { + label: string; + seq: number; + at: number; + machine: InspectableMachine; +} + +const HISTORY_LIMIT = 16; + +let enabled = false; +let announced: Array = []; +let subscribers: Array<(announcement: MachineAnnouncement) => void> = []; + +export function enableMachineInspector() { + enabled = true; +} + +export function isMachineInspectorEnabled() { + return enabled; +} + +export function announceMachine(label: string, machine: InspectableMachine) { + if (!enabled) { + return; + } + const announcement: MachineAnnouncement = { + label, + seq: announced.length, + at: Date.now(), + machine, + }; + announced = [...announced.slice(-(HISTORY_LIMIT - 1)), announcement]; + for (const subscriber of subscribers) { + subscriber(announcement); + } +} + +export function onMachineAnnounced(callback: (announcement: MachineAnnouncement) => void) { + subscribers = [...subscribers, callback]; + for (const announcement of announced) { + callback(announcement); + } + return () => { + subscribers = subscribers.filter((subscriber) => subscriber !== callback); + }; +} diff --git a/fluxer_app/pkgs/livekit-client/src/utils/serializer.ts b/fluxer_app/pkgs/livekit-client/src/utils/serializer.ts new file mode 100644 index 000000000..ecdaf018e --- /dev/null +++ b/fluxer_app/pkgs/livekit-client/src/utils/serializer.ts @@ -0,0 +1,43 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 +const SerializerSymbol = Symbol.for('lk.serializer'); + +export type Serializer = { + symbol: typeof SerializerSymbol; + parse: (raw: string) => Input; + serialize: (val: Output) => string; +}; + +export function isSerializer(v: unknown): v is Serializer { + return typeof v === 'object' && v !== null && 'symbol' in v && v.symbol === SerializerSymbol; +} + +export type SerializerInput = S extends Serializer ? Input : any; +export type SerializerOutput = S extends Serializer ? Output : any; + +function base(params: Omit, 'symbol'>): Serializer { + return {...params, symbol: SerializerSymbol}; +} + +function json(): Serializer { + return base({ + parse: (rawString: string) => JSON.parse(rawString) as Input, + serialize: (val: unknown) => JSON.stringify(val), + }); +} + +function raw() { + return base({ + parse: (rawString: string) => rawString, + serialize: (val: string) => val, + }); +} + +function custom( + params: Omit, 'symbol'>, +): Serializer { + return base(params); +} + +export const serializers = {json, raw, custom}; diff --git a/fluxer_app/pkgs/livekit-client/src/utils/throws.ts b/fluxer_app/pkgs/livekit-client/src/utils/throws.ts index 58376e98a..051a17d1a 100644 --- a/fluxer_app/pkgs/livekit-client/src/utils/throws.ts +++ b/fluxer_app/pkgs/livekit-client/src/utils/throws.ts @@ -3,13 +3,16 @@ // SPDX-License-Identifier: Apache-2.0 type Primitives = null | undefined | string | number | bigint | boolean | symbol; -export type Throws = (T & {readonly __throws?: E}) | Extract; +export type Throws = + | (T & {__throws?(error: E): void}) + | Extract + | (T extends void ? T : never); -export type ExtractErrors = T extends Throws ? E : never; +export type ExtractErrors = T extends Throws ? E : never; -export type ExtractSuccess = T extends Throws ? S : T; +export type ExtractSuccess = T extends Throws ? S : T; -export type CombineErrors> = T extends [infer First, ...infer Rest] +export type CombineErrors> = T extends [infer First, ...infer Rest] ? ExtractErrors | CombineErrors : never; diff --git a/fluxer_app/pkgs/livekit-client/src/version.ts b/fluxer_app/pkgs/livekit-client/src/version.ts index 027fad3f7..9667d0447 100644 --- a/fluxer_app/pkgs/livekit-client/src/version.ts +++ b/fluxer_app/pkgs/livekit-client/src/version.ts @@ -4,4 +4,10 @@ import {version as v} from '../package.json'; export const version = v; -export const protocolVersion = 16; +export const protocolVersion = 17; + +export const CLIENT_PROTOCOL_DEFAULT = 0; +export const CLIENT_PROTOCOL_DATA_STREAM_RPC = 1; +export const CLIENT_PROTOCOL_DATA_STREAM_V2 = 2; + +export const clientProtocol = CLIENT_PROTOCOL_DATA_STREAM_V2; diff --git a/fluxer_app/pnpm-lock.yaml b/fluxer_app/pnpm-lock.yaml deleted file mode 100644 index 9216741ad..000000000 --- a/fluxer_app/pnpm-lock.yaml +++ /dev/null @@ -1,14692 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -overrides: - '@rspack/core': 1.6.2 - '@rspack/cli': 1.6.2 - '@lingui/swc-plugin': 5.9.0 - -importers: - - .: - dependencies: - '@dnd-kit/core': - specifier: 6.3.1 - version: 6.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@dnd-kit/modifiers': - specifier: 9.0.0 - version: 9.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) - '@dnd-kit/sortable': - specifier: 10.0.0 - version: 10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) - '@dnd-kit/utilities': - specifier: 3.2.2 - version: 3.2.2(react@19.2.3) - '@floating-ui/react': - specifier: 0.27.16 - version: 0.27.16(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@floating-ui/react-dom': - specifier: 2.1.6 - version: 2.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@hcaptcha/react-hcaptcha': - specifier: 2.0.1 - version: 2.0.1 - '@lingui/core': - specifier: 5.7.0 - version: 5.7.0(@lingui/babel-plugin-lingui-macro@5.7.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0) - '@lingui/react': - specifier: 5.7.0 - version: 5.7.0(@lingui/babel-plugin-lingui-macro@5.7.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0)(react@19.2.3) - '@livekit/components-react': - specifier: 2.9.17 - version: 2.9.17(livekit-client@2.17.0(@types/dom-mediacapture-record@1.0.22))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tslib@2.8.1) - '@marsidev/react-turnstile': - specifier: 1.4.1 - version: 1.4.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@phosphor-icons/react': - specifier: 2.1.10 - version: 2.1.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-checkbox': - specifier: 1.3.3 - version: 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-radio-group': - specifier: 1.3.8 - version: 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-switch': - specifier: 1.2.6 - version: 1.2.6(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@simplewebauthn/browser': - specifier: 13.2.2 - version: 13.2.2 - bowser: - specifier: 2.13.1 - version: 2.13.1 - clsx: - specifier: 2.1.1 - version: 2.1.1 - colorjs.io: - specifier: 0.6.0 - version: 0.6.0 - combokeys: - specifier: 3.0.1 - version: 3.0.1 - electron-squirrel-startup: - specifier: 1.0.1 - version: 1.0.1 - emoji-regex: - specifier: 10.6.0 - version: 10.6.0 - eventemitter3: - specifier: 5.0.1 - version: 5.0.1 - favico.js: - specifier: 0.3.10 - version: 0.3.10 - framer-motion: - specifier: 12.26.2 - version: 12.26.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - fs-extra: - specifier: 11.3.3 - version: 11.3.3 - highlight.js: - specifier: 11.11.1 - version: 11.11.1 - idna-uts46-hx: - specifier: 6.1.0 - version: 6.1.0 - katex: - specifier: 0.16.27 - version: 0.16.27 - livekit-client: - specifier: 2.17.0 - version: 2.17.0(@types/dom-mediacapture-record@1.0.22) - lodash: - specifier: 4.17.21 - version: 4.17.21 - lru-cache: - specifier: 11.2.4 - version: 11.2.4 - luxon: - specifier: 3.7.2 - version: 3.7.2 - match-sorter: - specifier: 8.2.0 - version: 8.2.0 - mobx: - specifier: 6.15.0 - version: 6.15.0 - mobx-persist-store: - specifier: 1.1.8 - version: 1.1.8(mobx@6.15.0) - mobx-react-lite: - specifier: 4.1.1 - version: 4.1.1(mobx@6.15.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - motion: - specifier: 12.26.2 - version: 12.26.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - node-mac-permissions: - specifier: 2.5.0 - version: 2.5.0 - qrcode: - specifier: 1.5.4 - version: 1.5.4 - react: - specifier: 19.2.3 - version: 19.2.3 - react-aria-components: - specifier: 1.14.0 - version: 1.14.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react-dnd: - specifier: 16.0.1 - version: 16.0.1(@types/node@25.0.9)(@types/react@19.2.8)(react@19.2.3) - react-dnd-accessible-backend: - specifier: 2.1.0 - version: 2.1.0(react-dnd@16.0.1(@types/node@25.0.9)(@types/react@19.2.8)(react@19.2.3))(react@19.2.3) - react-dnd-html5-backend: - specifier: 16.0.1 - version: 16.0.1 - react-dnd-multi-backend: - specifier: 9.0.0 - version: 9.0.0(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@25.0.9)(@types/react@19.2.8)(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react-dom: - specifier: 19.2.3 - version: 19.2.3(react@19.2.3) - react-hook-form: - specifier: 7.71.1 - version: 7.71.1(react@19.2.3) - react-hotkeys-hook: - specifier: 5.2.3 - version: 5.2.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - rxjs: - specifier: 7.8.2 - version: 7.8.2 - thumbhash: - specifier: 0.1.1 - version: 0.1.1 - undici: - specifier: 7.18.2 - version: 7.18.2 - unique-names-generator: - specifier: 4.7.1 - version: 4.7.1 - update-electron-app: - specifier: 3.1.2 - version: 3.1.2 - urlpattern-polyfill: - specifier: 10.1.0 - version: 10.1.0 - valibot: - specifier: 1.2.0 - version: 1.2.0(typescript@5.9.3) - ws: - specifier: 8.19.0 - version: 8.19.0 - devDependencies: - '@lingui/cli': - specifier: 5.7.0 - version: 5.7.0(babel-plugin-macros@3.1.0)(typescript@5.9.3) - '@lingui/swc-plugin': - specifier: 5.9.0 - version: 5.9.0(@lingui/core@5.7.0(@lingui/babel-plugin-lingui-macro@5.7.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0)) - '@rspack/cli': - specifier: 1.6.2 - version: 1.6.2(@rspack/core@1.6.2(@swc/helpers@0.5.18))(@types/express@4.17.25)(webpack@5.104.1(esbuild@0.27.2)) - '@rspack/core': - specifier: 1.6.2 - version: 1.6.2(@swc/helpers@0.5.18) - '@rspack/plugin-react-refresh': - specifier: 1.6.0 - version: 1.6.0(react-refresh@0.18.0) - '@svgr/core': - specifier: 8.1.0 - version: 8.1.0(typescript@5.9.3) - '@svgr/plugin-jsx': - specifier: 8.1.0 - version: 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) - '@svgr/plugin-svgo': - specifier: 8.1.0 - version: 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3) - '@svgr/webpack': - specifier: 8.1.0 - version: 8.1.0(typescript@5.9.3) - '@types/combokeys': - specifier: 2.4.9 - version: 2.4.9 - '@types/electron-squirrel-startup': - specifier: 1.0.2 - version: 1.0.2 - '@types/jsdom': - specifier: 27.0.0 - version: 27.0.0 - '@types/lodash': - specifier: 4.17.23 - version: 4.17.23 - '@types/luxon': - specifier: 3.7.1 - version: 3.7.1 - '@types/node': - specifier: 25.0.9 - version: 25.0.9 - '@types/qrcode': - specifier: 1.5.6 - version: 1.5.6 - '@types/react': - specifier: 19.2.8 - version: 19.2.8 - '@types/react-dom': - specifier: 19.2.3 - version: 19.2.3(@types/react@19.2.8) - '@types/ws': - specifier: 8.18.1 - version: 8.18.1 - '@vitest/coverage-v8': - specifier: 4.0.17 - version: 4.0.17(vitest@4.0.17(@types/node@25.0.9)(happy-dom@20.3.0)(jiti@2.6.1)(jsdom@27.4.0)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)) - autoprefixer: - specifier: 10.4.23 - version: 10.4.23(postcss@8.5.6) - browserslist: - specifier: 4.28.1 - version: 4.28.1 - chokidar: - specifier: 5.0.0 - version: 5.0.0 - electron: - specifier: 39.2.7 - version: 39.2.7 - electron-builder: - specifier: 26.4.0 - version: 26.4.0(electron-builder-squirrel-windows@26.4.0) - electron-builder-squirrel-windows: - specifier: 26.4.0 - version: 26.4.0(dmg-builder@26.4.0) - esbuild: - specifier: 0.27.2 - version: 0.27.2 - happy-dom: - specifier: 20.3.0 - version: 20.3.0 - jsdom: - specifier: 27.4.0 - version: 27.4.0 - lightningcss: - specifier: 1.30.2 - version: 1.30.2 - node-addon-api: - specifier: 8.5.0 - version: 8.5.0 - postcss: - specifier: 8.5.6 - version: 8.5.6 - postcss-discard-comments: - specifier: 7.0.5 - version: 7.0.5(postcss@8.5.6) - postcss-loader: - specifier: 8.2.0 - version: 8.2.0(@rspack/core@1.6.2(@swc/helpers@0.5.18))(postcss@8.5.6)(typescript@5.9.3)(webpack@5.104.1(esbuild@0.27.2)) - postcss-modules: - specifier: 6.0.1 - version: 6.0.1(postcss@8.5.6) - postcss-preset-env: - specifier: 11.1.1 - version: 11.1.1(postcss@8.5.6) - react-refresh: - specifier: 0.18.0 - version: 0.18.0 - sharp: - specifier: 0.34.5 - version: 0.34.5 - smol-toml: - specifier: ^1.6.0 - version: 1.6.0 - tsx: - specifier: 4.21.0 - version: 4.21.0 - typed-css-modules: - specifier: 0.9.1 - version: 0.9.1 - typescript: - specifier: 5.9.3 - version: 5.9.3 - vitest: - specifier: 4.0.17 - version: 4.0.17(@types/node@25.0.9)(happy-dom@20.3.0)(jiti@2.6.1)(jsdom@27.4.0)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0) - optionalDependencies: - electron-log: - specifier: 5.4.3 - version: 5.4.3 - uiohook-napi: - specifier: 1.5.4 - version: 1.5.4 - -packages: - - 7zip-bin@5.2.0: - resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} - - '@acemir/cssom@0.9.31': - resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} - - '@asamuzakjp/css-color@4.1.1': - resolution: {integrity: sha512-B0Hv6G3gWGMn0xKJ0txEi/jM5iFpT3MfDxmhZFb4W047GvytCf1DHQ1D69W3zHI4yWe2aTZAA0JnbMZ7Xc8DuQ==} - - '@asamuzakjp/dom-selector@6.7.6': - resolution: {integrity: sha512-hBaJER6A9MpdG3WgdlOolHmbOYvSk46y7IQN/1+iqiCuUu6iWdQrs9DGKF8ocqsEqWujWf/V7b7vaDgiUmIvUg==} - - '@asamuzakjp/nwsapi@2.3.9': - resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} - - '@babel/code-frame@7.28.6': - resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.28.6': - resolution: {integrity: sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.28.6': - resolution: {integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.28.6': - resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-annotate-as-pure@7.27.3': - resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.28.6': - resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-create-class-features-plugin@7.28.6': - resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-create-regexp-features-plugin@7.28.5': - resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-define-polyfill-provider@0.6.5': - resolution: {integrity: sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-member-expression-to-functions@7.28.5': - resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.28.6': - resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.28.6': - resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-optimise-call-expression@7.27.1': - resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.28.6': - resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} - engines: {node: '>=6.9.0'} - - '@babel/helper-remap-async-to-generator@7.27.1': - resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-replace-supers@7.28.6': - resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': - resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-wrap-function@7.28.6': - resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.28.6': - resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.28.6': - resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': - resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': - resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': - resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': - resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6': - resolution: {integrity: sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-assertions@7.28.6': - resolution: {integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.28.6': - resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-jsx@7.28.6': - resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-typescript@7.28.6': - resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6': - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-arrow-functions@7.27.1': - resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-async-generator-functions@7.28.6': - resolution: {integrity: sha512-9knsChgsMzBV5Yh3kkhrZNxH3oCYAfMBkNNaVN4cP2RVlFPe8wYdwwcnOsAbkdDoV9UjFtOXWrWB52M8W4jNeA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-async-to-generator@7.28.6': - resolution: {integrity: sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-block-scoped-functions@7.27.1': - resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-block-scoping@7.28.6': - resolution: {integrity: sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-class-properties@7.28.6': - resolution: {integrity: sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-class-static-block@7.28.6': - resolution: {integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - - '@babel/plugin-transform-classes@7.28.6': - resolution: {integrity: sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-computed-properties@7.28.6': - resolution: {integrity: sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-destructuring@7.28.5': - resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-dotall-regex@7.28.6': - resolution: {integrity: sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-duplicate-keys@7.27.1': - resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.28.6': - resolution: {integrity: sha512-5suVoXjC14lUN6ZL9OLKIHCNVWCrqGqlmEp/ixdXjvgnEl/kauLvvMO/Xw9NyMc95Joj1AeLVPVMvibBgSoFlA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-dynamic-import@7.27.1': - resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-explicit-resource-management@7.28.6': - resolution: {integrity: sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-exponentiation-operator@7.28.6': - resolution: {integrity: sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-export-namespace-from@7.27.1': - resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-for-of@7.27.1': - resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-function-name@7.27.1': - resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-json-strings@7.28.6': - resolution: {integrity: sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-literals@7.27.1': - resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-logical-assignment-operators@7.28.6': - resolution: {integrity: sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-member-expression-literals@7.27.1': - resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-amd@7.27.1': - resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-commonjs@7.28.6': - resolution: {integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-systemjs@7.28.5': - resolution: {integrity: sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-umd@7.27.1': - resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': - resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-new-target@7.27.1': - resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-nullish-coalescing-operator@7.28.6': - resolution: {integrity: sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-numeric-separator@7.28.6': - resolution: {integrity: sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-object-rest-spread@7.28.6': - resolution: {integrity: sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-object-super@7.27.1': - resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-optional-catch-binding@7.28.6': - resolution: {integrity: sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-optional-chaining@7.28.6': - resolution: {integrity: sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-parameters@7.27.7': - resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-private-methods@7.28.6': - resolution: {integrity: sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-private-property-in-object@7.28.6': - resolution: {integrity: sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-property-literals@7.27.1': - resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-constant-elements@7.27.1': - resolution: {integrity: sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-display-name@7.28.0': - resolution: {integrity: sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-development@7.27.1': - resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx@7.28.6': - resolution: {integrity: sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-pure-annotations@7.27.1': - resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-regenerator@7.28.6': - resolution: {integrity: sha512-eZhoEZHYQLL5uc1gS5e9/oTknS0sSSAtd5TkKMUp3J+S/CaUjagc0kOUPsEbDmMeva0nC3WWl4SxVY6+OBuxfw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-regexp-modifiers@7.28.6': - resolution: {integrity: sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/plugin-transform-reserved-words@7.27.1': - resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-shorthand-properties@7.27.1': - resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-spread@7.28.6': - resolution: {integrity: sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-sticky-regex@7.27.1': - resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-template-literals@7.27.1': - resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-typeof-symbol@7.27.1': - resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-typescript@7.28.6': - resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-escapes@7.27.1': - resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-property-regex@7.28.6': - resolution: {integrity: sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-regex@7.27.1': - resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-unicode-sets-regex@7.28.6': - resolution: {integrity: sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/preset-env@7.28.6': - resolution: {integrity: sha512-GaTI4nXDrs7l0qaJ6Rg06dtOXTBCG6TMDB44zbqofCIC4PqC7SEvmFFtpxzCDw9W5aJ7RKVshgXTLvLdBFV/qw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/preset-modules@0.1.6-no-external-plugins': - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - - '@babel/preset-react@7.28.5': - resolution: {integrity: sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/preset-typescript@7.28.5': - resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/runtime@7.28.6': - resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.28.6': - resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.28.6': - resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==} - engines: {node: '>=6.9.0'} - - '@bcoe/v8-coverage@1.0.2': - resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} - engines: {node: '>=18'} - - '@bufbuild/protobuf@1.10.1': - resolution: {integrity: sha512-wJ8ReQbHxsAfXhrf9ixl0aYbZorRuOWpBNzm8pL8ftmSxQx/wnJD5Eg861NwJU/czy2VXFIebCeZnZrI9rktIQ==} - - '@csstools/cascade-layer-name-parser@3.0.0': - resolution: {integrity: sha512-/3iksyevwRfSJx5yH0RkcrcYXwuhMQx3Juqf40t97PeEy2/Mz2TItZ/z/216qpe4GgOyFBP8MKIwVvytzHmfIQ==} - engines: {node: '>=20.19.0'} - peerDependencies: - '@csstools/css-parser-algorithms': ^4.0.0 - '@csstools/css-tokenizer': ^4.0.0 - - '@csstools/color-helpers@5.1.0': - resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} - engines: {node: '>=18'} - - '@csstools/color-helpers@6.0.0': - resolution: {integrity: sha512-kNoHJOh1HE2YWMP0zXmyYDWPHRGlfy8E+q2IfwTkbDTwHOw5SP/hZwJ5cJDci116oyFUEEAKacowiAIRq7WFoQ==} - engines: {node: '>=20.19.0'} - - '@csstools/css-calc@2.1.4': - resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 - - '@csstools/css-calc@3.0.0': - resolution: {integrity: sha512-q4d82GTl8BIlh/dTnVsWmxnbWJeb3kiU8eUH71UxlxnS+WIaALmtzTL8gR15PkYOexMQYVk0CO4qIG93C1IvPA==} - engines: {node: '>=20.19.0'} - peerDependencies: - '@csstools/css-parser-algorithms': ^4.0.0 - '@csstools/css-tokenizer': ^4.0.0 - - '@csstools/css-color-parser@3.1.0': - resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 - - '@csstools/css-color-parser@4.0.0': - resolution: {integrity: sha512-Ueqr+H5w5Hd8qdlXMkwpQvGWeyTOGFNbxdSdczszPB02QgGKrlpXjhDX4OgkNqIkXbpY1vcyM1m7YT0YfYw+og==} - engines: {node: '>=20.19.0'} - peerDependencies: - '@csstools/css-parser-algorithms': ^4.0.0 - '@csstools/css-tokenizer': ^4.0.0 - - '@csstools/css-parser-algorithms@3.0.5': - resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-tokenizer': ^3.0.4 - - '@csstools/css-parser-algorithms@4.0.0': - resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} - engines: {node: '>=20.19.0'} - peerDependencies: - '@csstools/css-tokenizer': ^4.0.0 - - '@csstools/css-syntax-patches-for-csstree@1.0.25': - resolution: {integrity: sha512-g0Kw9W3vjx5BEBAF8c5Fm2NcB/Fs8jJXh85aXqwEXiL+tqtOut07TWgyaGzAAfTM+gKckrrncyeGEZPcaRgm2Q==} - engines: {node: '>=18'} - - '@csstools/css-tokenizer@3.0.4': - resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} - engines: {node: '>=18'} - - '@csstools/css-tokenizer@4.0.0': - resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} - engines: {node: '>=20.19.0'} - - '@csstools/media-query-list-parser@5.0.0': - resolution: {integrity: sha512-T9lXmZOfnam3eMERPsszjY5NK0jX8RmThmmm99FZ8b7z8yMaFZWKwLWGZuTwdO3ddRY5fy13GmmEYZXB4I98Eg==} - engines: {node: '>=20.19.0'} - peerDependencies: - '@csstools/css-parser-algorithms': ^4.0.0 - '@csstools/css-tokenizer': ^4.0.0 - - '@csstools/postcss-alpha-function@2.0.1': - resolution: {integrity: sha512-kXppoqo6QI4xVjfuRMf/2XSxldYnWELHy5R6Vo/RI8iu2IpE2vY80ZjXFJ0N36yn7zT1ZPuHpiAszpfrIaa2hA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-cascade-layers@6.0.0': - resolution: {integrity: sha512-WhsECqmrEZQGqaPlBA7JkmF/CJ2/+wetL4fkL9sOPccKd32PQ1qToFM6gqSI5rkpmYqubvbxjEJhyMTHYK0vZQ==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-color-function-display-p3-linear@2.0.0': - resolution: {integrity: sha512-ZP6nRwEnyXpWrnYRKB9TLbSR84VUstqLov7siQM2Np/IepOB2FGZD1r9JiGfJHwYlz8CXzCFFPg7S4lb8zPheQ==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-color-function@5.0.0': - resolution: {integrity: sha512-c5t0UOEuD90pQy6FG23fyiMLtspGpnpUvjCUjshwbTb7MghXhcO9azTvDpB5rP8nKJBr4atb1rGWl1/Yfp9czw==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-color-mix-function@4.0.0': - resolution: {integrity: sha512-Nd064fwSwNpiTGEi8THDDd0kAG/kPfwISAKN3CE3IjZ5Xw0AdarjRJkPM+orFWap4gbDrwRVgbUcRSxUWoR0cA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-color-mix-variadic-function-arguments@2.0.0': - resolution: {integrity: sha512-kGG1QexurE3acX93jbAZwMkd2YtUS6lrzUwBhfsVJUlnM61IreT+1wUvsxqH3jCs8FKwOaWJ0YFItsZaUGDw3A==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-content-alt-text@3.0.0': - resolution: {integrity: sha512-OHa+4aCcrJtHpPWB3zptScHwpS1TUbeLR4uO0ntIz0Su/zw9SoWkVu+tDMSySSAsNtNSI3kut4fTliFwIsrHxA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-contrast-color-function@3.0.0': - resolution: {integrity: sha512-PfUR6kVeDxUPoNcL5QY5TdbUL2NLDhnZ2LwiEhDsnUrRIPFgrIoUHWYjG0LnWq8mBZ21dUqmvQTd89m2OVy/BA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-exponential-functions@3.0.0': - resolution: {integrity: sha512-KCtnlZw1VrDCAbYxE44rUHONYAkjhh0/iS5T3L2K5OHuvoSEvxDjJO82pRwTmsRxVtSiC+syPjx2k2xsqHOM7w==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-font-format-keywords@5.0.0': - resolution: {integrity: sha512-M1EjCe/J3u8fFhOZgRci74cQhJ7R0UFBX6T+WqoEvjrr8hVfMiV+HTYrzxLY5OW8YllvXYr5Q5t5OvJbsUSeDg==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-gamut-mapping@3.0.0': - resolution: {integrity: sha512-A2ZOxf7DMiohT4EGsaMApE5w57HZkoXF+eRJMgdq9VFZg9DL2PEnKC2NILwjXflWDhL32qe0kRxpSZ+60i6NtA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-gradients-interpolation-method@6.0.0': - resolution: {integrity: sha512-pexYfratrU9yuE1o3eymWCQ2B0UkKKjZlwbaCl7FtqJ42ABatscbnDY/6pPKnli8IlPTlmyzP1/aw2uYiZ8XRg==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-hwb-function@5.0.0': - resolution: {integrity: sha512-SPZ1bUiQjNpXdEcDjGCNXsN1S53eZzO+QIR6xLqjuqDBdshytCcFT9NICdXNUUhRjwSwcIu/OOLpeUrW0+K7aA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-ic-unit@5.0.0': - resolution: {integrity: sha512-/ws5d6c4uKqfM9zIL3ugcGI+3fvZEOOkJHNzAyTAGJIdZ+aSL9BVPNlHGV4QzmL0vqBSCOdU3+rhcMEj3+KzYw==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-initial@3.0.0': - resolution: {integrity: sha512-UVUrFmrTQyLomVepnjWlbBg7GoscLmXLwYFyjbcEnmpeGW7wde6lNpx5eM3eVwZI2M+7hCE3ykYnAsEPLcLa+Q==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-is-pseudo-class@6.0.0': - resolution: {integrity: sha512-1Hdy/ykg9RDo8vU8RiM2o+RaXO39WpFPaIkHxlAEJFofle/lc33tdQMKhBk3jR/Fe+uZNLOs3HlowFafyFptVw==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-light-dark-function@3.0.0': - resolution: {integrity: sha512-s++V5/hYazeRUCYIn2lsBVzUsxdeC46gtwpgW6lu5U/GlPOS5UTDT14kkEyPgXmFbCvaWLREqV7YTMJq1K3G6w==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-logical-float-and-clear@4.0.0': - resolution: {integrity: sha512-NGzdIRVj/VxOa/TjVdkHeyiJoDihONV0+uB0csUdgWbFFr8xndtfqK8iIGP9IKJzco+w0hvBF2SSk2sDSTAnOQ==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-logical-overflow@3.0.0': - resolution: {integrity: sha512-5cRg93QXVskM0MNepHpPcL0WLSf5Hncky0DrFDQY/4ozbH5lH7SX5ejayVpNTGSX7IpOvu7ykQDLOdMMGYzwpA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-logical-overscroll-behavior@3.0.0': - resolution: {integrity: sha512-82Jnl/5Wi5jb19nQE1XlBHrZcNL3PzOgcj268cDkfwf+xi10HBqufGo1Unwf5n8bbbEFhEKgyQW+vFsc9iY1jw==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-logical-resize@4.0.0': - resolution: {integrity: sha512-L0T3q0gei/tGetCGZU0c7VN77VTivRpz1YZRNxjXYmW+85PKeI6U9YnSvDqLU2vBT2uN4kLEzfgZ0ThIZpN18A==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-logical-viewport-units@4.0.0': - resolution: {integrity: sha512-TA3AqVN/1IH3dKRC2UUWvprvwyOs2IeD7FDZk5Hz20w4q33yIuSg0i0gjyTUkcn90g8A4n7QpyZ2AgBrnYPnnA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-media-minmax@3.0.0': - resolution: {integrity: sha512-42szvyZ/oqG7NSvBQOGq1IaJaHR6mr/iXqqjW8/JuIajIHRs9HcJR5ExC4vbyCqk+fr7/DIOhm5ZrELBytLDsw==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-media-queries-aspect-ratio-number-values@4.0.0': - resolution: {integrity: sha512-FDdC3lbrj8Vr0SkGIcSLTcRB7ApG6nlJFxOxkEF2C5hIZC1jtgjISFSGn/WjFdVkn8Dqe+Vx9QXI3axS2w1XHw==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-mixins@1.0.0': - resolution: {integrity: sha512-rz6qjT2w9L3k65jGc2dX+3oGiSrYQ70EZPDrINSmSVoVys7lLBFH0tvEa8DW2sr9cbRVD/W+1sy8+7bfu0JUfg==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-nested-calc@5.0.0': - resolution: {integrity: sha512-aPSw8P60e/i9BEfugauhikBqgjiwXcw3I9o4vXs+hktl4NSTgZRI0QHimxk9mst8N01A2TKDBxOln3mssRxiHQ==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-normalize-display-values@5.0.0': - resolution: {integrity: sha512-ei95b5aey72Gemgsb5v/RmLyw12HNnge0TvPJ392Yid18pSyXIyx4hGKxVsMNAmYGAwdZoNOT6JqkkX7BL2+gA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-oklab-function@5.0.0': - resolution: {integrity: sha512-PiFrmz9FoB9u6/1LsWpQ7+MElRl5ervVhbboSTm+NfJwN9Sy4gszuS2J9/SNxLxs+8WWHg3PxHIEm5YbFG7MCA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-position-area-property@2.0.0': - resolution: {integrity: sha512-TeEfzsJGB23Syv7yCm8AHCD2XTFujdjr9YYu9ebH64vnfCEvY4BG319jXAYSlNlf3Yc9PNJ6WnkDkUF5XVgSKQ==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-progressive-custom-properties@5.0.0': - resolution: {integrity: sha512-NsJoZ89rxmDrUsITf8QIk5w+lQZQ8Xw5K6cLFG+cfiffsLYHb3zcbOOrHLetGl1WIhjWWQ4Cr8MMrg46Q+oACg==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-property-rule-prelude-list@2.0.0': - resolution: {integrity: sha512-qcMAkc9AhpzHgmQCD8hoJgGYifcOAxd1exXjjxilMM6euwRE619xDa4UsKBCv/v4g+sS63sd6c29LPM8s2ylSQ==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-random-function@3.0.0': - resolution: {integrity: sha512-H/Zt5o9NAd8mowq3XRy8uU19wOEe8sbKyKOKxrzOdG0rz2maA4fLcXc9MQucdm3s4zMDfVJtCqvwrLP7lKWybA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-relative-color-syntax@4.0.0': - resolution: {integrity: sha512-xa2dWnolTNLVgsFJpCKyGpbWsaDeLvCZg09oVf6PYvhiboK0+ljaL0cEnPycKK4gCKLX5zTYS7a+pxoXNFuJJQ==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-scope-pseudo-class@5.0.0': - resolution: {integrity: sha512-kBrBFJcAji3MSHS4qQIihPvJfJC5xCabXLbejqDMiQi+86HD4eMBiTayAo46Urg7tlEmZZQFymFiJt+GH6nvXw==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-sign-functions@2.0.0': - resolution: {integrity: sha512-32Bw7++8ToSLMEOSJUuxJsAJJdsIfgeD1dYPKRCk9/fTciVZ8MjkPXypwiXIo7xIJk0h5CJz6QUkDoc6dcAJ7Q==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-stepped-value-functions@5.0.0': - resolution: {integrity: sha512-NueCSNbaq7QtAj6QwseMqOlM3C8nN2GWaPwd2Uw+IOYAbGvO/84BxUtNeZljeOmqJX61hwSNhLfwmgJXgY0W5A==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-syntax-descriptor-syntax-production@2.0.0': - resolution: {integrity: sha512-elYcbdiBXAkPqvojB9kIBRuHY6htUhjSITtFQ+XiXnt6SvZCbNGxQmaaw6uZ7SPHu/+i/XVjzIt09/1k3SIerQ==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-system-ui-font-family@2.0.0': - resolution: {integrity: sha512-FyGZCgchFImFyiHS2x3rD5trAqatf/x23veBLTIgbaqyFfna6RNBD+Qf8HRSjt6HGMXOLhAjxJ3OoZg0bbn7Qw==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-text-decoration-shorthand@5.0.0': - resolution: {integrity: sha512-nCi/1o5LX2+fH7RW53k1q2KP6J5JjevoK5EayDUZvC5HeH7AioSY5LTK9jrEZHj4hBa7/J8kUzgSus5YMdgxIA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-trigonometric-functions@5.0.0': - resolution: {integrity: sha512-isjkD3l1MVjanGuaS7RIYP/9txZKbZ8eQPaUHoxEWmySm3k6KutSepzPINL6MXyyi0ZUijZcktA++/L66IK71A==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/postcss-unset-value@5.0.0': - resolution: {integrity: sha512-EoO54sS2KCIfesvHyFYAW99RtzwHdgaJzhl7cqKZSaMYKZv3fXSOehDjAQx8WZBKn1JrMd7xJJI1T1BxPF7/jA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@csstools/selector-resolve-nested@4.0.0': - resolution: {integrity: sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss-selector-parser: ^7.1.1 - - '@csstools/selector-specificity@6.0.0': - resolution: {integrity: sha512-4sSgl78OtOXEX/2d++8A83zHNTgwCJMaR24FvsYL7Uf/VS8HZk9PTwR51elTbGqMuwH3szLvvOXEaVnqn0Z3zA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss-selector-parser: ^7.1.1 - - '@csstools/utilities@3.0.0': - resolution: {integrity: sha512-etDqA/4jYvOGBM6yfKCOsEXfH96BKztZdgGmGqKi2xHnDe0ILIBraRspwgYatJH9JsCZ5HCGoCst8w18EKOAdg==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - '@develar/schema-utils@2.6.5': - resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} - engines: {node: '>= 8.9.0'} - - '@discoveryjs/json-ext@0.5.7': - resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} - engines: {node: '>=10.0.0'} - - '@dnd-kit/accessibility@3.1.1': - resolution: {integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==} - peerDependencies: - react: '>=16.8.0' - - '@dnd-kit/core@6.3.1': - resolution: {integrity: sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@dnd-kit/modifiers@9.0.0': - resolution: {integrity: sha512-ybiLc66qRGuZoC20wdSSG6pDXFikui/dCNGthxv4Ndy8ylErY0N3KVxY2bgo7AWwIbxDmXDg3ylAFmnrjcbVvw==} - peerDependencies: - '@dnd-kit/core': ^6.3.0 - react: '>=16.8.0' - - '@dnd-kit/sortable@10.0.0': - resolution: {integrity: sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==} - peerDependencies: - '@dnd-kit/core': ^6.3.0 - react: '>=16.8.0' - - '@dnd-kit/utilities@3.2.2': - resolution: {integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==} - peerDependencies: - react: '>=16.8.0' - - '@electron/asar@3.4.1': - resolution: {integrity: sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==} - engines: {node: '>=10.12.0'} - hasBin: true - - '@electron/fuses@1.8.0': - resolution: {integrity: sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==} - hasBin: true - - '@electron/get@2.0.3': - resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} - engines: {node: '>=12'} - - '@electron/notarize@2.5.0': - resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} - engines: {node: '>= 10.0.0'} - - '@electron/osx-sign@1.3.3': - resolution: {integrity: sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==} - engines: {node: '>=12.0.0'} - hasBin: true - - '@electron/rebuild@4.0.1': - resolution: {integrity: sha512-iMGXb6Ib7H/Q3v+BKZJoETgF9g6KMNZVbsO4b7Dmpgb5qTFqyFTzqW9F3TOSHdybv2vKYKzSS9OiZL+dcJb+1Q==} - engines: {node: '>=22.12.0'} - hasBin: true - - '@electron/universal@2.0.3': - resolution: {integrity: sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==} - engines: {node: '>=16.4'} - - '@electron/windows-sign@1.2.2': - resolution: {integrity: sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==} - engines: {node: '>=14.14'} - hasBin: true - - '@emnapi/core@1.8.1': - resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} - - '@emnapi/runtime@1.8.1': - resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} - - '@emnapi/wasi-threads@1.1.0': - resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - - '@emotion/babel-plugin@11.13.5': - resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} - - '@emotion/cache@11.14.0': - resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} - - '@emotion/hash@0.9.2': - resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} - - '@emotion/memoize@0.9.0': - resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} - - '@emotion/react@11.14.0': - resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} - peerDependencies: - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - - '@emotion/serialize@1.3.3': - resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} - - '@emotion/sheet@1.4.0': - resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} - - '@emotion/unitless@0.10.0': - resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} - - '@emotion/use-insertion-effect-with-fallbacks@1.2.0': - resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} - peerDependencies: - react: '>=16.8.0' - - '@emotion/utils@1.4.2': - resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} - - '@emotion/weak-memoize@0.4.0': - resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - - '@esbuild/aix-ppc64@0.25.12': - resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.27.2': - resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.25.12': - resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.27.2': - resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.12': - resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.27.2': - resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.25.12': - resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.27.2': - resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.25.12': - resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.27.2': - resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.12': - resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.27.2': - resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.25.12': - resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.27.2': - resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.12': - resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.27.2': - resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.25.12': - resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.27.2': - resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.12': - resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.27.2': - resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.25.12': - resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.27.2': - resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.25.12': - resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.27.2': - resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.25.12': - resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.27.2': - resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.25.12': - resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.27.2': - resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.12': - resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.27.2': - resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.25.12': - resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.27.2': - resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.12': - resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.27.2': - resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.12': - resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-arm64@0.27.2': - resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.12': - resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.27.2': - resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.12': - resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-arm64@0.27.2': - resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.12': - resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.27.2': - resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.25.12': - resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/openharmony-arm64@0.27.2': - resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.25.12': - resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.27.2': - resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.12': - resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.27.2': - resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.12': - resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.27.2': - resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.12': - resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.27.2': - resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@exodus/bytes@1.8.0': - resolution: {integrity: sha512-8JPn18Bcp8Uo1T82gR8lh2guEOa5KKU/IEKvvdp0sgmi7coPBWf1Doi1EXsGZb2ehc8ym/StJCjffYV+ne7sXQ==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - peerDependencies: - '@exodus/crypto': ^1.0.0-rc.4 - peerDependenciesMeta: - '@exodus/crypto': - optional: true - - '@floating-ui/core@1.7.3': - resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} - - '@floating-ui/dom@1.7.4': - resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} - - '@floating-ui/react-dom@2.1.6': - resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@floating-ui/react@0.27.16': - resolution: {integrity: sha512-9O8N4SeG2z++TSM8QA/KTeKFBVCNEz/AGS7gWPJf6KFRzmRWixFRnCnkPHRDwSVZW6QPDO6uT0P2SpWNKCc9/g==} - peerDependencies: - react: '>=17.0.0' - react-dom: '>=17.0.0' - - '@floating-ui/utils@0.2.10': - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - - '@formatjs/ecma402-abstract@2.3.6': - resolution: {integrity: sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==} - - '@formatjs/fast-memoize@2.2.7': - resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==} - - '@formatjs/icu-messageformat-parser@2.11.4': - resolution: {integrity: sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==} - - '@formatjs/icu-skeleton-parser@1.8.16': - resolution: {integrity: sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==} - - '@formatjs/intl-localematcher@0.6.2': - resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==} - - '@hcaptcha/react-hcaptcha@2.0.1': - resolution: {integrity: sha512-SOm/YBN8TGEFrf18R3LLGJJz9dkzsSgi8WAaDZzjkk4sYIxM6CYLdjl9JreqF+sn8Z5N9PZDpixsey26PsdCBg==} - - '@img/colour@1.0.0': - resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} - engines: {node: '>=18'} - - '@img/sharp-darwin-arm64@0.34.5': - resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] - - '@img/sharp-darwin-x64@0.34.5': - resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-darwin-arm64@1.2.4': - resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} - cpu: [arm64] - os: [darwin] - - '@img/sharp-libvips-darwin-x64@1.2.4': - resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-linux-arm64@1.2.4': - resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} - cpu: [arm64] - os: [linux] - - '@img/sharp-libvips-linux-arm@1.2.4': - resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} - cpu: [arm] - os: [linux] - - '@img/sharp-libvips-linux-ppc64@1.2.4': - resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} - cpu: [ppc64] - os: [linux] - - '@img/sharp-libvips-linux-riscv64@1.2.4': - resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} - cpu: [riscv64] - os: [linux] - - '@img/sharp-libvips-linux-s390x@1.2.4': - resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} - cpu: [s390x] - os: [linux] - - '@img/sharp-libvips-linux-x64@1.2.4': - resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} - cpu: [x64] - os: [linux] - - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} - cpu: [arm64] - os: [linux] - - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} - cpu: [x64] - os: [linux] - - '@img/sharp-linux-arm64@0.34.5': - resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - - '@img/sharp-linux-arm@0.34.5': - resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] - - '@img/sharp-linux-ppc64@0.34.5': - resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ppc64] - os: [linux] - - '@img/sharp-linux-riscv64@0.34.5': - resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [riscv64] - os: [linux] - - '@img/sharp-linux-s390x@0.34.5': - resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] - os: [linux] - - '@img/sharp-linux-x64@0.34.5': - resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - - '@img/sharp-linuxmusl-arm64@0.34.5': - resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - - '@img/sharp-linuxmusl-x64@0.34.5': - resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - - '@img/sharp-wasm32@0.34.5': - resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - - '@img/sharp-win32-arm64@0.34.5': - resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [win32] - - '@img/sharp-win32-ia32@0.34.5': - resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] - - '@img/sharp-win32-x64@0.34.5': - resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] - - '@internationalized/date@3.10.1': - resolution: {integrity: sha512-oJrXtQiAXLvT9clCf1K4kxp3eKsQhIaZqxEyowkBcsvZDdZkbWrVmnGknxs5flTD0VGsxrxKgBCZty1EzoiMzA==} - - '@internationalized/message@3.1.8': - resolution: {integrity: sha512-Rwk3j/TlYZhn3HQ6PyXUV0XP9Uv42jqZGNegt0BXlxjE6G3+LwHjbQZAGHhCnCPdaA6Tvd3ma/7QzLlLkJxAWA==} - - '@internationalized/number@3.6.5': - resolution: {integrity: sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==} - - '@internationalized/string@3.2.7': - resolution: {integrity: sha512-D4OHBjrinH+PFZPvfCXvG28n2LSykWcJ7GIioQL+ok0LON15SdfoUssoHzzOUmVZLbRoREsQXVzA6r8JKsbP6A==} - - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.0': - resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} - engines: {node: 20 || >=22} - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} - - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.11': - resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - - '@jsonjoy.com/base64@1.1.2': - resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/buffers@1.2.1': - resolution: {integrity: sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/codegen@1.0.0': - resolution: {integrity: sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/json-pack@1.21.0': - resolution: {integrity: sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/json-pointer@1.0.2': - resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/util@1.9.0': - resolution: {integrity: sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@leichtgewicht/ip-codec@2.0.5': - resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - - '@lingui/babel-plugin-extract-messages@5.7.0': - resolution: {integrity: sha512-kTRw/cr4crwKim2mAd4f5dHUQtIWK1ydN3Ga5FHb5hYgPhfK9egzykVCIEb/N10TfwwLUjSzNZXmTlCiLrgTLw==} - engines: {node: '>=20.0.0'} - - '@lingui/babel-plugin-lingui-macro@5.7.0': - resolution: {integrity: sha512-LoyRpvcocdKfkfill3VOYtyDYclnrB+c/IOS0D0i+xmBvNDjtG28gOVU81brg2w07Hzi6TKhNf3+YSi2UXsILQ==} - engines: {node: '>=20.0.0'} - peerDependencies: - babel-plugin-macros: 2 || 3 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - - '@lingui/cli@5.7.0': - resolution: {integrity: sha512-606EuwTvenumOfNRF9JoV1G3JIZyWQldQV+rgkUozmaiEQT+3xuTr6K2IOSBfJZoICG2jwrnMT8ifWr08BAICg==} - engines: {node: '>=20.0.0'} - hasBin: true - - '@lingui/conf@5.7.0': - resolution: {integrity: sha512-O0TWVfR99H+7SUI4pYGNkCUU1t2WcIwgDTTX3VKq6wH3A+P90QyAJLOXj+/s0JVkc1I37EL23Wtca5QkFBLtOg==} - engines: {node: '>=20.0.0'} - - '@lingui/core@5.7.0': - resolution: {integrity: sha512-eEQCFqjcwCn2lEHsH/I0koMKfwCJFTKG3Bnx6tkVuYmpfmgagbSMKIMot0WFY9gzafKHGsrvZrNDNT4OwdxDIQ==} - engines: {node: '>=20.0.0'} - peerDependencies: - '@lingui/babel-plugin-lingui-macro': 5.7.0 - babel-plugin-macros: 2 || 3 - peerDependenciesMeta: - '@lingui/babel-plugin-lingui-macro': - optional: true - babel-plugin-macros: - optional: true - - '@lingui/format-po@5.7.0': - resolution: {integrity: sha512-n2UX7T7N58O8HhcmM6RAVgxM3egloF0AM16VQdMPEKpZiTm8CDN5O3ovJu7ophsbfLp9iKZcbGd+QypZY671+Q==} - engines: {node: '>=20.0.0'} - - '@lingui/message-utils@5.7.0': - resolution: {integrity: sha512-yJKzPjJCLz8EkjqExxEBrioiKZtgxgLubOwzjSiZ8n1omuoyeRAqdKkmeOP/fPW2QpkQv33qLqfLtBhrIVJkeg==} - engines: {node: '>=20.0.0'} - - '@lingui/react@5.7.0': - resolution: {integrity: sha512-pz9Gh3JYe4KQTmgebjqUCwEYEsl4V0cwVXFo1jxXCESDc40cuOwGIkdHxj7kfBtfJBdsFSzAPs9UVDDd/Ovpzg==} - engines: {node: '>=20.0.0'} - peerDependencies: - '@lingui/babel-plugin-lingui-macro': 5.7.0 - babel-plugin-macros: 2 || 3 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@lingui/babel-plugin-lingui-macro': - optional: true - babel-plugin-macros: - optional: true - - '@lingui/swc-plugin@5.9.0': - resolution: {integrity: sha512-Lsm7pSAW7HdUpfDFi6E4G6iEvJzyeUwq8s5ubgU0akHBMzKp6FSt/EsjBcYIpGQoLZ173VECF/Mjqo/JmQmBDg==} - peerDependencies: - '@lingui/core': '5' - '@swc/core': '*' - next: '*' - peerDependenciesMeta: - '@swc/core': - optional: true - next: - optional: true - - '@livekit/components-core@0.12.12': - resolution: {integrity: sha512-DQ+lOAMPvum37Ta4lQLETxQe7ZxhivI78ZfE4nnWP0AcnwNByNR2vVLp9VGvw577HmvgHEkbjBbGBJBSZEBEZA==} - engines: {node: '>=18'} - peerDependencies: - livekit-client: ^2.15.14 - tslib: ^2.6.2 - - '@livekit/components-react@2.9.17': - resolution: {integrity: sha512-5rEsISFzGIsvC2G6dOq/w1PbHLIH5P7kZBnvNt5OD2TOA3tsW2z/idsFP3y1Pb9VBv7QmobEqPOmQzqHTH64uA==} - engines: {node: '>=18'} - peerDependencies: - '@livekit/krisp-noise-filter': ^0.2.12 || ^0.3.0 - livekit-client: ^2.15.14 - react: '>=18' - react-dom: '>=18' - tslib: ^2.6.2 - peerDependenciesMeta: - '@livekit/krisp-noise-filter': - optional: true - - '@livekit/mutex@1.1.1': - resolution: {integrity: sha512-EsshAucklmpuUAfkABPxJNhzj9v2sG7JuzFDL4ML1oJQSV14sqrpTYnsaOudMAw9yOaW53NU3QQTlUQoRs4czw==} - - '@livekit/protocol@1.42.2': - resolution: {integrity: sha512-0jeCwoMJKcwsZICg5S6RZM4xhJoF78qMvQELjACJQn6/VB+jmiySQKOSELTXvPBVafHfEbMlqxUw2UR1jTXs2g==} - - '@malept/cross-spawn-promise@2.0.0': - resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} - engines: {node: '>= 12.13.0'} - - '@malept/flatpak-bundler@0.4.0': - resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} - engines: {node: '>= 10.0.0'} - - '@marsidev/react-turnstile@1.4.1': - resolution: {integrity: sha512-1jE0IjvB8z+q1NFRs3149gXzXwIzXQWqQjn9fmAr13BiE3RYLWck5Me6flHYE90shW5L12Jkm6R1peS1OnA9oQ==} - peerDependencies: - react: ^17.0.2 || ^18.0.0 || ^19.0 - react-dom: ^17.0.2 || ^18.0.0 || ^19.0 - - '@messageformat/parser@5.1.1': - resolution: {integrity: sha512-3p0YRGCcTUCYvBKLIxtDDyrJ0YijGIwrTRu1DT8gIviIDZru8H23+FkY6MJBzM1n9n20CiM4VeDYuBsrrwnLjg==} - - '@module-federation/error-codes@0.21.4': - resolution: {integrity: sha512-ClpL5MereWNXh+EgDjz7w4RrC1JlisQTvXDa1gLxpviHafzNDfdViVmuhi9xXVuj+EYo8KU70Y999KHhk9424Q==} - - '@module-federation/runtime-core@0.21.4': - resolution: {integrity: sha512-SGpmoOLGNxZofpTOk6Lxb2ewaoz5wMi93AFYuuJB04HTVcngEK+baNeUZ2D/xewrqNIJoMY6f5maUjVfIIBPUA==} - - '@module-federation/runtime-tools@0.21.4': - resolution: {integrity: sha512-RzFKaL0DIjSmkn76KZRfzfB6dD07cvID84950jlNQgdyoQFUGkqD80L6rIpVCJTY/R7LzR3aQjHnoqmq4JPo3w==} - - '@module-federation/runtime@0.21.4': - resolution: {integrity: sha512-wgvGqryurVEvkicufJmTG0ZehynCeNLklv8kIk5BLIsWYSddZAE+xe4xov1kgH5fIJQAoQNkRauFFjVNlHoAkA==} - - '@module-federation/sdk@0.21.4': - resolution: {integrity: sha512-tzvhOh/oAfX++6zCDDxuvioHY4Jurf8vcfoCbKFxusjmyKr32GPbwFDazUP+OPhYCc3dvaa9oWU6X/qpUBLfJw==} - - '@module-federation/webpack-bundler-runtime@0.21.4': - resolution: {integrity: sha512-dusmR3uPnQh9u9ChQo3M+GLOuGFthfvnh7WitF/a1eoeTfRmXqnMFsXtZCUK+f/uXf+64874Zj/bhAgbBcVHZA==} - - '@napi-rs/wasm-runtime@1.0.7': - resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} - - '@napi-rs/wasm-runtime@1.1.1': - resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@npmcli/agent@3.0.0': - resolution: {integrity: sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==} - engines: {node: ^18.17.0 || >=20.5.0} - - '@npmcli/fs@4.0.0': - resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==} - engines: {node: ^18.17.0 || >=20.5.0} - - '@oxc-resolver/binding-android-arm-eabi@11.16.3': - resolution: {integrity: sha512-CVyWHu6ACDqDcJxR4nmGiG8vDF4TISJHqRNzac5z/gPQycs/QrP/1pDsJBy0MD7jSw8nVq2E5WqeHQKabBG/Jg==} - cpu: [arm] - os: [android] - - '@oxc-resolver/binding-android-arm64@11.16.3': - resolution: {integrity: sha512-tTIoB7plLeh2o6Ay7NnV5CJb6QUXdxI7Shnsp2ECrLSV81k+oVE3WXYrQSh4ltWL75i0OgU5Bj3bsuyg5SMepw==} - cpu: [arm64] - os: [android] - - '@oxc-resolver/binding-darwin-arm64@11.16.3': - resolution: {integrity: sha512-OXKVH7uwYd3Rbw1s2yJZd6/w+6b01iaokZubYhDAq4tOYArr+YCS+lr81q1hsTPPRZeIsWE+rJLulmf1qHdYZA==} - cpu: [arm64] - os: [darwin] - - '@oxc-resolver/binding-darwin-x64@11.16.3': - resolution: {integrity: sha512-WwjQ4WdnCxVYZYd3e3oY5XbV3JeLy9pPMK+eQQ2m8DtqUtbxnvPpAYC2Knv/2bS6q5JiktqOVJ2Hfia3OSo0/A==} - cpu: [x64] - os: [darwin] - - '@oxc-resolver/binding-freebsd-x64@11.16.3': - resolution: {integrity: sha512-4OHKFGJBBfOnuJnelbCS4eBorI6cj54FUxcZJwEXPeoLc8yzORBoJ2w+fQbwjlQcUUZLEg92uGhKCRiUoqznjg==} - cpu: [x64] - os: [freebsd] - - '@oxc-resolver/binding-linux-arm-gnueabihf@11.16.3': - resolution: {integrity: sha512-OM3W0NLt9u7uKwG/yZbeXABansZC0oZeDF1nKgvcZoRw4/Yak6/l4S0onBfDFeYMY94eYeAt2bl60e30lgsb5A==} - cpu: [arm] - os: [linux] - - '@oxc-resolver/binding-linux-arm-musleabihf@11.16.3': - resolution: {integrity: sha512-MRs7D7i1t7ACsAdTuP81gLZES918EpBmiUyEl8fu302yQB+4L7L7z0Ui8BWnthUTQd3nAU9dXvENLK/SqRVH8A==} - cpu: [arm] - os: [linux] - - '@oxc-resolver/binding-linux-arm64-gnu@11.16.3': - resolution: {integrity: sha512-0eVYZxSceNqGADzhlV4ZRqkHF0fjWxRXQOB7Qwl5y1gN/XYUDvMfip+ngtzj4dM7zQT4U97hUhJ7PUKSy/JIGQ==} - cpu: [arm64] - os: [linux] - - '@oxc-resolver/binding-linux-arm64-musl@11.16.3': - resolution: {integrity: sha512-B1BvLeZbgDdVN0FvU40l5Q7lej8310WlabCBaouk8jY7H7xbI8phtomTtk3Efmevgfy5hImaQJu6++OmcFb2NQ==} - cpu: [arm64] - os: [linux] - - '@oxc-resolver/binding-linux-ppc64-gnu@11.16.3': - resolution: {integrity: sha512-q7khglic3Jqak7uDgA3MFnjDeI7krQT595GDZpvFq785fmFYSx8rlTkoHzmhQtUisYtl4XG7WUscwsoidFUI4w==} - cpu: [ppc64] - os: [linux] - - '@oxc-resolver/binding-linux-riscv64-gnu@11.16.3': - resolution: {integrity: sha512-aFRNmQNPzDgQEbw2s3c8yJYRimacSDI+u9df8rn5nSKzTVitHmbEpZqfxpwNLCKIuLSNmozHR1z1OT+oZVeYqg==} - cpu: [riscv64] - os: [linux] - - '@oxc-resolver/binding-linux-riscv64-musl@11.16.3': - resolution: {integrity: sha512-vZI85SvSMADcEL9G1TIrV0Rlkc1fY5Mup0DdlVC5EHPysZB4hXXHpr+h09pjlK5y+5om5foIzDRxE1baUCaWOA==} - cpu: [riscv64] - os: [linux] - - '@oxc-resolver/binding-linux-s390x-gnu@11.16.3': - resolution: {integrity: sha512-xiLBnaUlddFEzRHiHiSGEMbkg8EwZY6VD8F+3GfnFsiK3xg/4boaUV2bwXd+nUzl3UDQOMW1QcZJ4jJSb0qiJA==} - cpu: [s390x] - os: [linux] - - '@oxc-resolver/binding-linux-x64-gnu@11.16.3': - resolution: {integrity: sha512-6y0b05wIazJJgwu7yU/AYGFswzQQudYJBOb/otDhiDacp1+6ye8egoxx63iVo9lSpDbipL++54AJQFlcOHCB+g==} - cpu: [x64] - os: [linux] - - '@oxc-resolver/binding-linux-x64-musl@11.16.3': - resolution: {integrity: sha512-RmMgwuMa42c9logS7Pjprf5KCp8J1a1bFiuBFtG9/+yMu0BhY2t+0VR/um7pwtkNFvIQqAVh6gDOg/PnoKRcdQ==} - cpu: [x64] - os: [linux] - - '@oxc-resolver/binding-openharmony-arm64@11.16.3': - resolution: {integrity: sha512-/7AYRkjjW7xu1nrHgWUFy99Duj4/ydOBVaHtODie9/M6fFngo+8uQDFFnzmr4q//sd/cchIerISp/8CQ5TsqIA==} - cpu: [arm64] - os: [openharmony] - - '@oxc-resolver/binding-wasm32-wasi@11.16.3': - resolution: {integrity: sha512-urM6aIPbi5di4BSlnpd/TWtDJgG6RD06HvLBuNM+qOYuFtY1/xPbzQ2LanBI2ycpqIoIZwsChyplALwAMdyfCQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@oxc-resolver/binding-win32-arm64-msvc@11.16.3': - resolution: {integrity: sha512-QuvLqGKf7frxWHQ5TnrcY0C/hJpANsaez99Q4dAk1hen7lDTD4FBPtBzPnntLFXeaVG3PnSmnVjlv0vMILwU7Q==} - cpu: [arm64] - os: [win32] - - '@oxc-resolver/binding-win32-ia32-msvc@11.16.3': - resolution: {integrity: sha512-QR/witXK6BmYTlEP8CCjC5fxeG5U9A6a50pNpC1nLnhAcJjtzFG8KcQ5etVy/XvCLiDc7fReaAWRNWtCaIhM8Q==} - cpu: [ia32] - os: [win32] - - '@oxc-resolver/binding-win32-x64-msvc@11.16.3': - resolution: {integrity: sha512-bFuJRKOscsDAEZ/a8BezcTMAe2BQ/OBRfuMLFUuINfTR5qGVcm4a3xBIrQVepBaPxFj16SJdRjGe05vDiwZmFw==} - cpu: [x64] - os: [win32] - - '@phosphor-icons/react@2.1.10': - resolution: {integrity: sha512-vt8Tvq8GLjheAZZYa+YG/pW7HDbov8El/MANW8pOAz4eGxrwhnbfrQZq0Cp4q8zBEu8NIhHdnr+r8thnfRSNYA==} - engines: {node: '>=10'} - peerDependencies: - react: '>= 16.8' - react-dom: '>= 16.8' - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@polka/url@1.0.0-next.29': - resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - - '@radix-ui/primitive@1.1.3': - resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} - - '@radix-ui/react-checkbox@1.3.3': - resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-collection@1.1.7': - resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-compose-refs@1.1.2': - resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-context@1.1.2': - resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-direction@1.1.1': - resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-id@1.1.1': - resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-presence@1.1.5': - resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-primitive@2.1.3': - resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-radio-group@1.3.8': - resolution: {integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-roving-focus@1.1.11': - resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-slot@1.2.3': - resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-switch@1.2.6': - resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-use-callback-ref@1.1.1': - resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-controllable-state@1.2.2': - resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-effect-event@0.0.2': - resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-layout-effect@1.1.1': - resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-previous@1.1.1': - resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-size@1.1.1': - resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@react-aria/autocomplete@3.0.0-rc.4': - resolution: {integrity: sha512-4bMMVNaCuYDZX9HM4ZNSAImZMcL/orwhLLe818+lyzmSrvGmW9h433PZxTolb0d+FnJVfn1MDY0zEWLiyI86GA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/breadcrumbs@3.5.30': - resolution: {integrity: sha512-DZymglA70SwvDJA7GB147sUexvdDy6vWcriGrlEHhMMzBLhGB30I5J96R4pPzURLxXISrWFH56KC5rRgIqsqqg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/button@3.14.3': - resolution: {integrity: sha512-iJTuEECs9im7TwrCRZ0dvuwp8Gao0+I1IuYs1LQvJQgKLpgRH2/6jAiqb2bdAcoAjdbaMs7Xe0xUwURpVNkEyA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/calendar@3.9.3': - resolution: {integrity: sha512-F12UQ4zd8GIxpJxs9GAHzDD9Lby2hESHm0LF5tjsYBIOBJc5K7ICeeE5UqLMBPzgnEP5nfh1CKS8KhCB0mS7PA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/checkbox@3.16.3': - resolution: {integrity: sha512-2p1haCUtERo5XavBAWNaX//dryNVnOOWfSKyzLs4UiCZR/NL0ttN+Nu/i445q0ipjLqZ6bBJtx0g0NNrubbU7Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/collections@3.0.1': - resolution: {integrity: sha512-C8KBQGXzVefR4I+hQmkb10t09Jt1Ivl12qgQKshmT0hV2yBESXEYWMZUxV4ggOgWDreAgCtr+Ho3X+7MzBQT8Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/color@3.1.3': - resolution: {integrity: sha512-EHzsFbqzFrO1/3irEa8E8wawlQg7hRd4/Jscvl9zhplAcrWFd6L5TWl8463Z6h0J6zN1eH9T2QDEn6rivDLkkg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/combobox@3.14.1': - resolution: {integrity: sha512-wuP/4UQrGsYXLw1Gk8G/FcnUlHuoViA9G6w3LhtUgu5Q3E5DvASJalxej3NtyYU+4w4epD1gJidzosAL0rf8Ug==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/datepicker@3.15.3': - resolution: {integrity: sha512-0KkLYeLs+IubHXb879n8dzzKU/NWcxC9DXtv7M/ofL7vAvMSTmaceYJcMW+2gGYhJVpyYz8B6bk0W7kTxgB3jg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/dialog@3.5.32': - resolution: {integrity: sha512-2puMjsJS2FtB8LiFuQDAdBSU4dt3lqdJn4FWt/8GL6l91RZBqp2Dnm5Obuee6rV2duNJZcSAUWsQZ/S1iW8Y2g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/disclosure@3.1.1': - resolution: {integrity: sha512-4k8Y3CZEl+Qhou0fH7Sj7BbzvwAfi1JDL+hG7U20ZL5+MJ/VbDYuYX2gYK2KqdlbeuuzGcov3ZFQbyIVHMY+/A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/dnd@3.11.4': - resolution: {integrity: sha512-dBrnM33Kmk76F+Pknh2WfSLIX4dsYwFzWJUIABJCPmPc80hTG0so7mfqH45ba759/6ERMfXXoodZPLtypOjYPg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/focus@3.21.3': - resolution: {integrity: sha512-FsquWvjSCwC2/sBk4b+OqJyONETUIXQ2vM0YdPAuC+QFQh2DT6TIBo6dOZVSezlhudDla69xFBd6JvCFq1AbUw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/form@3.1.3': - resolution: {integrity: sha512-HAKnPjMiqTxoGLVbfZyGYcZQ1uu6aSeCi9ODmtZuKM5DWZZnTUjDmM1i2L6IXvF+d1kjyApyJC7VTbKZ8AI77g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/grid@3.14.6': - resolution: {integrity: sha512-xagBKHNPu4Ovt/I5He7T/oIEq82MDMSrRi5Sw3oxSCwwtZpv+7eyKRSrFz9vrNUzNgWCcx5VHLE660bLdeVNDQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/gridlist@3.14.2': - resolution: {integrity: sha512-c51ip0bc/lKppfrPNFHbWu1n/r0NHd9Xl114904cDxuRcElJ3H/V/3e3U9HyDy+4xioiXZIdZ75CNxtEoTmrxw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/i18n@3.12.14': - resolution: {integrity: sha512-zYvs1FlLamFD49uneX3i5mPHrAsB3OjVpSWApTcPw8ydxOaphQDp/Q1aqrbcxlrQCcxZdXWHuvLlbkNR4+8jzw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/interactions@3.26.0': - resolution: {integrity: sha512-AAEcHiltjfbmP1i9iaVw34Mb7kbkiHpYdqieWufldh4aplWgsF11YQZOfaCJW4QoR2ML4Zzoa9nfFwLXA52R7Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/label@3.7.23': - resolution: {integrity: sha512-dRkuCJfsyBHPTq3WOJVHNRvNyQL4cRRLELmjYfUX9/jQKIsUW2l71YnUHZTRCSn2ZjhdAcdwq96fNcQo0hncBQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/landmark@3.0.8': - resolution: {integrity: sha512-xuY8kYxCrF9C0h0Pj2lZHoxCidNfQ/SrkYWXuiN+LuBTJGCmPVif93gt7TklQ0rKJ+pKJsUgh8AC0pgwI3QP7A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/link@3.8.7': - resolution: {integrity: sha512-TOC6Hf/x3N0P8SLR1KD/dGiJ9PmwAq8H57RiwbFbdINnG/HIvIQr5MxGTjwBvOOWcJu9brgWL5HkQaZK7Q/4Yw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/listbox@3.15.1': - resolution: {integrity: sha512-81iDLFhmPXvLOtkI0SKzgrngfzwfR2o9oFDAYRfpYCOxgT7jjh8SaB4wCteJXRiMwymRGmgyTvD4yxWTluEeXA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/live-announcer@3.4.4': - resolution: {integrity: sha512-PTTBIjNRnrdJOIRTDGNifY2d//kA7GUAwRFJNOEwSNG4FW+Bq9awqLiflw0JkpyB0VNIwou6lqKPHZVLsGWOXA==} - - '@react-aria/menu@3.19.4': - resolution: {integrity: sha512-0A0DUEkEvZynmaD3zktHavM+EmgZSR/ht+g1ExS2jXe73CegA+dbSRfPl9eIKcHxaRrWOV96qMj2pTf0yWTBDg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/meter@3.4.28': - resolution: {integrity: sha512-elACITUBOf4Dp+BQ2aIgHIe58fjWYjspxhVcE5BMiqePktOfRkpb9ESj8nWcNXO8eqCYwrFJpElHvXkjYLWemw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/numberfield@3.12.3': - resolution: {integrity: sha512-70LRXWPEuj2X8mbQXUx6l6We+RGs49Kb+2eUiSSLArHK4RvTWJWEfSjHL5IHHJ+j2AkbORdryD7SR3gcXSX+5w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/overlays@3.31.0': - resolution: {integrity: sha512-Vq41X1s8XheGIhGbbuqRJslJEX08qmMVX//dwuBaFX9T18mMR04tumKOMxp8Lz+vqwdGLvjNUYDMcgolL+AMjw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/progress@3.4.28': - resolution: {integrity: sha512-3NUUAu+rwf1M7pau9WFkrxe/PlBPiqCl/1maGU7iufVveHnz+SVVqXdNkjYx+WkPE0ViwG86Zx6OU4AYJ1pjNw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/radio@3.12.3': - resolution: {integrity: sha512-noucVX++9J3VYWg7dB+r09NVX8UZSR1TWUMCbT/MffzhltOsmiLJVvgJ0uEeeVRuu3+ZM63jOshrzG89anX4TQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/searchfield@3.8.10': - resolution: {integrity: sha512-1wMoSjXoekcETC4ZP5AUcWoaK96FssVuF9MgqQNqE5VnauQDjZBpPCfz6GSZwRHTGwoqb7CI4iEi7433kd50xg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/select@3.17.1': - resolution: {integrity: sha512-jPMuaSp+4SbdE9G5UrrTer2CPbbUnUSLd8I2wgRgGcyk3wFw9DtnUNfms+UBA/2SrVnAEJ6KCQAI0oiMK2m+tQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/selection@3.27.0': - resolution: {integrity: sha512-4zgreuCu4QM4t2U7aF3mbMvIKCEkTEo6h6nGJvbyZALZ/eFtLTvUiV8/5CGDJRLGvgMvi3XxUeF9PZbpk5nMJg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/separator@3.4.14': - resolution: {integrity: sha512-a32OB5HMAmXEdExyDvsadsnlmNcVxxpx3tt+Jxxl6H9CHsLO+Ak077KGFJteGVg4bTfhWGAgczOsnvIioR88xw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/slider@3.8.3': - resolution: {integrity: sha512-tOZVH+wLt3ik0C3wyuXqHL9fvnQ5S+/tHMYB7z8aZV5cEe36Gt4efBILphlA7ChkL/RvpHGK2AGpEGxvuEQIuQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/spinbutton@3.7.0': - resolution: {integrity: sha512-FOyH94BZp+jNhUJuZqXSubQZDNQEJyW/J19/gwCxQvQvxAP79dhDFshh1UtrL4EjbjIflmaOes+sH/XEHUnJVA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/ssr@3.9.10': - resolution: {integrity: sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==} - engines: {node: '>= 12'} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/switch@3.7.9': - resolution: {integrity: sha512-RZtuFRXews0PBx8Fc2R/kqaIARD5YIM5uYtmwnWfY7y5bEsBGONxp0d+m2vDyY7yk+VNpVFBdwewY9GbZmH1CA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/table@3.17.9': - resolution: {integrity: sha512-Jby561E1YfzoRgtp+RQuhDz4vnxlcqol9RTgQQ7FWXC2IcN9Pny1COU34LkA1cL9VeB9LJ0+qfMhGw4aAwaUmw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/tabs@3.10.9': - resolution: {integrity: sha512-2+FNd7Ohr3hrEgYrKdZW0FWbgybzTVZft6tw95oQ2+9PnjdDVdtzHliI+8HY8jzb4hTf4bU7O8n+s/HBlCBSIw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/tag@3.7.3': - resolution: {integrity: sha512-fonqGFxhpnlIDOz3u38y4+MG5wyAef9+oDybsCKaJ57K+D4BTvSmpGBemN/mcaxdabnYfyhasCm0H91Q9XRcCA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/textfield@3.18.3': - resolution: {integrity: sha512-ehiSHOKuKCwPdxFe7wGE0QJlSeeJR4iJuH+OdsYVlZzYbl9J/uAdGbpsj/zPhNtBo1g/Td76U8TtTlYRZ8lUZw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/toast@3.0.9': - resolution: {integrity: sha512-2sRitczXl5VEwyq97o8TVvq3bIqLA7EfA7dhDPkYlHGa4T1vzKkhNqgkskKd9+Tw7gqeFRFjnokh+es9jkM11g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/toggle@3.12.3': - resolution: {integrity: sha512-mciUbeVP99fRObnH5qLFrkKXX+5VKeV6BhFJlmz1eo3ltR/0xZKnUcycA2CGzmqtB70w09CAhr8NMEnpNH8dwQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/toolbar@3.0.0-beta.22': - resolution: {integrity: sha512-Q1gOj6N4vzvpGrIoNAxpUudEQP82UgQACENH/bcH8FnEMbSP7DHvVfDhj7GTU6ldMXO2cjqLhiidoUK53gkCiA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/tooltip@3.9.0': - resolution: {integrity: sha512-2O1DXEV8/+DeUq9dIlAfaNa7lSG+7FCZDuF+sNiPYnZM6tgFOrsId26uMF5EuwpVfOvXSSGnq0+6Ma2On7mZPg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/tree@3.1.5': - resolution: {integrity: sha512-FAq7pAhRVrWU0U/8QbQIJfBqHuoCD+F9rR9ruoM3oL0vVIZxVN57ak/dhyge3EGlraTl9vzFi6IRceXiMuk5kg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/utils@3.32.0': - resolution: {integrity: sha512-/7Rud06+HVBIlTwmwmJa2W8xVtgxgzm0+kLbuFooZRzKDON6hhozS1dOMR/YLMxyJOaYOTpImcP4vRR9gL1hEg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/virtualizer@4.1.11': - resolution: {integrity: sha512-eYL//bX11Aox4Eh1BSZFX4I/4EdyVVWLjmpW+Y5qy4WajNrowjiuJJM7Fp1rQBlOAVuz0KbaDmFhiU3Z3rWjsw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/visually-hidden@3.8.29': - resolution: {integrity: sha512-1joCP+MHBLd+YA6Gb08nMFfDBhOF0Kh1gR1SA8zoxEB5RMfQEEkufIB8k0GGwvHGSCK3gFyO8UAVsD0+rRYEyg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-dnd/asap@5.0.2': - resolution: {integrity: sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==} - - '@react-dnd/invariant@4.0.2': - resolution: {integrity: sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==} - - '@react-dnd/shallowequal@4.0.2': - resolution: {integrity: sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==} - - '@react-stately/autocomplete@3.0.0-beta.4': - resolution: {integrity: sha512-K2Uy7XEdseFvgwRQ8CyrYEHMupjVKEszddOapP8deNz4hntYvT1aRm0m+sKa5Kl/4kvg9c/3NZpQcrky/vRZIg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/calendar@3.9.1': - resolution: {integrity: sha512-q0Q8fivpQa1rcLg5daUVxwVj1smCp1VnpX9A5Q5PkI9lH9x+xdS0Y6eOqb8Ih3TKBDkx9/oEZonOX7RYNIzSig==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/checkbox@3.7.3': - resolution: {integrity: sha512-ve2K+uWT+NRM1JMn+tkWJDP2iBAaWvbZ0TbSXs371IUcTWaNW61HygZ+UFOB/frAZGloazEKGqAsX5XjFpgB9w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/collections@3.12.8': - resolution: {integrity: sha512-AceJYLLXt1Y2XIcOPi6LEJSs4G/ubeYW3LqOCQbhfIgMaNqKfQMIfagDnPeJX9FVmPFSlgoCBxb1pTJW2vjCAQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/color@3.9.3': - resolution: {integrity: sha512-H5lQgl07upsI7+cxTwYo639ziDDG1DFgOtq5pmC4Nxi8uNl8sR/8YeLaYuxyJiVkj2VLHBYRQ3+JcxrdduFvPQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/combobox@3.12.1': - resolution: {integrity: sha512-RwfTTYgKJ9raIY+7grZ5DbfVRSO5pDjo/ur2VN/28LZzM0eOQrLFQ00vpBmY7/R64sHRpcXLDxpz5cqpKCdvTw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/data@3.15.0': - resolution: {integrity: sha512-ocP39NQQkrbtHVCPsqltNncpEHaONyYX/8s2UK9xeLRc+55NtDI2RZDKTUf/mi6H2SHxzEwLMQH8hWtEwC55mQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/datepicker@3.15.3': - resolution: {integrity: sha512-RDYoz1R/EkCyxHYewb58T7DngU3gl6CnQL7xiWiDlayPnstGaanoQ3yCZGJaIQwR8PrKdNbQwXF9NlSmj8iCOw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/disclosure@3.0.9': - resolution: {integrity: sha512-M3HKsXqdzYKQf1TpnQRLZ6+/b8E3Nba3oOuY0OW5NnM5dZWSnXuj8foBQJT118FdLgMjpfBdPIkUvnaGiDCs5w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/dnd@3.7.2': - resolution: {integrity: sha512-tr5nNgrLMn5GV308K1f010XUZ2j8CApqHrrcjg5fa2AnpO2gECcOf+UEnAvoFNUsvknje4iPX8y0/0No2ZHsgA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/flags@3.1.2': - resolution: {integrity: sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==} - - '@react-stately/form@3.2.2': - resolution: {integrity: sha512-soAheOd7oaTO6eNs6LXnfn0tTqvOoe3zN9FvtIhhrErKz9XPc5sUmh3QWwR45+zKbitOi1HOjfA/gifKhZcfWw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/grid@3.11.7': - resolution: {integrity: sha512-SqzBSxUTFZKLZicfXDK+M0A3gh07AYK1pmU/otcq2cjZ0nSC4CceKijQ2GBZnl+YGcGHI1RgkhpLP6ZioMYctQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/layout@4.5.2': - resolution: {integrity: sha512-quAzYkshApkv1vChz2NXBaLTC7ihJUmv3ijqJBHCkZSY6qq+1qnc4aGespDF1f3mPhmpGswTFGXFImFTAYfi5g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/list@3.13.2': - resolution: {integrity: sha512-dGFALuQWNNOkv7W12qSsXLF4mJHLeWeK2hVvdyj4SI8Vxku+BOfaVKuW3sn3mNiixI1dM/7FY2ip4kK+kv27vw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/menu@3.9.9': - resolution: {integrity: sha512-moW5JANxMxPilfR0SygpCWCZe7Ef09oadgzTZthRymNRv0PXVS9ad4wd1EkwuMvPH/n0uZLZE2s8hNyFDgyqPA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/numberfield@3.10.3': - resolution: {integrity: sha512-40g/oyVcWoEaLqkr61KuHZzQVLLXFi3oa2K8XLnb6o+859SM4TX3XPNqL6eNQjXSKoJO5Hlgpqhee9j+VDbGog==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/overlays@3.6.21': - resolution: {integrity: sha512-7f25H1PS2g+SNvuWPEW30pSGqYNHxesCP4w+1RcV/XV1oQI7oP5Ji2WfI0QsJEFc9wP/ZO1pyjHNKpfLI3O88g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/radio@3.11.3': - resolution: {integrity: sha512-8+Cy0azV1aBWKcBfGHi3nBa285lAS6XhmVw2LfEwxq8DeVKTbJAaCHHwvDoclxDiOAnqzE0pio0QMD8rYISt9g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/searchfield@3.5.17': - resolution: {integrity: sha512-/KExpJt6EGyuLxy/PRQJlETQxJGw8tRxVws6qF1lankN49Os2UhFEWi7ogbMCOWN67gIgevhZRdzmJnuov6BEQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/select@3.9.0': - resolution: {integrity: sha512-eNE33zVYpVdCPKRPGYyViN3LnEq82e1wjBIrs9T7Vo4EBnJeT57pqMZpalTPk7qsA+861t14Qrj7GnUd+YbEXw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/selection@3.20.7': - resolution: {integrity: sha512-NkiRsNCfORBIHNF1bCavh4Vvj+Yd5NffE10iXtaFuhF249NlxLynJZmkcVCqNP9taC2pBIHX00+9tcBgxhG+mA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/slider@3.7.3': - resolution: {integrity: sha512-9QGnQNXFAH52BzxtU7weyOV/VV7/so6uIvE8VOHfc6QR3GMBM/kJvqBCTWZfQ0pxDIsRagBQDD/tjB09ixTOzg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/table@3.15.2': - resolution: {integrity: sha512-vgEArBN5ocqsQdeORBj6xk8acu5iFnd/CyXEQKl0R5RyuYuw0ms8UmFHvs8Fv1HONehPYg+XR4QPliDFPX8R9A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/tabs@3.8.7': - resolution: {integrity: sha512-ETZEzg7s9F2SCvisZ2cCpLx6XBHqdvVgDGU5l3C3s9zBKBr6lgyLFt61IdGW8XXZRUvw4mMGT6tGQbXeGvR0Wg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/toast@3.1.2': - resolution: {integrity: sha512-HiInm7bck32khFBHZThTQaAF6e6/qm57F4mYRWdTq8IVeGDzpkbUYibnLxRhk0UZ5ybc6me+nqqPkG/lVmM42Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/toggle@3.9.3': - resolution: {integrity: sha512-G6aA/aTnid/6dQ9dxNEd7/JqzRmVkVYYpOAP+l02hepiuSmFwLu4nE98i4YFBQqFZ5b4l01gMrS90JGL7HrNmw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/tooltip@3.5.9': - resolution: {integrity: sha512-YwqtxFqQFfJtbeh+axHVGAfz9XHf73UaBndHxSbVM/T5c1PfI2yOB39T2FOU5fskZ2VMO3qTDhiXmFgGbGYSfQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/tree@3.9.4': - resolution: {integrity: sha512-Re1fdEiR0hHPcEda+7ecw+52lgGfFW0MAEDzFg9I6J/t8STQSP+1YC0VVVkv2xRrkLbKLPqggNKgmD8nggecnw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/utils@3.11.0': - resolution: {integrity: sha512-8LZpYowJ9eZmmYLpudbo/eclIRnbhWIJZ994ncmlKlouNzKohtM8qTC6B1w1pwUbiwGdUoyzLuQbeaIor5Dvcw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/virtualizer@4.4.4': - resolution: {integrity: sha512-ri8giqXSZOrznZDCCOE4U36wSkOhy+hrFK7yo/YVcpxTqqp3d3eisfKMqbDsgqBW+XTHycTU/xeAf0u9NqrfpQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/autocomplete@3.0.0-alpha.36': - resolution: {integrity: sha512-J/wYkXom9zmEX/xuGjKrqMco9sf5AcByNXOgGAx82LMlk0jFcViggVjIYo/Qzr0TmDeTWyy++r1N59POI6179g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/breadcrumbs@3.7.17': - resolution: {integrity: sha512-IhvVTcfli5o/UDlGACXxjlor2afGlMQA8pNR3faH0bBUay1Fmm3IWktVw9Xwmk+KraV2RTAg9e+E6p8DOQZfiw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/button@3.14.1': - resolution: {integrity: sha512-D8C4IEwKB7zEtiWYVJ3WE/5HDcWlze9mLWQ5hfsBfpePyWCgO3bT/+wjb/7pJvcAocrkXo90QrMm85LcpBtrpg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/calendar@3.8.1': - resolution: {integrity: sha512-B0UuitMP7YkArBAQldwSZSNL2WwazNGCG+lp6yEDj831NrH9e36/jcjv1rObQ9ZMS6uDX9LXu5C8V5RFwGQabA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/checkbox@3.10.2': - resolution: {integrity: sha512-ktPkl6ZfIdGS1tIaGSU/2S5Agf2NvXI9qAgtdMDNva0oLyAZ4RLQb6WecPvofw1J7YKXu0VA5Mu7nlX+FM2weQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/color@3.1.2': - resolution: {integrity: sha512-NP0TAY3j4tlMztOp/bBfMlPwC9AQKTjSiTFmc2oQNkx5M4sl3QpPqFPosdt7jZ8M4nItvfCWZrlZGjST4SB83A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/combobox@3.13.10': - resolution: {integrity: sha512-Wo4iix++ID6JzoH9eD7ddGUlirQiGpN/VQc3iFjnaTXiJ/cj3v+1oGsDGCZZTklTVeUMU7SRBfMhMgxHHIYLXA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/datepicker@3.13.3': - resolution: {integrity: sha512-OTRa3banGxcUQKRTLUzr0zTVUMUL+Az1BWARCYQ+8Z/dlkYXYUW0fnS5I0pUEqihgai15KxiY13U0gAqbNSfcA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/dialog@3.5.22': - resolution: {integrity: sha512-smSvzOcqKE196rWk0oqJDnz+ox5JM5+OT0PmmJXiUD4q7P5g32O6W5Bg7hMIFUI9clBtngo8kLaX2iMg+GqAzg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/form@3.7.16': - resolution: {integrity: sha512-Sb7KJoWEaQ/e4XIY+xRbjKvbP1luome98ZXevpD+zVSyGjEcfIroebizP6K1yMHCWP/043xH6GUkgEqWPoVGjg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/grid@3.3.6': - resolution: {integrity: sha512-vIZJlYTii2n1We9nAugXwM2wpcpsC6JigJFBd6vGhStRdRWRoU4yv1Gc98Usbx0FQ/J7GLVIgeG8+1VMTKBdxw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/link@3.6.5': - resolution: {integrity: sha512-+I2s3XWBEvLrzts0GnNeA84mUkwo+a7kLUWoaJkW0TOBDG7my95HFYxF9WnqKye7NgpOkCqz4s3oW96xPdIniQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/listbox@3.7.4': - resolution: {integrity: sha512-p4YEpTl/VQGrqVE8GIfqTS5LkT5jtjDTbVeZgrkPnX/fiPhsfbTPiZ6g0FNap4+aOGJFGEEZUv2q4vx+rCORww==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/menu@3.10.5': - resolution: {integrity: sha512-HBTrKll2hm0VKJNM4ubIv1L9MNo8JuOnm2G3M+wXvb6EYIyDNxxJkhjsqsGpUXJdAOSkacHBDcNh2HsZABNX4A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/meter@3.4.13': - resolution: {integrity: sha512-EiarfbpHcvmeyXvXcr6XLaHkNHuGc4g7fBVEiDPwssFJKKfbUzqnnknDxPjyspqUVRcXC08CokS98J1jYobqDg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/numberfield@3.8.16': - resolution: {integrity: sha512-945F0GsD7K2T293YXhap+2Runl3tZWbnhadXVHFWLbqIKKONZFSZTfLKxQcbFr+bQXr2uh1bVJhYcOiS1l5M+A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/overlays@3.9.2': - resolution: {integrity: sha512-Q0cRPcBGzNGmC8dBuHyoPR7N3057KTS5g+vZfQ53k8WwmilXBtemFJPLsogJbspuewQ/QJ3o2HYsp2pne7/iNw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/progress@3.5.16': - resolution: {integrity: sha512-I9tSdCFfvQ7gHJtm90VAKgwdTWXQgVNvLRStEc0z9h+bXBxdvZb+QuiRPERChwFQ9VkK4p4rDqaFo69nDqWkpw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/radio@3.9.2': - resolution: {integrity: sha512-3UcJXu37JrTkRyP4GJPDBU7NmDTInrEdOe+bVzA1j4EegzdkJmLBkLg5cLDAbpiEHB+xIsvbJdx6dxeMuc+H3g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/searchfield@3.6.6': - resolution: {integrity: sha512-cl3itr/fk7wbIQc2Gz5Ie8aVeUmPjVX/mRGS5/EXlmzycAKNYTvqf2mlxwObLndtLISmt7IgNjRRhbUUDI8Ang==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/select@3.12.0': - resolution: {integrity: sha512-tM3mEbQNotvCJs1gYRFyIeXmXrIBSBLGw7feCIaYSO45IyjCGv8NZwpQWjoKPaWo3GpbHfHMNlWlq3v5QQPIXw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/shared@3.32.1': - resolution: {integrity: sha512-famxyD5emrGGpFuUlgOP6fVW2h/ZaF405G5KDi3zPHzyjAWys/8W6NAVJtNbkCkhedmvL0xOhvt8feGXyXaw5w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/slider@3.8.2': - resolution: {integrity: sha512-MQYZP76OEOYe7/yA2To+Dl0LNb0cKKnvh5JtvNvDnAvEprn1RuLiay8Oi/rTtXmc2KmBa4VdTcsXsmkbbkeN2Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/switch@3.5.15': - resolution: {integrity: sha512-r/ouGWQmIeHyYSP1e5luET+oiR7N7cLrAlWsrAfYRWHxqXOSNQloQnZJ3PLHrKFT02fsrQhx2rHaK2LfKeyN3A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/table@3.13.4': - resolution: {integrity: sha512-I/DYiZQl6aNbMmjk90J9SOhkzVDZvyA3Vn3wMWCiajkMNjvubFhTfda5DDf2SgFP5l0Yh6TGGH5XumRv9LqL5Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/tabs@3.3.20': - resolution: {integrity: sha512-Kjq4PypapdMOVPAQgaFIKH65Kr3YnRvaxBGd6RYizTsqYImQhXoGj6B4lBpjYy4KhfRd4dYS82frHqTGKmBYiA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/textfield@3.12.6': - resolution: {integrity: sha512-hpEVKE+M3uUkTjw2WrX1NrH/B3rqDJFUa+ViNK2eVranLY4ZwFqbqaYXSzHupOF3ecSjJJv2C103JrwFvx6TPQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/tooltip@3.5.0': - resolution: {integrity: sha512-o/m1wlKlOD2sLb9vZLWdVkD5LFLHBMLGeeK/bhyUtp0IEdUeKy0ZRTS7pa/A50trov9RvdbzLK79xG8nKNxHew==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@rollup/rollup-android-arm-eabi@4.55.1': - resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.55.1': - resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.55.1': - resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.55.1': - resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.55.1': - resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.55.1': - resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.55.1': - resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.55.1': - resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.55.1': - resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.55.1': - resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loong64-gnu@4.55.1': - resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-loong64-musl@4.55.1': - resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-ppc64-gnu@4.55.1': - resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-ppc64-musl@4.55.1': - resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.55.1': - resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-musl@4.55.1': - resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.55.1': - resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.55.1': - resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.55.1': - resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-openbsd-x64@4.55.1': - resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.55.1': - resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.55.1': - resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.55.1': - resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.55.1': - resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.55.1': - resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==} - cpu: [x64] - os: [win32] - - '@rspack/binding-darwin-arm64@1.6.2': - resolution: {integrity: sha512-hiXPOTUhtPALaNq6Vd7xilBwQktboriCa51eXQQBtfz4hCzTSP5fsyWgw8AwwsKab6nsEJFt1Hrde6H89TjuDw==} - cpu: [arm64] - os: [darwin] - - '@rspack/binding-darwin-x64@1.6.2': - resolution: {integrity: sha512-bWDcRkV5JWjTt6dITUz4YzTdB1rV7XHs/Ir7kOxnngOt1VoQb3M/nCskCrhd0C47Rm2yJsfCdCK+/ZhUMbfuHw==} - cpu: [x64] - os: [darwin] - - '@rspack/binding-linux-arm64-gnu@1.6.2': - resolution: {integrity: sha512-0GSl74OJhPDRyql9OfXvUegLfBKyTbN3IIz/tQG+IdflhcQ7cir3SAmhQM1NI1ZpNcYFOviJ41NmmQYZfzBClg==} - cpu: [arm64] - os: [linux] - - '@rspack/binding-linux-arm64-musl@1.6.2': - resolution: {integrity: sha512-/czYFB/zL7iOdiKY0pcn3El0zd6ICUsmw/unKIPbQmhLWg16IZQBZgjBHaPmMEmZ/cqypV8sj0jxA9bzfJ2wNA==} - cpu: [arm64] - os: [linux] - - '@rspack/binding-linux-x64-gnu@1.6.2': - resolution: {integrity: sha512-LF5w1eoo6TmhHiyy/SpliqcQ4LchKnjj7Qi4POGZLqxUMdxuWQ2w3VAVQSAUg5mYyw4jhqa/TuhnWJixk7iiAQ==} - cpu: [x64] - os: [linux] - - '@rspack/binding-linux-x64-musl@1.6.2': - resolution: {integrity: sha512-gy3LfveQA/1UgVoHPVtEC7/DZ0U4g/BsGC8pbQDTcbN7ycsPOYKdhtMaGRr0dsPjt/lX/RmjLy5svArOTJSikA==} - cpu: [x64] - os: [linux] - - '@rspack/binding-wasm32-wasi@1.6.2': - resolution: {integrity: sha512-FpkpsXKdPs2cXiy0GkoJq6cj8u7j7h+mMKbIyk9gQCq1bHb09QXxot2JhV/rR22H9GzlQ9kJHhKCUOplz07cNQ==} - cpu: [wasm32] - - '@rspack/binding-win32-arm64-msvc@1.6.2': - resolution: {integrity: sha512-Bqsd5s4cbobS30MAGeuJgslfmsmKqTNzRK8OoOoKVovrPZGZpOVu1RDUerLtSLAoQEt0huhuh+SHShNAZvdNSg==} - cpu: [arm64] - os: [win32] - - '@rspack/binding-win32-ia32-msvc@1.6.2': - resolution: {integrity: sha512-f/94Igk1SBKGI03LCaEGYtjXgDqV7wdUbNDEb0dIvn6//WH1ISi0Wa6yHFtEZho4hj4inKEHVPJvtx11T6TdmQ==} - cpu: [ia32] - os: [win32] - - '@rspack/binding-win32-x64-msvc@1.6.2': - resolution: {integrity: sha512-hv/Ab1Y0PYhZUEsjrP3g/8pZeR9TkGMGKtGtEpbnBD1D5c8XIqkT43sp0dCIuo6iZDojSh2AGDTPahAU4ChkAg==} - cpu: [x64] - os: [win32] - - '@rspack/binding@1.6.2': - resolution: {integrity: sha512-kYP5xfPbyl0uc27odbSMpGSvPeouF2im5CSkNKMB7t5bNpNrdpvrog9OHJNWZB0BdgxxqFPWP0DCScGqlq7+4A==} - - '@rspack/cli@1.6.2': - resolution: {integrity: sha512-z0oF5eOvLNpRumVSUsI61jV7fojnt0YE66N3rmSl8gIqiwS0pw/yCAEy5LLJLzrahzziCYFWjd5Ab3pD9z7vZg==} - hasBin: true - peerDependencies: - '@rspack/core': 1.6.2 - - '@rspack/core@1.6.2': - resolution: {integrity: sha512-H9dqsiWH+paMAggKB9tNJhzkc7HHAjkKxLFKkfpL+eDvVPZ9n8x6DZGNj4TjqRC1XiHO0guQcBxykuy4CcGZKw==} - engines: {node: '>=18.12.0'} - peerDependencies: - '@swc/helpers': '>=0.5.1' - peerDependenciesMeta: - '@swc/helpers': - optional: true - - '@rspack/dev-server@1.1.5': - resolution: {integrity: sha512-cwz0qc6iqqoJhyWqxP7ZqE2wyYNHkBMQUXxoQ0tNoZ4YNRkDyQ4HVJ/3oPSmMKbvJk/iJ16u7xZmwG6sK47q/A==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@rspack/core': 1.6.2 - - '@rspack/lite-tapable@1.0.1': - resolution: {integrity: sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==} - engines: {node: '>=16.0.0'} - - '@rspack/plugin-react-refresh@1.6.0': - resolution: {integrity: sha512-OO53gkrte/Ty4iRXxxM6lkwPGxsSsupFKdrPFnjwFIYrPvFLjeolAl5cTx+FzO5hYygJiGnw7iEKTmD+ptxqDA==} - peerDependencies: - react-refresh: '>=0.10.0 <1.0.0' - webpack-hot-middleware: 2.x - peerDependenciesMeta: - webpack-hot-middleware: - optional: true - - '@simplewebauthn/browser@13.2.2': - resolution: {integrity: sha512-FNW1oLQpTJyqG5kkDg5ZsotvWgmBaC6jCHR7Ej0qUNep36Wl9tj2eZu7J5rP+uhXgHaLk+QQ3lqcw2vS5MX1IA==} - - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - - '@sindresorhus/is@4.6.0': - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} - - '@standard-schema/spec@1.1.0': - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - - '@svgr/babel-plugin-add-jsx-attribute@8.0.0': - resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0': - resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0': - resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0': - resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-svg-dynamic-title@8.0.0': - resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-svg-em-dimensions@8.0.0': - resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-transform-react-native-svg@8.1.0': - resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-transform-svg-component@8.0.0': - resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} - engines: {node: '>=12'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-preset@8.1.0': - resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/core@8.1.0': - resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==} - engines: {node: '>=14'} - - '@svgr/hast-util-to-babel-ast@8.0.0': - resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} - engines: {node: '>=14'} - - '@svgr/plugin-jsx@8.1.0': - resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==} - engines: {node: '>=14'} - peerDependencies: - '@svgr/core': '*' - - '@svgr/plugin-svgo@8.1.0': - resolution: {integrity: sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==} - engines: {node: '>=14'} - peerDependencies: - '@svgr/core': '*' - - '@svgr/webpack@8.1.0': - resolution: {integrity: sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==} - engines: {node: '>=14'} - - '@swc/helpers@0.5.18': - resolution: {integrity: sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==} - - '@szmarczak/http-timer@4.0.6': - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} - - '@trysound/sax@0.2.0': - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - - '@types/body-parser@1.19.6': - resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} - - '@types/bonjour@3.5.13': - resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} - - '@types/cacheable-request@6.0.3': - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - - '@types/chai@5.2.3': - resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} - - '@types/combokeys@2.4.9': - resolution: {integrity: sha512-Hwk0Z6XltfTKCxCPh0RVbg42PZQDsObrgFSh3MTmrcPPKj1iJByAdT1bmrfzmYr/66bjdC3c/T0b1c3cgS3Vjw==} - - '@types/connect-history-api-fallback@1.5.4': - resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} - - '@types/connect@3.4.38': - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - - '@types/deep-eql@4.0.2': - resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - - '@types/dom-mediacapture-record@1.0.22': - resolution: {integrity: sha512-mUMZLK3NvwRLcAAT9qmcK+9p7tpU2FHdDsntR3YI4+GY88XrgG4XiE7u1Q2LAN2/FZOz/tdMDC3GQCR4T8nFuw==} - - '@types/dom-mediacapture-transform@0.1.11': - resolution: {integrity: sha512-Y2p+nGf1bF2XMttBnsVPHUWzRRZzqUoJAKmiP10b5umnO6DDrWI0BrGDJy1pOHoOULVmGSfFNkQrAlC5dcj6nQ==} - - '@types/dom-webcodecs@0.1.18': - resolution: {integrity: sha512-vAvE8C9DGWR+tkb19xyjk1TSUlJ7RUzzp4a9Anu7mwBT+fpyePWK1UxmH14tMO5zHmrnrRIMg5NutnnDztLxgg==} - - '@types/electron-squirrel-startup@1.0.2': - resolution: {integrity: sha512-AzxnvBzNh8K/0SmxMmZtpJf1/IWoGXLP+pQDuUaVkPyotI8ryvAtBSqgxR/qOSvxWHYWrxkeNsJ+Ca5xOuUxJQ==} - - '@types/eslint-scope@3.7.7': - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - '@types/express-serve-static-core@4.19.8': - resolution: {integrity: sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==} - - '@types/express@4.17.25': - resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==} - - '@types/fs-extra@9.0.13': - resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} - - '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - - '@types/http-errors@2.0.5': - resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} - - '@types/http-proxy@1.17.17': - resolution: {integrity: sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==} - - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - - '@types/jsdom@27.0.0': - resolution: {integrity: sha512-NZyFl/PViwKzdEkQg96gtnB8wm+1ljhdDay9ahn4hgb+SfVtPCbm3TlmDUFXTA+MGN3CijicnMhG18SI5H3rFw==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/keyv@3.1.4': - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - - '@types/lodash@4.17.23': - resolution: {integrity: sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==} - - '@types/luxon@3.7.1': - resolution: {integrity: sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==} - - '@types/mime@1.3.5': - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - - '@types/node-forge@1.3.14': - resolution: {integrity: sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==} - - '@types/node@20.19.30': - resolution: {integrity: sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==} - - '@types/node@22.19.7': - resolution: {integrity: sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw==} - - '@types/node@25.0.9': - resolution: {integrity: sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==} - - '@types/parse-json@4.0.2': - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - - '@types/plist@3.0.5': - resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} - - '@types/qrcode@1.5.6': - resolution: {integrity: sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==} - - '@types/qs@6.14.0': - resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} - - '@types/range-parser@1.2.7': - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - - '@types/react-dom@19.2.3': - resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} - peerDependencies: - '@types/react': ^19.2.0 - - '@types/react-transition-group@4.4.12': - resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} - peerDependencies: - '@types/react': '*' - - '@types/react@19.2.8': - resolution: {integrity: sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==} - - '@types/responselike@1.0.3': - resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} - - '@types/retry@0.12.2': - resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} - - '@types/send@0.17.6': - resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==} - - '@types/send@1.2.1': - resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==} - - '@types/serve-index@1.9.4': - resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} - - '@types/serve-static@1.15.10': - resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==} - - '@types/sockjs@0.3.36': - resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} - - '@types/tough-cookie@4.0.5': - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - - '@types/verror@1.10.11': - resolution: {integrity: sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==} - - '@types/whatwg-mimetype@3.0.2': - resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==} - - '@types/ws@8.18.1': - resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@17.0.35': - resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} - - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - - '@vitest/coverage-v8@4.0.17': - resolution: {integrity: sha512-/6zU2FLGg0jsd+ePZcwHRy3+WpNTBBhDY56P4JTRqUN/Dp6CvOEa9HrikcQ4KfV2b2kAHUFB4dl1SuocWXSFEw==} - peerDependencies: - '@vitest/browser': 4.0.17 - vitest: 4.0.17 - peerDependenciesMeta: - '@vitest/browser': - optional: true - - '@vitest/expect@4.0.17': - resolution: {integrity: sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ==} - - '@vitest/mocker@4.0.17': - resolution: {integrity: sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ==} - peerDependencies: - msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - - '@vitest/pretty-format@4.0.17': - resolution: {integrity: sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw==} - - '@vitest/runner@4.0.17': - resolution: {integrity: sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ==} - - '@vitest/snapshot@4.0.17': - resolution: {integrity: sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ==} - - '@vitest/spy@4.0.17': - resolution: {integrity: sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew==} - - '@vitest/utils@4.0.17': - resolution: {integrity: sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w==} - - '@webassemblyjs/ast@1.14.1': - resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} - - '@webassemblyjs/floating-point-hex-parser@1.13.2': - resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} - - '@webassemblyjs/helper-api-error@1.13.2': - resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} - - '@webassemblyjs/helper-buffer@1.14.1': - resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} - - '@webassemblyjs/helper-numbers@1.13.2': - resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} - - '@webassemblyjs/helper-wasm-bytecode@1.13.2': - resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} - - '@webassemblyjs/helper-wasm-section@1.14.1': - resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} - - '@webassemblyjs/ieee754@1.13.2': - resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} - - '@webassemblyjs/leb128@1.13.2': - resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} - - '@webassemblyjs/utf8@1.13.2': - resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} - - '@webassemblyjs/wasm-edit@1.14.1': - resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} - - '@webassemblyjs/wasm-gen@1.14.1': - resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} - - '@webassemblyjs/wasm-opt@1.14.1': - resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} - - '@webassemblyjs/wasm-parser@1.14.1': - resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} - - '@webassemblyjs/wast-printer@1.14.1': - resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} - - '@xmldom/xmldom@0.8.11': - resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} - engines: {node: '>=10.0.0'} - - '@xtuc/ieee754@1.2.0': - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - - '@xtuc/long@4.2.2': - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - - abbrev@3.0.1: - resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} - engines: {node: ^18.17.0 || >=20.5.0} - - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - - acorn-import-phases@1.0.4: - resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} - engines: {node: '>=10.13.0'} - peerDependencies: - acorn: ^8.14.0 - - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} - - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} - hasBin: true - - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - - ajv-formats@2.1.1: - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - 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.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - - 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.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - app-builder-bin@5.0.0-alpha.12: - resolution: {integrity: sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==} - - app-builder-lib@26.4.0: - resolution: {integrity: sha512-Uas6hNe99KzP3xPWxh5LGlH8kWIVjZixzmMJHNB9+6hPyDpjc7NQMkVgi16rQDdpCFy22ZU5sp8ow7tvjeMgYQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - dmg-builder: 26.4.0 - electron-builder-squirrel-windows: 26.4.0 - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - - assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} - - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - - ast-v8-to-istanbul@0.3.10: - resolution: {integrity: sha512-p4K7vMz2ZSk3wN8l5o3y2bJAoZXT3VuJI5OLTATY/01CYWumWvwkUw0SqDBnNq6IiTO3qDa1eSQDibAV8g7XOQ==} - - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - - async-exit-hook@2.0.1: - resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} - engines: {node: '>=0.12.0'} - - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - - autoprefixer@10.4.23: - resolution: {integrity: sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - - axios@0.26.1: - resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} - - babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} - - babel-plugin-polyfill-corejs2@0.4.14: - resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-corejs3@0.13.0: - resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-regenerator@0.6.5: - resolution: {integrity: sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==} - 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==} - - baseline-browser-mapping@2.9.14: - resolution: {integrity: sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==} - hasBin: true - - batch@0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - - bidi-js@1.0.3: - resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - binary-install@1.1.2: - resolution: {integrity: sha512-ZS2cqFHPZOy4wLxvzqfQvDjCOifn+7uCPqNmYRIBM/03+yllON+4fNnsD0VJdW0p97y+E+dTRNPStWNqMBq+9g==} - engines: {node: '>=10'} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - - body-parser@1.20.4: - resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - bonjour-service@1.3.0: - resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} - - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - - boolean@3.2.0: - resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - - bowser@2.13.1: - resolution: {integrity: sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==} - - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - browserslist@4.28.1: - resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - - builder-util-runtime@9.5.1: - resolution: {integrity: sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==} - engines: {node: '>=12.0.0'} - - builder-util@26.3.4: - resolution: {integrity: sha512-aRn88mYMktHxzdqDMF6Ayj0rKoX+ZogJ75Ck7RrIqbY/ad0HBvnS2xA4uHfzrGr5D2aLL3vU6OBEH4p0KMV2XQ==} - - bundle-name@4.1.0: - resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} - engines: {node: '>=18'} - - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - - cacache@19.0.1: - resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} - - cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - caniuse-lite@1.0.30001764: - resolution: {integrity: sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==} - - chai@6.2.2: - resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} - engines: {node: '>=18'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chokidar@3.5.1: - resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} - engines: {node: '>= 8.10.0'} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - chokidar@5.0.0: - resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} - engines: {node: '>= 20.19.0'} - - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - - chrome-trace-event@1.0.4: - resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} - engines: {node: '>=6.0'} - - chromium-pickle-js@0.2.0: - resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==} - - ci-info@4.3.1: - resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} - engines: {node: '>=8'} - - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - - cli-table@0.3.11: - resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==} - engines: {node: '>= 0.2.0'} - - cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} - - client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - - cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - - colorjs.io@0.6.0: - resolution: {integrity: sha512-NgaccdK0ajJ9DPfa5OrIFRfTm4XILboOuqKV6tu9UonREcve+RUilZR3cdo7BbG+xIHFbDv4CxTE4M2vsj7nqw==} - - colors@1.0.3: - resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} - engines: {node: '>=0.1.90'} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - combokeys@3.0.1: - resolution: {integrity: sha512-5nAfaLZ3oO3kA+/xdoL7t197UJTz2WWidyH3BBeU6hqHtvyFERICd0y3DQFrQkJFTKBrtUDck/xCLLoFpnjaCw==} - - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - - commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - - commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - - commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - - compare-version@0.1.2: - resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} - engines: {node: '>=0.10.0'} - - compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - - compression@1.8.1: - resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} - 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'} - - 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.7: - resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} - - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - - core-js-compat@3.47.0: - resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==} - - core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - - cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - - cosmiconfig@8.3.6: - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - - crc@3.8.0: - resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} - - cross-dirname@0.1.0: - resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - css-blank-pseudo@8.0.1: - resolution: {integrity: sha512-C5B2e5hCM4llrQkUms+KnWEMVW8K1n2XvX9G7ppfMZJQ7KAS/4rNnkP1Cs+HhWriOz1mWWTMFD4j1J7s31Dgug==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - css-has-pseudo@8.0.0: - resolution: {integrity: sha512-Uz/bsHRbOeir/5Oeuz85tq/yLJLxX+3dpoRdjNTshs6jjqwUg8XaEZGDd0ci3fw7l53Srw0EkJ8mYan0eW5uGQ==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - css-prefers-color-scheme@11.0.0: - resolution: {integrity: sha512-fv0mgtwUhh2m9iio3Kxc2CkrogjIaRdMFaaqyzSFdii17JF4cfPyMNX72B15ZW2Nrr/NZUpxI4dec1VMHYJvdw==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - css-select@5.2.2: - resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - - css-tree@2.2.1: - resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - - css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - - css-tree@3.1.0: - resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - - css-what@6.2.2: - resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} - engines: {node: '>= 6'} - - cssdb@8.7.0: - resolution: {integrity: sha512-UxiWVpV953ENHqAKjKRPZHNDfRo3uOymvO5Ef7MFCWlenaohkYj7PTO7WCBdjZm8z/aDZd6rXyUIlwZ0AjyFSg==} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - csso@5.0.5: - resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - - cssstyle@5.3.7: - resolution: {integrity: sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==} - engines: {node: '>=20'} - - csstype@3.2.3: - resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - - data-urls@6.0.0: - resolution: {integrity: sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==} - engines: {node: '>=20'} - - date-fns@3.6.0: - resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} - - debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - - decimal.js@10.6.0: - resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} - - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - - 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.1: - resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} - engines: {node: '>=18'} - - default-browser@5.4.0: - resolution: {integrity: sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==} - engines: {node: '>=18'} - - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - 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'} - - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} - - detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - - dijkstrajs@1.0.3: - resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} - - dir-compare@4.2.0: - resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} - - dmg-builder@26.4.0: - resolution: {integrity: sha512-ce4Ogns4VMeisIuCSK0C62umG0lFy012jd8LMZ6w/veHUeX4fqfDrGe+HTWALAEwK6JwKP+dhPvizhArSOsFbg==} - - dmg-license@1.0.11: - resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} - engines: {node: '>=8'} - os: [darwin] - hasBin: true - - dnd-core@16.0.1: - resolution: {integrity: sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==} - - dnd-multi-backend@9.0.0: - resolution: {integrity: sha512-BCUFes4x0LA2bZyEZFHeQzZ1CBZo6PB40zMOG/gNgICxjAZfN2jHgISowqkR1isdx/msUNzscxEb17SP7yc4KQ==} - peerDependencies: - dnd-core: ^16.0.1 - - dns-packet@5.6.1: - resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} - engines: {node: '>=6'} - - dom-helpers@5.2.1: - resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} - - 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.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - - dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - - dotenv-expand@11.0.7: - resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} - engines: {node: '>=12'} - - dotenv@16.6.1: - resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} - engines: {node: '>=12'} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - - electron-builder-squirrel-windows@26.4.0: - resolution: {integrity: sha512-7dvalY38xBzWNaoOJ4sqy2aGIEpl2S1gLPkkB0MHu1Hu5xKQ82il1mKSFlXs6fLpXUso/NmyjdHGlSHDRoG8/w==} - - electron-builder@26.4.0: - resolution: {integrity: sha512-FCUqvdq2AULL+Db2SUGgjOYTbrgkPxZtCjqIZGnjH9p29pTWyesQqBIfvQBKa6ewqde87aWl49n/WyI/NyUBog==} - engines: {node: '>=14.0.0'} - hasBin: true - - electron-log@5.4.3: - resolution: {integrity: sha512-sOUsM3LjZdugatazSQ/XTyNcw8dfvH1SYhXWiJyfYodAAKOZdHs0txPiLDXFzOZbhXgAgshQkshH2ccq0feyLQ==} - engines: {node: '>= 14'} - - electron-publish@26.3.4: - resolution: {integrity: sha512-5/ouDPb73SkKuay2EXisPG60LTFTMNHWo2WLrK5GDphnWK9UC+yzYrzVeydj078Yk4WUXi0+TaaZsNd6Zt5k/A==} - - electron-squirrel-startup@1.0.1: - resolution: {integrity: sha512-sTfFIHGku+7PsHLJ7v0dRcZNkALrV+YEozINTW8X1nM//e5O3L+rfYuvSW00lmGHnYmUjARZulD8F2V8ISI9RA==} - - electron-to-chromium@1.5.267: - resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} - - electron-winstaller@5.4.0: - resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} - engines: {node: '>=8.0.0'} - - electron@39.2.7: - resolution: {integrity: sha512-KU0uFS6LSTh4aOIC3miolcbizOFP7N1M46VTYVfqIgFiuA2ilfNaOHLDS9tCMvwwHRowAsvqBrh9NgMXcTOHCQ==} - engines: {node: '>= 12.20.55'} - hasBin: true - - emoji-regex@10.6.0: - resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - - end-of-stream@1.4.5: - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - - enhanced-resolve@5.18.4: - resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==} - engines: {node: '>=10.13.0'} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} - - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - - err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - - error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - - error-stack-parser@2.1.4: - resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - - es-module-lexer@2.0.0: - resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es6-error@4.1.1: - resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - - esbuild@0.25.12: - resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} - engines: {node: '>=18'} - hasBin: true - - esbuild@0.27.2: - resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} - engines: {node: '>=18'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - esm@3.2.25: - resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} - engines: {node: '>=6'} - - 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@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - - 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'} - - exit-hook@4.0.0: - resolution: {integrity: sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==} - engines: {node: '>=18'} - - expect-type@1.3.0: - resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} - engines: {node: '>=12.0.0'} - - exponential-backoff@3.1.3: - resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} - - express@4.22.1: - resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} - engines: {node: '>= 0.10.0'} - - extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - - extsprintf@1.4.1: - resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} - engines: {'0': node >=0.6.0} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-uri@3.1.0: - resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - - fastq@1.20.1: - resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} - - favico.js@0.3.10: - resolution: {integrity: sha512-S5KvqAOczRjlyjQPPZPSlUEybBkfBgKosY/pzTIxkvKgigB+DkITvIEI70dxQarbv4PZ+UD77QzquCAcU/6LHQ==} - - faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} - - fd-package-json@2.0.0: - resolution: {integrity: sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==} - - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - finalhandler@1.3.2: - resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} - engines: {node: '>= 0.8'} - - find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - - follow-redirects@1.15.11: - resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - - form-data@4.0.5: - resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} - engines: {node: '>= 6'} - - formatly@0.3.0: - resolution: {integrity: sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w==} - engines: {node: '>=18.3.0'} - hasBin: true - - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fraction.js@5.3.4: - resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} - - framer-motion@12.26.2: - resolution: {integrity: sha512-lflOQEdjquUi9sCg5Y1LrsZDlsjrHw7m0T9Yedvnk7Bnhqfkc89/Uha10J3CFhkL+TCZVCRw9eUGyM/lyYhXQA==} - peerDependencies: - '@emotion/is-prop-valid': '*' - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/is-prop-valid': - optional: true - react: - optional: true - react-dom: - optional: true - - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - - fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - - fs-extra@11.3.3: - resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} - engines: {node: '>=14.14'} - - fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} - - fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} - - fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - - fs-minipass@3.0.3: - resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - generic-names@4.0.0: - resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} - - 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-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - - get-tsconfig@4.13.0: - resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} - - github-url-to-object@4.0.6: - resolution: {integrity: sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-to-regex.js@1.2.0: - resolution: {integrity: sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - - glob@10.5.0: - resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} - hasBin: true - - glob@11.1.0: - resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} - engines: {node: 20 || >=22} - hasBin: true - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - global-agent@3.0.0: - resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} - engines: {node: '>=10.0'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - gzip-size@6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} - - handle-thing@2.0.1: - resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - - happy-dom@20.3.0: - resolution: {integrity: sha512-5qJbkqcvR8j/a4av5IWqqIWmEGf9dt6OhGMS6qxCgjSOBGzGa5XLoqg40OyD8XNzQ+g1g2zsXi10kjfpzYH55Q==} - engines: {node: '>=20.0.0'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - highlight.js@11.11.1: - resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} - engines: {node: '>=12.0.0'} - - hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - - hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} - - hpack.js@2.1.6: - resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} - - html-encoding-sniffer@6.0.0: - resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - - html-entities@2.6.0: - resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} - - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - - http-cache-semantics@4.2.0: - resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - - 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.1: - resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} - engines: {node: '>= 0.8'} - - http-parser-js@0.5.10: - resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==} - - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - - http-proxy-middleware@2.0.9: - resolution: {integrity: sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true - - http-proxy@1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} - - http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - hyperdyperid@1.2.0: - resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} - engines: {node: '>=10.18'} - - iconv-corefoundation@1.1.7: - resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} - engines: {node: ^8.11.2 || >=10} - os: [darwin] - - 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-replace-symbols@1.1.0: - resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} - - icss-utils@5.1.0: - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - idna-uts46-hx@6.1.0: - resolution: {integrity: sha512-gu7V78sYt3WnkiC8T6M07TlOj7TVt7ee2AmxD3UxDOkOZFxVYKUDUBtb/oTnhBanrtQKpi4Ixfo0/Y3rjCQ7Lg==} - engines: {node: '>=22.12.0'} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - intl-messageformat@10.7.18: - resolution: {integrity: sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==} - - ip-address@10.1.0: - resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} - engines: {node: '>= 12'} - - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - - ipaddr.js@2.3.0: - resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==} - engines: {node: '>= 10'} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - 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-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-network-error@1.3.0: - resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==} - engines: {node: '>=16'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-observable@2.1.0: - resolution: {integrity: sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw==} - engines: {node: '>=8'} - - is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - - is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - - is-there@4.5.2: - resolution: {integrity: sha512-ixMkfz3rtS1vEsLf0TjgjqUn96Q0ukpUVDMnPYVocJyTzu2G/QgEtqYddcHZawHO+R31cKVPggJmBLrm1vJCOg==} - - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - - is-url@1.2.4: - resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} - - 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'} - - isbinaryfile@5.0.7: - resolution: {integrity: sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==} - engines: {node: '>= 18.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'} - - istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - - istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - - istanbul-reports@3.2.0: - resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} - engines: {node: '>=8'} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jackspeak@4.1.1: - resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} - engines: {node: 20 || >=22} - - jake@10.9.4: - resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} - engines: {node: '>=10'} - hasBin: true - - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} - - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true - - jose@6.1.3: - resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} - - js-sha256@0.10.1: - resolution: {integrity: sha512-5obBtsz9301ULlsgggLg542s/jqtddfOpV5KJc4hajc9JV8GeY2gZHSVpYBn4nWqAUTJ9v+xwtbJ1mIBgIH5Vw==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} - hasBin: true - - jsdom@27.4.0: - resolution: {integrity: sha512-mjzqwWRD9Y1J1KUi7W97Gja1bwOOM5Ug0EZ6UDK3xS7j7mndrkwozHtSblfomlzyB4NepioNt+B2sOSzczVgtQ==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - peerDependencies: - canvas: ^3.0.0 - peerDependenciesMeta: - canvas: - optional: true - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - - json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - - katex@0.16.27: - resolution: {integrity: sha512-aeQoDkuRWSqQN6nSvVCEFvfXdqo1OQiCmmW1kc9xSdjutPv7BGO7pqY9sQRJpMOGrEdfDgF2TfRXe5eUAD2Waw==} - hasBin: true - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - launch-editor@2.12.0: - resolution: {integrity: sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==} - - lazy-val@1.0.5: - resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} - - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - - lightningcss-android-arm64@1.30.2: - resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [android] - - lightningcss-darwin-arm64@1.30.2: - resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - - lightningcss-darwin-x64@1.30.2: - resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - - lightningcss-freebsd-x64@1.30.2: - resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - - lightningcss-linux-arm-gnueabihf@1.30.2: - resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - - lightningcss-linux-arm64-gnu@1.30.2: - resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-arm64-musl@1.30.2: - resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-x64-gnu@1.30.2: - resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-linux-x64-musl@1.30.2: - resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-win32-arm64-msvc@1.30.2: - resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] - - lightningcss-win32-x64-msvc@1.30.2: - resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - - lightningcss@1.30.2: - resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} - engines: {node: '>= 12.0.0'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - livekit-client@2.17.0: - resolution: {integrity: sha512-BD1QUS44ancVTBdnAher0aO7DV5holFYH2lYradYT/HgXtn6R8xPyvtDAH3UH40jGcesDo9fEopCFwEdOgrIhg==} - peerDependencies: - '@types/dom-mediacapture-record': ^1 - - loader-runner@4.3.1: - resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} - engines: {node: '>=6.11.5'} - - loader-utils@3.3.1: - resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} - engines: {node: '>= 12.13.0'} - - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - - lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - - loglevel@1.9.1: - resolution: {integrity: sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==} - engines: {node: '>= 0.6.0'} - - loglevel@1.9.2: - resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} - engines: {node: '>= 0.6.0'} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - - lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - lru-cache@11.2.4: - resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==} - engines: {node: 20 || >=22} - - 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'} - - luxon@3.7.2: - resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} - engines: {node: '>=12'} - - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - - magicast@0.5.1: - resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==} - - make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} - - make-fetch-happen@14.0.3: - resolution: {integrity: sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - match-sorter@8.2.0: - resolution: {integrity: sha512-qRVB7wYMJXizAWR4TKo5UYwgW7oAVzA8V9jve0wGzRvV91ou9dcqL+/2gJtD0PZ/Pm2Fq6cVT4VHXHmDFVMGRA==} - - matcher@3.0.0: - resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} - engines: {node: '>=10'} - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - mdn-data@2.0.28: - resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} - - mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - - mdn-data@2.12.2: - resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} - - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - - memfs@4.52.0: - resolution: {integrity: sha512-dG5ZY1wUCPWhtl4M2mlc7Wx4OrMGtiI79axnScxwDoPR/25biQYrYm21OpKyZcnKv8pvWaX95SRtZgecZ84gFg==} - - memoize-one@6.0.0: - resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} - - merge-descriptors@1.0.3: - resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mime-types@3.0.2: - resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} - engines: {node: '>=18'} - - 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-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - - minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - - minimatch@10.1.1: - resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} - engines: {node: 20 || >=22} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - minipass-collect@2.0.1: - resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass-fetch@4.0.1: - resolution: {integrity: sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==} - engines: {node: ^18.17.0 || >=20.5.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@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'} - - minizlib@3.1.0: - resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} - engines: {node: '>= 18'} - - 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 - - mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - - mobx-persist-store@1.1.8: - resolution: {integrity: sha512-7SiLvang0POfGvfP69fzmppBKv36e0TNndKJT1UokZuLXt13CqF3PAxIcRacHqjTBe4ktmzDsh3DK+fbM6epNg==} - peerDependencies: - mobx: '*' - - mobx-react-lite@4.1.1: - resolution: {integrity: sha512-iUxiMpsvNraCKXU+yPotsOncNNmyeS2B5DKL+TL6Tar/xm+wwNJAubJmtRSeAoYawdZqwv8Z/+5nPRHeQxTiXg==} - peerDependencies: - mobx: ^6.9.0 - react: ^16.8.0 || ^17 || ^18 || ^19 - react-dom: '*' - react-native: '*' - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - - mobx@6.15.0: - resolution: {integrity: sha512-UczzB+0nnwGotYSgllfARAqWCJ5e/skuV2K/l+Zyck/H6pJIhLXuBnz+6vn2i211o7DtbE78HQtsYEKICHGI+g==} - - moo@0.5.2: - resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} - - motion-dom@12.26.2: - resolution: {integrity: sha512-KLMT1BroY8oKNeliA3JMNJ+nbCIsTKg6hJpDb4jtRAJ7nCKnnpg/LTq/NGqG90Limitz3kdAnAVXecdFVGlWTw==} - - motion-utils@12.24.10: - resolution: {integrity: sha512-x5TFgkCIP4pPsRLpKoI86jv/q8t8FQOiM/0E8QKBzfMozWHfkKap2gA1hOki+B5g3IsBNpxbUnfOum1+dgvYww==} - - motion@12.26.2: - resolution: {integrity: sha512-2Q6g0zK1gUJKhGT742DAe42LgietcdiJ3L3OcYAHCQaC1UkLnn6aC8S/obe4CxYTLAgid2asS1QdQ/blYfo5dw==} - peerDependencies: - '@emotion/is-prop-valid': '*' - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/is-prop-valid': - optional: true - react: - optional: true - react-dom: - optional: true - - mrmime@2.0.1: - resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} - engines: {node: '>=10'} - - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - multicast-dns@7.2.5: - resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - - negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} - - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} - - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - - no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - - node-abi@4.24.0: - resolution: {integrity: sha512-u2EC1CeNe25uVtX3EZbdQ275c74zdZmmpzrHEQh2aIYqoVjlglfUpOX9YY85x1nlBydEKDVaSmMNhR7N82Qj8A==} - engines: {node: '>=22.12.0'} - - node-addon-api@1.7.2: - resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} - - node-addon-api@7.1.1: - resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - - node-addon-api@8.5.0: - resolution: {integrity: sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==} - engines: {node: ^18 || ^20 || >= 21} - - node-api-version@0.2.1: - resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==} - - node-forge@1.3.3: - resolution: {integrity: sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==} - engines: {node: '>= 6.13.0'} - - node-gyp-build@4.8.4: - resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} - hasBin: true - - node-gyp@11.5.0: - resolution: {integrity: sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - - node-mac-permissions@2.5.0: - resolution: {integrity: sha512-zR8SVCaN3WqV1xwWd04XVAdzm3UTdjbxciLrZtB0Cc7F2Kd34AJfhPD4hm1HU0YH3oGUZO4X9OBLY5ijSTHsGw==} - os: [darwin] - - node-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} - - nopt@8.1.0: - resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - - 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.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - observable-fns@0.6.1: - resolution: {integrity: sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg==} - - obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - - obug@2.1.1: - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} - - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - - on-headers@1.1.0: - resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} - engines: {node: '>= 0.8'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - open@10.2.0: - resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} - engines: {node: '>=18'} - - opener@1.5.2: - resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} - hasBin: true - - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - - oxc-resolver@11.16.3: - resolution: {integrity: sha512-goLOJH3x69VouGWGp5CgCIHyksmOZzXr36lsRmQz1APg3SPFORrvV2q7nsUHMzLVa6ZJgNwkgUSJFsbCpAWkCA==} - - p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - - p-map@7.0.4: - resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} - engines: {node: '>=18'} - - p-retry@6.2.1: - resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} - engines: {node: '>=16.17'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - 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'} - - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - - parse5@8.0.0: - resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} - - 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-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@2.0.1: - resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} - engines: {node: 20 || >=22} - - path-to-regexp@0.1.12: - resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - - pe-library@0.4.1: - resolution: {integrity: sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==} - engines: {node: '>=12', npm: '>=6'} - - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - - plist@3.1.0: - resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} - engines: {node: '>=10.4.0'} - - pngjs@5.0.0: - resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} - engines: {node: '>=10.13.0'} - - pofile@1.1.4: - resolution: {integrity: sha512-r6Q21sKsY1AjTVVjOuU02VYKVNQGJNQHjTIvs4dEbeuuYfxgYk/DGD2mqqq4RDaVkwdSq0VEtmQUOPe/wH8X3g==} - - postcss-attribute-case-insensitive@8.0.0: - resolution: {integrity: sha512-fovIPEV35c2JzVXdmP+sp2xirbBMt54J+upU8u6TSj410kUU5+axgEzvBBSAX8KCybze8CFCelzFAw/FfWg2TA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-clamp@4.1.0: - resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} - engines: {node: '>=7.6.0'} - peerDependencies: - postcss: ^8.4.6 - - postcss-color-functional-notation@8.0.0: - resolution: {integrity: sha512-D3Z9ns0lHZbJVd+Fevtt3PkCaxe+V1Ig7UPsztzh9uul24kRzhWEZaY48NL8dg3Xyx45jhmSevOACBC8qfg1qw==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-color-hex-alpha@11.0.0: - resolution: {integrity: sha512-NCGa6vjIyrjosz9GqRxVKbONBklz5TeipYqTJp3IqbnBWlBq5e5EMtG6MaX4vqk9LzocPfMQkuRK9tfk+OQuKg==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-color-rebeccapurple@11.0.0: - resolution: {integrity: sha512-g9561mx7cbdqx7XeO/L+lJzVlzu7bICyXr72efBVKZGxIhvBBJf9fGXn3Cb6U4Bwh3LbzQO2e9NWBLVYdX5Eag==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-custom-media@12.0.0: - resolution: {integrity: sha512-jIgEvqceN6ru2uQ0f75W1g+JDi0UyECFeJKjPG7UcSkW3+03LDKH2c6h+9C0XuDTV4y2pEHmD5AJtVBq1OGnZA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-custom-properties@15.0.0: - resolution: {integrity: sha512-FsD3VNtFr3qmspvIobDRszK9onKPHp8iHG4Aox2Nnm9SL93uw5GDw4z+NM7zWKiw6U+DSNm24JUm4coyIyanzQ==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-custom-selectors@9.0.0: - resolution: {integrity: sha512-VuV5tLPAm6wq1u699dsrhGCzfLobKe0eD3G8bw3BcTJt6wqQ7RQdfaveJVsCAi23OaQbjIi3K1C7Fj3yZH3f1g==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-dir-pseudo-class@10.0.0: - resolution: {integrity: sha512-DmtIzULpyC8XaH4b5AaUgt4Jic4QmrECqidNCdR7u7naQFdnxX80YI06u238a+ZVRXwURDxVzy0s/UQnWmpVeg==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-discard-comments@7.0.5: - resolution: {integrity: sha512-IR2Eja8WfYgN5n32vEGSctVQ1+JARfu4UH8M7bgGh1bC+xI/obsPJXaBpQF7MAByvgwZinhpHpdrmXtvVVlKcQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} - peerDependencies: - postcss: ^8.4.32 - - postcss-double-position-gradients@7.0.0: - resolution: {integrity: sha512-Msr/dxj8Os7KLJE5Hdhvprwm3K5Zrh1KTY0eFN3ngPKNkej/Usy4BM9JQmqE6CLAkDpHoQVsi4snbL72CPt6qg==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-focus-visible@11.0.0: - resolution: {integrity: sha512-VG1a9kBKizUBWS66t5xyB4uLONBnvZLCmZXxT40FALu8EF0QgVZBYy5ApC0KhmpHsv+pvHMJHB3agKHwmocWjw==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-focus-within@10.0.0: - resolution: {integrity: sha512-dvql0fzUTG+gcJYp+KTbag5vAjuo94LDYZHkqDV1rnf5gPGer1v/SrmIZBdvKU8moep3HbcbujqGjzSb3DL53Q==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-font-variant@5.0.0: - resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} - peerDependencies: - postcss: ^8.1.0 - - postcss-gap-properties@7.0.0: - resolution: {integrity: sha512-PSDF2QoZMRUbsINvXObQgxx4HExRP85QTT8qS/YN9fBsCPWCqUuwqAD6E6PNp0BqL/jU1eyWUBORaOK/J/9LDA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-image-set-function@8.0.0: - resolution: {integrity: sha512-rEGNkOkNusf4+IuMmfEoIdLuVmvbExGbmG+MIsyV6jR5UaWSoyPcAYHV/PxzVDCmudyF+2Nh/o6Ub2saqUdnuA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-lab-function@8.0.0: - resolution: {integrity: sha512-/jjqsNYSEOMCJjUF7CBIe2Iit8dF52RDXX/JQNPRvi/FTcZRR7WNCt9tMyt8bv5eonffF42yi/RcYMaRJv8aGg==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-loader@8.2.0: - resolution: {integrity: sha512-tHX+RkpsXVcc7st4dSdDGliI+r4aAQDuv+v3vFYHixb6YgjreG5AG4SEB0kDK8u2s6htqEEpKlkhSBUTvWKYnA==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@rspack/core': 1.6.2 - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true - - postcss-logical@9.0.0: - resolution: {integrity: sha512-A4LNd9dk3q/juEUA9Gd8ALhBO3TeOeYurnyHLlf2aAToD94VHR8c5Uv7KNmf8YVRhTxvWsyug4c5fKtARzyIRQ==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-modules-extract-imports@3.1.0: - resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-local-by-default@4.2.0: - resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-scope@3.2.1: - resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-values@4.0.0: - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules@6.0.1: - resolution: {integrity: sha512-zyo2sAkVvuZFFy0gc2+4O+xar5dYlaVy/ebO24KT0ftk/iJevSNyPyQellsBLlnccwh7f6V6Y4GvuKRYToNgpQ==} - peerDependencies: - postcss: ^8.0.0 - - postcss-nesting@14.0.0: - resolution: {integrity: sha512-YGFOfVrjxYfeGTS5XctP1WCI5hu8Lr9SmntjfRC+iX5hCihEO+QZl9Ra+pkjqkgoVdDKvb2JccpElcowhZtzpw==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-opacity-percentage@3.0.0: - resolution: {integrity: sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==} - engines: {node: '>=18'} - peerDependencies: - postcss: ^8.4 - - postcss-overflow-shorthand@7.0.0: - resolution: {integrity: sha512-9SLpjoUdGRoRrzoOdX66HbUs0+uDwfIAiXsRa7piKGOqPd6F4ZlON9oaDSP5r1Qpgmzw5L9Ht0undIK6igJPMA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-page-break@3.0.4: - resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} - peerDependencies: - postcss: ^8 - - postcss-place@11.0.0: - resolution: {integrity: sha512-fAifpyjQ+fuDRp2nmF95WbotqbpjdazebedahXdfBxy5sHembOLpBQ1cHveZD9ZmjK26tYM8tikeNaUlp/KfHA==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-preset-env@11.1.1: - resolution: {integrity: sha512-40TvWF5sqMxGdyiPfskRf4gLcCou3ymNTpSDYD/ZsOKQNzsG2lwhEjNWMGShKvA/p4veR+dRhTYfUfIQ/5gbfg==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-pseudo-class-any-link@11.0.0: - resolution: {integrity: sha512-DNFZ4GMa3C3pU5dM+UCTG1CEeLtS1ZqV5DKSqCTJQMn1G5jnd/30fS8+A7H4o5bSD3MOcnx+VgI+xPE9Z5Wvig==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-replace-overflow-wrap@4.0.0: - resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} - peerDependencies: - postcss: ^8.0.3 - - postcss-selector-not@9.0.0: - resolution: {integrity: sha512-xhAtTdHnVU2M/CrpYOPyRUvg3njhVlKmn2GNYXDaRJV9Ygx4d5OkSkc7NINzjUqnbDFtaKXlISOBeyMXU/zyFQ==} - engines: {node: '>=20.19.0'} - peerDependencies: - postcss: ^8.4 - - postcss-selector-parser@7.1.1: - resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} - engines: {node: '>=4'} - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} - engines: {node: ^10 || ^12 || >=14} - - postject@1.0.0-alpha.6: - resolution: {integrity: sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==} - engines: {node: '>=14.0.0'} - hasBin: true - - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - proc-log@5.0.0: - resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - - promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - - pseudolocale@2.2.0: - resolution: {integrity: sha512-O+D2eU7fO9wVLqrohvt9V/9fwMadnJQ4jxwiK+LeNEqhMx8JYx4xQHkArDCJFAdPPOp/pQq6z5L37eBvAoc8jw==} - engines: {node: '>=16.0.0'} - hasBin: true - - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - qrcode@1.5.4: - resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} - engines: {node: '>=10.13.0'} - hasBin: true - - qs@6.14.1: - resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} - engines: {node: '>=0.6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - - 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.3: - resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} - engines: {node: '>= 0.8'} - - react-aria-components@1.14.0: - resolution: {integrity: sha512-u21N/yS6Ozk9P9oO8wxMNZSFiPk6F3aAE9w6aN7pseGPApkjXqDyPNCnTsTTvMtVL3QRBkVbf7fJ5yi2hksVEg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - react-aria@3.45.0: - resolution: {integrity: sha512-QsdWIhhm3+IAiW3SU9tEm7pmeIcveEPAO6riZ1IUF78ZCvH/47nU4zVztcdtYmwYWSL4168QxLncWKtlMva3BA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - react-dnd-accessible-backend@2.1.0: - resolution: {integrity: sha512-wzg1mshxVGbeTGeYFucFJ3uf/lG5mZL5VqQbEb3AIfgkkCBoo7tBjnT9Tp5evVCTR2ymhM0BDGGnv8qPMeyJKg==} - engines: {node: '>=14.13.0', npm: '>=7.0.0'} - peerDependencies: - react: '>=16.8.0' - react-dnd: '>=14.0.0' - - react-dnd-html5-backend@16.0.1: - resolution: {integrity: sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==} - - react-dnd-multi-backend@9.0.0: - resolution: {integrity: sha512-LAKDdyj4oMvVA/k2RiJ8KLIPO9sBiYIjIYtoFCuAgml9qQwIq+oTav2IXGfG4DrP49fBnVO7jjf5ofJMNOlWTA==} - peerDependencies: - dnd-core: ^16.0.1 - react: ^16.14.0 || ^17.0.2 || ^18.0.0 || ^19.0.0 - react-dnd: ^16.0.1 - react-dom: ^16.14.0 || ^17.0.2 || ^18.0.0 || ^19.0.0 - - react-dnd-preview@9.0.0: - resolution: {integrity: sha512-WZTbrrNDlCGYJGrITHN/obI2kpdaKV3AY6Il2LLZcA9ApzG5bbDXBlWSFwuw8eTCMjmCXs5Wcv+p2QCMxX1Afw==} - peerDependencies: - react: ^16.14.0 || ^17.0.2 || ^18.0.0 || ^19.0.0 - react-dnd: ^16.0.1 - - react-dnd@16.0.1: - resolution: {integrity: sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==} - peerDependencies: - '@types/hoist-non-react-statics': '>= 3.3.1' - '@types/node': '>= 12' - '@types/react': '>= 16' - react: '>= 16.14' - peerDependenciesMeta: - '@types/hoist-non-react-statics': - optional: true - '@types/node': - optional: true - '@types/react': - optional: true - - react-dom@19.2.3: - resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} - peerDependencies: - react: ^19.2.3 - - react-hook-form@7.71.1: - resolution: {integrity: sha512-9SUJKCGKo8HUSsCO+y0CtqkqI5nNuaDqTxyqPsZPqIwudpj4rCrAz/jZV+jn57bx5gtZKOh3neQu94DXMc+w5w==} - engines: {node: '>=18.0.0'} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 - - react-hotkeys-hook@5.2.3: - resolution: {integrity: sha512-Q27F8EuImYJOVSXAjSQrQPj9cx4GSNY+WdSdk5tSNN085H8/a00W6LZp0PrytEDwF6iT0pGTJeVEDKPRpEK2Bg==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - - react-refresh@0.18.0: - resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} - engines: {node: '>=0.10.0'} - - react-stately@3.43.0: - resolution: {integrity: sha512-dScb9fTL1tRtFODPnk/2rP0a9kp1C+7+40RArS0C7j0auAUmnrO/wDILojwQUso7/kkys4fP707fTwGJDeJ7vg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - react-transition-group@4.4.5: - resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} - peerDependencies: - react: '>=16.6.0' - react-dom: '>=16.6.0' - - react@19.2.3: - resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} - engines: {node: '>=0.10.0'} - - read-binary-file-arch@1.0.6: - resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} - hasBin: true - - 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.5.0: - resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} - engines: {node: '>=8.10.0'} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - readdirp@5.0.0: - resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} - engines: {node: '>= 20.19.0'} - - redux@4.2.1: - resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} - - regenerate-unicode-properties@10.2.2: - resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} - engines: {node: '>=4'} - - regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - - regexpu-core@6.4.0: - resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} - engines: {node: '>=4'} - - regjsgen@0.8.0: - resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} - - regjsparser@0.13.0: - resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} - hasBin: true - - remove-accents@0.5.0: - resolution: {integrity: sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - - resedit@1.7.2: - resolution: {integrity: sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==} - engines: {node: '>=12', npm: '>=6'} - - resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} - engines: {node: '>= 0.4'} - hasBin: true - - responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - roarr@2.15.4: - resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} - engines: {node: '>=8.0'} - - rollup@4.55.1: - resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - run-applescript@7.1.0: - resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} - engines: {node: '>=18'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - rxjs@7.8.2: - resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - sanitize-filename@1.6.3: - resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} - - sax@1.4.4: - resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} - engines: {node: '>=11.0.0'} - - saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} - - scheduler@0.27.0: - resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - - schema-utils@4.3.3: - resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} - engines: {node: '>= 10.13.0'} - - sdp-transform@2.15.0: - resolution: {integrity: sha512-KrOH82c/W+GYQ0LHqtr3caRpM3ITglq3ljGUIb8LTki7ByacJZ9z+piSGiwZDsRyhQbYBOBJgr2k6X4BZXi3Kw==} - hasBin: true - - sdp@3.2.1: - resolution: {integrity: sha512-lwsAIzOPlH8/7IIjjz3K0zYBk7aBVVcvjMwt3M4fLxpjMYyy7i3I97SLHebgn4YBjirkzfp3RvRDWSKsh/+WFw==} - - select-hose@2.0.0: - resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - - selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} - - semver-compare@1.0.0: - resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} - hasBin: true - - send@0.19.2: - resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} - engines: {node: '>= 0.8.0'} - - serialize-error@7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} - engines: {node: '>=10'} - - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - - serve-index@1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} - engines: {node: '>= 0.8.0'} - - serve-static@1.16.3: - resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} - engines: {node: '>= 0.8.0'} - - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - - setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - - sharp@0.34.5: - resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - - 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.3: - resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} - engines: {node: '>= 0.4'} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - simple-update-notifier@2.0.0: - resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} - engines: {node: '>=10'} - - sirv@2.0.4: - resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} - engines: {node: '>= 10'} - - slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - smol-toml@1.6.0: - resolution: {integrity: sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==} - engines: {node: '>= 18'} - - snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - - sockjs@0.3.24: - resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} - - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} - - socks@2.8.7: - resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - source-map@0.7.6: - resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} - engines: {node: '>= 12'} - - 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@12.0.0: - resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - - stackframe@1.3.4: - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - - stat-mode@1.0.0: - resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} - engines: {node: '>= 6'} - - statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - - statuses@2.0.2: - resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} - engines: {node: '>= 0.8'} - - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - - string-hash@1.1.3: - resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} - - 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_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} - - strip-json-comments@5.0.3: - resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} - engines: {node: '>=14.16'} - - stylis@4.2.0: - resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - - sumchecker@3.0.1: - resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} - engines: {node: '>= 8.0'} - - 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'} - - svg-parser@2.0.4: - resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - - svgo@3.3.2: - resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} - engines: {node: '>=14.0.0'} - hasBin: true - - symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - - tabbable@6.4.0: - resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} - - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} - engines: {node: '>=6'} - - tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} - - tar@7.5.2: - resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} - engines: {node: '>=18'} - - temp-file@3.4.0: - resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} - - temp@0.9.4: - resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} - engines: {node: '>=6.0.0'} - - terser-webpack-plugin@5.3.16: - resolution: {integrity: sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==} - 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.44.1: - resolution: {integrity: sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==} - engines: {node: '>=10'} - hasBin: true - - thingies@2.5.0: - resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==} - engines: {node: '>=10.18'} - peerDependencies: - tslib: ^2 - - threads@1.7.0: - resolution: {integrity: sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==} - - thumbhash@0.1.1: - resolution: {integrity: sha512-kH5pKeIIBPQXAOni2AiY/Cu/NKdkFREdpH+TLdM0g6WA7RriCv0kPLgP731ady67MhTAqrVG/4mnEeibVuCJcg==} - - thunky@1.1.0: - resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - - tiny-async-pool@1.3.0: - resolution: {integrity: sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==} - - tiny-worker@2.3.0: - resolution: {integrity: sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g==} - - tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - - tinyexec@1.0.2: - resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} - engines: {node: '>=18'} - - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - - tinyrainbow@3.0.3: - resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} - engines: {node: '>=14.0.0'} - - tldts-core@7.0.19: - resolution: {integrity: sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==} - - tldts@7.0.19: - resolution: {integrity: sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==} - hasBin: true - - tmp-promise@3.0.3: - resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} - - tmp@0.2.5: - resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} - engines: {node: '>=14.14'} - - 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'} - - totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} - - tough-cookie@6.0.0: - resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} - engines: {node: '>=16'} - - tr46@6.0.0: - resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} - engines: {node: '>=20'} - - tree-dump@1.1.0: - resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - truncate-utf8-bytes@1.0.2: - resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} - - ts-debounce@4.0.0: - resolution: {integrity: sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - tsx@4.21.0: - resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} - engines: {node: '>=18.0.0'} - hasBin: true - - type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - - typed-css-modules@0.9.1: - resolution: {integrity: sha512-W2HWKncdKd+bLWsnuWB2EyuQBzZ7KJ9Byr/67KLiiyGegcN52rOveun9JR8yAvuL5IXunRMxt0eORMtAUj5bmA==} - engines: {node: '>=18.0.0'} - hasBin: true - - typed-emitter@2.1.0: - resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==} - - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} - hasBin: true - - uiohook-napi@1.5.4: - resolution: {integrity: sha512-7vPVDNwgb6MwTgviA/dnF2MrW0X5xm76fAqaOAC3cEKkswqAZOPw1USu14Sr6383s5qhXegcJaR63CpJOPCNAg==} - engines: {node: '>= 16'} - - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - - undici@7.18.2: - resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==} - engines: {node: '>=20.18.1'} - - unicode-canonical-property-names-ecmascript@2.0.1: - resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} - engines: {node: '>=4'} - - unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} - - unicode-match-property-value-ecmascript@2.2.1: - resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} - engines: {node: '>=4'} - - unicode-property-aliases-ecmascript@2.2.0: - resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} - engines: {node: '>=4'} - - unique-filename@4.0.0: - resolution: {integrity: sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - unique-names-generator@4.7.1: - resolution: {integrity: sha512-lMx9dX+KRmG8sq6gulYYpKWZc9RlGsgBR6aoO8Qsm3qvkSJ+3rAymr+TnV8EDMrIrwuFJ4kruzMWM/OpYzPoow==} - engines: {node: '>=8'} - - unique-slug@5.0.0: - resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==} - engines: {node: ^18.17.0 || >=20.5.0} - - universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - - update-browserslist-db@1.2.3: - resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - update-electron-app@3.1.2: - resolution: {integrity: sha512-htLyPJv7mEoCpaSzCg0W3Hxz7ID0GC7BIhhpK32/ITG7McrWak4aOkLEOjJheKAI94AxtBVTjCk4EFIvyttw2w==} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - urlpattern-polyfill@10.1.0: - resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} - - use-isomorphic-layout-effect@1.2.1: - resolution: {integrity: sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - use-sync-external-store@1.6.0: - resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - usehooks-ts@3.1.1: - resolution: {integrity: sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA==} - engines: {node: '>=16.15.0'} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 || ^19.0.0-rc - - utf8-byte-length@1.0.5: - resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} - - 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 - - valibot@1.2.0: - resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} - peerDependencies: - typescript: '>=5' - peerDependenciesMeta: - typescript: - optional: true - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - verror@1.10.1: - resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} - engines: {node: '>=0.6.0'} - - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - - vitest@4.0.17: - resolution: {integrity: sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.17 - '@vitest/browser-preview': 4.0.17 - '@vitest/browser-webdriverio': 4.0.17 - '@vitest/ui': 4.0.17 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/browser-playwright': - optional: true - '@vitest/browser-preview': - optional: true - '@vitest/browser-webdriverio': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - - w3c-xmlserializer@5.0.0: - resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} - engines: {node: '>=18'} - - walk-up-path@4.0.0: - resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==} - engines: {node: 20 || >=22} - - watchpack@2.5.1: - resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} - 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==} - - webidl-conversions@8.0.1: - resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} - engines: {node: '>=20'} - - webpack-bundle-analyzer@4.10.2: - resolution: {integrity: sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==} - engines: {node: '>= 10.13.0'} - hasBin: true - - webpack-dev-middleware@7.4.5: - resolution: {integrity: sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==} - engines: {node: '>= 18.12.0'} - peerDependencies: - webpack: ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true - - webpack-dev-server@5.2.2: - resolution: {integrity: sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==} - engines: {node: '>= 18.12.0'} - hasBin: true - peerDependencies: - webpack: ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true - - webpack-sources@3.3.3: - resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} - engines: {node: '>=10.13.0'} - - webpack@5.104.1: - resolution: {integrity: sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - - webrtc-adapter@9.0.3: - resolution: {integrity: sha512-5fALBcroIl31OeXAdd1YUntxiZl1eHlZZWzNg3U4Fn+J9/cGL3eT80YlrsWGvj2ojuz1rZr2OXkgCzIxAZ7vRQ==} - engines: {node: '>=6.0.0', npm: '>=3.10.0'} - - websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} - - websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - - whatwg-mimetype@3.0.0: - resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} - engines: {node: '>=12'} - - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - - whatwg-url@15.1.0: - resolution: {integrity: sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==} - engines: {node: '>=20'} - - which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - which@5.0.0: - resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - - why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} - hasBin: true - - 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'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - 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 - - ws@8.19.0: - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} - 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 - - wsl-utils@0.1.0: - resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} - engines: {node: '>=18'} - - xml-name-validator@5.0.0: - resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} - engines: {node: '>=18'} - - xmlbuilder@15.1.1: - resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} - engines: {node: '>=8.0'} - - xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - - y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - - yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - zod@4.3.5: - resolution: {integrity: sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==} - -snapshots: - - 7zip-bin@5.2.0: {} - - '@acemir/cssom@0.9.31': {} - - '@asamuzakjp/css-color@4.1.1': - dependencies: - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - lru-cache: 11.2.4 - - '@asamuzakjp/dom-selector@6.7.6': - dependencies: - '@asamuzakjp/nwsapi': 2.3.9 - bidi-js: 1.0.3 - css-tree: 3.1.0 - is-potential-custom-element-name: 1.0.1 - lru-cache: 11.2.4 - - '@asamuzakjp/nwsapi@2.3.9': {} - - '@babel/code-frame@7.28.6': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.28.6': {} - - '@babel/core@7.28.6': - dependencies: - '@babel/code-frame': 7.28.6 - '@babel/generator': 7.28.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) - '@babel/helpers': 7.28.6 - '@babel/parser': 7.28.6 - '@babel/template': 7.28.6 - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.28.6': - dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/helper-annotate-as-pure@7.27.3': - dependencies: - '@babel/types': 7.28.6 - - '@babel/helper-compilation-targets@7.28.6': - dependencies: - '@babel/compat-data': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.1 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.6) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.6 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-annotate-as-pure': 7.27.3 - regexpu-core: 6.4.0 - semver: 6.3.1 - - '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - debug: 4.4.3 - lodash.debounce: 4.0.8 - resolve: 1.22.11 - transitivePeerDependencies: - - supports-color - - '@babel/helper-globals@7.28.0': {} - - '@babel/helper-member-expression-to-functions@7.28.5': - dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-imports@7.28.6': - dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/helper-optimise-call-expression@7.27.1': - dependencies: - '@babel/types': 7.28.6 - - '@babel/helper-plugin-utils@7.28.6': {} - - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-wrap-function': 7.28.6 - '@babel/traverse': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/helper-replace-supers@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': - dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-validator-identifier@7.28.5': {} - - '@babel/helper-validator-option@7.27.1': {} - - '@babel/helper-wrap-function@7.28.6': - dependencies: - '@babel/template': 7.28.6 - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/helpers@7.28.6': - dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.28.6 - - '@babel/parser@7.28.6': - dependencies: - '@babel/types': 7.28.6 - - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.28.6) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - - '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-async-generator-functions@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.6) - '@babel/traverse': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.6) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-classes@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-globals': 7.28.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.6) - '@babel/traverse': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/template': 7.28.6 - - '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.6) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-systemjs@7.28.5(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.6) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.6) - '@babel/traverse': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.6) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-react-constant-elements@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.28.6) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6) - '@babel/types': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-regenerator@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-spread@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.28.6) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/preset-env@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/compat-data': 7.28.6 - '@babel/core': 7.28.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.28.6) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.6) - '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.6) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-async-generator-functions': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.6) - '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-modules-systemjs': 7.28.5(@babel/core@7.28.6) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.6) - '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-regenerator': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.28.6) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.6) - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.6) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.6) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.6) - core-js-compat: 3.47.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/types': 7.28.6 - esutils: 2.0.3 - - '@babel/preset-react@7.28.5(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.6) - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.6) - '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.6) - transitivePeerDependencies: - - supports-color - - '@babel/preset-typescript@7.28.5(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.28.6) - transitivePeerDependencies: - - supports-color - - '@babel/runtime@7.28.6': {} - - '@babel/template@7.28.6': - dependencies: - '@babel/code-frame': 7.28.6 - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 - - '@babel/traverse@7.28.6': - dependencies: - '@babel/code-frame': 7.28.6 - '@babel/generator': 7.28.6 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.6 - '@babel/template': 7.28.6 - '@babel/types': 7.28.6 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.28.6': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - - '@bcoe/v8-coverage@1.0.2': {} - - '@bufbuild/protobuf@1.10.1': {} - - '@csstools/cascade-layer-name-parser@3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': - dependencies: - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - - '@csstools/color-helpers@5.1.0': {} - - '@csstools/color-helpers@6.0.0': {} - - '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': - dependencies: - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - - '@csstools/css-calc@3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': - dependencies: - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - - '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': - dependencies: - '@csstools/color-helpers': 5.1.0 - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - - '@csstools/css-color-parser@4.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': - dependencies: - '@csstools/color-helpers': 6.0.0 - '@csstools/css-calc': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - - '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': - dependencies: - '@csstools/css-tokenizer': 3.0.4 - - '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': - dependencies: - '@csstools/css-tokenizer': 4.0.0 - - '@csstools/css-syntax-patches-for-csstree@1.0.25': {} - - '@csstools/css-tokenizer@3.0.4': {} - - '@csstools/css-tokenizer@4.0.0': {} - - '@csstools/media-query-list-parser@5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': - dependencies: - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - - '@csstools/postcss-alpha-function@2.0.1(postcss@8.5.6)': - dependencies: - '@csstools/css-color-parser': 4.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - - '@csstools/postcss-cascade-layers@6.0.0(postcss@8.5.6)': - dependencies: - '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - - '@csstools/postcss-color-function-display-p3-linear@2.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-color-parser': 4.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - - '@csstools/postcss-color-function@5.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-color-parser': 4.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - - '@csstools/postcss-color-mix-function@4.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-color-parser': 4.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - - '@csstools/postcss-color-mix-variadic-function-arguments@2.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-color-parser': 4.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - - '@csstools/postcss-content-alt-text@3.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - - '@csstools/postcss-contrast-color-function@3.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-color-parser': 4.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - - '@csstools/postcss-exponential-functions@3.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-calc': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.6 - - '@csstools/postcss-font-format-keywords@5.0.0(postcss@8.5.6)': - dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - '@csstools/postcss-gamut-mapping@3.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-color-parser': 4.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.6 - - '@csstools/postcss-gradients-interpolation-method@6.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-color-parser': 4.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - - '@csstools/postcss-hwb-function@5.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-color-parser': 4.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - - '@csstools/postcss-ic-unit@5.0.0(postcss@8.5.6)': - dependencies: - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - '@csstools/postcss-initial@3.0.0(postcss@8.5.6)': - dependencies: - postcss: 8.5.6 - - '@csstools/postcss-is-pseudo-class@6.0.0(postcss@8.5.6)': - dependencies: - '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - - '@csstools/postcss-light-dark-function@3.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - - '@csstools/postcss-logical-float-and-clear@4.0.0(postcss@8.5.6)': - dependencies: - postcss: 8.5.6 - - '@csstools/postcss-logical-overflow@3.0.0(postcss@8.5.6)': - dependencies: - postcss: 8.5.6 - - '@csstools/postcss-logical-overscroll-behavior@3.0.0(postcss@8.5.6)': - dependencies: - postcss: 8.5.6 - - '@csstools/postcss-logical-resize@4.0.0(postcss@8.5.6)': - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - '@csstools/postcss-logical-viewport-units@4.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-tokenizer': 4.0.0 - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - - '@csstools/postcss-media-minmax@3.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-calc': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - postcss: 8.5.6 - - '@csstools/postcss-media-queries-aspect-ratio-number-values@4.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - postcss: 8.5.6 - - '@csstools/postcss-mixins@1.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.6 - - '@csstools/postcss-nested-calc@5.0.0(postcss@8.5.6)': - dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - '@csstools/postcss-normalize-display-values@5.0.0(postcss@8.5.6)': - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - '@csstools/postcss-oklab-function@5.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-color-parser': 4.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - - '@csstools/postcss-position-area-property@2.0.0(postcss@8.5.6)': - dependencies: - postcss: 8.5.6 - - '@csstools/postcss-progressive-custom-properties@5.0.0(postcss@8.5.6)': - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - '@csstools/postcss-property-rule-prelude-list@2.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.6 - - '@csstools/postcss-random-function@3.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-calc': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.6 - - '@csstools/postcss-relative-color-syntax@4.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-color-parser': 4.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - - '@csstools/postcss-scope-pseudo-class@5.0.0(postcss@8.5.6)': - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - - '@csstools/postcss-sign-functions@2.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-calc': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.6 - - '@csstools/postcss-stepped-value-functions@5.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-calc': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.6 - - '@csstools/postcss-syntax-descriptor-syntax-production@2.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.6 - - '@csstools/postcss-system-ui-font-family@2.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.6 - - '@csstools/postcss-text-decoration-shorthand@5.0.0(postcss@8.5.6)': - dependencies: - '@csstools/color-helpers': 6.0.0 - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - '@csstools/postcss-trigonometric-functions@5.0.0(postcss@8.5.6)': - dependencies: - '@csstools/css-calc': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.6 - - '@csstools/postcss-unset-value@5.0.0(postcss@8.5.6)': - dependencies: - postcss: 8.5.6 - - '@csstools/selector-resolve-nested@4.0.0(postcss-selector-parser@7.1.1)': - dependencies: - postcss-selector-parser: 7.1.1 - - '@csstools/selector-specificity@6.0.0(postcss-selector-parser@7.1.1)': - dependencies: - postcss-selector-parser: 7.1.1 - - '@csstools/utilities@3.0.0(postcss@8.5.6)': - dependencies: - postcss: 8.5.6 - - '@develar/schema-utils@2.6.5': - dependencies: - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - - '@discoveryjs/json-ext@0.5.7': {} - - '@dnd-kit/accessibility@3.1.1(react@19.2.3)': - dependencies: - react: 19.2.3 - tslib: 2.8.1 - - '@dnd-kit/core@6.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@dnd-kit/accessibility': 3.1.1(react@19.2.3) - '@dnd-kit/utilities': 3.2.2(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - tslib: 2.8.1 - - '@dnd-kit/modifiers@9.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)': - dependencies: - '@dnd-kit/core': 6.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@dnd-kit/utilities': 3.2.2(react@19.2.3) - react: 19.2.3 - tslib: 2.8.1 - - '@dnd-kit/sortable@10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)': - dependencies: - '@dnd-kit/core': 6.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@dnd-kit/utilities': 3.2.2(react@19.2.3) - react: 19.2.3 - tslib: 2.8.1 - - '@dnd-kit/utilities@3.2.2(react@19.2.3)': - dependencies: - react: 19.2.3 - tslib: 2.8.1 - - '@electron/asar@3.4.1': - dependencies: - commander: 5.1.0 - glob: 7.2.3 - minimatch: 3.1.2 - - '@electron/fuses@1.8.0': - dependencies: - chalk: 4.1.2 - fs-extra: 9.1.0 - minimist: 1.2.8 - - '@electron/get@2.0.3': - dependencies: - debug: 4.4.3 - env-paths: 2.2.1 - fs-extra: 8.1.0 - got: 11.8.6 - progress: 2.0.3 - semver: 6.3.1 - sumchecker: 3.0.1 - optionalDependencies: - global-agent: 3.0.0 - transitivePeerDependencies: - - supports-color - - '@electron/notarize@2.5.0': - dependencies: - debug: 4.4.3 - fs-extra: 9.1.0 - promise-retry: 2.0.1 - transitivePeerDependencies: - - supports-color - - '@electron/osx-sign@1.3.3': - dependencies: - compare-version: 0.1.2 - debug: 4.4.3 - fs-extra: 10.1.0 - isbinaryfile: 4.0.10 - minimist: 1.2.8 - plist: 3.1.0 - transitivePeerDependencies: - - supports-color - - '@electron/rebuild@4.0.1': - dependencies: - '@malept/cross-spawn-promise': 2.0.0 - chalk: 4.1.2 - debug: 4.4.3 - detect-libc: 2.1.2 - got: 11.8.6 - graceful-fs: 4.2.11 - node-abi: 4.24.0 - node-api-version: 0.2.1 - node-gyp: 11.5.0 - ora: 5.4.1 - read-binary-file-arch: 1.0.6 - semver: 7.7.3 - tar: 6.2.1 - yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - - '@electron/universal@2.0.3': - dependencies: - '@electron/asar': 3.4.1 - '@malept/cross-spawn-promise': 2.0.0 - debug: 4.4.3 - dir-compare: 4.2.0 - fs-extra: 11.3.3 - minimatch: 9.0.5 - plist: 3.1.0 - transitivePeerDependencies: - - supports-color - - '@electron/windows-sign@1.2.2': - dependencies: - cross-dirname: 0.1.0 - debug: 4.4.3 - fs-extra: 11.3.3 - minimist: 1.2.8 - postject: 1.0.0-alpha.6 - transitivePeerDependencies: - - supports-color - optional: true - - '@emnapi/core@1.8.1': - dependencies: - '@emnapi/wasi-threads': 1.1.0 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.8.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.1.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@emotion/babel-plugin@11.13.5': - dependencies: - '@babel/helper-module-imports': 7.28.6 - '@babel/runtime': 7.28.6 - '@emotion/hash': 0.9.2 - '@emotion/memoize': 0.9.0 - '@emotion/serialize': 1.3.3 - babel-plugin-macros: 3.1.0 - convert-source-map: 1.9.0 - escape-string-regexp: 4.0.0 - find-root: 1.1.0 - source-map: 0.5.7 - stylis: 4.2.0 - transitivePeerDependencies: - - supports-color - - '@emotion/cache@11.14.0': - dependencies: - '@emotion/memoize': 0.9.0 - '@emotion/sheet': 1.4.0 - '@emotion/utils': 1.4.2 - '@emotion/weak-memoize': 0.4.0 - stylis: 4.2.0 - - '@emotion/hash@0.9.2': {} - - '@emotion/memoize@0.9.0': {} - - '@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3)': - dependencies: - '@babel/runtime': 7.28.6 - '@emotion/babel-plugin': 11.13.5 - '@emotion/cache': 11.14.0 - '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.3) - '@emotion/utils': 1.4.2 - '@emotion/weak-memoize': 0.4.0 - hoist-non-react-statics: 3.3.2 - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.8 - transitivePeerDependencies: - - supports-color - - '@emotion/serialize@1.3.3': - dependencies: - '@emotion/hash': 0.9.2 - '@emotion/memoize': 0.9.0 - '@emotion/unitless': 0.10.0 - '@emotion/utils': 1.4.2 - csstype: 3.2.3 - - '@emotion/sheet@1.4.0': {} - - '@emotion/unitless@0.10.0': {} - - '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.3)': - dependencies: - react: 19.2.3 - - '@emotion/utils@1.4.2': {} - - '@emotion/weak-memoize@0.4.0': {} - - '@esbuild/aix-ppc64@0.25.12': - optional: true - - '@esbuild/aix-ppc64@0.27.2': - optional: true - - '@esbuild/android-arm64@0.25.12': - optional: true - - '@esbuild/android-arm64@0.27.2': - optional: true - - '@esbuild/android-arm@0.25.12': - optional: true - - '@esbuild/android-arm@0.27.2': - optional: true - - '@esbuild/android-x64@0.25.12': - optional: true - - '@esbuild/android-x64@0.27.2': - optional: true - - '@esbuild/darwin-arm64@0.25.12': - optional: true - - '@esbuild/darwin-arm64@0.27.2': - optional: true - - '@esbuild/darwin-x64@0.25.12': - optional: true - - '@esbuild/darwin-x64@0.27.2': - optional: true - - '@esbuild/freebsd-arm64@0.25.12': - optional: true - - '@esbuild/freebsd-arm64@0.27.2': - optional: true - - '@esbuild/freebsd-x64@0.25.12': - optional: true - - '@esbuild/freebsd-x64@0.27.2': - optional: true - - '@esbuild/linux-arm64@0.25.12': - optional: true - - '@esbuild/linux-arm64@0.27.2': - optional: true - - '@esbuild/linux-arm@0.25.12': - optional: true - - '@esbuild/linux-arm@0.27.2': - optional: true - - '@esbuild/linux-ia32@0.25.12': - optional: true - - '@esbuild/linux-ia32@0.27.2': - optional: true - - '@esbuild/linux-loong64@0.25.12': - optional: true - - '@esbuild/linux-loong64@0.27.2': - optional: true - - '@esbuild/linux-mips64el@0.25.12': - optional: true - - '@esbuild/linux-mips64el@0.27.2': - optional: true - - '@esbuild/linux-ppc64@0.25.12': - optional: true - - '@esbuild/linux-ppc64@0.27.2': - optional: true - - '@esbuild/linux-riscv64@0.25.12': - optional: true - - '@esbuild/linux-riscv64@0.27.2': - optional: true - - '@esbuild/linux-s390x@0.25.12': - optional: true - - '@esbuild/linux-s390x@0.27.2': - optional: true - - '@esbuild/linux-x64@0.25.12': - optional: true - - '@esbuild/linux-x64@0.27.2': - optional: true - - '@esbuild/netbsd-arm64@0.25.12': - optional: true - - '@esbuild/netbsd-arm64@0.27.2': - optional: true - - '@esbuild/netbsd-x64@0.25.12': - optional: true - - '@esbuild/netbsd-x64@0.27.2': - optional: true - - '@esbuild/openbsd-arm64@0.25.12': - optional: true - - '@esbuild/openbsd-arm64@0.27.2': - optional: true - - '@esbuild/openbsd-x64@0.25.12': - optional: true - - '@esbuild/openbsd-x64@0.27.2': - optional: true - - '@esbuild/openharmony-arm64@0.25.12': - optional: true - - '@esbuild/openharmony-arm64@0.27.2': - optional: true - - '@esbuild/sunos-x64@0.25.12': - optional: true - - '@esbuild/sunos-x64@0.27.2': - optional: true - - '@esbuild/win32-arm64@0.25.12': - optional: true - - '@esbuild/win32-arm64@0.27.2': - optional: true - - '@esbuild/win32-ia32@0.25.12': - optional: true - - '@esbuild/win32-ia32@0.27.2': - optional: true - - '@esbuild/win32-x64@0.25.12': - optional: true - - '@esbuild/win32-x64@0.27.2': - optional: true - - '@exodus/bytes@1.8.0': {} - - '@floating-ui/core@1.7.3': - dependencies: - '@floating-ui/utils': 0.2.10 - - '@floating-ui/dom@1.7.4': - dependencies: - '@floating-ui/core': 1.7.3 - '@floating-ui/utils': 0.2.10 - - '@floating-ui/react-dom@2.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@floating-ui/dom': 1.7.4 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@floating-ui/react@0.27.16(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@floating-ui/utils': 0.2.10 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - tabbable: 6.4.0 - - '@floating-ui/utils@0.2.10': {} - - '@formatjs/ecma402-abstract@2.3.6': - dependencies: - '@formatjs/fast-memoize': 2.2.7 - '@formatjs/intl-localematcher': 0.6.2 - decimal.js: 10.6.0 - tslib: 2.8.1 - - '@formatjs/fast-memoize@2.2.7': - dependencies: - tslib: 2.8.1 - - '@formatjs/icu-messageformat-parser@2.11.4': - dependencies: - '@formatjs/ecma402-abstract': 2.3.6 - '@formatjs/icu-skeleton-parser': 1.8.16 - tslib: 2.8.1 - - '@formatjs/icu-skeleton-parser@1.8.16': - dependencies: - '@formatjs/ecma402-abstract': 2.3.6 - tslib: 2.8.1 - - '@formatjs/intl-localematcher@0.6.2': - dependencies: - tslib: 2.8.1 - - '@hcaptcha/react-hcaptcha@2.0.1': {} - - '@img/colour@1.0.0': {} - - '@img/sharp-darwin-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.4 - optional: true - - '@img/sharp-darwin-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.4 - optional: true - - '@img/sharp-libvips-darwin-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-darwin-x64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-arm@1.2.4': - optional: true - - '@img/sharp-libvips-linux-ppc64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-riscv64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-s390x@1.2.4': - optional: true - - '@img/sharp-libvips-linux-x64@1.2.4': - optional: true - - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - optional: true - - '@img/sharp-linux-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.4 - optional: true - - '@img/sharp-linux-arm@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.4 - optional: true - - '@img/sharp-linux-ppc64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.4 - optional: true - - '@img/sharp-linux-riscv64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-riscv64': 1.2.4 - optional: true - - '@img/sharp-linux-s390x@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.4 - optional: true - - '@img/sharp-linux-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.4 - optional: true - - '@img/sharp-linuxmusl-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - optional: true - - '@img/sharp-linuxmusl-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - optional: true - - '@img/sharp-wasm32@0.34.5': - dependencies: - '@emnapi/runtime': 1.8.1 - optional: true - - '@img/sharp-win32-arm64@0.34.5': - optional: true - - '@img/sharp-win32-ia32@0.34.5': - optional: true - - '@img/sharp-win32-x64@0.34.5': - optional: true - - '@internationalized/date@3.10.1': - dependencies: - '@swc/helpers': 0.5.18 - - '@internationalized/message@3.1.8': - dependencies: - '@swc/helpers': 0.5.18 - intl-messageformat: 10.7.18 - - '@internationalized/number@3.6.5': - dependencies: - '@swc/helpers': 0.5.18 - - '@internationalized/string@3.2.7': - dependencies: - '@swc/helpers': 0.5.18 - - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.0': - dependencies: - '@isaacs/balanced-match': 4.0.1 - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.2 - - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 - - '@jest/types@29.6.3': - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 25.0.9 - '@types/yargs': 17.0.35 - chalk: 4.1.2 - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/source-map@0.3.11': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - optional: true - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/buffers@1.2.1(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/codegen@1.0.0(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/json-pack@1.21.0(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) - '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1) - '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) - '@jsonjoy.com/json-pointer': 1.0.2(tslib@2.8.1) - '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) - hyperdyperid: 1.2.0 - thingies: 2.5.0(tslib@2.8.1) - tree-dump: 1.1.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/json-pointer@1.0.2(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) - '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/util@1.9.0(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1) - '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) - tslib: 2.8.1 - - '@leichtgewicht/ip-codec@2.0.5': {} - - '@lingui/babel-plugin-extract-messages@5.7.0': {} - - '@lingui/babel-plugin-lingui-macro@5.7.0(babel-plugin-macros@3.1.0)(typescript@5.9.3)': - dependencies: - '@babel/core': 7.28.6 - '@babel/runtime': 7.28.6 - '@babel/types': 7.28.6 - '@lingui/conf': 5.7.0(typescript@5.9.3) - '@lingui/core': 5.7.0(@lingui/babel-plugin-lingui-macro@5.7.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0) - '@lingui/message-utils': 5.7.0 - optionalDependencies: - babel-plugin-macros: 3.1.0 - transitivePeerDependencies: - - supports-color - - typescript - - '@lingui/cli@5.7.0(babel-plugin-macros@3.1.0)(typescript@5.9.3)': - dependencies: - '@babel/core': 7.28.6 - '@babel/generator': 7.28.6 - '@babel/parser': 7.28.6 - '@babel/runtime': 7.28.6 - '@babel/types': 7.28.6 - '@lingui/babel-plugin-extract-messages': 5.7.0 - '@lingui/babel-plugin-lingui-macro': 5.7.0(babel-plugin-macros@3.1.0)(typescript@5.9.3) - '@lingui/conf': 5.7.0(typescript@5.9.3) - '@lingui/core': 5.7.0(@lingui/babel-plugin-lingui-macro@5.7.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0) - '@lingui/format-po': 5.7.0(typescript@5.9.3) - '@lingui/message-utils': 5.7.0 - chokidar: 3.5.1 - cli-table: 0.3.11 - commander: 10.0.1 - convert-source-map: 2.0.0 - date-fns: 3.6.0 - esbuild: 0.25.12 - glob: 11.1.0 - micromatch: 4.0.8 - ms: 2.1.3 - normalize-path: 3.0.0 - ora: 5.4.1 - picocolors: 1.1.1 - pofile: 1.1.4 - pseudolocale: 2.2.0 - source-map: 0.7.6 - threads: 1.7.0 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - typescript - - '@lingui/conf@5.7.0(typescript@5.9.3)': - dependencies: - '@babel/runtime': 7.28.6 - cosmiconfig: 8.3.6(typescript@5.9.3) - jest-validate: 29.7.0 - jiti: 2.6.1 - picocolors: 1.1.1 - transitivePeerDependencies: - - typescript - - '@lingui/core@5.7.0(@lingui/babel-plugin-lingui-macro@5.7.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0)': - dependencies: - '@babel/runtime': 7.28.6 - '@lingui/message-utils': 5.7.0 - optionalDependencies: - '@lingui/babel-plugin-lingui-macro': 5.7.0(babel-plugin-macros@3.1.0)(typescript@5.9.3) - babel-plugin-macros: 3.1.0 - - '@lingui/format-po@5.7.0(typescript@5.9.3)': - dependencies: - '@lingui/conf': 5.7.0(typescript@5.9.3) - '@lingui/message-utils': 5.7.0 - date-fns: 3.6.0 - pofile: 1.1.4 - transitivePeerDependencies: - - typescript - - '@lingui/message-utils@5.7.0': - dependencies: - '@messageformat/parser': 5.1.1 - js-sha256: 0.10.1 - - '@lingui/react@5.7.0(@lingui/babel-plugin-lingui-macro@5.7.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0)(react@19.2.3)': - dependencies: - '@babel/runtime': 7.28.6 - '@lingui/core': 5.7.0(@lingui/babel-plugin-lingui-macro@5.7.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0) - react: 19.2.3 - optionalDependencies: - '@lingui/babel-plugin-lingui-macro': 5.7.0(babel-plugin-macros@3.1.0)(typescript@5.9.3) - babel-plugin-macros: 3.1.0 - - '@lingui/swc-plugin@5.9.0(@lingui/core@5.7.0(@lingui/babel-plugin-lingui-macro@5.7.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0))': - dependencies: - '@lingui/core': 5.7.0(@lingui/babel-plugin-lingui-macro@5.7.0(babel-plugin-macros@3.1.0)(typescript@5.9.3))(babel-plugin-macros@3.1.0) - - '@livekit/components-core@0.12.12(livekit-client@2.17.0(@types/dom-mediacapture-record@1.0.22))(tslib@2.8.1)': - dependencies: - '@floating-ui/dom': 1.7.4 - livekit-client: 2.17.0(@types/dom-mediacapture-record@1.0.22) - loglevel: 1.9.1 - rxjs: 7.8.2 - tslib: 2.8.1 - - '@livekit/components-react@2.9.17(livekit-client@2.17.0(@types/dom-mediacapture-record@1.0.22))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tslib@2.8.1)': - dependencies: - '@livekit/components-core': 0.12.12(livekit-client@2.17.0(@types/dom-mediacapture-record@1.0.22))(tslib@2.8.1) - clsx: 2.1.1 - events: 3.3.0 - jose: 6.1.3 - livekit-client: 2.17.0(@types/dom-mediacapture-record@1.0.22) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - tslib: 2.8.1 - usehooks-ts: 3.1.1(react@19.2.3) - - '@livekit/mutex@1.1.1': {} - - '@livekit/protocol@1.42.2': - dependencies: - '@bufbuild/protobuf': 1.10.1 - - '@malept/cross-spawn-promise@2.0.0': - dependencies: - cross-spawn: 7.0.6 - - '@malept/flatpak-bundler@0.4.0': - dependencies: - debug: 4.4.3 - fs-extra: 9.1.0 - lodash: 4.17.21 - tmp-promise: 3.0.3 - transitivePeerDependencies: - - supports-color - - '@marsidev/react-turnstile@1.4.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@messageformat/parser@5.1.1': - dependencies: - moo: 0.5.2 - - '@module-federation/error-codes@0.21.4': {} - - '@module-federation/runtime-core@0.21.4': - dependencies: - '@module-federation/error-codes': 0.21.4 - '@module-federation/sdk': 0.21.4 - - '@module-federation/runtime-tools@0.21.4': - dependencies: - '@module-federation/runtime': 0.21.4 - '@module-federation/webpack-bundler-runtime': 0.21.4 - - '@module-federation/runtime@0.21.4': - dependencies: - '@module-federation/error-codes': 0.21.4 - '@module-federation/runtime-core': 0.21.4 - '@module-federation/sdk': 0.21.4 - - '@module-federation/sdk@0.21.4': {} - - '@module-federation/webpack-bundler-runtime@0.21.4': - dependencies: - '@module-federation/runtime': 0.21.4 - '@module-federation/sdk': 0.21.4 - - '@napi-rs/wasm-runtime@1.0.7': - dependencies: - '@emnapi/core': 1.8.1 - '@emnapi/runtime': 1.8.1 - '@tybys/wasm-util': 0.10.1 - optional: true - - '@napi-rs/wasm-runtime@1.1.1': - dependencies: - '@emnapi/core': 1.8.1 - '@emnapi/runtime': 1.8.1 - '@tybys/wasm-util': 0.10.1 - optional: true - - '@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.20.1 - - '@npmcli/agent@3.0.0': - dependencies: - agent-base: 7.1.4 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - lru-cache: 10.4.3 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - '@npmcli/fs@4.0.0': - dependencies: - semver: 7.7.3 - - '@oxc-resolver/binding-android-arm-eabi@11.16.3': - optional: true - - '@oxc-resolver/binding-android-arm64@11.16.3': - optional: true - - '@oxc-resolver/binding-darwin-arm64@11.16.3': - optional: true - - '@oxc-resolver/binding-darwin-x64@11.16.3': - optional: true - - '@oxc-resolver/binding-freebsd-x64@11.16.3': - optional: true - - '@oxc-resolver/binding-linux-arm-gnueabihf@11.16.3': - optional: true - - '@oxc-resolver/binding-linux-arm-musleabihf@11.16.3': - optional: true - - '@oxc-resolver/binding-linux-arm64-gnu@11.16.3': - optional: true - - '@oxc-resolver/binding-linux-arm64-musl@11.16.3': - optional: true - - '@oxc-resolver/binding-linux-ppc64-gnu@11.16.3': - optional: true - - '@oxc-resolver/binding-linux-riscv64-gnu@11.16.3': - optional: true - - '@oxc-resolver/binding-linux-riscv64-musl@11.16.3': - optional: true - - '@oxc-resolver/binding-linux-s390x-gnu@11.16.3': - optional: true - - '@oxc-resolver/binding-linux-x64-gnu@11.16.3': - optional: true - - '@oxc-resolver/binding-linux-x64-musl@11.16.3': - optional: true - - '@oxc-resolver/binding-openharmony-arm64@11.16.3': - optional: true - - '@oxc-resolver/binding-wasm32-wasi@11.16.3': - dependencies: - '@napi-rs/wasm-runtime': 1.1.1 - optional: true - - '@oxc-resolver/binding-win32-arm64-msvc@11.16.3': - optional: true - - '@oxc-resolver/binding-win32-ia32-msvc@11.16.3': - optional: true - - '@oxc-resolver/binding-win32-x64-msvc@11.16.3': - optional: true - - '@phosphor-icons/react@2.1.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@polka/url@1.0.0-next.29': {} - - '@radix-ui/primitive@1.1.3': {} - - '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.8)(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.8 - '@types/react-dom': 19.2.3(@types/react@19.2.8) - - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.8)(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.8 - '@types/react-dom': 19.2.3(@types/react@19.2.8) - - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.8)(react@19.2.3)': - dependencies: - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.8 - - '@radix-ui/react-context@1.1.2(@types/react@19.2.8)(react@19.2.3)': - dependencies: - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.8 - - '@radix-ui/react-direction@1.1.1(@types/react@19.2.8)(react@19.2.3)': - dependencies: - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.8 - - '@radix-ui/react-id@1.1.1(@types/react@19.2.8)(react@19.2.3)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.8)(react@19.2.3) - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.8 - - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.8)(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.8 - '@types/react-dom': 19.2.3(@types/react@19.2.8) - - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.8)(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.8 - '@types/react-dom': 19.2.3(@types/react@19.2.8) - - '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.8)(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.8 - '@types/react-dom': 19.2.3(@types/react@19.2.8) - - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.8)(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.8 - '@types/react-dom': 19.2.3(@types/react@19.2.8) - - '@radix-ui/react-slot@1.2.3(@types/react@19.2.8)(react@19.2.3)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.8)(react@19.2.3) - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.8 - - '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.8)(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.8 - '@types/react-dom': 19.2.3(@types/react@19.2.8) - - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.8)(react@19.2.3)': - dependencies: - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.8 - - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.8)(react@19.2.3)': - dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.8)(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.8)(react@19.2.3) - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.8 - - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.8)(react@19.2.3)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.8)(react@19.2.3) - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.8 - - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.8)(react@19.2.3)': - dependencies: - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.8 - - '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.8)(react@19.2.3)': - dependencies: - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.8 - - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.8)(react@19.2.3)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.8)(react@19.2.3) - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.8 - - '@react-aria/autocomplete@3.0.0-rc.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/combobox': 3.14.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/listbox': 3.15.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/searchfield': 3.8.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/textfield': 3.18.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/autocomplete': 3.0.0-beta.4(react@19.2.3) - '@react-stately/combobox': 3.12.1(react@19.2.3) - '@react-types/autocomplete': 3.0.0-alpha.36(react@19.2.3) - '@react-types/button': 3.14.1(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/breadcrumbs@3.5.30(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/link': 3.8.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/breadcrumbs': 3.7.17(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/button@3.14.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/toolbar': 3.0.0-beta.22(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/toggle': 3.9.3(react@19.2.3) - '@react-types/button': 3.14.1(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/calendar@3.9.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@internationalized/date': 3.10.1 - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/calendar': 3.9.1(react@19.2.3) - '@react-types/button': 3.14.1(react@19.2.3) - '@react-types/calendar': 3.8.1(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/checkbox@3.16.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/form': 3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/toggle': 3.12.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/checkbox': 3.7.3(react@19.2.3) - '@react-stately/form': 3.2.2(react@19.2.3) - '@react-stately/toggle': 3.9.3(react@19.2.3) - '@react-types/checkbox': 3.10.2(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/collections@3.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/ssr': 3.9.10(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - use-sync-external-store: 1.6.0(react@19.2.3) - - '@react-aria/color@3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/numberfield': 3.12.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/slider': 3.8.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/spinbutton': 3.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/textfield': 3.18.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/visually-hidden': 3.8.29(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/color': 3.9.3(react@19.2.3) - '@react-stately/form': 3.2.2(react@19.2.3) - '@react-types/color': 3.1.2(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/combobox@3.14.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/listbox': 3.15.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/menu': 3.19.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/overlays': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/textfield': 3.18.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/collections': 3.12.8(react@19.2.3) - '@react-stately/combobox': 3.12.1(react@19.2.3) - '@react-stately/form': 3.2.2(react@19.2.3) - '@react-types/button': 3.14.1(react@19.2.3) - '@react-types/combobox': 3.13.10(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/datepicker@3.15.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@internationalized/date': 3.10.1 - '@internationalized/number': 3.6.5 - '@internationalized/string': 3.2.7 - '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/form': 3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/spinbutton': 3.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/datepicker': 3.15.3(react@19.2.3) - '@react-stately/form': 3.2.2(react@19.2.3) - '@react-types/button': 3.14.1(react@19.2.3) - '@react-types/calendar': 3.8.1(react@19.2.3) - '@react-types/datepicker': 3.13.3(react@19.2.3) - '@react-types/dialog': 3.5.22(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/dialog@3.5.32(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/overlays': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/dialog': 3.5.22(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/disclosure@3.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/ssr': 3.9.10(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/disclosure': 3.0.9(react@19.2.3) - '@react-types/button': 3.14.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/dnd@3.11.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@internationalized/string': 3.2.7 - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/overlays': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/collections': 3.12.8(react@19.2.3) - '@react-stately/dnd': 3.7.2(react@19.2.3) - '@react-types/button': 3.14.1(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/focus@3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/form@3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/form': 3.2.2(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/grid@3.14.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/collections': 3.12.8(react@19.2.3) - '@react-stately/grid': 3.11.7(react@19.2.3) - '@react-stately/selection': 3.20.7(react@19.2.3) - '@react-types/checkbox': 3.10.2(react@19.2.3) - '@react-types/grid': 3.3.6(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/gridlist@3.14.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/grid': 3.14.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/list': 3.13.2(react@19.2.3) - '@react-stately/tree': 3.9.4(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/i18n@3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@internationalized/date': 3.10.1 - '@internationalized/message': 3.1.8 - '@internationalized/number': 3.6.5 - '@internationalized/string': 3.2.7 - '@react-aria/ssr': 3.9.10(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/interactions@3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/ssr': 3.9.10(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/flags': 3.1.2 - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/label@3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/landmark@3.0.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - use-sync-external-store: 1.6.0(react@19.2.3) - - '@react-aria/link@3.8.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/link': 3.6.5(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/listbox@3.15.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/collections': 3.12.8(react@19.2.3) - '@react-stately/list': 3.13.2(react@19.2.3) - '@react-types/listbox': 3.7.4(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/live-announcer@3.4.4': - dependencies: - '@swc/helpers': 0.5.18 - - '@react-aria/menu@3.19.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/overlays': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/collections': 3.12.8(react@19.2.3) - '@react-stately/menu': 3.9.9(react@19.2.3) - '@react-stately/selection': 3.20.7(react@19.2.3) - '@react-stately/tree': 3.9.4(react@19.2.3) - '@react-types/button': 3.14.1(react@19.2.3) - '@react-types/menu': 3.10.5(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/meter@3.4.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/progress': 3.4.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/meter': 3.4.13(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/numberfield@3.12.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/spinbutton': 3.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/textfield': 3.18.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/form': 3.2.2(react@19.2.3) - '@react-stately/numberfield': 3.10.3(react@19.2.3) - '@react-types/button': 3.14.1(react@19.2.3) - '@react-types/numberfield': 3.8.16(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/overlays@3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/ssr': 3.9.10(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/visually-hidden': 3.8.29(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/overlays': 3.6.21(react@19.2.3) - '@react-types/button': 3.14.1(react@19.2.3) - '@react-types/overlays': 3.9.2(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/progress@3.4.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/progress': 3.5.16(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/radio@3.12.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/form': 3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/radio': 3.11.3(react@19.2.3) - '@react-types/radio': 3.9.2(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/searchfield@3.8.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/textfield': 3.18.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/searchfield': 3.5.17(react@19.2.3) - '@react-types/button': 3.14.1(react@19.2.3) - '@react-types/searchfield': 3.6.6(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/select@3.17.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/form': 3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/listbox': 3.15.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/menu': 3.19.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/visually-hidden': 3.8.29(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/select': 3.9.0(react@19.2.3) - '@react-types/button': 3.14.1(react@19.2.3) - '@react-types/select': 3.12.0(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/selection@3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/selection': 3.20.7(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/separator@3.4.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/slider@3.8.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/slider': 3.7.3(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@react-types/slider': 3.8.2(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/spinbutton@3.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/button': 3.14.1(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/ssr@3.9.10(react@19.2.3)': - dependencies: - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-aria/switch@3.7.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/toggle': 3.12.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/toggle': 3.9.3(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@react-types/switch': 3.5.15(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/table@3.17.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/grid': 3.14.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/visually-hidden': 3.8.29(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/collections': 3.12.8(react@19.2.3) - '@react-stately/flags': 3.1.2 - '@react-stately/table': 3.15.2(react@19.2.3) - '@react-types/checkbox': 3.10.2(react@19.2.3) - '@react-types/grid': 3.3.6(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@react-types/table': 3.13.4(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/tabs@3.10.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/tabs': 3.8.7(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@react-types/tabs': 3.3.20(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/tag@3.7.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/gridlist': 3.14.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/list': 3.13.2(react@19.2.3) - '@react-types/button': 3.14.1(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/textfield@3.18.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/form': 3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/form': 3.2.2(react@19.2.3) - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@react-types/textfield': 3.12.6(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/toast@3.0.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/landmark': 3.0.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/toast': 3.1.2(react@19.2.3) - '@react-types/button': 3.14.1(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/toggle@3.12.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/toggle': 3.9.3(react@19.2.3) - '@react-types/checkbox': 3.10.2(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/toolbar@3.0.0-beta.22(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/tooltip@3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/tooltip': 3.5.9(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@react-types/tooltip': 3.5.0(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/tree@3.1.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/gridlist': 3.14.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/tree': 3.9.4(react@19.2.3) - '@react-types/button': 3.14.1(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/utils@3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/ssr': 3.9.10(react@19.2.3) - '@react-stately/flags': 3.1.2 - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/virtualizer@4.1.11(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/virtualizer': 4.4.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-aria/visually-hidden@3.8.29(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-dnd/asap@5.0.2': {} - - '@react-dnd/invariant@4.0.2': {} - - '@react-dnd/shallowequal@4.0.2': {} - - '@react-stately/autocomplete@3.0.0-beta.4(react@19.2.3)': - dependencies: - '@react-stately/utils': 3.11.0(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/calendar@3.9.1(react@19.2.3)': - dependencies: - '@internationalized/date': 3.10.1 - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/calendar': 3.8.1(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/checkbox@3.7.3(react@19.2.3)': - dependencies: - '@react-stately/form': 3.2.2(react@19.2.3) - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/checkbox': 3.10.2(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/collections@3.12.8(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/color@3.9.3(react@19.2.3)': - dependencies: - '@internationalized/number': 3.6.5 - '@internationalized/string': 3.2.7 - '@react-stately/form': 3.2.2(react@19.2.3) - '@react-stately/numberfield': 3.10.3(react@19.2.3) - '@react-stately/slider': 3.7.3(react@19.2.3) - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/color': 3.1.2(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/combobox@3.12.1(react@19.2.3)': - dependencies: - '@react-stately/collections': 3.12.8(react@19.2.3) - '@react-stately/form': 3.2.2(react@19.2.3) - '@react-stately/list': 3.13.2(react@19.2.3) - '@react-stately/overlays': 3.6.21(react@19.2.3) - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/combobox': 3.13.10(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/data@3.15.0(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/datepicker@3.15.3(react@19.2.3)': - dependencies: - '@internationalized/date': 3.10.1 - '@internationalized/string': 3.2.7 - '@react-stately/form': 3.2.2(react@19.2.3) - '@react-stately/overlays': 3.6.21(react@19.2.3) - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/datepicker': 3.13.3(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/disclosure@3.0.9(react@19.2.3)': - dependencies: - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/dnd@3.7.2(react@19.2.3)': - dependencies: - '@react-stately/selection': 3.20.7(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/flags@3.1.2': - dependencies: - '@swc/helpers': 0.5.18 - - '@react-stately/form@3.2.2(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/grid@3.11.7(react@19.2.3)': - dependencies: - '@react-stately/collections': 3.12.8(react@19.2.3) - '@react-stately/selection': 3.20.7(react@19.2.3) - '@react-types/grid': 3.3.6(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/layout@4.5.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-stately/collections': 3.12.8(react@19.2.3) - '@react-stately/table': 3.15.2(react@19.2.3) - '@react-stately/virtualizer': 4.4.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/grid': 3.3.6(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@react-types/table': 3.13.4(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-stately/list@3.13.2(react@19.2.3)': - dependencies: - '@react-stately/collections': 3.12.8(react@19.2.3) - '@react-stately/selection': 3.20.7(react@19.2.3) - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/menu@3.9.9(react@19.2.3)': - dependencies: - '@react-stately/overlays': 3.6.21(react@19.2.3) - '@react-types/menu': 3.10.5(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/numberfield@3.10.3(react@19.2.3)': - dependencies: - '@internationalized/number': 3.6.5 - '@react-stately/form': 3.2.2(react@19.2.3) - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/numberfield': 3.8.16(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/overlays@3.6.21(react@19.2.3)': - dependencies: - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/overlays': 3.9.2(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/radio@3.11.3(react@19.2.3)': - dependencies: - '@react-stately/form': 3.2.2(react@19.2.3) - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/radio': 3.9.2(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/searchfield@3.5.17(react@19.2.3)': - dependencies: - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/searchfield': 3.6.6(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/select@3.9.0(react@19.2.3)': - dependencies: - '@react-stately/form': 3.2.2(react@19.2.3) - '@react-stately/list': 3.13.2(react@19.2.3) - '@react-stately/overlays': 3.6.21(react@19.2.3) - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/select': 3.12.0(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/selection@3.20.7(react@19.2.3)': - dependencies: - '@react-stately/collections': 3.12.8(react@19.2.3) - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/slider@3.7.3(react@19.2.3)': - dependencies: - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@react-types/slider': 3.8.2(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/table@3.15.2(react@19.2.3)': - dependencies: - '@react-stately/collections': 3.12.8(react@19.2.3) - '@react-stately/flags': 3.1.2 - '@react-stately/grid': 3.11.7(react@19.2.3) - '@react-stately/selection': 3.20.7(react@19.2.3) - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/grid': 3.3.6(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@react-types/table': 3.13.4(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/tabs@3.8.7(react@19.2.3)': - dependencies: - '@react-stately/list': 3.13.2(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@react-types/tabs': 3.3.20(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/toast@3.1.2(react@19.2.3)': - dependencies: - '@swc/helpers': 0.5.18 - react: 19.2.3 - use-sync-external-store: 1.6.0(react@19.2.3) - - '@react-stately/toggle@3.9.3(react@19.2.3)': - dependencies: - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/checkbox': 3.10.2(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/tooltip@3.5.9(react@19.2.3)': - dependencies: - '@react-stately/overlays': 3.6.21(react@19.2.3) - '@react-types/tooltip': 3.5.0(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/tree@3.9.4(react@19.2.3)': - dependencies: - '@react-stately/collections': 3.12.8(react@19.2.3) - '@react-stately/selection': 3.20.7(react@19.2.3) - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/utils@3.11.0(react@19.2.3)': - dependencies: - '@swc/helpers': 0.5.18 - react: 19.2.3 - - '@react-stately/virtualizer@4.4.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - '@swc/helpers': 0.5.18 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - '@react-types/autocomplete@3.0.0-alpha.36(react@19.2.3)': - dependencies: - '@react-types/combobox': 3.13.10(react@19.2.3) - '@react-types/searchfield': 3.6.6(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/breadcrumbs@3.7.17(react@19.2.3)': - dependencies: - '@react-types/link': 3.6.5(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/button@3.14.1(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/calendar@3.8.1(react@19.2.3)': - dependencies: - '@internationalized/date': 3.10.1 - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/checkbox@3.10.2(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/color@3.1.2(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - '@react-types/slider': 3.8.2(react@19.2.3) - react: 19.2.3 - - '@react-types/combobox@3.13.10(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/datepicker@3.13.3(react@19.2.3)': - dependencies: - '@internationalized/date': 3.10.1 - '@react-types/calendar': 3.8.1(react@19.2.3) - '@react-types/overlays': 3.9.2(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/dialog@3.5.22(react@19.2.3)': - dependencies: - '@react-types/overlays': 3.9.2(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/form@3.7.16(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/grid@3.3.6(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/link@3.6.5(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/listbox@3.7.4(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/menu@3.10.5(react@19.2.3)': - dependencies: - '@react-types/overlays': 3.9.2(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/meter@3.4.13(react@19.2.3)': - dependencies: - '@react-types/progress': 3.5.16(react@19.2.3) - react: 19.2.3 - - '@react-types/numberfield@3.8.16(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/overlays@3.9.2(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/progress@3.5.16(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/radio@3.9.2(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/searchfield@3.6.6(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - '@react-types/textfield': 3.12.6(react@19.2.3) - react: 19.2.3 - - '@react-types/select@3.12.0(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/shared@3.32.1(react@19.2.3)': - dependencies: - react: 19.2.3 - - '@react-types/slider@3.8.2(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/switch@3.5.15(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/table@3.13.4(react@19.2.3)': - dependencies: - '@react-types/grid': 3.3.6(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/tabs@3.3.20(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/textfield@3.12.6(react@19.2.3)': - dependencies: - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@react-types/tooltip@3.5.0(react@19.2.3)': - dependencies: - '@react-types/overlays': 3.9.2(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - '@rollup/rollup-android-arm-eabi@4.55.1': - optional: true - - '@rollup/rollup-android-arm64@4.55.1': - optional: true - - '@rollup/rollup-darwin-arm64@4.55.1': - optional: true - - '@rollup/rollup-darwin-x64@4.55.1': - optional: true - - '@rollup/rollup-freebsd-arm64@4.55.1': - optional: true - - '@rollup/rollup-freebsd-x64@4.55.1': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.55.1': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.55.1': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.55.1': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.55.1': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.55.1': - optional: true - - '@rollup/rollup-linux-loong64-musl@4.55.1': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.55.1': - optional: true - - '@rollup/rollup-linux-ppc64-musl@4.55.1': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.55.1': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.55.1': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.55.1': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.55.1': - optional: true - - '@rollup/rollup-linux-x64-musl@4.55.1': - optional: true - - '@rollup/rollup-openbsd-x64@4.55.1': - optional: true - - '@rollup/rollup-openharmony-arm64@4.55.1': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.55.1': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.55.1': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.55.1': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.55.1': - optional: true - - '@rspack/binding-darwin-arm64@1.6.2': - optional: true - - '@rspack/binding-darwin-x64@1.6.2': - optional: true - - '@rspack/binding-linux-arm64-gnu@1.6.2': - optional: true - - '@rspack/binding-linux-arm64-musl@1.6.2': - optional: true - - '@rspack/binding-linux-x64-gnu@1.6.2': - optional: true - - '@rspack/binding-linux-x64-musl@1.6.2': - optional: true - - '@rspack/binding-wasm32-wasi@1.6.2': - dependencies: - '@napi-rs/wasm-runtime': 1.0.7 - optional: true - - '@rspack/binding-win32-arm64-msvc@1.6.2': - optional: true - - '@rspack/binding-win32-ia32-msvc@1.6.2': - optional: true - - '@rspack/binding-win32-x64-msvc@1.6.2': - optional: true - - '@rspack/binding@1.6.2': - optionalDependencies: - '@rspack/binding-darwin-arm64': 1.6.2 - '@rspack/binding-darwin-x64': 1.6.2 - '@rspack/binding-linux-arm64-gnu': 1.6.2 - '@rspack/binding-linux-arm64-musl': 1.6.2 - '@rspack/binding-linux-x64-gnu': 1.6.2 - '@rspack/binding-linux-x64-musl': 1.6.2 - '@rspack/binding-wasm32-wasi': 1.6.2 - '@rspack/binding-win32-arm64-msvc': 1.6.2 - '@rspack/binding-win32-ia32-msvc': 1.6.2 - '@rspack/binding-win32-x64-msvc': 1.6.2 - - '@rspack/cli@1.6.2(@rspack/core@1.6.2(@swc/helpers@0.5.18))(@types/express@4.17.25)(webpack@5.104.1(esbuild@0.27.2))': - dependencies: - '@discoveryjs/json-ext': 0.5.7 - '@rspack/core': 1.6.2(@swc/helpers@0.5.18) - '@rspack/dev-server': 1.1.5(@rspack/core@1.6.2(@swc/helpers@0.5.18))(@types/express@4.17.25)(webpack@5.104.1(esbuild@0.27.2)) - exit-hook: 4.0.0 - webpack-bundle-analyzer: 4.10.2 - transitivePeerDependencies: - - '@types/express' - - bufferutil - - debug - - supports-color - - utf-8-validate - - webpack - - webpack-cli - - '@rspack/core@1.6.2(@swc/helpers@0.5.18)': - dependencies: - '@module-federation/runtime-tools': 0.21.4 - '@rspack/binding': 1.6.2 - '@rspack/lite-tapable': 1.0.1 - optionalDependencies: - '@swc/helpers': 0.5.18 - - '@rspack/dev-server@1.1.5(@rspack/core@1.6.2(@swc/helpers@0.5.18))(@types/express@4.17.25)(webpack@5.104.1(esbuild@0.27.2))': - dependencies: - '@rspack/core': 1.6.2(@swc/helpers@0.5.18) - chokidar: 3.6.0 - http-proxy-middleware: 2.0.9(@types/express@4.17.25) - p-retry: 6.2.1 - webpack-dev-server: 5.2.2(webpack@5.104.1(esbuild@0.27.2)) - ws: 8.19.0 - transitivePeerDependencies: - - '@types/express' - - bufferutil - - debug - - supports-color - - utf-8-validate - - webpack - - webpack-cli - - '@rspack/lite-tapable@1.0.1': {} - - '@rspack/plugin-react-refresh@1.6.0(react-refresh@0.18.0)': - dependencies: - error-stack-parser: 2.1.4 - html-entities: 2.6.0 - react-refresh: 0.18.0 - - '@simplewebauthn/browser@13.2.2': {} - - '@sinclair/typebox@0.27.8': {} - - '@sindresorhus/is@4.6.0': {} - - '@standard-schema/spec@1.1.0': {} - - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - - '@svgr/babel-preset@8.1.0(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.28.6) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.28.6) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.28.6) - - '@svgr/core@8.1.0(typescript@5.9.3)': - dependencies: - '@babel/core': 7.28.6 - '@svgr/babel-preset': 8.1.0(@babel/core@7.28.6) - camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.9.3) - snake-case: 3.0.4 - transitivePeerDependencies: - - supports-color - - typescript - - '@svgr/hast-util-to-babel-ast@8.0.0': - dependencies: - '@babel/types': 7.28.6 - entities: 4.5.0 - - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))': - dependencies: - '@babel/core': 7.28.6 - '@svgr/babel-preset': 8.1.0(@babel/core@7.28.6) - '@svgr/core': 8.1.0(typescript@5.9.3) - '@svgr/hast-util-to-babel-ast': 8.0.0 - svg-parser: 2.0.4 - transitivePeerDependencies: - - supports-color - - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3)': - dependencies: - '@svgr/core': 8.1.0(typescript@5.9.3) - cosmiconfig: 8.3.6(typescript@5.9.3) - deepmerge: 4.3.1 - svgo: 3.3.2 - transitivePeerDependencies: - - typescript - - '@svgr/webpack@8.1.0(typescript@5.9.3)': - dependencies: - '@babel/core': 7.28.6 - '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.28.6) - '@babel/preset-env': 7.28.6(@babel/core@7.28.6) - '@babel/preset-react': 7.28.5(@babel/core@7.28.6) - '@babel/preset-typescript': 7.28.5(@babel/core@7.28.6) - '@svgr/core': 8.1.0(typescript@5.9.3) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3) - transitivePeerDependencies: - - supports-color - - typescript - - '@swc/helpers@0.5.18': - dependencies: - tslib: 2.8.1 - - '@szmarczak/http-timer@4.0.6': - dependencies: - defer-to-connect: 2.0.1 - - '@trysound/sax@0.2.0': {} - - '@tybys/wasm-util@0.10.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@types/body-parser@1.19.6': - dependencies: - '@types/connect': 3.4.38 - '@types/node': 25.0.9 - - '@types/bonjour@3.5.13': - dependencies: - '@types/node': 25.0.9 - - '@types/cacheable-request@6.0.3': - dependencies: - '@types/http-cache-semantics': 4.0.4 - '@types/keyv': 3.1.4 - '@types/node': 25.0.9 - '@types/responselike': 1.0.3 - - '@types/chai@5.2.3': - dependencies: - '@types/deep-eql': 4.0.2 - assertion-error: 2.0.1 - - '@types/combokeys@2.4.9': {} - - '@types/connect-history-api-fallback@1.5.4': - dependencies: - '@types/express-serve-static-core': 4.19.8 - '@types/node': 25.0.9 - - '@types/connect@3.4.38': - dependencies: - '@types/node': 25.0.9 - - '@types/debug@4.1.12': - dependencies: - '@types/ms': 2.1.0 - - '@types/deep-eql@4.0.2': {} - - '@types/dom-mediacapture-record@1.0.22': {} - - '@types/dom-mediacapture-transform@0.1.11': - dependencies: - '@types/dom-webcodecs': 0.1.18 - - '@types/dom-webcodecs@0.1.18': {} - - '@types/electron-squirrel-startup@1.0.2': {} - - '@types/eslint-scope@3.7.7': - dependencies: - '@types/eslint': 9.6.1 - '@types/estree': 1.0.8 - optional: true - - '@types/eslint@9.6.1': - dependencies: - '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 - optional: true - - '@types/estree@1.0.8': {} - - '@types/express-serve-static-core@4.19.8': - dependencies: - '@types/node': 25.0.9 - '@types/qs': 6.14.0 - '@types/range-parser': 1.2.7 - '@types/send': 1.2.1 - - '@types/express@4.17.25': - dependencies: - '@types/body-parser': 1.19.6 - '@types/express-serve-static-core': 4.19.8 - '@types/qs': 6.14.0 - '@types/serve-static': 1.15.10 - - '@types/fs-extra@9.0.13': - dependencies: - '@types/node': 25.0.9 - - '@types/http-cache-semantics@4.0.4': {} - - '@types/http-errors@2.0.5': {} - - '@types/http-proxy@1.17.17': - dependencies: - '@types/node': 25.0.9 - - '@types/istanbul-lib-coverage@2.0.6': {} - - '@types/istanbul-lib-report@3.0.3': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - - '@types/istanbul-reports@3.0.4': - dependencies: - '@types/istanbul-lib-report': 3.0.3 - - '@types/jsdom@27.0.0': - dependencies: - '@types/node': 25.0.9 - '@types/tough-cookie': 4.0.5 - parse5: 7.3.0 - - '@types/json-schema@7.0.15': {} - - '@types/keyv@3.1.4': - dependencies: - '@types/node': 25.0.9 - - '@types/lodash@4.17.23': {} - - '@types/luxon@3.7.1': {} - - '@types/mime@1.3.5': {} - - '@types/ms@2.1.0': {} - - '@types/node-forge@1.3.14': - dependencies: - '@types/node': 25.0.9 - - '@types/node@20.19.30': - dependencies: - undici-types: 6.21.0 - - '@types/node@22.19.7': - dependencies: - undici-types: 6.21.0 - - '@types/node@25.0.9': - dependencies: - undici-types: 7.16.0 - - '@types/parse-json@4.0.2': {} - - '@types/plist@3.0.5': - dependencies: - '@types/node': 25.0.9 - xmlbuilder: 15.1.1 - optional: true - - '@types/qrcode@1.5.6': - dependencies: - '@types/node': 25.0.9 - - '@types/qs@6.14.0': {} - - '@types/range-parser@1.2.7': {} - - '@types/react-dom@19.2.3(@types/react@19.2.8)': - dependencies: - '@types/react': 19.2.8 - - '@types/react-transition-group@4.4.12(@types/react@19.2.8)': - dependencies: - '@types/react': 19.2.8 - - '@types/react@19.2.8': - dependencies: - csstype: 3.2.3 - - '@types/responselike@1.0.3': - dependencies: - '@types/node': 25.0.9 - - '@types/retry@0.12.2': {} - - '@types/send@0.17.6': - dependencies: - '@types/mime': 1.3.5 - '@types/node': 25.0.9 - - '@types/send@1.2.1': - dependencies: - '@types/node': 25.0.9 - - '@types/serve-index@1.9.4': - dependencies: - '@types/express': 4.17.25 - - '@types/serve-static@1.15.10': - dependencies: - '@types/http-errors': 2.0.5 - '@types/node': 25.0.9 - '@types/send': 0.17.6 - - '@types/sockjs@0.3.36': - dependencies: - '@types/node': 25.0.9 - - '@types/tough-cookie@4.0.5': {} - - '@types/verror@1.10.11': - optional: true - - '@types/whatwg-mimetype@3.0.2': {} - - '@types/ws@8.18.1': - dependencies: - '@types/node': 25.0.9 - - '@types/yargs-parser@21.0.3': {} - - '@types/yargs@17.0.35': - dependencies: - '@types/yargs-parser': 21.0.3 - - '@types/yauzl@2.10.3': - dependencies: - '@types/node': 25.0.9 - optional: true - - '@vitest/coverage-v8@4.0.17(vitest@4.0.17(@types/node@25.0.9)(happy-dom@20.3.0)(jiti@2.6.1)(jsdom@27.4.0)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0))': - dependencies: - '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.17 - ast-v8-to-istanbul: 0.3.10 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-reports: 3.2.0 - magicast: 0.5.1 - obug: 2.1.1 - std-env: 3.10.0 - tinyrainbow: 3.0.3 - vitest: 4.0.17(@types/node@25.0.9)(happy-dom@20.3.0)(jiti@2.6.1)(jsdom@27.4.0)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0) - - '@vitest/expect@4.0.17': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@vitest/spy': 4.0.17 - '@vitest/utils': 4.0.17 - chai: 6.2.2 - tinyrainbow: 3.0.3 - - '@vitest/mocker@4.0.17(vite@7.3.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0))': - dependencies: - '@vitest/spy': 4.0.17 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 7.3.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0) - - '@vitest/pretty-format@4.0.17': - dependencies: - tinyrainbow: 3.0.3 - - '@vitest/runner@4.0.17': - dependencies: - '@vitest/utils': 4.0.17 - pathe: 2.0.3 - - '@vitest/snapshot@4.0.17': - dependencies: - '@vitest/pretty-format': 4.0.17 - magic-string: 0.30.21 - pathe: 2.0.3 - - '@vitest/spy@4.0.17': {} - - '@vitest/utils@4.0.17': - dependencies: - '@vitest/pretty-format': 4.0.17 - tinyrainbow: 3.0.3 - - '@webassemblyjs/ast@1.14.1': - dependencies: - '@webassemblyjs/helper-numbers': 1.13.2 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - optional: true - - '@webassemblyjs/floating-point-hex-parser@1.13.2': - optional: true - - '@webassemblyjs/helper-api-error@1.13.2': - optional: true - - '@webassemblyjs/helper-buffer@1.14.1': - optional: true - - '@webassemblyjs/helper-numbers@1.13.2': - dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.13.2 - '@webassemblyjs/helper-api-error': 1.13.2 - '@xtuc/long': 4.2.2 - optional: true - - '@webassemblyjs/helper-wasm-bytecode@1.13.2': - optional: true - - '@webassemblyjs/helper-wasm-section@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/wasm-gen': 1.14.1 - optional: true - - '@webassemblyjs/ieee754@1.13.2': - dependencies: - '@xtuc/ieee754': 1.2.0 - optional: true - - '@webassemblyjs/leb128@1.13.2': - dependencies: - '@xtuc/long': 4.2.2 - optional: true - - '@webassemblyjs/utf8@1.13.2': - optional: true - - '@webassemblyjs/wasm-edit@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/helper-wasm-section': 1.14.1 - '@webassemblyjs/wasm-gen': 1.14.1 - '@webassemblyjs/wasm-opt': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - '@webassemblyjs/wast-printer': 1.14.1 - optional: true - - '@webassemblyjs/wasm-gen@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/ieee754': 1.13.2 - '@webassemblyjs/leb128': 1.13.2 - '@webassemblyjs/utf8': 1.13.2 - optional: true - - '@webassemblyjs/wasm-opt@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/wasm-gen': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - optional: true - - '@webassemblyjs/wasm-parser@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-api-error': 1.13.2 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/ieee754': 1.13.2 - '@webassemblyjs/leb128': 1.13.2 - '@webassemblyjs/utf8': 1.13.2 - optional: true - - '@webassemblyjs/wast-printer@1.14.1': - dependencies: - '@webassemblyjs/ast': 1.14.1 - '@xtuc/long': 4.2.2 - optional: true - - '@xmldom/xmldom@0.8.11': {} - - '@xtuc/ieee754@1.2.0': - optional: true - - '@xtuc/long@4.2.2': - optional: true - - abbrev@3.0.1: {} - - accepts@1.3.8: - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - - acorn-import-phases@1.0.4(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - optional: true - - acorn-walk@8.3.4: - dependencies: - acorn: 8.15.0 - - acorn@8.15.0: {} - - agent-base@7.1.4: {} - - ajv-formats@2.1.1(ajv@8.17.1): - optionalDependencies: - ajv: 8.17.1 - - ajv-keywords@3.5.2(ajv@6.12.6): - dependencies: - ajv: 6.12.6 - - ajv-keywords@5.1.0(ajv@8.17.1): - dependencies: - ajv: 8.17.1 - fast-deep-equal: 3.1.3 - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ajv@8.17.1: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - - ansi-html-community@0.0.8: {} - - ansi-regex@5.0.1: {} - - ansi-regex@6.2.2: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@5.2.0: {} - - ansi-styles@6.2.3: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - app-builder-bin@5.0.0-alpha.12: {} - - app-builder-lib@26.4.0(dmg-builder@26.4.0)(electron-builder-squirrel-windows@26.4.0): - dependencies: - '@develar/schema-utils': 2.6.5 - '@electron/asar': 3.4.1 - '@electron/fuses': 1.8.0 - '@electron/notarize': 2.5.0 - '@electron/osx-sign': 1.3.3 - '@electron/rebuild': 4.0.1 - '@electron/universal': 2.0.3 - '@malept/flatpak-bundler': 0.4.0 - '@types/fs-extra': 9.0.13 - async-exit-hook: 2.0.1 - builder-util: 26.3.4 - builder-util-runtime: 9.5.1 - chromium-pickle-js: 0.2.0 - ci-info: 4.3.1 - debug: 4.4.3 - dmg-builder: 26.4.0(electron-builder-squirrel-windows@26.4.0) - dotenv: 16.6.1 - dotenv-expand: 11.0.7 - ejs: 3.1.10 - electron-builder-squirrel-windows: 26.4.0(dmg-builder@26.4.0) - electron-publish: 26.3.4 - fs-extra: 10.1.0 - hosted-git-info: 4.1.0 - isbinaryfile: 5.0.7 - jiti: 2.6.1 - js-yaml: 4.1.1 - json5: 2.2.3 - lazy-val: 1.0.5 - minimatch: 10.1.1 - plist: 3.1.0 - resedit: 1.7.2 - semver: 7.7.3 - tar: 6.2.1 - temp-file: 3.4.0 - tiny-async-pool: 1.3.0 - which: 5.0.0 - transitivePeerDependencies: - - supports-color - - argparse@2.0.1: {} - - array-flatten@1.1.1: {} - - assert-plus@1.0.0: - optional: true - - assertion-error@2.0.1: {} - - ast-v8-to-istanbul@0.3.10: - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - estree-walker: 3.0.3 - js-tokens: 9.0.1 - - astral-regex@2.0.0: - optional: true - - async-exit-hook@2.0.1: {} - - async@3.2.6: {} - - asynckit@0.4.0: {} - - at-least-node@1.0.0: {} - - autoprefixer@10.4.23(postcss@8.5.6): - dependencies: - browserslist: 4.28.1 - caniuse-lite: 1.0.30001764 - fraction.js: 5.3.4 - picocolors: 1.1.1 - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - axios@0.26.1: - dependencies: - follow-redirects: 1.15.11 - transitivePeerDependencies: - - debug - - babel-plugin-macros@3.1.0: - dependencies: - '@babel/runtime': 7.28.6 - cosmiconfig: 7.1.0 - resolve: 1.22.11 - - babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.6): - dependencies: - '@babel/compat-data': 7.28.6 - '@babel/core': 7.28.6 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.6) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.6): - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.6) - core-js-compat: 3.47.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.6): - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.6) - transitivePeerDependencies: - - supports-color - - balanced-match@1.0.2: {} - - base64-js@1.5.1: {} - - baseline-browser-mapping@2.9.14: {} - - batch@0.6.1: {} - - bidi-js@1.0.3: - dependencies: - require-from-string: 2.0.2 - - binary-extensions@2.3.0: {} - - binary-install@1.1.2: - dependencies: - axios: 0.26.1 - rimraf: 3.0.2 - tar: 6.2.1 - transitivePeerDependencies: - - debug - - bindings@1.5.0: - dependencies: - file-uri-to-path: 1.0.0 - - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - - body-parser@1.20.4: - 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.1 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.14.1 - raw-body: 2.5.3 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - bonjour-service@1.3.0: - dependencies: - fast-deep-equal: 3.1.3 - multicast-dns: 7.2.5 - - boolbase@1.0.0: {} - - boolean@3.2.0: - optional: true - - bowser@2.13.1: {} - - brace-expansion@1.1.12: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.2: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - browserslist@4.28.1: - dependencies: - baseline-browser-mapping: 2.9.14 - caniuse-lite: 1.0.30001764 - electron-to-chromium: 1.5.267 - node-releases: 2.0.27 - update-browserslist-db: 1.2.3(browserslist@4.28.1) - - buffer-crc32@0.2.13: {} - - buffer-from@1.1.2: {} - - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - builder-util-runtime@9.5.1: - dependencies: - debug: 4.4.3 - sax: 1.4.4 - transitivePeerDependencies: - - supports-color - - builder-util@26.3.4: - dependencies: - 7zip-bin: 5.2.0 - '@types/debug': 4.1.12 - app-builder-bin: 5.0.0-alpha.12 - builder-util-runtime: 9.5.1 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3 - fs-extra: 10.1.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - js-yaml: 4.1.1 - sanitize-filename: 1.6.3 - source-map-support: 0.5.21 - stat-mode: 1.0.0 - temp-file: 3.4.0 - tiny-async-pool: 1.3.0 - transitivePeerDependencies: - - supports-color - - bundle-name@4.1.0: - dependencies: - run-applescript: 7.1.0 - - bytes@3.1.2: {} - - cacache@19.0.1: - dependencies: - '@npmcli/fs': 4.0.0 - fs-minipass: 3.0.3 - glob: 10.5.0 - lru-cache: 10.4.3 - minipass: 7.1.2 - minipass-collect: 2.0.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - p-map: 7.0.4 - ssri: 12.0.0 - tar: 7.5.2 - unique-filename: 4.0.0 - - cacheable-lookup@5.0.4: {} - - cacheable-request@7.0.4: - dependencies: - clone-response: 1.0.3 - get-stream: 5.2.0 - http-cache-semantics: 4.2.0 - keyv: 4.5.4 - lowercase-keys: 2.0.0 - normalize-url: 6.1.0 - responselike: 2.0.1 - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} - - camelcase@5.3.1: {} - - camelcase@6.3.0: {} - - caniuse-lite@1.0.30001764: {} - - chai@6.2.2: {} - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chokidar@3.5.1: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.5.0 - optionalDependencies: - fsevents: 2.3.3 - - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - chokidar@5.0.0: - dependencies: - readdirp: 5.0.0 - - chownr@2.0.0: {} - - chownr@3.0.0: {} - - chrome-trace-event@1.0.4: - optional: true - - chromium-pickle-js@0.2.0: {} - - ci-info@4.3.1: {} - - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - - cli-spinners@2.9.2: {} - - cli-table@0.3.11: - dependencies: - colors: 1.0.3 - - cli-truncate@2.1.0: - dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.3 - optional: true - - client-only@0.0.1: {} - - cliui@6.0.0: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - clone-response@1.0.3: - dependencies: - mimic-response: 1.0.1 - - clone@1.0.4: {} - - clsx@2.1.1: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - colorette@2.0.20: {} - - colorjs.io@0.6.0: {} - - colors@1.0.3: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - combokeys@3.0.1: {} - - commander@10.0.1: {} - - commander@2.20.3: - optional: true - - commander@5.1.0: {} - - commander@7.2.0: {} - - commander@8.3.0: {} - - commander@9.5.0: - optional: true - - compare-version@0.1.2: {} - - compressible@2.0.18: - dependencies: - mime-db: 1.54.0 - - compression@1.8.1: - dependencies: - bytes: 3.1.2 - compressible: 2.0.18 - debug: 2.6.9 - negotiator: 0.6.4 - on-headers: 1.1.0 - safe-buffer: 5.2.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - concat-map@0.0.1: {} - - connect-history-api-fallback@2.0.0: {} - - content-disposition@0.5.4: - dependencies: - safe-buffer: 5.2.1 - - content-type@1.0.5: {} - - convert-source-map@1.9.0: {} - - convert-source-map@2.0.0: {} - - cookie-signature@1.0.7: {} - - cookie@0.7.2: {} - - core-js-compat@3.47.0: - dependencies: - browserslist: 4.28.1 - - core-util-is@1.0.2: - optional: true - - core-util-is@1.0.3: {} - - cosmiconfig@7.1.0: - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.1 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - - cosmiconfig@8.3.6(typescript@5.9.3): - dependencies: - import-fresh: 3.3.1 - js-yaml: 4.1.1 - parse-json: 5.2.0 - path-type: 4.0.0 - optionalDependencies: - typescript: 5.9.3 - - cosmiconfig@9.0.0(typescript@5.9.3): - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.1 - js-yaml: 4.1.1 - parse-json: 5.2.0 - optionalDependencies: - typescript: 5.9.3 - - crc@3.8.0: - dependencies: - buffer: 5.7.1 - optional: true - - cross-dirname@0.1.0: - optional: true - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - css-blank-pseudo@8.0.1(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - - css-has-pseudo@8.0.0(postcss@8.5.6): - dependencies: - '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - postcss-value-parser: 4.2.0 - - css-prefers-color-scheme@11.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - css-select@5.2.2: - dependencies: - boolbase: 1.0.0 - css-what: 6.2.2 - domhandler: 5.0.3 - domutils: 3.2.2 - nth-check: 2.1.1 - - css-tree@2.2.1: - dependencies: - mdn-data: 2.0.28 - source-map-js: 1.2.1 - - css-tree@2.3.1: - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.2.1 - - css-tree@3.1.0: - dependencies: - mdn-data: 2.12.2 - source-map-js: 1.2.1 - - css-what@6.2.2: {} - - cssdb@8.7.0: {} - - cssesc@3.0.0: {} - - csso@5.0.5: - dependencies: - css-tree: 2.2.1 - - cssstyle@5.3.7: - dependencies: - '@asamuzakjp/css-color': 4.1.1 - '@csstools/css-syntax-patches-for-csstree': 1.0.25 - css-tree: 3.1.0 - lru-cache: 11.2.4 - - csstype@3.2.3: {} - - data-urls@6.0.0: - dependencies: - whatwg-mimetype: 4.0.0 - whatwg-url: 15.1.0 - - date-fns@3.6.0: {} - - debounce@1.2.1: {} - - debug@2.6.9: - dependencies: - ms: 2.0.0 - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - decamelize@1.2.0: {} - - decimal.js@10.6.0: {} - - decompress-response@6.0.0: - dependencies: - mimic-response: 3.1.0 - - deepmerge@4.3.1: {} - - default-browser-id@5.0.1: {} - - default-browser@5.4.0: - dependencies: - bundle-name: 4.1.0 - default-browser-id: 5.0.1 - - defaults@1.0.4: - dependencies: - clone: 1.0.4 - - defer-to-connect@2.0.1: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - optional: true - - define-lazy-prop@3.0.0: {} - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - optional: true - - delayed-stream@1.0.0: {} - - depd@1.1.2: {} - - depd@2.0.0: {} - - destroy@1.2.0: {} - - detect-libc@2.1.2: {} - - detect-node@2.1.0: {} - - dijkstrajs@1.0.3: {} - - dir-compare@4.2.0: - dependencies: - minimatch: 3.1.2 - p-limit: 3.1.0 - - dmg-builder@26.4.0(electron-builder-squirrel-windows@26.4.0): - dependencies: - app-builder-lib: 26.4.0(dmg-builder@26.4.0)(electron-builder-squirrel-windows@26.4.0) - builder-util: 26.3.4 - fs-extra: 10.1.0 - iconv-lite: 0.6.3 - js-yaml: 4.1.1 - optionalDependencies: - dmg-license: 1.0.11 - transitivePeerDependencies: - - electron-builder-squirrel-windows - - supports-color - - dmg-license@1.0.11: - dependencies: - '@types/plist': 3.0.5 - '@types/verror': 1.10.11 - ajv: 6.12.6 - crc: 3.8.0 - iconv-corefoundation: 1.1.7 - plist: 3.1.0 - smart-buffer: 4.2.0 - verror: 1.10.1 - optional: true - - dnd-core@16.0.1: - dependencies: - '@react-dnd/asap': 5.0.2 - '@react-dnd/invariant': 4.0.2 - redux: 4.2.1 - - dnd-multi-backend@9.0.0(dnd-core@16.0.1): - dependencies: - dnd-core: 16.0.1 - - dns-packet@5.6.1: - dependencies: - '@leichtgewicht/ip-codec': 2.0.5 - - dom-helpers@5.2.1: - dependencies: - '@babel/runtime': 7.28.6 - csstype: 3.2.3 - - dom-serializer@2.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.5.0 - - domelementtype@2.3.0: {} - - domhandler@5.0.3: - dependencies: - domelementtype: 2.3.0 - - domutils@3.2.2: - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - - dot-case@3.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.8.1 - - dotenv-expand@11.0.7: - dependencies: - dotenv: 16.6.1 - - dotenv@16.6.1: {} - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - duplexer@0.1.2: {} - - eastasianwidth@0.2.0: {} - - ee-first@1.1.1: {} - - ejs@3.1.10: - dependencies: - jake: 10.9.4 - - electron-builder-squirrel-windows@26.4.0(dmg-builder@26.4.0): - dependencies: - app-builder-lib: 26.4.0(dmg-builder@26.4.0)(electron-builder-squirrel-windows@26.4.0) - builder-util: 26.3.4 - electron-winstaller: 5.4.0 - transitivePeerDependencies: - - dmg-builder - - supports-color - - electron-builder@26.4.0(electron-builder-squirrel-windows@26.4.0): - dependencies: - app-builder-lib: 26.4.0(dmg-builder@26.4.0)(electron-builder-squirrel-windows@26.4.0) - builder-util: 26.3.4 - builder-util-runtime: 9.5.1 - chalk: 4.1.2 - ci-info: 4.3.1 - dmg-builder: 26.4.0(electron-builder-squirrel-windows@26.4.0) - fs-extra: 10.1.0 - lazy-val: 1.0.5 - simple-update-notifier: 2.0.0 - yargs: 17.7.2 - transitivePeerDependencies: - - electron-builder-squirrel-windows - - supports-color - - electron-log@5.4.3: - optional: true - - electron-publish@26.3.4: - dependencies: - '@types/fs-extra': 9.0.13 - builder-util: 26.3.4 - builder-util-runtime: 9.5.1 - chalk: 4.1.2 - form-data: 4.0.5 - fs-extra: 10.1.0 - lazy-val: 1.0.5 - mime: 2.6.0 - transitivePeerDependencies: - - supports-color - - electron-squirrel-startup@1.0.1: - dependencies: - debug: 2.6.9 - transitivePeerDependencies: - - supports-color - - electron-to-chromium@1.5.267: {} - - electron-winstaller@5.4.0: - dependencies: - '@electron/asar': 3.4.1 - debug: 4.4.3 - fs-extra: 7.0.1 - lodash: 4.17.21 - temp: 0.9.4 - optionalDependencies: - '@electron/windows-sign': 1.2.2 - transitivePeerDependencies: - - supports-color - - electron@39.2.7: - dependencies: - '@electron/get': 2.0.3 - '@types/node': 22.19.7 - extract-zip: 2.0.1 - transitivePeerDependencies: - - supports-color - - emoji-regex@10.6.0: {} - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - encodeurl@2.0.0: {} - - encoding@0.1.13: - dependencies: - iconv-lite: 0.6.3 - optional: true - - end-of-stream@1.4.5: - dependencies: - once: 1.4.0 - - enhanced-resolve@5.18.4: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.3.0 - optional: true - - entities@4.5.0: {} - - entities@6.0.1: {} - - env-paths@2.2.1: {} - - err-code@2.0.3: {} - - error-ex@1.3.4: - dependencies: - is-arrayish: 0.2.1 - - error-stack-parser@2.1.4: - dependencies: - stackframe: 1.3.4 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-module-lexer@1.7.0: {} - - es-module-lexer@2.0.0: - optional: true - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es6-error@4.1.1: - optional: true - - esbuild@0.25.12: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.12 - '@esbuild/android-arm': 0.25.12 - '@esbuild/android-arm64': 0.25.12 - '@esbuild/android-x64': 0.25.12 - '@esbuild/darwin-arm64': 0.25.12 - '@esbuild/darwin-x64': 0.25.12 - '@esbuild/freebsd-arm64': 0.25.12 - '@esbuild/freebsd-x64': 0.25.12 - '@esbuild/linux-arm': 0.25.12 - '@esbuild/linux-arm64': 0.25.12 - '@esbuild/linux-ia32': 0.25.12 - '@esbuild/linux-loong64': 0.25.12 - '@esbuild/linux-mips64el': 0.25.12 - '@esbuild/linux-ppc64': 0.25.12 - '@esbuild/linux-riscv64': 0.25.12 - '@esbuild/linux-s390x': 0.25.12 - '@esbuild/linux-x64': 0.25.12 - '@esbuild/netbsd-arm64': 0.25.12 - '@esbuild/netbsd-x64': 0.25.12 - '@esbuild/openbsd-arm64': 0.25.12 - '@esbuild/openbsd-x64': 0.25.12 - '@esbuild/openharmony-arm64': 0.25.12 - '@esbuild/sunos-x64': 0.25.12 - '@esbuild/win32-arm64': 0.25.12 - '@esbuild/win32-ia32': 0.25.12 - '@esbuild/win32-x64': 0.25.12 - - esbuild@0.27.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.2 - '@esbuild/android-arm': 0.27.2 - '@esbuild/android-arm64': 0.27.2 - '@esbuild/android-x64': 0.27.2 - '@esbuild/darwin-arm64': 0.27.2 - '@esbuild/darwin-x64': 0.27.2 - '@esbuild/freebsd-arm64': 0.27.2 - '@esbuild/freebsd-x64': 0.27.2 - '@esbuild/linux-arm': 0.27.2 - '@esbuild/linux-arm64': 0.27.2 - '@esbuild/linux-ia32': 0.27.2 - '@esbuild/linux-loong64': 0.27.2 - '@esbuild/linux-mips64el': 0.27.2 - '@esbuild/linux-ppc64': 0.27.2 - '@esbuild/linux-riscv64': 0.27.2 - '@esbuild/linux-s390x': 0.27.2 - '@esbuild/linux-x64': 0.27.2 - '@esbuild/netbsd-arm64': 0.27.2 - '@esbuild/netbsd-x64': 0.27.2 - '@esbuild/openbsd-arm64': 0.27.2 - '@esbuild/openbsd-x64': 0.27.2 - '@esbuild/openharmony-arm64': 0.27.2 - '@esbuild/sunos-x64': 0.27.2 - '@esbuild/win32-arm64': 0.27.2 - '@esbuild/win32-ia32': 0.27.2 - '@esbuild/win32-x64': 0.27.2 - - escalade@3.2.0: {} - - escape-html@1.0.3: {} - - escape-string-regexp@4.0.0: {} - - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - optional: true - - esm@3.2.25: - optional: true - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - optional: true - - estraverse@4.3.0: - optional: true - - estraverse@5.3.0: - optional: true - - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.8 - - esutils@2.0.3: {} - - etag@1.8.1: {} - - eventemitter3@4.0.7: {} - - eventemitter3@5.0.1: {} - - events@3.3.0: {} - - exit-hook@4.0.0: {} - - expect-type@1.3.0: {} - - exponential-backoff@3.1.3: {} - - express@4.22.1: - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.4 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.7.2 - cookie-signature: 1.0.7 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.3.2 - fresh: 0.5.2 - http-errors: 2.0.1 - merge-descriptors: 1.0.3 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.12 - proxy-addr: 2.0.7 - qs: 6.14.1 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.19.2 - serve-static: 1.16.3 - setprototypeof: 1.2.0 - statuses: 2.0.2 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - extract-zip@2.0.1: - dependencies: - debug: 4.4.3 - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color - - extsprintf@1.4.1: - optional: true - - fast-deep-equal@3.1.3: {} - - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fast-json-stable-stringify@2.1.0: {} - - fast-uri@3.1.0: {} - - fastq@1.20.1: - dependencies: - reusify: 1.1.0 - - favico.js@0.3.10: {} - - faye-websocket@0.11.4: - dependencies: - websocket-driver: 0.7.4 - - fd-package-json@2.0.0: - dependencies: - walk-up-path: 4.0.0 - - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - - file-uri-to-path@1.0.0: {} - - filelist@1.0.4: - dependencies: - minimatch: 5.1.6 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - finalhandler@1.3.2: - dependencies: - debug: 2.6.9 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.2 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - find-root@1.1.0: {} - - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - - follow-redirects@1.15.11: {} - - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - form-data@4.0.5: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 - - formatly@0.3.0: - dependencies: - fd-package-json: 2.0.0 - - forwarded@0.2.0: {} - - fraction.js@5.3.4: {} - - framer-motion@12.26.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - motion-dom: 12.26.2 - motion-utils: 12.24.10 - tslib: 2.8.1 - optionalDependencies: - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - fresh@0.5.2: {} - - fs-extra@10.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs-extra@11.3.3: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs-extra@7.0.1: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - - fs-extra@8.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - - fs-extra@9.1.0: - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - - fs-minipass@3.0.3: - dependencies: - minipass: 7.1.2 - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - generic-names@4.0.0: - dependencies: - loader-utils: 3.3.1 - - gensync@1.0.0-beta.2: {} - - get-caller-file@2.0.5: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-stream@5.2.0: - dependencies: - pump: 3.0.3 - - get-tsconfig@4.13.0: - dependencies: - resolve-pkg-maps: 1.0.0 - - github-url-to-object@4.0.6: - dependencies: - is-url: 1.2.4 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-to-regex.js@1.2.0(tslib@2.8.1): - dependencies: - tslib: 2.8.1 - - glob-to-regexp@0.4.1: - optional: true - - glob@10.5.0: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - glob@11.1.0: - dependencies: - foreground-child: 3.3.1 - jackspeak: 4.1.1 - minimatch: 10.1.1 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 2.0.1 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - global-agent@3.0.0: - dependencies: - boolean: 3.2.0 - es6-error: 4.1.1 - matcher: 3.0.0 - roarr: 2.15.4 - semver: 7.7.3 - serialize-error: 7.0.1 - optional: true - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - optional: true - - gopd@1.2.0: {} - - got@11.8.6: - dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 4.0.6 - '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.3 - cacheable-lookup: 5.0.4 - cacheable-request: 7.0.4 - decompress-response: 6.0.0 - http2-wrapper: 1.0.3 - lowercase-keys: 2.0.0 - p-cancelable: 2.1.1 - responselike: 2.0.1 - - graceful-fs@4.2.11: {} - - gzip-size@6.0.0: - dependencies: - duplexer: 0.1.2 - - handle-thing@2.0.1: {} - - happy-dom@20.3.0: - dependencies: - '@types/node': 20.19.30 - '@types/whatwg-mimetype': 3.0.2 - '@types/ws': 8.18.1 - whatwg-mimetype: 3.0.0 - ws: 8.19.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - optional: true - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - highlight.js@11.11.1: {} - - hoist-non-react-statics@3.3.2: - dependencies: - react-is: 16.13.1 - - hosted-git-info@4.1.0: - dependencies: - lru-cache: 6.0.0 - - hpack.js@2.1.6: - dependencies: - inherits: 2.0.4 - obuf: 1.1.2 - readable-stream: 2.3.8 - wbuf: 1.7.3 - - html-encoding-sniffer@6.0.0: - dependencies: - '@exodus/bytes': 1.8.0 - transitivePeerDependencies: - - '@exodus/crypto' - - html-entities@2.6.0: {} - - html-escaper@2.0.2: {} - - http-cache-semantics@4.2.0: {} - - http-deceiver@1.2.7: {} - - http-errors@1.6.3: - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.5.0 - - http-errors@2.0.1: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.2 - toidentifier: 1.0.1 - - http-parser-js@0.5.10: {} - - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - http-proxy-middleware@2.0.9(@types/express@4.17.25): - dependencies: - '@types/http-proxy': 1.17.17 - http-proxy: 1.18.1 - is-glob: 4.0.3 - is-plain-obj: 3.0.0 - micromatch: 4.0.8 - optionalDependencies: - '@types/express': 4.17.25 - transitivePeerDependencies: - - debug - - http-proxy@1.18.1: - dependencies: - eventemitter3: 4.0.7 - follow-redirects: 1.15.11 - requires-port: 1.0.0 - transitivePeerDependencies: - - debug - - http2-wrapper@1.0.3: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - hyperdyperid@1.2.0: {} - - iconv-corefoundation@1.1.7: - dependencies: - cli-truncate: 2.1.0 - node-addon-api: 1.7.2 - optional: true - - iconv-lite@0.4.24: - dependencies: - safer-buffer: 2.1.2 - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - icss-replace-symbols@1.1.0: {} - - icss-utils@5.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - idna-uts46-hx@6.1.0: - dependencies: - tr46: 6.0.0 - - ieee754@1.2.1: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - imurmurhash@0.1.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.3: {} - - inherits@2.0.4: {} - - intl-messageformat@10.7.18: - dependencies: - '@formatjs/ecma402-abstract': 2.3.6 - '@formatjs/fast-memoize': 2.2.7 - '@formatjs/icu-messageformat-parser': 2.11.4 - tslib: 2.8.1 - - ip-address@10.1.0: {} - - ipaddr.js@1.9.1: {} - - ipaddr.js@2.3.0: {} - - is-arrayish@0.2.1: {} - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-docker@3.0.0: {} - - is-extglob@2.1.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-inside-container@1.0.0: - dependencies: - is-docker: 3.0.0 - - is-interactive@1.0.0: {} - - is-network-error@1.3.0: {} - - is-number@7.0.0: {} - - is-observable@2.1.0: {} - - is-plain-obj@3.0.0: {} - - is-potential-custom-element-name@1.0.1: {} - - is-there@4.5.2: {} - - is-unicode-supported@0.1.0: {} - - is-url@1.2.4: {} - - is-wsl@3.1.0: - dependencies: - is-inside-container: 1.0.0 - - isarray@1.0.0: {} - - isbinaryfile@4.0.10: {} - - isbinaryfile@5.0.7: {} - - isexe@2.0.0: {} - - isexe@3.1.1: {} - - istanbul-lib-coverage@3.2.2: {} - - istanbul-lib-report@3.0.1: - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - - istanbul-reports@3.2.0: - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jackspeak@4.1.1: - dependencies: - '@isaacs/cliui': 8.0.2 - - jake@10.9.4: - dependencies: - async: 3.2.6 - filelist: 1.0.4 - picocolors: 1.1.1 - - jest-get-type@29.6.3: {} - - jest-validate@29.7.0: - dependencies: - '@jest/types': 29.6.3 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 29.6.3 - leven: 3.1.0 - pretty-format: 29.7.0 - - jest-worker@27.5.1: - dependencies: - '@types/node': 25.0.9 - merge-stream: 2.0.0 - supports-color: 8.1.1 - optional: true - - jiti@2.6.1: {} - - jose@6.1.3: {} - - js-sha256@0.10.1: {} - - js-tokens@4.0.0: {} - - js-tokens@9.0.1: {} - - js-yaml@4.1.1: - dependencies: - argparse: 2.0.1 - - jsdom@27.4.0: - dependencies: - '@acemir/cssom': 0.9.31 - '@asamuzakjp/dom-selector': 6.7.6 - '@exodus/bytes': 1.8.0 - cssstyle: 5.3.7 - data-urls: 6.0.0 - decimal.js: 10.6.0 - html-encoding-sniffer: 6.0.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - is-potential-custom-element-name: 1.0.1 - parse5: 8.0.0 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 6.0.0 - w3c-xmlserializer: 5.0.0 - webidl-conversions: 8.0.1 - whatwg-mimetype: 4.0.0 - whatwg-url: 15.1.0 - ws: 8.19.0 - xml-name-validator: 5.0.0 - transitivePeerDependencies: - - '@exodus/crypto' - - bufferutil - - supports-color - - utf-8-validate - - jsesc@3.1.0: {} - - json-buffer@3.0.1: {} - - json-parse-even-better-errors@2.3.1: {} - - json-schema-traverse@0.4.1: {} - - json-schema-traverse@1.0.0: {} - - json-stringify-safe@5.0.1: - optional: true - - json5@2.2.3: {} - - jsonfile@4.0.0: - optionalDependencies: - graceful-fs: 4.2.11 - - jsonfile@6.2.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - - katex@0.16.27: - dependencies: - commander: 8.3.0 - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - launch-editor@2.12.0: - dependencies: - picocolors: 1.1.1 - shell-quote: 1.8.3 - - lazy-val@1.0.5: {} - - leven@3.1.0: {} - - lightningcss-android-arm64@1.30.2: - optional: true - - lightningcss-darwin-arm64@1.30.2: - optional: true - - lightningcss-darwin-x64@1.30.2: - optional: true - - lightningcss-freebsd-x64@1.30.2: - optional: true - - lightningcss-linux-arm-gnueabihf@1.30.2: - optional: true - - lightningcss-linux-arm64-gnu@1.30.2: - optional: true - - lightningcss-linux-arm64-musl@1.30.2: - optional: true - - lightningcss-linux-x64-gnu@1.30.2: - optional: true - - lightningcss-linux-x64-musl@1.30.2: - optional: true - - lightningcss-win32-arm64-msvc@1.30.2: - optional: true - - lightningcss-win32-x64-msvc@1.30.2: - optional: true - - lightningcss@1.30.2: - dependencies: - detect-libc: 2.1.2 - optionalDependencies: - lightningcss-android-arm64: 1.30.2 - lightningcss-darwin-arm64: 1.30.2 - lightningcss-darwin-x64: 1.30.2 - lightningcss-freebsd-x64: 1.30.2 - lightningcss-linux-arm-gnueabihf: 1.30.2 - lightningcss-linux-arm64-gnu: 1.30.2 - lightningcss-linux-arm64-musl: 1.30.2 - lightningcss-linux-x64-gnu: 1.30.2 - lightningcss-linux-x64-musl: 1.30.2 - lightningcss-win32-arm64-msvc: 1.30.2 - lightningcss-win32-x64-msvc: 1.30.2 - - lines-and-columns@1.2.4: {} - - livekit-client@2.17.0(@types/dom-mediacapture-record@1.0.22): - dependencies: - '@livekit/mutex': 1.1.1 - '@livekit/protocol': 1.42.2 - '@types/dom-mediacapture-record': 1.0.22 - events: 3.3.0 - jose: 6.1.3 - loglevel: 1.9.2 - sdp-transform: 2.15.0 - ts-debounce: 4.0.0 - tslib: 2.8.1 - typed-emitter: 2.1.0 - webrtc-adapter: 9.0.3 - - loader-runner@4.3.1: - optional: true - - loader-utils@3.3.1: {} - - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - - lodash.camelcase@4.3.0: {} - - lodash.debounce@4.0.8: {} - - lodash@4.17.21: {} - - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - - loglevel@1.9.1: {} - - loglevel@1.9.2: {} - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - lower-case@2.0.2: - dependencies: - tslib: 2.8.1 - - lowercase-keys@2.0.0: {} - - lru-cache@10.4.3: {} - - lru-cache@11.2.4: {} - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - luxon@3.7.2: {} - - magic-string@0.30.21: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - - magicast@0.5.1: - dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 - source-map-js: 1.2.1 - - make-dir@4.0.0: - dependencies: - semver: 7.7.3 - - make-fetch-happen@14.0.3: - dependencies: - '@npmcli/agent': 3.0.0 - cacache: 19.0.1 - http-cache-semantics: 4.2.0 - minipass: 7.1.2 - minipass-fetch: 4.0.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 1.0.0 - proc-log: 5.0.0 - promise-retry: 2.0.1 - ssri: 12.0.0 - transitivePeerDependencies: - - supports-color - - match-sorter@8.2.0: - dependencies: - '@babel/runtime': 7.28.6 - remove-accents: 0.5.0 - - matcher@3.0.0: - dependencies: - escape-string-regexp: 4.0.0 - optional: true - - math-intrinsics@1.1.0: {} - - mdn-data@2.0.28: {} - - mdn-data@2.0.30: {} - - mdn-data@2.12.2: {} - - media-typer@0.3.0: {} - - memfs@4.52.0: - dependencies: - '@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1) - '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) - glob-to-regex.js: 1.2.0(tslib@2.8.1) - thingies: 2.5.0(tslib@2.8.1) - tree-dump: 1.1.0(tslib@2.8.1) - tslib: 2.8.1 - - memoize-one@6.0.0: {} - - merge-descriptors@1.0.3: {} - - merge-stream@2.0.0: - optional: true - - merge2@1.4.1: {} - - methods@1.1.2: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.52.0: {} - - mime-db@1.54.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mime-types@3.0.2: - dependencies: - mime-db: 1.54.0 - - mime@1.6.0: {} - - mime@2.6.0: {} - - mimic-fn@2.1.0: {} - - mimic-response@1.0.1: {} - - mimic-response@3.1.0: {} - - minimalistic-assert@1.0.1: {} - - minimatch@10.1.1: - dependencies: - '@isaacs/brace-expansion': 5.0.0 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.12 - - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.2 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.2 - - minimist@1.2.8: {} - - minipass-collect@2.0.1: - dependencies: - minipass: 7.1.2 - - minipass-fetch@4.0.1: - dependencies: - minipass: 7.1.2 - minipass-sized: 1.0.3 - minizlib: 3.1.0 - optionalDependencies: - encoding: 0.1.13 - - minipass-flush@1.0.5: - dependencies: - minipass: 3.3.6 - - minipass-pipeline@1.2.4: - dependencies: - minipass: 3.3.6 - - minipass-sized@1.0.3: - dependencies: - minipass: 3.3.6 - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@5.0.0: {} - - minipass@7.1.2: {} - - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - - minizlib@3.1.0: - dependencies: - minipass: 7.1.2 - - mkdirp@0.5.6: - dependencies: - minimist: 1.2.8 - - mkdirp@1.0.4: {} - - mkdirp@3.0.1: {} - - mobx-persist-store@1.1.8(mobx@6.15.0): - dependencies: - mobx: 6.15.0 - - mobx-react-lite@4.1.1(mobx@6.15.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - mobx: 6.15.0 - react: 19.2.3 - use-sync-external-store: 1.6.0(react@19.2.3) - optionalDependencies: - react-dom: 19.2.3(react@19.2.3) - - mobx@6.15.0: {} - - moo@0.5.2: {} - - motion-dom@12.26.2: - dependencies: - motion-utils: 12.24.10 - - motion-utils@12.24.10: {} - - motion@12.26.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - framer-motion: 12.26.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - tslib: 2.8.1 - optionalDependencies: - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - mrmime@2.0.1: {} - - ms@2.0.0: {} - - ms@2.1.3: {} - - multicast-dns@7.2.5: - dependencies: - dns-packet: 5.6.1 - thunky: 1.1.0 - - nanoid@3.3.11: {} - - negotiator@0.6.3: {} - - negotiator@0.6.4: {} - - negotiator@1.0.0: {} - - neo-async@2.6.2: - optional: true - - no-case@3.0.4: - dependencies: - lower-case: 2.0.2 - tslib: 2.8.1 - - node-abi@4.24.0: - dependencies: - semver: 7.7.3 - - node-addon-api@1.7.2: - optional: true - - node-addon-api@7.1.1: {} - - node-addon-api@8.5.0: {} - - node-api-version@0.2.1: - dependencies: - semver: 7.7.3 - - node-forge@1.3.3: {} - - node-gyp-build@4.8.4: - optional: true - - node-gyp@11.5.0: - dependencies: - env-paths: 2.2.1 - exponential-backoff: 3.1.3 - graceful-fs: 4.2.11 - make-fetch-happen: 14.0.3 - nopt: 8.1.0 - proc-log: 5.0.0 - semver: 7.7.3 - tar: 7.5.2 - tinyglobby: 0.2.15 - which: 5.0.0 - transitivePeerDependencies: - - supports-color - - node-mac-permissions@2.5.0: - dependencies: - bindings: 1.5.0 - node-addon-api: 7.1.1 - - node-releases@2.0.27: {} - - nopt@8.1.0: - dependencies: - abbrev: 3.0.1 - - normalize-path@3.0.0: {} - - normalize-url@6.1.0: {} - - nth-check@2.1.1: - dependencies: - boolbase: 1.0.0 - - object-assign@4.1.1: {} - - object-inspect@1.13.4: {} - - object-keys@1.1.1: - optional: true - - observable-fns@0.6.1: {} - - obuf@1.1.2: {} - - obug@2.1.1: {} - - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - - on-headers@1.1.0: {} - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - open@10.2.0: - dependencies: - default-browser: 5.4.0 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - wsl-utils: 0.1.0 - - opener@1.5.2: {} - - ora@5.4.1: - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - 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 - - oxc-resolver@11.16.3: - optionalDependencies: - '@oxc-resolver/binding-android-arm-eabi': 11.16.3 - '@oxc-resolver/binding-android-arm64': 11.16.3 - '@oxc-resolver/binding-darwin-arm64': 11.16.3 - '@oxc-resolver/binding-darwin-x64': 11.16.3 - '@oxc-resolver/binding-freebsd-x64': 11.16.3 - '@oxc-resolver/binding-linux-arm-gnueabihf': 11.16.3 - '@oxc-resolver/binding-linux-arm-musleabihf': 11.16.3 - '@oxc-resolver/binding-linux-arm64-gnu': 11.16.3 - '@oxc-resolver/binding-linux-arm64-musl': 11.16.3 - '@oxc-resolver/binding-linux-ppc64-gnu': 11.16.3 - '@oxc-resolver/binding-linux-riscv64-gnu': 11.16.3 - '@oxc-resolver/binding-linux-riscv64-musl': 11.16.3 - '@oxc-resolver/binding-linux-s390x-gnu': 11.16.3 - '@oxc-resolver/binding-linux-x64-gnu': 11.16.3 - '@oxc-resolver/binding-linux-x64-musl': 11.16.3 - '@oxc-resolver/binding-openharmony-arm64': 11.16.3 - '@oxc-resolver/binding-wasm32-wasi': 11.16.3 - '@oxc-resolver/binding-win32-arm64-msvc': 11.16.3 - '@oxc-resolver/binding-win32-ia32-msvc': 11.16.3 - '@oxc-resolver/binding-win32-x64-msvc': 11.16.3 - - p-cancelable@2.1.1: {} - - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - - p-map@7.0.4: {} - - p-retry@6.2.1: - dependencies: - '@types/retry': 0.12.2 - is-network-error: 1.3.0 - retry: 0.13.1 - - p-try@2.2.0: {} - - package-json-from-dist@1.0.1: {} - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.28.6 - error-ex: 1.3.4 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parse5@7.3.0: - dependencies: - entities: 6.0.1 - - parse5@8.0.0: - dependencies: - entities: 6.0.1 - - parseurl@1.3.3: {} - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-scurry@2.0.1: - dependencies: - lru-cache: 11.2.4 - minipass: 7.1.2 - - path-to-regexp@0.1.12: {} - - path-type@4.0.0: {} - - pathe@2.0.3: {} - - pe-library@0.4.1: {} - - pend@1.2.0: {} - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - picomatch@4.0.3: {} - - plist@3.1.0: - dependencies: - '@xmldom/xmldom': 0.8.11 - base64-js: 1.5.1 - xmlbuilder: 15.1.1 - - pngjs@5.0.0: {} - - pofile@1.1.4: {} - - postcss-attribute-case-insensitive@8.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - - postcss-clamp@4.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-color-functional-notation@8.0.0(postcss@8.5.6): - dependencies: - '@csstools/css-color-parser': 4.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - - postcss-color-hex-alpha@11.0.0(postcss@8.5.6): - dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-color-rebeccapurple@11.0.0(postcss@8.5.6): - dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-custom-media@12.0.0(postcss@8.5.6): - dependencies: - '@csstools/cascade-layer-name-parser': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - postcss: 8.5.6 - - postcss-custom-properties@15.0.0(postcss@8.5.6): - dependencies: - '@csstools/cascade-layer-name-parser': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-custom-selectors@9.0.0(postcss@8.5.6): - dependencies: - '@csstools/cascade-layer-name-parser': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - - postcss-dir-pseudo-class@10.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - - postcss-discard-comments@7.0.5(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - - postcss-double-position-gradients@7.0.0(postcss@8.5.6): - dependencies: - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-focus-visible@11.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - - postcss-focus-within@10.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - - postcss-font-variant@5.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-gap-properties@7.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-image-set-function@8.0.0(postcss@8.5.6): - dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-lab-function@8.0.0(postcss@8.5.6): - dependencies: - '@csstools/css-color-parser': 4.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/utilities': 3.0.0(postcss@8.5.6) - postcss: 8.5.6 - - postcss-loader@8.2.0(@rspack/core@1.6.2(@swc/helpers@0.5.18))(postcss@8.5.6)(typescript@5.9.3)(webpack@5.104.1(esbuild@0.27.2)): - dependencies: - cosmiconfig: 9.0.0(typescript@5.9.3) - jiti: 2.6.1 - postcss: 8.5.6 - semver: 7.7.3 - optionalDependencies: - '@rspack/core': 1.6.2(@swc/helpers@0.5.18) - webpack: 5.104.1(esbuild@0.27.2) - transitivePeerDependencies: - - typescript - - postcss-logical@9.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-modules-extract-imports@3.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-modules-local-by-default@4.2.0(postcss@8.5.6): - dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - postcss-value-parser: 4.2.0 - - postcss-modules-scope@3.2.1(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - - postcss-modules-values@4.0.0(postcss@8.5.6): - dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 - - postcss-modules@6.0.1(postcss@8.5.6): - dependencies: - generic-names: 4.0.0 - icss-utils: 5.1.0(postcss@8.5.6) - lodash.camelcase: 4.3.0 - postcss: 8.5.6 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) - postcss-modules-scope: 3.2.1(postcss@8.5.6) - postcss-modules-values: 4.0.0(postcss@8.5.6) - string-hash: 1.1.3 - - postcss-nesting@14.0.0(postcss@8.5.6): - dependencies: - '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.1) - '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - - postcss-opacity-percentage@3.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-overflow-shorthand@7.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-page-break@3.0.4(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-place@11.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - - postcss-preset-env@11.1.1(postcss@8.5.6): - dependencies: - '@csstools/postcss-alpha-function': 2.0.1(postcss@8.5.6) - '@csstools/postcss-cascade-layers': 6.0.0(postcss@8.5.6) - '@csstools/postcss-color-function': 5.0.0(postcss@8.5.6) - '@csstools/postcss-color-function-display-p3-linear': 2.0.0(postcss@8.5.6) - '@csstools/postcss-color-mix-function': 4.0.0(postcss@8.5.6) - '@csstools/postcss-color-mix-variadic-function-arguments': 2.0.0(postcss@8.5.6) - '@csstools/postcss-content-alt-text': 3.0.0(postcss@8.5.6) - '@csstools/postcss-contrast-color-function': 3.0.0(postcss@8.5.6) - '@csstools/postcss-exponential-functions': 3.0.0(postcss@8.5.6) - '@csstools/postcss-font-format-keywords': 5.0.0(postcss@8.5.6) - '@csstools/postcss-gamut-mapping': 3.0.0(postcss@8.5.6) - '@csstools/postcss-gradients-interpolation-method': 6.0.0(postcss@8.5.6) - '@csstools/postcss-hwb-function': 5.0.0(postcss@8.5.6) - '@csstools/postcss-ic-unit': 5.0.0(postcss@8.5.6) - '@csstools/postcss-initial': 3.0.0(postcss@8.5.6) - '@csstools/postcss-is-pseudo-class': 6.0.0(postcss@8.5.6) - '@csstools/postcss-light-dark-function': 3.0.0(postcss@8.5.6) - '@csstools/postcss-logical-float-and-clear': 4.0.0(postcss@8.5.6) - '@csstools/postcss-logical-overflow': 3.0.0(postcss@8.5.6) - '@csstools/postcss-logical-overscroll-behavior': 3.0.0(postcss@8.5.6) - '@csstools/postcss-logical-resize': 4.0.0(postcss@8.5.6) - '@csstools/postcss-logical-viewport-units': 4.0.0(postcss@8.5.6) - '@csstools/postcss-media-minmax': 3.0.0(postcss@8.5.6) - '@csstools/postcss-media-queries-aspect-ratio-number-values': 4.0.0(postcss@8.5.6) - '@csstools/postcss-mixins': 1.0.0(postcss@8.5.6) - '@csstools/postcss-nested-calc': 5.0.0(postcss@8.5.6) - '@csstools/postcss-normalize-display-values': 5.0.0(postcss@8.5.6) - '@csstools/postcss-oklab-function': 5.0.0(postcss@8.5.6) - '@csstools/postcss-position-area-property': 2.0.0(postcss@8.5.6) - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.6) - '@csstools/postcss-property-rule-prelude-list': 2.0.0(postcss@8.5.6) - '@csstools/postcss-random-function': 3.0.0(postcss@8.5.6) - '@csstools/postcss-relative-color-syntax': 4.0.0(postcss@8.5.6) - '@csstools/postcss-scope-pseudo-class': 5.0.0(postcss@8.5.6) - '@csstools/postcss-sign-functions': 2.0.0(postcss@8.5.6) - '@csstools/postcss-stepped-value-functions': 5.0.0(postcss@8.5.6) - '@csstools/postcss-syntax-descriptor-syntax-production': 2.0.0(postcss@8.5.6) - '@csstools/postcss-system-ui-font-family': 2.0.0(postcss@8.5.6) - '@csstools/postcss-text-decoration-shorthand': 5.0.0(postcss@8.5.6) - '@csstools/postcss-trigonometric-functions': 5.0.0(postcss@8.5.6) - '@csstools/postcss-unset-value': 5.0.0(postcss@8.5.6) - autoprefixer: 10.4.23(postcss@8.5.6) - browserslist: 4.28.1 - css-blank-pseudo: 8.0.1(postcss@8.5.6) - css-has-pseudo: 8.0.0(postcss@8.5.6) - css-prefers-color-scheme: 11.0.0(postcss@8.5.6) - cssdb: 8.7.0 - postcss: 8.5.6 - postcss-attribute-case-insensitive: 8.0.0(postcss@8.5.6) - postcss-clamp: 4.1.0(postcss@8.5.6) - postcss-color-functional-notation: 8.0.0(postcss@8.5.6) - postcss-color-hex-alpha: 11.0.0(postcss@8.5.6) - postcss-color-rebeccapurple: 11.0.0(postcss@8.5.6) - postcss-custom-media: 12.0.0(postcss@8.5.6) - postcss-custom-properties: 15.0.0(postcss@8.5.6) - postcss-custom-selectors: 9.0.0(postcss@8.5.6) - postcss-dir-pseudo-class: 10.0.0(postcss@8.5.6) - postcss-double-position-gradients: 7.0.0(postcss@8.5.6) - postcss-focus-visible: 11.0.0(postcss@8.5.6) - postcss-focus-within: 10.0.0(postcss@8.5.6) - postcss-font-variant: 5.0.0(postcss@8.5.6) - postcss-gap-properties: 7.0.0(postcss@8.5.6) - postcss-image-set-function: 8.0.0(postcss@8.5.6) - postcss-lab-function: 8.0.0(postcss@8.5.6) - postcss-logical: 9.0.0(postcss@8.5.6) - postcss-nesting: 14.0.0(postcss@8.5.6) - postcss-opacity-percentage: 3.0.0(postcss@8.5.6) - postcss-overflow-shorthand: 7.0.0(postcss@8.5.6) - postcss-page-break: 3.0.4(postcss@8.5.6) - postcss-place: 11.0.0(postcss@8.5.6) - postcss-pseudo-class-any-link: 11.0.0(postcss@8.5.6) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.5.6) - postcss-selector-not: 9.0.0(postcss@8.5.6) - - postcss-pseudo-class-any-link@11.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - - postcss-replace-overflow-wrap@4.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - - postcss-selector-not@9.0.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - - postcss-selector-parser@7.1.1: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-value-parser@4.2.0: {} - - postcss@8.5.6: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - postject@1.0.0-alpha.6: - dependencies: - commander: 9.5.0 - optional: true - - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - - proc-log@5.0.0: {} - - process-nextick-args@2.0.1: {} - - progress@2.0.3: {} - - promise-retry@2.0.1: - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - - pseudolocale@2.2.0: - dependencies: - commander: 10.0.1 - - pump@3.0.3: - dependencies: - end-of-stream: 1.4.5 - once: 1.4.0 - - punycode@2.3.1: {} - - qrcode@1.5.4: - dependencies: - dijkstrajs: 1.0.3 - pngjs: 5.0.0 - yargs: 15.4.1 - - qs@6.14.1: - dependencies: - side-channel: 1.1.0 - - queue-microtask@1.2.3: {} - - quick-lru@5.1.1: {} - - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 - optional: true - - range-parser@1.2.1: {} - - raw-body@2.5.3: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.1 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - - react-aria-components@1.14.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - '@internationalized/date': 3.10.1 - '@internationalized/string': 3.2.7 - '@react-aria/autocomplete': 3.0.0-rc.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/collections': 3.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/dnd': 3.11.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/overlays': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/ssr': 3.9.10(react@19.2.3) - '@react-aria/textfield': 3.18.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/toolbar': 3.0.0-beta.22(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/virtualizer': 4.1.11(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/autocomplete': 3.0.0-beta.4(react@19.2.3) - '@react-stately/layout': 4.5.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-stately/selection': 3.20.7(react@19.2.3) - '@react-stately/table': 3.15.2(react@19.2.3) - '@react-stately/utils': 3.11.0(react@19.2.3) - '@react-stately/virtualizer': 4.4.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/form': 3.7.16(react@19.2.3) - '@react-types/grid': 3.3.6(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - '@react-types/table': 3.13.4(react@19.2.3) - '@swc/helpers': 0.5.18 - client-only: 0.0.1 - react: 19.2.3 - react-aria: 3.45.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react-dom: 19.2.3(react@19.2.3) - react-stately: 3.43.0(react@19.2.3) - use-sync-external-store: 1.6.0(react@19.2.3) - - react-aria@3.45.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - '@internationalized/string': 3.2.7 - '@react-aria/breadcrumbs': 3.5.30(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/button': 3.14.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/calendar': 3.9.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/checkbox': 3.16.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/color': 3.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/combobox': 3.14.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/datepicker': 3.15.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/dialog': 3.5.32(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/disclosure': 3.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/dnd': 3.11.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/focus': 3.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/gridlist': 3.14.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/i18n': 3.12.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/interactions': 3.26.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/label': 3.7.23(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/landmark': 3.0.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/link': 3.8.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/listbox': 3.15.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/menu': 3.19.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/meter': 3.4.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/numberfield': 3.12.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/overlays': 3.31.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/progress': 3.4.28(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/radio': 3.12.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/searchfield': 3.8.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/select': 3.17.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/selection': 3.27.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/separator': 3.4.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/slider': 3.8.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/ssr': 3.9.10(react@19.2.3) - '@react-aria/switch': 3.7.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/table': 3.17.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/tabs': 3.10.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/tag': 3.7.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/textfield': 3.18.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/toast': 3.0.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/tooltip': 3.9.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/tree': 3.1.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/utils': 3.32.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-aria/visually-hidden': 3.8.29(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - react-dnd-accessible-backend@2.1.0(react-dnd@16.0.1(@types/node@25.0.9)(@types/react@19.2.8)(react@19.2.3))(react@19.2.3): - dependencies: - '@react-aria/live-announcer': 3.4.4 - react: 19.2.3 - react-dnd: 16.0.1(@types/node@25.0.9)(@types/react@19.2.8)(react@19.2.3) - - react-dnd-html5-backend@16.0.1: - dependencies: - dnd-core: 16.0.1 - - react-dnd-multi-backend@9.0.0(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@25.0.9)(@types/react@19.2.8)(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - dnd-core: 16.0.1 - dnd-multi-backend: 9.0.0(dnd-core@16.0.1) - react: 19.2.3 - react-dnd: 16.0.1(@types/node@25.0.9)(@types/react@19.2.8)(react@19.2.3) - react-dnd-preview: 9.0.0(react-dnd@16.0.1(@types/node@25.0.9)(@types/react@19.2.8)(react@19.2.3))(react@19.2.3) - react-dom: 19.2.3(react@19.2.3) - - react-dnd-preview@9.0.0(react-dnd@16.0.1(@types/node@25.0.9)(@types/react@19.2.8)(react@19.2.3))(react@19.2.3): - dependencies: - react: 19.2.3 - react-dnd: 16.0.1(@types/node@25.0.9)(@types/react@19.2.8)(react@19.2.3) - - react-dnd@16.0.1(@types/node@25.0.9)(@types/react@19.2.8)(react@19.2.3): - dependencies: - '@react-dnd/invariant': 4.0.2 - '@react-dnd/shallowequal': 4.0.2 - dnd-core: 16.0.1 - fast-deep-equal: 3.1.3 - hoist-non-react-statics: 3.3.2 - react: 19.2.3 - optionalDependencies: - '@types/node': 25.0.9 - '@types/react': 19.2.8 - - react-dom@19.2.3(react@19.2.3): - dependencies: - react: 19.2.3 - scheduler: 0.27.0 - - react-hook-form@7.71.1(react@19.2.3): - dependencies: - react: 19.2.3 - - react-hotkeys-hook@5.2.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - react-is@16.13.1: {} - - react-is@18.3.1: {} - - react-refresh@0.18.0: {} - - react-stately@3.43.0(react@19.2.3): - dependencies: - '@react-stately/calendar': 3.9.1(react@19.2.3) - '@react-stately/checkbox': 3.7.3(react@19.2.3) - '@react-stately/collections': 3.12.8(react@19.2.3) - '@react-stately/color': 3.9.3(react@19.2.3) - '@react-stately/combobox': 3.12.1(react@19.2.3) - '@react-stately/data': 3.15.0(react@19.2.3) - '@react-stately/datepicker': 3.15.3(react@19.2.3) - '@react-stately/disclosure': 3.0.9(react@19.2.3) - '@react-stately/dnd': 3.7.2(react@19.2.3) - '@react-stately/form': 3.2.2(react@19.2.3) - '@react-stately/list': 3.13.2(react@19.2.3) - '@react-stately/menu': 3.9.9(react@19.2.3) - '@react-stately/numberfield': 3.10.3(react@19.2.3) - '@react-stately/overlays': 3.6.21(react@19.2.3) - '@react-stately/radio': 3.11.3(react@19.2.3) - '@react-stately/searchfield': 3.5.17(react@19.2.3) - '@react-stately/select': 3.9.0(react@19.2.3) - '@react-stately/selection': 3.20.7(react@19.2.3) - '@react-stately/slider': 3.7.3(react@19.2.3) - '@react-stately/table': 3.15.2(react@19.2.3) - '@react-stately/tabs': 3.8.7(react@19.2.3) - '@react-stately/toast': 3.1.2(react@19.2.3) - '@react-stately/toggle': 3.9.3(react@19.2.3) - '@react-stately/tooltip': 3.5.9(react@19.2.3) - '@react-stately/tree': 3.9.4(react@19.2.3) - '@react-types/shared': 3.32.1(react@19.2.3) - react: 19.2.3 - - react-transition-group@4.4.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - '@babel/runtime': 7.28.6 - dom-helpers: 5.2.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - - react@19.2.3: {} - - read-binary-file-arch@1.0.6: - dependencies: - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - readable-stream@2.3.8: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - - readdirp@3.5.0: - dependencies: - picomatch: 2.3.1 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - readdirp@5.0.0: {} - - redux@4.2.1: - dependencies: - '@babel/runtime': 7.28.6 - - regenerate-unicode-properties@10.2.2: - dependencies: - regenerate: 1.4.2 - - regenerate@1.4.2: {} - - regexpu-core@6.4.0: - dependencies: - regenerate: 1.4.2 - regenerate-unicode-properties: 10.2.2 - regjsgen: 0.8.0 - regjsparser: 0.13.0 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.2.1 - - regjsgen@0.8.0: {} - - regjsparser@0.13.0: - dependencies: - jsesc: 3.1.0 - - remove-accents@0.5.0: {} - - require-directory@2.1.1: {} - - require-from-string@2.0.2: {} - - require-main-filename@2.0.0: {} - - requires-port@1.0.0: {} - - resedit@1.7.2: - dependencies: - pe-library: 0.4.1 - - resolve-alpn@1.2.1: {} - - resolve-from@4.0.0: {} - - resolve-pkg-maps@1.0.0: {} - - resolve@1.22.11: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - responselike@2.0.1: - dependencies: - lowercase-keys: 2.0.0 - - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - - retry@0.12.0: {} - - retry@0.13.1: {} - - reusify@1.1.0: {} - - rimraf@2.6.3: - dependencies: - glob: 7.2.3 - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - roarr@2.15.4: - dependencies: - boolean: 3.2.0 - detect-node: 2.1.0 - globalthis: 1.0.4 - json-stringify-safe: 5.0.1 - semver-compare: 1.0.0 - sprintf-js: 1.1.3 - optional: true - - rollup@4.55.1: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.55.1 - '@rollup/rollup-android-arm64': 4.55.1 - '@rollup/rollup-darwin-arm64': 4.55.1 - '@rollup/rollup-darwin-x64': 4.55.1 - '@rollup/rollup-freebsd-arm64': 4.55.1 - '@rollup/rollup-freebsd-x64': 4.55.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.55.1 - '@rollup/rollup-linux-arm-musleabihf': 4.55.1 - '@rollup/rollup-linux-arm64-gnu': 4.55.1 - '@rollup/rollup-linux-arm64-musl': 4.55.1 - '@rollup/rollup-linux-loong64-gnu': 4.55.1 - '@rollup/rollup-linux-loong64-musl': 4.55.1 - '@rollup/rollup-linux-ppc64-gnu': 4.55.1 - '@rollup/rollup-linux-ppc64-musl': 4.55.1 - '@rollup/rollup-linux-riscv64-gnu': 4.55.1 - '@rollup/rollup-linux-riscv64-musl': 4.55.1 - '@rollup/rollup-linux-s390x-gnu': 4.55.1 - '@rollup/rollup-linux-x64-gnu': 4.55.1 - '@rollup/rollup-linux-x64-musl': 4.55.1 - '@rollup/rollup-openbsd-x64': 4.55.1 - '@rollup/rollup-openharmony-arm64': 4.55.1 - '@rollup/rollup-win32-arm64-msvc': 4.55.1 - '@rollup/rollup-win32-ia32-msvc': 4.55.1 - '@rollup/rollup-win32-x64-gnu': 4.55.1 - '@rollup/rollup-win32-x64-msvc': 4.55.1 - fsevents: 2.3.3 - - run-applescript@7.1.0: {} - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - rxjs@7.8.2: - dependencies: - tslib: 2.8.1 - - safe-buffer@5.1.2: {} - - safe-buffer@5.2.1: {} - - safer-buffer@2.1.2: {} - - sanitize-filename@1.6.3: - dependencies: - truncate-utf8-bytes: 1.0.2 - - sax@1.4.4: {} - - saxes@6.0.0: - dependencies: - xmlchars: 2.2.0 - - scheduler@0.27.0: {} - - schema-utils@4.3.3: - dependencies: - '@types/json-schema': 7.0.15 - ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) - ajv-keywords: 5.1.0(ajv@8.17.1) - - sdp-transform@2.15.0: {} - - sdp@3.2.1: {} - - select-hose@2.0.0: {} - - selfsigned@2.4.1: - dependencies: - '@types/node-forge': 1.3.14 - node-forge: 1.3.3 - - semver-compare@1.0.0: - optional: true - - semver@5.7.2: {} - - semver@6.3.1: {} - - semver@7.7.3: {} - - send@0.19.2: - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.1 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.2 - transitivePeerDependencies: - - supports-color - - serialize-error@7.0.1: - dependencies: - type-fest: 0.13.1 - optional: true - - serialize-javascript@6.0.2: - dependencies: - randombytes: 2.1.0 - optional: true - - serve-index@1.9.1: - 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 - - serve-static@1.16.3: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.19.2 - transitivePeerDependencies: - - supports-color - - set-blocking@2.0.0: {} - - setprototypeof@1.1.0: {} - - setprototypeof@1.2.0: {} - - sharp@0.34.5: - dependencies: - '@img/colour': 1.0.0 - detect-libc: 2.1.2 - semver: 7.7.3 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.5 - '@img/sharp-darwin-x64': 0.34.5 - '@img/sharp-libvips-darwin-arm64': 1.2.4 - '@img/sharp-libvips-darwin-x64': 1.2.4 - '@img/sharp-libvips-linux-arm': 1.2.4 - '@img/sharp-libvips-linux-arm64': 1.2.4 - '@img/sharp-libvips-linux-ppc64': 1.2.4 - '@img/sharp-libvips-linux-riscv64': 1.2.4 - '@img/sharp-libvips-linux-s390x': 1.2.4 - '@img/sharp-libvips-linux-x64': 1.2.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - '@img/sharp-linux-arm': 0.34.5 - '@img/sharp-linux-arm64': 0.34.5 - '@img/sharp-linux-ppc64': 0.34.5 - '@img/sharp-linux-riscv64': 0.34.5 - '@img/sharp-linux-s390x': 0.34.5 - '@img/sharp-linux-x64': 0.34.5 - '@img/sharp-linuxmusl-arm64': 0.34.5 - '@img/sharp-linuxmusl-x64': 0.34.5 - '@img/sharp-wasm32': 0.34.5 - '@img/sharp-win32-arm64': 0.34.5 - '@img/sharp-win32-ia32': 0.34.5 - '@img/sharp-win32-x64': 0.34.5 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - shell-quote@1.8.3: {} - - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - siginfo@2.0.0: {} - - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - simple-update-notifier@2.0.0: - dependencies: - semver: 7.7.3 - - sirv@2.0.4: - dependencies: - '@polka/url': 1.0.0-next.29 - mrmime: 2.0.1 - totalist: 3.0.1 - - slice-ansi@3.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - optional: true - - smart-buffer@4.2.0: {} - - smol-toml@1.6.0: {} - - snake-case@3.0.4: - dependencies: - dot-case: 3.0.4 - tslib: 2.8.1 - - sockjs@0.3.24: - dependencies: - faye-websocket: 0.11.4 - uuid: 8.3.2 - websocket-driver: 0.7.4 - - socks-proxy-agent@8.0.5: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - socks: 2.8.7 - transitivePeerDependencies: - - supports-color - - socks@2.8.7: - dependencies: - ip-address: 10.1.0 - smart-buffer: 4.2.0 - - source-map-js@1.2.1: {} - - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.5.7: {} - - source-map@0.6.1: {} - - source-map@0.7.6: {} - - spdy-transport@3.0.0: - dependencies: - debug: 4.4.3 - detect-node: 2.1.0 - hpack.js: 2.1.6 - obuf: 1.1.2 - readable-stream: 3.6.2 - wbuf: 1.7.3 - transitivePeerDependencies: - - supports-color - - spdy@4.0.2: - dependencies: - debug: 4.4.3 - handle-thing: 2.0.1 - http-deceiver: 1.2.7 - select-hose: 2.0.0 - spdy-transport: 3.0.0 - transitivePeerDependencies: - - supports-color - - sprintf-js@1.1.3: - optional: true - - ssri@12.0.0: - dependencies: - minipass: 7.1.2 - - stackback@0.0.2: {} - - stackframe@1.3.4: {} - - stat-mode@1.0.0: {} - - statuses@1.5.0: {} - - statuses@2.0.2: {} - - std-env@3.10.0: {} - - string-hash@1.1.3: {} - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.2 - - string_decoder@1.1.1: - dependencies: - safe-buffer: 5.1.2 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.2: - dependencies: - ansi-regex: 6.2.2 - - strip-json-comments@5.0.3: {} - - stylis@4.2.0: {} - - sumchecker@3.0.1: - dependencies: - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - optional: true - - supports-preserve-symlinks-flag@1.0.0: {} - - svg-parser@2.0.4: {} - - svgo@3.3.2: - dependencies: - '@trysound/sax': 0.2.0 - commander: 7.2.0 - css-select: 5.2.2 - css-tree: 2.3.1 - css-what: 6.2.2 - csso: 5.0.5 - picocolors: 1.1.1 - - symbol-tree@3.2.4: {} - - tabbable@6.4.0: {} - - tapable@2.3.0: - optional: true - - tar@6.2.1: - 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 - - tar@7.5.2: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.1.0 - yallist: 5.0.0 - - temp-file@3.4.0: - dependencies: - async-exit-hook: 2.0.1 - fs-extra: 10.1.0 - - temp@0.9.4: - dependencies: - mkdirp: 0.5.6 - rimraf: 2.6.3 - - terser-webpack-plugin@5.3.16(esbuild@0.27.2)(webpack@5.104.1(esbuild@0.27.2)): - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - jest-worker: 27.5.1 - schema-utils: 4.3.3 - serialize-javascript: 6.0.2 - terser: 5.44.1 - webpack: 5.104.1(esbuild@0.27.2) - optionalDependencies: - esbuild: 0.27.2 - optional: true - - terser@5.44.1: - dependencies: - '@jridgewell/source-map': 0.3.11 - acorn: 8.15.0 - commander: 2.20.3 - source-map-support: 0.5.21 - optional: true - - thingies@2.5.0(tslib@2.8.1): - dependencies: - tslib: 2.8.1 - - threads@1.7.0: - dependencies: - callsites: 3.1.0 - debug: 4.4.3 - is-observable: 2.1.0 - observable-fns: 0.6.1 - optionalDependencies: - tiny-worker: 2.3.0 - transitivePeerDependencies: - - supports-color - - thumbhash@0.1.1: {} - - thunky@1.1.0: {} - - tiny-async-pool@1.3.0: - dependencies: - semver: 5.7.2 - - tiny-worker@2.3.0: - dependencies: - esm: 3.2.25 - optional: true - - tinybench@2.9.0: {} - - tinyexec@1.0.2: {} - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - - tinyrainbow@3.0.3: {} - - tldts-core@7.0.19: {} - - tldts@7.0.19: - dependencies: - tldts-core: 7.0.19 - - tmp-promise@3.0.3: - dependencies: - tmp: 0.2.5 - - tmp@0.2.5: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - toidentifier@1.0.1: {} - - totalist@3.0.1: {} - - tough-cookie@6.0.0: - dependencies: - tldts: 7.0.19 - - tr46@6.0.0: - dependencies: - punycode: 2.3.1 - - tree-dump@1.1.0(tslib@2.8.1): - dependencies: - tslib: 2.8.1 - - truncate-utf8-bytes@1.0.2: - dependencies: - utf8-byte-length: 1.0.5 - - ts-debounce@4.0.0: {} - - tslib@2.8.1: {} - - tsx@4.21.0: - dependencies: - esbuild: 0.27.2 - get-tsconfig: 4.13.0 - optionalDependencies: - fsevents: 2.3.3 - - type-fest@0.13.1: - optional: true - - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - - typed-css-modules@0.9.1: - dependencies: - camelcase: 6.3.0 - chalk: 4.1.2 - chokidar: 3.6.0 - glob: 10.5.0 - icss-replace-symbols: 1.1.0 - is-there: 4.5.2 - mkdirp: 3.0.1 - postcss: 8.5.6 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) - postcss-modules-scope: 3.2.1(postcss@8.5.6) - postcss-modules-values: 4.0.0(postcss@8.5.6) - yargs: 17.7.2 - - typed-emitter@2.1.0: - optionalDependencies: - rxjs: 7.8.2 - - typescript@5.9.3: {} - - uiohook-napi@1.5.4: - dependencies: - node-gyp-build: 4.8.4 - optional: true - - undici-types@6.21.0: {} - - undici-types@7.16.0: {} - - undici@7.18.2: {} - - unicode-canonical-property-names-ecmascript@2.0.1: {} - - unicode-match-property-ecmascript@2.0.0: - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.1 - unicode-property-aliases-ecmascript: 2.2.0 - - unicode-match-property-value-ecmascript@2.2.1: {} - - unicode-property-aliases-ecmascript@2.2.0: {} - - unique-filename@4.0.0: - dependencies: - unique-slug: 5.0.0 - - unique-names-generator@4.7.1: {} - - unique-slug@5.0.0: - dependencies: - imurmurhash: 0.1.4 - - universalify@0.1.2: {} - - universalify@2.0.1: {} - - unpipe@1.0.0: {} - - update-browserslist-db@1.2.3(browserslist@4.28.1): - dependencies: - browserslist: 4.28.1 - escalade: 3.2.0 - picocolors: 1.1.1 - - update-electron-app@3.1.2: - dependencies: - github-url-to-object: 4.0.6 - ms: 2.1.3 - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - urlpattern-polyfill@10.1.0: {} - - use-isomorphic-layout-effect@1.2.1(@types/react@19.2.8)(react@19.2.3): - dependencies: - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.8 - - use-sync-external-store@1.6.0(react@19.2.3): - dependencies: - react: 19.2.3 - - usehooks-ts@3.1.1(react@19.2.3): - dependencies: - lodash.debounce: 4.0.8 - react: 19.2.3 - - utf8-byte-length@1.0.5: {} - - util-deprecate@1.0.2: {} - - utils-merge@1.0.1: {} - - uuid@8.3.2: {} - - valibot@1.2.0(typescript@5.9.3): - optionalDependencies: - typescript: 5.9.3 - - vary@1.1.2: {} - - verror@1.10.1: - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.4.1 - optional: true - - vite@7.3.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0): - dependencies: - esbuild: 0.27.2 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.55.1 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 25.0.9 - fsevents: 2.3.3 - jiti: 2.6.1 - lightningcss: 1.30.2 - terser: 5.44.1 - tsx: 4.21.0 - - vitest@4.0.17(@types/node@25.0.9)(happy-dom@20.3.0)(jiti@2.6.1)(jsdom@27.4.0)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0): - dependencies: - '@vitest/expect': 4.0.17 - '@vitest/mocker': 4.0.17(vite@7.3.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)) - '@vitest/pretty-format': 4.0.17 - '@vitest/runner': 4.0.17 - '@vitest/snapshot': 4.0.17 - '@vitest/spy': 4.0.17 - '@vitest/utils': 4.0.17 - es-module-lexer: 1.7.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.10.0 - tinybench: 2.9.0 - tinyexec: 1.0.2 - tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.0.9)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 25.0.9 - happy-dom: 20.3.0 - jsdom: 27.4.0 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml - - w3c-xmlserializer@5.0.0: - dependencies: - xml-name-validator: 5.0.0 - - walk-up-path@4.0.0: {} - - watchpack@2.5.1: - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - optional: true - - wbuf@1.7.3: - dependencies: - minimalistic-assert: 1.0.1 - - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - - webidl-conversions@8.0.1: {} - - webpack-bundle-analyzer@4.10.2: - dependencies: - '@discoveryjs/json-ext': 0.5.7 - acorn: 8.15.0 - acorn-walk: 8.3.4 - commander: 7.2.0 - debounce: 1.2.1 - escape-string-regexp: 4.0.0 - gzip-size: 6.0.0 - html-escaper: 2.0.2 - opener: 1.5.2 - picocolors: 1.1.1 - sirv: 2.0.4 - ws: 7.5.10 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - webpack-dev-middleware@7.4.5(webpack@5.104.1(esbuild@0.27.2)): - dependencies: - colorette: 2.0.20 - memfs: 4.52.0 - mime-types: 3.0.2 - on-finished: 2.4.1 - range-parser: 1.2.1 - schema-utils: 4.3.3 - optionalDependencies: - webpack: 5.104.1(esbuild@0.27.2) - - webpack-dev-server@5.2.2(webpack@5.104.1(esbuild@0.27.2)): - dependencies: - '@types/bonjour': 3.5.13 - '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.25 - '@types/express-serve-static-core': 4.19.8 - '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.10 - '@types/sockjs': 0.3.36 - '@types/ws': 8.18.1 - ansi-html-community: 0.0.8 - bonjour-service: 1.3.0 - chokidar: 3.6.0 - colorette: 2.0.20 - compression: 1.8.1 - connect-history-api-fallback: 2.0.0 - express: 4.22.1 - graceful-fs: 4.2.11 - http-proxy-middleware: 2.0.9(@types/express@4.17.25) - ipaddr.js: 2.3.0 - launch-editor: 2.12.0 - open: 10.2.0 - p-retry: 6.2.1 - schema-utils: 4.3.3 - selfsigned: 2.4.1 - serve-index: 1.9.1 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(webpack@5.104.1(esbuild@0.27.2)) - ws: 8.19.0 - optionalDependencies: - webpack: 5.104.1(esbuild@0.27.2) - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - - webpack-sources@3.3.3: - optional: true - - webpack@5.104.1(esbuild@0.27.2): - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/wasm-edit': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.15.0 - acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.28.1 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.4 - es-module-lexer: 2.0.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.1 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 4.3.3 - tapable: 2.3.0 - terser-webpack-plugin: 5.3.16(esbuild@0.27.2)(webpack@5.104.1(esbuild@0.27.2)) - watchpack: 2.5.1 - webpack-sources: 3.3.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - optional: true - - webrtc-adapter@9.0.3: - dependencies: - sdp: 3.2.1 - - websocket-driver@0.7.4: - dependencies: - http-parser-js: 0.5.10 - safe-buffer: 5.2.1 - websocket-extensions: 0.1.4 - - websocket-extensions@0.1.4: {} - - whatwg-mimetype@3.0.0: {} - - whatwg-mimetype@4.0.0: {} - - whatwg-url@15.1.0: - dependencies: - tr46: 6.0.0 - webidl-conversions: 8.0.1 - - which-module@2.0.1: {} - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - which@5.0.0: - dependencies: - isexe: 3.1.1 - - why-is-node-running@2.3.0: - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 - - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 5.1.2 - strip-ansi: 7.1.2 - - wrappy@1.0.2: {} - - ws@7.5.10: {} - - ws@8.19.0: {} - - wsl-utils@0.1.0: - dependencies: - is-wsl: 3.1.0 - - xml-name-validator@5.0.0: {} - - xmlbuilder@15.1.1: {} - - xmlchars@2.2.0: {} - - y18n@4.0.3: {} - - y18n@5.0.8: {} - - yallist@3.1.1: {} - - yallist@4.0.0: {} - - yallist@5.0.0: {} - - yaml@1.10.2: {} - - yargs-parser@18.1.3: - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - - yargs-parser@21.1.1: {} - - yargs@15.4.1: - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 18.1.3 - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yauzl@2.10.0: - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - - yocto-queue@0.1.0: {} - - zod@4.3.5: {} diff --git a/fluxer_app/rspack.config.mjs b/fluxer_app/rspack.config.mjs index 96b267c6a..278c001ad 100644 --- a/fluxer_app/rspack.config.mjs +++ b/fluxer_app/rspack.config.mjs @@ -212,6 +212,7 @@ export default () => { devtool: 'source-map', target: ['web', 'browserslist'], lazyCompilation: false, + performance: false, resolve: { alias: { ...resolveArboriumWasmAliases(), @@ -306,11 +307,8 @@ export default () => { parser: { syntax: 'typescript', tsx: true, - decorators: true, }, transform: { - legacyDecorator: true, - decoratorMetadata: true, react: { runtime: 'automatic', development: isDevelopment, @@ -330,7 +328,7 @@ export default () => { test: /\.module\.css$/, use: [{loader: 'postcss-loader'}], type: 'css/module', - parser: {namedExports: false}, + parser: {namedExports: false, dashedIdents: false, grid: false, container: false}, }, { test: /\.css$/, @@ -618,6 +616,5 @@ export default () => { watch: false, }, }, - experiments: {css: true}, }; }; diff --git a/fluxer_app/rust/libfluxcore/Cargo.lock b/fluxer_app/rust/libfluxcore/Cargo.lock index 166f5a34b..17e7917cb 100644 --- a/fluxer_app/rust/libfluxcore/Cargo.lock +++ b/fluxer_app/rust/libfluxcore/Cargo.lock @@ -2,17 +2,11 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "anyhow" -version = "1.0.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" - [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "bit-set" @@ -31,9 +25,9 @@ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "bumpalo" @@ -43,9 +37,9 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "cc" -version = "1.2.63" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", "jobserver", @@ -55,15 +49,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "errno" @@ -77,15 +65,15 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fnv" @@ -93,12 +81,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "getrandom" version = "0.3.4" @@ -113,83 +95,30 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi 6.0.0", - "wasip2", - "wasip3", ] -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash", -] - -[[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - -[[package]] -name = "indexmap" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" -dependencies = [ - "equivalent", - "hashbrown 0.17.1", - "serde", - "serde_core", -] - -[[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.3", "libc", ] -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libfluxcore" @@ -206,18 +135,6 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" -[[package]] -name = "log" -version = "0.4.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" - -[[package]] -name = "memchr" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" - [[package]] name = "num-traits" version = "0.2.19" @@ -235,9 +152,9 @@ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "ppv-lite86" @@ -248,21 +165,11 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -294,9 +201,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -315,9 +222,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ "rand_chacha", "rand_core", @@ -353,15 +260,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ "bitflags", "errno", @@ -372,9 +279,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "rusty-fork" @@ -388,54 +295,6 @@ dependencies = [ "wait-timeout", ] -[[package]] -name = "semver" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" - -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.149" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - [[package]] name = "shlex" version = "2.0.1" @@ -444,9 +303,20 @@ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -460,7 +330,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.4.3", "once_cell", "rustix", "windows-sys", @@ -474,15 +344,9 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "wait-timeout" @@ -495,27 +359,18 @@ dependencies = [ [[package]] name = "wasip2" -version = "1.0.3+wasi-0.2.9" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -526,9 +381,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -536,60 +391,26 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "windows-link" version = "0.2.1" @@ -605,149 +426,55 @@ dependencies = [ "windows-link", ] -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - [[package]] name = "wit-bindgen" version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] -[[package]] -name = "zmij" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" - [[package]] name = "zstd" -version = "0.13.3" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +checksum = "bf06bd8162af0734b344780deb55b42a2429ae430870d13fcc12f238e880fe6e" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "7.2.4" +version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +checksum = "ae42c0555055784c70058d19ba8e275528e8a99a706684868ace5da4e716a4ab" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.16+zstd.1.5.7" +version = "2.1.0+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +checksum = "0ef0a8027ec3ee71300ab3bcbcd0393f434aa72b91ca6d635a39941deae8eea0" dependencies = [ "cc", "pkg-config", diff --git a/fluxer_app/rust/libfluxcore/Cargo.toml b/fluxer_app/rust/libfluxcore/Cargo.toml index 25a90e7f2..e04fb1b78 100644 --- a/fluxer_app/rust/libfluxcore/Cargo.toml +++ b/fluxer_app/rust/libfluxcore/Cargo.toml @@ -9,8 +9,8 @@ publish = false crate-type = ["cdylib", "rlib"] [dependencies] -wasm-bindgen = "=0.2.123" -zstd = {version = "0.13.3", default-features = false, features = ["no_asm", "thin", "wasm"]} +wasm-bindgen = "=0.2.128" +zstd = {version = "0.14.0", default-features = false, features = ["no_asm", "thin", "wasm"]} [dev-dependencies] proptest = "1.11.0" diff --git a/fluxer_app/scripts/add-data-flx-attributes.mjs b/fluxer_app/scripts/add-data-flx-attributes.mjs index 2dffe861c..bcf5764b0 100644 --- a/fluxer_app/scripts/add-data-flx-attributes.mjs +++ b/fluxer_app/scripts/add-data-flx-attributes.mjs @@ -262,7 +262,7 @@ function shouldTagOpeningElement(opening, target) { } function getAttributeName(attribute) { - if (!attribute || attribute.type !== 'JSXAttribute') return ''; + if (attribute?.type !== 'JSXAttribute') return ''; return getNodeName(attribute.name); } diff --git a/fluxer_app/scripts/build/rspack/lingui.mjs b/fluxer_app/scripts/build/rspack/lingui.mjs index c5b8fb75e..c46a76454 100644 --- a/fluxer_app/scripts/build/rspack/lingui.mjs +++ b/fluxer_app/scripts/build/rspack/lingui.mjs @@ -10,12 +10,11 @@ export function getLinguiSwcPluginConfig() { return [ '@lingui/swc-plugin', { - localeDir: 'src/locales/{locale}/messages', + descriptorFields: 'all', runtimeModules: { i18n: ['@lingui/core', 'i18n'], trans: ['@lingui/react', 'Trans'], }, - stripNonEssentialFields: false, }, ]; } diff --git a/fluxer_app/src/features/app/components/HookOrderStability.test.ts b/fluxer_app/src/features/app/components/HookOrderStability.test.ts index 86c43cff9..06e67b389 100644 --- a/fluxer_app/src/features/app/components/HookOrderStability.test.ts +++ b/fluxer_app/src/features/app/components/HookOrderStability.test.ts @@ -61,7 +61,7 @@ function isFunctionNode(node: AstNode | null | undefined): boolean { const REACT_HOOK_NAMESPACES = new Set(['React']); function isReactHookNamespace(object: AstNode | null | undefined): boolean { - if (!object || object.type !== 'Identifier' || typeof object.name !== 'string') { + if (object?.type !== 'Identifier' || typeof object.name !== 'string') { return false; } return REACT_HOOK_NAMESPACES.has(object.name); @@ -181,7 +181,7 @@ function findHookOrderHazards(): Array { const source = readFileSync(file, 'utf8'); const ast = parse(source, { sourceType: 'module', - plugins: ['typescript', 'jsx', 'decorators-legacy'], + plugins: file.endsWith('.tsx') ? ['typescript', 'jsx'] : ['typescript'], }) as unknown as AstNode; walk(ast, (node, parent) => { if (!isFunctionNode(node)) { diff --git a/fluxer_app/src/features/app/components/dialogs/shared/UseForwardDestinations.ts b/fluxer_app/src/features/app/components/dialogs/shared/UseForwardDestinations.ts index f582a05fa..f57373bd5 100644 --- a/fluxer_app/src/features/app/components/dialogs/shared/UseForwardDestinations.ts +++ b/fluxer_app/src/features/app/components/dialogs/shared/UseForwardDestinations.ts @@ -57,7 +57,7 @@ import type {MessageAttachment} from '@fluxer/schema/src/domains/message/Message import type {I18n} from '@lingui/core'; import {msg} from '@lingui/core/macro'; import {useLingui} from '@lingui/react/macro'; -import {comparer, computed, type IComputedValue} from 'mobx'; +import {compareStructural, computed, type IComputedValue} from 'mobx'; import {useEffect, useMemo, useState} from 'react'; const GUILD_MESSAGES_DISABLED_DESCRIPTOR = msg({ @@ -325,7 +325,7 @@ function buildForwardSearchBoostersFromStores(): ForwardSearchBoosters { } function createForwardSearchCandidates(i18n: I18n): IComputedValue { - const options = {equals: comparer.structural}; + const options = {equals: compareStructural}; const users = computed(buildForwardUserCandidates, options); const groupDMs = computed(() => buildForwardGroupDMCandidates(i18n), options); const channels = computed(buildForwardChannelCandidates, options); diff --git a/fluxer_app/src/features/app/state/Initialization.ts b/fluxer_app/src/features/app/state/Initialization.ts index 33be943e7..a43cf973e 100644 --- a/fluxer_app/src/features/app/state/Initialization.ts +++ b/fluxer_app/src/features/app/state/Initialization.ts @@ -1,7 +1,7 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import type {ValueOf} from '@fluxer/constants/src/ValueOf'; -import {action, makeAutoObservable} from 'mobx'; +import {makeAutoObservable} from 'mobx'; const InitializationState = { LOADING: 'LOADING', @@ -41,32 +41,27 @@ class Initialization { return this.state === InitializationState.READY; } - @action setLoading(): void { this.state = InitializationState.LOADING; this.error = null; } - @action setConnecting(): void { this.state = InitializationState.CONNECTING; this.error = null; } - @action setReady(): void { this.state = InitializationState.READY; this.hasCompletedInitialLoad = true; this.error = null; } - @action setError(error: string): void { this.state = InitializationState.ERROR; this.error = error; } - @action reset(): void { this.state = InitializationState.LOADING; this.hasCompletedInitialLoad = false; diff --git a/fluxer_app/src/features/app/state/RuntimeConfig.ts b/fluxer_app/src/features/app/state/RuntimeConfig.ts index 94cdf8e1d..3b66625cb 100644 --- a/fluxer_app/src/features/app/state/RuntimeConfig.ts +++ b/fluxer_app/src/features/app/state/RuntimeConfig.ts @@ -26,6 +26,8 @@ import type {InstanceConfigResponse} from '@fluxer/schema/src/domains/admin/Admi import {makeAutoObservable, reaction, runInAction} from 'mobx'; export type { + GifProvider, + GifProviderInfo, InstanceCaptcha, InstanceCommunity, InstanceDiscoveryResponse, @@ -34,7 +36,6 @@ export type { InstanceServices, InstanceSsoConfig, }; -export type {GifProvider, GifProviderInfo}; export interface RuntimeConfigSnapshot { apiEndpoint: string; diff --git a/fluxer_app/src/features/auth/state/Authentication.ts b/fluxer_app/src/features/auth/state/Authentication.ts index 844d48b15..283a1f3be 100644 --- a/fluxer_app/src/features/auth/state/Authentication.ts +++ b/fluxer_app/src/features/auth/state/Authentication.ts @@ -4,7 +4,7 @@ import ExperimentAssignments from '@app/features/experiment/state/ExperimentAssi import SessionManager from '@app/features/platform/state/AuthSession'; import type {ValueOf} from '@fluxer/constants/src/ValueOf'; import type {UserPrivate} from '@fluxer/schema/src/domains/user/UserResponseSchemas'; -import {action, computed, makeAutoObservable} from 'mobx'; +import {computed, makeAutoObservable} from 'mobx'; const LoginState = { Default: 'default', @@ -67,18 +67,15 @@ class Authentication { return SessionManager.userId; } - @action setUserId(userId: string | null): void { SessionManager.setUserId(userId); } - @action handleGatewayReady({user}: {user: UserPrivate}): void { SessionManager.setUserId(user.id); SessionManager.handleConnectionReady(); } - @action handleAuthSessionChange({token}: {token: string}): void { SessionManager.setToken(token || null); } @@ -90,7 +87,6 @@ class Authentication { } } - @action handleSessionStart({token}: {token: string | null | undefined}): void { if (token) { SessionManager.setToken(token); @@ -102,7 +98,6 @@ class Authentication { this.mfaMethods = null; } - @action handleMfaTicketSet({ ticket, totp, @@ -115,14 +110,12 @@ class Authentication { this.mfaMethods = {totp, webauthn}; } - @action handleMfaTicketClear(): void { this.loginState = LoginState.Default; this.mfaTicket = null; this.mfaMethods = null; } - @action handleLogout(options?: {skipRedirect?: boolean}): void { ExperimentAssignments.reset(); this.loginState = LoginState.Default; diff --git a/fluxer_app/src/features/channel/components/ChannelHeader.tsx b/fluxer_app/src/features/channel/components/ChannelHeader.tsx index 8da994407..adfea847e 100644 --- a/fluxer_app/src/features/channel/components/ChannelHeader.tsx +++ b/fluxer_app/src/features/channel/components/ChannelHeader.tsx @@ -530,7 +530,7 @@ export const ChannelHeader = observer( if (hasCallableRecipients && !(isDM && isBotDMRecipient)) { desktopLeadingActionCount += 2; } - if (showPins && Boolean(channel)) { + if (showPins && channel) { desktopLeadingActionCount += 1; } if (hasChannel && isFriendDM && !isGroupDM) { diff --git a/fluxer_app/src/features/channel/components/ChannelIndexPage.module.css b/fluxer_app/src/features/channel/components/ChannelIndexPage.module.css index bccb6b230..c2e5887c9 100644 --- a/fluxer_app/src/features/channel/components/ChannelIndexPage.module.css +++ b/fluxer_app/src/features/channel/components/ChannelIndexPage.module.css @@ -177,26 +177,41 @@ .channelGrid[data-voice-text-split-view='true'] .compactCallWrapper { flex: 0 0 auto; height: clamp(13rem, 42vh, 28rem); - height: clamp(13rem, 42svh, 28rem); max-height: 48vh; - max-height: 48svh; +} + +@supports (height: 1svh) { + .channelGrid[data-voice-text-split-view='true'] .compactCallWrapper { + height: clamp(13rem, 42svh, 28rem); + max-height: 48svh; + } } @media (min-width: 600px) and (orientation: portrait) { .channelGrid[data-voice-text-split-view='true'] .compactCallWrapper { height: clamp(18rem, 44vh, 34rem); - height: clamp(18rem, 44svh, 34rem); max-height: 50vh; - max-height: 50svh; + } + + @supports (height: 1svh) { + .channelGrid[data-voice-text-split-view='true'] .compactCallWrapper { + height: clamp(18rem, 44svh, 34rem); + max-height: 50svh; + } } } @media (max-height: 600px) and (orientation: portrait) { .channelGrid[data-voice-text-split-view='true'] .compactCallWrapper { height: clamp(9rem, 36vh, 13rem); - height: clamp(9rem, 36svh, 13rem); max-height: 40vh; - max-height: 40svh; + } + + @supports (height: 1svh) { + .channelGrid[data-voice-text-split-view='true'] .compactCallWrapper { + height: clamp(9rem, 36svh, 13rem); + max-height: 40svh; + } } } diff --git a/fluxer_app/src/features/channel/components/ChannelMessageStreamUtils.bench.ts b/fluxer_app/src/features/channel/components/ChannelMessageStreamUtils.bench.ts index c259800b5..afb1447a1 100644 --- a/fluxer_app/src/features/channel/components/ChannelMessageStreamUtils.bench.ts +++ b/fluxer_app/src/features/channel/components/ChannelMessageStreamUtils.bench.ts @@ -3,7 +3,7 @@ import {getUnreadDividerBeforeMessageId} from '@app/features/channel/components/ChannelMessageStreamUtils'; import type {Message} from '@app/features/messaging/models/MessagingMessage'; import type {ChannelStreamItem} from '@app/features/messaging/utils/MessageGroupingUtils'; -import {bench, describe} from 'vitest'; +import {test} from 'vitest'; const GROUP_ITEMS = Array.from( {length: 100}, @@ -29,8 +29,8 @@ const GROUPS = Array.from({length: 1_000}, (_value, groupIndex) => ), ); -describe('ChannelMessageStreamUtils benchmarks', () => { - bench('find unread divider id across 1k pending render groups', () => { +test('ChannelMessageStreamUtils benchmarks', async ({bench}) => { + await bench('find unread divider id across 1k pending render groups', () => { let hits = 0; for (const group of GROUPS) { if (getUnreadDividerBeforeMessageId(group) !== null) { @@ -38,5 +38,5 @@ describe('ChannelMessageStreamUtils benchmarks', () => { } } (globalThis as {__channelMessageStreamBenchSink?: number}).__channelMessageStreamBenchSink = hits; - }); + }).run(); }); diff --git a/fluxer_app/src/features/channel/components/MessageAttachmentUtils.bench.ts b/fluxer_app/src/features/channel/components/MessageAttachmentUtils.bench.ts index 203102f4c..1779bdcb7 100644 --- a/fluxer_app/src/features/channel/components/MessageAttachmentUtils.bench.ts +++ b/fluxer_app/src/features/channel/components/MessageAttachmentUtils.bench.ts @@ -2,7 +2,7 @@ import {splitMediaAndFileAttachments} from '@app/features/channel/components/MessageAttachmentUtils'; import type {MessageAttachment} from '@fluxer/schema/src/domains/message/MessageResponseSchemas'; -import {bench, describe} from 'vitest'; +import {test} from 'vitest'; const CONTENT_TYPES = [ 'image/png', @@ -30,8 +30,8 @@ const ATTACHMENTS = Array.from({length: 500}, (_value, index): MessageAttachment }; }); -describe('MessageAttachmentUtils benchmarks', () => { - bench('split 500 mixed media and file attachments', () => { +test('MessageAttachmentUtils benchmarks', async ({bench}) => { + await bench('split 500 mixed media and file attachments', () => { splitMediaAndFileAttachments(ATTACHMENTS); - }); + }).run(); }); diff --git a/fluxer_app/src/features/channel/components/direct_message/DMListHelpers.ts b/fluxer_app/src/features/channel/components/direct_message/DMListHelpers.ts index ce36b70d4..a67dda58b 100644 --- a/fluxer_app/src/features/channel/components/direct_message/DMListHelpers.ts +++ b/fluxer_app/src/features/channel/components/direct_message/DMListHelpers.ts @@ -21,7 +21,7 @@ export function getDmRouteChannelId(pathname: string): string | null { } export function canInviteInChannel(channel?: Channel | null): channel is Channel { - if (!channel || !channel.guildId) { + if (!channel?.guildId) { return false; } return InviteUtils.canInviteToChannel(channel.id, channel.guildId); diff --git a/fluxer_app/src/features/channel/components/embeds/media/EmbedYouTube.tsx b/fluxer_app/src/features/channel/components/embeds/media/EmbedYouTube.tsx index bffa84a90..73d6a66c5 100644 --- a/fluxer_app/src/features/channel/components/embeds/media/EmbedYouTube.tsx +++ b/fluxer_app/src/features/channel/components/embeds/media/EmbedYouTube.tsx @@ -196,7 +196,7 @@ export const EmbedYouTube: FC = observer(({embed, width = YOU () => decodeThumbHashDataURL(embed.thumbnail?.placeholder), [embed.thumbnail?.placeholder], ); - if (!(embed.video && embed.thumbnail && embed.thumbnail.proxy_url)) { + if (!(embed.video && embed.thumbnail?.proxy_url)) { return null; } const videoWidth = embed.video.width ?? YOUTUBE_CONFIG.DEFAULT_WIDTH; diff --git a/fluxer_app/src/features/channel/components/modals/channel_tabs/ChannelPermissionsTab.tsx b/fluxer_app/src/features/channel/components/modals/channel_tabs/ChannelPermissionsTab.tsx index 6f277a7fa..ddf58e22a 100644 --- a/fluxer_app/src/features/channel/components/modals/channel_tabs/ChannelPermissionsTab.tsx +++ b/fluxer_app/src/features/channel/components/modals/channel_tabs/ChannelPermissionsTab.tsx @@ -459,7 +459,7 @@ const ChannelPermissionsTab: React.FC<{channelId: string}> = observer(({channelI ], ); const isSyncedWithParent = useMemo(() => { - if (!channel || !channel.parentId || !parentChannel || !parentChannel.isGuildCategory()) return null; + if (!channel?.parentId || !parentChannel?.isGuildCategory()) return null; const channelOverwrites = channel.permissionOverwrites || {}; const parentOverwrites = parentChannel.permissionOverwrites || {}; const channelKeys = Object.keys(channelOverwrites).sort(); diff --git a/fluxer_app/src/features/channel/components/pickers/gif/GifPickerGridData.bench.ts b/fluxer_app/src/features/channel/components/pickers/gif/GifPickerGridData.bench.ts index cb6a9eea4..7c476fb0f 100644 --- a/fluxer_app/src/features/channel/components/pickers/gif/GifPickerGridData.bench.ts +++ b/fluxer_app/src/features/channel/components/pickers/gif/GifPickerGridData.bench.ts @@ -1,7 +1,7 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import {buildGifPickerGridData} from '@app/features/channel/components/pickers/gif/GifPickerGridData'; -import {bench, describe} from 'vitest'; +import {test} from 'vitest'; function gif(index: number, width = 200 + (index % 80), height = 120 + (index % 160)) { return { @@ -49,8 +49,8 @@ const FAVORITE_MEMES = Array.from({length: 100}, (_, index) => ({ url: `https://cdn.example.test/meme-${index}.mp4`, })); -describe('GifPickerGridData benchmarks', () => { - bench('builds 500 GIF result items', () => { +test('GifPickerGridData benchmarks', async ({bench}) => { + await bench('builds 500 GIF result items', () => { buildGifPickerGridData({ surface: 'results', loading: false, @@ -65,9 +65,9 @@ describe('GifPickerGridData benchmarks', () => { favoriteTitle: 'Favorites', trendingTitle: 'Trending', }); - }); + }).run(); - bench('builds 500 favorite GIF items', () => { + await bench('builds 500 favorite GIF items', () => { buildGifPickerGridData({ surface: 'favorites', loading: false, @@ -82,9 +82,9 @@ describe('GifPickerGridData benchmarks', () => { favoriteTitle: 'Favorites', trendingTitle: 'Trending', }); - }); + }).run(); - bench('builds featured categories and preview tiles', () => { + await bench('builds featured categories and preview tiles', () => { buildGifPickerGridData({ surface: 'featured', loading: false, @@ -99,5 +99,5 @@ describe('GifPickerGridData benchmarks', () => { favoriteTitle: 'Favorites', trendingTitle: 'Trending', }); - }); + }).run(); }); diff --git a/fluxer_app/src/features/channel/components/pickers/gif/GifPickerLoadingSkeletonGridLayout.bench.ts b/fluxer_app/src/features/channel/components/pickers/gif/GifPickerLoadingSkeletonGridLayout.bench.ts index a310b0421..204dc7937 100644 --- a/fluxer_app/src/features/channel/components/pickers/gif/GifPickerLoadingSkeletonGridLayout.bench.ts +++ b/fluxer_app/src/features/channel/components/pickers/gif/GifPickerLoadingSkeletonGridLayout.bench.ts @@ -1,7 +1,7 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import {buildGifPickerLoadingSkeletonLayout} from '@app/features/channel/components/pickers/gif/GifPickerLoadingSkeletonGridLayout'; -import {bench, describe} from 'vitest'; +import {test} from 'vitest'; const VIEWPORTS = [ {viewportWidth: 360, viewportHeight: 480}, @@ -10,10 +10,10 @@ const VIEWPORTS = [ {viewportWidth: 960, viewportHeight: 840}, ] as const; -describe('GifPickerLoadingSkeletonGridLayout benchmarks', () => { - bench('builds deterministic masonry skeleton layouts for common picker sizes', () => { +test('GifPickerLoadingSkeletonGridLayout benchmarks', async ({bench}) => { + await bench('builds deterministic masonry skeleton layouts for common picker sizes', () => { for (const viewport of VIEWPORTS) { buildGifPickerLoadingSkeletonLayout(viewport); } - }); + }).run(); }); diff --git a/fluxer_app/src/features/channel/components/pickers/gif/GifPickerState.ts b/fluxer_app/src/features/channel/components/pickers/gif/GifPickerState.ts index 02101637a..b5e497db6 100644 --- a/fluxer_app/src/features/channel/components/pickers/gif/GifPickerState.ts +++ b/fluxer_app/src/features/channel/components/pickers/gif/GifPickerState.ts @@ -21,7 +21,7 @@ import type {Gif, GifFeatured} from '@app/features/expressions/commands/GifComma import * as GifCommands from '@app/features/expressions/commands/GifCommands'; import type {DebouncedFunction} from '@app/features/platform/utils/scroll_manager/shared'; import debounce from 'lodash/debounce'; -import {makeAutoObservable, observable, runInAction} from 'mobx'; +import {makeAutoObservable, observableRef, runInAction} from 'mobx'; const EMPTY_FEATURED: GifFeatured = Object.freeze({categories: [], gifs: []}); const TRENDING_CACHE_KEY = 'trending'; @@ -83,7 +83,7 @@ export class GifPickerState { suggestDebounced: false, disposed: false, requestSequence: false, - snapshot: observable.ref, + snapshot: observableRef, categoryResultCache: false, loadingSkeletonTimerId: false, pendingSearchSkeletonMode: false, diff --git a/fluxer_app/src/features/channel/components/pickers/gif/GifPickerStateMachine.bench.ts b/fluxer_app/src/features/channel/components/pickers/gif/GifPickerStateMachine.bench.ts index b1e561a9b..43cbb1dac 100644 --- a/fluxer_app/src/features/channel/components/pickers/gif/GifPickerStateMachine.bench.ts +++ b/fluxer_app/src/features/channel/components/pickers/gif/GifPickerStateMachine.bench.ts @@ -6,12 +6,12 @@ import { selectGifPickerModel, transitionGifPickerSnapshot, } from '@app/features/channel/components/pickers/gif/GifPickerStateMachine'; -import {bench, describe} from 'vitest'; +import {test} from 'vitest'; const SEARCH_TERMS = Array.from({length: 1_000}, (_, index) => `query-${index}`); -describe('GifPickerStateMachine benchmarks', () => { - bench('coalesces 1k search term transitions while preserving the visible surface', () => { +test('GifPickerStateMachine benchmarks', async ({bench}) => { + await bench('coalesces 1k search term transitions while preserving the visible surface', () => { let snapshot = createGifPickerSnapshot(); snapshot = transitionGifPickerSnapshot(snapshot, { type: 'gifPicker.featuredSucceeded', @@ -25,9 +25,9 @@ describe('GifPickerStateMachine benchmarks', () => { }); } selectGifPickerModel(snapshot); - }); + }).run(); - bench('rejects 1k stale search completions', () => { + await bench('rejects 1k stale search completions', () => { let snapshot = createGifPickerSnapshot(); for (let index = 0; index < SEARCH_TERMS.length; index += 1) { const term = SEARCH_TERMS[index]; @@ -52,9 +52,9 @@ describe('GifPickerStateMachine benchmarks', () => { }); } selectGifPickerModel(snapshot); - }); + }).run(); - bench('commits latest search result after a fast query burst', () => { + await bench('commits latest search result after a fast query burst', () => { let snapshot = createGifPickerSnapshot(); for (let index = 0; index < SEARCH_TERMS.length; index += 1) { const term = SEARCH_TERMS[index]; @@ -77,9 +77,9 @@ describe('GifPickerStateMachine benchmarks', () => { resultCount: 24, }); selectGifPickerModel(snapshot); - }); + }).run(); - bench('rejects 1k stale skeleton timer events before showing the active one', () => { + await bench('rejects 1k stale skeleton timer events before showing the active one', () => { const activeRequestId = createGifPickerRequestId(SEARCH_TERMS.length + 1); let snapshot = createGifPickerSnapshot(); snapshot = transitionGifPickerSnapshot(snapshot, { @@ -107,9 +107,9 @@ describe('GifPickerStateMachine benchmarks', () => { term: 'active', }); selectGifPickerModel(snapshot); - }); + }).run(); - bench('opens 1k cached category snapshots without entering loading', () => { + await bench('opens 1k cached category snapshots without entering loading', () => { let snapshot = createGifPickerSnapshot(); for (const term of SEARCH_TERMS) { snapshot = transitionGifPickerSnapshot(snapshot, { @@ -119,5 +119,5 @@ describe('GifPickerStateMachine benchmarks', () => { }); } selectGifPickerModel(snapshot); - }); + }).run(); }); diff --git a/fluxer_app/src/features/channel/state/ChannelFrecency.ts b/fluxer_app/src/features/channel/state/ChannelFrecency.ts index 15e2d5dbc..3b6bee53d 100644 --- a/fluxer_app/src/features/channel/state/ChannelFrecency.ts +++ b/fluxer_app/src/features/channel/state/ChannelFrecency.ts @@ -19,7 +19,7 @@ import MediaEngine from '@app/features/voice/engine/MediaEngineFacade'; import {ME} from '@fluxer/constants/src/AppConstants'; import {ChannelTypes} from '@fluxer/constants/src/ChannelConstants'; import {ChannelFrecencyStateSchema} from '@fluxer/schema/src/gen/fluxer/user/preferences/v1/preferences_pb'; -import {comparer, isObservableMap, makeAutoObservable, observable, reaction} from 'mobx'; +import {compareShallow, isObservableMap, makeAutoObservable, observableShallow, reaction} from 'mobx'; const TRACKABLE_ID_PATTERN = /^\d{17,19}$/; const FRECENCY_REFRESH_INTERVAL_MS = 3_600_000; @@ -49,7 +49,7 @@ class ChannelFrecency { usageHistory = new Map(); constructor() { - makeAutoObservable(this, {usageHistory: observable.shallow}, {autoBind: true}); + makeAutoObservable(this, {usageHistory: observableShallow}, {autoBind: true}); void this.initPersistence(); } @@ -72,7 +72,7 @@ class ChannelFrecency { reaction( () => [Navigation.guildId, Navigation.channelId] as const, ([guildId, channelId]) => this.recordSelection(guildId, channelId), - {equals: comparer.shallow, fireImmediately: true}, + {equals: compareShallow, fireImmediately: true}, ); reaction( () => [MediaEngine.guildId, MediaEngine.channelId] as const, @@ -80,7 +80,7 @@ class ChannelFrecency { if (channelId === null && MediaEngine.localDisconnectReason === 'channelMove') return; this.recordSelection(guildId, channelId); }, - {equals: comparer.shallow}, + {equals: compareShallow}, ); } diff --git a/fluxer_app/src/features/channel/state/ChannelSearch.ts b/fluxer_app/src/features/channel/state/ChannelSearch.ts index 8d83c69e1..5d327d508 100644 --- a/fluxer_app/src/features/channel/state/ChannelSearch.ts +++ b/fluxer_app/src/features/channel/state/ChannelSearch.ts @@ -14,7 +14,7 @@ import SelectedGuild from '@app/features/navigation/state/SelectedGuild'; import type {SearchSegment} from '@app/features/search/utils/SearchSegmentManager'; import type {MessageSearchScope} from '@app/features/search/utils/SearchUtils'; import {ME} from '@fluxer/constants/src/AppConstants'; -import {makeAutoObservable, observable} from 'mobx'; +import {makeAutoObservable, observableRef, observableShallow} from 'mobx'; type ChannelSearchSortMode = 'newest' | 'oldest' | 'relevant'; @@ -38,7 +38,7 @@ class ChannelSearchContext { constructor() { makeAutoObservable(this, { - machineSnapshot: observable.ref, + machineSnapshot: observableRef, }); } @@ -52,7 +52,7 @@ class ChannelSearch { constructor() { makeAutoObservable(this, { - contexts: observable.shallow, + contexts: observableShallow, }); } diff --git a/fluxer_app/src/features/channel/state/Channels.ts b/fluxer_app/src/features/channel/state/Channels.ts index c95b81574..b3d25a540 100644 --- a/fluxer_app/src/features/channel/state/Channels.ts +++ b/fluxer_app/src/features/channel/state/Channels.ts @@ -16,7 +16,7 @@ import type {Channel as WireChannel} from '@fluxer/schema/src/domains/channel/Ch import type {Message as WireMessage} from '@fluxer/schema/src/domains/message/MessageResponseSchemas'; import type {UserPartial} from '@fluxer/schema/src/domains/user/UserResponseSchemas'; import * as SnowflakeUtils from '@fluxer/snowflake/src/SnowflakeUtils'; -import {action, makeAutoObservable, observable} from 'mobx'; +import {makeAutoObservable, observableRef, observableShallow} from 'mobx'; const EMPTY_CHANNELS: ReadonlyArray = Object.freeze([]); const sortDMs = (a: Channel, b: Channel) => { @@ -58,7 +58,7 @@ class Channels { constructor() { makeAutoObservable( this, - {channelsByGuildId: observable.shallow, privateChannelList: observable.ref}, + {channelsByGuildId: observableShallow, privateChannelList: observableRef}, {autoBind: true}, ); } @@ -98,7 +98,6 @@ class Channels { return this.privateChannelList; } - @action removeChannelOptimistically(channelId: string): void { if (this.optimisticChannelBackups.has(channelId)) { return; @@ -111,7 +110,6 @@ class Channels { this.deleteChannelRecord(channelId); } - @action rollbackChannelDeletion(channelId: string): void { const channel = this.optimisticChannelBackups.get(channelId); if (!channel) { @@ -121,18 +119,15 @@ class Channels { this.optimisticChannelBackups.delete(channelId); } - @action clearOptimisticallyRemovedChannel(channelId: string): void { this.optimisticChannelBackups.delete(channelId); } - @action private removeChannel(channelId: string): void { this.clearOptimisticallyRemovedChannel(channelId); this.deleteChannelRecord(channelId); } - @action private deleteChannelRecord(channelId: string): void { const channel = this.channelsById.get(channelId); this.channelsById.delete(channelId); @@ -142,7 +137,6 @@ class Channels { ChannelDisplayName.removeChannel(channelId); } - @action private setChannel(channel: Channel | WireChannel): void { const record = channel instanceof Channel ? channel : new Channel(channel); const existing = this.channelsById.get(record.id); @@ -154,7 +148,6 @@ class Channels { ChannelDisplayName.syncChannel(record); } - @action private indexChannel(previous: Channel | undefined, next: Channel): void { if (previous && previous.guildId === next.guildId && isPrivateChannel(previous) === isPrivateChannel(next)) { this.replaceChannelInIndex(previous, next); @@ -166,7 +159,6 @@ class Channels { this.addChannelToIndex(next); } - @action private addChannelToIndex(channel: Channel): void { if (channel.guildId) { const list = this.channelsByGuildId.get(channel.guildId) ?? EMPTY_CHANNELS; @@ -178,7 +170,6 @@ class Channels { } } - @action private removeChannelFromIndex(channel: Channel): void { if (channel.guildId) { const list = this.channelsByGuildId.get(channel.guildId); @@ -204,7 +195,6 @@ class Channels { } } - @action private replaceChannelInIndex(previous: Channel, next: Channel): void { if (next.guildId) { const list = this.channelsByGuildId.get(next.guildId); @@ -234,7 +224,6 @@ class Channels { this.privateChannelList = updated; } - @action handleGatewayReady({channels}: {channels: ReadonlyArray}): void { this.channelsById.clear(); this.channelsByGuildId.clear(); @@ -270,7 +259,6 @@ class Channels { this.setChannel(personalNotesChannel); } - @action handleGuildCreate(guild: GuildReadyData): void { if (guild.unavailable) { return; @@ -287,7 +275,6 @@ class Channels { } } - @action handleGuildDelete({guildId}: {guildId: string}): void { const guildChannels = this.getGuildChannels(guildId); if (guildChannels.length === 0) return; @@ -298,12 +285,10 @@ class Channels { } } - @action handleChannelCreate({channel}: {channel: WireChannel}): void { this.setChannel(channel); } - @action handlePassiveLastMessageUpdates({guildId, channels}: {guildId: string; channels: Record}): boolean { let changed = false; for (const [channelId, lastMessageId] of Object.entries(channels)) { @@ -325,14 +310,12 @@ class Channels { return changed; } - @action handleChannelUpdateBulk({channels}: {channels: Array}): void { for (const channel of channels) { this.setChannel(channel); } } - @action handleChannelPinsUpdate({channelId, lastPinTimestamp}: {channelId: string; lastPinTimestamp: string}): void { const channel = this.channelsById.get(channelId); if (!channel) { @@ -346,7 +329,6 @@ class Channels { ); } - @action handleChannelRecipientAdd({channelId, user}: {channelId: string; user: UserPartial}): void { const channel = this.channelsById.get(channelId); if (!channel) { @@ -361,7 +343,6 @@ class Channels { ); } - @action handleChannelRecipientRemove({channelId, user}: {channelId: string; user: UserPartial}): void { const channel = this.channelsById.get(channelId); if (!channel) { @@ -385,7 +366,6 @@ class Channels { ); } - @action handleChannelDelete({channel}: {channel: WireChannel}): void { this.removeChannel(channel.id); const history = RouterUtils.getHistory(); @@ -408,7 +388,6 @@ class Channels { } } - @action handleMessageCreate({message}: {message: WireMessage}): void { const channel = this.channelsById.get(message.channel_id); if (!channel) { @@ -428,7 +407,6 @@ class Channels { ); } - @action handleGuildRoleDelete({guildId, roleId}: {guildId: string; roleId: string}): void { const guildChannels = this.getGuildChannels(guildId); if (guildChannels.length === 0) return; diff --git a/fluxer_app/src/features/channel/utils/ChannelTopicModalUtils.ts b/fluxer_app/src/features/channel/utils/ChannelTopicModalUtils.ts index b900ed41f..9744cb34a 100644 --- a/fluxer_app/src/features/channel/utils/ChannelTopicModalUtils.ts +++ b/fluxer_app/src/features/channel/utils/ChannelTopicModalUtils.ts @@ -8,7 +8,7 @@ export interface ChannelTopicModalProps { export function getChannelTopicInfo(channelId: string) { const channel = Channels.getChannel(channelId); - if (!channel || !channel.topic) return null; + if (!channel?.topic) return null; return { channel, topic: channel.topic, diff --git a/fluxer_app/src/features/emoji/state/EmojiSearchIndex.bench.ts b/fluxer_app/src/features/emoji/state/EmojiSearchIndex.bench.ts index 8381a63eb..a56538fd1 100644 --- a/fluxer_app/src/features/emoji/state/EmojiSearchIndex.bench.ts +++ b/fluxer_app/src/features/emoji/state/EmojiSearchIndex.bench.ts @@ -2,7 +2,7 @@ import {createEmojiSearchIndex} from '@app/features/emoji/state/EmojiSearchIndex'; import type {FlatEmoji} from '@app/features/emoji/types/EmojiTypes'; -import {bench, describe} from 'vitest'; +import {test} from 'vitest'; const EMOJI_COUNT = 20_000; const QUERY_COUNT = 1_000; @@ -42,21 +42,21 @@ const QUERIES = Object.freeze( }), ); -describe('EmojiSearchIndex benchmarks', () => { - bench('builds an n-gram index for 20k emoji-like records', () => { +test('EmojiSearchIndex benchmarks', async ({bench}) => { + await bench('builds an n-gram index for 20k emoji-like records', () => { const index = createEmojiSearchIndex(EMOJIS); (globalThis as {__emojiSearchIndexBenchSink?: number}).__emojiSearchIndexBenchSink = index.getStats().postingCount; - }); + }).run(); - bench('serves 1k mixed top-10 searches over 20k records', () => { + await bench('serves 1k mixed top-10 searches over 20k records', () => { let total = 0; for (const query of QUERIES) { total += INDEX.search(query, {count: 10}).length; } (globalThis as {__emojiSearchIndexBenchSink?: number}).__emojiSearchIndexBenchSink = total; - }); + }).run(); - bench('serves 1k filtered ranked searches over 20k records', () => { + await bench('serves 1k filtered ranked searches over 20k records', () => { let total = 0; for (const query of QUERIES) { total += INDEX.search(query, { @@ -66,5 +66,5 @@ describe('EmojiSearchIndex benchmarks', () => { }).length; } (globalThis as {__emojiSearchIndexBenchSink?: number}).__emojiSearchIndexBenchSink = total; - }); + }).run(); }); diff --git a/fluxer_app/src/features/experiment/state/ExperimentAssignments.test.ts b/fluxer_app/src/features/experiment/state/ExperimentAssignments.test.ts index 391aa988f..5829b040c 100644 --- a/fluxer_app/src/features/experiment/state/ExperimentAssignments.test.ts +++ b/fluxer_app/src/features/experiment/state/ExperimentAssignments.test.ts @@ -332,31 +332,31 @@ describe('ExperimentAssignments visibility', () => { }); describe('ExperimentAssignments lifecycle', () => { - it.each([ - 'stop', - 'reset', - ] as const)('aborts an active request on %s and starts a fresh request immediately', async (method) => { - const stale = deferredReply(); - ExperimentAssignments.start(); - await settle(); - const signal = vi.mocked(http.get).mock.calls[0]?.[1]?.signal; - expect(signal).toBeDefined(); - expect(signal!.aborted).toBe(false); + it.each(['stop', 'reset'] as const)( + 'aborts an active request on %s and starts a fresh request immediately', + async (method) => { + const stale = deferredReply(); + ExperimentAssignments.start(); + await settle(); + const signal = vi.mocked(http.get).mock.calls[0]?.[1]?.signal; + expect(signal).toBeDefined(); + expect(signal!.aborted).toBe(false); - ExperimentAssignments[method](); - expect(signal!.aborted).toBe(true); - vi.mocked(http.get).mockResolvedValue(reply(200, CANARY_ENVELOPE, {etag: 'W/"fresh"'})); - ExperimentAssignments.start(); - await settle(); - expect(http.get).toHaveBeenCalledTimes(2); - expect(ExperimentAssignments.response).toEqual(CANARY_ENVELOPE); - expect(vi.getTimerCount()).toBe(1); + ExperimentAssignments[method](); + expect(signal!.aborted).toBe(true); + vi.mocked(http.get).mockResolvedValue(reply(200, CANARY_ENVELOPE, {etag: 'W/"fresh"'})); + ExperimentAssignments.start(); + await settle(); + expect(http.get).toHaveBeenCalledTimes(2); + expect(ExperimentAssignments.response).toEqual(CANARY_ENVELOPE); + expect(vi.getTimerCount()).toBe(1); - stale.resolve(reply(200, INERT_EXPERIMENT_ASSIGNMENTS_RESPONSE, {etag: 'W/"stale"'})); - await settle(); - expect(ExperimentAssignments.response).toEqual(CANARY_ENVELOPE); - expect(vi.getTimerCount()).toBe(1); - }); + stale.resolve(reply(200, INERT_EXPERIMENT_ASSIGNMENTS_RESPONSE, {etag: 'W/"stale"'})); + await settle(); + expect(ExperimentAssignments.response).toEqual(CANARY_ENVELOPE); + expect(vi.getTimerCount()).toBe(1); + }, + ); it('keeps ownership of the replacement request when the stale request finishes first', async () => { const stale = deferredReply(); diff --git a/fluxer_app/src/features/experiment/state/ExperimentAssignments.ts b/fluxer_app/src/features/experiment/state/ExperimentAssignments.ts index 846c486f0..c49fc75a3 100644 --- a/fluxer_app/src/features/experiment/state/ExperimentAssignments.ts +++ b/fluxer_app/src/features/experiment/state/ExperimentAssignments.ts @@ -11,7 +11,7 @@ import { ExperimentAssignmentsResponse, INERT_EXPERIMENT_ASSIGNMENTS_RESPONSE, } from '@fluxer/schema/src/domains/experiment/ExperimentSchemas'; -import {makeAutoObservable, observable, runInAction} from 'mobx'; +import {makeAutoObservable, observableRef, runInAction} from 'mobx'; const logger = new Logger('ExperimentAssignments'); @@ -82,7 +82,7 @@ class ExperimentAssignmentsStore { makeAutoObservable( this, { - response: observable.ref, + response: observableRef, abortController: false, etag: false, failureStreak: false, diff --git a/fluxer_app/src/features/gateway/transport/GatewayConnection.ts b/fluxer_app/src/features/gateway/transport/GatewayConnection.ts index e627b3493..39ab06352 100644 --- a/fluxer_app/src/features/gateway/transport/GatewayConnection.ts +++ b/fluxer_app/src/features/gateway/transport/GatewayConnection.ts @@ -44,7 +44,7 @@ import LayerManager from '@app/features/ui/state/LayerManager'; import MediaEngine from '@app/features/voice/engine/MediaEngineFacade'; import {DEFAULT_API_VERSION, FAVORITES_GUILD_ID} from '@fluxer/constants/src/AppConstants'; import {GatewayIdentifyFlags} from '@fluxer/constants/src/GatewayConstants'; -import {action, makeAutoObservable, reaction, runInAction} from 'mobx'; +import {action, actionBound, makeAutoObservable, reaction, runInAction} from 'mobx'; const logger = new Logger('GatewayConnection'); @@ -97,26 +97,26 @@ class GatewayConnection { >( this, { - startSession: action.bound, - beginConnectionGrace: action.bound, - clearConnectionGrace: action.bound, + startSession: actionBound, + beginConnectionGrace: actionBound, + clearConnectionGrace: actionBound, connectionGraceTimer: false, previousSessionId: false, - setToken: action.bound, - sendInvisiblePresenceForCurrentSession: action.bound, - retireCurrentSession: action.bound, - logout: action.bound, - handleGatewayReady: action.bound, - handleConnectionResumed: action.bound, - handleConnectionClosed: action.bound, - cleanupSocket: action.bound, - handleGatewayDispatch: action.bound, - handleFatalGatewaySocketError: action.bound, - ensureGuildActiveAndSynced: action.bound, - flushPendingGuildSync: action.bound, - syncGuildIfNeeded: action.bound, - markGuildSynced: action.bound, - applyGatewayGeoip: action.bound, + setToken: actionBound, + sendInvisiblePresenceForCurrentSession: actionBound, + retireCurrentSession: actionBound, + logout: actionBound, + handleGatewayReady: actionBound, + handleConnectionResumed: actionBound, + handleConnectionClosed: actionBound, + cleanupSocket: actionBound, + handleGatewayDispatch: actionBound, + handleFatalGatewaySocketError: actionBound, + ensureGuildActiveAndSynced: actionBound, + flushPendingGuildSync: actionBound, + syncGuildIfNeeded: actionBound, + markGuildSynced: actionBound, + applyGatewayGeoip: actionBound, }, {autoBind: true}, ); diff --git a/fluxer_app/src/features/guild/state/GuildList.ts b/fluxer_app/src/features/guild/state/GuildList.ts index e7fe2c0ac..c5e5c5c96 100644 --- a/fluxer_app/src/features/guild/state/GuildList.ts +++ b/fluxer_app/src/features/guild/state/GuildList.ts @@ -6,7 +6,7 @@ import Guilds from '@app/features/guild/state/Guilds'; import UserSettings, {type GuildFolder} from '@app/features/user/state/UserSettings'; import {UNCATEGORIZED_FOLDER_ID} from '@fluxer/constants/src/UserConstants'; import type {Guild as WireGuild} from '@fluxer/schema/src/domains/guild/GuildResponseSchemas'; -import {action, makeAutoObservable} from 'mobx'; +import {makeAutoObservable} from 'mobx'; export type OrganizedItem = | { @@ -26,7 +26,6 @@ class GuildList { makeAutoObservable(this, {}, {autoBind: true}); } - @action handleGatewayReady(guilds: ReadonlyArray): void { const availableGuilds: Array = []; for (const guild of guilds) { @@ -42,7 +41,6 @@ class GuildList { } } - @action handleGuild(guild: Guild | GuildReadyData | WireGuild): void { if (guild.unavailable) { return; @@ -66,7 +64,6 @@ class GuildList { this.guilds = next; } - @action handleGuildDelete(guildId: string, unavailable?: boolean): void { const index = this.guilds.findIndex((s) => s.id === guildId); if (index === -1) { @@ -85,7 +82,6 @@ class GuildList { this.guilds = next; } - @action sortGuilds(): void { const next = this.guilds.slice(); this.sortGuildArrayInPlace(next); diff --git a/fluxer_app/src/features/lexical/composer/ComposerCodeIndent.ts b/fluxer_app/src/features/lexical/composer/ComposerCodeIndent.ts index d3f073808..75312e244 100644 --- a/fluxer_app/src/features/lexical/composer/ComposerCodeIndent.ts +++ b/fluxer_app/src/features/lexical/composer/ComposerCodeIndent.ts @@ -16,7 +16,7 @@ export function registerComposerCodeIndent( ): () => void { return editor.registerCommand( KEY_TAB_COMMAND, - (event: KeyboardEvent | null) => { + (event: KeyboardEvent) => { if (typeaheadActiveRef.current) { return false; } diff --git a/fluxer_app/src/features/lexical/composer/LexicalComposerInput.tsx b/fluxer_app/src/features/lexical/composer/LexicalComposerInput.tsx index abc02cec9..e0db0d537 100644 --- a/fluxer_app/src/features/lexical/composer/LexicalComposerInput.tsx +++ b/fluxer_app/src/features/lexical/composer/LexicalComposerInput.tsx @@ -608,7 +608,7 @@ const ComposerInner = ({ }), editor.registerCommand( KEY_ARROW_UP_COMMAND, - (event: KeyboardEvent | null) => { + (event: KeyboardEvent) => { if (typeaheadActiveState.current) { return false; } @@ -662,7 +662,7 @@ const ComposerInner = ({ const target = event.target instanceof Element ? event.target : null; const root = editor.getRootElement(); const slotHost = target == null ? null : target.closest('[data-lexical-composer-slot]'); - if (slotHost != null && root != null && root.contains(slotHost)) { + if (slotHost && root?.contains(slotHost)) { let emptySlot = false; editor.getEditorState().read( () => { diff --git a/fluxer_app/src/features/lexical/composer/SelectionFormattingToolbar.tsx b/fluxer_app/src/features/lexical/composer/SelectionFormattingToolbar.tsx index bb652c716..4efb87f82 100644 --- a/fluxer_app/src/features/lexical/composer/SelectionFormattingToolbar.tsx +++ b/fluxer_app/src/features/lexical/composer/SelectionFormattingToolbar.tsx @@ -113,7 +113,7 @@ export function SelectionFormattingToolbarPlugin({enabled = true}: {enabled?: bo } const activeElement = root.ownerDocument.activeElement; const toolbar = toolbarRef.current; - const toolbarHasFocus = activeElement != null && toolbar != null && toolbar.contains(activeElement); + const toolbarHasFocus = activeElement && toolbar?.contains(activeElement); if (!$isRangeSelection(selection) || selection.isCollapsed()) { if (!toolbarHasFocus || savedSelectionRef.current == null) { setRect(null); diff --git a/fluxer_app/src/features/lexical/composer/slashSlots.ts b/fluxer_app/src/features/lexical/composer/slashSlots.ts index c56bfe25a..b3378ad31 100644 --- a/fluxer_app/src/features/lexical/composer/slashSlots.ts +++ b/fluxer_app/src/features/lexical/composer/slashSlots.ts @@ -625,7 +625,7 @@ export function registerSlashSlotPlugin( ), editor.registerCommand( KEY_ARROW_RIGHT_COMMAND, - (event: KeyboardEvent | null) => { + (event: KeyboardEvent) => { if ( event != null && (isIMEComposing(event) || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) @@ -655,7 +655,7 @@ export function registerSlashSlotPlugin( ), editor.registerCommand( KEY_ARROW_LEFT_COMMAND, - (event: KeyboardEvent | null) => { + (event: KeyboardEvent) => { if ( event != null && (isIMEComposing(event) || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) diff --git a/fluxer_app/src/features/member/state/MemberSidebar.ts b/fluxer_app/src/features/member/state/MemberSidebar.ts index 7dbc4e3f6..73c49afda 100644 --- a/fluxer_app/src/features/member/state/MemberSidebar.ts +++ b/fluxer_app/src/features/member/state/MemberSidebar.ts @@ -30,7 +30,7 @@ import type {StatusType} from '@fluxer/constants/src/StatusConstants'; import {StatusTypes} from '@fluxer/constants/src/StatusConstants'; import type {GuildMemberData} from '@fluxer/schema/src/domains/guild/GuildMemberSchemas'; import type {UserPartialResponse} from '@fluxer/schema/src/domains/user/UserResponseSchemas'; -import {makeAutoObservable, observable} from 'mobx'; +import {makeAutoObservable, observableRef} from 'mobx'; interface MemberListGroup { id: string; @@ -258,7 +258,7 @@ class MemberSidebar { >( this, { - lists: observable.ref, + lists: observableRef, wireListChannelIds: false, listSubscribedChannelIds: false, syncedMemberListGuildIds: false, diff --git a/fluxer_app/src/features/member/utils/MemberListRangeUtils.bench.ts b/fluxer_app/src/features/member/utils/MemberListRangeUtils.bench.ts index 3867f1fad..1d81a18a8 100644 --- a/fluxer_app/src/features/member/utils/MemberListRangeUtils.bench.ts +++ b/fluxer_app/src/features/member/utils/MemberListRangeUtils.bench.ts @@ -9,7 +9,7 @@ import { buildMemberListRenderWindow, normalizeMemberListRanges, } from '@app/features/member/utils/MemberListRangeUtils'; -import {bench, describe} from 'vitest'; +import {test} from 'vitest'; const ROW_HEIGHT = 44; const VIEWPORT_HEIGHT = ROW_HEIGHT * 18; @@ -26,12 +26,12 @@ const NORMALIZED_COVERING_RANGES = normalizeMemberListRanges(COVERING_RANGES); const NORMALIZED_COVERING_RANGES_COPY = normalizeMemberListRanges(COVERING_RANGES_COPY); const NORMALIZED_INNER_RANGES = normalizeMemberListRanges(INNER_RANGES); -describe('MemberListRangeUtils benchmarks', () => { - bench('normalize 1k mixed overlapping ranges', () => { +test('MemberListRangeUtils benchmarks', async ({bench}) => { + await bench('normalize 1k mixed overlapping ranges', () => { normalizeMemberListRanges(OVERLAPPING_RANGES); - }); + }).run(); - bench('build subscription windows while fast scrolling', () => { + await bench('build subscription windows while fast scrolling', () => { for (const scrollTop of SCROLL_OFFSETS) { buildMemberListRangeWindow({ scrollTop, @@ -42,9 +42,9 @@ describe('MemberListRangeUtils benchmarks', () => { totalRows: LARGE_TOTAL_ROWS, }); } - }); + }).run(); - bench('build render windows while fast scrolling', () => { + await bench('build render windows while fast scrolling', () => { for (const scrollTop of SCROLL_OFFSETS) { buildMemberListRenderWindow({ scrollTop, @@ -54,21 +54,21 @@ describe('MemberListRangeUtils benchmarks', () => { totalRows: LARGE_TOTAL_ROWS, }); } - }); + }).run(); - bench('coverage checks for 1k normalized pages', () => { + await bench('coverage checks for 1k normalized pages', () => { areMemberListRangesCovered(INNER_RANGES, COVERING_RANGES); - }); + }).run(); - bench('normalized coverage checks without re-normalizing', () => { + await bench('normalized coverage checks without re-normalizing', () => { areNormalizedMemberListRangesCovered(NORMALIZED_INNER_RANGES, NORMALIZED_COVERING_RANGES); - }); + }).run(); - bench('range equality for raw normalized-shaped windows', () => { + await bench('range equality for raw normalized-shaped windows', () => { areMemberListRangesEqual(COVERING_RANGES, COVERING_RANGES_COPY); - }); + }).run(); - bench('normalized range equality without re-normalizing', () => { + await bench('normalized range equality without re-normalizing', () => { areNormalizedMemberListRangesEqual(NORMALIZED_COVERING_RANGES, NORMALIZED_COVERING_RANGES_COPY); - }); + }).run(); }); diff --git a/fluxer_app/src/features/messaging/components/markdown/MarkdownRendering.bench.ts b/fluxer_app/src/features/messaging/components/markdown/MarkdownRendering.bench.ts index 57f9ef7a1..de263ae64 100644 --- a/fluxer_app/src/features/messaging/components/markdown/MarkdownRendering.bench.ts +++ b/fluxer_app/src/features/messaging/components/markdown/MarkdownRendering.bench.ts @@ -4,7 +4,7 @@ import type {MarkdownParseOptions} from '@app/features/messaging/components/mark import {MarkdownContext} from '@app/features/messaging/components/markdown/renderers/RendererTypes'; import {parseMarkdownContent as parse} from '@app/features/messaging/utils/markdown/MarkdownParseCache'; import type {Node} from '@app/features/messaging/utils/markdown/parser/Nodes'; -import {bench, describe} from 'vitest'; +import {test} from 'vitest'; const SIMPLE_CONTENT = 'hello **world** with <@1234567890> and https://fluxer.app'; const RICH_CONTENT = [ @@ -30,25 +30,25 @@ const SIMPLE_AST = parse({content: SIMPLE_CONTENT, context: MarkdownContext.STAN const RICH_AST = parse({content: RICH_CONTENT, context: MarkdownContext.STANDARD_WITHOUT_JUMBO}).nodes; let missSerial = 0; -describe('Markdown rendering benchmarks', () => { - bench('parse cache hit for simple message content', () => { +test('Markdown rendering benchmarks', async ({bench}) => { + await bench('parse cache hit for simple message content', () => { parse({content: SIMPLE_CONTENT, context: MarkdownContext.STANDARD_WITHOUT_JUMBO}); - }); + }).run(); - bench('parse cache miss for rich message content', () => { + await bench('parse cache miss for rich message content', () => { missSerial += 1; parse({content: `${RICH_CONTENT}\n${missSerial}`, context: MarkdownContext.STANDARD_WITHOUT_JUMBO}); - }); + }).run(); - bench('render simple parsed markdown AST to React nodes', () => { + await bench('render simple parsed markdown AST to React nodes', () => { let count = 0; for (const node of SIMPLE_AST) { count += node.type.length; } (globalThis as {__markdownRenderBenchSink?: number}).__markdownRenderBenchSink = count + RENDER_OPTIONS.context; - }); + }).run(); - bench('walk rich parsed markdown AST for render preparation', () => { + await bench('walk rich parsed markdown AST for render preparation', () => { let count = 0; const stack = [...RICH_AST]; while (stack.length > 0) { @@ -62,5 +62,5 @@ describe('Markdown rendering benchmarks', () => { } } (globalThis as {__markdownRenderBenchSink?: number}).__markdownRenderBenchSink = count + RENDER_OPTIONS.context; - }); + }).run(); }); diff --git a/fluxer_app/src/features/messaging/hooks/useTextareaAutocomplete.ts b/fluxer_app/src/features/messaging/hooks/useTextareaAutocomplete.ts index 35cce20de..4e757c03e 100644 --- a/fluxer_app/src/features/messaging/hooks/useTextareaAutocomplete.ts +++ b/fluxer_app/src/features/messaging/hooks/useTextareaAutocomplete.ts @@ -441,7 +441,7 @@ export function useTextareaAutocomplete({ ); const canManageUser = useCallback( (otherUserId: string, permission: bigint) => { - if (!channel || !channel.guildId) return false; + if (!channel?.guildId) return false; const currentUserId = Authentication.currentUserId; if (otherUserId === currentUserId) return false; const guild = Guilds.getGuild(channel.guildId); @@ -452,7 +452,7 @@ export function useTextareaAutocomplete({ ); const canViewChannel = useCallback( (userId: string): boolean => { - if (!channel || !channel.guildId) { + if (!channel?.guildId) { return true; } return PermissionUtils.can(Permissions.VIEW_CHANNEL, userId as UserId, channel.toJSON()); @@ -491,7 +491,7 @@ export function useTextareaAutocomplete({ } case 'mention': { setAutocompleteType('mention'); - if (!channel || !channel.guildId) { + if (!channel?.guildId) { if (!channel) { setAutocompleteOptions([]); return; diff --git a/fluxer_app/src/features/messaging/state/MessageEdit.ts b/fluxer_app/src/features/messaging/state/MessageEdit.ts index f4bbf587c..082022194 100644 --- a/fluxer_app/src/features/messaging/state/MessageEdit.ts +++ b/fluxer_app/src/features/messaging/state/MessageEdit.ts @@ -2,7 +2,7 @@ import TextareaSelection from '@app/features/messaging/state/TextareaSelection'; import AppStorage from '@app/features/platform/state/PersistentStorage'; -import {comparer, makeAutoObservable, reaction} from 'mobx'; +import {compareStructural, makeAutoObservable, reaction} from 'mobx'; const MESSAGE_EDIT_STORAGE_KEY = 'MessageEdit'; @@ -83,7 +83,7 @@ class MessageEdit { return reaction( () => Object.entries(this.editingMessageIds), () => callback(), - {fireImmediately: true, equals: comparer.structural}, + {fireImmediately: true, equals: compareStructural}, ); } } diff --git a/fluxer_app/src/features/messaging/state/MessageQueue.tsx b/fluxer_app/src/features/messaging/state/MessageQueue.tsx index fa3fd6776..9ea42533e 100644 --- a/fluxer_app/src/features/messaging/state/MessageQueue.tsx +++ b/fluxer_app/src/features/messaging/state/MessageQueue.tsx @@ -602,7 +602,7 @@ export class MessageQueue extends Queue { const entry = this.textareaAttachmentUploads.get(attachmentId); - if (!entry || !entry.settled) { + if (!entry?.settled) { return; } if (Date.now() - entry.startedAt >= TEXTAREA_ATTACHMENT_UPLOAD_CACHE_TTL_MS) { @@ -980,7 +980,7 @@ export class MessageQueue extends Queue = []; @@ -61,7 +61,6 @@ class Drafts { await makePersistent(this, 'Drafts', ['drafts', 'draftSegments']); } - @action createDraft(channelId: string, content: string, segments?: ReadonlyArray | null): void { if (!content) { this.deleteDraft(channelId); @@ -80,7 +79,6 @@ class Drafts { } } - @action deleteDraft(channelId: string): void { if (!(channelId in this.drafts) && !(channelId in this.draftSegments)) { return; @@ -90,7 +88,6 @@ class Drafts { TextareaSelection.clearChannelSelection(channelId); } - @action deleteChannelDraft(channelId: string): void { this.deleteDraft(channelId); } @@ -103,7 +100,6 @@ class Drafts { return this.draftSegments[channelId] ?? EMPTY_SEGMENTS; } - @action cleanupEmptyDrafts(): void { for (const channelId of Object.keys(this.drafts)) { const content = this.drafts[channelId]; diff --git a/fluxer_app/src/features/messaging/state/MessagingMessages.ts b/fluxer_app/src/features/messaging/state/MessagingMessages.ts index ca669329b..630c71138 100644 --- a/fluxer_app/src/features/messaging/state/MessagingMessages.ts +++ b/fluxer_app/src/features/messaging/state/MessagingMessages.ts @@ -21,7 +21,7 @@ import {MAX_MESSAGES_PER_CHANNEL} from '@fluxer/constants/src/LimitConstants'; import type {ChannelId} from '@fluxer/schema/src/branded/WireIds'; import type {GuildMemberData} from '@fluxer/schema/src/domains/guild/GuildMemberSchemas'; import type {Message as WireMessage} from '@fluxer/schema/src/domains/message/MessageResponseSchemas'; -import {action, makeAutoObservable, reaction} from 'mobx'; +import {makeAutoObservable, reaction} from 'mobx'; const STALE_WINDOW_REFETCH_INTERVAL_MS = 10_000; const staleWindowRefetchedAt = new Map(); @@ -69,7 +69,6 @@ class Messages { return this.updateCounter; } - @action private notifyChange(): void { this.updateCounter += 1; } @@ -217,7 +216,6 @@ class Messages { return messages.length === 0 ? !messages.ready : messages.cached; } - @action preloadLatestPage(channelId: string, guildId?: string | null): boolean { if (!this.shouldPreloadLatestPage(channelId)) { return false; @@ -248,7 +246,6 @@ class Messages { return channel?.hasNewestMessages() ?? false; } - @action setPendingJumpDispatch(channelId: string, dispatch: PendingJumpDispatch): void { this.pendingJumpDispatches.set(channelId, dispatch); } @@ -260,7 +257,6 @@ class Messages { return dispatch.messageId === messageId ? dispatch : null; } - @action handleConnectionClosed(): boolean { let didUpdate = false; ChannelMessages.forEach((messages) => { @@ -275,7 +271,6 @@ class Messages { return false; } - @action handleSessionInvalidated(): boolean { const channelIds: Array = []; ChannelMessages.forEach((messages) => channelIds.push(messages.channelId)); @@ -291,7 +286,6 @@ class Messages { return true; } - @action handleGatewayReady(): boolean { const selectedChannelId = SelectedChannel.currentChannelId; let didHydrateSelectedChannel = false; @@ -340,7 +334,6 @@ class Messages { MessageCommands.fetchMessages(channelId, null, null, MAX_MESSAGES_PER_CHANNEL); } - @action handleChannelSelect(action: {guildId?: string; channelId?: string | null; messageId?: string}): boolean { const channelId = action.channelId ?? action.guildId; if (channelId == null || channelId === ME) { @@ -388,7 +381,6 @@ class Messages { return false; } - @action handleGuildUnavailable(guildId: string, unavailable: boolean): boolean { if (!unavailable) { return false; @@ -416,7 +408,6 @@ class Messages { return didUpdate; } - @action handleGuildCreate(action: { guild: { id: string; @@ -444,7 +435,6 @@ class Messages { return didChannelSelect; } - @action handleLoadMessages(action: {channelId: string; jump?: JumpOptions}): boolean { const messages = ChannelMessages.getOrCreate(action.channelId); this.commitMessages(messages.beginLoad(action.jump)); @@ -452,7 +442,6 @@ class Messages { return false; } - @action handleTruncateMessages(action: {channelId: string; trimNewest?: boolean; trimOldest?: boolean}): boolean { const messages = ChannelMessages.getOrCreate(action.channelId).trimToWindow( action.trimNewest ?? false, @@ -463,7 +452,6 @@ class Messages { return false; } - @action handleLoadMessagesSuccessCached(action: { channelId: string; jump?: JumpOptions; @@ -492,7 +480,6 @@ class Messages { return false; } - @action handleLoadMessagesSuccess(action: { channelId: string; isBefore?: boolean; @@ -531,7 +518,6 @@ class Messages { MessageCommands.fetchMessages(channelId, null, null, MAX_MESSAGES_PER_CHANNEL, jump, {staleRefetch: true}); } - @action handleLoadMessagesFailure(action: {channelId: string}): boolean { const messages = ChannelMessages.getOrCreate(action.channelId); this.commitMessages(messages.withPatch({loadingMore: false, error: true})); @@ -539,7 +525,6 @@ class Messages { return false; } - @action handleLoadMessagesBlocked(action: {channelId: string}): boolean { const messages = ChannelMessages.getOrCreate(action.channelId); if (!messages.loadingMore && !messages.error) { @@ -550,7 +535,6 @@ class Messages { return true; } - @action handleIncomingMessage(action: {channelId: string; message: WireMessage}): boolean { Channels.handleMessageCreate({message: action.message}); const existing = ChannelMessages.get(action.channelId); @@ -563,30 +547,27 @@ class Messages { return false; } - @action handleSendFailed(action: {channelId: string; nonce: string}): boolean { const existing = ChannelMessages.get(action.channelId); - if (!existing || !existing.has(action.nonce)) return false; + if (!existing?.has(action.nonce)) return false; const updated = existing.update(action.nonce, (message) => message.withUpdates({state: MessageStates.FAILED})); this.commitMessages(updated); this.notifyChange(); return true; } - @action handleSendRetry(action: {channelId: string; messageId: string}): boolean { const existing = ChannelMessages.get(action.channelId); - if (!existing || !existing.has(action.messageId)) return false; + if (!existing?.has(action.messageId)) return false; const updated = existing.update(action.messageId, (message) => message.withUpdates({state: MessageStates.SENDING})); this.commitMessages(updated); this.notifyChange(); return true; } - @action handleMessageDelete(action: {id: string; channelId: string}): boolean { const existing = ChannelMessages.get(action.channelId); - if (!existing || !existing.has(action.id)) { + if (!existing?.has(action.id)) { return false; } let messages = existing; @@ -600,7 +581,6 @@ class Messages { return true; } - @action handleMessageDeleteBulk(action: {ids: Array; channelId: string}): boolean { const existing = ChannelMessages.get(action.channelId); if (!existing) return false; @@ -615,12 +595,11 @@ class Messages { return true; } - @action handleMessageUpdate(action: {message: WireMessage}): boolean { const messageId = action.message.id; const channelId = action.message.channel_id; const existing = ChannelMessages.get(channelId); - if (!existing || !existing.has(messageId)) return false; + if (!existing?.has(messageId)) return false; const updated = existing.update(messageId, (message) => { if (message.isEditing && action.message.state === undefined) { return message.withUpdates({...action.message, state: MessageStates.SENT}); @@ -632,7 +611,6 @@ class Messages { return true; } - @action handleUserUpdate(action: { user: { id: string; @@ -649,7 +627,6 @@ class Messages { return hasChanges; } - @action handleGuildMemberUpdate(action: GuildMemberUpdateAction): boolean { const userId = action.member.user.id; const updatedAuthor = Users.getUser(userId); @@ -664,7 +641,6 @@ class Messages { return hasChanges; } - @action handlePresenceUpdate(action: PresenceUpdateAction): boolean { if (!action.presence.user.username && !action.presence.user.avatar && !action.presence.user.discriminator) { return false; @@ -684,7 +660,6 @@ class Messages { return hasChanges; } - @action handleCleanup(): boolean { ChannelMessages.forEach(({channelId}) => { if (Channels.getChannel(channelId) == null) { @@ -696,7 +671,6 @@ class Messages { return false; } - @action handleRelationshipUpdate(): boolean { let hasChanges = false; ChannelMessages.forEach((messages) => { @@ -713,7 +687,6 @@ class Messages { return false; } - @action handleMessageReveal(action: {channelId: string; messageId: string | null}): boolean { const messages = ChannelMessages.getOrCreate(action.channelId); this.commitMessages(messages.withPatch({unblurredMessageId: action.messageId})); @@ -721,7 +694,6 @@ class Messages { return true; } - @action handleClearJumpTarget(action: {channelId: string; clearReturnTarget?: boolean}): boolean { const messages = ChannelMessages.get(action.channelId); if ( @@ -737,7 +709,6 @@ class Messages { return false; } - @action handleReaction(action: { type: 'MESSAGE_REACTION_ADD' | 'MESSAGE_REACTION_REMOVE'; channelId: string; @@ -765,7 +736,6 @@ class Messages { return true; } - @action handleRemoveAllReactions(action: {channelId: string; messageId: string}): boolean { const existing = ChannelMessages.get(action.channelId); if (!existing) return false; @@ -775,7 +745,6 @@ class Messages { return true; } - @action handleRemoveReactionEmoji(action: {channelId: string; messageId: string; emoji: ReactionEmoji}): boolean { const existing = ChannelMessages.get(action.channelId); if (!existing) return false; @@ -785,7 +754,6 @@ class Messages { return true; } - @action handleMessagePreload(action: {messages: Record}): boolean { let hasChanges = false; for (const [channelId, messageData] of Object.entries(action.messages)) { @@ -803,7 +771,6 @@ class Messages { return hasChanges; } - @action handleOptimisticEdit(action: {channelId: string; messageId: string; content: string}): { originalContent: string; originalEditedTimestamp: string | null; @@ -828,7 +795,6 @@ class Messages { return rollbackData; } - @action handleEditRollback(action: { channelId: string; messageId: string; @@ -837,7 +803,7 @@ class Messages { }): void { const {channelId, messageId, originalContent, originalEditedTimestamp} = action; const existing = ChannelMessages.get(channelId); - if (!existing || !existing.has(messageId)) return; + if (!existing?.has(messageId)) return; const updated = existing.update(messageId, (msg) => msg.withUpdates({ content: originalContent, diff --git a/fluxer_app/src/features/messaging/state/ReactionStateMachine.bench.ts b/fluxer_app/src/features/messaging/state/ReactionStateMachine.bench.ts index a11cb7c62..5143e6d38 100644 --- a/fluxer_app/src/features/messaging/state/ReactionStateMachine.bench.ts +++ b/fluxer_app/src/features/messaging/state/ReactionStateMachine.bench.ts @@ -7,15 +7,15 @@ import { transitionReactionSnapshot, } from '@app/features/messaging/state/ReactionStateMachine'; import type {ReactionEmoji} from '@app/features/messaging/utils/ReactionUtils'; -import {bench, describe} from 'vitest'; +import {test} from 'vitest'; const EMOJIS: Array = Array.from({length: 32}, (_value, index) => ({ id: index % 3 === 0 ? `emoji-${index}` : undefined, name: index % 3 === 0 ? `custom_${index}` : ['🔥', '❤️', '👍', '🎉'][index % 4], })); -describe('ReactionStateMachine benchmarks', () => { - bench('apply 1k reaction add/remove transitions for visible messages', () => { +test('ReactionStateMachine benchmarks', async ({bench}) => { + await bench('apply 1k reaction add/remove transitions for visible messages', () => { let snapshot = createReactionMachineSnapshot(emptyMap(), 'me'); for (let index = 0; index < 1_000; index += 1) { const emoji = EMOJIS[index % EMOJIS.length]; @@ -36,9 +36,9 @@ describe('ReactionStateMachine benchmarks', () => { } } mapToReactions(snapshot.context.map); - }); + }).run(); - bench('hydrate 500-message reaction payload shape', () => { + await bench('hydrate 500-message reaction payload shape', () => { let snapshot = createReactionMachineSnapshot(emptyMap(), 'me'); for (let index = 0; index < 500; index += 1) { snapshot = transitionReactionSnapshot(snapshot, { @@ -52,5 +52,5 @@ describe('ReactionStateMachine benchmarks', () => { }); } mapToReactions(snapshot.context.map); - }); + }).run(); }); diff --git a/fluxer_app/src/features/messaging/utils/MessagePaginationUtils.bench.ts b/fluxer_app/src/features/messaging/utils/MessagePaginationUtils.bench.ts index 98863f443..7f119b746 100644 --- a/fluxer_app/src/features/messaging/utils/MessagePaginationUtils.bench.ts +++ b/fluxer_app/src/features/messaging/utils/MessagePaginationUtils.bench.ts @@ -4,7 +4,7 @@ import { calculateAroundPaginationState, getAroundWindowCounts, } from '@app/features/messaging/utils/MessagePaginationUtils'; -import {bench, describe} from 'vitest'; +import {test} from 'vitest'; const PAGINATION_INPUTS = Array.from({length: 100_000}, (_value, index) => ({ limit: 50 + (index % 25), @@ -14,19 +14,19 @@ const PAGINATION_INPUTS = Array.from({length: 100_000}, (_value, index) => ({ knownLatestMessageId: 'latest', })); -describe('MessagePaginationUtils benchmarks', () => { - bench('calculate 100k around pagination states', () => { +test('MessagePaginationUtils benchmarks', async ({bench}) => { + await bench('calculate 100k around pagination states', () => { for (const input of PAGINATION_INPUTS) { calculateAroundPaginationState(input); } - }); + }).run(); - bench('calculate 100k around window counts', () => { + await bench('calculate 100k around window counts', () => { let total = 0; for (let index = 0; index < 100_000; index += 1) { const {newer, older} = getAroundWindowCounts(index % 100); total += newer + older; } (globalThis as {__messagePaginationBenchSink?: number}).__messagePaginationBenchSink = total; - }); + }).run(); }); diff --git a/fluxer_app/src/features/navigation/state/Navigation.ts b/fluxer_app/src/features/navigation/state/Navigation.ts index 98becc0a5..91a35b39b 100644 --- a/fluxer_app/src/features/navigation/state/Navigation.ts +++ b/fluxer_app/src/features/navigation/state/Navigation.ts @@ -5,7 +5,7 @@ import * as RouterUtils from '@app/features/navigation/utils/RouterUtils'; import type {Router} from '@app/features/platform/components/router/RouterTypes'; import {Logger} from '@app/features/platform/utils/AppLogger'; import {ME} from '@fluxer/constants/src/AppConstants'; -import {action, makeAutoObservable} from 'mobx'; +import {makeAutoObservable} from 'mobx'; type NavigationMode = 'push' | 'replace'; @@ -23,7 +23,6 @@ class Navigation { makeAutoObservable(this, {}, {autoBind: true}); } - @action initialize(router: Router): void { this.router = router; this.updateFromRouter(); @@ -32,7 +31,6 @@ class Navigation { }); } - @action private updateFromRouter(): void { if (!this.router) return; const state = this.router.getState(); diff --git a/fluxer_app/src/features/navigation/state/SelectedChannel.ts b/fluxer_app/src/features/navigation/state/SelectedChannel.ts index 67e7dcd4e..6bae9e0bc 100644 --- a/fluxer_app/src/features/navigation/state/SelectedChannel.ts +++ b/fluxer_app/src/features/navigation/state/SelectedChannel.ts @@ -7,7 +7,7 @@ import {makePersistent} from '@app/features/platform/utils/MobXPersistence'; import {FAVORITES_GUILD_ID, ME} from '@fluxer/constants/src/AppConstants'; import {ChannelTypes} from '@fluxer/constants/src/ChannelConstants'; import type {Channel} from '@fluxer/schema/src/domains/channel/ChannelSchemas'; -import {action, computed, makeAutoObservable, reaction} from 'mobx'; +import {computed, makeAutoObservable, reaction} from 'mobx'; interface ChannelVisit { channelId: string; @@ -44,7 +44,6 @@ class SelectedChannel { void this.initPersistence(); } - @action private async initPersistence(): Promise { await makePersistent(this, 'SelectedChannel', ['selectedChannelIds', 'recentlyVisitedChannels']); this.migrateRecentVisits(); @@ -89,7 +88,6 @@ class SelectedChannel { return this.selectedChannelIds.get(guildId) ?? null; } - @action private migrateRecentVisits(): void { let needsMigration = false; for (let i = 0; i < this.recentlyVisitedChannels.length; i++) { @@ -126,7 +124,6 @@ class SelectedChannel { return result; } - @action selectChannel(guildId?: string, channelId?: string | null): void { const normalizedGuildId = this.normalizeGuildId(guildId ?? null); if (!normalizedGuildId) return; @@ -186,7 +183,6 @@ class SelectedChannel { this.viewedChannelHistoryIndex = this.viewedChannelHistory.length - 1; } - @action navigateViewedChannelHistory(direction: -1 | 1): boolean { let nextIndex = this.viewedChannelHistoryIndex + direction; let target = this.viewedChannelHistory[nextIndex]; @@ -213,7 +209,6 @@ class SelectedChannel { return true; } - @action deselectChannel(): void { const guildId = this.getCurrentGuildId(); if (guildId != null) { @@ -221,14 +216,12 @@ class SelectedChannel { } } - @action clearGuildSelection(guildId: string): void { const normalizedGuildId = this.normalizeGuildId(guildId); if (!normalizedGuildId) return; this.removeGuildSelection(normalizedGuildId); } - @action getNavigableSelectedChannelId(guildId: string): string | null { const normalizedGuildId = this.normalizeGuildId(guildId); if (!normalizedGuildId) return null; @@ -241,7 +234,6 @@ class SelectedChannel { return null; } - @action handleChannelDelete(channel: Channel): void { const guildId = channel.guild_id ?? ME; const normalizedGuildId = this.normalizeGuildId(guildId) ?? guildId; @@ -251,12 +243,10 @@ class SelectedChannel { } } - @action private removeGuildSelection(guildId: string): void { this.selectedChannelIds.delete(guildId); } - @action getValidatedFavoritesChannel(): string | null { const selectedChannelId = this.getNavigableSelectedChannelId(FAVORITES_GUILD_ID); if (selectedChannelId && Favorites.isChannelAccessible(selectedChannelId)) { diff --git a/fluxer_app/src/features/navigation/state/SelectedGuild.ts b/fluxer_app/src/features/navigation/state/SelectedGuild.ts index fe5a2932c..69f8ab953 100644 --- a/fluxer_app/src/features/navigation/state/SelectedGuild.ts +++ b/fluxer_app/src/features/navigation/state/SelectedGuild.ts @@ -3,7 +3,7 @@ import Navigation from '@app/features/navigation/state/Navigation'; import {makePersistent} from '@app/features/platform/utils/MobXPersistence'; import {ME} from '@fluxer/constants/src/AppConstants'; -import {action, makeAutoObservable, reaction} from 'mobx'; +import {makeAutoObservable, reaction} from 'mobx'; const FAVORITES_ROUTE_ID = '@favorites'; @@ -18,7 +18,6 @@ class SelectedGuild { void this.initPersistence(); } - @action private async initPersistence(): Promise { await makePersistent(this, 'SelectedGuild', ['lastSelectedGuildId']); this.setupNavigationReaction(); @@ -49,7 +48,6 @@ class SelectedGuild { return guildId; } - @action selectGuild(guildId: string, _forceSync = false): void { if (!guildId) { return; @@ -57,12 +55,10 @@ class SelectedGuild { this.setGuild(guildId, {forceNonce: true}); } - @action syncCurrentGuild(): void { this.bumpNonce(); } - @action deselectGuild(): void { this.clearSelection(); } diff --git a/fluxer_app/src/features/navigation/utils/DeepLinkUtils.ts b/fluxer_app/src/features/navigation/utils/DeepLinkUtils.ts index b421353d2..6bfa5504f 100644 --- a/fluxer_app/src/features/navigation/utils/DeepLinkUtils.ts +++ b/fluxer_app/src/features/navigation/utils/DeepLinkUtils.ts @@ -333,7 +333,7 @@ export function parseChannelJumpLink(url: string): ChannelJumpLink | null { export function parseMessageJumpLink(url: string): MessageJumpLink | null { const segments = getChannelSegments(url); - if (!segments || segments.length !== 4) return null; + if (segments?.length !== 4) return null; const [, scope, channelId, messageId] = segments; if (!messageId || !isProbablyAValidSnowflake(messageId)) { return null; diff --git a/fluxer_app/src/features/notification/state/NotificationAutoAck.ts b/fluxer_app/src/features/notification/state/NotificationAutoAck.ts index 969d9a8a3..372ea4362 100644 --- a/fluxer_app/src/features/notification/state/NotificationAutoAck.ts +++ b/fluxer_app/src/features/notification/state/NotificationAutoAck.ts @@ -18,7 +18,7 @@ import CompactVoiceCallHeight, {getGuildVoiceCallExpansionKey} from '@app/featur import VoiceCallFullscreen from '@app/features/voice/state/VoiceCallFullscreen'; import Window from '@app/features/window/state/Window'; import {ChannelTypes} from '@fluxer/constants/src/ChannelConstants'; -import {action, makeAutoObservable, reaction} from 'mobx'; +import {makeAutoObservable, reaction} from 'mobx'; const logger = new Logger('AutoAck'); @@ -77,7 +77,6 @@ class AutoAck { }); } - @action private updateAutoAckState(conditions: { windowId: string; channelId: string | null; @@ -103,7 +102,6 @@ class AutoAck { } } - @action private enableAutomaticAckInternal(channelId: string, windowId: string): void { const channel = Channels.getChannel(channelId); if (channel == null) { @@ -121,7 +119,6 @@ class AutoAck { } } - @action private disableAutomaticAckInternal(channelId: string, windowId: string): void { const channels = this.windowChannels.get(windowId); if (channels == null) return; @@ -141,7 +138,6 @@ class AutoAck { return false; } - @action disableForChannel(channelId: string): void { for (const [windowId, channels] of this.windowChannels.entries()) { if (channels.has(channelId)) { diff --git a/fluxer_app/src/features/platform/state/AuthSession.ts b/fluxer_app/src/features/platform/state/AuthSession.ts index 932edc331..1ebd21a6c 100644 --- a/fluxer_app/src/features/platform/state/AuthSession.ts +++ b/fluxer_app/src/features/platform/state/AuthSession.ts @@ -30,7 +30,7 @@ import AppStorage from '@app/features/platform/state/PersistentStorage'; import {http} from '@app/features/platform/transport/RestTransport'; import {Logger} from '@app/features/platform/utils/AppLogger'; import LocalPresence from '@app/features/presence/state/LocalPresence'; -import {action, makeAutoObservable} from 'mobx'; +import {actionBound, makeAutoObservable} from 'mobx'; export {type Account, SessionState}; @@ -149,10 +149,10 @@ export class AuthSessionManager { makeAutoObservable( this, { - send: action.bound, - setToken: action.bound, - setUserId: action.bound, - setError: action.bound, + send: actionBound, + setToken: actionBound, + setUserId: actionBound, + setError: actionBound, }, {autoBind: true}, ); diff --git a/fluxer_app/src/features/platform/utils/ScrollPosition.bench.ts b/fluxer_app/src/features/platform/utils/ScrollPosition.bench.ts index 7c0b8f051..8fd4c74da 100644 --- a/fluxer_app/src/features/platform/utils/ScrollPosition.bench.ts +++ b/fluxer_app/src/features/platform/utils/ScrollPosition.bench.ts @@ -1,7 +1,7 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import {evaluateScrollPinning} from '@app/features/platform/utils/ScrollPosition'; -import {bench, describe} from 'vitest'; +import {test} from 'vitest'; const SCROLL_METRICS = Array.from({length: 100_000}, (_value, index) => ({ scrollTop: (index * 37) % 200_000, @@ -9,8 +9,8 @@ const SCROLL_METRICS = Array.from({length: 100_000}, (_value, index) => ({ offsetHeight: 800 + (index % 200), })); -describe('ScrollPosition benchmarks', () => { - bench('evaluate 100k message-list scroll pinning states', () => { +test('ScrollPosition benchmarks', async ({bench}) => { + await bench('evaluate 100k message-list scroll pinning states', () => { let pinned = 0; for (let index = 0; index < SCROLL_METRICS.length; index += 1) { if ( @@ -23,5 +23,5 @@ describe('ScrollPosition benchmarks', () => { } } (globalThis as {__scrollPositionBenchSink?: number}).__scrollPositionBenchSink = pinned; - }); + }).run(); }); diff --git a/fluxer_app/src/features/presence/state/Presence.ts b/fluxer_app/src/features/presence/state/Presence.ts index ad536d083..f7658c219 100644 --- a/fluxer_app/src/features/presence/state/Presence.ts +++ b/fluxer_app/src/features/presence/state/Presence.ts @@ -21,7 +21,7 @@ import type {StatusType} from '@fluxer/constants/src/StatusConstants'; import {normalizeStatus, StatusTypes} from '@fluxer/constants/src/StatusConstants'; import {RelationshipTypes} from '@fluxer/constants/src/UserConstants'; import type {UserPrivate} from '@fluxer/schema/src/domains/user/UserResponseSchemas'; -import {makeAutoObservable, observable, reaction} from 'mobx'; +import {makeAutoObservable, observable, observableShallow, reaction} from 'mobx'; interface FlattenedPresence { status: StatusType; @@ -61,7 +61,7 @@ class Presence { presences: false, remotePresenceCountsByGuild: false, remotePresenceCountVersionByGuild: false, - mobilePresenceUserIds: observable.shallow, + mobilePresenceUserIds: observableShallow, suppressVersionBump: false, }, {autoBind: true}, diff --git a/fluxer_app/src/features/read_state/state/read_states/ReadStateEntryStatusMachine.bench.ts b/fluxer_app/src/features/read_state/state/read_states/ReadStateEntryStatusMachine.bench.ts index 99b6eb372..809b2965b 100644 --- a/fluxer_app/src/features/read_state/state/read_states/ReadStateEntryStatusMachine.bench.ts +++ b/fluxer_app/src/features/read_state/state/read_states/ReadStateEntryStatusMachine.bench.ts @@ -5,7 +5,7 @@ import { resolveReadStateEntryStatus, } from '@app/features/read_state/state/read_states/ReadStateEntryStatusMachine'; import {fromTimestamp} from '@fluxer/snowflake/src/SnowflakeUtils'; -import {bench, describe} from 'vitest'; +import {test} from 'vitest'; const BASE_TIMESTAMP = Date.UTC(2024, 0, 1); const ACK_ID = fromTimestamp(BASE_TIMESTAMP + 1_000); @@ -79,8 +79,8 @@ const INPUTS = Object.freeze( }), ); -describe('ReadStateEntryStatusMachine benchmarks', () => { - bench('resolves 100k mixed read-state entry statuses', () => { +test('ReadStateEntryStatusMachine benchmarks', async ({bench}) => { + await bench('resolves 100k mixed read-state entry statuses', () => { let unreadOrMentionCount = 0; for (const input of INPUTS) { if (resolveReadStateEntryStatus(input).isUnreadOrMentioned) { @@ -88,5 +88,5 @@ describe('ReadStateEntryStatusMachine benchmarks', () => { } } (globalThis as {__readStateEntryStatusBenchSink?: number}).__readStateEntryStatusBenchSink = unreadOrMentionCount; - }); + }).run(); }); diff --git a/fluxer_app/src/features/search/state/QuickSwitcher.tsx b/fluxer_app/src/features/search/state/QuickSwitcher.tsx index f049985d0..ebe613985 100644 --- a/fluxer_app/src/features/search/state/QuickSwitcher.tsx +++ b/fluxer_app/src/features/search/state/QuickSwitcher.tsx @@ -34,7 +34,7 @@ import MobileLayout from '@app/features/ui/state/MobileLayout'; import {QuickSwitcherResultTypes} from '@fluxer/constants/src/QuickSwitcherConstants'; import type {I18n} from '@lingui/core'; import {msg} from '@lingui/core/macro'; -import {action, makeAutoObservable, runInAction} from 'mobx'; +import {makeAutoObservable, runInAction} from 'mobx'; const GO_TO_MESSAGE_DESCRIPTOR = msg({ message: 'Go to message', @@ -157,7 +157,6 @@ class QuickSwitcher { return this.selectedIndex; } - @action show(): void { if (this.isOpen) return; this.cancelCandidateWarmup(); @@ -215,7 +214,6 @@ class QuickSwitcher { ); } - @action hide(): void { if (!this.isOpen) { return; @@ -291,7 +289,6 @@ class QuickSwitcher { return () => clearTimeout(handle); } - @action search(query: string): void { if (!this.isOpen && query.length === 0) { return; @@ -372,7 +369,6 @@ class QuickSwitcher { }, 300); } - @action select(selectedIndex: number): void { if (!this.isOpen) { return; diff --git a/fluxer_app/src/features/search/state/SearchHistory.ts b/fluxer_app/src/features/search/state/SearchHistory.ts index 407e174f7..1db1b2b7f 100644 --- a/fluxer_app/src/features/search/state/SearchHistory.ts +++ b/fluxer_app/src/features/search/state/SearchHistory.ts @@ -2,7 +2,7 @@ import {makePersistent} from '@app/features/platform/utils/MobXPersistence'; import type {SearchHints} from '@app/features/search/utils/SearchQueryParser'; -import {action, makeAutoObservable} from 'mobx'; +import {makeAutoObservable} from 'mobx'; export const SEARCH_HISTORY_LIMIT = 10; export const SEARCH_HISTORY_DISPLAY_LIMIT = 5; @@ -37,7 +37,6 @@ class SearchHistory { return entries.filter((e) => e.query.toLowerCase().includes(t)); } - @action add(query: string, channelId?: string, hints?: SearchHints): void { if (!channelId) return; const q = query.trim(); @@ -58,7 +57,6 @@ class SearchHistory { } } - @action adoptLegacyEntries(targetKey: string | undefined, legacyKeys: ReadonlyArray): void { if (!targetKey) return; if (this.getEntries(targetKey).length > 0) return; @@ -83,13 +81,11 @@ class SearchHistory { this.entriesByChannel[targetKey] = adopted; } - @action clear(channelId?: string): void { if (!channelId) return; delete this.entriesByChannel[channelId]; } - @action clearAll(): void { this.entriesByChannel = {}; } diff --git a/fluxer_app/src/features/theme/state/Theme.ts b/fluxer_app/src/features/theme/state/Theme.ts index 099800d81..d531f59d3 100644 --- a/fluxer_app/src/features/theme/state/Theme.ts +++ b/fluxer_app/src/features/theme/state/Theme.ts @@ -155,7 +155,7 @@ class Theme { private initLinuxPortalThemeDetection(): void { const electronApi = getElectronAPI(); - if (!electronApi || electronApi.platform !== 'linux') { + if (electronApi?.platform !== 'linux') { return; } if (!electronApi.getLinuxAppearance || !electronApi.onLinuxAppearanceChanged) { diff --git a/fluxer_app/src/features/ui/action_menu/UserContextMenu.tsx b/fluxer_app/src/features/ui/action_menu/UserContextMenu.tsx index 76c626d75..df1a8f023 100644 --- a/fluxer_app/src/features/ui/action_menu/UserContextMenu.tsx +++ b/fluxer_app/src/features/ui/action_menu/UserContextMenu.tsx @@ -348,7 +348,7 @@ export const UserContextMenu: React.FC = observer( ); }, [channel, onClose, user.id, userDisplayName, i18n]); const handleCloseDM = useCallback(() => { - if (!channel || !channel.isDM()) return; + if (!channel?.isDM()) return; onClose(); const displayName = dmPartner ? NicknameUtils.getNickname(dmPartner) : NicknameUtils.getNickname(user); ModalCommands.push( diff --git a/fluxer_app/src/features/ui/hooks/useTextInputContextMenu.tsx b/fluxer_app/src/features/ui/hooks/useTextInputContextMenu.tsx index fa77bed8c..af7ff412b 100644 --- a/fluxer_app/src/features/ui/hooks/useTextInputContextMenu.tsx +++ b/fluxer_app/src/features/ui/hooks/useTextInputContextMenu.tsx @@ -172,7 +172,7 @@ export const useTextInputContextMenu = () => { useEffect(() => { if (!nativeShim) return; const electronAPI = getElectronAPI(); - if (!electronAPI || !electronAPI.onTextareaContextMenu) return; + if (!electronAPI?.onTextareaContextMenu) return; let recentTarget: RecentContextMenuTarget | null = null; const onContextMenuCapture = (event: MouseEvent) => { const editable = getEditableTarget(event.target as Element | null); diff --git a/fluxer_app/src/features/ui/popover/PopoverFocusManagerUtils.ts b/fluxer_app/src/features/ui/popover/PopoverFocusManagerUtils.ts index e2e17df7c..2e630a1cf 100644 --- a/fluxer_app/src/features/ui/popover/PopoverFocusManagerUtils.ts +++ b/fluxer_app/src/features/ui/popover/PopoverFocusManagerUtils.ts @@ -8,7 +8,7 @@ export function getPopoutFocusManagerInsideElements( ): Array { const insideElements: Array = []; const addElement = (element: Element | null | undefined): void => { - if (!element || !element.isConnected || insideElements.includes(element)) { + if (!element?.isConnected || insideElements.includes(element)) { return; } insideElements.push(element); diff --git a/fluxer_app/src/features/ui/state/ContextMenu.ts b/fluxer_app/src/features/ui/state/ContextMenu.ts index dc7fbd7c4..bd0f18cb0 100644 --- a/fluxer_app/src/features/ui/state/ContextMenu.ts +++ b/fluxer_app/src/features/ui/state/ContextMenu.ts @@ -3,7 +3,7 @@ import {Logger} from '@app/features/platform/utils/AppLogger'; import KeyboardMode from '@app/features/ui/state/KeyboardMode'; import {shouldRestoreFocusToTarget} from '@app/features/ui/utils/PointerActivationFocus'; -import {makeAutoObservable, observable} from 'mobx'; +import {makeAutoObservable, observableRef} from 'mobx'; import type React from 'react'; const logger = new Logger('ContextMenu'); @@ -74,7 +74,7 @@ class ContextMenuState { private currentEntry: StackEntry | null = null; constructor() { - makeAutoObservable(this, {currentEntry: observable.ref}, {autoBind: true}); + makeAutoObservable(this, {currentEntry: observableRef}, {autoBind: true}); } get contextMenu(): ContextMenu | null { diff --git a/fluxer_app/src/features/ui/state/MediaViewer.ts b/fluxer_app/src/features/ui/state/MediaViewer.ts index e9585b6ec..2868ba67b 100644 --- a/fluxer_app/src/features/ui/state/MediaViewer.ts +++ b/fluxer_app/src/features/ui/state/MediaViewer.ts @@ -2,7 +2,7 @@ import type {Channel} from '@app/features/channel/models/Channel'; import type {Message} from '@app/features/messaging/models/MessagingMessage'; -import {makeAutoObservable, observable} from 'mobx'; +import {makeAutoObservable, observableRef} from 'mobx'; export type MediaViewerItem = Readonly<{ src: string; @@ -42,9 +42,9 @@ class MediaViewer { makeAutoObservable( this, { - items: observable.ref, - message: observable.ref, - sourceChannel: observable.ref, + items: observableRef, + message: observableRef, + sourceChannel: observableRef, }, {autoBind: true}, ); diff --git a/fluxer_app/src/features/ui/state/PiP.ts b/fluxer_app/src/features/ui/state/PiP.ts index 4013ef5c7..3193156b1 100644 --- a/fluxer_app/src/features/ui/state/PiP.ts +++ b/fluxer_app/src/features/ui/state/PiP.ts @@ -131,7 +131,7 @@ class PiP { } } -export {PIP_DEFAULT_WIDTH}; export type {PiPContent, PiPContentType, PiPCorner}; +export {PIP_DEFAULT_WIDTH}; export default new PiP(); diff --git a/fluxer_app/src/features/ui/state/Popout.ts b/fluxer_app/src/features/ui/state/Popout.ts index 873706033..baa9e64c7 100644 --- a/fluxer_app/src/features/ui/state/Popout.ts +++ b/fluxer_app/src/features/ui/state/Popout.ts @@ -310,7 +310,7 @@ class Popout { logger.debug( `Popout.scheduleFocus target=${meta?.target ? meta.target.tagName : 'null'} keyboardMode=${meta?.keyboardModeEnabled ?? false}`, ); - if (!meta || !meta.restoreFocus || !meta.target) return; + if (!meta?.restoreFocus || !meta.target) return; const {target, keyboardModeEnabled} = meta; queueMicrotask(() => { const hasHiddenAncestor = (element: HTMLElement): boolean => diff --git a/fluxer_app/src/features/ui/state/SettingsSidebar.ts b/fluxer_app/src/features/ui/state/SettingsSidebar.ts index 2ccfe400f..3ef04489b 100644 --- a/fluxer_app/src/features/ui/state/SettingsSidebar.ts +++ b/fluxer_app/src/features/ui/state/SettingsSidebar.ts @@ -1,6 +1,6 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import {makeAutoObservable, observable} from 'mobx'; +import {makeAutoObservable, observableRef} from 'mobx'; import type React from 'react'; class SettingsSidebar { @@ -10,7 +10,7 @@ class SettingsSidebar { dismissedOwnerId: string | null = null; constructor() { - makeAutoObservable(this, {overrideContent: observable.ref}, {autoBind: true}); + makeAutoObservable(this, {overrideContent: observableRef}, {autoBind: true}); } get hasOverride(): boolean { diff --git a/fluxer_app/src/features/ui/state/Toast.ts b/fluxer_app/src/features/ui/state/Toast.ts index 2505f372c..ec6999c92 100644 --- a/fluxer_app/src/features/ui/state/Toast.ts +++ b/fluxer_app/src/features/ui/state/Toast.ts @@ -2,7 +2,7 @@ import {Logger} from '@app/features/platform/utils/AppLogger'; import type {ToastProps} from '@app/features/ui/toast'; -import {makeAutoObservable, observable} from 'mobx'; +import {makeAutoObservable, observableRef} from 'mobx'; const logger = new Logger('Toast'); @@ -18,7 +18,7 @@ class Toast { makeAutoObservable( this, { - currentToast: observable.ref, + currentToast: observableRef, }, {autoBind: true}, ); diff --git a/fluxer_app/src/features/ui/tooltip/Tooltip.tsx b/fluxer_app/src/features/ui/tooltip/Tooltip.tsx index f1d04a67b..ee6544a00 100644 --- a/fluxer_app/src/features/ui/tooltip/Tooltip.tsx +++ b/fluxer_app/src/features/ui/tooltip/Tooltip.tsx @@ -643,7 +643,7 @@ export const Tooltip = observer( useEffect(() => { if (!openOnMountHover || !hasChild || mobileLayout.enabled || isDisabled) return; const target = targetRef.current; - if (!target || !target.matches(':hover')) return; + if (!target?.matches(':hover')) return; beginVisibilityDriver('hover'); }, [beginVisibilityDriver, hasChild, isDisabled, mobileLayout.enabled, openOnMountHover]); useEffect(() => { @@ -679,7 +679,7 @@ export const Tooltip = observer( let frameId: number | null = null; const verifyTargetHover = () => { const target = targetRef.current; - if (!target || !target.matches(':hover')) { + if (!target?.matches(':hover')) { endVisibilityDriver('hover'); frameId = null; return; diff --git a/fluxer_app/src/features/ui/utils/NativeUtils.ts b/fluxer_app/src/features/ui/utils/NativeUtils.ts index 7d5b3130b..b4e1d61c8 100644 --- a/fluxer_app/src/features/ui/utils/NativeUtils.ts +++ b/fluxer_app/src/features/ui/utils/NativeUtils.ts @@ -109,7 +109,7 @@ export async function getNativePlatform(): Promise { export async function isLinuxWaylandDesktopSession(): Promise { const electronApi = getElectronAPI(); - if (!electronApi || electronApi.platform !== 'linux') { + if (electronApi?.platform !== 'linux') { return false; } try { diff --git a/fluxer_app/src/features/user/components/modals/tabs/applications_tab/ApplicationsTabState.ts b/fluxer_app/src/features/user/components/modals/tabs/applications_tab/ApplicationsTabState.ts index a7c1164be..2eab9bcc3 100644 --- a/fluxer_app/src/features/user/components/modals/tabs/applications_tab/ApplicationsTabState.ts +++ b/fluxer_app/src/features/user/components/modals/tabs/applications_tab/ApplicationsTabState.ts @@ -5,7 +5,7 @@ import type {DeveloperApplicationWire} from '@app/features/devtools/models/Devel import {DeveloperApplication} from '@app/features/devtools/models/DeveloperApplication'; import {http} from '@app/features/platform/transport/RestTransport'; import {Logger} from '@app/features/platform/utils/AppLogger'; -import {action, makeAutoObservable, runInAction} from 'mobx'; +import {makeAutoObservable, runInAction} from 'mobx'; const logger = new Logger('ApplicationsTabState'); @@ -196,7 +196,6 @@ class ApplicationsTabState { } } - @action clearError(): void { this.error = null; if (this.navigationState === NavigationState.ERROR) { diff --git a/fluxer_app/src/features/user/state/SyncedField.ts b/fluxer_app/src/features/user/state/SyncedField.ts index 92bfa5d4d..f53944f2e 100644 --- a/fluxer_app/src/features/user/state/SyncedField.ts +++ b/fluxer_app/src/features/user/state/SyncedField.ts @@ -14,7 +14,7 @@ import { import type {SyncedPreferences, SyncedPreferencesField} from '@app/features/user/state/SyncedPreferencesEngine'; import {create, equals, type Message, type MessageInitShape, toBinary} from '@bufbuild/protobuf'; import type {GenMessage} from '@bufbuild/protobuf/codegenv2'; -import {comparer, reaction, runInAction} from 'mobx'; +import {compareShallow, reaction, runInAction} from 'mobx'; export {verifyRoundtripStability}; @@ -251,7 +251,7 @@ export async function makeSyncedField< snapshot, }); }, - {fireImmediately: true, equals: comparer.shallow}, + {fireImmediately: true, equals: compareShallow}, ); reaction( () => (isEnabled() ? buildMessageOrSuspend('failed to build the local snapshot for observation') : null), diff --git a/fluxer_app/src/features/user/state/UserSettings.ts b/fluxer_app/src/features/user/state/UserSettings.ts index ad6e64985..aa92f5afa 100644 --- a/fluxer_app/src/features/user/state/UserSettings.ts +++ b/fluxer_app/src/features/user/state/UserSettings.ts @@ -55,7 +55,7 @@ import camelCase from 'lodash/camelCase'; import isEqual from 'lodash/isEqual'; import isPlainObject from 'lodash/isPlainObject'; import snakeCase from 'lodash/snakeCase'; -import {action, makeAutoObservable, reaction, runInAction} from 'mobx'; +import {makeAutoObservable, reaction, runInAction} from 'mobx'; function restoreSettingValue(target: UserSettings, source: UserSettings, key: K): void { target[key] = source[key]; @@ -558,12 +558,10 @@ class UserSettingsState { return this.hydrated; } - @action markSessionChanging(): void { this.hydrated = false; } - @action handleAccountTransition(): void { this.accountEpoch += 1; this.hydrated = false; @@ -590,7 +588,6 @@ class UserSettingsState { } } - @action setStatus(status: StatusType): void { this.status = status; LocalPresence.updatePresence(); diff --git a/fluxer_app/src/features/user/state/Users.ts b/fluxer_app/src/features/user/state/Users.ts index 29a95e553..a2fed3689 100644 --- a/fluxer_app/src/features/user/state/Users.ts +++ b/fluxer_app/src/features/user/state/Users.ts @@ -3,7 +3,7 @@ import Authentication from '@app/features/auth/state/Authentication'; import {User} from '@app/features/user/models/User'; import type {UserPrivate, User as WireUser} from '@fluxer/schema/src/domains/user/UserResponseSchemas'; -import {action, makeAutoObservable, reaction, runInAction} from 'mobx'; +import {makeAutoObservable, reaction, runInAction} from 'mobx'; const CURRENT_USER_PRIVATE_WIRE_KEYS = [ 'is_staff', @@ -92,7 +92,6 @@ class Users { return this.usersList; } - @action handleGatewayReady(currentUser: UserPrivate): void { const userRecord = new User(currentUser); this.users = { @@ -107,7 +106,6 @@ class Users { } } - @action handleUserUpdate( user: WireUser, options?: { diff --git a/fluxer_app/src/features/voice/components/modals/MobileVideoViewer.module.css b/fluxer_app/src/features/voice/components/modals/MobileVideoViewer.module.css index 8c8721e6f..48b1f22ed 100644 --- a/fluxer_app/src/features/voice/components/modals/MobileVideoViewer.module.css +++ b/fluxer_app/src/features/voice/components/modals/MobileVideoViewer.module.css @@ -96,7 +96,6 @@ justify-content: center; width: 2.25rem; height: 2.25rem; - border: none; border-radius: 0.875rem; background-color: var(--mobile-video-hud-bg); border: 0.0625rem solid var(--mobile-video-hud-border); @@ -127,7 +126,6 @@ justify-content: center; width: 2.25rem; height: 2.25rem; - border: none; border-radius: 0.875rem; background-color: var(--mobile-video-hud-bg); border: 0.0625rem solid var(--mobile-video-hud-border); diff --git a/fluxer_app/src/features/voice/components/useStatsForNerds.ts b/fluxer_app/src/features/voice/components/useStatsForNerds.ts index 128c51804..17b5ccfe9 100644 --- a/fluxer_app/src/features/voice/components/useStatsForNerds.ts +++ b/fluxer_app/src/features/voice/components/useStatsForNerds.ts @@ -74,7 +74,7 @@ function formatTransportSummary(transport: VoiceEngineV2TransportInfo | null): s } export function formatResolution(track: VoiceEngineV2PerTrackStats | null): string { - if (!track || !track.frameWidth || !track.frameHeight) return 'n/a'; + if (!track?.frameWidth || !track.frameHeight) return 'n/a'; return `${track.frameWidth}x${track.frameHeight}`; } diff --git a/fluxer_app/src/features/voice/components/voice_participant_tile/hooks.ts b/fluxer_app/src/features/voice/components/voice_participant_tile/hooks.ts index 9074e8248..e80a3e326 100644 --- a/fluxer_app/src/features/voice/components/voice_participant_tile/hooks.ts +++ b/fluxer_app/src/features/voice/components/voice_participant_tile/hooks.ts @@ -166,7 +166,7 @@ export function useTileContextMenuActive(tileElRef: React.RefObject disposer(); }, [tileElRef]); diff --git a/fluxer_app/src/features/voice/engine/MediaEngineFacade.ts b/fluxer_app/src/features/voice/engine/MediaEngineFacade.ts index 0167961e6..58af475ab 100644 --- a/fluxer_app/src/features/voice/engine/MediaEngineFacade.ts +++ b/fluxer_app/src/features/voice/engine/MediaEngineFacade.ts @@ -181,7 +181,7 @@ import type { ScreenShareCaptureOptions, TrackPublishOptions, } from 'livekit-client'; -import {makeObservable, observable} from 'mobx'; +import {makeObservable, observableRef} from 'mobx'; const logger = new Logger('MediaEngineFacade'); @@ -403,7 +403,7 @@ class MediaEngineFacade extends Store { setNativeAudioCaptureBridgeLifecycleBridge(this.voiceEngineV2SourceLifecycleBridge); this.syncVoiceEngineV2AudioControlsFromAppState(); makeObservable(this, { - facadeSnapshot: observable.ref, + facadeSnapshot: observableRef, }); this.initializeEngineStoreSync(); this.initializeVoiceEngineV2ConnectionLifecycleSync(); diff --git a/fluxer_app/src/features/voice/engine/ScreenSharePublicationMigration.ts b/fluxer_app/src/features/voice/engine/ScreenSharePublicationMigration.ts index 2b00be0b4..1d19abeb9 100644 --- a/fluxer_app/src/features/voice/engine/ScreenSharePublicationMigration.ts +++ b/fluxer_app/src/features/voice/engine/ScreenSharePublicationMigration.ts @@ -199,7 +199,7 @@ export function parseScreenShareMigrationMessage(payload: Uint8Array): ScreenSha } } -export function encodeScreenShareMigrationMessage(message: ScreenShareMigrationMessage): Uint8Array { +export function encodeScreenShareMigrationMessage(message: ScreenShareMigrationMessage): Uint8Array { return TEXT_ENCODER.encode(JSON.stringify(message)); } diff --git a/fluxer_app/src/features/voice/engine/Store.ts b/fluxer_app/src/features/voice/engine/Store.ts index 317279b8c..042308a69 100644 --- a/fluxer_app/src/features/voice/engine/Store.ts +++ b/fluxer_app/src/features/voice/engine/Store.ts @@ -1,6 +1,6 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import {makeObservable, observable, runInAction} from 'mobx'; +import {makeObservable, observableRef, runInAction} from 'mobx'; import {useSyncExternalStore} from 'react'; export type StoreListener = () => void; @@ -20,7 +20,7 @@ export class Store implements StoreLike { constructor() { makeObservable(this, { - storeVersion: observable.ref, + storeVersion: observableRef, }); } diff --git a/fluxer_app/src/features/voice/engine/VoiceMediaGraph.ts b/fluxer_app/src/features/voice/engine/VoiceMediaGraph.ts index 683491762..f18669248 100644 --- a/fluxer_app/src/features/voice/engine/VoiceMediaGraph.ts +++ b/fluxer_app/src/features/voice/engine/VoiceMediaGraph.ts @@ -824,7 +824,7 @@ function subscribeToVoiceMediaGraphPublication { const entry = selectVoiceMediaGraphSubscriptionEntry(snapshot, target.participantIdentity, target.source); - if (!entry || !entry.publicationAvailable) return snapshot; + if (!entry?.publicationAvailable) return snapshot; return setVoiceMediaGraphSubscriptionEntry(snapshot, updateSubscriptionAvailability(entry, false)); } diff --git a/fluxer_app/src/features/voice/engine/VoiceMediaGraphStore.ts b/fluxer_app/src/features/voice/engine/VoiceMediaGraphStore.ts index 7cfcec143..09fde53b0 100644 --- a/fluxer_app/src/features/voice/engine/VoiceMediaGraphStore.ts +++ b/fluxer_app/src/features/voice/engine/VoiceMediaGraphStore.ts @@ -18,7 +18,7 @@ import { type VoiceMediaGraphClockPort, } from '@app/features/voice/engine/VoiceMediaGraphClock'; import {checkVoiceMediaGraphInvariants} from '@app/features/voice/engine/VoiceMediaGraphInvariants'; -import {makeObservable, observable} from 'mobx'; +import {makeObservable, observableRef} from 'mobx'; const logger = new Logger('VoiceMediaGraphStore'); const LOGGED_VIOLATION_LIMIT = 256; @@ -33,7 +33,7 @@ export class VoiceMediaGraphStore extends Store { super(); this.clock = clock; makeObservable(this, { - graph: observable.ref, + graph: observableRef, }); } diff --git a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppConnectionHostAdapter.ts b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppConnectionHostAdapter.ts index 5297bf7e9..45b57753c 100644 --- a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppConnectionHostAdapter.ts +++ b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppConnectionHostAdapter.ts @@ -57,7 +57,7 @@ import type { TrackPublishOptions, } from 'livekit-client'; import {Room as LiveKitRoom, RoomEvent, Track} from 'livekit-client'; -import {makeObservable, observable} from 'mobx'; +import {makeObservable, observableRef} from 'mobx'; import type {Subscription} from 'rxjs'; import {timer} from 'rxjs'; @@ -214,8 +214,8 @@ export class VoiceEngineV2AppConnectionHostAdapter extends Store { constructor() { super(); makeObservable(this, { - connectionState: observable.ref, - hotSwapState: observable.ref, + connectionState: observableRef, + hotSwapState: observableRef, }); this.throttle.subscribe(() => this.emitChange()); this.reconnect.subscribe(() => this.emitChange()); diff --git a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppLiveKitExecutionAdapter.ts b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppLiveKitExecutionAdapter.ts index c8b315800..e50e5ea14 100644 --- a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppLiveKitExecutionAdapter.ts +++ b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppLiveKitExecutionAdapter.ts @@ -88,12 +88,11 @@ function buildOperatingError(method: string, reason: string): Error { return error; } -function toUint8Array(payload: ArrayBuffer | ArrayBufferView): Uint8Array { - if (payload instanceof Uint8Array) return payload; - if (ArrayBuffer.isView(payload)) { - return new Uint8Array(payload.buffer, payload.byteOffset, payload.byteLength); - } - return new Uint8Array(payload); +function toUint8Array(payload: ArrayBuffer | ArrayBufferView): Uint8Array { + if (!ArrayBuffer.isView(payload)) return new Uint8Array(payload); + const {buffer, byteOffset, byteLength} = payload; + if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer, byteOffset, byteLength); + return new Uint8Array(buffer, byteOffset, byteLength).slice(); } function isDataPayload(value: unknown): value is ArrayBuffer | ArrayBufferView { diff --git a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx index e1667e7c0..a30283791 100644 --- a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx +++ b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx @@ -357,7 +357,7 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store { async unmuteScreenShareAudioPublicationInternal(participant: LocalParticipant, reason: string): Promise { const publication = participant.getTrackPublication(Track.Source.ScreenShareAudio); - if (!publication || !publication.isMuted) { + if (!publication?.isMuted) { return; } try { @@ -771,7 +771,7 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store { options: {includeSelfWindowAudio?: boolean; replaceExisting?: boolean} = {}, ): Promise { const participant = room?.localParticipant; - if (!participant || !participant.isScreenShareEnabled) return false; + if (!participant?.isScreenShareEnabled) return false; if (!linuxRule) return false; if (options.replaceExisting !== true) { const reconfigured = await reconfigureLinuxNativeAudioRouting(linuxRule, options); @@ -807,7 +807,7 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store { async ensureWindowScreenShareAudioPublication(room: Room | null, sourceId: string): Promise { const participant = room?.localParticipant; - if (!participant || !participant.isScreenShareEnabled) return false; + if (!participant?.isScreenShareEnabled) return false; const targetPid = await getElectronAPI() ?.nativeAudio?.resolveAudioRootPidForSource(sourceId) .catch((error) => { @@ -842,7 +842,7 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store { async ensureDeviceScreenShareMicPublication(room: Room | null, audioDeviceId: string): Promise { const participant = room?.localParticipant; - if (!participant || !participant.isScreenShareEnabled) return false; + if (!participant?.isScreenShareEnabled) return false; await ensureNativeMicrophonePermissionForDeviceShare('replace'); const micTrack = await createLocalAudioTrack({ deviceId: audioDeviceId && audioDeviceId !== 'default' ? audioDeviceId : undefined, @@ -1038,7 +1038,7 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store { return false; } const participant = room?.localParticipant; - if (!participant || !participant.isScreenShareEnabled) return false; + if (!participant?.isScreenShareEnabled) return false; const screenSharePublication = participant.getTrackPublication(Track.Source.ScreenShare); const screenShareTrack = screenSharePublication?.videoTrack; if (!screenShareTrack) { diff --git a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareLiveKitFlows.ts b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareLiveKitFlows.ts index 826b467d6..aa894856d 100644 --- a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareLiveKitFlows.ts +++ b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareLiveKitFlows.ts @@ -689,7 +689,7 @@ export class VoiceEngineV2AppScreenShareLiveKitFlows { return false; } const participant = room?.localParticipant; - if (!participant || !participant.isScreenShareEnabled) { + if (!room || !participant?.isScreenShareEnabled) { logger.warn('No active screen share to replace'); return false; } @@ -733,7 +733,7 @@ export class VoiceEngineV2AppScreenShareLiveKitFlows { return false; } const participant = room?.localParticipant; - if (!participant || !participant.isScreenShareEnabled) { + if (!room || !participant?.isScreenShareEnabled) { logger.warn('No active screen share to replace'); return false; } @@ -772,7 +772,7 @@ export class VoiceEngineV2AppScreenShareLiveKitFlows { return false; } const participant = room?.localParticipant; - if (!room || !participant || !participant.isScreenShareEnabled) { + if (!room || !participant?.isScreenShareEnabled) { logger.warn('No active screen share to republish'); return false; } @@ -892,7 +892,7 @@ export class VoiceEngineV2AppScreenShareLiveKitFlows { const sourceVideoTrack = screenShareTrack.mediaStream?.getVideoTracks()[0] ?? (videoHadProcessor ? undefined : screenShareTrack.mediaStreamTrack); - if (!sourceVideoTrack || sourceVideoTrack.readyState !== 'live') { + if (sourceVideoTrack?.readyState !== 'live') { throw new Error('Active screen share has no live source video track to preserve'); } const audioPublications = getLocalScreenShareAudioPublications(participant); diff --git a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppStatsHostAdapter.ts b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppStatsHostAdapter.ts index bb53f2594..60afc2fd6 100644 --- a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppStatsHostAdapter.ts +++ b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppStatsHostAdapter.ts @@ -169,7 +169,7 @@ type RoomWithEngine = Room & { }; interface StatsSource { - getStats(): Promise; + getStats(): Promise; getTransceivers?(): ReadonlyArray; } @@ -539,6 +539,7 @@ async function collectFromStatsSource( transport: TransportInfo | null; }> { const reports = await source.getStats(); + if (!reports) return {tracks: [], rtt: 0, transport: null}; const midToSenderTrackId = new Map(); for (const transceiver of source.getTransceivers?.() ?? []) { const senderTrackId = transceiver.sender?.track?.id; diff --git a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppVoiceStateAdapter.ts b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppVoiceStateAdapter.ts index 983cab71d..c126c2818 100644 --- a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppVoiceStateAdapter.ts +++ b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppVoiceStateAdapter.ts @@ -16,7 +16,7 @@ import { type VoiceGatewayVoiceStates, } from '@app/features/voice/engine/VoiceGatewayStateMachine'; import {ME} from '@fluxer/constants/src/AppConstants'; -import {makeObservable, observable} from 'mobx'; +import {makeObservable, observable, observableRef} from 'mobx'; const logger = new Logger('VoiceEngineV2AppVoiceStateAdapter'); @@ -53,10 +53,10 @@ export class VoiceEngineV2AppVoiceStateAdapter extends Store { constructor() { super(); makeObservable(this, { - snapshot: observable.ref, - voiceStates: observable.ref, - userVoiceStates: observable.ref, - connectionVoiceStates: observable.ref, + snapshot: observableRef, + voiceStates: observableRef, + userVoiceStates: observableRef, + connectionVoiceStates: observableRef, }); this.applyVoiceGatewayStateContext(this.snapshot.context); } diff --git a/fluxer_app/src/features/voice/hooks/useElectronScreenSharePicker.tsx b/fluxer_app/src/features/voice/hooks/useElectronScreenSharePicker.tsx index 77ed30508..f7b52da73 100644 --- a/fluxer_app/src/features/voice/hooks/useElectronScreenSharePicker.tsx +++ b/fluxer_app/src/features/voice/hooks/useElectronScreenSharePicker.tsx @@ -29,7 +29,7 @@ async function hasScreenRecordingPermission(requestId: string): Promise export const useElectronScreenSharePicker = (): void => { useEffect(() => { const electronApi = getElectronAPI(); - if (!electronApi || !electronApi.onDisplayMediaRequested) { + if (!electronApi?.onDisplayMediaRequested) { logger.info('Screen share picker unavailable (missing platform handler)'); return; } diff --git a/fluxer_app/src/features/voice/state/CallState.ts b/fluxer_app/src/features/voice/state/CallState.ts index 904bd3b27..6a57af4bb 100644 --- a/fluxer_app/src/features/voice/state/CallState.ts +++ b/fluxer_app/src/features/voice/state/CallState.ts @@ -25,7 +25,7 @@ export enum CallMode { FULL_SCREEN = 'FULL_SCREEN', } -export {CallLayout, type Call, type GatewayCallData}; +export {type Call, CallLayout, type GatewayCallData}; class CallState { calls = observable.map(); diff --git a/fluxer_app/src/features/voice/utils/InAppMediaSoundCapture.ts b/fluxer_app/src/features/voice/utils/InAppMediaSoundCapture.ts index 25c2fc339..a8b4f03b8 100644 --- a/fluxer_app/src/features/voice/utils/InAppMediaSoundCapture.ts +++ b/fluxer_app/src/features/voice/utils/InAppMediaSoundCapture.ts @@ -70,7 +70,7 @@ function attachToCaptureGraph(element: HTMLMediaElement): void { function detachFromCaptureGraph(element: HTMLMediaElement): void { const entry = routedElements.get(element); - if (!entry || !entry.connected) return; + if (!entry?.connected) return; entry.connected = false; element.removeEventListener('volumechange', entry.volumeListener); try { diff --git a/fluxer_app/src/features/voice/utils/NativeAudioCaptureBridge.ts b/fluxer_app/src/features/voice/utils/NativeAudioCaptureBridge.ts index a9e939e5e..579d8c255 100644 --- a/fluxer_app/src/features/voice/utils/NativeAudioCaptureBridge.ts +++ b/fluxer_app/src/features/voice/utils/NativeAudioCaptureBridge.ts @@ -333,7 +333,7 @@ async function startLinuxNativeAudioCapture( ): Promise { const electronApi = getElectronAPI(); const nativeAudioApi = electronApi?.nativeAudio; - if (!electronApi || electronApi.platform !== 'linux' || !nativeAudioApi) { + if (electronApi?.platform !== 'linux' || !nativeAudioApi) { setLastArmFailure({ platform: electronApi?.platform, reason: !electronApi @@ -1078,7 +1078,7 @@ export async function armNativeAudioForLinuxRouting( ): Promise { const electronApi = getElectronAPI(); const nativeAudioApi = electronApi?.nativeAudio; - if (!electronApi || electronApi.platform !== 'linux' || !nativeAudioApi) { + if (electronApi?.platform !== 'linux' || !nativeAudioApi) { setLastArmFailure({ platform: electronApi?.platform, reason: !electronApi diff --git a/fluxer_app/src/features/voice/utils/PrivateCallMenuUtils.ts b/fluxer_app/src/features/voice/utils/PrivateCallMenuUtils.ts index ed5c9fa93..14bbc487c 100644 --- a/fluxer_app/src/features/voice/utils/PrivateCallMenuUtils.ts +++ b/fluxer_app/src/features/voice/utils/PrivateCallMenuUtils.ts @@ -6,7 +6,7 @@ import CallState from '@app/features/voice/state/CallState'; import {ChannelTypes} from '@fluxer/constants/src/ChannelConstants'; export function isActiveCallParticipant(channel: Channel | null | undefined, userId: string): boolean { - if (!channel || !channel.isPrivate()) return false; + if (!channel?.isPrivate()) return false; const call = CallState.getCall(channel.id); if (!call) return false; const participants = new Set([...call.participants, ...CallState.getParticipants(channel.id)]); diff --git a/fluxer_app/src/features/voice/utils/ScreenShareStartFlow.ts b/fluxer_app/src/features/voice/utils/ScreenShareStartFlow.ts index 1385f3eda..184b6bf55 100644 --- a/fluxer_app/src/features/voice/utils/ScreenShareStartFlow.ts +++ b/fluxer_app/src/features/voice/utils/ScreenShareStartFlow.ts @@ -126,7 +126,7 @@ function buildLinuxNativeAudioRule( export async function reconfigureActiveLinuxScreenShareAudioLink(): Promise { const electronApi = getElectronAPI(); const virtmicApi = electronApi?.virtmic; - if (!electronApi || electronApi.platform !== 'linux') { + if (electronApi?.platform !== 'linux') { return false; } const sourceMode = VoiceSettings.getEffectiveScreenShareAudioSourceMode(); @@ -197,7 +197,7 @@ export async function reconfigureActiveLinuxAppShareAudio( requestedWindowAudioScope?: WindowShareAudioScope, ): Promise { const electronApi = getElectronAPI(); - if (!electronApi || electronApi.platform !== 'linux') return false; + if (electronApi?.platform !== 'linux') return false; if (ActiveScreenShareSource.isOwnWindow()) { logger.warn('Refusing to route audio into a Fluxer-owned window share'); await stopActiveLinuxScreenShareAudioLink(); @@ -244,7 +244,7 @@ export async function applyLiveScreenShareAudioSourceChange( export async function stopActiveLinuxScreenShareAudioLink(): Promise { const electronApi = getElectronAPI(); const virtmicApi = electronApi?.virtmic; - if (!electronApi || electronApi.platform !== 'linux') { + if (electronApi?.platform !== 'linux') { return false; } disarmVirtmic(); diff --git a/fluxer_app/src/features/voice/utils/VideoBackgroundProcessor.ts b/fluxer_app/src/features/voice/utils/VideoBackgroundProcessor.ts index 6a467adfb..ec89194ff 100644 --- a/fluxer_app/src/features/voice/utils/VideoBackgroundProcessor.ts +++ b/fluxer_app/src/features/voice/utils/VideoBackgroundProcessor.ts @@ -80,7 +80,7 @@ async function applyCameraVideoProcessor( if (track.getProcessor() !== activeProcessor) { throw new Error('Updated camera video processor is no longer attached to the active track'); } - if (!activeProcessor.processedTrack || activeProcessor.processedTrack.readyState !== 'live') { + if (activeProcessor.processedTrack?.readyState !== 'live') { throw new Error('Updated camera video processor has no live output track'); } return activeProcessor; @@ -98,7 +98,7 @@ async function applyCameraVideoProcessor( if (track.getProcessor() !== processor) { throw new Error('Camera video processor was not retained by the active track'); } - if (!processor.processedTrack || processor.processedTrack.readyState !== 'live') { + if (processor.processedTrack?.readyState !== 'live') { throw new Error('Camera video processor produced no live output track'); } logger.info(logLabel); diff --git a/fluxer_app/src/types/assets.d.ts b/fluxer_app/src/types/assets.d.ts index c5ea98d39..3ffd641a8 100644 --- a/fluxer_app/src/types/assets.d.ts +++ b/fluxer_app/src/types/assets.d.ts @@ -1,7 +1,7 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import type {FunctionComponent, SVGProps} from 'react'; import type {Messages} from '@lingui/core'; +import type {FunctionComponent, SVGProps} from 'react'; declare module '*.css' {} diff --git a/fluxer_app/src/vite-env.d.ts b/fluxer_app/src/vite-env.d.ts index 2e63136bc..ea3ddab7a 100644 --- a/fluxer_app/src/vite-env.d.ts +++ b/fluxer_app/src/vite-env.d.ts @@ -2,6 +2,7 @@ declare module '*.svg?react' { import type {FunctionComponent, SVGProps} from 'react'; + const content: FunctionComponent>; export default content; } diff --git a/fluxer_app/tsconfig.json b/fluxer_app/tsconfig.json index 5a3bf1265..7615a6536 100644 --- a/fluxer_app/tsconfig.json +++ b/fluxer_app/tsconfig.json @@ -13,8 +13,6 @@ "noUncheckedSideEffectImports": false, "sourceMap": true, "noImplicitReturns": true, - "experimentalDecorators": true, - "emitDecoratorMetadata": true, "paths": { "@app/*": ["./src/*"], "onnxruntime-web/ort-wasm-simd-threaded.asyncify.wasm": ["./src/types/ort-wasm-asset.d.ts"], diff --git a/fluxer_app_proxy/Cargo.toml b/fluxer_app_proxy/Cargo.toml index fb0a7ca1e..673c2c278 100644 --- a/fluxer_app_proxy/Cargo.toml +++ b/fluxer_app_proxy/Cargo.toml @@ -8,18 +8,18 @@ publish = false [dependencies] anyhow = "1.0.104" axum = { version = "0.8.9", features = ["macros"] } -base64 = "0.22" +base64 = "0.23" fluxer_common = { path = "../fluxer_common" } -futures-util = { version = "0.3.32", default-features = false, features = ["std"] } +futures-util = { version = "0.3.34", default-features = false, features = ["std"] } hex = "0.4" rand = "0.10" -reqwest = { version = "0.13.4", default-features = false, features = ["json", "rustls", "stream", "gzip", "brotli", "deflate"] } -serde = { version = "1.0.228", features = ["derive"] } -serde_json = "1.0.150" -tokio = { version = "1.52.3", features = ["macros", "net", "rt-multi-thread", "signal", "time", "fs"] } -tokio-util = { version = "0.7.18", features = ["io"] } +reqwest = { version = "0.13.5", default-features = false, features = ["json", "rustls", "stream", "gzip", "brotli", "deflate"] } +serde = { version = "1.0.229", features = ["derive"] } +serde_json = "1.0.151" +tokio = { version = "1.53.1", features = ["macros", "net", "rt-multi-thread", "signal", "time", "fs"] } +tokio-util = { version = "0.7.19", features = ["io"] } tower = { version = "0.5.3", features = ["util"] } -tower-http = { version = "0.6.11", features = ["compression-gzip", "trace"] } +tower-http = { version = "0.7.1", features = ["compression-gzip", "trace"] } tracing = "0.1.44" tracing-subscriber = { version = "0.3.23", features = ["env-filter"] } diff --git a/fluxer_app_proxy/Dockerfile b/fluxer_app_proxy/Dockerfile index ab26954df..e90d7684b 100644 --- a/fluxer_app_proxy/Dockerfile +++ b/fluxer_app_proxy/Dockerfile @@ -8,20 +8,20 @@ ARG APP_ASSETS_REF=app-assets ARG APP_ASSETS_PLATFORM=$BUILDPLATFORM # ---------- Stage 1: Build the SPA (fluxer_app) ---------- -FROM node:24-bookworm-slim AS app-build +FROM node:26-trixie-slim AS app-build ARG BUILD_VERSION ARG PUBLIC_ASSET_BASE_URL WORKDIR /usr/src/app -RUN corepack enable && corepack prepare pnpm@10.29.3 --activate +RUN npm install -g pnpm@12.4.2 RUN apt-get update && apt-get install -y --no-install-recommends \ curl ca-certificates build-essential clang \ && rm -rf /var/lib/apt/lists/* -ARG RUST_VERSION=1.93.0 +ARG RUST_VERSION=1.98.1 ENV RUSTUP_HOME=/usr/local/rustup \ CARGO_HOME=/usr/local/cargo \ PATH=/usr/local/cargo/bin:$PATH @@ -83,10 +83,10 @@ RUN --mount=type=cache,target=/usr/local/cargo/registry \ # ---------- Stage 2: The one canonical asset tree every architecture serves ---------- # Stage for CI to extract the full dist (docker bake app-dist target) -FROM alpine:3.21 AS app-dist +FROM alpine:3.24 AS app-dist COPY --from=app-build /usr/src/app/fluxer_app/dist /dist -FROM alpine:3.21 AS app-assets +FROM alpine:3.24 AS app-assets ARG BUNDLE_LOCAL_ASSETS=true ARG PUBLIC_ASSET_BASE_URL="" COPY fluxer_app_proxy/scripts/precompress_assets.sh /usr/local/bin/precompress_assets.sh @@ -109,7 +109,7 @@ RUN --mount=type=bind,from=app-dist,source=/dist,target=/dist \ FROM --platform=${APP_ASSETS_PLATFORM} ${APP_ASSETS_REF} AS app-static # ---------- Stage 3: Build the Rust proxy binary ---------- -FROM rust:1-bookworm AS rust-builder +FROM rust:1-trixie AS rust-builder ARG FLUXER_APP_PROXY_TIME_FREEZE_ENABLED="true" @@ -146,7 +146,7 @@ RUN if [ "${FLUXER_APP_PROXY_TIME_FREEZE_ENABLED}" = "false" ]; then \ && cp target/release/fluxer_app_proxy /usr/local/bin/fluxer-app-proxy # ---------- Stage 4: Runtime ---------- -FROM debian:bookworm-slim +FROM debian:trixie-slim ARG BUILD_VERSION="" ARG SOURCE_SHA="" diff --git a/fluxer_common/Cargo.toml b/fluxer_common/Cargo.toml index ead7414f7..eb0f9f7e5 100644 --- a/fluxer_common/Cargo.toml +++ b/fluxer_common/Cargo.toml @@ -6,17 +6,17 @@ license.workspace = true [dependencies] anyhow = "1.0.104" -aws-credential-types = "1.2.14" -aws-sigv4 = "1.4.5" +aws-credential-types = "1.3.0" +aws-sigv4 = "1.5.3" axum = { version = "0.8.9", default-features = false } -maxminddb = "0.28.1" -moka = { version = "0.12.15", features = ["sync"] } -reqwest = { version = "0.13.4", default-features = false, features = ["blocking", "rustls"] } -serde_json = "1.0.150" +maxminddb = "0.32.0" +moka = { version = "0.12.16", features = ["sync"] } +reqwest = { version = "0.13.5", default-features = false, features = ["blocking", "rustls"] } +serde_json = "1.0.151" tempfile = "3.27.0" -time = { version = "0.3.47", features = ["formatting", "macros", "parsing"] } +time = { version = "0.3.55", features = ["formatting", "macros", "parsing"] } tracing = "0.1.44" -base64 = "0.22" +base64 = "0.23" hmac = "0.13.0" sha2 = "0.11.0" thiserror = "2" diff --git a/fluxer_desktop/electron-builder.config.cjs b/fluxer_desktop/electron-builder.config.cjs index 252ad0ae0..dcaff51b8 100644 --- a/fluxer_desktop/electron-builder.config.cjs +++ b/fluxer_desktop/electron-builder.config.cjs @@ -552,7 +552,7 @@ async function expectedNativeRuntimeArtifactsForAppDir(platform, arch, appDir) { } } } catch (error) { - if (!error || error.code !== 'ENOENT') throw error; + if (error?.code !== 'ENOENT') throw error; } for (const libraryName of [...linuxWebAuthnRuntimeLibraries].sort()) { artifacts.push({ @@ -812,7 +812,7 @@ async function addLinuxLegacyBinarySymlink(context) { try { await fs.symlink(currentName, linkPath); } catch (error) { - if (!error || error.code !== 'EEXIST') throw error; + if (error?.code !== 'EEXIST') throw error; } } diff --git a/fluxer_desktop/native/audio-apm/Cargo.lock b/fluxer_desktop/native/audio-apm/Cargo.lock index cb2190fc9..355e9c301 100644 --- a/fluxer_desktop/native/audio-apm/Cargo.lock +++ b/fluxer_desktop/native/audio-apm/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -48,15 +48,15 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "cc" -version = "1.2.63" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", "shlex 2.0.1", @@ -73,15 +73,15 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "clang-sys" -version = "1.8.1" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "157a8ba7b480713b56f4c09fd13fc3e0a22a5dfab8097ba61cbc5feef950788a" dependencies = [ "glob", "libc", @@ -90,15 +90,15 @@ dependencies = [ [[package]] name = "either" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fluxer_audio_apm" @@ -116,9 +116,9 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "itertools" @@ -131,9 +131,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -147,15 +147,15 @@ dependencies = [ [[package]] name = "log" -version = "0.4.32" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "minimal-lexical" @@ -175,9 +175,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "prettyplease" @@ -191,27 +191,27 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -221,9 +221,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -232,15 +232,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "shlex" @@ -256,9 +256,9 @@ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" dependencies = [ "proc-macro2", "quote", @@ -267,9 +267,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "webrtc-audio-processing" diff --git a/fluxer_desktop/native/audio-mix/Cargo.lock b/fluxer_desktop/native/audio-mix/Cargo.lock index 137a3daf4..30af571dc 100644 --- a/fluxer_desktop/native/audio-mix/Cargo.lock +++ b/fluxer_desktop/native/audio-mix/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -52,9 +52,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.63" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", "shlex", @@ -62,9 +62,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "ciborium" @@ -95,18 +95,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstyle", "clap_lex", @@ -114,9 +114,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "criterion" @@ -155,9 +155,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "622f3fc73690be383c7214310406f28a90e6edeadc3cea882f9d71e495b9711a" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -165,18 +165,18 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.20" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" +checksum = "dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "crunchy" @@ -186,15 +186,15 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "either" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fluxer_audio_mix" @@ -215,21 +215,21 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-core", "futures-task", @@ -265,9 +265,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.100" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", @@ -276,15 +276,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "num-traits" @@ -353,18 +353,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -391,9 +391,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -403,9 +403,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -414,21 +414,21 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rtrb" -version = "0.3.5" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fae8ee26b0371a29a77d2b2d6b3ae13aa81def6f9bf1b1b92a32d279a5e709b7" +checksum = "9278fb35b3e730abe136e9b395b5b81b96d06b9f5478a50f0c8430a2237b22de" [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "same-file" @@ -441,9 +441,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -451,29 +451,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -496,9 +496,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -517,9 +528,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "walkdir" @@ -533,9 +544,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -546,9 +557,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -556,31 +567,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.100" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" dependencies = [ "js-sys", "wasm-bindgen", @@ -670,7 +681,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -681,7 +692,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -738,26 +749,26 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/fluxer_desktop/native/audio-mix/Cargo.toml b/fluxer_desktop/native/audio-mix/Cargo.toml index 76e438aa6..d544669e5 100644 --- a/fluxer_desktop/native/audio-mix/Cargo.toml +++ b/fluxer_desktop/native/audio-mix/Cargo.toml @@ -12,7 +12,7 @@ resolver = "2" crate-type = ["rlib"] [dependencies] -rtrb = "0.3" +rtrb = "0.4" fluxer_rt_thread = {path = "../rt-thread"} [dev-dependencies] diff --git a/fluxer_desktop/native/audio-timing/Cargo.lock b/fluxer_desktop/native/audio-timing/Cargo.lock index e787eb213..f40444ca0 100644 --- a/fluxer_desktop/native/audio-timing/Cargo.lock +++ b/fluxer_desktop/native/audio-timing/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -52,9 +52,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.63" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", "shlex", @@ -62,9 +62,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "ciborium" @@ -95,18 +95,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstyle", "clap_lex", @@ -114,9 +114,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "criterion" @@ -155,9 +155,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "622f3fc73690be383c7214310406f28a90e6edeadc3cea882f9d71e495b9711a" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -165,18 +165,18 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.20" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" +checksum = "dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "crunchy" @@ -186,15 +186,15 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "either" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fluxer_audio_timing" @@ -205,21 +205,21 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-core", "futures-task", @@ -255,9 +255,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.100" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", @@ -266,15 +266,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "num-traits" @@ -343,18 +343,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -381,9 +381,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -393,9 +393,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -404,15 +404,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "same-file" @@ -425,9 +425,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -435,29 +435,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -480,9 +480,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -501,9 +512,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "walkdir" @@ -517,9 +528,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -530,9 +541,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -540,31 +551,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.100" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" dependencies = [ "js-sys", "wasm-bindgen", @@ -618,26 +629,26 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/fluxer_desktop/native/encoder-ring/Cargo.lock b/fluxer_desktop/native/encoder-ring/Cargo.lock index e8964c69c..2d0e3a173 100644 --- a/fluxer_desktop/native/encoder-ring/Cargo.lock +++ b/fluxer_desktop/native/encoder-ring/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -40,29 +40,28 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "bindgen" -version = "0.72.1" +version = "0.73.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" +checksum = "787ef8ef523575546b106a58213d6e6b06198a05c2f757258c68a74273670cfa" dependencies = [ "bitflags", "cexpr", "clang-sys", - "itertools", "log", "prettyplease", "proc-macro2", "quote", "regex", "rustc-hash", - "shlex 1.3.0", - "syn", + "shlex", + "syn 3.0.6", ] [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "bumpalo" @@ -78,12 +77,12 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.63" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", - "shlex 2.0.1", + "shlex", ] [[package]] @@ -97,9 +96,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "ciborium" @@ -130,9 +129,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.8.1" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "157a8ba7b480713b56f4c09fd13fc3e0a22a5dfab8097ba61cbc5feef950788a" dependencies = [ "glob", "libc", @@ -141,18 +140,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstyle", "clap_lex", @@ -160,9 +159,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "criterion" @@ -201,9 +200,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "622f3fc73690be383c7214310406f28a90e6edeadc3cea882f9d71e495b9711a" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -211,18 +210,18 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.20" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" +checksum = "dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "crunchy" @@ -232,15 +231,15 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "either" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fluxer_encoder_ring" @@ -254,21 +253,21 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-core", "futures-task", @@ -278,9 +277,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "half" @@ -310,9 +309,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.100" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", @@ -321,9 +320,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -347,15 +346,15 @@ dependencies = [ [[package]] name = "log" -version = "0.4.32" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "minimal-lexical" @@ -440,28 +439,28 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.37" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +checksum = "2bfe0f4c752e450fc2faf62654f1c134747922825d5b04ca717b8874f41a40c0" dependencies = [ "proc-macro2", - "syn", + "syn 3.0.6", ] [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -488,9 +487,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -500,9 +499,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -511,21 +510,21 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "same-file" @@ -538,9 +537,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -548,29 +547,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -579,12 +578,6 @@ dependencies = [ "zmij", ] -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - [[package]] name = "shlex" version = "2.0.1" @@ -599,9 +592,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -620,9 +624,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "walkdir" @@ -636,9 +640,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -649,9 +653,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -659,31 +663,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.100" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" dependencies = [ "js-sys", "wasm-bindgen", @@ -773,7 +777,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -784,7 +788,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -841,26 +845,26 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/fluxer_desktop/native/encoder-ring/Cargo.toml b/fluxer_desktop/native/encoder-ring/Cargo.toml index e5376af91..eda52ce9c 100644 --- a/fluxer_desktop/native/encoder-ring/Cargo.toml +++ b/fluxer_desktop/native/encoder-ring/Cargo.toml @@ -27,7 +27,7 @@ windows = {version = "0.62.2", features = [ libloading = "0.9" [build-dependencies] -bindgen = {version = "0.72", optional = true} +bindgen = {version = "0.73", optional = true} [features] default = [] diff --git a/fluxer_desktop/native/gpu-rebuild/Cargo.lock b/fluxer_desktop/native/gpu-rebuild/Cargo.lock index 96619c3d6..65e4f05e9 100644 --- a/fluxer_desktop/native/gpu-rebuild/Cargo.lock +++ b/fluxer_desktop/native/gpu-rebuild/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "arrayvec" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" [[package]] name = "autocfg" @@ -16,9 +16,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "bit-set" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ddef2995421ab6a5c779542c81ee77c115206f4ad9d5a8e05f4ff49716a3dd" +checksum = "09ec2f926cc3060f09db9ebc5b52823d85268d24bb917e472c0c4bea35780a7d" dependencies = [ "bit-vec", ] @@ -31,41 +31,41 @@ checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "bytemuck" -version = "1.25.0" +version = "1.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.2" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" +checksum = "6a1f896587b6f2c069c73d2f0913e2d590c3990285cd2f0b6aa02b786b4c679c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] name = "codespan-reporting" @@ -125,40 +125,28 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.1" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" dependencies = [ "foldhash", ] -[[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - -[[package]] -name = "hexf-parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" - [[package]] name = "indexmap" -version = "2.14.0" +version = "2.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" dependencies = [ "equivalent", - "hashbrown 0.17.1", + "hashbrown", ] [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -193,15 +181,15 @@ dependencies = [ [[package]] name = "log" -version = "0.4.32" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "naga" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd91265cc2454558f659b3b4b9640f0ddb8cc6521277f166b8a8c181c898079" +checksum = "a616d2fb8c89516ac2723a581f69d6c18576046bed761bd6b305e5618e6ae130" dependencies = [ "arrayvec", "bit-set", @@ -210,11 +198,11 @@ dependencies = [ "cfg_aliases", "codespan-reporting", "half", - "hashbrown 0.16.1", - "hexf-parse", + "hashbrown", "indexmap", "libm", "log", + "naga-types", "num-traits", "once_cell", "rustc-hash", @@ -222,6 +210,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "naga-types" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "590afbf58a6f4f62873cd5cff4468061844bafa1cdf399cc954537c22d768d49" +dependencies = [ + "hashbrown", + "indexmap", + "rustc-hash", + "thiserror", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -263,24 +263,24 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" [[package]] name = "portable-atomic-util" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" +checksum = "10ab3eb7f3becc3a1cbc4f2c6f20267996cfc1a6467a873763411b136a122715" dependencies = [ "portable-atomic", ] [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -293,9 +293,9 @@ checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5" [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -335,9 +335,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" [[package]] name = "static_assertions" @@ -347,9 +347,20 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -358,29 +369,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-width" @@ -390,9 +401,9 @@ checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] name = "wgpu" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb3feacc458f7bee8bc1737149b42b6c731aa461039a4264a67bb6681646b250" +checksum = "527ccdf43dd5b2e8676eed9984ce00e2bbb0a1b85b70c1969dcb6cd2eb55ab9e" dependencies = [ "arrayvec", "bitflags", @@ -400,7 +411,7 @@ dependencies = [ "cfg-if", "cfg_aliases", "document-features", - "hashbrown 0.16.1", + "hashbrown", "log", "portable-atomic", "profiling", @@ -414,9 +425,9 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02da3ad1b568337f25513b317870960ef87073ea0945502e44b864b67a8c77b7" +checksum = "14c018fce9b6270aa203c2fdd56f3cce996713534bd757e4ea58c8560b121f14" dependencies = [ "arrayvec", "bit-set", @@ -425,10 +436,11 @@ dependencies = [ "bytemuck", "cfg_aliases", "document-features", - "hashbrown 0.16.1", + "hashbrown", "indexmap", "log", "naga", + "naga-types", "once_cell", "parking_lot", "portable-atomic", @@ -445,29 +457,32 @@ dependencies = [ [[package]] name = "wgpu-core-deps-windows-linux-android" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb01076d0aa08b0ba9bd741e178b5cc440f5abe99d9581323a4c8b5d1a1916" +checksum = "7586165fd5f6d881cb9ce4bb71f40d6caab2c0f1837e3fc1d9788a197fb6004f" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-hal" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8e1a9e7a8512f276f7c62e018c7fa8d60954303fed2e5750114332049193f" +checksum = "b6b7fb58561a792bc237628ba0792e332de418fefe145f13b5ed8201e6d52f58" dependencies = [ "bitflags", "cfg-if", "cfg_aliases", + "hashbrown", "libloading", "log", "naga", + "naga-types", "portable-atomic", "portable-atomic-util", "raw-window-handle", "renderdoc-sys", + "static_assertions", "thiserror", "wgpu-naga-bridge", "wgpu-types", @@ -475,9 +490,9 @@ dependencies = [ [[package]] name = "wgpu-naga-bridge" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c654c483f058800972c3645e95388a7eca31bf9fe1933bc20e036588a0be02" +checksum = "d2f62e73117bb7a62bfd9c5a5841438a823f6566c6442a808ee269d2d055c081" dependencies = [ "naga", "wgpu-types", @@ -485,14 +500,16 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9bcc31518a0e9735aefebedb5f7a9ef3ed1c42549c9f4c882fa9060ceaac639" +checksum = "99dad6f1fbdbbdb4c278a6508b059d44688f5cebddf78d005a46a31340269286" dependencies = [ "bitflags", "bytemuck", "log", + "naga-types", "raw-window-handle", + "static_assertions", ] [[package]] @@ -503,20 +520,20 @@ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "zerocopy" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] diff --git a/fluxer_desktop/native/gpu-rebuild/Cargo.toml b/fluxer_desktop/native/gpu-rebuild/Cargo.toml index 284a8d200..fa9d2eddb 100644 --- a/fluxer_desktop/native/gpu-rebuild/Cargo.toml +++ b/fluxer_desktop/native/gpu-rebuild/Cargo.toml @@ -17,7 +17,7 @@ wgpu = ["dep:wgpu"] [dependencies] parking_lot = "0.12" -wgpu = { version = "29", optional = true, default-features = false } +wgpu = { version = "30", optional = true, default-features = false } [dev-dependencies] parking_lot = "0.12" diff --git a/fluxer_desktop/native/hardware-encoder/Cargo.lock b/fluxer_desktop/native/hardware-encoder/Cargo.lock index fabc81572..ed49ad8a3 100644 --- a/fluxer_desktop/native/hardware-encoder/Cargo.lock +++ b/fluxer_desktop/native/hardware-encoder/Cargo.lock @@ -4,21 +4,21 @@ version = 4 [[package]] name = "bitflags" -version = "2.13.1" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] @@ -95,7 +95,7 @@ checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.6", ] [[package]] @@ -151,9 +151,9 @@ checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "napi" -version = "3.12.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "459197f1592f4c3dbbf9c1b13f5a4599a343e4ef66b96bc340e2a518b36a6662" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", @@ -167,15 +167,15 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.4.1" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60fdf9b392c50e7c4170fa633bd909490ed7835cea4c046776d1a4dd8d2ae0ab" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.6.3" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa55ea69990c90b888e9e77044410e304ce7f35de599dc6d0b5c1923d2e59af" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", @@ -187,9 +187,9 @@ dependencies = [ [[package]] name = "napi-derive-backend" -version = "6.1.2" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df4056ac7c18e4438ccf0edaed4340ca0d269278c8ec19284f7b23cb039fd0ae" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", @@ -200,9 +200,9 @@ dependencies = [ [[package]] name = "napi-sys" -version = "3.3.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85fbf1fa9f1babfe396d74bbbf52b3643770243e8f5b0b46715d4caf7f0dfc9a" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -268,9 +268,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.3" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -279,9 +279,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" diff --git a/fluxer_desktop/native/hardware-encoder/Cargo.toml b/fluxer_desktop/native/hardware-encoder/Cargo.toml index b4291e7af..470618736 100644 --- a/fluxer_desktop/native/hardware-encoder/Cargo.toml +++ b/fluxer_desktop/native/hardware-encoder/Cargo.toml @@ -12,11 +12,11 @@ resolver = "2" crate-type = ["cdylib", "rlib"] [dependencies] -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8"]} +napi-derive = "3.6.7" [target.'cfg(any(target_os = "linux", target_os = "windows"))'.dependencies] libloading = "0.9.0" [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" diff --git a/fluxer_desktop/native/linux-audio-capture/Cargo.lock b/fluxer_desktop/native/linux-audio-capture/Cargo.lock index d739b6670..188357a15 100644 --- a/fluxer_desktop/native/linux-audio-capture/Cargo.lock +++ b/fluxer_desktop/native/linux-audio-capture/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -64,14 +64,14 @@ dependencies = [ "regex", "rustc-hash", "shlex 1.3.0", - "syn", + "syn 2.0.119", ] [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "bumpalo" @@ -87,9 +87,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.63" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", "shlex 2.0.1", @@ -106,9 +106,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.20.8" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb693542bcafa528e198be0ebd9d3632ca5b7c93dbe7237460e199910835997c" +checksum = "fe4ece8474b5f766c63426647e7b4b316b67431ade1036a8313cee24a03ae917" dependencies = [ "smallvec", "target-lexicon", @@ -116,9 +116,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "ciborium" @@ -149,9 +149,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.8.1" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "157a8ba7b480713b56f4c09fd13fc3e0a22a5dfab8097ba61cbc5feef950788a" dependencies = [ "glob", "libc", @@ -160,18 +160,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstyle", "clap_lex", @@ -179,15 +179,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] @@ -235,9 +235,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "622f3fc73690be383c7214310406f28a90e6edeadc3cea882f9d71e495b9711a" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -245,18 +245,18 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.20" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" +checksum = "dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "crunchy" @@ -266,15 +266,15 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "either" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "equivalent" @@ -294,9 +294,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fluxer_audio_apm" @@ -355,9 +355,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -370,9 +370,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -380,15 +380,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -397,38 +397,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -443,9 +443,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "half" @@ -472,9 +472,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "indexmap" -version = "2.14.0" +version = "2.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" dependencies = [ "equivalent", "hashbrown", @@ -497,9 +497,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.100" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", @@ -508,9 +508,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -534,9 +534,9 @@ dependencies = [ [[package]] name = "libspa" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2909f3be29d674e7f10604aff18d1bbe1bb03c4cd61c8a8ba19c0b1d162f7d4e" +checksum = "882f7427e7989dcc9d388b7f05c4630390a1d7696f9ffa469cd4a7a48f0b4c40" dependencies = [ "bitflags", "cc", @@ -550,9 +550,9 @@ dependencies = [ [[package]] name = "libspa-sys" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69ad52764fca54818486f3cf75afec844d1f1a1568c24dcee25d41b1ab007dda" +checksum = "3b6e17bdaf63ed0d5e4144022624032b41fd9733112e8c74ac26fc9bf1291924" dependencies = [ "bindgen", "cc", @@ -576,9 +576,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "minimal-lexical" @@ -588,13 +588,14 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -603,42 +604,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading 0.9.0", ] @@ -730,9 +731,9 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pipewire" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8585aba8a52ad74ccc633b8e293c1dc4277976bd5d510b925533f34fd6685f38" +checksum = "bde71084c4e25959d68f1ea54daa75e5ecdb338e5caf0b5510143b79baa32d5c" dependencies = [ "bitflags", "libc", @@ -744,9 +745,9 @@ dependencies = [ [[package]] name = "pipewire-sys" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2089f245b548723e60325773c27f586b7a2372c79ea941b246cd0d654706adc" +checksum = "9ce653f53e63e5b93853218092ee9a8906a5d082c92f3f1db26316955dd63ce0" dependencies = [ "bindgen", "libspa-sys", @@ -755,9 +756,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "plotters" @@ -789,18 +790,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -836,9 +837,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -848,9 +849,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -859,27 +860,27 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rtrb" -version = "0.3.5" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fae8ee26b0371a29a77d2b2d6b3ae13aa81def6f9bf1b1b92a32d279a5e709b7" +checksum = "9278fb35b3e730abe136e9b395b5b81b96d06b9f5478a50f0c8430a2237b22de" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ "bitflags", "errno", @@ -890,9 +891,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "same-file" @@ -917,9 +918,9 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -927,29 +928,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -987,15 +988,26 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -1033,9 +1045,9 @@ dependencies = [ [[package]] name = "toml" -version = "1.1.2+spec-1.1.0" +version = "1.1.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +checksum = "920602543f0911ab71da12c50d59701da54c196d1a2bf5cb4b75667f137a406a" dependencies = [ "indexmap", "serde_core", @@ -1057,30 +1069,30 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ "winnow", ] [[package]] name = "toml_writer" -version = "1.1.1+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-width" @@ -1106,9 +1118,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -1119,9 +1131,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1129,31 +1141,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.100" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" dependencies = [ "js-sys", "wasm-bindgen", @@ -1243,7 +1255,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1254,7 +1266,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1311,32 +1323,32 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" [[package]] name = "zerocopy" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/fluxer_desktop/native/linux-audio-capture/Cargo.toml b/fluxer_desktop/native/linux-audio-capture/Cargo.toml index 43dfc317f..2fd1c17a4 100644 --- a/fluxer_desktop/native/linux-audio-capture/Cargo.toml +++ b/fluxer_desktop/native/linux-audio-capture/Cargo.toml @@ -12,8 +12,8 @@ resolver = "2" crate-type = ["cdylib", "rlib"] [dependencies] -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8"]} +napi-derive = "3.6.7" fluxer_rt_thread = {path = "../rt-thread"} fluxer_audio_mix = {path = "../audio-mix"} fluxer_audio_apm = {path = "../audio-apm"} @@ -21,10 +21,10 @@ fluxer_audio_timing = {path = "../audio-timing"} fluxer_screen_frame_bus = {path = "../screen-frame-bus"} [target.'cfg(target_os = "linux")'.dependencies] -pipewire = "0.10.0" +pipewire = "0.10.1" [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" [dev-dependencies] criterion = "0.8" diff --git a/fluxer_desktop/native/linux-audio-capture/src/pipewire/stream_ops.rs b/fluxer_desktop/native/linux-audio-capture/src/pipewire/stream_ops.rs index 7d265cb87..162a347dd 100644 --- a/fluxer_desktop/native/linux-audio-capture/src/pipewire/stream_ops.rs +++ b/fluxer_desktop/native/linux-audio-capture/src/pipewire/stream_ops.rs @@ -278,12 +278,15 @@ fn decode_f32_into_scratch(raw_payload: &[u8], scratch: &mut [f32; MAX_FRAME_SAM let sample_count = raw_payload.len() / mem::size_of::(); let take = sample_count.min(MAX_FRAME_SAMPLES); let mut written = 0usize; - let mut iter = raw_payload.chunks_exact(mem::size_of::()); + let mut iter = raw_payload + .as_chunks::<{ mem::size_of::() }>() + .0 + .iter(); for slot in scratch.iter_mut().take(take) { let Some(chunk) = iter.next() else { break; }; - *slot = f32::from_ne_bytes([chunk[0], chunk[1], chunk[2], chunk[3]]); + *slot = f32::from_ne_bytes(*chunk); written += 1; } written diff --git a/fluxer_desktop/native/linux-evdev/Cargo.lock b/fluxer_desktop/native/linux-evdev/Cargo.lock index 5ddf9c635..94db6ca6f 100644 --- a/fluxer_desktop/native/linux-evdev/Cargo.lock +++ b/fluxer_desktop/native/linux-evdev/Cargo.lock @@ -4,15 +4,15 @@ version = 4 [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "bitvec" -version = "1.0.1" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +checksum = "ddcec3d12c579d40898fe0a9a358a803c23e9c52ca3c425707f81c9436211837" dependencies = [ "funty", "radium", @@ -22,15 +22,15 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] name = "concurrent-queue" @@ -43,24 +43,24 @@ dependencies = [ [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "errno" @@ -105,9 +105,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -120,9 +120,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -130,15 +130,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -147,38 +147,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -199,9 +199,9 @@ checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hermit-abi" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" +checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284" [[package]] name = "io-lifetimes" @@ -216,9 +216,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -248,19 +248,20 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -269,42 +270,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -347,9 +348,9 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "polling" @@ -359,7 +360,7 @@ checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.5.2", + "hermit-abi 0.5.3", "pin-project-lite", "rustix", "windows-sys 0.61.2", @@ -367,18 +368,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -391,15 +392,15 @@ checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ "bitflags", "errno", @@ -422,9 +423,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -451,15 +463,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "windows-link" diff --git a/fluxer_desktop/native/linux-evdev/Cargo.toml b/fluxer_desktop/native/linux-evdev/Cargo.toml index 8ea2a78ef..0f2020896 100644 --- a/fluxer_desktop/native/linux-evdev/Cargo.toml +++ b/fluxer_desktop/native/linux-evdev/Cargo.toml @@ -12,8 +12,8 @@ resolver = "2" crate-type = ["cdylib", "rlib"] [dependencies] -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8"]} +napi-derive = "3.6.7" [target.'cfg(target_os = "linux")'.dependencies] evdev = "0.13.2" @@ -22,4 +22,4 @@ udev = "0.9.3" polling = "3.11.0" [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" diff --git a/fluxer_desktop/native/linux-input-hook/Cargo.lock b/fluxer_desktop/native/linux-input-hook/Cargo.lock index 3c62b063b..1d5ecd504 100644 --- a/fluxer_desktop/native/linux-input-hook/Cargo.lock +++ b/fluxer_desktop/native/linux-input-hook/Cargo.lock @@ -4,30 +4,30 @@ version = 4 [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "errno" @@ -51,9 +51,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -66,9 +66,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -76,15 +76,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -93,38 +93,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -149,9 +149,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -171,19 +171,20 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -192,42 +193,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -246,33 +247,33 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ "bitflags", "errno", @@ -295,9 +296,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -306,15 +318,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "windows-link" @@ -333,9 +345,9 @@ dependencies = [ [[package]] name = "x11rb" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" +checksum = "5a8885a854a8bfdf87a301e53e41b17c5f8f33639903131338b997b1eb614f44" dependencies = [ "gethostname", "rustix", @@ -344,6 +356,6 @@ dependencies = [ [[package]] name = "x11rb-protocol" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" +checksum = "acf4d1bc32aa46eec18caa634ec3cf4c05bfa151f12b93b510b15190f69a1ca8" diff --git a/fluxer_desktop/native/linux-input-hook/Cargo.toml b/fluxer_desktop/native/linux-input-hook/Cargo.toml index ba86d71fc..4deb328f6 100644 --- a/fluxer_desktop/native/linux-input-hook/Cargo.toml +++ b/fluxer_desktop/native/linux-input-hook/Cargo.toml @@ -12,11 +12,11 @@ resolver = "2" crate-type = ["cdylib", "rlib"] [dependencies] -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8"]} +napi-derive = "3.6.7" [target.'cfg(target_os = "linux")'.dependencies] -x11rb = {version = "0.13.2", default-features = false, features = ["record"]} +x11rb = {version = "0.14.0", default-features = false, features = ["record"]} [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" diff --git a/fluxer_desktop/native/linux-input-hook/src/hook.rs b/fluxer_desktop/native/linux-input-hook/src/hook.rs index 798107a76..39ce58410 100644 --- a/fluxer_desktop/native/linux-input-hook/src/hook.rs +++ b/fluxer_desktop/native/linux-input-hook/src/hook.rs @@ -170,11 +170,7 @@ struct KeysymCache { impl KeysymCache { fn build(reply: &GetKeyboardMappingReply, min_keycode: Keycode) -> Self { let per = reply.keysyms_per_keycode as usize; - let count = if per == 0 { - 0 - } else { - reply.keysyms.len() / per - }; + let count = reply.keysyms.len().checked_div(per).unwrap_or(0); let mut syms = Vec::with_capacity(count); if per > 0 { for i in 0..count { diff --git a/fluxer_desktop/native/linux-notifications/Cargo.lock b/fluxer_desktop/native/linux-notifications/Cargo.lock index f3e85db3d..b4565159f 100644 --- a/fluxer_desktop/native/linux-notifications/Cargo.lock +++ b/fluxer_desktop/native/linux-notifications/Cargo.lock @@ -2,12 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "anyhow" -version = "1.0.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" - [[package]] name = "async-broadcast" version = "0.7.2" @@ -101,7 +95,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -130,13 +124,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -153,15 +147,15 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "blocking" -version = "1.6.2" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +checksum = "a70e4329df6cb94385eed412ec92375c3cdd8a6e502493d1229b6414e4036dfa" dependencies = [ "async-channel", "async-task", @@ -178,9 +172,9 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "concurrent-queue" @@ -193,24 +187,24 @@ dependencies = [ [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "endi" @@ -236,7 +230,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -257,11 +251,10 @@ dependencies = [ [[package]] name = "event-listener" -version = "5.4.1" +version = "5.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2" dependencies = [ - "concurrent-queue", "parking", "pin-project-lite", ] @@ -278,9 +271,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "fluxer_linux_notifications" @@ -294,17 +287,11 @@ dependencies = [ "zbus", ] -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -317,9 +304,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -327,15 +314,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -344,9 +331,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-lite" @@ -363,32 +350,32 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -403,24 +390,13 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi", - "wasip2", - "wasip3", -] - -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash", ] [[package]] @@ -429,17 +405,11 @@ version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" -[[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.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" +checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284" [[package]] name = "hex" @@ -447,52 +417,32 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "indexmap" -version = "2.14.0" +version = "2.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" dependencies = [ "equivalent", - "hashbrown 0.17.1", - "serde", - "serde_core", + "hashbrown", ] -[[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - [[package]] name = "js-sys" -version = "0.3.100" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", "wasm-bindgen", ] -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -510,17 +460,11 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" -[[package]] -name = "log" -version = "0.4.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" - [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "memoffset" @@ -533,13 +477,14 @@ dependencies = [ [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -548,42 +493,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -647,16 +592,6 @@ dependencies = [ "windows-sys", ] -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "proc-macro-crate" version = "3.5.0" @@ -668,18 +603,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -692,15 +627,15 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ "bitflags", "errno", @@ -711,9 +646,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "semver" @@ -723,9 +658,9 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -733,46 +668,33 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.150" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", + "syn 3.0.6", ] [[package]] name = "serde_repr" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -793,9 +715,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -826,9 +759,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.12+spec-1.1.0" +version = "0.25.15+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" +checksum = "1340ea94a5856333492c9064b02c778b191dd2c853778d9609debdcdfea3a614" dependencies = [ "indexmap", "toml_datetime", @@ -838,9 +771,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ "winnow", ] @@ -864,7 +797,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -889,56 +822,32 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "uuid" -version = "1.23.1" +version = "1.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "2ef6dac1e96601b4fb3acccccff2139741fcb757cb9a36089bf5be91cfb285ce" dependencies = [ "js-sys", "serde_core", "wasm-bindgen", ] -[[package]] -name = "wasip2" -version = "1.0.3+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" -dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", -] - [[package]] name = "wasm-bindgen" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -949,9 +858,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -959,60 +868,26 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "windows-link" version = "0.2.1" @@ -1030,112 +905,18 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" dependencies = [ "memchr", ] -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" - -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "zbus" -version = "5.16.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee682d202a77e4a9f3b2c2bdf48a7b28af5c08c34ddf66f98c93e5e39464285" +checksum = "5db4be7c075cb421e4b7ee645541604239bd243ba7c357511f4ff3a74b555907" dependencies = [ "async-broadcast", "async-executor", @@ -1168,14 +949,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.16.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf1bd45a81a103745b1757754762a26e8cd01e4532e4d6c8ec431624b80d1d6" +checksum = "2990635d09ade6df1868f72f8cac69a876a90981e8bd3c40b1be413f8dc88f40" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "zbus_names", "zvariant", "zvariant_utils", @@ -1183,9 +964,9 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.2" +version = "4.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" +checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" dependencies = [ "serde", "winnow", @@ -1193,47 +974,51 @@ dependencies = [ ] [[package]] -name = "zmij" -version = "1.0.21" +name = "zcheapstr" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "d1afec51604565183aeb5c54c20aeab286120d4e4460f7f76e3e8bb8c0d99473" +dependencies = [ + "serde", +] [[package]] name = "zvariant" -version = "5.12.0" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a192a0bde63360d77a7523c833d4b4ce6070a927e2c53246e4c540b1a3e27be0" +checksum = "c1d34c27cc6cdd1f458427519dd6b8612f7b7e3f7b9a0b2355d041dda9869147" dependencies = [ "endi", "enumflags2", "serde", "winnow", + "zcheapstr", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.12.0" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc6cde9c01c511074be97f7ccb6c19d0da89e3f8662e812e999dcfd4638737" +checksum = "864155e69b4352db0c7f374917bf45d1e0c8d17659c8b3dbf9795f3673f8c497" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "3.4.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e8535915cfa75547e559d8c68e8139909a4aeee076831e4ef7fc59d8172c4d6" +checksum = "bad0294361a320b694a328460dc73add56c306150f5cb6bfafc44446120008a3" dependencies = [ "proc-macro2", "quote", "serde", - "syn", + "syn 3.0.6", "winnow", ] diff --git a/fluxer_desktop/native/linux-notifications/Cargo.toml b/fluxer_desktop/native/linux-notifications/Cargo.toml index 5353daedb..9c56b22ac 100644 --- a/fluxer_desktop/native/linux-notifications/Cargo.toml +++ b/fluxer_desktop/native/linux-notifications/Cargo.toml @@ -14,9 +14,9 @@ crate-type = ["cdylib", "rlib"] [dependencies] async-io = "2.6.0" futures-lite = "2.6.1" -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8"]} -napi-derive = "3.5.6" -zbus = "5.16.0" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8"]} +napi-derive = "3.6.7" +zbus = "5.19.0" [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" diff --git a/fluxer_desktop/native/linux-portals/Cargo.lock b/fluxer_desktop/native/linux-portals/Cargo.lock index a802e2263..441fc3b21 100644 --- a/fluxer_desktop/native/linux-portals/Cargo.lock +++ b/fluxer_desktop/native/linux-portals/Cargo.lock @@ -2,12 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "anyhow" -version = "1.0.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" - [[package]] name = "async-broadcast" version = "0.7.2" @@ -101,7 +95,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -130,13 +124,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -153,15 +147,15 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "blocking" -version = "1.6.2" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +checksum = "a70e4329df6cb94385eed412ec92375c3cdd8a6e502493d1229b6414e4036dfa" dependencies = [ "async-channel", "async-task", @@ -178,9 +172,9 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "concurrent-queue" @@ -193,24 +187,24 @@ dependencies = [ [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "endi" @@ -236,7 +230,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -257,11 +251,10 @@ dependencies = [ [[package]] name = "event-listener" -version = "5.4.1" +version = "5.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2" dependencies = [ - "concurrent-queue", "parking", "pin-project-lite", ] @@ -278,9 +271,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "fluxer_linux_portals" @@ -295,17 +288,11 @@ dependencies = [ "zbus", ] -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -318,9 +305,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -328,15 +315,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -345,9 +332,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-lite" @@ -364,32 +351,32 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -414,24 +401,13 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi", - "wasip2", - "wasip3", -] - -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash", ] [[package]] @@ -440,17 +416,11 @@ version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" -[[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.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" +checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284" [[package]] name = "hex" @@ -458,52 +428,32 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "indexmap" -version = "2.14.0" +version = "2.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" dependencies = [ "equivalent", - "hashbrown 0.17.1", - "serde", - "serde_core", + "hashbrown", ] -[[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - [[package]] name = "js-sys" -version = "0.3.100" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", "wasm-bindgen", ] -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -521,17 +471,11 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" -[[package]] -name = "log" -version = "0.4.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" - [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "memoffset" @@ -544,13 +488,14 @@ dependencies = [ [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -559,42 +504,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -658,16 +603,6 @@ dependencies = [ "windows-sys", ] -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "proc-macro-crate" version = "3.5.0" @@ -679,18 +614,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -703,15 +638,15 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ "bitflags", "errno", @@ -722,9 +657,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "semver" @@ -734,9 +669,9 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -744,46 +679,33 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.150" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", + "syn 3.0.6", ] [[package]] name = "serde_repr" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -804,9 +726,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -837,9 +770,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.12+spec-1.1.0" +version = "0.25.15+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" +checksum = "1340ea94a5856333492c9064b02c778b191dd2c853778d9609debdcdfea3a614" dependencies = [ "indexmap", "toml_datetime", @@ -849,9 +782,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ "winnow", ] @@ -875,7 +808,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -900,56 +833,32 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "uuid" -version = "1.23.1" +version = "1.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "2ef6dac1e96601b4fb3acccccff2139741fcb757cb9a36089bf5be91cfb285ce" dependencies = [ "js-sys", "serde_core", "wasm-bindgen", ] -[[package]] -name = "wasip2" -version = "1.0.3+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" -dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", -] - [[package]] name = "wasm-bindgen" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -960,9 +869,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -970,60 +879,26 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "windows-link" version = "0.2.1" @@ -1041,112 +916,18 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" dependencies = [ "memchr", ] -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" - -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "x11rb" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" +checksum = "5a8885a854a8bfdf87a301e53e41b17c5f8f33639903131338b997b1eb614f44" dependencies = [ "gethostname", "rustix", @@ -1155,15 +936,15 @@ dependencies = [ [[package]] name = "x11rb-protocol" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" +checksum = "acf4d1bc32aa46eec18caa634ec3cf4c05bfa151f12b93b510b15190f69a1ca8" [[package]] name = "zbus" -version = "5.16.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee682d202a77e4a9f3b2c2bdf48a7b28af5c08c34ddf66f98c93e5e39464285" +checksum = "5db4be7c075cb421e4b7ee645541604239bd243ba7c357511f4ff3a74b555907" dependencies = [ "async-broadcast", "async-executor", @@ -1196,14 +977,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.16.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf1bd45a81a103745b1757754762a26e8cd01e4532e4d6c8ec431624b80d1d6" +checksum = "2990635d09ade6df1868f72f8cac69a876a90981e8bd3c40b1be413f8dc88f40" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "zbus_names", "zvariant", "zvariant_utils", @@ -1211,9 +992,9 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.2" +version = "4.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" +checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" dependencies = [ "serde", "winnow", @@ -1221,47 +1002,51 @@ dependencies = [ ] [[package]] -name = "zmij" -version = "1.0.21" +name = "zcheapstr" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "d1afec51604565183aeb5c54c20aeab286120d4e4460f7f76e3e8bb8c0d99473" +dependencies = [ + "serde", +] [[package]] name = "zvariant" -version = "5.12.0" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a192a0bde63360d77a7523c833d4b4ce6070a927e2c53246e4c540b1a3e27be0" +checksum = "c1d34c27cc6cdd1f458427519dd6b8612f7b7e3f7b9a0b2355d041dda9869147" dependencies = [ "endi", "enumflags2", "serde", "winnow", + "zcheapstr", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.12.0" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc6cde9c01c511074be97f7ccb6c19d0da89e3f8662e812e999dcfd4638737" +checksum = "864155e69b4352db0c7f374917bf45d1e0c8d17659c8b3dbf9795f3673f8c497" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "3.4.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e8535915cfa75547e559d8c68e8139909a4aeee076831e4ef7fc59d8172c4d6" +checksum = "bad0294361a320b694a328460dc73add56c306150f5cb6bfafc44446120008a3" dependencies = [ "proc-macro2", "quote", "serde", - "syn", + "syn 3.0.6", "winnow", ] diff --git a/fluxer_desktop/native/linux-portals/Cargo.toml b/fluxer_desktop/native/linux-portals/Cargo.toml index 652bcbe4d..dc224c4e7 100644 --- a/fluxer_desktop/native/linux-portals/Cargo.toml +++ b/fluxer_desktop/native/linux-portals/Cargo.toml @@ -12,14 +12,14 @@ resolver = "2" crate-type = ["cdylib", "rlib"] [dependencies] -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8"]} +napi-derive = "3.6.7" [target.'cfg(target_os = "linux")'.dependencies] async-io = "2.6.0" futures-lite = "2.6.1" -x11rb = "0.13.2" -zbus = "5.16.0" +x11rb = "0.14.0" +zbus = "5.19.0" [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" diff --git a/fluxer_desktop/native/linux-screen-capture/Cargo.lock b/fluxer_desktop/native/linux-screen-capture/Cargo.lock index 856564ffb..778f545a1 100644 --- a/fluxer_desktop/native/linux-screen-capture/Cargo.lock +++ b/fluxer_desktop/native/linux-screen-capture/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -42,17 +42,11 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" -[[package]] -name = "anyhow" -version = "1.0.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" - [[package]] name = "arrayvec" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" [[package]] name = "async-broadcast" @@ -147,7 +141,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -176,13 +170,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -211,16 +205,16 @@ dependencies = [ "proc-macro2", "quote", "regex", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "shlex 1.3.0", - "syn", + "syn 2.0.119", ] [[package]] name = "bit-set" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ddef2995421ab6a5c779542c81ee77c115206f4ad9d5a8e05f4ff49716a3dd" +checksum = "09ec2f926cc3060f09db9ebc5b52823d85268d24bb917e472c0c4bea35780a7d" dependencies = [ "bit-vec", ] @@ -233,15 +227,15 @@ checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "blocking" -version = "1.6.2" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +checksum = "a70e4329df6cb94385eed412ec92375c3cdd8a6e502493d1229b6414e4036dfa" dependencies = [ "async-channel", "async-task", @@ -258,22 +252,22 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytemuck" -version = "1.25.0" +version = "1.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.2" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" +checksum = "6a1f896587b6f2c069c73d2f0913e2d590c3990285cd2f0b6aa02b786b4c679c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -284,9 +278,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.63" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", "shlex 2.0.1", @@ -303,9 +297,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.20.8" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb693542bcafa528e198be0ebd9d3632ca5b7c93dbe7237460e199910835997c" +checksum = "fe4ece8474b5f766c63426647e7b4b316b67431ade1036a8313cee24a03ae917" dependencies = [ "smallvec", "target-lexicon", @@ -313,15 +307,15 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] name = "ciborium" @@ -352,9 +346,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.8.1" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "157a8ba7b480713b56f4c09fd13fc3e0a22a5dfab8097ba61cbc5feef950788a" dependencies = [ "glob", "libc", @@ -363,18 +357,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstyle", "clap_lex", @@ -382,9 +376,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "codespan-reporting" @@ -406,9 +400,9 @@ dependencies = [ [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] @@ -454,9 +448,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "crunchy" @@ -466,9 +460,9 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "dcv-color-primitives" @@ -493,9 +487,9 @@ dependencies = [ [[package]] name = "either" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "endi" @@ -521,7 +515,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -542,11 +536,10 @@ dependencies = [ [[package]] name = "event-listener" -version = "5.4.1" +version = "5.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2" dependencies = [ - "concurrent-queue", "parking", "pin-project-lite", ] @@ -563,15 +556,15 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fluxer_gpu_rebuild" @@ -609,12 +602,6 @@ dependencies = [ "parking_lot", ] -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "foldhash" version = "0.2.0" @@ -623,9 +610,9 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -638,9 +625,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -648,15 +635,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -665,9 +652,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-lite" @@ -684,32 +671,32 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -724,22 +711,20 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi", - "wasip2", - "wasip3", ] [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "half" @@ -753,29 +738,14 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash 0.1.5", -] - -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" -dependencies = [ - "foldhash 0.2.0", -] - [[package]] name = "hashbrown" version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "foldhash", +] [[package]] name = "heck" @@ -785,9 +755,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" +checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284" [[package]] name = "hex" @@ -795,28 +765,14 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hexf-parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" - -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "indexmap" -version = "2.14.0" +version = "2.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" dependencies = [ "equivalent", - "hashbrown 0.17.1", - "serde", - "serde_core", + "hashbrown", ] [[package]] @@ -845,26 +801,20 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.100" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", "wasm-bindgen", ] -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -894,9 +844,9 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libspa" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2909f3be29d674e7f10604aff18d1bbe1bb03c4cd61c8a8ba19c0b1d162f7d4e" +checksum = "882f7427e7989dcc9d388b7f05c4630390a1d7696f9ffa469cd4a7a48f0b4c40" dependencies = [ "bitflags", "cc", @@ -910,9 +860,9 @@ dependencies = [ [[package]] name = "libspa-sys" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69ad52764fca54818486f3cf75afec844d1f1a1568c24dcee25d41b1ab007dda" +checksum = "3b6e17bdaf63ed0d5e4144022624032b41fd9733112e8c74ac26fc9bf1291924" dependencies = [ "bindgen", "cc", @@ -942,15 +892,15 @@ dependencies = [ [[package]] name = "log" -version = "0.4.32" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "memoffset" @@ -969,9 +919,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "naga" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd91265cc2454558f659b3b4b9640f0ddb8cc6521277f166b8a8c181c898079" +checksum = "a616d2fb8c89516ac2723a581f69d6c18576046bed761bd6b305e5618e6ae130" dependencies = [ "arrayvec", "bit-set", @@ -980,11 +930,11 @@ dependencies = [ "cfg_aliases", "codespan-reporting", "half", - "hashbrown 0.16.1", - "hexf-parse", + "hashbrown", "indexmap", "libm", "log", + "naga-types", "num-traits", "once_cell", "rustc-hash 1.1.0", @@ -993,59 +943,72 @@ dependencies = [ ] [[package]] -name = "napi" -version = "3.9.1" +name = "naga-types" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "590afbf58a6f4f62873cd5cff4468061844bafa1cdf399cc954537c22d768d49" +dependencies = [ + "hashbrown", + "indexmap", + "rustc-hash 1.1.0", + "thiserror", +] + +[[package]] +name = "napi" +version = "3.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "tokio", ] [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading 0.9.0", ] @@ -1171,9 +1134,9 @@ dependencies = [ [[package]] name = "pipewire" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8585aba8a52ad74ccc633b8e293c1dc4277976bd5d510b925533f34fd6685f38" +checksum = "bde71084c4e25959d68f1ea54daa75e5ecdb338e5caf0b5510143b79baa32d5c" dependencies = [ "bitflags", "libc", @@ -1185,9 +1148,9 @@ dependencies = [ [[package]] name = "pipewire-sys" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2089f245b548723e60325773c27f586b7a2372c79ea941b246cd0d654706adc" +checksum = "9ce653f53e63e5b93853218092ee9a8906a5d082c92f3f1db26316955dd63ce0" dependencies = [ "bindgen", "libspa-sys", @@ -1196,9 +1159,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "polling" @@ -1216,29 +1179,19 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" [[package]] name = "portable-atomic-util" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" +checksum = "10ab3eb7f3becc3a1cbc4f2c6f20267996cfc1a6467a873763411b136a122715" dependencies = [ "portable-atomic", ] -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "proc-macro-crate" version = "3.5.0" @@ -1250,9 +1203,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -1265,9 +1218,9 @@ checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5" [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -1295,9 +1248,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -1307,9 +1260,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -1318,9 +1271,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "renderdoc-sys" @@ -1336,15 +1289,15 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ "bitflags", "errno", @@ -1355,9 +1308,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "same-file" @@ -1382,9 +1335,9 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -1392,29 +1345,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -1425,13 +1378,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -1473,9 +1426,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" [[package]] name = "spin" @@ -1494,9 +1447,20 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -1537,22 +1501,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -1567,18 +1531,18 @@ dependencies = [ [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "pin-project-lite", ] [[package]] name = "toml" -version = "1.1.2+spec-1.1.0" +version = "1.1.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +checksum = "920602543f0911ab71da12c50d59701da54c196d1a2bf5cb4b75667f137a406a" dependencies = [ "indexmap", "serde_core", @@ -1600,9 +1564,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.12+spec-1.1.0" +version = "0.25.15+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" +checksum = "1340ea94a5856333492c9064b02c778b191dd2c853778d9609debdcdfea3a614" dependencies = [ "indexmap", "toml_datetime", @@ -1612,18 +1576,18 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ "winnow", ] [[package]] name = "toml_writer" -version = "1.1.1+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" [[package]] name = "tracing" @@ -1644,7 +1608,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1669,15 +1633,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-width" @@ -1685,17 +1649,11 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "uuid" -version = "1.23.1" +version = "1.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "2ef6dac1e96601b4fb3acccccff2139741fcb757cb9a36089bf5be91cfb285ce" dependencies = [ "js-sys", "serde_core", @@ -1718,29 +1676,11 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "wasip2" -version = "1.0.3+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" -dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", -] - [[package]] name = "wasm-bindgen" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -1751,9 +1691,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1761,65 +1701,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "wgpu" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb3feacc458f7bee8bc1737149b42b6c731aa461039a4264a67bb6681646b250" +checksum = "527ccdf43dd5b2e8676eed9984ce00e2bbb0a1b85b70c1969dcb6cd2eb55ab9e" dependencies = [ "arrayvec", "bitflags", @@ -1827,7 +1733,7 @@ dependencies = [ "cfg-if", "cfg_aliases", "document-features", - "hashbrown 0.16.1", + "hashbrown", "log", "portable-atomic", "profiling", @@ -1841,9 +1747,9 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02da3ad1b568337f25513b317870960ef87073ea0945502e44b864b67a8c77b7" +checksum = "14c018fce9b6270aa203c2fdd56f3cce996713534bd757e4ea58c8560b121f14" dependencies = [ "arrayvec", "bit-set", @@ -1852,10 +1758,11 @@ dependencies = [ "bytemuck", "cfg_aliases", "document-features", - "hashbrown 0.16.1", + "hashbrown", "indexmap", "log", "naga", + "naga-types", "once_cell", "parking_lot", "portable-atomic", @@ -1872,29 +1779,32 @@ dependencies = [ [[package]] name = "wgpu-core-deps-windows-linux-android" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb01076d0aa08b0ba9bd741e178b5cc440f5abe99d9581323a4c8b5d1a1916" +checksum = "7586165fd5f6d881cb9ce4bb71f40d6caab2c0f1837e3fc1d9788a197fb6004f" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-hal" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8e1a9e7a8512f276f7c62e018c7fa8d60954303fed2e5750114332049193f" +checksum = "b6b7fb58561a792bc237628ba0792e332de418fefe145f13b5ed8201e6d52f58" dependencies = [ "bitflags", "cfg-if", "cfg_aliases", + "hashbrown", "libloading 0.8.9", "log", "naga", + "naga-types", "portable-atomic", "portable-atomic-util", "raw-window-handle", "renderdoc-sys", + "static_assertions", "thiserror", "wgpu-naga-bridge", "wgpu-types", @@ -1902,9 +1812,9 @@ dependencies = [ [[package]] name = "wgpu-naga-bridge" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c654c483f058800972c3645e95388a7eca31bf9fe1933bc20e036588a0be02" +checksum = "d2f62e73117bb7a62bfd9c5a5841438a823f6566c6442a808ee269d2d055c081" dependencies = [ "naga", "wgpu-types", @@ -1912,14 +1822,16 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9bcc31518a0e9735aefebedb5f7a9ef3ed1c42549c9f4c882fa9060ceaac639" +checksum = "99dad6f1fbdbbdb4c278a6508b059d44688f5cebddf78d005a46a31340269286" dependencies = [ "bitflags", "bytemuck", "log", + "naga-types", "raw-window-handle", + "static_assertions", ] [[package]] @@ -1970,112 +1882,18 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" dependencies = [ "memchr", ] -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" - -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "zbus" -version = "5.16.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee682d202a77e4a9f3b2c2bdf48a7b28af5c08c34ddf66f98c93e5e39464285" +checksum = "5db4be7c075cb421e4b7ee645541604239bd243ba7c357511f4ff3a74b555907" dependencies = [ "async-broadcast", "async-executor", @@ -2108,14 +1926,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.16.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf1bd45a81a103745b1757754762a26e8cd01e4532e4d6c8ec431624b80d1d6" +checksum = "2990635d09ade6df1868f72f8cac69a876a90981e8bd3c40b1be413f8dc88f40" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "zbus_names", "zvariant", "zvariant_utils", @@ -2123,9 +1941,9 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.2" +version = "4.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" +checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" dependencies = [ "serde", "winnow", @@ -2133,67 +1951,77 @@ dependencies = [ ] [[package]] -name = "zerocopy" -version = "0.8.50" +name = "zcheapstr" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "d1afec51604565183aeb5c54c20aeab286120d4e4460f7f76e3e8bb8c0d99473" +dependencies = [ + "serde", +] + +[[package]] +name = "zerocopy" +version = "0.8.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" [[package]] name = "zvariant" -version = "5.12.0" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a192a0bde63360d77a7523c833d4b4ce6070a927e2c53246e4c540b1a3e27be0" +checksum = "c1d34c27cc6cdd1f458427519dd6b8612f7b7e3f7b9a0b2355d041dda9869147" dependencies = [ "endi", "enumflags2", "serde", "winnow", + "zcheapstr", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.12.0" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc6cde9c01c511074be97f7ccb6c19d0da89e3f8662e812e999dcfd4638737" +checksum = "864155e69b4352db0c7f374917bf45d1e0c8d17659c8b3dbf9795f3673f8c497" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "3.4.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e8535915cfa75547e559d8c68e8139909a4aeee076831e4ef7fc59d8172c4d6" +checksum = "bad0294361a320b694a328460dc73add56c306150f5cb6bfafc44446120008a3" dependencies = [ "proc-macro2", "quote", "serde", - "syn", + "syn 3.0.6", "winnow", ] diff --git a/fluxer_desktop/native/linux-screen-capture/Cargo.toml b/fluxer_desktop/native/linux-screen-capture/Cargo.toml index 430bd8d45..0d4169ed3 100644 --- a/fluxer_desktop/native/linux-screen-capture/Cargo.toml +++ b/fluxer_desktop/native/linux-screen-capture/Cargo.toml @@ -16,26 +16,26 @@ default = [] wgpu = ["dep:wgpu", "fluxer_gpu_rebuild/wgpu"] [dependencies] -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8", "async"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8", "async"]} +napi-derive = "3.6.7" parking_lot = "0.12" fluxer_screen_frame_bus = { path = "../screen-frame-bus" } fluxer_gpu_rebuild = { path = "../gpu-rebuild" } -wgpu = { version = "29", optional = true, default-features = false } +wgpu = { version = "30", optional = true, default-features = false } [target.'cfg(target_os = "linux")'.dependencies] async-io = "2.6.0" dcv-color-primitives = "1.0" futures-lite = "2.6.1" libc = "0.2" -pipewire = { version = "0.10.0", features = ["v0_3_33"] } -zbus = "5.16.0" +pipewire = { version = "0.10.1", features = ["v0_3_33"] } +zbus = "5.19.0" [dev-dependencies] criterion = { version = "0.8", default-features = false, features = ["cargo_bench_support"] } [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" [[bench]] name = "pipewire_callback" diff --git a/fluxer_desktop/native/linux-screen-capture/src/game_capture.rs b/fluxer_desktop/native/linux-screen-capture/src/game_capture.rs index a4af0db8c..eff48f447 100644 --- a/fluxer_desktop/native/linux-screen-capture/src/game_capture.rs +++ b/fluxer_desktop/native/linux-screen-capture/src/game_capture.rs @@ -2195,8 +2195,8 @@ mod tests { #[test] fn host_mapped_import_reads_cpu_nv12_and_preserves_source_dmabuf_metadata() { let mut bgra = vec![0u8; 16 * 16 * 4]; - for pixel in bgra.chunks_exact_mut(4) { - pixel.copy_from_slice(&[0, 0, 255, 255]); + for pixel in bgra.as_chunks_mut::<4>().0 { + *pixel = [0, 0, 255, 255]; } let fd = memfd_with_data("fluxer-host-mapped-texture-test", &bgra); let (callback, _observed) = lifecycle_recorder(); diff --git a/fluxer_desktop/native/linux-screen-capture/src/nv12_packing.rs b/fluxer_desktop/native/linux-screen-capture/src/nv12_packing.rs index 7cc911166..1e3f7ab87 100644 --- a/fluxer_desktop/native/linux-screen-capture/src/nv12_packing.rs +++ b/fluxer_desktop/native/linux-screen-capture/src/nv12_packing.rs @@ -352,7 +352,7 @@ mod tests { for byte in &dst[..8] { assert_eq!(*byte, 16); } - for chunk in dst[8..].chunks_exact(2) { + for chunk in dst[8..].as_chunks::<2>().0 { assert_eq!(chunk[0], 128); assert_eq!(chunk[1], 128); } @@ -372,7 +372,7 @@ mod tests { for byte in &dst[..8] { assert!(*byte >= 230 && *byte <= 240, "luma out of range: {byte}"); } - for chunk in dst[8..].chunks_exact(2) { + for chunk in dst[8..].as_chunks::<2>().0 { assert!( chunk[0] >= 124 && chunk[0] <= 132, "U out of range: {}", diff --git a/fluxer_desktop/native/mac-app-audio/Cargo.lock b/fluxer_desktop/native/mac-app-audio/Cargo.lock index 55b9ce753..eb74a3913 100644 --- a/fluxer_desktop/native/mac-app-audio/Cargo.lock +++ b/fluxer_desktop/native/mac-app-audio/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block2" @@ -19,24 +19,24 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "dispatch2" @@ -89,9 +89,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -104,9 +104,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -114,15 +114,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -131,38 +131,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -177,9 +177,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -202,19 +202,20 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -224,42 +225,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -459,18 +460,18 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -486,9 +487,9 @@ dependencies = [ [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "scopeguard" @@ -510,15 +511,26 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -527,24 +539,24 @@ dependencies = [ [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "pin-project-lite", ] [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "windows-link" diff --git a/fluxer_desktop/native/mac-app-audio/Cargo.toml b/fluxer_desktop/native/mac-app-audio/Cargo.toml index 1938cb195..7f828e533 100644 --- a/fluxer_desktop/native/mac-app-audio/Cargo.toml +++ b/fluxer_desktop/native/mac-app-audio/Cargo.toml @@ -12,15 +12,15 @@ resolver = "2" crate-type = ["cdylib", "rlib"] [dependencies] -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8", "async"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8", "async"]} +napi-derive = "3.6.7" parking_lot = "0.12" [target.'cfg(target_os = "macos")'.dependencies.fluxer_screen_frame_bus] path = "../screen-frame-bus" [target.'cfg(target_os = "macos")'.dependencies] -libc = "0.2.186" +libc = "0.2.189" objc2 = "0.6" objc2-foundation = {version = "0.3", features = ["NSString", "NSArray", "NSDictionary", "NSError", "NSValue", "NSBundle", "NSProcessInfo"]} objc2-screen-capture-kit = {version = "0.3", features = ["SCStream", "SCShareableContent", "objc2-core-graphics", "objc2-core-media", "objc2-core-foundation", "block2", "dispatch2", "libc"]} @@ -33,4 +33,4 @@ block2 = "0.6" dispatch2 = "0.3" [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" diff --git a/fluxer_desktop/native/mac-app-audio/package.json b/fluxer_desktop/native/mac-app-audio/package.json index cb037a2ab..7b368ef42 100644 --- a/fluxer_desktop/native/mac-app-audio/package.json +++ b/fluxer_desktop/native/mac-app-audio/package.json @@ -31,6 +31,6 @@ ] }, "devDependencies": { - "vitest": "^2.1.0" + "vitest": "catalog:" } } diff --git a/fluxer_desktop/native/mac-clipboard/Cargo.lock b/fluxer_desktop/native/mac-clipboard/Cargo.lock index 42aa08c4c..5726be53f 100644 --- a/fluxer_desktop/native/mac-clipboard/Cargo.lock +++ b/fluxer_desktop/native/mac-clipboard/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block2" @@ -19,24 +19,24 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "dispatch2" @@ -65,9 +65,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -80,9 +80,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -90,15 +90,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -107,38 +107,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -153,9 +153,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -169,19 +169,20 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -190,42 +191,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -280,27 +281,27 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "semver" @@ -316,9 +317,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -327,15 +339,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "windows-link" diff --git a/fluxer_desktop/native/mac-clipboard/Cargo.toml b/fluxer_desktop/native/mac-clipboard/Cargo.toml index 1d0f69874..78665b8f9 100644 --- a/fluxer_desktop/native/mac-clipboard/Cargo.toml +++ b/fluxer_desktop/native/mac-clipboard/Cargo.toml @@ -12,8 +12,8 @@ resolver = "2" crate-type = ["cdylib", "rlib"] [dependencies] -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8"]} +napi-derive = "3.6.7" [target.'cfg(target_os = "macos")'.dependencies] dispatch2 = "0.3.1" @@ -22,4 +22,4 @@ objc2-app-kit = {version = "0.3.2", default-features = false, features = ["NSPas objc2-foundation = {version = "0.3.2", default-features = false, features = ["NSArray", "NSObject", "NSString", "NSURL", "std"]} [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" diff --git a/fluxer_desktop/native/mac-screen-capture/Cargo.lock b/fluxer_desktop/native/mac-screen-capture/Cargo.lock index c0d64aebd..b6371272e 100644 --- a/fluxer_desktop/native/mac-screen-capture/Cargo.lock +++ b/fluxer_desktop/native/mac-screen-capture/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -40,9 +40,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block2" @@ -61,9 +61,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.63" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", "shlex", @@ -71,9 +71,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "ciborium" @@ -104,18 +104,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstyle", "clap_lex", @@ -123,15 +123,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] @@ -177,9 +177,9 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "dispatch2" @@ -195,15 +195,15 @@ dependencies = [ [[package]] name = "either" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fluxer_encoder_ring" @@ -255,9 +255,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -270,9 +270,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -280,15 +280,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -297,38 +297,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -369,9 +369,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -394,19 +394,20 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -416,42 +417,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -688,18 +689,18 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -715,9 +716,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -727,9 +728,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -738,15 +739,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "same-file" @@ -771,9 +772,9 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -781,29 +782,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -826,15 +827,26 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -853,24 +865,24 @@ dependencies = [ [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "pin-project-lite", ] [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "walkdir" @@ -966,7 +978,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -977,7 +989,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1034,26 +1046,26 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/fluxer_desktop/native/mac-screen-capture/Cargo.toml b/fluxer_desktop/native/mac-screen-capture/Cargo.toml index d59364589..14c031086 100644 --- a/fluxer_desktop/native/mac-screen-capture/Cargo.toml +++ b/fluxer_desktop/native/mac-screen-capture/Cargo.toml @@ -12,8 +12,8 @@ resolver = "2" crate-type = ["cdylib", "rlib"] [dependencies] -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8", "async"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8", "async"]} +napi-derive = "3.6.7" fluxer_encoder_ring = {path = "../encoder-ring"} parking_lot = "0.12" @@ -21,7 +21,7 @@ parking_lot = "0.12" path = "../screen-frame-bus" [target.'cfg(target_os = "macos")'.dependencies] -libc = "0.2.186" +libc = "0.2.189" objc2 = "0.6" objc2-foundation = {version = "0.3", features = ["NSString", "NSArray", "NSDictionary", "NSError", "NSValue", "NSBundle", "NSProcessInfo"]} objc2-screen-capture-kit = {version = "0.3", features = ["SCStream", "SCShareableContent", "objc2-core-graphics", "objc2-core-media", "objc2-core-foundation", "block2", "dispatch2", "libc"]} @@ -35,7 +35,7 @@ block2 = "0.6" dispatch2 = "0.3" [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" [dev-dependencies] criterion = {version = "0.8", default-features = false, features = ["cargo_bench_support"]} diff --git a/fluxer_desktop/native/mac-sysctl/Cargo.lock b/fluxer_desktop/native/mac-sysctl/Cargo.lock index 948f90e78..3e5b5b905 100644 --- a/fluxer_desktop/native/mac-sysctl/Cargo.lock +++ b/fluxer_desktop/native/mac-sysctl/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "byteorder" @@ -16,24 +16,24 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "enum-as-inner" @@ -44,7 +44,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -60,9 +60,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -75,9 +75,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -85,15 +85,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -102,38 +102,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -154,9 +154,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -170,19 +170,20 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -192,42 +193,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -246,27 +247,27 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "same-file" @@ -291,9 +292,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -316,44 +328,44 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "pin-project-lite", ] [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "walkdir" diff --git a/fluxer_desktop/native/mac-sysctl/Cargo.toml b/fluxer_desktop/native/mac-sysctl/Cargo.toml index 8c2a4f322..d242418b1 100644 --- a/fluxer_desktop/native/mac-sysctl/Cargo.toml +++ b/fluxer_desktop/native/mac-sysctl/Cargo.toml @@ -12,10 +12,10 @@ resolver = "2" crate-type = ["cdylib", "rlib"] [dependencies] -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8", "tokio_rt"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8", "tokio_rt"]} +napi-derive = "3.6.7" sysctl = "0.7.1" -tokio = {version = "1.52.3", features = ["rt"]} +tokio = {version = "1.53.1", features = ["rt"]} [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" diff --git a/fluxer_desktop/native/mac-tcc/Cargo.lock b/fluxer_desktop/native/mac-tcc/Cargo.lock index 777a75d2d..ba3ed2c31 100644 --- a/fluxer_desktop/native/mac-tcc/Cargo.lock +++ b/fluxer_desktop/native/mac-tcc/Cargo.lock @@ -4,21 +4,21 @@ version = 4 [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] @@ -65,9 +65,9 @@ dependencies = [ [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "fluxer_mac_tcc" @@ -92,13 +92,13 @@ dependencies = [ [[package]] name = "foreign-types-macros" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -109,9 +109,9 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -124,9 +124,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -134,15 +134,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -151,38 +151,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -197,9 +197,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -213,19 +213,20 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -234,42 +235,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -306,27 +307,27 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "semver" @@ -342,9 +343,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -353,15 +365,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "windows-link" diff --git a/fluxer_desktop/native/mac-tcc/Cargo.toml b/fluxer_desktop/native/mac-tcc/Cargo.toml index bcb0db01f..06edf93d3 100644 --- a/fluxer_desktop/native/mac-tcc/Cargo.toml +++ b/fluxer_desktop/native/mac-tcc/Cargo.toml @@ -12,12 +12,12 @@ resolver = "2" crate-type = ["cdylib", "rlib"] [dependencies] -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8"]} +napi-derive = "3.6.7" [target.'cfg(target_os = "macos")'.dependencies] core-graphics = "0.25.0" objc2-io-kit = {version = "0.3.2", default-features = false, features = ["std", "hidsystem"]} [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" diff --git a/fluxer_desktop/native/macos-input-hook/Cargo.lock b/fluxer_desktop/native/macos-input-hook/Cargo.lock index af2800230..92333c330 100644 --- a/fluxer_desktop/native/macos-input-hook/Cargo.lock +++ b/fluxer_desktop/native/macos-input-hook/Cargo.lock @@ -4,21 +4,21 @@ version = 4 [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] @@ -65,9 +65,9 @@ dependencies = [ [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "fluxer_macos_input_hook" @@ -93,13 +93,13 @@ dependencies = [ [[package]] name = "foreign-types-macros" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -110,9 +110,9 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -125,9 +125,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -135,15 +135,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -152,38 +152,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -198,9 +198,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -214,19 +214,20 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -235,42 +236,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -307,27 +308,27 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "semver" @@ -343,9 +344,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -354,15 +366,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "windows-link" diff --git a/fluxer_desktop/native/macos-input-hook/Cargo.toml b/fluxer_desktop/native/macos-input-hook/Cargo.toml index 469d21487..88a61a8b3 100644 --- a/fluxer_desktop/native/macos-input-hook/Cargo.toml +++ b/fluxer_desktop/native/macos-input-hook/Cargo.toml @@ -12,8 +12,8 @@ resolver = "2" crate-type = ["cdylib", "rlib"] [dependencies] -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8"]} +napi-derive = "3.6.7" [target.'cfg(target_os = "macos")'.dependencies] core-foundation = "0.10.1" @@ -21,4 +21,4 @@ core-graphics = "0.25.0" objc2-core-graphics = {version = "0.3.2", default-features = false, features = ["std", "CGEvent"]} [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" diff --git a/fluxer_desktop/native/platform-info/Cargo.lock b/fluxer_desktop/native/platform-info/Cargo.lock index 0d85ea077..de2a8b0a1 100644 --- a/fluxer_desktop/native/platform-info/Cargo.lock +++ b/fluxer_desktop/native/platform-info/Cargo.lock @@ -2,32 +2,26 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "anyhow" -version = "1.0.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" - [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block-buffer" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", ] [[package]] name = "cc" -version = "1.2.62" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", "shlex", @@ -35,9 +29,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "const-oid" @@ -47,18 +41,18 @@ checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] [[package]] name = "cpufeatures" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" dependencies = [ "libc", ] @@ -74,9 +68,9 @@ dependencies = [ [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "digest" @@ -89,12 +83,6 @@ dependencies = [ "crypto-common", ] -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - [[package]] name = "errno" version = "0.3.14" @@ -107,15 +95,15 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fluxer_desktop_native" @@ -139,17 +127,11 @@ dependencies = [ "windows", ] -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -162,9 +144,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -172,15 +154,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -189,38 +171,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -235,82 +217,29 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi", - "wasip2", - "wasip3", ] -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash", -] - -[[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - [[package]] name = "hybrid-array" -version = "0.4.12" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" dependencies = [ "typenum", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - -[[package]] -name = "indexmap" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" -dependencies = [ - "equivalent", - "hashbrown 0.17.1", - "serde", - "serde_core", -] - -[[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -328,27 +257,22 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" -[[package]] -name = "log" -version = "0.4.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" - [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -357,42 +281,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -461,30 +385,20 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -497,15 +411,15 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ "bitflags", "errno", @@ -520,48 +434,6 @@ version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.150" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - [[package]] name = "sha2" version = "0.11.0" @@ -575,9 +447,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "slab" @@ -587,9 +459,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -611,79 +494,21 @@ dependencies = [ [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - -[[package]] -name = "wasip2" -version = "1.0.3+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" -dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", -] - -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap", - "semver", -] +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "windows" @@ -738,7 +563,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -749,7 +574,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -803,103 +628,3 @@ checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" dependencies = [ "windows-link", ] - -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" - -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - -[[package]] -name = "zmij" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/fluxer_desktop/native/platform-info/Cargo.toml b/fluxer_desktop/native/platform-info/Cargo.toml index d402de4d3..5288bc6d5 100644 --- a/fluxer_desktop/native/platform-info/Cargo.toml +++ b/fluxer_desktop/native/platform-info/Cargo.toml @@ -13,8 +13,8 @@ crate-type = ["cdylib", "rlib"] [dependencies] fluxer_desktop_native = {path = "../rust"} -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8"]} +napi-derive = "3.6.7" [target.'cfg(target_os = "macos")'.dependencies] objc2 = {version = "0.6.4", features = ["exception"]} @@ -28,7 +28,7 @@ windows = {version = "0.62.2", features = [ ]} [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" [dev-dependencies] tempfile = "3.27" diff --git a/fluxer_desktop/native/rt-thread/Cargo.lock b/fluxer_desktop/native/rt-thread/Cargo.lock index d8ab7cab3..18b09c96d 100644 --- a/fluxer_desktop/native/rt-thread/Cargo.lock +++ b/fluxer_desktop/native/rt-thread/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -52,9 +52,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.63" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", "shlex", @@ -62,9 +62,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "ciborium" @@ -95,18 +95,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstyle", "clap_lex", @@ -114,9 +114,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "criterion" @@ -155,9 +155,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "622f3fc73690be383c7214310406f28a90e6edeadc3cea882f9d71e495b9711a" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -165,18 +165,18 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.20" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" +checksum = "dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "crunchy" @@ -186,15 +186,15 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "either" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fluxer_rt_thread" @@ -207,21 +207,21 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-core", "futures-task", @@ -257,9 +257,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.100" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", @@ -268,15 +268,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "num-traits" @@ -345,18 +345,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -383,9 +383,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -395,9 +395,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -406,15 +406,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "same-file" @@ -427,9 +427,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -437,29 +437,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -482,9 +482,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -503,9 +514,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "walkdir" @@ -519,9 +530,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -532,9 +543,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -542,31 +553,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.100" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" dependencies = [ "js-sys", "wasm-bindgen", @@ -656,7 +667,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -667,7 +678,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -724,26 +735,26 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/fluxer_desktop/native/rust/Cargo.lock b/fluxer_desktop/native/rust/Cargo.lock index f6364a390..8bc3ec26e 100644 --- a/fluxer_desktop/native/rust/Cargo.lock +++ b/fluxer_desktop/native/rust/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -32,12 +32,6 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" -[[package]] -name = "anyhow" -version = "1.0.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" - [[package]] name = "autocfg" version = "1.5.1" @@ -61,15 +55,15 @@ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block-buffer" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", ] @@ -88,9 +82,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.63" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", "shlex", @@ -98,9 +92,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "ciborium" @@ -131,18 +125,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstyle", "clap_lex", @@ -150,9 +144,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "const-oid" @@ -162,9 +156,9 @@ checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] name = "cpufeatures" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" dependencies = [ "libc", ] @@ -206,9 +200,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "622f3fc73690be383c7214310406f28a90e6edeadc3cea882f9d71e495b9711a" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -216,18 +210,18 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.20" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" +checksum = "dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "crunchy" @@ -257,15 +251,9 @@ dependencies = [ [[package]] name = "either" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "errno" @@ -279,15 +267,15 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fluxer_desktop_native" @@ -305,29 +293,23 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-core", "futures-task", @@ -349,15 +331,13 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi 6.0.0", - "wasip2", - "wasip3", ] [[package]] @@ -371,54 +351,15 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash", -] - -[[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - [[package]] name = "hybrid-array" -version = "0.4.12" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" dependencies = [ "typenum", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - -[[package]] -name = "indexmap" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" -dependencies = [ - "equivalent", - "hashbrown 0.17.1", - "serde", - "serde_core", -] - [[package]] name = "itertools" version = "0.13.0" @@ -436,26 +377,20 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.100" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", "wasm-bindgen", ] -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "linux-raw-sys" @@ -463,17 +398,11 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" -[[package]] -name = "log" -version = "0.4.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" - [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "num-traits" @@ -549,21 +478,11 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -595,9 +514,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -616,9 +535,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ "rand_chacha", "rand_core", @@ -674,9 +593,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -686,9 +605,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -697,15 +616,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ "bitflags", "errno", @@ -716,9 +635,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "rusty-fork" @@ -741,17 +660,11 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "semver" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" - [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -759,29 +672,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -815,9 +728,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -831,7 +755,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.4.3", "once_cell", "rustix", "windows-sys", @@ -861,15 +785,9 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "wait-timeout" @@ -892,27 +810,18 @@ dependencies = [ [[package]] name = "wasip2" -version = "1.0.3+wasi-0.2.9" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -923,9 +832,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -933,65 +842,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "web-sys" -version = "0.3.100" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" dependencies = [ "js-sys", "wasm-bindgen", @@ -1043,122 +918,34 @@ dependencies = [ "windows-link", ] -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - [[package]] name = "wit-bindgen" version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "zerocopy" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/fluxer_desktop/native/rust/fuzz/Cargo.lock b/fluxer_desktop/native/rust/fuzz/Cargo.lock index b76f23aad..862e21cbd 100644 --- a/fluxer_desktop/native/rust/fuzz/Cargo.lock +++ b/fluxer_desktop/native/rust/fuzz/Cargo.lock @@ -13,18 +13,18 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", ] [[package]] name = "cc" -version = "1.2.62" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", "jobserver", @@ -34,9 +34,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "const-oid" @@ -46,9 +46,9 @@ checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] name = "cpufeatures" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" dependencies = [ "libc", ] @@ -86,9 +86,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fluxer_desktop_native" @@ -108,30 +108,29 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.4" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi", - "wasip2", ] [[package]] name = "hybrid-array" -version = "0.4.12" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" dependencies = [ "typenum", ] [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ "getrandom", "libc", @@ -139,15 +138,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libfuzzer-sys" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" +checksum = "a9fd2f41a1cba099f79a0b6b6c35656cf7c03351a7bae8ff0f28f25270f929d2" dependencies = [ "arbitrary", "cc", @@ -155,27 +154,27 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" -version = "5.3.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "sha2" @@ -190,15 +189,15 @@ dependencies = [ [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" dependencies = [ "proc-macro2", "quote", @@ -207,27 +206,12 @@ dependencies = [ [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "wasip2" -version = "1.0.3+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" -dependencies = [ - "wit-bindgen", -] - -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" diff --git a/fluxer_desktop/native/rust/src/linux_evdev/event.rs b/fluxer_desktop/native/rust/src/linux_evdev/event.rs index 746e65aa1..0d09d1d5c 100644 --- a/fluxer_desktop/native/rust/src/linux_evdev/event.rs +++ b/fluxer_desktop/native/rust/src/linux_evdev/event.rs @@ -44,11 +44,11 @@ pub fn parse_input_event(bytes: &[u8]) -> Option { } pub fn parse_input_events(bytes: &[u8]) -> impl Iterator + '_ { - bytes.chunks_exact(InputEvent::BYTE_LEN).map(|chunk| { - let mut event = [0_u8; InputEvent::BYTE_LEN]; - event.copy_from_slice(chunk); - InputEvent::from_ne_bytes(event) - }) + bytes + .as_chunks::<{ InputEvent::BYTE_LEN }>() + .0 + .iter() + .map(|chunk| InputEvent::from_ne_bytes(*chunk)) } #[cfg(test)] diff --git a/fluxer_desktop/native/screen-frame-bus/Cargo.lock b/fluxer_desktop/native/screen-frame-bus/Cargo.lock index 51b8f0a5f..ac49d7a42 100644 --- a/fluxer_desktop/native/screen-frame-bus/Cargo.lock +++ b/fluxer_desktop/native/screen-frame-bus/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -28,9 +28,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android_system_properties" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" dependencies = [ "libc", ] @@ -49,9 +49,9 @@ checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "arrayvec" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" [[package]] name = "ash" @@ -70,9 +70,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "bit-set" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ddef2995421ab6a5c779542c81ee77c115206f4ad9d5a8e05f4ff49716a3dd" +checksum = "09ec2f926cc3060f09db9ebc5b52823d85268d24bb917e472c0c4bea35780a7d" dependencies = [ "bit-vec", ] @@ -85,9 +85,9 @@ checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block2" @@ -106,22 +106,22 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytemuck" -version = "1.25.0" +version = "1.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.2" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" +checksum = "6a1f896587b6f2c069c73d2f0913e2d590c3990285cd2f0b6aa02b786b4c679c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -132,9 +132,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.63" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", "shlex", @@ -142,15 +142,15 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] name = "ciborium" @@ -181,18 +181,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstyle", "clap_lex", @@ -200,9 +200,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "codespan-reporting" @@ -284,9 +284,9 @@ dependencies = [ [[package]] name = "either" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "equivalent" @@ -296,9 +296,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fluxer_gpu_rebuild" @@ -318,12 +318,6 @@ dependencies = [ "wgpu", ] -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "foldhash" version = "0.2.0" @@ -332,21 +326,21 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-core", "futures-task", @@ -400,26 +394,6 @@ dependencies = [ "windows", ] -[[package]] -name = "gpu-descriptor" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" -dependencies = [ - "bitflags", - "gpu-descriptor-types", - "hashbrown 0.15.5", -] - -[[package]] -name = "gpu-descriptor-types" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" -dependencies = [ - "bitflags", -] - [[package]] name = "half" version = "2.7.1" @@ -432,15 +406,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash 0.1.5", -] - [[package]] name = "hashbrown" version = "0.16.1" @@ -449,7 +414,7 @@ checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", - "foldhash 0.2.0", + "foldhash", ] [[package]] @@ -457,18 +422,15 @@ name = "hashbrown" version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - -[[package]] -name = "hexf-parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" +dependencies = [ + "foldhash", +] [[package]] name = "indexmap" -version = "2.14.0" +version = "2.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" dependencies = [ "equivalent", "hashbrown 0.17.1", @@ -514,14 +476,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" dependencies = [ "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "js-sys" -version = "0.3.100" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", @@ -547,9 +509,9 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -584,21 +546,21 @@ dependencies = [ [[package]] name = "log" -version = "0.4.32" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "naga" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd91265cc2454558f659b3b4b9640f0ddb8cc6521277f166b8a8c181c898079" +checksum = "a616d2fb8c89516ac2723a581f69d6c18576046bed761bd6b305e5618e6ae130" dependencies = [ "arrayvec", "bit-set", @@ -607,11 +569,11 @@ dependencies = [ "cfg_aliases", "codespan-reporting", "half", - "hashbrown 0.16.1", - "hexf-parse", + "hashbrown 0.17.1", "indexmap", "libm", "log", + "naga-types", "num-traits", "once_cell", "rustc-hash", @@ -620,6 +582,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "naga-types" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "590afbf58a6f4f62873cd5cff4468061844bafa1cdf399cc954537c22d768d49" +dependencies = [ + "hashbrown 0.17.1", + "indexmap", + "rustc-hash", + "thiserror", +] + [[package]] name = "ndk-sys" version = "0.6.0+11769913" @@ -659,6 +633,18 @@ dependencies = [ "objc2", ] +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "dispatch2", + "objc2", + "objc2-core-foundation", + "objc2-io-surface", +] + [[package]] name = "objc2-encode" version = "4.1.0" @@ -676,6 +662,17 @@ dependencies = [ "objc2-core-foundation", ] +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags", + "objc2", + "objc2-core-foundation", +] + [[package]] name = "objc2-metal" version = "0.3.2" @@ -697,6 +694,7 @@ dependencies = [ "bitflags", "objc2", "objc2-core-foundation", + "objc2-core-graphics", "objc2-foundation", "objc2-metal", ] @@ -715,9 +713,9 @@ checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" [[package]] name = "ordered-float" -version = "5.3.0" +version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7d950ca161dc355eaf28f82b11345ed76c6e1f6eb1f4f4479e0323b9e2fbd0e" +checksum = "8c7c9e0d9b23589f26070720bac724174bfec1083e82f7854cdd0267518343c0" dependencies = [ "num-traits", ] @@ -763,21 +761,21 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "portable-atomic" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" [[package]] name = "portable-atomic-util" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" +checksum = "10ab3eb7f3becc3a1cbc4f2c6f20267996cfc1a6467a873763411b136a122715" dependencies = [ "portable-atomic", ] @@ -790,9 +788,9 @@ checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -805,9 +803,9 @@ checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5" [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -847,9 +845,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -859,9 +857,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -870,9 +868,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "renderdoc-sys" @@ -888,9 +886,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "same-file" @@ -909,9 +907,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -919,29 +917,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -973,9 +971,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.15.1" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" [[package]] name = "spirv" @@ -994,9 +992,20 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -1014,22 +1023,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -1044,9 +1053,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-width" @@ -1072,9 +1081,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -1085,9 +1094,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.73" +version = "0.4.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54568702fabf5d4849ce2b90fadfa64168a097eaf4b351ce9df8b687a0086aaf" +checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928" dependencies = [ "js-sys", "wasm-bindgen", @@ -1095,9 +1104,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1105,22 +1114,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.123" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] @@ -1139,9 +1148,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.100" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" dependencies = [ "js-sys", "wasm-bindgen", @@ -1149,9 +1158,9 @@ dependencies = [ [[package]] name = "wgpu" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb3feacc458f7bee8bc1737149b42b6c731aa461039a4264a67bb6681646b250" +checksum = "527ccdf43dd5b2e8676eed9984ce00e2bbb0a1b85b70c1969dcb6cd2eb55ab9e" dependencies = [ "arrayvec", "bitflags", @@ -1159,7 +1168,7 @@ dependencies = [ "cfg-if", "cfg_aliases", "document-features", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "js-sys", "log", "naga", @@ -1179,9 +1188,9 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02da3ad1b568337f25513b317870960ef87073ea0945502e44b864b67a8c77b7" +checksum = "14c018fce9b6270aa203c2fdd56f3cce996713534bd757e4ea58c8560b121f14" dependencies = [ "arrayvec", "bit-set", @@ -1190,10 +1199,11 @@ dependencies = [ "bytemuck", "cfg_aliases", "document-features", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "indexmap", "log", "naga", + "naga-types", "once_cell", "parking_lot", "portable-atomic", @@ -1212,36 +1222,36 @@ dependencies = [ [[package]] name = "wgpu-core-deps-apple" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e51b5447e144b3dbba4feb01f80f4fa21696fa0cd99afb2c3df1affd6fdb28" +checksum = "061f3d319a40d39d00b1ecc2c33b89fe21d4e6fe01859df3500a3a8ecccd6b68" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-core-deps-emscripten" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3487cd6293a963bc5c0c0396f6a2192043c50003c07f4efdccbad3d90ec9d819" +checksum = "d98b86cf4abf524a902dd35f18ca6a3f08fc2ae9847c8f10b48e30491b1f0b86" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-core-deps-windows-linux-android" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb01076d0aa08b0ba9bd741e178b5cc440f5abe99d9581323a4c8b5d1a1916" +checksum = "7586165fd5f6d881cb9ce4bb71f40d6caab2c0f1837e3fc1d9788a197fb6004f" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-hal" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8e1a9e7a8512f276f7c62e018c7fa8d60954303fed2e5750114332049193f" +checksum = "b6b7fb58561a792bc237628ba0792e332de418fefe145f13b5ed8201e6d52f58" dependencies = [ "android_system_properties", "arrayvec", @@ -1255,17 +1265,18 @@ dependencies = [ "glow", "glutin_wgl_sys", "gpu-allocator", - "gpu-descriptor", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "js-sys", "khronos-egl", "libc", "libloading", "log", "naga", + "naga-types", "ndk-sys", "objc2", "objc2-core-foundation", + "objc2-core-graphics", "objc2-foundation", "objc2-metal", "objc2-quartz-core", @@ -1280,6 +1291,7 @@ dependencies = [ "raw-window-metal", "renderdoc-sys", "smallvec", + "static_assertions", "thiserror", "wasm-bindgen", "wayland-sys", @@ -1293,9 +1305,9 @@ dependencies = [ [[package]] name = "wgpu-naga-bridge" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c654c483f058800972c3645e95388a7eca31bf9fe1933bc20e036588a0be02" +checksum = "d2f62e73117bb7a62bfd9c5a5841438a823f6566c6442a808ee269d2d055c081" dependencies = [ "naga", "wgpu-types", @@ -1303,15 +1315,17 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "29.0.3" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9bcc31518a0e9735aefebedb5f7a9ef3ed1c42549c9f4c882fa9060ceaac639" +checksum = "99dad6f1fbdbbdb4c278a6508b059d44688f5cebddf78d005a46a31340269286" dependencies = [ "bitflags", "bytemuck", "js-sys", "log", + "naga-types", "raw-window-handle", + "static_assertions", "web-sys", ] @@ -1399,7 +1413,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1410,7 +1424,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1467,32 +1481,32 @@ dependencies = [ [[package]] name = "xml-rs" -version = "0.8.28" +version = "0.8.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" +checksum = "e450f9b2ed1dff33c94c12589a87338689467b9c4f5d8a5710bd09a847d2c8a7" [[package]] name = "zerocopy" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/fluxer_desktop/native/screen-frame-bus/Cargo.toml b/fluxer_desktop/native/screen-frame-bus/Cargo.toml index ffc03863e..75ac01e75 100644 --- a/fluxer_desktop/native/screen-frame-bus/Cargo.toml +++ b/fluxer_desktop/native/screen-frame-bus/Cargo.toml @@ -17,7 +17,7 @@ wgpu = ["dep:wgpu", "fluxer_gpu_rebuild/wgpu"] [dependencies] parking_lot = "0.12" -wgpu = { version = "29", optional = true } +wgpu = { version = "30", optional = true } fluxer_gpu_rebuild = { path = "../gpu-rebuild" } [dev-dependencies] diff --git a/fluxer_desktop/native/system-hunspell/Cargo.lock b/fluxer_desktop/native/system-hunspell/Cargo.lock index 2df673835..63f3b8b9f 100644 --- a/fluxer_desktop/native/system-hunspell/Cargo.lock +++ b/fluxer_desktop/native/system-hunspell/Cargo.lock @@ -4,19 +4,13 @@ version = 4 [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] -[[package]] -name = "anyhow" -version = "1.0.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" - [[package]] name = "bindgen" version = "0.61.0" @@ -34,7 +28,7 @@ dependencies = [ "quote", "regex", "rustc-hash 1.1.0", - "shlex", + "shlex 1.3.0", "syn 1.0.109", "which", ] @@ -47,27 +41,27 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block-buffer" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", ] [[package]] name = "cc" -version = "1.2.62" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", - "shlex", + "shlex 2.0.1", ] [[package]] @@ -81,15 +75,15 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "clang-sys" -version = "1.8.1" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "157a8ba7b480713b56f4c09fd13fc3e0a22a5dfab8097ba61cbc5feef950788a" dependencies = [ "glob", "libc", @@ -104,18 +98,18 @@ checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] [[package]] name = "cpufeatures" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" dependencies = [ "libc", ] @@ -131,9 +125,9 @@ dependencies = [ [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "digest" @@ -148,15 +142,9 @@ dependencies = [ [[package]] name = "either" -version = "1.15.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "errno" @@ -165,20 +153,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fluxer_desktop_native" @@ -199,17 +187,11 @@ dependencies = [ "tempfile", ] -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -222,9 +204,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -232,15 +214,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -249,38 +231,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -295,43 +277,20 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi", - "wasip2", - "wasip3", ] [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" - -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash", -] - -[[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "home" @@ -355,37 +314,13 @@ dependencies = [ [[package]] name = "hybrid-array" -version = "0.4.12" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" dependencies = [ "typenum", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - -[[package]] -name = "indexmap" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" -dependencies = [ - "equivalent", - "hashbrown 0.17.1", - "serde", - "serde_core", -] - -[[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - [[package]] name = "lazy_static" version = "1.5.0" @@ -398,17 +333,11 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -444,15 +373,15 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "log" -version = "0.4.32" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "minimal-lexical" @@ -462,57 +391,58 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.2", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", ] [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn 2.0.117", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading 0.9.0", ] @@ -553,34 +483,24 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" - -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn 2.0.117", -] +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -593,9 +513,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -605,9 +525,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -616,9 +536,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rustc-hash" @@ -628,9 +548,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustix" @@ -638,7 +558,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.2", "errno", "libc", "linux-raw-sys 0.4.15", @@ -647,15 +567,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.2", "errno", "libc", "linux-raw-sys 0.12.1", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -664,48 +584,6 @@ version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "serde_json" -version = "1.0.150" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - [[package]] name = "sha2" version = "0.11.0" @@ -723,6 +601,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + [[package]] name = "slab" version = "0.4.12" @@ -742,9 +626,20 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -760,85 +655,27 @@ dependencies = [ "fastrand", "getrandom", "once_cell", - "rustix 1.1.4", - "windows-sys 0.59.0", + "rustix 1.1.5", + "windows-sys 0.61.2", ] [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - -[[package]] -name = "wasip2" -version = "1.0.3+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" -dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", -] - -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags 2.13.0", - "hashbrown 0.15.5", - "indexmap", - "semver", -] +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "which" @@ -939,103 +776,3 @@ name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" - -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn 2.0.117", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn 2.0.117", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags 2.13.0", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - -[[package]] -name = "zmij" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/fluxer_desktop/native/system-hunspell/Cargo.toml b/fluxer_desktop/native/system-hunspell/Cargo.toml index 14b134f1a..e2aa2b53e 100644 --- a/fluxer_desktop/native/system-hunspell/Cargo.toml +++ b/fluxer_desktop/native/system-hunspell/Cargo.toml @@ -14,11 +14,11 @@ crate-type = ["cdylib", "rlib"] [dependencies] fluxer_desktop_native = {path = "../rust"} hunspell-sys = {version = "0.3.1", features = ["bundled"]} -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8"]} +napi-derive = "3.6.7" [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" [dev-dependencies] tempfile = "3.27" diff --git a/fluxer_desktop/native/webauthn/Cargo.lock b/fluxer_desktop/native/webauthn/Cargo.lock index dafd0c829..b7dabb376 100644 --- a/fluxer_desktop/native/webauthn/Cargo.lock +++ b/fluxer_desktop/native/webauthn/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -33,15 +33,15 @@ dependencies = [ "quote", "regex", "rustc-hash", - "shlex", - "syn", + "shlex 1.3.0", + "syn 2.0.119", ] [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block2" @@ -54,12 +54,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.62" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", - "shlex", + "shlex 2.0.1", ] [[package]] @@ -73,15 +73,15 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "clang-sys" -version = "1.8.1" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "157a8ba7b480713b56f4c09fd13fc3e0a22a5dfab8097ba61cbc5feef950788a" dependencies = [ "glob", "libc", @@ -90,18 +90,18 @@ dependencies = [ [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "dispatch2" @@ -117,15 +117,15 @@ dependencies = [ [[package]] name = "either" -version = "1.15.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fluxer_webauthn" @@ -146,9 +146,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -161,9 +161,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -171,15 +171,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -188,38 +188,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -234,9 +234,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "itertools" @@ -249,9 +249,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libfido2-sys" @@ -291,9 +291,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.28" +version = "1.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc3a226e576f50782b3305c5ccf458698f92798987f551c6a02efe8276721e22" +checksum = "85bc9657773828b90eeb625adff10eeac83cc21bbfd8e23a03eaa8a33c9e28d9" dependencies = [ "cc", "pkg-config", @@ -302,15 +302,15 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "minimal-lexical" @@ -320,13 +320,14 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -335,42 +336,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading 0.9.0", ] @@ -570,9 +571,9 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.116" +version = "0.9.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28a22dc7140cda5f096e5e7724a6962ca81a7f8bfd2979f9b18c11af56318c4" +checksum = "b47e7e6bb2c38cd930d25a23b40fa52e068c10e85f3e03a7f5ba5aaca5713695" dependencies = [ "cc", "libc", @@ -588,9 +589,9 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "prettyplease" @@ -599,32 +600,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn", + "syn 2.0.119", ] [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -634,9 +635,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -645,15 +646,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "semver" @@ -667,6 +668,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + [[package]] name = "slab" version = "0.4.12" @@ -675,9 +682,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -686,15 +704,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "vcpkg" @@ -755,7 +773,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -766,7 +784,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] diff --git a/fluxer_desktop/native/webauthn/Cargo.toml b/fluxer_desktop/native/webauthn/Cargo.toml index fb1c7ae0d..85689d55d 100644 --- a/fluxer_desktop/native/webauthn/Cargo.toml +++ b/fluxer_desktop/native/webauthn/Cargo.toml @@ -12,8 +12,8 @@ resolver = "2" crate-type = ["cdylib", "rlib"] [dependencies] -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8"]} +napi-derive = "3.6.7" [target.'cfg(target_os = "linux")'.dependencies] libfido2-sys = "0.5.1" @@ -76,4 +76,4 @@ objc2-authentication-services = {version = "0.3.2", features = [ dispatch2 = "0.3" [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" diff --git a/fluxer_desktop/native/win-clipboard/Cargo.lock b/fluxer_desktop/native/win-clipboard/Cargo.lock index 48a305e30..eb0cfb3c9 100644 --- a/fluxer_desktop/native/win-clipboard/Cargo.lock +++ b/fluxer_desktop/native/win-clipboard/Cargo.lock @@ -4,30 +4,30 @@ version = 4 [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "fluxer_win_clipboard" @@ -41,9 +41,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -56,9 +56,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -66,15 +66,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -83,38 +83,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -127,6 +127,12 @@ dependencies = [ "slab", ] +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + [[package]] name = "libloading" version = "0.9.0" @@ -139,19 +145,20 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -160,42 +167,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -214,27 +221,27 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "semver" @@ -250,9 +257,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -261,15 +279,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "windows-link" diff --git a/fluxer_desktop/native/win-clipboard/Cargo.toml b/fluxer_desktop/native/win-clipboard/Cargo.toml index 2d28501fd..c46de736d 100644 --- a/fluxer_desktop/native/win-clipboard/Cargo.toml +++ b/fluxer_desktop/native/win-clipboard/Cargo.toml @@ -12,8 +12,8 @@ resolver = "2" crate-type = ["cdylib", "rlib"] [dependencies] -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8"]} +napi-derive = "3.6.7" [target.'cfg(target_os = "windows")'.dependencies] windows-sys = {version = "0.61.2", features = [ @@ -25,4 +25,4 @@ windows-sys = {version = "0.61.2", features = [ ]} [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" diff --git a/fluxer_desktop/native/win-clipboard/src/lib.rs b/fluxer_desktop/native/win-clipboard/src/lib.rs index 134e906ee..ae7834347 100644 --- a/fluxer_desktop/native/win-clipboard/src/lib.rs +++ b/fluxer_desktop/native/win-clipboard/src/lib.rs @@ -284,8 +284,10 @@ mod tests { assert_eq!(i32::from_le_bytes(payload[16..20].try_into().unwrap()), 1); let path_units: Vec = payload[DROPFILES_HEADER_SIZE..payload.len() - 4] - .chunks_exact(2) - .map(|chunk| u16::from_le_bytes(chunk.try_into().unwrap())) + .as_chunks::<2>() + .0 + .iter() + .map(|chunk| u16::from_le_bytes(*chunk)) .collect(); assert_eq!(String::from_utf16(&path_units).unwrap(), "C:\\Temp\\a.txt"); assert_eq!(&payload[payload.len() - 4..], &[0, 0, 0, 0]); diff --git a/fluxer_desktop/native/win-game-capture/Cargo.lock b/fluxer_desktop/native/win-game-capture/Cargo.lock index 4cbc5821a..86df13eeb 100644 --- a/fluxer_desktop/native/win-game-capture/Cargo.lock +++ b/fluxer_desktop/native/win-game-capture/Cargo.lock @@ -4,30 +4,30 @@ version = 4 [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "fluxer_encoder_ring" @@ -69,9 +69,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -84,9 +84,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -94,15 +94,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -111,38 +111,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -157,9 +157,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -182,19 +182,20 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -203,42 +204,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -280,18 +281,18 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -307,9 +308,9 @@ dependencies = [ [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "scopeguard" @@ -331,15 +332,26 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -348,15 +360,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "windows" @@ -411,7 +423,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -422,7 +434,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] diff --git a/fluxer_desktop/native/win-game-capture/Cargo.toml b/fluxer_desktop/native/win-game-capture/Cargo.toml index 82a7de508..4a8255ea1 100644 --- a/fluxer_desktop/native/win-game-capture/Cargo.toml +++ b/fluxer_desktop/native/win-game-capture/Cargo.toml @@ -12,8 +12,8 @@ resolver = "2" crate-type = ["cdylib", "rlib"] [dependencies] -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8"]} +napi-derive = "3.6.7" fluxer_screen_frame_bus = {path = "../screen-frame-bus"} fluxer_encoder_ring = {path = "../encoder-ring"} parking_lot = "0.12" @@ -53,4 +53,4 @@ windows-sys = {version = "0.61.2", features = [ ]} [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" diff --git a/fluxer_desktop/native/win-game-capture/index.test.mjs b/fluxer_desktop/native/win-game-capture/index.test.mjs index f9d165189..c48b78dd8 100644 --- a/fluxer_desktop/native/win-game-capture/index.test.mjs +++ b/fluxer_desktop/native/win-game-capture/index.test.mjs @@ -194,113 +194,103 @@ describe('win-game-capture loader wrapper -- binding-absent fallback path', () = if (hasBindingHook) winGameCapture.__setBindingForTests(null); } - test( - 'isSupported() is false when no binding is loaded', - {skip: hasBindingHook ? false : 'no __setBindingForTests hook'}, - () => { - forceNoBinding(); - assert.equal(winGameCapture.isSupported(), false); - }, - ); + test('isSupported() is false when no binding is loaded', { + skip: hasBindingHook ? false : 'no __setBindingForTests hook', + }, () => { + forceNoBinding(); + assert.equal(winGameCapture.isSupported(), false); + }); - test( - 'getAvailability() returns the {available:false, ...} shape when no binding is loaded', - {skip: hasBindingHook ? false : 'no __setBindingForTests hook'}, - () => { - forceNoBinding(); - const availability = winGameCapture.getAvailability(); - assert.equal(availability.available, false); - assert.equal(availability.backend, 'windows-game-capture'); - assert.equal(typeof availability.reason, 'string'); - }, - ); + test('getAvailability() returns the {available:false, ...} shape when no binding is loaded', { + skip: hasBindingHook ? false : 'no __setBindingForTests hook', + }, () => { + forceNoBinding(); + const availability = winGameCapture.getAvailability(); + assert.equal(availability.available, false); + assert.equal(availability.backend, 'windows-game-capture'); + assert.equal(typeof availability.reason, 'string'); + }); - test( - 'constructing ScreenCapture without a binding throws', - {skip: hasBindingHook ? false : 'no __setBindingForTests hook'}, - () => { - forceNoBinding(); - assert.throws(() => new winGameCapture.ScreenCapture({sourceId: '1'})); - try { - new winGameCapture.ScreenCapture({sourceId: '1'}); - assert.fail('expected ScreenCapture constructor to throw without a binding'); - } catch (error) { - assert.ok(error instanceof Error); - } - }, - ); + test('constructing ScreenCapture without a binding throws', { + skip: hasBindingHook ? false : 'no __setBindingForTests hook', + }, () => { + forceNoBinding(); + assert.throws(() => new winGameCapture.ScreenCapture({sourceId: '1'})); + try { + new winGameCapture.ScreenCapture({sourceId: '1'}); + assert.fail('expected ScreenCapture constructor to throw without a binding'); + } catch (error) { + assert.ok(error instanceof Error); + } + }); }); describe('win-game-capture loader wrapper -- injected fake binding', () => { - test( - 'listSources() forwards sanitized screen/window sources from the native binding', - {skip: injectionSkip}, - async () => { - const {binding} = makeFakeBinding(); - winGameCapture.__setBindingForTests(binding); - const sources = await winGameCapture.listSources(); - assert.deepEqual(sources, [ - { - kind: 'screen', - id: 'screen:0:0', - name: 'Display 1', - width: 2560, - height: 1440, - targetPid: undefined, - }, - { - kind: 'window', - id: 'window:5050:0', - name: 'Fixture', - width: 1280, - height: 720, - targetPid: 4242, - }, - ]); - }, - ); + test('listSources() forwards sanitized screen/window sources from the native binding', { + skip: injectionSkip, + }, async () => { + const {binding} = makeFakeBinding(); + winGameCapture.__setBindingForTests(binding); + const sources = await winGameCapture.listSources(); + assert.deepEqual(sources, [ + { + kind: 'screen', + id: 'screen:0:0', + name: 'Display 1', + width: 2560, + height: 1440, + targetPid: undefined, + }, + { + kind: 'window', + id: 'window:5050:0', + name: 'Fixture', + width: 1280, + height: 720, + targetPid: 4242, + }, + ]); + }); - test( - 'start() forwards sourceId/kind/dims/frameRate/captureId and the capture options', - {skip: injectionSkip}, - async () => { - const {binding, calls} = makeFakeBinding(); - winGameCapture.__setBindingForTests(binding); - const capture = new winGameCapture.ScreenCapture({ - sourceId: '987654', - sourceKind: 'game', - width: 1600, - height: 900, - frameRate: 60, - captureId: 'capture-1', + test('start() forwards sourceId/kind/dims/frameRate/captureId and the capture options', { + skip: injectionSkip, + }, async () => { + const {binding, calls} = makeFakeBinding(); + winGameCapture.__setBindingForTests(binding); + const capture = new winGameCapture.ScreenCapture({ + sourceId: '987654', + sourceKind: 'game', + width: 1600, + height: 900, + frameRate: 60, + captureId: 'capture-1', + colorRange: 'full', + colorSpace: 'rec709', + showCursorClicks: true, + captureRect: {x: 10, y: 20, width: 300, height: 200}, + }); + capture.on('error', () => {}); + const result = await capture.start(); + assert.equal(calls.length, 1); + assert.deepEqual(calls[0], { + sourceId: '987654', + sourceKind: 'game', + width: 1600, + height: 900, + frameRate: 60, + captureId: 'capture-1', + captureOptions: { colorRange: 'full', colorSpace: 'rec709', showCursorClicks: true, captureRect: {x: 10, y: 20, width: 300, height: 200}, - }); - capture.on('error', () => {}); - const result = await capture.start(); - assert.equal(calls.length, 1); - assert.deepEqual(calls[0], { - sourceId: '987654', - sourceKind: 'game', - width: 1600, - height: 900, - frameRate: 60, - captureId: 'capture-1', - captureOptions: { - colorRange: 'full', - colorSpace: 'rec709', - showCursorClicks: true, - captureRect: {x: 10, y: 20, width: 300, height: 200}, - }, - }); - assert.equal(result.pixelFormat, 'bgra'); - assert.equal(result.width, 1600); - assert.equal(result.height, 900); - assert.equal(result.frameRate, 60); - }, - ); + }, + }); + assert.equal(result.pixelFormat, 'bgra'); + assert.equal(result.width, 1600); + assert.equal(result.height, 900); + assert.equal(result.frameRate, 60); + }); test('native start() takes no hook or injection arguments', {skip: injectionSkip}, async () => { const {binding, calls} = makeFakeBinding(); @@ -410,41 +400,37 @@ describe('win-game-capture loader wrapper -- injected fake binding', () => { assert.equal(calls.length, 1); }); - test( - 'fails before native start when a native frame sink is required but missing', - {skip: injectionSkip}, - async () => { - const {binding, calls, frameSinkHandleCalls} = makeFakeBinding(); - winGameCapture.__setBindingForTests(binding); - const capture = new winGameCapture.ScreenCapture({ - sourceId: '42', - sourceKind: 'window', - nativeFrameSinkRequired: true, - }); - capture.on('error', () => {}); + test('fails before native start when a native frame sink is required but missing', { + skip: injectionSkip, + }, async () => { + const {binding, calls, frameSinkHandleCalls} = makeFakeBinding(); + winGameCapture.__setBindingForTests(binding); + const capture = new winGameCapture.ScreenCapture({ + sourceId: '42', + sourceKind: 'window', + nativeFrameSinkRequired: true, + }); + capture.on('error', () => {}); - await assert.rejects(() => capture.start(), /native frame sink handle is required/i); - assert.deepEqual(frameSinkHandleCalls, []); - assert.deepEqual(calls, []); - }, - ); + await assert.rejects(() => capture.start(), /native frame sink handle is required/i); + assert.deepEqual(frameSinkHandleCalls, []); + assert.deepEqual(calls, []); + }); - test( - 'game sourceKind starts without a hook path because capture no longer injects', - {skip: injectionSkip}, - async () => { - const {binding, calls} = makeFakeBinding(); - winGameCapture.__setBindingForTests(binding); - const capture = new winGameCapture.ScreenCapture({ - sourceId: '7', - sourceKind: 'game', - }); - capture.on('error', () => {}); - await capture.start(); - assert.equal(calls.length, 1, 'native start must be called for game capture without a hook'); - assert.equal(calls[0].sourceKind, 'game'); - }, - ); + test('game sourceKind starts without a hook path because capture no longer injects', { + skip: injectionSkip, + }, async () => { + const {binding, calls} = makeFakeBinding(); + winGameCapture.__setBindingForTests(binding); + const capture = new winGameCapture.ScreenCapture({ + sourceId: '7', + sourceKind: 'game', + }); + capture.on('error', () => {}); + await capture.start(); + assert.equal(calls.length, 1, 'native start must be called for game capture without a hook'); + assert.equal(calls[0].sourceKind, 'game'); + }); test('lifecycle "error" emits an Error event', {skip: injectionSkip}, () => { const {binding, natives} = makeFakeBinding(); @@ -489,100 +475,90 @@ describe('win-game-capture loader wrapper -- injected fake binding', () => { assert.equal(closed, 0); }); - test( - 'non-fatal "diagnostic" lifecycle re-emits as a diagnostic event WITHOUT stopping', - {skip: injectionSkip}, - () => { - const {binding, natives} = makeFakeBinding(); - winGameCapture.__setBindingForTests(binding); - const capture = new winGameCapture.ScreenCapture({sourceId: '1'}); - const diags = []; - let closed = 0; - capture.on('diagnostic', (message) => diags.push(message)); - capture.on('closed', () => { - closed += 1; - }); - natives[0].lifecycleCallback('diagnostic', 'fell back to CPU readback'); - assert.deepEqual(diags, ['fell back to CPU readback']); - assert.equal(natives[0].stopCount, 0); - assert.equal(closed, 0); - }, - ); + test('non-fatal "diagnostic" lifecycle re-emits as a diagnostic event WITHOUT stopping', { + skip: injectionSkip, + }, () => { + const {binding, natives} = makeFakeBinding(); + winGameCapture.__setBindingForTests(binding); + const capture = new winGameCapture.ScreenCapture({sourceId: '1'}); + const diags = []; + let closed = 0; + capture.on('diagnostic', (message) => diags.push(message)); + capture.on('closed', () => { + closed += 1; + }); + natives[0].lifecycleCallback('diagnostic', 'fell back to CPU readback'); + assert.deepEqual(diags, ['fell back to CPU readback']); + assert.equal(natives[0].stopCount, 0); + assert.equal(closed, 0); + }); - test( - 'lifecycle "error" in the real napi [type, message] array shape emits an Error event', - {skip: injectionSkip}, - () => { - const {binding, natives} = makeFakeBinding(); - winGameCapture.__setBindingForTests(binding); - const capture = new winGameCapture.ScreenCapture({sourceId: '1'}); - const errors = []; - capture.on('error', (err) => errors.push(err)); - natives[0].lifecycleCallback(['error', 'DXGI device removed']); - assert.equal(errors.length, 1); - assert.ok(errors[0] instanceof Error); - assert.equal(errors[0].message, 'DXGI device removed'); - }, - ); + test('lifecycle "error" in the real napi [type, message] array shape emits an Error event', { + skip: injectionSkip, + }, () => { + const {binding, natives} = makeFakeBinding(); + winGameCapture.__setBindingForTests(binding); + const capture = new winGameCapture.ScreenCapture({sourceId: '1'}); + const errors = []; + capture.on('error', (err) => errors.push(err)); + natives[0].lifecycleCallback(['error', 'DXGI device removed']); + assert.equal(errors.length, 1); + assert.ok(errors[0] instanceof Error); + assert.equal(errors[0].message, 'DXGI device removed'); + }); - test( - 'lifecycle "closed" in the napi array shape stops the native capture and emits closed once', - {skip: injectionSkip}, - async () => { - const {binding, natives} = makeFakeBinding(); - winGameCapture.__setBindingForTests(binding); - const capture = new winGameCapture.ScreenCapture({sourceId: '1'}); - let closed = 0; - capture.on('closed', () => { - closed += 1; - }); - natives[0].lifecycleCallback(['closed', '']); - await Promise.resolve(); - await capture.stop(); - assert.equal(closed, 1); - assert.equal(natives[0].stopCount, 1); - }, - ); + test('lifecycle "closed" in the napi array shape stops the native capture and emits closed once', { + skip: injectionSkip, + }, async () => { + const {binding, natives} = makeFakeBinding(); + winGameCapture.__setBindingForTests(binding); + const capture = new winGameCapture.ScreenCapture({sourceId: '1'}); + let closed = 0; + capture.on('closed', () => { + closed += 1; + }); + natives[0].lifecycleCallback(['closed', '']); + await Promise.resolve(); + await capture.stop(); + assert.equal(closed, 1); + assert.equal(natives[0].stopCount, 1); + }); - test( - 'lifecycle "stalled" in the napi array shape re-emits as a stalled event WITHOUT stopping', - {skip: injectionSkip}, - () => { - const {binding, natives} = makeFakeBinding(); - winGameCapture.__setBindingForTests(binding); - const capture = new winGameCapture.ScreenCapture({sourceId: '1'}); - const stalls = []; - let closed = 0; - capture.on('stalled', (message) => stalls.push(message)); - capture.on('closed', () => { - closed += 1; - }); - natives[0].lifecycleCallback(['stalled', 'frame counter frozen while focused']); - assert.deepEqual(stalls, ['frame counter frozen while focused']); - assert.equal(natives[0].stopCount, 0); - assert.equal(closed, 0); - }, - ); + test('lifecycle "stalled" in the napi array shape re-emits as a stalled event WITHOUT stopping', { + skip: injectionSkip, + }, () => { + const {binding, natives} = makeFakeBinding(); + winGameCapture.__setBindingForTests(binding); + const capture = new winGameCapture.ScreenCapture({sourceId: '1'}); + const stalls = []; + let closed = 0; + capture.on('stalled', (message) => stalls.push(message)); + capture.on('closed', () => { + closed += 1; + }); + natives[0].lifecycleCallback(['stalled', 'frame counter frozen while focused']); + assert.deepEqual(stalls, ['frame counter frozen while focused']); + assert.equal(natives[0].stopCount, 0); + assert.equal(closed, 0); + }); - test( - 'lifecycle "diagnostic" (injected via ) in the napi array shape re-emits WITHOUT stopping', - {skip: injectionSkip}, - () => { - const {binding, natives} = makeFakeBinding(); - winGameCapture.__setBindingForTests(binding); - const capture = new winGameCapture.ScreenCapture({sourceId: '1'}); - const diags = []; - let closed = 0; - capture.on('diagnostic', (message) => diags.push(message)); - capture.on('closed', () => { - closed += 1; - }); - natives[0].lifecycleCallback(['diagnostic', 'game capture injected via set-windows-hook']); - assert.deepEqual(diags, ['game capture injected via set-windows-hook']); - assert.equal(natives[0].stopCount, 0); - assert.equal(closed, 0); - }, - ); + test('lifecycle "diagnostic" (injected via ) in the napi array shape re-emits WITHOUT stopping', { + skip: injectionSkip, + }, () => { + const {binding, natives} = makeFakeBinding(); + winGameCapture.__setBindingForTests(binding); + const capture = new winGameCapture.ScreenCapture({sourceId: '1'}); + const diags = []; + let closed = 0; + capture.on('diagnostic', (message) => diags.push(message)); + capture.on('closed', () => { + closed += 1; + }); + natives[0].lifecycleCallback(['diagnostic', 'game capture injected via set-windows-hook']); + assert.deepEqual(diags, ['game capture injected via set-windows-hook']); + assert.equal(natives[0].stopCount, 0); + assert.equal(closed, 0); + }); test('getDiagnostics() passes the native snapshot through', {skip: injectionSkip}, () => { const {binding, diagnostics} = makeFakeBinding(); @@ -624,16 +600,14 @@ describe('win-game-capture loader wrapper -- injected fake binding', () => { assert.deepEqual(priorityCalls, [{type: 'elevate', processId: 1234, priorityClass: undefined}]); }); - test( - 'elevateGpuSchedulingPriority rejects unsupported priority classes before binding calls', - {skip: injectionSkip}, - () => { - const {binding, priorityCalls} = makeFakeBinding(); - winGameCapture.__setBindingForTests(binding); - assert.equal(winGameCapture.elevateGpuSchedulingPriority(1234, 'normal'), false); - assert.deepEqual(priorityCalls, []); - }, - ); + test('elevateGpuSchedulingPriority rejects unsupported priority classes before binding calls', { + skip: injectionSkip, + }, () => { + const {binding, priorityCalls} = makeFakeBinding(); + winGameCapture.__setBindingForTests(binding); + assert.equal(winGameCapture.elevateGpuSchedulingPriority(1234, 'normal'), false); + assert.deepEqual(priorityCalls, []); + }); test('lifecycle fallback "error" (next-strategy=...) re-emits as a fatal error event', {skip: injectionSkip}, () => { const {binding, natives} = makeFakeBinding(); @@ -650,29 +624,27 @@ describe('win-game-capture loader wrapper -- injected fake binding', () => { assert.equal(winGameCapture.parseFallbackRecommendation(errors[0].message), 'dxgi-duplication'); }); - test( - 'lifecycle fallback "diagnostic" (upgrade, next-strategy=...) re-emits WITHOUT stopping', - {skip: injectionSkip}, - () => { - const {binding, natives} = makeFakeBinding(); - winGameCapture.__setBindingForTests(binding); - const capture = new winGameCapture.ScreenCapture({sourceId: '1'}); - const diags = []; - let closed = 0; - capture.on('diagnostic', (message) => diags.push(message)); - capture.on('closed', () => { - closed += 1; - }); - natives[0].lifecycleCallback([ - 'diagnostic', - 'upgrade: window-gdi -> dxgi-duplication (window-gdi has been stable) [next-strategy=dxgi-duplication]', - ]); - assert.equal(diags.length, 1); - assert.equal(winGameCapture.parseFallbackRecommendation(diags[0]), 'dxgi-duplication'); - assert.equal(natives[0].stopCount, 0); - assert.equal(closed, 0); - }, - ); + test('lifecycle fallback "diagnostic" (upgrade, next-strategy=...) re-emits WITHOUT stopping', { + skip: injectionSkip, + }, () => { + const {binding, natives} = makeFakeBinding(); + winGameCapture.__setBindingForTests(binding); + const capture = new winGameCapture.ScreenCapture({sourceId: '1'}); + const diags = []; + let closed = 0; + capture.on('diagnostic', (message) => diags.push(message)); + capture.on('closed', () => { + closed += 1; + }); + natives[0].lifecycleCallback([ + 'diagnostic', + 'upgrade: window-gdi -> dxgi-duplication (window-gdi has been stable) [next-strategy=dxgi-duplication]', + ]); + assert.equal(diags.length, 1); + assert.equal(winGameCapture.parseFallbackRecommendation(diags[0]), 'dxgi-duplication'); + assert.equal(natives[0].stopCount, 0); + assert.equal(closed, 0); + }); }); describe('win-game-capture loader wrapper -- parseFallbackRecommendation', () => { diff --git a/fluxer_desktop/native/win-process-loopback/Cargo.lock b/fluxer_desktop/native/win-process-loopback/Cargo.lock index 3401ce114..676d103fc 100644 --- a/fluxer_desktop/native/win-process-loopback/Cargo.lock +++ b/fluxer_desktop/native/win-process-loopback/Cargo.lock @@ -4,24 +4,24 @@ version = 4 [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block-buffer" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", ] [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "const-oid" @@ -31,18 +31,18 @@ checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] [[package]] name = "cpufeatures" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" dependencies = [ "libc", ] @@ -58,9 +58,9 @@ dependencies = [ [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "digest" @@ -119,9 +119,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -134,9 +134,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -144,15 +144,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -161,38 +161,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -207,18 +207,18 @@ dependencies = [ [[package]] name = "hybrid-array" -version = "0.4.12" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" dependencies = [ "typenum", ] [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -241,19 +241,20 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -262,42 +263,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -339,18 +340,18 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -366,9 +367,9 @@ dependencies = [ [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "scopeguard" @@ -401,15 +402,26 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.2" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -418,21 +430,21 @@ dependencies = [ [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "windows" @@ -487,7 +499,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -498,7 +510,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] diff --git a/fluxer_desktop/native/win-process-loopback/Cargo.toml b/fluxer_desktop/native/win-process-loopback/Cargo.toml index 60eb3390a..0da38132a 100644 --- a/fluxer_desktop/native/win-process-loopback/Cargo.toml +++ b/fluxer_desktop/native/win-process-loopback/Cargo.toml @@ -15,8 +15,8 @@ crate-type = ["cdylib", "rlib"] fluxer_desktop_native = {path = "../rust"} fluxer_rt_thread = {path = "../rt-thread"} fluxer_screen_frame_bus = {path = "../screen-frame-bus"} -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8"]} +napi-derive = "3.6.7" [target.'cfg(target_os = "windows")'.dependencies] windows = {version = "0.62.2", features = [ @@ -37,4 +37,4 @@ windows = {version = "0.62.2", features = [ windows-core = "0.62.2" [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" diff --git a/fluxer_desktop/native/win-shell/Cargo.lock b/fluxer_desktop/native/win-shell/Cargo.lock index e2f65843e..7d3af72ec 100644 --- a/fluxer_desktop/native/win-shell/Cargo.lock +++ b/fluxer_desktop/native/win-shell/Cargo.lock @@ -4,30 +4,30 @@ version = 4 [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "fluxer_win_shell" @@ -41,9 +41,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -56,9 +56,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -66,15 +66,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -83,38 +83,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -127,6 +127,12 @@ dependencies = [ "slab", ] +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + [[package]] name = "libloading" version = "0.9.0" @@ -139,19 +145,20 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -160,42 +167,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -214,27 +221,27 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "semver" @@ -250,9 +257,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -261,15 +279,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "windows" @@ -324,7 +342,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -335,7 +353,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] diff --git a/fluxer_desktop/native/win-shell/Cargo.toml b/fluxer_desktop/native/win-shell/Cargo.toml index 10f45e37d..c4100176b 100644 --- a/fluxer_desktop/native/win-shell/Cargo.toml +++ b/fluxer_desktop/native/win-shell/Cargo.toml @@ -12,8 +12,8 @@ resolver = "2" crate-type = ["cdylib", "rlib"] [dependencies] -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8"]} +napi-derive = "3.6.7" [target.'cfg(target_os = "windows")'.dependencies] windows = {version = "0.62.2", features = [ @@ -28,4 +28,4 @@ windows = {version = "0.62.2", features = [ ]} [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" diff --git a/fluxer_desktop/native/win-toast/Cargo.lock b/fluxer_desktop/native/win-toast/Cargo.lock index 7fbf4e98e..da9119448 100644 --- a/fluxer_desktop/native/win-toast/Cargo.lock +++ b/fluxer_desktop/native/win-toast/Cargo.lock @@ -4,30 +4,30 @@ version = 4 [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "fluxer_win_toast" @@ -42,9 +42,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -57,9 +57,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -67,15 +67,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -84,38 +84,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -134,6 +134,12 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + [[package]] name = "libloading" version = "0.9.0" @@ -146,19 +152,20 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -169,42 +176,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -223,27 +230,27 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "semver" @@ -253,9 +260,9 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -263,29 +270,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -302,9 +309,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -313,15 +331,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "windows" @@ -376,7 +394,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -387,7 +405,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -435,6 +453,6 @@ dependencies = [ [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/fluxer_desktop/native/win-toast/Cargo.toml b/fluxer_desktop/native/win-toast/Cargo.toml index 0927f59f8..f26080371 100644 --- a/fluxer_desktop/native/win-toast/Cargo.toml +++ b/fluxer_desktop/native/win-toast/Cargo.toml @@ -12,8 +12,8 @@ resolver = "2" crate-type = ["cdylib", "rlib"] [dependencies] -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8", "serde-json"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8", "serde-json"]} +napi-derive = "3.6.7" serde = {version = "1.0", features = ["derive"]} [target.'cfg(target_os = "windows")'.dependencies] @@ -25,4 +25,4 @@ windows = {version = "0.62.2", features = [ ]} [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" diff --git a/fluxer_desktop/native/windows-input-hook/Cargo.lock b/fluxer_desktop/native/windows-input-hook/Cargo.lock index 07c11ea46..1166d0a82 100644 --- a/fluxer_desktop/native/windows-input-hook/Cargo.lock +++ b/fluxer_desktop/native/windows-input-hook/Cargo.lock @@ -4,24 +4,24 @@ version = 4 [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block-buffer" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", ] [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "const-oid" @@ -31,18 +31,18 @@ checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] name = "convert_case" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" +checksum = "1af709f1f33454bf52eadfc8c78b3b9ef9cb26fb54d16dc9cd9a7299f899fd1b" dependencies = [ "unicode-segmentation", ] [[package]] name = "cpufeatures" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" dependencies = [ "libc", ] @@ -58,9 +58,9 @@ dependencies = [ [[package]] name = "ctor" -version = "1.0.7" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a" +checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d" [[package]] name = "digest" @@ -93,9 +93,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -108,9 +108,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -118,15 +118,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -135,38 +135,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -181,18 +181,18 @@ dependencies = [ [[package]] name = "hybrid-array" -version = "0.4.12" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" dependencies = [ "typenum", ] [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -206,19 +206,20 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "napi" -version = "3.9.1" +version = "3.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9" +checksum = "2ca373b1769db491f38386d57a882b9a21debb2dcd17c0d3e16d02ec311a1d7c" dependencies = [ "bitflags", "ctor", "futures", + "libc", "napi-build", "napi-sys", "nohash-hasher", @@ -227,42 +228,42 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.3.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" +checksum = "709388aa95cadd11adda653ab6d8ebe5733144acd2b111fa7b2da8a0bf0f16a7" [[package]] name = "napi-derive" -version = "3.5.6" +version = "3.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b3f766e04667e6da0e181e2da4f85475d5a6513b7cf6a80bea184e224a5b42" +checksum = "76117d85c6ccd9f07102daf39931c7229934483008276d84ecb7c19aa50dfe69" dependencies = [ "convert_case", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.0.4" +version = "6.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d5af30503edf933ce7377cf6d4c877a62b0f1107ea05585f1b5e430e88d5baf" +checksum = "4c1c87a71568f3fe5c736b10878ff55064b250bb4ea4b48c8055713e07b9e463" dependencies = [ "convert_case", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.2" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f5bcdf71abd3a50d00b49c1c2c75251cb3c913777d6139cd37dabc093a5e400" +checksum = "4d29a242104e456960e6c6479847570be731c1a92b8f8c05ddfb5439e5c09915" dependencies = [ "libloading", ] @@ -281,27 +282,27 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "semver" @@ -328,9 +329,20 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -339,21 +351,21 @@ dependencies = [ [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "windows" @@ -408,7 +420,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -419,7 +431,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] diff --git a/fluxer_desktop/native/windows-input-hook/Cargo.toml b/fluxer_desktop/native/windows-input-hook/Cargo.toml index 15da095e5..d85cbc557 100644 --- a/fluxer_desktop/native/windows-input-hook/Cargo.toml +++ b/fluxer_desktop/native/windows-input-hook/Cargo.toml @@ -13,8 +13,8 @@ crate-type = ["cdylib", "rlib"] [dependencies] fluxer_desktop_native = {path = "../rust"} -napi = {version = "3.9.1", default-features = false, features = ["dyn-symbols", "napi8"]} -napi-derive = "3.5.6" +napi = {version = "3.12.6", default-features = false, features = ["dyn-symbols", "napi8"]} +napi-derive = "3.6.7" [target.'cfg(target_os = "windows")'.dependencies] windows = {version = "0.62.2", features = [ @@ -27,4 +27,4 @@ windows = {version = "0.62.2", features = [ ]} [build-dependencies] -napi-build = "2.3.2" +napi-build = "2.4.3" diff --git a/fluxer_desktop/package.json b/fluxer_desktop/package.json index 7fc00543c..baeffb32e 100644 --- a/fluxer_desktop/package.json +++ b/fluxer_desktop/package.json @@ -12,24 +12,23 @@ "build": "node scripts/build.mjs", "set-channel": "../tools/ci/run.sh build-desktop --step set_build_channel", "test": "cargo test --manifest-path native/rust/Cargo.toml", - "typecheck": "pnpm set-channel && tsgo --noEmit" + "typecheck": "pnpm set-channel && tsc --noEmit" }, "dependencies": { "@fluxer/voice_engine_v2": "workspace:*", - "@simplewebauthn/browser": "13.2.2", + "@simplewebauthn/browser": "14.0.0", "franc-min": "6.2.0", "hunspell-asm": "4.0.2", - "update-electron-app": "3.1.2", - "velopack": "0.0.1298" + "update-electron-app": "3.3.0", + "velopack": "1.2.0" }, "devDependencies": { - "@types/node": "24.10.9", - "@typescript/native-preview": "7.0.0-dev.20260130.1", - "electron": "44.1.1", - "electron-builder": "27.0.0-alpha.7", - "electron-builder-squirrel-windows": "27.0.0-alpha.7", - "esbuild": "0.27.2", - "typescript": "5.9.3" + "@types/node": "24.13.5", + "electron": "44.4.1", + "electron-builder": "27.0.0-alpha.8", + "electron-builder-squirrel-windows": "27.0.0-alpha.8", + "esbuild": "catalog:", + "typescript": "catalog:ts7" }, "knip": { "ignoreDependencies": [ @@ -59,6 +58,6 @@ "@fluxer/win-game-capture": "file:./native/win-game-capture", "@fluxer/win-process-loopback": "file:./native/win-process-loopback", "@fluxer/windows-input-hook": "file:./native/windows-input-hook", - "electron-log": "5.4.3" + "electron-log": "5.4.4" } } diff --git a/fluxer_desktop/src/main/EvdevHook.ts b/fluxer_desktop/src/main/EvdevHook.ts index bf44e6ce7..84e0f3d34 100644 --- a/fluxer_desktop/src/main/EvdevHook.ts +++ b/fluxer_desktop/src/main/EvdevHook.ts @@ -78,7 +78,7 @@ class EvdevHook extends EventEmitter { async start(): Promise { if (this.started) return true; const nativeModule = getNativeModule(); - if (!nativeModule || !nativeModule.EvdevHook) { + if (!nativeModule?.EvdevHook) { return false; } const Native = nativeModule.EvdevHook; diff --git a/fluxer_desktop/src/main/GlobalKeyHook.ts b/fluxer_desktop/src/main/GlobalKeyHook.ts index 0db48e239..4796d1e65 100644 --- a/fluxer_desktop/src/main/GlobalKeyHook.ts +++ b/fluxer_desktop/src/main/GlobalKeyHook.ts @@ -321,7 +321,7 @@ function startNativeBackend(): boolean { let module: NativeInputHookModule; try { const loaded = loadNativeInputHookModule(); - if (!loaded || !loaded.InputHook) return false; + if (!loaded?.InputHook) return false; module = loaded; } catch (error) { logger.error('Failed to load native input hook module:', error); diff --git a/fluxer_desktop/src/main/Passkeys.ts b/fluxer_desktop/src/main/Passkeys.ts index 892608598..2336cc716 100644 --- a/fluxer_desktop/src/main/Passkeys.ts +++ b/fluxer_desktop/src/main/Passkeys.ts @@ -43,7 +43,7 @@ const convertDescriptorList = ( ): Array | undefined => list?.map((descriptor) => ({ id: base64UrlToBuffer(descriptor.id), - type: descriptor.type, + type: 'public-key', transports: descriptor.transports, })); const convertRequestOptions = (options: PublicKeyCredentialRequestOptionsJSON): NativeRequestOptionsWithoutOrigin => ({ diff --git a/fluxer_desktop/src/main/Spellcheck.ts b/fluxer_desktop/src/main/Spellcheck.ts index a8263a1d1..9fda93b2c 100644 --- a/fluxer_desktop/src/main/Spellcheck.ts +++ b/fluxer_desktop/src/main/Spellcheck.ts @@ -394,7 +394,7 @@ const NATIVE_AFF_PATH_TAG = '__native__'; function loadFromSystemHunspell(tag: string): LoadedHunspell | null { const mod = loadSystemHunspell(); - if (!mod || !mod.Hunspell || !mod.discoverSystemDictionaries) return null; + if (!mod?.Hunspell || !mod.discoverSystemDictionaries) return null; const wantedKey = norm(tag); const wantedBase = languageBase(tag); const installed = mod.discoverSystemDictionaries(); diff --git a/fluxer_desktop/src/main/Updater.ts b/fluxer_desktop/src/main/Updater.ts index e7f9873dd..a9ec7f8d5 100644 --- a/fluxer_desktop/src/main/Updater.ts +++ b/fluxer_desktop/src/main/Updater.ts @@ -18,7 +18,7 @@ import { import {setQuitting} from '@electron/main/Window'; import {app, autoUpdater, type BrowserWindow, ipcMain} from 'electron'; import log from 'electron-log'; -import type {UpdateInfo} from 'velopack'; +import type {UpdateInfo, VelopackAsset} from 'velopack'; type UpdaterContext = 'user' | 'background' | 'focus'; type UpdaterEvent = @@ -68,7 +68,9 @@ type UpdaterEvent = const requireModule = createRequire(import.meta.url); let lastContext: UpdaterContext = 'background'; -let pendingVelopackUpdate: UpdateInfo | null = null; +type VelopackUpdate = UpdateInfo | VelopackAsset; + +let pendingVelopackUpdate: VelopackUpdate | null = null; let velopackCheckPromise: Promise | null = null; let velopackDownloadPromise: Promise | null = null; let velopackInstallStarted = false; @@ -105,12 +107,16 @@ function backoffDelay(attempt: number): number { return Math.round(capped * (0.5 + Math.random() * 0.5)); } -function getVelopackUpdateVersion(update: UpdateInfo): string | null { - return update.TargetFullRelease?.Version ?? null; +function getVelopackAsset(update: VelopackUpdate): VelopackAsset { + return 'TargetFullRelease' in update ? update.TargetFullRelease : update; } -function getVelopackUpdateSize(update: UpdateInfo): number | null { - const raw = update.TargetFullRelease?.Size; +function getVelopackUpdateVersion(update: VelopackUpdate): string | null { + return getVelopackAsset(update).Version ?? null; +} + +function getVelopackUpdateSize(update: VelopackUpdate): number | null { + const raw = getVelopackAsset(update).Size; if (raw == null) return null; if (typeof raw === 'bigint') { return Number(raw); @@ -201,6 +207,10 @@ async function downloadVelopackUpdate( }); return; } + if (!('TargetFullRelease' in update)) { + send(getMainWindow(), {type: 'downloaded', context, version: getVelopackUpdateVersion(update)}); + return; + } velopackDownloadPromise = (async () => { const total = getVelopackUpdateSize(update) ?? 0; let lastError: unknown; diff --git a/fluxer_desktop/src/main/WindowsShortcuts.ts b/fluxer_desktop/src/main/WindowsShortcuts.ts index 092af03f5..0c55874b0 100644 --- a/fluxer_desktop/src/main/WindowsShortcuts.ts +++ b/fluxer_desktop/src/main/WindowsShortcuts.ts @@ -141,7 +141,7 @@ async function repairOneShortcut( async function repairWindowsShortcutsAsync(repairPaths: WindowsShortcutRepairPaths): Promise { const binding = loadWinShell(); - if (!binding || !binding.createShortcut) { + if (!binding?.createShortcut) { console.warn('[WindowsShortcuts] @fluxer/win-shell unavailable; skipping shortcut repair'); return; } diff --git a/fluxer_docs/Dockerfile b/fluxer_docs/Dockerfile index a14690cad..b5f34f327 100644 --- a/fluxer_docs/Dockerfile +++ b/fluxer_docs/Dockerfile @@ -1,11 +1,11 @@ # SPDX-License-Identifier: AGPL-3.0-or-later ARG BUILD_VERSION -FROM node:24-bookworm-slim AS base +FROM node:26-trixie-slim AS base WORKDIR /usr/src/app -RUN corepack enable && corepack prepare pnpm@10.29.3 --activate +RUN npm install -g pnpm@12.4.2 FROM base AS deploy @@ -21,9 +21,9 @@ COPY . . RUN pnpm install --frozen-lockfile RUN pnpm --filter fluxer_docs run build -RUN pnpm deploy --legacy --filter=fluxer_docs --prod --config.allowUnusedPatches=true /out +RUN pnpm deploy --legacy --filter=fluxer_docs --prod --config.allow-unused-patches=true /out -FROM node:24-bookworm-slim +FROM node:26-trixie-slim ARG BUILD_VERSION="" ARG SOURCE_SHA="" @@ -33,10 +33,10 @@ WORKDIR /usr/src/app/fluxer_docs RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ - libvips42 && \ + libvips42t64 && \ rm -rf /var/lib/apt/lists/* -RUN corepack enable && corepack prepare pnpm@10.29.3 --activate +RUN npm install -g pnpm@12.4.2 LABEL maintainer="Fluxer" LABEL org.opencontainers.image.title="fluxer-docs" @@ -54,11 +54,9 @@ LABEL app.fluxer.build-version="${BUILD_VERSION}" COPY --from=deploy /out ./ COPY --from=deploy /usr/src/app/fluxer_docs/dist ./dist -RUN mkdir -p /usr/src/app/.cache/corepack && \ - chown -R 65532:65532 /usr/src/app +RUN chown -R 65532:65532 /usr/src/app ENV HOME=/usr/src/app -ENV COREPACK_HOME=/usr/src/app/.cache/corepack ENV NODE_ENV=production ENV NODE_OPTIONS="--enable-source-maps" ENV NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt diff --git a/fluxer_docs/package.json b/fluxer_docs/package.json index fcafa62a8..394589dde 100644 --- a/fluxer_docs/package.json +++ b/fluxer_docs/package.json @@ -38,6 +38,6 @@ "mdast-util-mdx-jsx": "catalog:", "mdast-util-to-hast": "catalog:", "remark-gfm": "catalog:", - "typescript": "6.0.2" + "typescript": "catalog:" } } diff --git a/fluxer_docs/scripts/VerifyDocsStyle.ts b/fluxer_docs/scripts/VerifyDocsStyle.ts index 308dff65e..33af8ac6b 100644 --- a/fluxer_docs/scripts/VerifyDocsStyle.ts +++ b/fluxer_docs/scripts/VerifyDocsStyle.ts @@ -17,7 +17,7 @@ import { } from './DocsTableWidth.ts'; const STYLES_ROOT = fileURLToPath(new URL('../src/styles/', import.meta.url)); -const STARLIGHT_STYLES = fileURLToPath(new URL('../node_modules/@astrojs/starlight/style/', import.meta.url)); +const STARLIGHT_STYLES = fileURLToPath(new URL('../node_modules/@astrojs/starlight/dist/style/', import.meta.url)); const FORBIDDEN_MARKETING_WORDS = [ 'seamless', diff --git a/fluxer_docs/src/content/docs/operator/configuration.mdx b/fluxer_docs/src/content/docs/operator/configuration.mdx index 93f2b9b0a..bdd9da078 100644 --- a/fluxer_docs/src/content/docs/operator/configuration.mdx +++ b/fluxer_docs/src/content/docs/operator/configuration.mdx @@ -1723,7 +1723,7 @@ The stack runs its containers on one Docker bridge network, which is private to | Service | Image | What it does | | --- | --- | --- | -| edge | caddy:2.10-alpine | TLS and path routing, the only HTTP entry point | +| edge | caddy:2.11-alpine | TLS and path routing, the only HTTP entry point | | app-proxy | fluxer-app-proxy-self-hosted | Serves the web client and builds its CSP header | | static-proxy | fluxer-static | Serves the static asset bundle | | api | fluxer-api | The HTTP API | @@ -1737,11 +1737,11 @@ The stack runs its containers on one Docker bridge network, which is private to | gifs, gifs-shard | fluxer-gifs | GIF provider access | | unfurl, unfurl-shard | fluxer-unfurl | Link unfurling | | postgres | postgres:16-alpine | The database | -| valkey | valkey/valkey:8.1-alpine | The key-value store and pub/sub bus, and the deletion queues | +| valkey | valkey/valkey:9.1-alpine | The key-value store and pub/sub bus, and the deletion queues | | nats | nats:2.14-alpine | Core messaging, and the JetStream streams holding queued background jobs | -| meilisearch | getmeili/meilisearch:v1.12 | The search index | -| seaweedfs | chrislusf/seaweedfs:4.34 | S3-compatible object storage | -| seaweedfs-init | chrislusf/seaweedfs:4.34 | Creates the buckets and the S3 identity, then exits | +| meilisearch | getmeili/meilisearch:v1.53 | The search index | +| seaweedfs | chrislusf/seaweedfs:4.47 | S3-compatible object storage | +| seaweedfs-init | chrislusf/seaweedfs:4.47 | Creates the buckets and the S3 identity, then exits | | livekit | livekit/livekit-server:v1.12.0 | Voice and video | The edge and LiveKit are the only services that publish ports. The edge publishes 80/tcp, 443/tcp, 443/udp, or one plain-HTTP port under the overlay. LiveKit publishes 7881/tcp and 7882/udp. Everything else is reachable only over the bridge network. diff --git a/fluxer_gateway/Dockerfile b/fluxer_gateway/Dockerfile index 05a330663..c0c845b20 100644 --- a/fluxer_gateway/Dockerfile +++ b/fluxer_gateway/Dockerfile @@ -2,7 +2,7 @@ FROM erlang:28-slim AS build ARG LOGGER_LEVEL=info -ARG RUST_TOOLCHAIN=1.93.0 +ARG RUST_TOOLCHAIN=1.98.1 ENV PATH="/root/.cargo/bin:${PATH}" @@ -19,7 +19,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ && rm -rf /var/lib/apt/lists/* -RUN curl --retry 5 --retry-delay 2 --retry-all-errors -fsSL https://github.com/erlang/rebar3/releases/download/3.24.0/rebar3 -o /usr/local/bin/rebar3 && \ +RUN curl --retry 5 --retry-delay 2 --retry-all-errors -fsSL https://github.com/erlang/rebar3/releases/download/3.27.0/rebar3 -o /usr/local/bin/rebar3 && \ chmod +x /usr/local/bin/rebar3 RUN curl --retry 5 --retry-delay 2 --retry-all-errors --proto '=https' --tlsv1.2 -fsSL https://sh.rustup.rs | \ diff --git a/fluxer_gateway/native/guild_member_list_oset_nif/Cargo.lock b/fluxer_gateway/native/guild_member_list_oset_nif/Cargo.lock index c27eb5b20..4d196da56 100644 --- a/fluxer_gateway/native/guild_member_list_oset_nif/Cargo.lock +++ b/fluxer_gateway/native/guild_member_list_oset_nif/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "guild_member_list_oset_nif" @@ -32,9 +32,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -48,18 +48,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -98,15 +98,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" dependencies = [ "proc-macro2", "quote", @@ -115,9 +115,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "windows-link" diff --git a/fluxer_gateway/native/push_markdown_plaintext_nif/Cargo.lock b/fluxer_gateway/native/push_markdown_plaintext_nif/Cargo.lock index 855dcb4fd..687c6053e 100644 --- a/fluxer_gateway/native/push_markdown_plaintext_nif/Cargo.lock +++ b/fluxer_gateway/native/push_markdown_plaintext_nif/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "fluxer_markdown_parser" @@ -39,9 +39,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -55,15 +55,15 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -80,9 +80,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -116,20 +116,20 @@ dependencies = [ "inventory", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -137,29 +137,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -170,9 +170,20 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -181,9 +192,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "windows-link" @@ -193,6 +204,6 @@ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/fluxer_gateway/rebar.config b/fluxer_gateway/rebar.config index 9c2df278f..f1d3aed17 100644 --- a/fluxer_gateway/rebar.config +++ b/fluxer_gateway/rebar.config @@ -1,11 +1,11 @@ % SPDX-License-Identifier: AGPL-3.0-or-later {erl_opts, [debug_info, nowarn_deprecated_function]}. {deps, [ - {cowboy, "2.18.0"}, - {base64url, "1.0.1"}, - {jose, "1.11.10"}, - {ezstd, "1.1.0"}, + {cowboy, "2.19.0"}, + {jose, "1.11.12"}, + {ezstd, "1.2.4"}, {enats, "1.2.0"}, + {opentelemetry_api, "1.5.0"}, {eqwalizer_support, {git_subdir, "https://github.com/whatsapp/eqwalizer.git", {ref, "c57aa9e3a05553d1ba66ea647a2177eaa469211b"}, "eqwalizer_support"}} @@ -13,8 +13,8 @@ {project_plugins, [ {erlfmt, {git, "https://github.com/WhatsApp/erlfmt.git", {tag, "v1.8.0"}}}, - {rebar3_lint, {git, "https://github.com/project-fifo/rebar3_lint.git", {branch, "master"}}}, - {rebar3_audit, "0.2.7"} + {rebar3_lint, "6.0.0"}, + {rebar3_audit, "0.2.8"} ]}. {pre_hooks, [{compile, "../tools/ci/run.sh build-gateway-nifs --gateway-dir ."}]}. @@ -22,11 +22,10 @@ {overrides, [ {override, cowboy, [{deps, [cowlib, ranch]}]}, {override, enats, [{plugins, []}, {project_plugins, []}]}, + {add, enats, [{erl_opts, [nowarn_deprecated_catch]}]}, + {add, jose, [{erl_opts, [nowarn_deprecated_catch]}]}, {override, enats_msg, [{plugins, []}, {project_plugins, []}]}, - {override, ezstd, [{plugins, []}, {project_plugins, []}]}, - {override, opentelemetry_api, [ - {erl_opts, [debug_info, {no_auto_import, [{link, 2}]}]} - ]} + {override, ezstd, [{plugins, []}, {project_plugins, []}]} ]}. {relx, [ @@ -55,7 +54,7 @@ {test, [ {erl_opts, [{d, 'TEST'}]}, {deps, [ - {meck, "0.9.2"} + {meck, "1.2.0"} ]} ]} ]}. diff --git a/fluxer_gateway/rebar.lock b/fluxer_gateway/rebar.lock index e2967cc26..2ccccaf68 100644 --- a/fluxer_gateway/rebar.lock +++ b/fluxer_gateway/rebar.lock @@ -1,7 +1,6 @@ {"1.2.0", -[{<<"base64url">>,{pkg,<<"base64url">>,<<"1.0.1">>},0}, - {<<"cowboy">>,{pkg,<<"cowboy">>,<<"2.18.0">>},0}, - {<<"cowlib">>,{pkg,<<"cowlib">>,<<"2.19.0">>},1}, +[{<<"cowboy">>,{pkg,<<"cowboy">>,<<"2.19.0">>},0}, + {<<"cowlib">>,{pkg,<<"cowlib">>,<<"2.20.0">>},1}, {<<"enats">>,{pkg,<<"enats">>,<<"1.2.0">>},0}, {<<"enats_msg">>,{pkg,<<"enats_msg">>,<<"1.0.3">>},1}, {<<"eqwalizer_support">>, @@ -9,29 +8,27 @@ {ref,"c57aa9e3a05553d1ba66ea647a2177eaa469211b"}, "eqwalizer_support"}, 0}, - {<<"ezstd">>,{pkg,<<"ezstd">>,<<"1.1.0">>},0}, - {<<"jose">>,{pkg,<<"jose">>,<<"1.11.10">>},0}, - {<<"opentelemetry_api">>,{pkg,<<"opentelemetry_api">>,<<"1.4.0">>},1}, - {<<"ranch">>,{pkg,<<"ranch">>,<<"2.2.1">>},1}]}. + {<<"ezstd">>,{pkg,<<"ezstd">>,<<"1.2.4">>},0}, + {<<"jose">>,{pkg,<<"jose">>,<<"1.11.12">>},0}, + {<<"opentelemetry_api">>,{pkg,<<"opentelemetry_api">>,<<"1.5.0">>},0}, + {<<"ranch">>,{pkg,<<"ranch">>,<<"2.3.0">>},1}]}. [ {pkg_hash,[ - {<<"base64url">>, <<"F8C7F2DA04CA9A5D0F5F50258F055E1D699F0E8BF4CFDB30B750865368403CF6">>}, - {<<"cowboy">>, <<"BFF388EB4D6356CB3F88C26E65B515976BF04B401B805D31550C3E60EBA8FE18">>}, - {<<"cowlib">>, <<"C9D11C9D035472E27A740C9F327786C61ED209269B4BE0260D59D3EC07B8949F">>}, + {<<"cowboy">>, <<"78B9D92D25A23E56D7341040B67946C04067CD77DE966E2372865F673A8E6F59">>}, + {<<"cowlib">>, <<"BB525377BA634CD6D68BAC7BFF5D98571F738806139D335DACA827717C5DC172">>}, {<<"enats">>, <<"D7459C804013CAFA4AF880B18D446C48890D28D372D62AD66C76187E5779248D">>}, {<<"enats_msg">>, <<"50631124F37D88BE76A91A5B96A6565C5981EBF917CD819F0175CA658A966F43">>}, - {<<"ezstd">>, <<"D3B483D6ACFADFB65DBA4015371E6D54526DBF3D9EF0941B5ADD8BF5890731F4">>}, - {<<"jose">>, <<"A903F5227417BD2A08C8A00A0CBCC458118BE84480955E8D251297A425723F83">>}, - {<<"opentelemetry_api">>, <<"63CA1742F92F00059298F478048DFB826F4B20D49534493D6919A0DB39B6DB04">>}, - {<<"ranch">>, <<"FC2BB0E800EFBEAB8FF82EB325450B9C08653B14C3F69E8B09BBEA304973105D">>}]}, + {<<"ezstd">>, <<"7AB3ED4BF5ED93E249C936F457A060CF99487F392A41B2B3FD0F93E2C792A7D6">>}, + {<<"jose">>, <<"06E62B467B61D3726CBC19E9B5489F7549C37993DE846DFB3EE8259F9ED208B3">>}, + {<<"opentelemetry_api">>, <<"1A676F3E3340CAB81C763E939A42E11A70C22863F645AA06AAFEFC689B5550CF">>}, + {<<"ranch">>, <<"7DE7B041A9A6A5091A3AA5898D66C0564BE671D87DB4F9D63B1B5EE775B097DF">>}]}, {pkg_hash_ext,[ - {<<"base64url">>, <<"F9B3ADD4731A02A9B0410398B475B33E7566A695365237A6BDEE1BB447719F5C">>}, - {<<"cowboy">>, <<"62D0B26ABCF455054972B0DA242389C69D5982CE5914AFB8C344517F667B9600">>}, - {<<"cowlib">>, <<"6DC66E3135B229193EA4DCB14294E79520C923D391315C9C962EF0B4BEA72356">>}, + {<<"cowboy">>, <<"986DAE81F99FCB78EF2D8EFC21D738CEE189410840EEAF32ECA84ADA81DCF6D4">>}, + {<<"cowlib">>, <<"7D41A0DD2C093041FF3779AC5FE8A1585A68EC7CB2DD1DE0536BDD2452FD7BA1">>}, {<<"enats">>, <<"20DEB3CB1D3E960194DF8B136C40D2DB085B485BBA5E493B340AB5F9FD2BED22">>}, {<<"enats_msg">>, <<"C4F2139E5144FABC99AFE01B8B016AD9DA278CDDC60857AC5D5AFB0AD1283534">>}, - {<<"ezstd">>, <<"28CFA0ED6CC3922095AD5BA0F23392A1664273358B17184BAA909868361184E7">>}, - {<<"jose">>, <<"0D6CD36FF8BA174DB29148FC112B5842186B68A90CE9FC2B3EC3AFE76593E614">>}, - {<<"opentelemetry_api">>, <<"3DFBBFAA2C2ED3121C5C483162836C4F9027DEF469C41578AF5EF32589FCFC58">>}, - {<<"ranch">>, <<"55F05CCE20EC2DA1D90DE5D5981AFB93DBFC01325FC7E933189AA5C62F037C24">>}]} + {<<"ezstd">>, <<"C79A63C8F1706CA5402D4D97347A1934F41FD8DD055C7AF4CA92B9BCBEF6D1C0">>}, + {<<"jose">>, <<"31E92B653E9210B696765CDD885437457DE1ADD2A9011D92F8CF63E4641BAB7B">>}, + {<<"opentelemetry_api">>, <<"F53EC8A1337AE4A487D43AC89DA4BD3A3C99DDF576655D071DEED8B56A2D5DDA">>}, + {<<"ranch">>, <<"6168EC49409D982F7CFBD83DD083144F6CBE67CAA4036551D2F0A3AD67C9D023">>}]} ]. diff --git a/fluxer_gateway/src/fluxer_gateway.app.src b/fluxer_gateway/src/fluxer_gateway.app.src index 03dfc6655..42e776fb7 100644 --- a/fluxer_gateway/src/fluxer_gateway.app.src +++ b/fluxer_gateway/src/fluxer_gateway.app.src @@ -15,7 +15,6 @@ ranch, cowboy, ezstd, - base64url, enats ]}, {env, []}, diff --git a/fluxer_gateway/src/gateway/gateway_rpc_guild_counts.erl b/fluxer_gateway/src/gateway/gateway_rpc_guild_counts.erl index 1a41092ac..9bc6ccdab 100644 --- a/fluxer_gateway/src/gateway/gateway_rpc_guild_counts.erl +++ b/fluxer_gateway/src/gateway/gateway_rpc_guild_counts.erl @@ -29,7 +29,7 @@ handle(<<"guild.get_online_counts_batch">>, #{<<"guild_ids">> := GuildIdsBin}) - fetch_entries(GuildIds) -> case guild_counts_cache_supports_bulk_get() of true -> normalize_entries(fetch_bulk(GuildIds)); - false -> [E || GId <- GuildIds, (E = fetch_single(GId)) =/= undefined] + false -> [E || GId <- GuildIds, E <- [fetch_single(GId)], E =/= undefined] end. -spec fetch_single(integer()) -> map() | undefined. @@ -61,7 +61,7 @@ guild_counts_cache_supports_bulk_get() -> -spec normalize_entries(term()) -> [map()]. normalize_entries(Entries) when is_list(Entries) -> - [N || E <- Entries, (N = normalize_entry(E)) =/= undefined]; + [N || E <- Entries, N <- [normalize_entry(E)], N =/= undefined]; normalize_entries(Entries) when is_map(Entries) -> normalize_entries(map_entries(Entries)); normalize_entries(_) -> diff --git a/fluxer_gateway/src/guild/guild_request_members_search.erl b/fluxer_gateway/src/guild/guild_request_members_search.erl index 08757dd22..33b6e0f36 100644 --- a/fluxer_gateway/src/guild/guild_request_members_search.erl +++ b/fluxer_gateway/src/guild/guild_request_members_search.erl @@ -99,7 +99,8 @@ collect_found_members(UniqueIds, MembersMap) -> [ M || Id <- UniqueIds, - (M = maps:get(Id, MembersMap, undefined)) =/= undefined + M <- [maps:get(Id, MembersMap, undefined)], + M =/= undefined ]. -spec resolve_member_limit(binary(), non_neg_integer()) -> pos_integer(). diff --git a/fluxer_gateway/src/push/jose_json_otp.erl b/fluxer_gateway/src/push/jose_json_otp.erl deleted file mode 100644 index df8ba5e24..000000000 --- a/fluxer_gateway/src/push/jose_json_otp.erl +++ /dev/null @@ -1,15 +0,0 @@ -%% SPDX-License-Identifier: AGPL-3.0-or-later - --module(jose_json_otp). --typing([eqwalizer]). --behaviour(jose_json). - --export([decode/1, encode/1]). - --spec decode(iodata()) -> term(). -decode(Bin) -> - json:decode(iolist_to_binary(Bin)). - --spec encode(json:encode_value()) -> binary(). -encode(Term) -> - iolist_to_binary(json:encode(Term)). diff --git a/fluxer_gateway/src/session/session_lifecycle.erl b/fluxer_gateway/src/session/session_lifecycle.erl index f0da926ef..d334cc171 100644 --- a/fluxer_gateway/src/session/session_lifecycle.erl +++ b/fluxer_gateway/src/session/session_lifecycle.erl @@ -55,7 +55,10 @@ handle_terminate_cast(Hashes, #{auth_session_id_hash := AuthHash} = State) -> -spec any_hash_matches(binary(), [binary()]) -> boolean(). any_hash_matches(AuthHash, Hashes) -> - lists:any(fun(Hash) -> base64url:decode(Hash) =:= AuthHash end, Hashes). + lists:any( + fun(Hash) -> base64:decode(Hash, #{mode => urlsafe, padding => false}) =:= AuthHash end, + Hashes + ). -spec terminate(term(), session_state()) -> ok. terminate(_Reason, State) -> diff --git a/fluxer_gateway/src/session/session_manager_shard_drain.erl b/fluxer_gateway/src/session/session_manager_shard_drain.erl index c1b7a66f8..6f1fc9cb7 100644 --- a/fluxer_gateway/src/session/session_manager_shard_drain.erl +++ b/fluxer_gateway/src/session/session_manager_shard_drain.erl @@ -218,7 +218,7 @@ extract_auth_session_id_hash(Data) -> case maps:get(<<"auth_session_id_hash">>, Data, undefined) of undefined -> <<>>; null -> <<>>; - Encoded -> base64url:decode(Encoded) + Encoded -> base64:decode(Encoded, #{mode => urlsafe, padding => false}) end. -spec build_user_data(map()) -> map(). diff --git a/fluxer_gateway/src/utils/custom_status_expiry.erl b/fluxer_gateway/src/utils/custom_status_expiry.erl index 3687ec1a4..b259adac5 100644 --- a/fluxer_gateway/src/utils/custom_status_expiry.erl +++ b/fluxer_gateway/src/utils/custom_status_expiry.erl @@ -127,11 +127,14 @@ expiring_presence_pids(UserIds) -> -spec has_expires_at(integer()) -> boolean(). has_expires_at(UserId) -> - case catch presence_cache:get(UserId) of + try presence_cache:get(UserId) of {ok, Presence} when is_map(Presence) -> presence_carries_expiry(Presence); _ -> false + catch + _:_ -> + false end. %% presence_cache:get/1 returns {ok, map()} | not_found, never a bare map, and diff --git a/fluxer_gateway/src/utils/utils.erl b/fluxer_gateway/src/utils/utils.erl index 3b0bce284..358641df8 100644 --- a/fluxer_gateway/src/utils/utils.erl +++ b/fluxer_gateway/src/utils/utils.erl @@ -30,7 +30,7 @@ generate_session_id() -> -spec generate_resume_token() -> binary(). generate_resume_token() -> Bytes = crypto:strong_rand_bytes(32), - base64url:encode(Bytes). + base64:encode(Bytes, #{mode => urlsafe, padding => false}). -spec hash_token(binary()) -> binary(). hash_token(Token) -> diff --git a/fluxer_gateway/test/presence_connect_tests.erl b/fluxer_gateway/test/presence_connect_tests.erl index 771039017..2cfd3cbbe 100644 --- a/fluxer_gateway/test/presence_connect_tests.erl +++ b/fluxer_gateway/test/presence_connect_tests.erl @@ -63,7 +63,8 @@ terminate_session_call_removes_only_matching_sessions_test() -> <<"keep">> => terminate_probe_session(<<"keep">>, KeepPid, KeepRef) }, {reply, ok, NewState} = presence_connect:handle_terminate_session_call( - [base64url:encode(<<"drop_hash">>)], terminate_probe_state(Sessions) + [base64:encode(<<"drop_hash">>, #{mode => urlsafe, padding => false})], + terminate_probe_state(Sessions) ), NewSessions = maps:get(sessions, NewState), ?assertEqual(false, maps:is_key(<<"drop">>, NewSessions)), @@ -227,7 +228,10 @@ terminate_probe_loop(AuthHash, Parent) -> end. handle_terminate_probe_call(AuthHash, Parent, From, SessionIdHashes) -> - DecodedHashes = [base64url:decode(Hash) || Hash <- SessionIdHashes], + DecodedHashes = [ + base64:decode(Hash, #{mode => urlsafe, padding => false}) + || Hash <- SessionIdHashes + ], case lists:member(AuthHash, DecodedHashes) of true -> Parent ! {terminate_probe, self(), terminated}, diff --git a/fluxer_gifs/Cargo.toml b/fluxer_gifs/Cargo.toml index 5b1ce300a..55f02fb30 100644 --- a/fluxer_gifs/Cargo.toml +++ b/fluxer_gifs/Cargo.toml @@ -10,15 +10,14 @@ publish = false [dependencies] fluxer_common = { path = "../fluxer_common" } anyhow = "1.0.104" -base64 = "0.22.1" fluxer-svc = { path = "../fluxer_svc", default-features = false } hmac = "0.13.0" -moka = { version = "0.12.15", features = ["future", "sync"] } -reqwest = { version = "0.13.4", default-features = false, features = ["json", "rustls"] } -serde = { version = "1.0.228", features = ["derive", "rc"] } -serde_json = "1.0.150" +moka = { version = "0.12.16", features = ["future", "sync"] } +reqwest = { version = "0.13.5", default-features = false, features = ["json", "rustls"] } +serde = { version = "1.0.229", features = ["derive", "rc"] } +serde_json = "1.0.151" sha2 = "0.11.0" -tokio = { version = "1.52.3", features = ["macros", "rt-multi-thread", "signal", "sync", "time"] } +tokio = { version = "1.53.1", features = ["macros", "rt-multi-thread", "signal", "sync", "time"] } tracing = "0.1.44" url = "2.5" urlencoding = "2.1" diff --git a/fluxer_gifs/Dockerfile b/fluxer_gifs/Dockerfile index 393e7f489..4abfad11b 100644 --- a/fluxer_gifs/Dockerfile +++ b/fluxer_gifs/Dockerfile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: AGPL-3.0-or-later -FROM rust:1-bookworm AS builder +FROM rust:1-trixie AS builder WORKDIR /usr/src/app @@ -8,7 +8,7 @@ COPY . . RUN cargo build --release -p fluxer-gifs -FROM debian:bookworm-slim +FROM debian:trixie-slim ARG BUILD_VERSION="" ARG SOURCE_SHA="" diff --git a/fluxer_media_proxy/Cargo.toml b/fluxer_media_proxy/Cargo.toml index a7956f54f..9f4259b72 100644 --- a/fluxer_media_proxy/Cargo.toml +++ b/fluxer_media_proxy/Cargo.toml @@ -22,40 +22,40 @@ harness = false fluxer_common = { path = "../fluxer_common" } anyhow = "1.0.104" axum = {version = "0.8.9", default-features = false, features = ["http1", "json", "query", "tokio"]} -base64 = "0.22.1" -bytes = "1.11.1" -clap = {version = "4.6.1", features = ["derive"]} -futures-util = {version = "0.3.32", default-features = false, features = ["std"]} +base64 = "0.23.1" +bytes = "1.12.1" +clap = {version = "4.6.7", features = ["derive"]} +futures-util = {version = "0.3.34", default-features = false, features = ["std"]} hex = "0.4.3" hmac = "0.13.0" -http = "1.4.2" -http-body = "1.0.1" -http-body-util = "0.1.3" -hyper = {version = "1.10.1", default-features = false} -libc = "0.2.186" -moka = {version = "0.12.15", features = ["sync"]} +http = "1.5.0" +http-body = "1.1.0" +http-body-util = "0.1.5" +hyper = {version = "1.11.1", default-features = false} +libc = "0.2.189" +moka = {version = "0.12.16", features = ["sync"]} parking_lot = "0.12.5" percent-encoding = "2.3.2" -rand = "0.10.1" +rand = "0.10.2" rand_chacha = "0.10.0" -reqwest = {version = "0.13.4", default-features = false, features = ["json", "rustls", "stream"]} +reqwest = {version = "0.13.5", default-features = false, features = ["json", "rustls", "stream"]} reqwest-middleware = "0.5.2" reqwest-retry = "0.9.1" -serde = {version = "1.0.228", features = ["derive"]} -serde_json = "1.0.150" +serde = {version = "1.0.229", features = ["derive"]} +serde_json = "1.0.151" sha2 = "0.11.0" tempfile = "3.27.0" -thiserror = "2.0.18" -tokio = {version = "1.52.3", features = ["fs", "io-util", "macros", "net", "rt-multi-thread", "signal", "sync", "time"]} -tokio-util = {version = "0.7.18", features = ["io"]} +thiserror = "2.0.20" +tokio = {version = "1.53.1", features = ["fs", "io-util", "macros", "net", "rt-multi-thread", "signal", "sync", "time"]} +tokio-util = {version = "0.7.19", features = ["io"]} tracing = "0.1.44" tracing-subscriber = {version = "0.3.23", features = ["env-filter", "fmt", "json"]} url = "2.5.8" wyhash = "0.6.0" [build-dependencies] -cc = "1.2.63" -pkg-config = "0.3.33" +cc = "1.4.6" +pkg-config = "0.3.34" [dev-dependencies] criterion = "0.8.2" diff --git a/fluxer_media_proxy/benches/core.rs b/fluxer_media_proxy/benches/core.rs index 2c03bd3cc..e8a6cae22 100644 --- a/fluxer_media_proxy/benches/core.rs +++ b/fluxer_media_proxy/benches/core.rs @@ -109,7 +109,7 @@ fn bench_transform_cache_key(c: &mut Criterion) { fn bench_thumbhash(c: &mut Criterion) { let mut pixels = vec![0u8; 64 * 64 * 4]; - for (i, px) in pixels.chunks_exact_mut(4).enumerate() { + for (i, px) in pixels.as_chunks_mut::<4>().0.iter_mut().enumerate() { px[0] = (i % 64) as u8; px[1] = (i / 64) as u8; px[2] = 128; diff --git a/fluxer_media_proxy/fuzz/Cargo.lock b/fluxer_media_proxy/fuzz/Cargo.lock index 40b556070..ca5f7501f 100644 --- a/fluxer_media_proxy/fuzz/Cargo.lock +++ b/fluxer_media_proxy/fuzz/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -63,9 +63,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arbitrary" @@ -75,13 +75,13 @@ checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -110,9 +110,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.17.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00" +checksum = "b281d307588d634de920874890732659e2e7672f72b5e10e81badc1a8a83621e" dependencies = [ "aws-lc-sys", "zeroize", @@ -120,21 +120,22 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.41.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4" +checksum = "9bff6c3b54fad79a2e60b8102caf565819711497c1f5f092f49508e2f5c31b27" dependencies = [ "cc", "cmake", "dunce", "fs_extra", + "pkg-config", ] [[package]] name = "aws-sigv4" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "723c2234ad7511ceef63eab016b7ba6ff7c55590fefb96fa8467af014a07309f" +checksum = "31d955e76ff96acd555bf06fa0fa6d5bf9335fa84ae7c64481b20ae61d231f70" dependencies = [ "aws-credential-types", "aws-smithy-http", @@ -145,7 +146,7 @@ dependencies = [ "hex", "hmac", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "percent-encoding", "sha2", "time", @@ -175,8 +176,8 @@ dependencies = [ "bytes-utils", "futures-core", "futures-util", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "http-body-util", "percent-encoding", "pin-project-lite", @@ -186,16 +187,16 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api" -version = "1.15.0" +version = "1.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "954c563ce84507722d2679f07a35d21b9c6466b3872d513020d0281fc8112ac9" +checksum = "6d881a7b7ad179fd6611680c9de89f716fb00ab40299a9a7b8c6913e8f7511a8" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api-macros", "aws-smithy-types", "bytes", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "pin-project-lite", "tokio", "tracing", @@ -210,22 +211,22 @@ checksum = "221eaa237ddf1ca79b60d1372aad77e47f9c0ea5b3ce5099da8c61d027dc77b3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "aws-smithy-types" -version = "1.6.2" +version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fce83ce9abbb198d25bc7131e468d0f9fe1257125e58c39f3f9fc9f5098c9647" +checksum = "0b791f3ac597193fe1d08b82366986eb1f5bc31f2ac6c194c0855276116c76cd" dependencies = [ "base64-simd", "bytes", "bytes-utils", "http 0.2.12", - "http 1.4.2", + "http 1.5.0", "http-body 0.4.6", - "http-body 1.0.1", + "http-body 1.1.0", "http-body-util", "itoa", "num-integer", @@ -246,8 +247,8 @@ dependencies = [ "bytes", "form_urlencoded", "futures-util", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "http-body-util", "hyper", "hyper-util", @@ -276,8 +277,8 @@ checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ "bytes", "futures-core", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "http-body-util", "mime", "pin-project-lite", @@ -292,6 +293,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + [[package]] name = "base64-simd" version = "0.8.0" @@ -304,30 +311,30 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block-buffer" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", ] [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "bytes-utils" @@ -341,9 +348,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.63" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", "jobserver", @@ -353,21 +360,21 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] name = "chacha20" -version = "0.10.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" dependencies = [ "cfg-if", "cpufeatures", @@ -376,9 +383,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", "clap_derive", @@ -386,9 +393,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstream", "anstyle", @@ -398,21 +405,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.1" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" +checksum = "f9c751b79415d4e559e3d1fcf128e09e720eb673a06d26cf6f392d37d75b66e0" dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "cmake" @@ -437,9 +444,9 @@ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "combine" -version = "4.6.7" +version = "4.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" dependencies = [ "bytes", "memchr", @@ -469,36 +476,36 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" dependencies = [ "libc", ] [[package]] name = "crossbeam-channel" -version = "0.5.15" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +checksum = "98b0cc327b5bc766e7fda9c9260cc0fa81b43a8e240440422dff70788e3f9ef1" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "crypto-common" @@ -538,13 +545,13 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -577,15 +584,15 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fluxer-media-proxy" @@ -593,7 +600,7 @@ version = "0.1.0" dependencies = [ "anyhow", "axum", - "base64", + "base64 0.23.1", "bytes", "cc", "clap", @@ -601,16 +608,17 @@ dependencies = [ "futures-util", "hex", "hmac", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "http-body-util", + "hyper", "libc", "moka", "parking_lot", "percent-encoding", "pkg-config", - "rand 0.10.1", - "rand_chacha 0.10.0", + "rand", + "rand_chacha", "reqwest", "reqwest-middleware", "reqwest-retry", @@ -643,13 +651,14 @@ dependencies = [ "aws-credential-types", "aws-sigv4", "axum", - "base64", + "base64 0.23.1", "hmac", "maxminddb", "moka", "reqwest", "serde_json", "sha2", + "tempfile", "thiserror", "time", "tracing", @@ -662,12 +671,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "form_urlencoded" version = "1.2.2" @@ -685,9 +688,9 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -700,9 +703,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -710,15 +713,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -727,38 +730,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -786,47 +789,18 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.4" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi 5.3.0", - "wasip2", + "r-efi", + "rand_core 0.10.1", "wasm-bindgen", ] -[[package]] -name = "getrandom" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" -dependencies = [ - "cfg-if", - "libc", - "r-efi 6.0.0", - "rand_core 0.10.1", - "wasip2", - "wasip3", -] - -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash", -] - -[[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - [[package]] name = "heck" version = "0.5.0" @@ -861,9 +835,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" dependencies = [ "bytes", "itoa", @@ -882,24 +856,24 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" dependencies = [ "bytes", - "http 1.4.2", + "http 1.5.0", ] [[package]] name = "http-body-util" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" dependencies = [ "bytes", "futures-core", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "pin-project-lite", ] @@ -917,25 +891,25 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hybrid-array" -version = "0.4.12" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" dependencies = [ "typenum", ] [[package]] name = "hyper" -version = "1.9.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +checksum = "27b501faa50e7a26c3d3560ca625132f4078a17771f4810baf70475ae48cbe43" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "httparse", "httpdate", "itoa", @@ -951,7 +925,7 @@ version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ - "http 1.4.2", + "http 1.5.0", "hyper", "hyper-util", "rustls", @@ -966,12 +940,12 @@ version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "futures-channel", "futures-util", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "hyper", "ipnet", "libc", @@ -985,9 +959,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" dependencies = [ "displaydoc", "potential_utf", @@ -999,9 +973,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" dependencies = [ "displaydoc", "litemap", @@ -1012,9 +986,9 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -1026,16 +1000,17 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" [[package]] name = "icu_properties" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" dependencies = [ + "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", @@ -1046,15 +1021,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" [[package]] name = "icu_provider" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" dependencies = [ "displaydoc", "icu_locale_core", @@ -1065,12 +1040,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "idna" version = "1.1.0" @@ -1092,23 +1061,11 @@ dependencies = [ "icu_properties", ] -[[package]] -name = "indexmap" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" -dependencies = [ - "equivalent", - "hashbrown 0.17.1", - "serde", - "serde_core", -] - [[package]] name = "ipnet" -version = "2.12.0" +version = "2.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0" [[package]] name = "ipnetwork" @@ -1155,7 +1112,7 @@ dependencies = [ "quote", "rustc_version", "simd_cesu8", - "syn", + "syn 2.0.119", ] [[package]] @@ -1174,28 +1131,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" dependencies = [ "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -1205,23 +1161,17 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libfuzzer-sys" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" +checksum = "a9fd2f41a1cba099f79a0b6b6c35656cf7c03351a7bae8ff0f28f25270f929d2" dependencies = [ "arbitrary", "cc", @@ -1235,9 +1185,9 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" [[package]] name = "lock_api" @@ -1250,15 +1200,15 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "lru-slab" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +checksum = "4050469837a6ff301cd14c1f8f24f88549e6d548f24f64e2148eb0f72cebc51f" [[package]] name = "matchers" @@ -1277,12 +1227,11 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "maxminddb" -version = "0.28.1" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf6467428ad055b71e588bcedcbaf2ff605b3251deb0c52be4a04b674c546dd" +checksum = "9b43d2458d977b610b04a3858e6504f06133663d303a1a0606601b530bfc9bc6" dependencies = [ "ipnetwork", - "log", "memchr", "serde", "thiserror", @@ -1290,9 +1239,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "mime" @@ -1302,9 +1251,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mio" -version = "1.2.0" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8" dependencies = [ "libc", "wasi", @@ -1313,9 +1262,9 @@ dependencies = [ [[package]] name = "moka" -version = "0.12.15" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957228ad12042ee839f93c8f257b62b4c0ab5eaae1d4fa60de53b27c9d7c5046" +checksum = "4293f18e7567a1caf3c584855554377025c65e0aa445344d04171f5ad63d19b9" dependencies = [ "crossbeam-channel", "crossbeam-epoch", @@ -1428,21 +1377,21 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "portable-atomic" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" [[package]] name = "potential_utf" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" dependencies = [ "zerovec", ] @@ -1462,30 +1411,20 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quinn" -version = "0.11.9" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +checksum = "4051e23e9185c255a7e33ef59cdbca87a22d359052eecd22fc6b901fb37d9d11" dependencies = [ "bytes", "cfg_aliases", @@ -1503,15 +1442,16 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.14" +version = "0.11.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +checksum = "a9746dbde176634f4f2f1faf2404e30a31b2bc1e9cafb5329c95d8177a18c9fc" dependencies = [ "aws-lc-rs", "bytes", - "getrandom 0.3.4", + "getrandom 0.4.3", "lru-slab", - "rand 0.9.4", + "rand", + "rand_pcg", "ring", "rustc-hash", "rustls", @@ -1525,33 +1465,27 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" dependencies = [ "cfg_aliases", "libc", "once_cell", "socket2", "tracing", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - [[package]] name = "r-efi" version = "6.0.0" @@ -1560,35 +1494,15 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.9.4" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" -dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.5", -] - -[[package]] -name = "rand" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ "chacha20", - "getrandom 0.4.2", + "getrandom 0.4.3", "rand_core 0.10.1", ] -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.5", -] - [[package]] name = "rand_chacha" version = "0.10.0" @@ -1604,9 +1518,6 @@ name = "rand_core" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" -dependencies = [ - "getrandom 0.3.4", -] [[package]] name = "rand_core" @@ -1614,6 +1525,15 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" +[[package]] +name = "rand_pcg" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +dependencies = [ + "rand_core 0.10.1", +] + [[package]] name = "redox_syscall" version = "0.5.18" @@ -1625,9 +1545,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -1636,23 +1556,23 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "reqwest" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" +checksum = "16a1cfa75cc186dd73d5818e510e042e40927bccc9c236b061cea97e1eb08029" dependencies = [ - "base64", + "base64 0.23.1", "bytes", "futures-channel", "futures-core", "futures-util", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "http-body-util", "hyper", "hyper-rustls", @@ -1689,7 +1609,7 @@ checksum = "07bc3f1384cffa4f274dad2d4ddd73aed32fed8f786d96c6be8aa4e5fd3c3b58" dependencies = [ "anyhow", "async-trait", - "http 1.4.2", + "http 1.5.0", "reqwest", "thiserror", "tower-service", @@ -1705,7 +1625,7 @@ dependencies = [ "async-trait", "futures", "getrandom 0.2.17", - "http 1.4.2", + "http 1.5.0", "hyper", "reqwest", "reqwest-middleware", @@ -1722,7 +1642,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc05fbf560421a0357a750cbe78c7ca19d4923918490daabba313d5dbc871e47" dependencies = [ - "rand 0.10.1", + "rand", ] [[package]] @@ -1741,9 +1661,9 @@ dependencies = [ [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -1756,9 +1676,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ "bitflags", "errno", @@ -1769,9 +1689,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.40" +version = "0.23.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" dependencies = [ "aws-lc-rs", "once_cell", @@ -1783,9 +1703,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -1795,9 +1715,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.14.1" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" dependencies = [ "web-time", "zeroize", @@ -1832,9 +1752,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.13" +version = "0.103.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" dependencies = [ "aws-lc-rs", "ring", @@ -1844,9 +1764,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "ryu" @@ -1909,9 +1829,9 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -1919,29 +1839,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -2011,9 +1931,9 @@ dependencies = [ [[package]] name = "simd_cesu8" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" dependencies = [ "rustc_version", "simdutf8", @@ -2033,15 +1953,15 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", "windows-sys 0.61.2", @@ -2067,9 +1987,20 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -2087,13 +2018,13 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] @@ -2109,7 +2040,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.4.3", "once_cell", "rustix", "windows-sys 0.61.2", @@ -2117,29 +2048,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "thread_local" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" dependencies = [ "cfg-if", ] @@ -2176,9 +2107,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" dependencies = [ "displaydoc", "zerovec", @@ -2186,24 +2117,15 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.11.0" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "bytes", "libc", @@ -2217,20 +2139,20 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.7.0" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "tokio-rustls" -version = "0.26.4" +version = "0.26.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +checksum = "b0c85f2c3ef0b1cd58b36682f4b17aaa995f0e5db534d85692b4903abce21f67" dependencies = [ "rustls", "tokio", @@ -2238,9 +2160,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" dependencies = [ "bytes", "futures-core", @@ -2266,15 +2188,15 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.10" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68d6fdd9f81c2819c9a8b0e0cd91660e7746a8e6ea2ba7c6b2b057985f6bcb51" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ "bitflags", "bytes", "futures-util", - "http 1.4.2", - "http-body 1.0.1", + "http 1.5.0", + "http-body 1.1.0", "pin-project-lite", "tower", "tower-layer", @@ -2313,7 +2235,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2376,21 +2298,15 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "untrusted" @@ -2430,11 +2346,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.1" +version = "1.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "2ef6dac1e96601b4fb3acccccff2139741fcb757cb9a36089bf5be91cfb285ce" dependencies = [ - "getrandom 0.4.2", + "getrandom 0.4.3", "js-sys", "wasm-bindgen", ] @@ -2476,29 +2392,11 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasip2" -version = "1.0.3+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" -dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", -] - [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -2509,9 +2407,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.71" +version = "0.4.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928" dependencies = [ "js-sys", "wasm-bindgen", @@ -2519,9 +2417,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2529,48 +2427,26 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - [[package]] name = "wasm-streams" version = "0.5.0" @@ -2584,18 +2460,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "wasmtimer" version = "0.4.3" @@ -2612,9 +2476,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" dependencies = [ "js-sys", "wasm-bindgen", @@ -2632,9 +2496,9 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9a92c" +checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" dependencies = [ "rustls-pki-types", ] @@ -2660,16 +2524,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.5", + "windows-targets", ] [[package]] @@ -2687,31 +2542,14 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] [[package]] @@ -2720,195 +2558,53 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" - -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "writeable" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" [[package]] name = "wyhash" @@ -2921,9 +2617,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -2932,34 +2628,34 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +checksum = "33811428bee40dbceb6d545e95754741d17a6aef9a4849f0fd62e2ba4f412a78" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2973,27 +2669,27 @@ dependencies = [ [[package]] name = "zerofrom-derive" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" [[package]] name = "zerotrie" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" dependencies = [ "displaydoc", "yoke", @@ -3002,9 +2698,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" dependencies = [ "yoke", "zerofrom", @@ -3013,17 +2709,17 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/fluxer_media_proxy/src/media_process/tests/heif.rs b/fluxer_media_proxy/src/media_process/tests/heif.rs index f3dc49af9..6586c3bff 100644 --- a/fluxer_media_proxy/src/media_process/tests/heif.rs +++ b/fluxer_media_proxy/src/media_process/tests/heif.rs @@ -44,7 +44,7 @@ fn animated_heic_sequence_decodes_every_frame_and_encodes_an_animation() { let mut heif = heic.clone(); let ftyp_len = u32::from_be_bytes(heif[0..4].try_into().expect("ftyp length")) as usize; - for brand in heif[8..ftyp_len].chunks_exact_mut(4) { + for brand in heif[8..ftyp_len].as_chunks_mut::<4>().0 { if brand == b"heic" || brand == b"hevc" { brand.copy_from_slice(b"msf1"); } @@ -185,7 +185,7 @@ fn hdr_pq_avif_tone_maps_to_sdr_pixels() { "a PQ mid grey read as plain sRGB would land near 128, got {}", rgba[centre] ); - for pixel in rgba.chunks_exact(4) { + for pixel in rgba.as_chunks::<4>().0 { assert_eq!(255, pixel[3], "tone mapped output must stay opaque"); for channel in 0..3 { assert!( diff --git a/fluxer_media_proxy/src/media_process/tests/video.rs b/fluxer_media_proxy/src/media_process/tests/video.rs index a84f87dfa..ea3dec96c 100644 --- a/fluxer_media_proxy/src/media_process/tests/video.rs +++ b/fluxer_media_proxy/src/media_process/tests/video.rs @@ -88,7 +88,9 @@ fn a_bt709_thumbnail_keeps_the_source_shadow_luminance() { .expect("bt709 shadow video should thumbnail"); let (_, _, pixels) = decode_rgba(&thumb.bytes); let luma: Vec = pixels - .chunks_exact(4) + .as_chunks::<4>() + .0 + .iter() .map(|p| 0.2126 * f64::from(p[0]) + 0.7152 * f64::from(p[1]) + 0.0722 * f64::from(p[2])) .collect(); let mean = luma.iter().sum::() / luma.len() as f64; diff --git a/fluxer_media_proxy/src/thumbhash.rs b/fluxer_media_proxy/src/thumbhash.rs index d2b0a4507..348f4b839 100644 --- a/fluxer_media_proxy/src/thumbhash.rs +++ b/fluxer_media_proxy/src/thumbhash.rs @@ -223,7 +223,7 @@ mod tests { #[test] fn encode_produces_non_empty_deterministic_output() { let mut pixels = [0u8; 16 * 16 * 4]; - for px in pixels.chunks_exact_mut(4) { + for px in pixels.as_chunks_mut::<4>().0 { px[0] = 200; px[1] = 100; px[2] = 50; @@ -239,10 +239,10 @@ mod tests { fn alpha_changes_header_layout() { let mut opaque = [0u8; 4 * 4 * 4]; let mut translucent = [0u8; 4 * 4 * 4]; - for px in opaque.chunks_exact_mut(4) { + for px in opaque.as_chunks_mut::<4>().0 { px[3] = 255; } - for px in translucent.chunks_exact_mut(4) { + for px in translucent.as_chunks_mut::<4>().0 { px[3] = 64; } let opaque_out = encode_rgba(&opaque, 4, 4).unwrap(); @@ -255,10 +255,10 @@ mod tests { fn aspect_ratio_representability_follows_the_alpha_limit() { let mut opaque = [0u8; 4 * 4 * 4]; let mut translucent = [0u8; 4 * 4 * 4]; - for px in opaque.chunks_exact_mut(4) { + for px in opaque.as_chunks_mut::<4>().0 { px[3] = 255; } - for px in translucent.chunks_exact_mut(4) { + for px in translucent.as_chunks_mut::<4>().0 { px[3] = 64; } let opaque_out = encode_rgba(&opaque, 4, 4).unwrap(); diff --git a/fluxer_media_proxy/tools/install-native-deps.sh b/fluxer_media_proxy/tools/install-native-deps.sh index 894074bf7..1a28876a7 100755 --- a/fluxer_media_proxy/tools/install-native-deps.sh +++ b/fluxer_media_proxy/tools/install-native-deps.sh @@ -4,12 +4,12 @@ set -euo pipefail PREFIX="${1:-/usr/local}" -FFMPEG_VERSION=9.0 -FFMPEG_SHA256=7f607a00dd0d28a729d5a4811205812eef01cf6ef6155025febb6f36a9062d52 +FFMPEG_VERSION=9.0.1 +FFMPEG_SHA256=cf38e0e28c7e5605942c4a77755349b0145804a397af37eb1fb4c77cb237f635 FFMPEG_URL="https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.xz" -LIBHEIF_VERSION=1.23.1 -LIBHEIF_SHA256=0de0327f60fcd47de90d5654c6fe152232738d60d84fe084ec3e0f35e03b166a +LIBHEIF_VERSION=1.23.4 +LIBHEIF_SHA256=d0c02b4b0e978f34a1974b6f3eea7975a537bf7a9195ffeea38e7242ff316fdd LIBHEIF_URL="https://github.com/strukturag/libheif/releases/download/v${LIBHEIF_VERSION}/libheif-${LIBHEIF_VERSION}.tar.gz" LIBAVFILTER_FLOOR=11.0.100 diff --git a/fluxer_messages/Cargo.toml b/fluxer_messages/Cargo.toml index 2c08fd7ac..022a3715f 100644 --- a/fluxer_messages/Cargo.toml +++ b/fluxer_messages/Cargo.toml @@ -8,21 +8,20 @@ publish = false [dependencies] fluxer_common = { path = "../fluxer_common" } anyhow = "1.0.104" -base64 = "0.22.1" chrono = { version = "0.4.45", default-features = false, features = ["serde"] } fluxer-svc = { path = "../fluxer_svc" } fluxer_markdown_parser = { path = "../packages/markdown_parser/rust" } -futures = "0.3.32" +futures = "0.3.34" hmac = "0.13.0" linkify = "0.11.0" mime_guess = "2.0.5" -moka = { version = "0.12.15", features = ["future", "sync"] } +moka = { version = "0.12.16", features = ["future", "sync"] } rmp-serde = "1.3" -scylla = { version = "1.6.0", features = ["chrono-04"], optional = true } -serde = { version = "1.0.228", features = ["derive"] } -serde_json = "1.0.150" +scylla = { version = "1.9.0", features = ["chrono-04"], optional = true } +serde = { version = "1.0.229", features = ["derive"] } +serde_json = "1.0.151" sha2 = "0.11.0" -tokio = { version = "1.52.3", features = ["macros", "rt-multi-thread", "signal"] } +tokio = { version = "1.53.1", features = ["macros", "rt-multi-thread", "signal"] } tracing = "0.1.44" url = "2.5.8" diff --git a/fluxer_messages/Dockerfile b/fluxer_messages/Dockerfile index fd7b75962..600f01aba 100644 --- a/fluxer_messages/Dockerfile +++ b/fluxer_messages/Dockerfile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: AGPL-3.0-or-later -FROM rust:1-bookworm AS builder +FROM rust:1-trixie AS builder WORKDIR /usr/src/app @@ -8,7 +8,7 @@ COPY . . RUN cargo build --release -p fluxer-messages --features scylla -FROM debian:bookworm-slim +FROM debian:trixie-slim ARG BUILD_VERSION="" ARG SOURCE_SHA="" diff --git a/fluxer_snowflakes/Cargo.toml b/fluxer_snowflakes/Cargo.toml index c6b4447d6..569ff3b24 100644 --- a/fluxer_snowflakes/Cargo.toml +++ b/fluxer_snowflakes/Cargo.toml @@ -9,7 +9,7 @@ publish = false anyhow = "1.0.104" fluxer-svc = { path = "../fluxer_svc", default-features = false } rmp-serde = "1.3" -serde = { version = "1.0.228", features = ["derive"] } -serde_json = "1.0.150" -tokio = { version = "1.52.3", features = ["macros", "rt-multi-thread", "sync", "time"] } +serde = { version = "1.0.229", features = ["derive"] } +serde_json = "1.0.151" +tokio = { version = "1.53.1", features = ["macros", "rt-multi-thread", "sync", "time"] } tracing = "0.1.44" diff --git a/fluxer_snowflakes/Dockerfile b/fluxer_snowflakes/Dockerfile index 5efeaea11..3222e179b 100644 --- a/fluxer_snowflakes/Dockerfile +++ b/fluxer_snowflakes/Dockerfile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: AGPL-3.0-or-later -FROM rust:1-bookworm AS builder +FROM rust:1-trixie AS builder WORKDIR /usr/src/app @@ -8,7 +8,7 @@ COPY . . RUN cargo build --release -p fluxer-snowflakes -FROM debian:bookworm-slim +FROM debian:trixie-slim ARG BUILD_VERSION="" ARG SOURCE_SHA="" diff --git a/fluxer_static/Dockerfile b/fluxer_static/Dockerfile index df46e5e81..2860d3b77 100644 --- a/fluxer_static/Dockerfile +++ b/fluxer_static/Dockerfile @@ -1,7 +1,7 @@ # syntax=docker/dockerfile:1.7 # SPDX-License-Identifier: AGPL-3.0-or-later -FROM caddy:2.10-alpine +FROM caddy:2.11-alpine ARG BUILD_VERSION="" ARG SOURCE_SHA="" diff --git a/fluxer_svc/Cargo.toml b/fluxer_svc/Cargo.toml index be261ae71..16a2f46b1 100644 --- a/fluxer_svc/Cargo.toml +++ b/fluxer_svc/Cargo.toml @@ -6,7 +6,7 @@ license.workspace = true [dependencies] anyhow = "1.0.104" -async-nats = "0.49" +async-nats = "0.50" async-trait = "0.1" axum = { version = "0.8.9", default-features = false, features = ["http1", "tokio"] } bytes = "1" @@ -14,14 +14,14 @@ chrono = { version = "0.4.45", default-features = false, features = ["std"] } deadpool-postgres = "0.14" futures = "0.3" libc = "0.2" -moka = { version = "0.12.15", features = ["future"] } +moka = { version = "0.12.16", features = ["future"] } rmp-serde = "1.3" rustls = { version = "0.23", features = ["ring"] } -scylla = { version = "1.6.0", features = ["chrono-04"], optional = true } -serde = { version = "1.0.228", features = ["derive"] } -serde_json = "1.0.150" -thiserror = "2.0.18" -tokio = { version = "1.52.3", features = ["macros", "net", "rt-multi-thread", "signal", "sync", "time"] } +scylla = { version = "1.9.0", features = ["chrono-04"], optional = true } +serde = { version = "1.0.229", features = ["derive"] } +serde_json = "1.0.151" +thiserror = "2.0.20" +tokio = { version = "1.53.1", features = ["macros", "net", "rt-multi-thread", "signal", "sync", "time"] } tokio-postgres = { version = "0.7", features = ["with-serde_json-1"] } tokio-postgres-rustls = { version = "0.14", features = ["native-certs", "ring"] } tracing = "0.1.44" diff --git a/fluxer_unfurl/Cargo.toml b/fluxer_unfurl/Cargo.toml index 715d96f1f..66927076e 100644 --- a/fluxer_unfurl/Cargo.toml +++ b/fluxer_unfurl/Cargo.toml @@ -7,23 +7,22 @@ publish = false [dependencies] fluxer_common = { path = "../fluxer_common" } -ammonia = "4.1.4" +ammonia = "4.2.0" anyhow = "1.0.104" -base64 = "0.22.1" chrono = { version = "0.4.45", default-features = false, features = ["std"] } -encoding_rs = "0.8.35" +encoding_rs = "0.8.41" entities = "1.0.1" fluxer-svc = { path = "../fluxer_svc", default-features = false } hmac = "0.13.0" -infer = "0.19.0" -moka = { version = "0.12.15", features = ["future", "sync"] } -regex = "1.12" -reqwest = { version = "0.13.4", default-features = false, features = ["json", "rustls", "stream"] } +infer = "0.22.0" +moka = { version = "0.12.16", features = ["future", "sync"] } +regex = "1.13" +reqwest = { version = "0.13.5", default-features = false, features = ["json", "rustls", "stream"] } scraper = "0.27" -serde = { version = "1.0.228", features = ["derive", "rc"] } -serde_json = "1.0.150" +serde = { version = "1.0.229", features = ["derive", "rc"] } +serde_json = "1.0.151" sha2 = "0.11.0" -tokio = { version = "1.52.3", features = ["macros", "net", "rt-multi-thread", "signal", "time"] } +tokio = { version = "1.53.1", features = ["macros", "net", "rt-multi-thread", "signal", "time"] } tracing = "0.1.44" url = "2.5" urlencoding = "2.1" diff --git a/fluxer_unfurl/Dockerfile b/fluxer_unfurl/Dockerfile index 6f02c90d1..45865469c 100644 --- a/fluxer_unfurl/Dockerfile +++ b/fluxer_unfurl/Dockerfile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: AGPL-3.0-or-later -FROM rust:1-bookworm AS builder +FROM rust:1-trixie AS builder WORKDIR /usr/src/app @@ -8,7 +8,7 @@ COPY . . RUN cargo build --release -p fluxer-unfurl -FROM debian:bookworm-slim +FROM debian:trixie-slim ARG BUILD_VERSION="" ARG SOURCE_SHA="" diff --git a/fluxer_users/Cargo.toml b/fluxer_users/Cargo.toml index ab3664536..a14ba3f6e 100644 --- a/fluxer_users/Cargo.toml +++ b/fluxer_users/Cargo.toml @@ -10,13 +10,13 @@ anyhow = "1.0.104" chrono = { version = "0.4", default-features = false } fluxer_common = { path = "../fluxer_common" } fluxer-svc = { path = "../fluxer_svc" } -futures = "0.3.32" -moka = { version = "0.12.15", features = ["future"] } +futures = "0.3.34" +moka = { version = "0.12.16", features = ["future"] } rmp-serde = "1.3" -scylla = { version = "1.6.0", features = ["chrono-04"], optional = true } -serde = { version = "1.0.228", features = ["derive"] } -serde_json = "1.0.150" -tokio = { version = "1.52.3", features = ["macros", "rt-multi-thread", "signal"] } +scylla = { version = "1.9.0", features = ["chrono-04"], optional = true } +serde = { version = "1.0.229", features = ["derive"] } +serde_json = "1.0.151" +tokio = { version = "1.53.1", features = ["macros", "rt-multi-thread", "signal"] } tracing = "0.1.44" [features] diff --git a/fluxer_users/Dockerfile b/fluxer_users/Dockerfile index f276ae2f8..77327850a 100644 --- a/fluxer_users/Dockerfile +++ b/fluxer_users/Dockerfile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: AGPL-3.0-or-later -FROM rust:1-bookworm AS builder +FROM rust:1-trixie AS builder WORKDIR /usr/src/app @@ -8,7 +8,7 @@ COPY . . RUN cargo build --release -p fluxer-users --features scylla -FROM debian:bookworm-slim +FROM debian:trixie-slim ARG BUILD_VERSION="" ARG SOURCE_SHA="" diff --git a/knip.json b/knip.json index bf03b3907..22b4a5a62 100644 --- a/knip.json +++ b/knip.json @@ -1,6 +1,7 @@ { - "$schema": "https://unpkg.com/knip@5/schema.json", + "$schema": "https://unpkg.com/knip@6/schema.json", "include": ["files", "exports", "types", "dependencies", "unlisted", "binaries", "catalog"], + "ignoreExportsUsedInFile": true, "ignoreDependencies": [ "@bufbuild/protoc-gen-es", "@tailwindcss/cli", @@ -56,8 +57,7 @@ ] }, "fluxer_app": { - "entry": ["lingui.config.js", "scripts/build-sw.mjs", "scripts/Generate*.ts"], - "ignoreDependencies": ["@sapphi-red/web-noise-suppressor", "@lingui/swc-plugin"] + "entry": ["lingui.config.js", "scripts/build-sw.mjs", "scripts/Generate*.ts"] }, "fluxer_desktop": { "entry": [ @@ -71,12 +71,12 @@ "native/*/test/**/*.mjs" ], "project": ["src/**/*.{ts,tsx,mjs,js}", "scripts/**/*.mjs", "native/**/*.{js,mjs,cjs,d.ts}"], + "ignoreBinaries": ["bunzip2", "reg.exe", "update-desktop-database"], "ignoreDependencies": ["electron-builder", "electron-builder-squirrel-windows"] }, "fluxer_docs": { "entry": ["scripts/*.ts", "src/**/*.astro"], - "project": ["src/**/*.{ts,astro}", "scripts/**/*.ts"], - "ignoreDependencies": ["sharp"] + "project": ["src/**/*.{ts,astro,mdx}", "scripts/**/*.ts"] }, "packages/openapi": { "project": ["src/**/*.ts"] diff --git a/package.json b/package.json index f066b5071..9c1c4a82a 100644 --- a/package.json +++ b/package.json @@ -57,5 +57,5 @@ "typescript-eslint": "catalog:", "vite": "catalog:" }, - "packageManager": "pnpm@10.29.3" + "packageManager": "pnpm@12.4.2" } diff --git a/packages/config/package.json b/packages/config/package.json index 6e6f9323f..dd4fb802f 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -9,12 +9,12 @@ "scripts": { "test": "vitest run", "test:watch": "vitest", - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:", "@vitest/coverage-v8": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:", "yaml": "catalog:" } diff --git a/packages/constants/package.json b/packages/constants/package.json index 654c683ee..1a18c2c85 100644 --- a/packages/constants/package.json +++ b/packages/constants/package.json @@ -9,10 +9,10 @@ "scripts": { "test": "vitest run", "test:watch": "vitest", - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "devDependencies": { - "@typescript/native-preview": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/packages/constants/tsconfig.json b/packages/constants/tsconfig.json index a8426e011..bf76f9263 100644 --- a/packages/constants/tsconfig.json +++ b/packages/constants/tsconfig.json @@ -1,5 +1,7 @@ { "extends": "../../tsconfigs/package.json", - "compilerOptions": {}, + "compilerOptions": { + "types": [] + }, "include": ["src/**/*"] } diff --git a/packages/date_utils/package.json b/packages/date_utils/package.json index d53efaaab..2a2600b96 100644 --- a/packages/date_utils/package.json +++ b/packages/date_utils/package.json @@ -7,7 +7,7 @@ "./*": "./*" }, "scripts": { - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@fluxer/constants": "workspace:*", @@ -15,6 +15,6 @@ }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:" + "typescript": "catalog:ts7" } } diff --git a/packages/date_utils/tsconfig.json b/packages/date_utils/tsconfig.json index 707056b3c..a8426e011 100644 --- a/packages/date_utils/tsconfig.json +++ b/packages/date_utils/tsconfig.json @@ -1,7 +1,5 @@ { "extends": "../../tsconfigs/package.json", - "compilerOptions": { - "types": ["node"] - }, + "compilerOptions": {}, "include": ["src/**/*"] } diff --git a/packages/errors/package.json b/packages/errors/package.json index 56f90ac9e..83d0c5116 100644 --- a/packages/errors/package.json +++ b/packages/errors/package.json @@ -9,7 +9,7 @@ "scripts": { "test": "vitest run", "test:watch": "vitest", - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@fluxer/config": "workspace:*", @@ -23,7 +23,7 @@ "devDependencies": { "@messageformat/parser": "catalog:", "@types/node": "catalog:", - "@typescript/native-preview": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/packages/errors/src/__tests__/AppErrorHandlers.test.ts b/packages/errors/src/__tests__/AppErrorHandlers.test.ts index 1cf5327a8..5f560caf3 100644 --- a/packages/errors/src/__tests__/AppErrorHandlers.test.ts +++ b/packages/errors/src/__tests__/AppErrorHandlers.test.ts @@ -51,26 +51,24 @@ describe('AppErrorHandler i18n fallbacks', () => { requestId: undefined, message: 'Internal server error.', }, - ])('$name and logs unexpected errors with request metadata', async ({ - acceptLanguage, - requestLocale, - requestId, - message, - }) => { - const errorLogger = vi.spyOn(Logger.prototype, 'error').mockImplementation(() => {}); - const error = new Error('Private internal failure'); - const headers = new Headers(); - if (acceptLanguage !== undefined) { - headers.set('accept-language', acceptLanguage); - } - const response = await createApp(error, requestLocale, requestId).request('/test', {headers}); - expect(response.status).toBe(500); - expect(await response.json()).toEqual({code: APIErrorCodes.INTERNAL_SERVER_ERROR, message}); - expect(errorLogger).toHaveBeenCalledExactlyOnceWith( - {err: error, status: 500, method: 'GET', path: '/test', requestId}, - 'Unhandled error occurred', - ); - }); + ])( + '$name and logs unexpected errors with request metadata', + async ({acceptLanguage, requestLocale, requestId, message}) => { + const errorLogger = vi.spyOn(Logger.prototype, 'error').mockImplementation(() => {}); + const error = new Error('Private internal failure'); + const headers = new Headers(); + if (acceptLanguage !== undefined) { + headers.set('accept-language', acceptLanguage); + } + const response = await createApp(error, requestLocale, requestId).request('/test', {headers}); + expect(response.status).toBe(500); + expect(await response.json()).toEqual({code: APIErrorCodes.INTERNAL_SERVER_ERROR, message}); + expect(errorLogger).toHaveBeenCalledExactlyOnceWith( + {err: error, status: 500, method: 'GET', path: '/test', requestId}, + 'Unhandled error occurred', + ); + }, + ); it('localizes FluxerError responses without an i18n service and logs them as expected rejections', async () => { const errorLogger = vi.spyOn(Logger.prototype, 'error').mockImplementation(() => {}); diff --git a/packages/errors/src/__tests__/DomainErrors.test.ts b/packages/errors/src/__tests__/DomainErrors.test.ts index f5e9cec1b..864269d7b 100644 --- a/packages/errors/src/__tests__/DomainErrors.test.ts +++ b/packages/errors/src/__tests__/DomainErrors.test.ts @@ -53,15 +53,14 @@ describe.each([ }); }); -it.each([ - BadRequestError, - ForbiddenError, - NotFoundError, -])('preserves custom messages for client errors', (ErrorClass) => { - const error = new ErrorClass({code: APIErrorCodes.INVALID_REQUEST, message: 'Custom error message'}); +it.each([BadRequestError, ForbiddenError, NotFoundError])( + 'preserves custom messages for client errors', + (ErrorClass) => { + const error = new ErrorClass({code: APIErrorCodes.INVALID_REQUEST, message: 'Custom error message'}); - expect(error.toJSON()).toEqual({code: APIErrorCodes.INVALID_REQUEST, message: 'Custom error message'}); -}); + expect(error.toJSON()).toEqual({code: APIErrorCodes.INVALID_REQUEST, message: 'Custom error message'}); + }, +); describe.each([ [APIErrorCodes.INVALID_PHONE_NUMBER, InvalidPhoneNumberError, BadRequestError, HttpStatus.BAD_REQUEST], diff --git a/packages/geo_utils/package.json b/packages/geo_utils/package.json index 6502ad048..a1b803b74 100644 --- a/packages/geo_utils/package.json +++ b/packages/geo_utils/package.json @@ -7,13 +7,13 @@ "./*": "./*" }, "scripts": { - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@fluxer/constants": "workspace:*" }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:" + "typescript": "catalog:ts7" } } diff --git a/packages/hono/package.json b/packages/hono/package.json index c42b91e6f..9061f8b73 100644 --- a/packages/hono/package.json +++ b/packages/hono/package.json @@ -8,7 +8,7 @@ }, "scripts": { "test": "vitest run", - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@fluxer/constants": "workspace:*", @@ -19,7 +19,7 @@ }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/packages/hono_types/package.json b/packages/hono_types/package.json index e86d0b46a..ad7f2f33f 100644 --- a/packages/hono_types/package.json +++ b/packages/hono_types/package.json @@ -4,9 +4,9 @@ "private": true, "type": "module", "scripts": { - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "devDependencies": { - "@typescript/native-preview": "catalog:" + "typescript": "catalog:ts7" } } diff --git a/packages/hono_types/tsconfig.json b/packages/hono_types/tsconfig.json index a8426e011..bf76f9263 100644 --- a/packages/hono_types/tsconfig.json +++ b/packages/hono_types/tsconfig.json @@ -1,5 +1,7 @@ { "extends": "../../tsconfigs/package.json", - "compilerOptions": {}, + "compilerOptions": { + "types": [] + }, "include": ["src/**/*"] } diff --git a/packages/i18n/package.json b/packages/i18n/package.json index 565e6bd8a..6722d0b8a 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -15,7 +15,7 @@ "static:sync": "tsx scripts/SyncStaticI18nCatalogs.ts --extract --compile", "test": "vitest run", "test:watch": "vitest", - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@messageformat/core": "catalog:", @@ -24,8 +24,8 @@ }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:", "tsx": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/packages/i18n/tsconfig.json b/packages/i18n/tsconfig.json index 47898aeab..e018a0511 100644 --- a/packages/i18n/tsconfig.json +++ b/packages/i18n/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../../tsconfigs/base.json", "compilerOptions": { + "types": ["node"], "outDir": "./dist", "rootDir": "./src" }, diff --git a/packages/instance_bootstrap/package.json b/packages/instance_bootstrap/package.json index 87d532ca8..b0a998545 100644 --- a/packages/instance_bootstrap/package.json +++ b/packages/instance_bootstrap/package.json @@ -8,7 +8,7 @@ "./*": "./*" }, "scripts": { - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@fluxer/constants": "workspace:*", @@ -17,6 +17,6 @@ }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:" + "typescript": "catalog:ts7" } } diff --git a/packages/ip_utils/package.json b/packages/ip_utils/package.json index 08be5cb05..59309915b 100644 --- a/packages/ip_utils/package.json +++ b/packages/ip_utils/package.json @@ -9,12 +9,12 @@ "scripts": { "test": "vitest run", "test:watch": "vitest", - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:", "@vitest/coverage-v8": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/packages/limits/package.json b/packages/limits/package.json index cdc1a703b..236036dda 100644 --- a/packages/limits/package.json +++ b/packages/limits/package.json @@ -7,14 +7,14 @@ "./*": "./*" }, "scripts": { - "typecheck": "tsgo --noEmit", + "typecheck": "tsc --noEmit", "test": "vitest run" }, "dependencies": { "@fluxer/constants": "workspace:*" }, "devDependencies": { - "@typescript/native-preview": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/packages/limits/tsconfig.json b/packages/limits/tsconfig.json index dc19f3f05..bf76f9263 100644 --- a/packages/limits/tsconfig.json +++ b/packages/limits/tsconfig.json @@ -1,8 +1,7 @@ { "extends": "../../tsconfigs/package.json", "compilerOptions": { - "outDir": "./dist", - "rootDir": "./src" + "types": [] }, "include": ["src/**/*"] } diff --git a/packages/logger/package.json b/packages/logger/package.json index 351424cbb..348ff0efe 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -6,7 +6,7 @@ "scripts": { "test": "vitest run", "test:watch": "vitest", - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "pino": "catalog:", @@ -14,7 +14,7 @@ }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/packages/markdown_parser/rust/fuzz/Cargo.lock b/packages/markdown_parser/rust/fuzz/Cargo.lock index 05006dce8..75902a5a1 100644 --- a/packages/markdown_parser/rust/fuzz/Cargo.lock +++ b/packages/markdown_parser/rust/fuzz/Cargo.lock @@ -10,9 +10,9 @@ checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" [[package]] name = "cc" -version = "1.2.63" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", "jobserver", @@ -22,15 +22,15 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fluxer_markdown_parser" @@ -51,14 +51,13 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.4" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi", - "wasip2", ] [[package]] @@ -69,9 +68,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ "getrandom", "libc", @@ -79,15 +78,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libfuzzer-sys" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" +checksum = "a9fd2f41a1cba099f79a0b6b6c35656cf7c03351a7bae8ff0f28f25270f929d2" dependencies = [ "arbitrary", "cc", @@ -95,39 +94,39 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" -version = "5.3.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -135,18 +134,18 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", @@ -155,9 +154,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -174,9 +173,9 @@ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "syn" -version = "2.0.117" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -185,27 +184,12 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "wasip2" -version = "1.0.3+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" -dependencies = [ - "wit-bindgen", -] - -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/packages/openapi/package.json b/packages/openapi/package.json index 797312446..c62329887 100644 --- a/packages/openapi/package.json +++ b/packages/openapi/package.json @@ -9,7 +9,7 @@ "scripts": { "generate": "tsx src/scripts/GenerateSpec.ts", "test": "vitest run", - "typecheck": "tsgo --noEmit", + "typecheck": "tsc --noEmit", "validate": "tsx src/scripts/GenerateSpec.ts --validate-only" }, "dependencies": { @@ -22,8 +22,8 @@ "devDependencies": { "@biomejs/biome": "catalog:", "@types/node": "catalog:", - "@typescript/native-preview": "catalog:", "tsx": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/packages/openapi/src/converters/__tests__/ZodToOpenAPI.test.ts b/packages/openapi/src/converters/__tests__/ZodToOpenAPI.test.ts index 11d50d4ec..d3aaee1b2 100644 --- a/packages/openapi/src/converters/__tests__/ZodToOpenAPI.test.ts +++ b/packages/openapi/src/converters/__tests__/ZodToOpenAPI.test.ts @@ -24,7 +24,7 @@ describe('native Zod conversion', () => { expect(input.required).toEqual(['note']); expect(output.required).toEqual(['name', 'note']); expect(input.properties?.name).toMatchObject({type: 'string', default: 'guest'}); - expect(input.properties?.note).toEqual({anyOf: [{type: 'string'}, {type: 'null'}]}); + expect(input.properties?.note).toEqual({type: ['string', 'null']}); expect(input.additionalProperties).toBeUndefined(); expect(output.additionalProperties).toBe(false); const document = documentFor(converter); diff --git a/packages/openapi/src/extractors/__tests__/RouteDiscovery.test.ts b/packages/openapi/src/extractors/__tests__/RouteDiscovery.test.ts index 4dc4cb9f9..a5e53d3a8 100644 --- a/packages/openapi/src/extractors/__tests__/RouteDiscovery.test.ts +++ b/packages/openapi/src/extractors/__tests__/RouteDiscovery.test.ts @@ -53,17 +53,17 @@ describe('discoverControllerFiles', () => { const route = routes.find((route) => route.path === '/donations/manage'); expect(route?.explicitSecurity).toEqual([]); }); - it.each([ - 'download_latest_desktop_version_checksum', - 'download_desktop_version_checksum', - ])('preserves the plain-text checksum response for %s', (operationId) => { - const route = routes.find((route) => route.explicitOperationId === operationId); - expect(route).toMatchObject({ - responseSchemaName: 'DownloadChecksumResponse', - responseContentType: 'text/plain', - explicitStatusCodes: [200], - }); - }); + it.each(['download_latest_desktop_version_checksum', 'download_desktop_version_checksum'])( + 'preserves the plain-text checksum response for %s', + (operationId) => { + const route = routes.find((route) => route.explicitOperationId === operationId); + expect(route).toMatchObject({ + responseSchemaName: 'DownloadChecksumResponse', + responseContentType: 'text/plain', + explicitStatusCodes: [200], + }); + }, + ); it('rejects a bodyless status that is absent from the route response statuses', () => { const route = routes.find((route) => route.path === '/donations/manage'); assert(route); diff --git a/packages/openapi/src/extractors/__tests__/StaticPathResolver.test.ts b/packages/openapi/src/extractors/__tests__/StaticPathResolver.test.ts index 688289ae5..de9fbd687 100644 --- a/packages/openapi/src/extractors/__tests__/StaticPathResolver.test.ts +++ b/packages/openapi/src/extractors/__tests__/StaticPathResolver.test.ts @@ -19,19 +19,12 @@ describe('static route expressions', () => { expect(resolveExpression(`paths[${JSON.stringify(index)}]`)).toBe(Number(index) === 0 ? '/first' : '/second'); }); - it.each([ - '1suffix', - '1.5', - '01', - '1e0', - ' 1', - '', - '-0', - -1, - 2, - ])('does not coerce array property %j into a route index', (index) => { - expect(resolveExpression(`paths[${JSON.stringify(index)}]`)).toBe(UNRESOLVED); - }); + it.each(['1suffix', '1.5', '01', '1e0', ' 1', '', '-0', -1, 2])( + 'does not coerce array property %j into a route index', + (index) => { + expect(resolveExpression(`paths[${JSON.stringify(index)}]`)).toBe(UNRESOLVED); + }, + ); }); describe('imported route constants', () => { diff --git a/packages/openapi/src/generator/OpenAPIOperationBuilder.ts b/packages/openapi/src/generator/OpenAPIOperationBuilder.ts index aa43ab54d..cab6a79db 100644 --- a/packages/openapi/src/generator/OpenAPIOperationBuilder.ts +++ b/packages/openapi/src/generator/OpenAPIOperationBuilder.ts @@ -142,7 +142,7 @@ export class OpenAPIOperationBuilder { const location = validator.target === 'param' ? 'path' : validator.target; const schemaName = validator.schemaName; const schema = this.schemaRegistry.get(schemaName); - if (!schema || schema.type !== 'object' || !schema.properties) { + if (schema?.type !== 'object' || !schema.properties) { throw new Error(`Parameter schema must be an object: ${schemaName}`); } const required = new Set(schema.required ?? []); diff --git a/packages/openapi/tsconfig.json b/packages/openapi/tsconfig.json index 42d38c308..395dc345f 100644 --- a/packages/openapi/tsconfig.json +++ b/packages/openapi/tsconfig.json @@ -2,6 +2,7 @@ "extends": "../../tsconfigs/base.json", "compilerOptions": { "lib": ["ESNext"], + "types": ["node"], "paths": { "@fluxer/*": ["./../../packages/*"] } diff --git a/packages/schema/package.json b/packages/schema/package.json index d69322848..518009d38 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -10,11 +10,11 @@ "test": "vitest run", "test:coverage": "vitest run --coverage", "test:watch": "vitest", - "typecheck": "tsgo --noEmit", + "typecheck": "tsc --noEmit", "generate": "cd proto && buf generate && ../../../tools/ci/run.sh clean-schema-generated-files --root ../src/gen && cd .. && pnpm exec biome check --write --unsafe --no-errors-on-unmatched src/gen" }, "dependencies": { - "@bufbuild/protobuf": "^2.12.0", + "@bufbuild/protobuf": "^2.15.0", "@fluxer/constants": "workspace:*", "@simplewebauthn/server": "catalog:", "emoji-regex": "catalog:", @@ -23,11 +23,11 @@ "zod": "catalog:" }, "devDependencies": { - "@bufbuild/buf": "^1.69.0", - "@bufbuild/protoc-gen-es": "^2.12.0", + "@bufbuild/buf": "^1.73.0", + "@bufbuild/protoc-gen-es": "^2.15.0", "@types/node": "catalog:", "@types/validator": "catalog:", - "@typescript/native-preview": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/packages/schema/src/domains/admin/VoiceNoiseSuppressionSchemas.test.ts b/packages/schema/src/domains/admin/VoiceNoiseSuppressionSchemas.test.ts index 876410b6e..d84206610 100644 --- a/packages/schema/src/domains/admin/VoiceNoiseSuppressionSchemas.test.ts +++ b/packages/schema/src/domains/admin/VoiceNoiseSuppressionSchemas.test.ts @@ -31,14 +31,12 @@ describe('voice noise suppression configuration', () => { expect(second).toEqual(DEFAULT_VOICE_NOISE_SUPPRESSION_CONFIG); }); - test.each([ - {}, - {enabled: false}, - {enabled: undefined}, - {suppression_strength: 42}, - ])('keeps partial updates free of configuration defaults: %j', (patch) => { - expect(VoiceNoiseSuppressionConfigUpdateRequest.parse(patch)).toEqual(patch); - }); + test.each([{}, {enabled: false}, {enabled: undefined}, {suppression_strength: 42}])( + 'keeps partial updates free of configuration defaults: %j', + (patch) => { + expect(VoiceNoiseSuppressionConfigUpdateRequest.parse(patch)).toEqual(patch); + }, + ); test('does not accept a client-provided configuration version', () => { expect(VoiceNoiseSuppressionConfigUpdateRequest.parse({config_version: 12})).toEqual({}); @@ -371,23 +369,21 @@ describe('resolveVoiceNoiseSuppressionForCall', () => { {allowUserOverride: true, preference: 'gtcrn', expectedBackend: 'rnnoise', expectedSource: 'canary'}, {allowUserOverride: false, preference: 'speex', expectedBackend: 'rnnoise', expectedSource: 'canary'}, {allowUserOverride: true, preference: null, expectedBackend: 'rnnoise', expectedSource: 'canary'}, - ] as const)('allow_user_override $allowUserOverride with preference $preference resolves to $expectedSource', ({ - allowUserOverride, - preference, - expectedBackend, - expectedSource, - }) => { - const assignment = createAssignment({ - backend: 'rnnoise', - source: 'canary', - allow_user_override: allowUserOverride, - enabled_backends: ['none', 'standard', 'speex', 'rnnoise'], - }); - expect(resolveVoiceNoiseSuppressionForCall(assignment, null, preference)).toMatchObject({ - backend: expectedBackend, - source: expectedSource, - }); - }); + ] as const)( + 'allow_user_override $allowUserOverride with preference $preference resolves to $expectedSource', + ({allowUserOverride, preference, expectedBackend, expectedSource}) => { + const assignment = createAssignment({ + backend: 'rnnoise', + source: 'canary', + allow_user_override: allowUserOverride, + enabled_backends: ['none', 'standard', 'speex', 'rnnoise'], + }); + expect(resolveVoiceNoiseSuppressionForCall(assignment, null, preference)).toMatchObject({ + backend: expectedBackend, + source: expectedSource, + }); + }, + ); test('a user override also outranks a guild rule', () => { const assignment = createAssignment({ diff --git a/packages/schema/src/domains/tests/GuildRequestSchemas.test.ts b/packages/schema/src/domains/tests/GuildRequestSchemas.test.ts index a5c8c7888..bf1c2916b 100644 --- a/packages/schema/src/domains/tests/GuildRequestSchemas.test.ts +++ b/packages/schema/src/domains/tests/GuildRequestSchemas.test.ts @@ -96,20 +96,17 @@ describe('TemplateChannel permission overwrites', () => { expect(channel.permission_overwrites).toEqual([{id: '2', type: expected, allow: '8', deny: '0'}]); }); - it.each([ - 'invalid', - 'NaN', - 'Infinity', - Number.NaN, - Number.POSITIVE_INFINITY, - ])('rejects nonfinite overwrite type %j', (type) => { - expect( - TemplateChannel.safeParse({ - id: '1', - type: 0, - position: 0, - permission_overwrites: [{id: '2', type, allow: '8', deny: '0'}], - }).success, - ).toBe(false); - }); + it.each(['invalid', 'NaN', 'Infinity', Number.NaN, Number.POSITIVE_INFINITY])( + 'rejects nonfinite overwrite type %j', + (type) => { + expect( + TemplateChannel.safeParse({ + id: '1', + type: 0, + position: 0, + permission_overwrites: [{id: '2', type, allow: '8', deny: '0'}], + }).success, + ).toBe(false); + }, + ); }); diff --git a/packages/schema/src/domains/tests/JobsSchemas.test.ts b/packages/schema/src/domains/tests/JobsSchemas.test.ts index 9c47e0c40..c8f71574c 100644 --- a/packages/schema/src/domains/tests/JobsSchemas.test.ts +++ b/packages/schema/src/domains/tests/JobsSchemas.test.ts @@ -10,17 +10,14 @@ describe('jobs schemas', () => { expect(JobLedgerEntrySchema.shape.status.safeParse('failed').success).toBe(false); }); - test.each([ - 'queued', - 'running', - 'succeeded', - 'cancelled', - 'deadletter', - ])('accepts ledger status %s across query, request, and response', (status) => { - expect(ListJobsQuery.parse({status}).status).toBe(status); - expect(ListJobsRequest.parse({status}).status).toBe(status); - expect(JobLedgerEntrySchema.shape.status.parse(status)).toBe(status); - }); + test.each(['queued', 'running', 'succeeded', 'cancelled', 'deadletter'])( + 'accepts ledger status %s across query, request, and response', + (status) => { + expect(ListJobsQuery.parse({status}).status).toBe(status); + expect(ListJobsRequest.parse({status}).status).toBe(status); + expect(JobLedgerEntrySchema.shape.status.parse(status)).toBe(status); + }, + ); }); describe('job pagination cursor', () => { @@ -34,16 +31,15 @@ describe('job pagination cursor', () => { expect(ListJobsQuery.parse(cursor)).toEqual({...cursor, limit: 50, max_lookback_days: 14}); }); - test.each([ - 'cursor_bucket_day', - 'cursor_created_at', - 'cursor_job_id', - ] as const)('rejects a cursor missing %s', (field) => { - expect(ListJobsQuery.safeParse({...cursor, [field]: undefined})).toMatchObject({ - success: false, - error: {issues: [{path: [field]}]}, - }); - }); + test.each(['cursor_bucket_day', 'cursor_created_at', 'cursor_job_id'] as const)( + 'rejects a cursor missing %s', + (field) => { + expect(ListJobsQuery.safeParse({...cursor, [field]: undefined})).toMatchObject({ + success: false, + error: {issues: [{path: [field]}]}, + }); + }, + ); test.each([ {cursor_bucket_day: '2023-02-29'}, diff --git a/packages/schema/src/domains/tests/MessageRequestSchemas.test.ts b/packages/schema/src/domains/tests/MessageRequestSchemas.test.ts index 8951bb585..a3835b242 100644 --- a/packages/schema/src/domains/tests/MessageRequestSchemas.test.ts +++ b/packages/schema/src/domains/tests/MessageRequestSchemas.test.ts @@ -18,16 +18,12 @@ describe('MessageNonceRequest', () => { expect(MessageNonceRequest.parse(input)).toBe(expected); }); - it.each([ - -1, - 0.5, - Number.MAX_SAFE_INTEGER + 1, - Number.POSITIVE_INFINITY, - '', - 'a'.repeat(33), - ])('rejects invalid nonce %j', (input) => { - expect(MessageNonceRequest.safeParse(input).success).toBe(false); - }); + it.each([-1, 0.5, Number.MAX_SAFE_INTEGER + 1, Number.POSITIVE_INFINITY, '', 'a'.repeat(33)])( + 'rejects invalid nonce %j', + (input) => { + expect(MessageNonceRequest.safeParse(input).success).toBe(false); + }, + ); }); describe('MessageRequestSchema', () => { diff --git a/packages/schema/src/domains/tests/OAuthSchemas.test.ts b/packages/schema/src/domains/tests/OAuthSchemas.test.ts index 360ebf83d..db0be3af0 100644 --- a/packages/schema/src/domains/tests/OAuthSchemas.test.ts +++ b/packages/schema/src/domains/tests/OAuthSchemas.test.ts @@ -137,14 +137,12 @@ describe('application redirect policies', () => { ])('accepts registered URI %s', (uri) => { expect(ApplicationCreateRequest.parse({name: 'Application', redirect_uris: [uri]}).redirect_uris).toEqual([uri]); }); - it.each([ - 'http://example.com/callback', - 'https://', - '/relative', - 'ftp://example.com/callback', - ])('rejects registered URI %s', (uri) => { - expect(ApplicationCreateRequest.safeParse({name: 'Application', redirect_uris: [uri]}).success).toBe(false); - }); + it.each(['http://example.com/callback', 'https://', '/relative', 'ftp://example.com/callback'])( + 'rejects registered URI %s', + (uri) => { + expect(ApplicationCreateRequest.safeParse({name: 'Application', redirect_uris: [uri]}).success).toBe(false); + }, + ); it('defaults missing create URIs but does not clear missing update URIs', () => { expect(ApplicationCreateRequest.parse({name: 'Application'})).toEqual({name: 'Application', redirect_uris: []}); expect(ApplicationUpdateRequest.parse({})).toEqual({}); diff --git a/packages/schema/src/domains/tests/RequestTransportSchemas.test.ts b/packages/schema/src/domains/tests/RequestTransportSchemas.test.ts index c6c026597..a990b2e3c 100644 --- a/packages/schema/src/domains/tests/RequestTransportSchemas.test.ts +++ b/packages/schema/src/domains/tests/RequestTransportSchemas.test.ts @@ -71,13 +71,12 @@ describe.each([ {name: 'update body', schema: UpdateVoiceServerRequestBody, required: {}}, {name: 'update service request', schema: UpdateVoiceServerRequest, required: {region_id: 'eu', server_id: 'primary'}}, ])('$name coordinates', ({schema, required}) => { - it.each([ - {}, - {latitude: 0, longitude: 0}, - {latitude: null, longitude: null}, - ])('accepts the paired state %j', (coordinates) => { - expect(schema.parse({...required, ...coordinates})).toMatchObject(coordinates); - }); + it.each([{}, {latitude: 0, longitude: 0}, {latitude: null, longitude: null}])( + 'accepts the paired state %j', + (coordinates) => { + expect(schema.parse({...required, ...coordinates})).toMatchObject(coordinates); + }, + ); it.each([ {latitude: 0}, @@ -163,15 +162,13 @@ describe.each([ expect(schema.parse({})).toEqual(bulkDeleteDefaults); }); - it.each([ - 'include_dms', - 'include_dms_closed', - 'include_group_dms', - 'include_guilds', - ] as const)('accepts %s as the only selected context', (field) => { - const selection = {...noSelectedContexts, [field]: true}; - expect(schema.parse(selection)).toEqual({...bulkDeleteDefaults, ...selection}); - }); + it.each(['include_dms', 'include_dms_closed', 'include_group_dms', 'include_guilds'] as const)( + 'accepts %s as the only selected context', + (field) => { + const selection = {...noSelectedContexts, [field]: true}; + expect(schema.parse(selection)).toEqual({...bulkDeleteDefaults, ...selection}); + }, + ); it('does not require selected contexts for inaccessible-only scope', () => { const selection = {...noSelectedContexts, scope: 'inaccessible_only'}; diff --git a/packages/schema/src/primitives/tests/AuditLogValidators.test.ts b/packages/schema/src/primitives/tests/AuditLogValidators.test.ts index 85c2e75ca..69adb7efb 100644 --- a/packages/schema/src/primitives/tests/AuditLogValidators.test.ts +++ b/packages/schema/src/primitives/tests/AuditLogValidators.test.ts @@ -5,11 +5,12 @@ import {AuditLogActionTypeSchema} from '@fluxer/schema/src/primitives/AuditLogVa import {describe, expect, it} from 'vitest'; describe('AuditLogActionTypeSchema', () => { - it.each( - Object.values(AuditLogActionType).filter((value) => typeof value === 'number'), - )('accepts registered action %i', (value) => { - expect(AuditLogActionTypeSchema.parse(value)).toBe(value); - }); + it.each(Object.values(AuditLogActionType).filter((value) => typeof value === 'number'))( + 'accepts registered action %i', + (value) => { + expect(AuditLogActionTypeSchema.parse(value)).toBe(value); + }, + ); it.each([0, 9, 999, -1, 1.5, '1', 'GUILD_UPDATE', null])('rejects unknown or nonnumeric action %j', (value) => { expect(AuditLogActionTypeSchema.safeParse(value).success).toBe(false); diff --git a/packages/schema/src/primitives/tests/FileValidators.test.ts b/packages/schema/src/primitives/tests/FileValidators.test.ts index a8cda927e..eca349da2 100644 --- a/packages/schema/src/primitives/tests/FileValidators.test.ts +++ b/packages/schema/src/primitives/tests/FileValidators.test.ts @@ -53,21 +53,12 @@ describe('isValidBase64', () => { expect(isValidBase64(input)).toBe(true); }); - it.each([ - 'YQ', - 'YQ=', - 'YQ===', - '====', - 'Y=Q=', - 'YR==', - 'YWJ=', - 'YWJ_', - 'YWJ-', - 'YW J', - 'éAAA', - ])('rejects malformed or noncanonical encoding %j', (input) => { - expect(isValidBase64(input)).toBe(false); - }); + it.each(['YQ', 'YQ=', 'YQ===', '====', 'Y=Q=', 'YR==', 'YWJ=', 'YWJ_', 'YWJ-', 'YW J', 'éAAA'])( + 'rejects malformed or noncanonical encoding %j', + (input) => { + expect(isValidBase64(input)).toBe(false); + }, + ); it.each([1, 2, 3, 255, 256])('accepts a byte round trip of length %i', (length) => { const bytes = Buffer.from(Array.from({length}, (_, index) => index % 256)); @@ -137,13 +128,13 @@ describe('base64LengthForBytes', () => { expect(base64LengthForBytes(bytes) % 4).toBe(0); }); - it.each([ - EMOJI_MAX_SIZE, - EMOJI_MAX_SIZE + 1, - ])('accepts %i encoded bytes; decoded-byte limits remain authoritative', (bytes) => { - const schema = createBase64StringType(1, base64LengthForBytes(EMOJI_MAX_SIZE)); - const encoded = Buffer.alloc(bytes, 1).toString('base64'); - expect(encoded.length).toBe(base64LengthForBytes(EMOJI_MAX_SIZE)); - expect(schema.parse(encoded)).toBe(encoded); - }); + it.each([EMOJI_MAX_SIZE, EMOJI_MAX_SIZE + 1])( + 'accepts %i encoded bytes; decoded-byte limits remain authoritative', + (bytes) => { + const schema = createBase64StringType(1, base64LengthForBytes(EMOJI_MAX_SIZE)); + const encoded = Buffer.alloc(bytes, 1).toString('base64'); + expect(encoded.length).toBe(base64LengthForBytes(EMOJI_MAX_SIZE)); + expect(schema.parse(encoded)).toBe(encoded); + }, + ); }); diff --git a/packages/schema/src/primitives/tests/GuildValidators.test.ts b/packages/schema/src/primitives/tests/GuildValidators.test.ts index ce146da60..ef0565e62 100644 --- a/packages/schema/src/primitives/tests/GuildValidators.test.ts +++ b/packages/schema/src/primitives/tests/GuildValidators.test.ts @@ -50,10 +50,9 @@ it.each([1, 2])('rejects legacy NSFW level %i', (value) => { expect(NSFWLevelSchema.safeParse(value).success).toBe(false); }); -it.each([ - MessageNotifications.NULL, - MessageNotifications.NO_MESSAGES, - MessageNotifications.INHERIT, -])('rejects channel-only notification setting %i as a guild default', (value) => { - expect(DefaultMessageNotificationsSchema.safeParse(value).success).toBe(false); -}); +it.each([MessageNotifications.NULL, MessageNotifications.NO_MESSAGES, MessageNotifications.INHERIT])( + 'rejects channel-only notification setting %i as a guild default', + (value) => { + expect(DefaultMessageNotificationsSchema.safeParse(value).success).toBe(false); + }, +); diff --git a/packages/schema/src/primitives/tests/MessageValidators.test.ts b/packages/schema/src/primitives/tests/MessageValidators.test.ts index a75d447f9..953acca1d 100644 --- a/packages/schema/src/primitives/tests/MessageValidators.test.ts +++ b/packages/schema/src/primitives/tests/MessageValidators.test.ts @@ -5,11 +5,12 @@ import {MessageReferenceTypeSchema, MessageTypeSchema} from '@fluxer/schema/src/ import {describe, expect, it} from 'vitest'; describe('MessageTypeSchema', () => { - it.each( - Object.values(MessageTypes).filter((value) => value !== MessageTypes.CLIENT_SYSTEM), - )('accepts wire message type %i', (value) => { - expect(MessageTypeSchema.parse(value)).toBe(value); - }); + it.each(Object.values(MessageTypes).filter((value) => value !== MessageTypes.CLIENT_SYSTEM))( + 'accepts wire message type %i', + (value) => { + expect(MessageTypeSchema.parse(value)).toBe(value); + }, + ); it.each([MessageTypes.CLIENT_SYSTEM, 8, -1, 0.5, '0', null])('rejects non-wire message type %j', (value) => { expect(MessageTypeSchema.safeParse(value).success).toBe(false); diff --git a/packages/schema/src/primitives/tests/QueryValidators.test.ts b/packages/schema/src/primitives/tests/QueryValidators.test.ts index c1ac871e5..b996b5b4d 100644 --- a/packages/schema/src/primitives/tests/QueryValidators.test.ts +++ b/packages/schema/src/primitives/tests/QueryValidators.test.ts @@ -40,24 +40,15 @@ describe('createQueryIntegerType', () => { expect(schema.parse(input)).toBe(expected); }); - it.each([ - '3.14', - '3.0', - '42px', - '1e2', - '0x10', - '', - ' ', - 'NaN', - 'Infinity', - '-1', - '2147483648', - ])('rejects %j without truncation or coercion', (input) => { - expect(schema.safeParse(input)).toMatchObject({ - success: false, - error: {issues: [{message: ValidationErrorCodes.VALUE_MUST_BE_INTEGER_IN_RANGE}]}, - }); - }); + it.each(['3.14', '3.0', '42px', '1e2', '0x10', '', ' ', 'NaN', 'Infinity', '-1', '2147483648'])( + 'rejects %j without truncation or coercion', + (input) => { + expect(schema.safeParse(input)).toMatchObject({ + success: false, + error: {issues: [{message: ValidationErrorCodes.VALUE_MUST_BE_INTEGER_IN_RANGE}]}, + }); + }, + ); it.each(['-5', '5'])('accepts the configured range boundary %s', (input) => { expect(createQueryIntegerType({minValue: -5, maxValue: 5}).parse(input)).toBe(Number(input)); diff --git a/packages/schema/src/primitives/tests/SchemaPrimitives.test.ts b/packages/schema/src/primitives/tests/SchemaPrimitives.test.ts index 695c8e520..dec2f36d8 100644 --- a/packages/schema/src/primitives/tests/SchemaPrimitives.test.ts +++ b/packages/schema/src/primitives/tests/SchemaPrimitives.test.ts @@ -64,14 +64,12 @@ describe('Int64Type', () => { }); }); - it.each([ - Number.MAX_SAFE_INTEGER + 1, - Number.NaN, - Number.POSITIVE_INFINITY, - 1.5, - ])('rejects lossy or noninteger numeric input %j', (input) => { - expect(Int64Type.safeParse(input).success).toBe(false); - }); + it.each([Number.MAX_SAFE_INTEGER + 1, Number.NaN, Number.POSITIVE_INFINITY, 1.5])( + 'rejects lossy or noninteger numeric input %j', + (input) => { + expect(Int64Type.safeParse(input).success).toBe(false); + }, + ); }); describe('Int64StringType', () => { @@ -92,14 +90,12 @@ describe('UnsignedInt64Type', () => { expect(UnsignedInt64Type.parse(input)).toBe(expected); }); - it.each([ - '-1', - '+1', - '9223372036854775808', - '18446744073709551615', - ])('rejects %s outside unsigned signed-64-bit storage', (input) => { - expect(UnsignedInt64Type.safeParse(input).success).toBe(false); - }); + it.each(['-1', '+1', '9223372036854775808', '18446744073709551615'])( + 'rejects %s outside unsigned signed-64-bit storage', + (input) => { + expect(UnsignedInt64Type.safeParse(input).success).toBe(false); + }, + ); }); describe('SnowflakeType', () => { diff --git a/packages/schema/tsconfig.json b/packages/schema/tsconfig.json index 2e901e6b8..fb2b0d076 100644 --- a/packages/schema/tsconfig.json +++ b/packages/schema/tsconfig.json @@ -2,6 +2,7 @@ "extends": "../../tsconfigs/base.json", "compilerOptions": { "lib": ["ESNext", "DOM"], + "types": ["node"], "paths": { "@fluxer/*": ["./../../packages/*"] } diff --git a/packages/snowflake/package.json b/packages/snowflake/package.json index 722ab7a2b..f2b2f1bf9 100644 --- a/packages/snowflake/package.json +++ b/packages/snowflake/package.json @@ -13,7 +13,7 @@ "scripts": { "test": "vitest run", "test:watch": "vitest", - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "dependencies": { "@fluxer/constants": "workspace:*", @@ -21,7 +21,7 @@ }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/packages/voice_engine_v2/package.json b/packages/voice_engine_v2/package.json index 75b383dfa..ef6b99d8c 100644 --- a/packages/voice_engine_v2/package.json +++ b/packages/voice_engine_v2/package.json @@ -20,11 +20,11 @@ "bench": "vitest bench --run", "test": "vitest run", "test:watch": "vitest", - "typecheck": "tsgo --noEmit" + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/node": "catalog:", - "@typescript/native-preview": "catalog:", + "typescript": "catalog:ts7", "vitest": "catalog:" } } diff --git a/packages/voice_engine_v2/src/core/reducer.bench.ts b/packages/voice_engine_v2/src/core/reducer.bench.ts index 40bd7178c..b7a22c6e9 100644 --- a/packages/voice_engine_v2/src/core/reducer.bench.ts +++ b/packages/voice_engine_v2/src/core/reducer.bench.ts @@ -16,7 +16,7 @@ import type { VoiceEngineV2ScreenOptions, VoiceEngineV2Stats, } from '@fluxer/voice_engine_v2/src/protocol/types'; -import {bench, describe} from 'vitest'; +import {test} from 'vitest'; interface VoiceEngineV2BenchFixture { events: Array; @@ -100,28 +100,28 @@ const participantEvent: VoiceEngineV2Event = { const statsPayload: VoiceEngineV2Stats = Object.freeze({rttMs: 42, outbound: [], inbound: []}); const statsEvent: VoiceEngineV2Event = {type: 'stats.collected', operationId: 9_999_999, stats: statsPayload}; -describe('voice engine v2 reducer hot paths', () => { - bench('inboundVideo.frameReceived', () => { +test('voice engine v2 reducer hot paths', async ({bench}) => { + await bench('inboundVideo.frameReceived', () => { transitionVoiceEngineV2(connectedSnapshot, frameEvent); - }); + }).run(); - bench('inboundVideo.frameStats', () => { + await bench('inboundVideo.frameStats', () => { transitionVoiceEngineV2(connectedSnapshot, frameStatsEvent); - }); + }).run(); - bench('microphone.publishRequested', () => { + await bench('microphone.publishRequested', () => { transitionVoiceEngineV2(connectedSnapshot, microphoneEvent); - }); + }).run(); - bench('screen.publishRequested', () => { + await bench('screen.publishRequested', () => { transitionVoiceEngineV2(connectedSnapshot, screenEvent); - }); + }).run(); - bench('room.participantJoined', () => { + await bench('room.participantJoined', () => { transitionVoiceEngineV2(connectedSnapshot, participantEvent); - }); + }).run(); - bench('stats.collected', () => { + await bench('stats.collected', () => { transitionVoiceEngineV2(connectedSnapshot, statsEvent); - }); + }).run(); }); diff --git a/packages/voice_engine_v2/src/policies/policies.test.ts b/packages/voice_engine_v2/src/policies/policies.test.ts index a3f760e0e..aac139383 100644 --- a/packages/voice_engine_v2/src/policies/policies.test.ts +++ b/packages/voice_engine_v2/src/policies/policies.test.ts @@ -98,87 +98,88 @@ interface VoiceTrackClassificationFixture { } describe('voice engine v2 policies', () => { - it.each( - microphoneFailureFixtures as Array, - )('replays microphone failure action fixture: $name', ({result, requestedEnabled, context, expected}) => { - expect(getVoiceEngineV2MicrophoneOperationFailureAction(result, requestedEnabled, context)).toBe(expected); - }); + it.each(microphoneFailureFixtures as Array)( + 'replays microphone failure action fixture: $name', + ({result, requestedEnabled, context, expected}) => { + expect(getVoiceEngineV2MicrophoneOperationFailureAction(result, requestedEnabled, context)).toBe(expected); + }, + ); - it.each( - hardwareEncoderCapabilityFixtures as Array, - )('replays hardware encoder capability fixture: $name', ({ - input, - codec, - expectedCapabilities, - expectedNativeNvenc, - }) => { - const capabilities = normalizeVoiceEngineV2HardwareEncoderCapabilities(input); - expect(capabilities).toMatchObject(expectedCapabilities); - expect(hasVoiceEngineV2NativeNvencEncoder(capabilities, codec)).toBe(expectedNativeNvenc); - }); + it.each(hardwareEncoderCapabilityFixtures as Array)( + 'replays hardware encoder capability fixture: $name', + ({input, codec, expectedCapabilities, expectedNativeNvenc}) => { + const capabilities = normalizeVoiceEngineV2HardwareEncoderCapabilities(input); + expect(capabilities).toMatchObject(expectedCapabilities); + expect(hasVoiceEngineV2NativeNvencEncoder(capabilities, codec)).toBe(expectedNativeNvenc); + }, + ); - it.each( - screenShareEncodingPlanFixtures as Array, - )('replays screen-share encoding plan fixture: $name', (fixture) => { - const plan = planVoiceEngineV2ScreenEncodingChange(fixture.input); - expect(plan.action).toBe(fixture.expectedAction); - expect(plan.reason).toBe(fixture.expectedReason); - if (fixture.expectedCodec !== undefined) { - expect(plan.desired?.codec).toBe(fixture.expectedCodec); - } - if (fixture.expectedHardwareEncoding !== undefined) { - expect(plan.desired?.hardwareEncoding).toBe(fixture.expectedHardwareEncoding); - } - if (fixture.expectedZeroCopyRequired !== undefined) { - expect(plan.desired?.zeroCopyRequired).toBe(fixture.expectedZeroCopyRequired); - } - if (fixture.expectedErrorCode !== undefined) { - expect(plan.error?.code).toBe(fixture.expectedErrorCode); - } - }); + it.each(screenShareEncodingPlanFixtures as Array)( + 'replays screen-share encoding plan fixture: $name', + (fixture) => { + const plan = planVoiceEngineV2ScreenEncodingChange(fixture.input); + expect(plan.action).toBe(fixture.expectedAction); + expect(plan.reason).toBe(fixture.expectedReason); + if (fixture.expectedCodec !== undefined) { + expect(plan.desired?.codec).toBe(fixture.expectedCodec); + } + if (fixture.expectedHardwareEncoding !== undefined) { + expect(plan.desired?.hardwareEncoding).toBe(fixture.expectedHardwareEncoding); + } + if (fixture.expectedZeroCopyRequired !== undefined) { + expect(plan.desired?.zeroCopyRequired).toBe(fixture.expectedZeroCopyRequired); + } + if (fixture.expectedErrorCode !== undefined) { + expect(plan.error?.code).toBe(fixture.expectedErrorCode); + } + }, + ); - it.each( - cameraShareEncodingPlanFixtures as Array, - )('replays camera-share encoding plan fixture: $name', (fixture) => { - const plan = planVoiceEngineV2CameraEncodingChange(fixture.input); - expect(plan.action).toBe(fixture.expectedAction); - expect(plan.reason).toBe(fixture.expectedReason); - if (fixture.expectedCodec !== undefined) { - expect(plan.desired?.codec).toBe(fixture.expectedCodec); - } - if (fixture.expectedMirror !== undefined) { - expect(plan.desired?.mirror).toBe(fixture.expectedMirror); - } - if (fixture.expectedBackgroundMode !== undefined) { - expect(plan.desired?.backgroundMode).toBe(fixture.expectedBackgroundMode); - } - if (fixture.expectedWidth !== undefined) { - expect(plan.desired?.width).toBe(fixture.expectedWidth); - } - if (fixture.expectedFrameRate !== undefined) { - expect(plan.desired?.frameRate).toBe(fixture.expectedFrameRate); - } - if (fixture.expectedErrorCode !== undefined) { - expect(plan.error?.code).toBe(fixture.expectedErrorCode); - } - }); + it.each(cameraShareEncodingPlanFixtures as Array)( + 'replays camera-share encoding plan fixture: $name', + (fixture) => { + const plan = planVoiceEngineV2CameraEncodingChange(fixture.input); + expect(plan.action).toBe(fixture.expectedAction); + expect(plan.reason).toBe(fixture.expectedReason); + if (fixture.expectedCodec !== undefined) { + expect(plan.desired?.codec).toBe(fixture.expectedCodec); + } + if (fixture.expectedMirror !== undefined) { + expect(plan.desired?.mirror).toBe(fixture.expectedMirror); + } + if (fixture.expectedBackgroundMode !== undefined) { + expect(plan.desired?.backgroundMode).toBe(fixture.expectedBackgroundMode); + } + if (fixture.expectedWidth !== undefined) { + expect(plan.desired?.width).toBe(fixture.expectedWidth); + } + if (fixture.expectedFrameRate !== undefined) { + expect(plan.desired?.frameRate).toBe(fixture.expectedFrameRate); + } + if (fixture.expectedErrorCode !== undefined) { + expect(plan.error?.code).toBe(fixture.expectedErrorCode); + } + }, + ); - it.each( - voiceStatsCoercionFixtures as Array, - )('replays voice stats coercion fixture: $name', ({input, expected}) => { - expect(coerceVoiceEngineV2Stats(input)).toMatchObject(expected); - }); + it.each(voiceStatsCoercionFixtures as Array)( + 'replays voice stats coercion fixture: $name', + ({input, expected}) => { + expect(coerceVoiceEngineV2Stats(input)).toMatchObject(expected); + }, + ); - it.each(voiceStatsSummaryFixtures as Array)('replays voice stats summary fixture: $name', ({ - input, - expectedSummary, - }) => { - expect(summarizeVoiceEngineV2Stats(input)).toMatchObject(expectedSummary); - }); + it.each(voiceStatsSummaryFixtures as Array)( + 'replays voice stats summary fixture: $name', + ({input, expectedSummary}) => { + expect(summarizeVoiceEngineV2Stats(input)).toMatchObject(expectedSummary); + }, + ); - it.each( - voiceTrackClassificationFixtures as Array, - )('replays voice track classification fixture: $name', ({input, expected}) => { - expect(classifyVoiceEngineV2TrackStats(input)).toEqual(expected); - }); + it.each(voiceTrackClassificationFixtures as Array)( + 'replays voice track classification fixture: $name', + ({input, expected}) => { + expect(classifyVoiceEngineV2TrackStats(input)).toEqual(expected); + }, + ); }); diff --git a/packages/voice_engine_v2/src/runtime/VoiceEngineV2Runtime.bench.ts b/packages/voice_engine_v2/src/runtime/VoiceEngineV2Runtime.bench.ts index 3264ec2de..1d5cc9f0a 100644 --- a/packages/voice_engine_v2/src/runtime/VoiceEngineV2Runtime.bench.ts +++ b/packages/voice_engine_v2/src/runtime/VoiceEngineV2Runtime.bench.ts @@ -18,7 +18,7 @@ import type { } from '@fluxer/voice_engine_v2/src/protocol/types'; import {createVoiceEngineV2MemoryEventLogSpillSink} from '@fluxer/voice_engine_v2/src/runtime/eventLogRing'; import {VoiceEngineV2Runtime} from '@fluxer/voice_engine_v2/src/runtime/VoiceEngineV2Runtime'; -import {bench, describe} from 'vitest'; +import {test} from 'vitest'; interface VoiceEngineV2BenchFixture { events: Array; @@ -108,24 +108,24 @@ const runtimeForScreen = buildRuntimeWithConnectedSession(); const runtimeForParticipant = buildRuntimeWithConnectedSession(); const runtimeForStats = buildRuntimeWithConnectedSession(); -describe('voice engine v2 runtime dispatch round-trip', () => { - bench('dispatch inboundVideo.frameReceived', () => { +test('voice engine v2 runtime dispatch round-trip', async ({bench}) => { + await bench('dispatch inboundVideo.frameReceived', () => { runtimeForFrames.dispatch(frameEvent); - }); + }).run(); - bench('dispatch microphone.publishRequested', () => { + await bench('dispatch microphone.publishRequested', () => { runtimeForMicrophone.dispatch(microphoneEvent); - }); + }).run(); - bench('dispatch screen.publishRequested', () => { + await bench('dispatch screen.publishRequested', () => { runtimeForScreen.dispatch(screenEvent); - }); + }).run(); - bench('dispatch room.participantJoined', () => { + await bench('dispatch room.participantJoined', () => { runtimeForParticipant.dispatch(participantEvent); - }); + }).run(); - bench('dispatch stats.collected', () => { + await bench('dispatch stats.collected', () => { runtimeForStats.dispatch(statsEvent); - }); + }).run(); }); diff --git a/packages/voice_engine_v2/src/runtime/snapshot.bench.ts b/packages/voice_engine_v2/src/runtime/snapshot.bench.ts index c80dc3605..839d7a942 100644 --- a/packages/voice_engine_v2/src/runtime/snapshot.bench.ts +++ b/packages/voice_engine_v2/src/runtime/snapshot.bench.ts @@ -10,7 +10,7 @@ import type { VoiceEngineV2Track, VoiceEngineV2TrackSource, } from '@fluxer/voice_engine_v2/src/protocol/types'; -import {bench, describe} from 'vitest'; +import {test} from 'vitest'; const PARTICIPANT_COUNT = 8; const TRACKS_PER_PARTICIPANT = 4; @@ -56,16 +56,16 @@ function buildRealisticSnapshot(): VoiceEngineV2Snapshot { const realisticSnapshot = buildRealisticSnapshot(); const serializedSnapshot = JSON.stringify(realisticSnapshot); -describe('voice engine v2 snapshot serialise/deserialise baseline', () => { - bench('JSON.stringify snapshot (8 participants × 4 tracks)', () => { +test('voice engine v2 snapshot serialise/deserialise baseline', async ({bench}) => { + await bench('JSON.stringify snapshot (8 participants × 4 tracks)', () => { JSON.stringify(realisticSnapshot); - }); + }).run(); - bench('JSON.parse snapshot (8 participants × 4 tracks)', () => { + await bench('JSON.parse snapshot (8 participants × 4 tracks)', () => { JSON.parse(serializedSnapshot); - }); + }).run(); - bench('JSON.stringify + JSON.parse round-trip', () => { + await bench('JSON.stringify + JSON.parse round-trip', () => { JSON.parse(JSON.stringify(realisticSnapshot)); - }); + }).run(); }); diff --git a/packages/voice_engine_v2/vitest.config.ts b/packages/voice_engine_v2/vitest.config.ts index 04802f2c6..b1428f7d4 100644 --- a/packages/voice_engine_v2/vitest.config.ts +++ b/packages/voice_engine_v2/vitest.config.ts @@ -12,7 +12,6 @@ export default defineConfig({ benchmark: { include: ['**/*.bench.{ts,tsx}'], exclude: ['node_modules', 'dist'], - reporters: ['default'], }, }, }); diff --git a/patches/@hono__node-server@1.19.17.patch b/patches/@hono__node-server@1.19.17.patch deleted file mode 100644 index eee9b4335..000000000 --- a/patches/@hono__node-server@1.19.17.patch +++ /dev/null @@ -1,216 +0,0 @@ -diff --git a/dist/index.js b/dist/index.js -index 35f72a956727fde717972442a9ad9cd079717d5f..ede82c2fc2859b4cd05acfa12be11d9b9bbea798 100644 ---- a/dist/index.js -+++ b/dist/index.js -@@ -486,7 +486,8 @@ var responseViaCache = async (res, outgoing) => { - } - } - } -- if (!hasContentLength) { -+ const hasContentRange = Object.keys(header).some((key) => key.toLowerCase() === "content-range"); -+ if (!hasContentLength && hasContentRange) { - if (typeof body === "string") { - header["Content-Length"] = Buffer.byteLength(body); - } else if (body instanceof Uint8Array) { -@@ -560,7 +561,11 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { - break; - } - } -- if (done && !("content-length" in resHeaderRecord)) { -+ if ( -+ done && -+ !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && -+ ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord) -+ ) { - resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); - } - } -diff --git a/dist/index.mjs b/dist/index.mjs -index 4a699b73eb1ce21581aa5dd426e1870cb0723070..65729d6d8e2ab85de60b00062698a6b4618d9e50 100644 ---- a/dist/index.mjs -+++ b/dist/index.mjs -@@ -447,7 +447,8 @@ var responseViaCache = async (res, outgoing) => { - } - } - } -- if (!hasContentLength) { -+ const hasContentRange = Object.keys(header).some((key) => key.toLowerCase() === "content-range"); -+ if (!hasContentLength && hasContentRange) { - if (typeof body === "string") { - header["Content-Length"] = Buffer.byteLength(body); - } else if (body instanceof Uint8Array) { -@@ -521,7 +522,11 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { - break; - } - } -- if (done && !("content-length" in resHeaderRecord)) { -+ if ( -+ done && -+ !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && -+ ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord) -+ ) { - resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); - } - } -diff --git a/dist/listener.js b/dist/listener.js -index ca27851e8346dedfbf16e3e2e4b9dababbe43c9a..7f422a28a9b3e79d22e143114932b48eb55bda0f 100644 ---- a/dist/listener.js -+++ b/dist/listener.js -@@ -478,7 +478,8 @@ var responseViaCache = async (res, outgoing) => { - } - } - } -- if (!hasContentLength) { -+ const hasContentRange = Object.keys(header).some((key) => key.toLowerCase() === "content-range"); -+ if (!hasContentLength && hasContentRange) { - if (typeof body === "string") { - header["Content-Length"] = Buffer.byteLength(body); - } else if (body instanceof Uint8Array) { -@@ -552,7 +553,11 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { - break; - } - } -- if (done && !("content-length" in resHeaderRecord)) { -+ if ( -+ done && -+ !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && -+ ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord) -+ ) { - resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); - } - } -diff --git a/dist/listener.mjs b/dist/listener.mjs -index e9c75a9f94dd3465b6297aff638f546431a20157..03e0a4adafff5264804dcf4863dc609be55c5a5d 100644 ---- a/dist/listener.mjs -+++ b/dist/listener.mjs -@@ -444,7 +444,8 @@ var responseViaCache = async (res, outgoing) => { - } - } - } -- if (!hasContentLength) { -+ const hasContentRange = Object.keys(header).some((key) => key.toLowerCase() === "content-range"); -+ if (!hasContentLength && hasContentRange) { - if (typeof body === "string") { - header["Content-Length"] = Buffer.byteLength(body); - } else if (body instanceof Uint8Array) { -@@ -518,7 +519,11 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { - break; - } - } -- if (done && !("content-length" in resHeaderRecord)) { -+ if ( -+ done && -+ !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && -+ ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord) -+ ) { - resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); - } - } -diff --git a/dist/server.js b/dist/server.js -index 2cebe018608110d8c2714b80070e409362bb357c..6ef93c11a75161162004387521e1eccaef4d3960 100644 ---- a/dist/server.js -+++ b/dist/server.js -@@ -482,7 +482,8 @@ var responseViaCache = async (res, outgoing) => { - } - } - } -- if (!hasContentLength) { -+ const hasContentRange = Object.keys(header).some((key) => key.toLowerCase() === "content-range"); -+ if (!hasContentLength && hasContentRange) { - if (typeof body === "string") { - header["Content-Length"] = Buffer.byteLength(body); - } else if (body instanceof Uint8Array) { -@@ -556,7 +557,11 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { - break; - } - } -- if (done && !("content-length" in resHeaderRecord)) { -+ if ( -+ done && -+ !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && -+ ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord) -+ ) { - resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); - } - } -diff --git a/dist/server.mjs b/dist/server.mjs -index 252b2d9218ab6fa0280919b81b134367bf429f66..e69deb9ea98804014f295acbc98d729395a34c2f 100644 ---- a/dist/server.mjs -+++ b/dist/server.mjs -@@ -447,7 +447,8 @@ var responseViaCache = async (res, outgoing) => { - } - } - } -- if (!hasContentLength) { -+ const hasContentRange = Object.keys(header).some((key) => key.toLowerCase() === "content-range"); -+ if (!hasContentLength && hasContentRange) { - if (typeof body === "string") { - header["Content-Length"] = Buffer.byteLength(body); - } else if (body instanceof Uint8Array) { -@@ -521,7 +522,11 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { - break; - } - } -- if (done && !("content-length" in resHeaderRecord)) { -+ if ( -+ done && -+ !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && -+ ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord) -+ ) { - resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); - } - } -diff --git a/dist/vercel.js b/dist/vercel.js -index cf8171b29548f7284587e9561e6a36290bcbb9cc..ec5831bd79d0093af0928aea4ed2f5afcda9cf80 100644 ---- a/dist/vercel.js -+++ b/dist/vercel.js -@@ -480,7 +480,8 @@ var responseViaCache = async (res, outgoing) => { - } - } - } -- if (!hasContentLength) { -+ const hasContentRange = Object.keys(header).some((key) => key.toLowerCase() === "content-range"); -+ if (!hasContentLength && hasContentRange) { - if (typeof body === "string") { - header["Content-Length"] = Buffer.byteLength(body); - } else if (body instanceof Uint8Array) { -@@ -554,7 +555,11 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { - break; - } - } -- if (done && !("content-length" in resHeaderRecord)) { -+ if ( -+ done && -+ !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && -+ ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord) -+ ) { - resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); - } - } -diff --git a/dist/vercel.mjs b/dist/vercel.mjs -index aafdd30bb6d497c0277bd03864dc3d4de0c5e283..5762941816f7f7b25860e3329ac6947b2288b173 100644 ---- a/dist/vercel.mjs -+++ b/dist/vercel.mjs -@@ -444,7 +444,8 @@ var responseViaCache = async (res, outgoing) => { - } - } - } -- if (!hasContentLength) { -+ const hasContentRange = Object.keys(header).some((key) => key.toLowerCase() === "content-range"); -+ if (!hasContentLength && hasContentRange) { - if (typeof body === "string") { - header["Content-Length"] = Buffer.byteLength(body); - } else if (body instanceof Uint8Array) { -@@ -518,7 +519,11 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => { - break; - } - } -- if (done && !("content-length" in resHeaderRecord)) { -+ if ( -+ done && -+ !("content-length" in resHeaderRecord || "Content-Length" in resHeaderRecord) && -+ ("content-range" in resHeaderRecord || "Content-Range" in resHeaderRecord) -+ ) { - resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0); - } - } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aea473477..cef13bdd1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,3 +1,161 @@ +--- +lockfileVersion: '9.0' + +importers: + + .: + configDependencies: {} + packageManagerDependencies: + pnpm: + specifier: 12.4.2 + version: 12.4.2 + +packages: + + '@pnpm/exe.android-arm64@12.4.2': + resolution: {integrity: sha512-E255MbcQ0V1577M2BV0ajWuP7KmTPYA0jqZnk3rK6Lq3kTvZWulMMb7iqRmnLsQbyWTkMEB2CfyM70loVDA8xg==} + cpu: [arm64] + os: [android] + + '@pnpm/exe.android-x64@12.4.2': + resolution: {integrity: sha512-J1pSeCUwuKxMG70ZzpWn8JzElxiEa8NN/3N0SlZRtU2xbztChaJCKF3HaBNIj9yPfeofWzJo/lwNvDDjraQuZw==} + cpu: [x64] + os: [android] + + '@pnpm/exe.darwin-arm64@12.4.2': + resolution: {integrity: sha512-A0WDo8iErfZBXgrLseQxw8i8Y9ctUpOEl/Uu+cubnTzpD8tT9ykIB548L8YTM2WD4OS+ZOHSxy8aGZcvKq8PaQ==} + cpu: [arm64] + os: [darwin] + + '@pnpm/exe.darwin-x64@12.4.2': + resolution: {integrity: sha512-MSgJdovBWHcb5DEOvfPH9yNi/T5O1Xa4ess+E1ESGo/5yuty7S4JoiIjami+fsNXfnoQMlwsMUqYU4zAvBcNCw==} + cpu: [x64] + os: [darwin] + + '@pnpm/exe.freebsd-x64@12.4.2': + resolution: {integrity: sha512-h2YumlQSNvgbRPv+RXwABohX65f9bOBZn+jMIt7bFDISZPCzQ+Nvpt6Awbp4ip5PwQgYxbu5iREJ1fHE39Fm8A==} + cpu: [x64] + os: [freebsd] + + '@pnpm/exe.linux-arm64-musl@12.4.2': + resolution: {integrity: sha512-LwSEtSEDTv6S51YLs3YvSkPyun/QmfMic1UGICUkPWFu6ByP43RdMlkKvmVkfGhAYCpnxO057vrmyJqtfZrPCA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@pnpm/exe.linux-arm64@12.4.2': + resolution: {integrity: sha512-2dSiDXyhx+RTHsewxex8f/jVjqQXWJ2oow4kCVHEWdZKeBpgMxvZ6fHkTAUBJXgqhbKIDHvuNlZBP7gJfUWL5A==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.linux-ppc64@12.4.2': + resolution: {integrity: sha512-8Itc+jQk+MTz04LS9D1RcH+VctAWmzM4l1cJQ+Sx7pAJNo7EKHdRMbC0Tok1jyQ7eEHNJZD5EleYneZqWfZM+g==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.linux-riscv64@12.4.2': + resolution: {integrity: sha512-hleOeqhTVpH+z9RVMGnxvU4ZnrkBUClWjCbHD9u6kwyqhGSpevoU1wTGish+CBRhmIgMAy9pAfFpqhbAKOKNfw==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.linux-s390x@12.4.2': + resolution: {integrity: sha512-LAsQRRdP9aToENR6dtcIJ9l+e1zMYOX0tQcLGpRyLPVBQcYRLlvAPcmDshsiIHQjp05SDa9FI0czX1ZQ1a7a/A==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@pnpm/exe.linux-x64-musl@12.4.2': + resolution: {integrity: sha512-kzfzH2/0BWdTABK14Yj5a1xsdkTEQUp2eXEPNakaD9jKL025lq3hyaKHIz/gIZaPDMe/1bFFK/En4ztFlbBJxw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@pnpm/exe.linux-x64@12.4.2': + resolution: {integrity: sha512-/pbt0UVTa8NMDhzOWLQRfZ6G9ROKXlJPZtx845BqyWfc7hCrWXhTLBd70yO2y8+E+IWN3oHM1s/JsIQNGk1yvg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.win32-arm64@12.4.2': + resolution: {integrity: sha512-PsW19e4dAUNpZ0cS9flaxFuAmpt2dKlH/Vvi8TZ4qyJjjQzue/CEsWm+6wKVP4CJ7IT8RdL4qh+soOPWIgF2Zw==} + cpu: [arm64] + os: [win32] + + '@pnpm/exe.win32-x64@12.4.2': + resolution: {integrity: sha512-+xGoeE0g55ztWvl8i5QqdmNfW3nIrTVcoQrNshEOwxthm9Ag48oXton3uxOA3/SANyz5AXexEjj2KO20NnOrEw==} + cpu: [x64] + os: [win32] + + pnpm@12.4.2: + resolution: {integrity: sha512-CK3GYTGAJ1x8ntraOdzwjJxhrU5+rzMKTzRh8QKw+QdCNFTRF/mOctR/7wYWBwZE17/8lzpqV/UJCm18NosHyQ==} + engines: {node: '>=18.*'} + hasBin: true + +snapshots: + + '@pnpm/exe.android-arm64@12.4.2': + optional: true + + '@pnpm/exe.android-x64@12.4.2': + optional: true + + '@pnpm/exe.darwin-arm64@12.4.2': + optional: true + + '@pnpm/exe.darwin-x64@12.4.2': + optional: true + + '@pnpm/exe.freebsd-x64@12.4.2': + optional: true + + '@pnpm/exe.linux-arm64-musl@12.4.2': + optional: true + + '@pnpm/exe.linux-arm64@12.4.2': + optional: true + + '@pnpm/exe.linux-ppc64@12.4.2': + optional: true + + '@pnpm/exe.linux-riscv64@12.4.2': + optional: true + + '@pnpm/exe.linux-s390x@12.4.2': + optional: true + + '@pnpm/exe.linux-x64-musl@12.4.2': + optional: true + + '@pnpm/exe.linux-x64@12.4.2': + optional: true + + '@pnpm/exe.win32-arm64@12.4.2': + optional: true + + '@pnpm/exe.win32-x64@12.4.2': + optional: true + + pnpm@12.4.2: + optionalDependencies: + '@pnpm/exe.android-arm64': 12.4.2 + '@pnpm/exe.android-x64': 12.4.2 + '@pnpm/exe.darwin-arm64': 12.4.2 + '@pnpm/exe.darwin-x64': 12.4.2 + '@pnpm/exe.freebsd-x64': 12.4.2 + '@pnpm/exe.linux-arm64': 12.4.2 + '@pnpm/exe.linux-arm64-musl': 12.4.2 + '@pnpm/exe.linux-ppc64': 12.4.2 + '@pnpm/exe.linux-riscv64': 12.4.2 + '@pnpm/exe.linux-s390x': 12.4.2 + '@pnpm/exe.linux-x64': 12.4.2 + '@pnpm/exe.linux-x64-musl': 12.4.2 + '@pnpm/exe.win32-arm64': 12.4.2 + '@pnpm/exe.win32-x64': 12.4.2 + +--- lockfileVersion: '9.0' settings: @@ -7,86 +165,89 @@ settings: catalogs: default: '@arborium/arborium': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@astrojs/check': - specifier: 0.9.9 - version: 0.9.9 + specifier: 0.9.10 + version: 0.9.10 '@astrojs/markdown-remark': - specifier: 7.2.1 - version: 7.2.1 + specifier: 7.3.1 + version: 7.3.1 '@astrojs/mdx': - specifier: 7.0.3 - version: 7.0.3 + specifier: 8.0.1 + version: 8.0.1 '@astrojs/node': - specifier: 11.0.2 - version: 11.0.2 + specifier: 11.1.5 + version: 11.1.5 '@astrojs/starlight': - specifier: 0.41.4 - version: 0.41.4 + specifier: 0.42.1 + version: 0.42.1 '@atproto/api': - specifier: 0.19.0 - version: 0.19.0 + specifier: 0.20.44 + version: 0.20.44 + '@atproto/jwk-jose': + specifier: 0.2.4 + version: 0.2.4 + '@atproto/oauth-client-node': + specifier: 0.5.7 + version: 0.5.7 '@aws-sdk/client-s3': - specifier: 3.1121.0 - version: 3.1121.0 + specifier: 3.1133.0 + version: 3.1133.0 '@aws-sdk/lib-storage': - specifier: 3.1121.0 - version: 3.1121.0 + specifier: 3.1133.0 + version: 3.1133.0 '@aws-sdk/s3-request-presigner': - specifier: 3.1121.0 - version: 3.1121.0 + specifier: 3.1133.0 + version: 3.1133.0 '@base-ui/react': - specifier: 1.5.0 - version: 1.5.0 + specifier: 1.8.0 + version: 1.8.0 '@biomejs/biome': - specifier: 2.4.4 - version: 2.4.4 - '@bluesky-social/jwk-jose': - specifier: 0.1.11 - version: 0.1.11 - '@bluesky-social/oauth-client-node': - specifier: 0.3.9 - version: 0.3.9 + specifier: 2.5.14 + version: 2.5.14 '@elastic/elasticsearch': - specifier: 9.3.2 - version: 9.3.2 + specifier: 9.5.1 + version: 9.5.1 '@floating-ui/react': - specifier: 0.27.18 - version: 0.27.18 + specifier: 0.27.20 + version: 0.27.20 '@floating-ui/react-dom': - specifier: 2.1.7 - version: 2.1.7 + specifier: 2.1.9 + version: 2.1.9 '@hcaptcha/react-hcaptcha': - specifier: 2.0.2 - version: 2.0.2 + specifier: 2.2.0 + version: 2.2.0 '@hono/node-server': - specifier: 1.19.17 - version: 1.19.17 + specifier: 2.1.1 + version: 2.1.1 '@lexical/history': - specifier: 0.48.0 - version: 0.48.0 + specifier: 0.50.0 + version: 0.50.0 '@lexical/react': - specifier: 0.48.0 - version: 0.48.0 + specifier: 0.50.0 + version: 0.50.0 '@lexical/utils': - specifier: 0.48.0 - version: 0.48.0 + specifier: 0.50.0 + version: 0.50.0 '@lingui/cli': - specifier: 5.9.2 - version: 5.9.2 + specifier: 6.7.0 + version: 6.7.0 '@lingui/core': - specifier: 5.9.2 - version: 5.9.2 + specifier: 6.7.0 + version: 6.7.0 + '@lingui/format-po': + specifier: 6.7.0 + version: 6.7.0 '@lingui/react': - specifier: 5.9.2 - version: 5.9.2 + specifier: 6.7.0 + version: 6.7.0 '@livekit/components-react': - specifier: 2.9.20 - version: 2.9.20 + specifier: 2.9.24 + version: 2.9.24 '@marsidev/react-turnstile': - specifier: 1.4.2 - version: 1.4.2 + specifier: 1.6.1 + version: 1.6.1 '@mdx-js/mdx': specifier: 3.1.1 version: 3.1.1 @@ -96,39 +257,48 @@ catalogs: '@messageformat/parser': specifier: 5.1.1 version: 5.1.1 + '@nats-io/jetstream': + specifier: 3.4.0 + version: 3.4.0 + '@nats-io/transport-node': + specifier: 3.4.0 + version: 3.4.0 '@phosphor-icons/react': specifier: 2.1.10 version: 2.1.10 '@radix-ui/react-checkbox': - specifier: 1.3.3 - version: 1.3.3 + specifier: 1.3.11 + version: 1.3.11 '@radix-ui/react-radio-group': - specifier: 1.3.8 - version: 1.3.8 + specifier: 1.4.7 + version: 1.4.7 '@radix-ui/react-switch': - specifier: 1.2.6 - version: 1.2.6 + specifier: 1.3.7 + version: 1.3.7 '@redocly/openapi-core': - specifier: 2.52.0 - version: 2.52.0 + specifier: 2.53.2 + version: 2.53.2 + '@rspack/dev-server': + specifier: 2.2.1 + version: 2.2.1 '@sapphi-red/web-noise-suppressor': specifier: 0.4.0 version: 0.4.0 '@simplewebauthn/browser': - specifier: 13.2.2 - version: 13.2.2 + specifier: 14.0.0 + version: 14.0.0 '@simplewebauthn/server': - specifier: 13.2.3 - version: 13.2.3 + specifier: 14.0.2 + version: 14.0.2 '@svgr/webpack': specifier: 8.1.0 version: 8.1.0 '@tailwindcss/cli': - specifier: 4.2.1 - version: 4.2.1 + specifier: 4.3.3 + version: 4.3.3 '@types/archiver': - specifier: 7.0.0 - version: 7.0.0 + specifier: 8.0.0 + version: 8.0.0 '@types/combokeys': specifier: 2.4.9 version: 2.4.9 @@ -136,44 +306,38 @@ catalogs: specifier: 3.0.5 version: 3.0.5 '@types/lodash': - specifier: 4.17.24 - version: 4.17.24 + specifier: 4.17.25 + version: 4.17.25 '@types/luxon': - specifier: 3.7.1 - version: 3.7.1 + specifier: 3.7.5 + version: 3.7.5 '@types/mdast': specifier: 4.0.4 version: 4.0.4 '@types/node': - specifier: 25.3.0 - version: 25.3.0 - '@types/nodemailer': - specifier: 7.0.11 - version: 7.0.11 + specifier: 26.6.1 + version: 26.6.1 '@types/pg': - specifier: 8.16.0 - version: 8.16.0 + specifier: 8.23.1 + version: 8.23.1 '@types/qrcode': specifier: 1.5.6 version: 1.5.6 '@types/react': - specifier: 19.2.14 - version: 19.2.14 + specifier: 19.3.0 + version: 19.3.0 '@types/react-dom': - specifier: 19.2.3 - version: 19.2.3 + specifier: 19.3.0 + version: 19.3.0 '@types/send': specifier: 1.2.1 version: 1.2.1 '@types/validator': specifier: 13.15.10 version: 13.15.10 - '@typescript/native-preview': - specifier: 7.0.0-dev.20260224.1 - version: 7.0.0-dev.20260224.1 '@vitest/coverage-v8': - specifier: 4.1.11 - version: 4.1.11 + specifier: 5.0.1 + version: 5.0.1 '@vvo/tzdb': specifier: 6.198.0 version: 6.198.0 @@ -181,38 +345,38 @@ catalogs: specifier: 0.1.72 version: 0.1.72 archiver: - specifier: 7.0.1 - version: 7.0.1 + specifier: 8.0.0 + version: 8.0.0 argon2: specifier: 0.44.0 version: 0.44.0 astro: - specifier: 7.1.3 - version: 7.1.3 + specifier: 7.3.2 + version: 7.3.2 autoprefixer: - specifier: 10.4.24 - version: 10.4.24 + specifier: 10.6.1 + version: 10.6.1 bowser: specifier: 2.14.1 version: 2.14.1 cassandra-driver: - specifier: 4.8.0 - version: 4.8.0 + specifier: 4.9.0 + version: 4.9.0 clsx: specifier: 2.1.1 version: 2.1.1 colorjs.io: - specifier: 0.6.1 - version: 0.6.1 + specifier: 0.7.1 + version: 0.7.1 combokeys: specifier: 3.0.1 version: 3.0.1 deepfilternet3-noise-filter: - specifier: 1.2.1 - version: 1.2.1 + specifier: 1.3.0 + version: 1.3.0 emoji-regex: - specifier: 10.6.0 - version: 10.6.0 + specifier: 11.0.0 + version: 11.0.0 esbuild: specifier: 0.28.2 version: 0.28.2 @@ -232,59 +396,59 @@ catalogs: specifier: 0.3.10 version: 0.3.10 framer-motion: - specifier: 12.34.3 - version: 12.34.3 + specifier: 13.4.0 + version: 13.4.0 hi-base32: specifier: 0.5.1 version: 0.5.1 hono: - specifier: 4.13.5 - version: 4.13.5 + specifier: 4.13.8 + version: 4.13.8 html-entities: specifier: 2.6.0 version: 2.6.0 idna-uts46-hx: - specifier: 6.1.1 - version: 6.1.1 + specifier: 6.2.1 + version: 6.2.1 ioredis: - specifier: 5.9.3 - version: 5.9.3 + specifier: 6.0.0 + version: 6.0.0 itty-time: specifier: 2.0.2 version: 2.0.2 jose: - specifier: 6.1.3 - version: 6.1.3 + specifier: 6.2.12 + version: 6.2.12 katex: - specifier: 0.16.33 - version: 0.16.33 + specifier: 0.18.7 + version: 0.18.7 knip: - specifier: 5.88.1 - version: 5.88.1 + specifier: 6.36.0 + version: 6.36.0 lexical: - specifier: 0.48.0 - version: 0.48.0 + specifier: 0.50.0 + version: 0.50.0 libphonenumber-js: - specifier: 1.12.41 - version: 1.12.41 + specifier: 1.13.13 + version: 1.13.13 livekit-server-sdk: - specifier: 2.15.0 - version: 2.15.0 + specifier: 2.19.0 + version: 2.19.0 lodash: specifier: 4.18.1 version: 4.18.1 lru-cache: - specifier: 11.2.6 - version: 11.2.6 + specifier: 11.5.2 + version: 11.5.2 luxon: specifier: 3.7.2 version: 3.7.2 match-sorter: - specifier: 8.2.0 - version: 8.2.0 + specifier: 8.3.0 + version: 8.3.0 maxmind: - specifier: 5.0.5 - version: 5.0.5 + specifier: 5.0.7 + version: 5.0.7 mdast-util-mdx-jsx: specifier: 3.2.0 version: 3.2.0 @@ -295,32 +459,29 @@ catalogs: specifier: 4.1.0 version: 4.1.0 mobx: - specifier: 6.15.0 - version: 6.15.0 + specifier: 7.0.3 + version: 7.0.3 mobx-persist-store: specifier: 1.1.8 version: 1.1.8 mobx-react-lite: - specifier: 4.1.1 - version: 4.1.1 + specifier: 5.0.3 + version: 5.0.3 motion: - specifier: 12.34.3 - version: 12.34.3 + specifier: 13.4.0 + version: 13.4.0 msw: - specifier: 2.12.10 - version: 2.12.10 - nats: - specifier: 2.29.3 - version: 2.29.3 + specifier: 2.15.0 + version: 2.15.0 nodemailer: - specifier: 9.0.6 - version: 9.0.6 + specifier: 10.0.10 + version: 10.0.10 onnxruntime-web: - specifier: 1.27.0 - version: 1.27.0 + specifier: 1.30.0 + version: 1.30.0 pg: - specifier: 8.16.3 - version: 8.16.3 + specifier: 8.23.0 + version: 8.23.0 pino: specifier: 10.3.1 version: 10.3.1 @@ -328,29 +489,29 @@ catalogs: specifier: 13.1.3 version: 13.1.3 postcss: - specifier: 8.5.26 - version: 8.5.26 + specifier: 8.5.28 + version: 8.5.28 postcss-discard-comments: - specifier: 7.0.5 - version: 7.0.5 + specifier: 9.0.2 + version: 9.0.2 postcss-loader: specifier: 8.2.1 version: 8.2.1 postcss-preset-env: - specifier: 11.2.0 - version: 11.2.0 + specifier: 11.5.3 + version: 11.5.3 qrcode: specifier: 1.5.4 version: 1.5.4 react: - specifier: 19.2.4 - version: 19.2.4 + specifier: 19.3.0 + version: 19.3.0 react-aria-components: - specifier: 1.15.1 - version: 1.15.1 + specifier: 1.21.1 + version: 1.21.1 react-day-picker: - specifier: 9.13.2 - version: 9.13.2 + specifier: 10.0.1 + version: 10.0.1 react-dnd: specifier: 16.0.1 version: 16.0.1 @@ -364,14 +525,14 @@ catalogs: specifier: 9.0.0 version: 9.0.0 react-dom: - specifier: 19.2.4 - version: 19.2.4 + specifier: 19.3.0 + version: 19.3.0 react-hook-form: - specifier: 7.71.2 - version: 7.71.2 + specifier: 7.88.0 + version: 7.88.0 react-hotkeys-hook: - specifier: 5.2.4 - version: 5.2.4 + specifier: 5.3.3 + version: 5.3.3 remark-gfm: specifier: 4.0.1 version: 4.0.1 @@ -385,11 +546,11 @@ catalogs: specifier: 0.35.4 version: 0.35.4 stripe: - specifier: 22.0.2 - version: 22.0.2 + specifier: 22.6.2 + version: 22.6.2 tailwindcss: - specifier: 4.2.1 - version: 4.2.1 + specifier: 4.3.3 + version: 4.3.3 tempy: specifier: 3.2.0 version: 3.2.0 @@ -406,14 +567,14 @@ catalogs: specifier: 28.0.0 version: 28.0.0 tsx: - specifier: 4.21.0 - version: 4.21.0 + specifier: 4.23.13 + version: 4.23.13 typed-css-modules: specifier: 0.9.1 version: 0.9.1 typescript: - specifier: 6.0.2 - version: 6.0.2 + specifier: 6.0.3 + version: 6.0.3 typescript-eslint: specifier: 8.70.0 version: 8.70.0 @@ -421,11 +582,8 @@ catalogs: specifier: 1.5.0 version: 1.5.0 undici: - specifier: 7.29.0 - version: 7.29.0 - undici-types: - specifier: 7.18.2 - version: 7.18.2 + specifier: 8.10.2 + version: 8.10.2 unique-names-generator: specifier: 4.7.1 version: 4.7.1 @@ -433,54 +591,45 @@ catalogs: specifier: 10.1.0 version: 10.1.0 valibot: - specifier: 1.4.2 - version: 1.4.2 + specifier: 1.5.0 + version: 1.5.0 validator: - specifier: 13.15.26 - version: 13.15.26 + specifier: 13.15.35 + version: 13.15.35 vite: - specifier: 7.3.6 - version: 7.3.6 + specifier: 8.3.0 + version: 8.3.0 vitest: - specifier: 4.1.11 - version: 4.1.11 + specifier: 5.0.1 + version: 5.0.1 yaml: - specifier: 2.9.0 - version: 2.9.0 + specifier: 2.9.1 + version: 2.9.1 zod: - specifier: 4.3.6 - version: 4.3.6 + specifier: 4.6.5 + version: 4.6.5 + ts7: + typescript: + specifier: 7.0.2 + version: 7.0.2 overrides: - '@astrojs/check@0.9.9>chokidar': 5.0.0 - '@floating-ui/dom': 1.7.5 - '@lingui/swc-plugin': 5.11.0 - '@rspack/cli': 1.7.6 - '@rspack/core': 1.7.6 - '@rspack/dev-server@1.1.5>webpack-dev-server': 5.2.6 - cassandra-driver@4.8.0>adm-zip: 0.6.0 - emscripten-wasm-loader@3.0.3>nanoid: 3.3.18 - hunspell-asm@4.0.2>nanoid: 3.3.18 - qs@6.14.2: 6.16.0 - semver: 7.7.4 - sockjs@0.3.24>uuid: 11.1.1 + '@astrojs/check@0.9.10>chokidar': 5.0.0 + '@floating-ui/dom': 1.8.0 + '@lingui/swc-plugin': 6.7.0 + '@rspack/cli': 2.2.5 + '@rspack/core': 2.2.5 + cassandra-driver@4.9.0>adm-zip: 0.6.1 + emscripten-wasm-loader@3.0.3>nanoid: 3.3.19 + hunspell-asm@4.0.2>nanoid: 3.3.19 + semver: 7.8.5 + typed-css-modules@0.9.1>glob: 13.0.6 patchedDependencies: - '@hono/node-server@1.19.17': - hash: 71b3d7e8aa963d17fd5b48a0bb317e3ae0f2415c079f76c745b6a3bd1ace6a14 - path: patches/@hono__node-server@1.19.17.patch - '@phosphor-icons/react@2.1.10': - hash: 9b0b481de857aa7a7525f023baea9da72be4574ff72825e39d959e6979d78eea - path: patches/@phosphor-icons__react@2.1.10.patch - emscripten-wasm-loader@3.0.3: - hash: 65d0567cd2da382764aee3839187feb5284662c4a9f0b755f1e52163c5e36399 - path: patches/emscripten-wasm-loader@3.0.3.patch - eslint-plugin-react-google-translate@1.0.4: - hash: 343c47e52467ec6018beff92d73b6ca2cf231399d98116925687451e8bd527d8 - path: patches/eslint-plugin-react-google-translate@1.0.4.patch - hunspell-asm@4.0.2: - hash: 594ff55f398ab3a575ba1b4d090c4838a26e4251a2f1d65ba0f02d5b098d02ae - path: patches/hunspell-asm@4.0.2.patch + '@phosphor-icons/react@2.1.10': 9b0b481de857aa7a7525f023baea9da72be4574ff72825e39d959e6979d78eea + emscripten-wasm-loader@3.0.3: 65d0567cd2da382764aee3839187feb5284662c4a9f0b755f1e52163c5e36399 + eslint-plugin-react-google-translate@1.0.4: 343c47e52467ec6018beff92d73b6ca2cf231399d98116925687451e8bd527d8 + hunspell-asm@4.0.2: 594ff55f398ab3a575ba1b4d090c4838a26e4251a2f1d65ba0f02d5b098d02ae importers: @@ -488,64 +637,64 @@ importers: devDependencies: '@biomejs/biome': specifier: 'catalog:' - version: 2.4.4 + version: 2.5.14 '@vitest/coverage-v8': specifier: 'catalog:' - version: 4.1.11(vitest@4.1.11) + version: 5.0.1(vitest@5.0.1) eslint: specifier: 'catalog:' - version: 10.10.0(jiti@2.7.0) + version: 10.10.0(jiti@2.7.0)(supports-color@7.2.0) eslint-plugin-react-google-translate: specifier: 'catalog:' - version: 1.0.4(patch_hash=343c47e52467ec6018beff92d73b6ca2cf231399d98116925687451e8bd527d8)(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2) + version: 1.0.4(patch_hash=343c47e52467ec6018beff92d73b6ca2cf231399d98116925687451e8bd527d8)(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) knip: specifier: 'catalog:' - version: 5.88.1(@types/node@25.3.0)(typescript@6.0.2) + version: 6.36.0 typescript: specifier: 'catalog:' - version: 6.0.2 + version: 6.0.3 typescript-eslint: specifier: 'catalog:' - version: 8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2) + version: 8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) vite: specifier: 'catalog:' - version: 7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.9.0) + version: 8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1) fluxer_admin: devDependencies: '@tailwindcss/cli': specifier: 'catalog:' - version: 4.2.1 + version: 4.3.3 tailwindcss: specifier: 'catalog:' - version: 4.2.1 + version: 4.3.3 fluxer_api: dependencies: '@atproto/api': specifier: 'catalog:' - version: 0.19.0 + version: 0.20.44 + '@atproto/jwk-jose': + specifier: 'catalog:' + version: 0.2.4 + '@atproto/oauth-client-node': + specifier: 'catalog:' + version: 0.5.7 '@aws-sdk/client-s3': specifier: 'catalog:' - version: 3.1121.0 + version: 3.1133.0 '@aws-sdk/lib-storage': specifier: 'catalog:' - version: 3.1121.0(@aws-sdk/client-s3@3.1121.0) + version: 3.1133.0(@aws-sdk/client-s3@3.1133.0) '@aws-sdk/s3-request-presigner': specifier: 'catalog:' - version: 3.1121.0 - '@bluesky-social/jwk-jose': - specifier: 'catalog:' - version: 0.1.11 - '@bluesky-social/oauth-client-node': - specifier: 'catalog:' - version: 0.3.9 + version: 3.1133.0 '@bufbuild/protobuf': - specifier: ^2.12.0 - version: 2.12.0 + specifier: ^2.15.0 + version: 2.15.0 '@elastic/elasticsearch': specifier: 'catalog:' - version: 9.3.2 + version: 9.5.1(supports-color@7.2.0) '@fluxer/config': specifier: workspace:* version: link:../packages/config @@ -584,13 +733,19 @@ importers: version: link:../packages/snowflake '@hono/node-server': specifier: 'catalog:' - version: 1.19.17(patch_hash=71b3d7e8aa963d17fd5b48a0bb317e3ae0f2415c079f76c745b6a3bd1ace6a14)(hono@4.13.5) + version: 2.1.1(hono@4.13.8) '@messageformat/core': specifier: 'catalog:' version: 3.4.0 '@messageformat/parser': specifier: 'catalog:' version: 5.1.1 + '@nats-io/jetstream': + specifier: 'catalog:' + version: 3.4.0 + '@nats-io/transport-node': + specifier: 'catalog:' + version: 3.4.0 '@pkgs/cache': specifier: workspace:* version: link:pkgs/cache @@ -644,16 +799,16 @@ importers: version: link:pkgs/worker '@simplewebauthn/server': specifier: 'catalog:' - version: 13.2.3 + version: 14.0.2 '@types/node': specifier: 'catalog:' - version: 25.3.0 + version: 26.6.1 '@vvo/tzdb': specifier: 'catalog:' version: 6.198.0 archiver: specifier: 'catalog:' - version: 7.0.1 + version: 8.0.0 argon2: specifier: 'catalog:' version: 0.44.0 @@ -662,10 +817,10 @@ importers: version: 2.14.1 cassandra-driver: specifier: 'catalog:' - version: 4.8.0 + version: 4.9.0 emoji-regex: specifier: 'catalog:' - version: 10.6.0 + version: 11.0.0 fast-xml-parser: specifier: 'catalog:' version: 5.11.1 @@ -674,52 +829,49 @@ importers: version: 0.5.1 hono: specifier: 'catalog:' - version: 4.13.5 + version: 4.13.8 html-entities: specifier: 'catalog:' version: 2.6.0 idna-uts46-hx: specifier: 'catalog:' - version: 6.1.1 + version: 6.2.1 ioredis: specifier: 'catalog:' - version: 5.9.3 + version: 6.0.0(supports-color@7.2.0) itty-time: specifier: 'catalog:' version: 2.0.2 jose: specifier: 'catalog:' - version: 6.1.3 + version: 6.2.12 livekit-server-sdk: specifier: 'catalog:' - version: 2.15.0 + version: 2.19.0 lodash: specifier: 'catalog:' version: 4.18.1 maxmind: specifier: 'catalog:' - version: 5.0.5 + version: 5.0.7 mime: specifier: 'catalog:' version: 4.1.0 - nats: - specifier: 'catalog:' - version: 2.29.3 nodemailer: specifier: 'catalog:' - version: 9.0.6 + version: 10.0.10 pg: specifier: 'catalog:' - version: 8.16.3 + version: 8.23.0 pino: specifier: 'catalog:' version: 10.3.1 sharp: specifier: 'catalog:' - version: 0.35.4(@types/node@25.3.0) + version: 0.35.4(@types/node@26.6.1) stripe: specifier: 'catalog:' - version: 22.0.2(@types/node@25.3.0) + version: 22.6.2(@types/node@26.6.1) tempy: specifier: 'catalog:' version: 3.2.0 @@ -728,38 +880,38 @@ importers: version: 2.6.1 tsx: specifier: 'catalog:' - version: 4.21.0 + version: 4.23.13 uint8array-extras: specifier: 'catalog:' version: 1.5.0 undici: specifier: 'catalog:' - version: 7.29.0 + version: 8.10.2 validator: specifier: 'catalog:' - version: 13.15.26 + version: 13.15.35 zod: specifier: 'catalog:' - version: 4.3.6 + version: 4.6.5 devDependencies: '@types/archiver': specifier: 'catalog:' - version: 7.0.0 + version: 8.0.0 '@types/lodash': specifier: 'catalog:' - version: 4.17.24 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 4.17.25 esbuild: specifier: 'catalog:' version: 0.28.2 msw: specifier: 'catalog:' - version: 2.12.10(@types/node@25.3.0)(typescript@6.0.2) + version: 2.15.0(@types/node@26.6.1)(typescript@7.0.2) + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) fluxer_api/pkgs/cache: dependencies: @@ -769,13 +921,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) fluxer_api/pkgs/captcha: dependencies: @@ -788,39 +940,39 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 fluxer_api/pkgs/cassandra: dependencies: cassandra-driver: specifier: 'catalog:' - version: 4.8.0 + version: 4.9.0 devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 fluxer_api/pkgs/elasticsearch_search: dependencies: '@elastic/elasticsearch': specifier: 'catalog:' - version: 9.3.2 + version: 9.5.1(supports-color@7.2.0) '@fluxer/schema': specifier: workspace:* version: link:../../../packages/schema devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 fluxer_api/pkgs/email: dependencies: @@ -835,26 +987,23 @@ importers: version: 2.0.2 nodemailer: specifier: 'catalog:' - version: 9.0.6 + version: 10.0.10 devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@types/nodemailer': - specifier: 'catalog:' - version: 7.0.11 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) fluxer_api/pkgs/geoip: dependencies: '@aws-sdk/client-s3': specifier: 'catalog:' - version: 3.1121.0 + version: 3.1133.0 '@fluxer/geo_utils': specifier: workspace:* version: link:../../../packages/geo_utils @@ -872,17 +1021,17 @@ importers: version: link:../postgres maxmind: specifier: 'catalog:' - version: 5.0.5 + version: 5.0.7 zod: specifier: 'catalog:' - version: 4.3.6 + version: 4.6.5 devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 fluxer_api/pkgs/http_client: dependencies: @@ -891,20 +1040,17 @@ importers: version: link:../../../packages/constants undici: specifier: 'catalog:' - version: 7.29.0 + version: 8.10.2 devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 - undici-types: - specifier: 'catalog:' - version: 7.18.2 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) fluxer_api/pkgs/kv_client: dependencies: @@ -916,17 +1062,17 @@ importers: version: link:../../../packages/errors ioredis: specifier: 'catalog:' - version: 5.9.3 + version: 6.0.0(supports-color@7.2.0) devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) fluxer_api/pkgs/locale: dependencies: @@ -936,26 +1082,26 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) fluxer_api/pkgs/media_proxy_utils: dependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 + version: 26.6.1 devDependencies: - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) fluxer_api/pkgs/mime_utils: dependencies: @@ -965,39 +1111,42 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 fluxer_api/pkgs/nats: dependencies: - nats: + '@nats-io/jetstream': specifier: 'catalog:' - version: 2.29.3 + version: 3.4.0 + '@nats-io/transport-node': + specifier: 'catalog:' + version: 3.4.0 devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 fluxer_api/pkgs/postgres: dependencies: pg: specifier: 'catalog:' - version: 8.16.3 + version: 8.23.0 devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 + version: 26.6.1 '@types/pg': specifier: 'catalog:' - version: 8.16.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 8.23.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 fluxer_api/pkgs/rate_limit: dependencies: @@ -1007,10 +1156,10 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 fluxer_api/pkgs/sms: dependencies: @@ -1026,13 +1175,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) fluxer_api/pkgs/virus_scan: dependencies: @@ -1045,10 +1194,10 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 fluxer_api/pkgs/worker: dependencies: @@ -1064,355 +1213,355 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 fluxer_app: dependencies: '@arborium/ada': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/agda': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/arborium': specifier: 'catalog:' - version: 2.16.0 + version: 2.18.2 '@arborium/asciidoc': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/asm': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/awk': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/bash': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/batch': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/c': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/c-sharp': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/caddy': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/capnp': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/cedar': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/cedarschema': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/clojure': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/cmake': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/cobol': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/commonlisp': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/cpp': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/css': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/d': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/dart': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/devicetree': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/diff': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/dockerfile': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/dot': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/elisp': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/elixir': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/elm': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/erlang': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/fish': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/fsharp': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/gleam': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/glsl': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/go': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/graphql': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/groovy': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/haskell': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/hcl': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/hlsl': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/html': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/idris': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/ini': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/java': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/javascript': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/jinja2': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/jq': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/json': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/julia': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/kotlin': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/lean': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/lua': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/markdown': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/matlab': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/meson': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/nginx': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/ninja': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/nix': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/objc': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/ocaml': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/perl': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/php': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/postscript': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/powershell': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/prolog': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/python': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/query': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/r': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/rego': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/rescript': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/ron': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/ruby': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/rust': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/scala': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/scheme': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/scss': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/solidity': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/sparql': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/sql': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/ssh-config': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/starlark': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/styx': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/svelte': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/swift': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/textproto': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/thrift': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/tlaplus': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/toml': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/tsx': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/typescript': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/typst': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/uiua': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/vb': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/verilog': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/vhdl': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/vim': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/vue': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/wit': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/x86asm': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/xml': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/yaml': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/yuri': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/zig': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@arborium/zsh': - specifier: 2.16.0 - version: 2.16.0 + specifier: 2.18.2 + version: 2.18.2 '@base-ui/react': specifier: 'catalog:' - version: 1.5.0(@date-fns/tz@1.4.1)(@types/react@19.2.14)(date-fns@4.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.8.0(@date-fns/tz@1.5.0)(@types/react@19.3.0)(date-fns@4.4.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@bufbuild/protobuf': - specifier: ^2.12.0 - version: 2.12.0 + specifier: ^2.15.0 + version: 2.15.0 '@codemirror/autocomplete': - specifier: ^6.20.2 - version: 6.20.2 + specifier: ^6.20.3 + version: 6.20.3 '@codemirror/commands': - specifier: ^6.10.3 - version: 6.10.3 + specifier: ^6.11.1 + version: 6.11.1 '@codemirror/lang-css': specifier: ^6.3.1 version: 6.3.1 '@codemirror/language': - specifier: ^6.12.3 - version: 6.12.3 + specifier: ^6.12.4 + version: 6.12.4 '@codemirror/state': - specifier: ^6.6.0 - version: 6.6.0 + specifier: ^6.7.5 + version: 6.7.5 '@codemirror/view': - specifier: ^6.43.0 - version: 6.43.0 + specifier: ^6.43.12 + version: 6.43.12 '@floating-ui/react': specifier: 'catalog:' - version: 0.27.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 0.27.20(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@floating-ui/react-dom': specifier: 'catalog:' - version: 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.1.9(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@fluxer/constants': specifier: workspace:* version: link:../packages/constants @@ -1439,34 +1588,34 @@ importers: version: link:../packages/voice_engine_v2 '@hcaptcha/react-hcaptcha': specifier: 'catalog:' - version: 2.0.2 + version: 2.2.0 '@lexical/history': specifier: 'catalog:' - version: 0.48.0(typescript@6.0.2) + version: 0.50.0(typescript@7.0.2) '@lexical/react': specifier: 'catalog:' - version: 0.48.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)(yjs@13.6.32) + version: 0.50.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(typescript@7.0.2)(yjs@13.6.32) '@lexical/utils': specifier: 'catalog:' - version: 0.48.0(typescript@6.0.2) + version: 0.50.0(typescript@7.0.2) '@lezer/highlight': specifier: ^1.2.3 version: 1.2.3 '@lingui/core': specifier: 'catalog:' - version: 5.9.2(@lingui/babel-plugin-lingui-macro@5.9.2(babel-plugin-macros@3.1.0)(typescript@6.0.2))(babel-plugin-macros@3.1.0) + version: 6.7.0(@babel/core@7.29.7(supports-color@7.2.0))(@babel/types@7.29.8) '@lingui/react': specifier: 'catalog:' - version: 5.9.2(@lingui/babel-plugin-lingui-macro@5.9.2(babel-plugin-macros@3.1.0)(typescript@6.0.2))(babel-plugin-macros@3.1.0)(react@19.2.4) + version: 6.7.0(@babel/core@7.29.7(supports-color@7.2.0))(@babel/types@7.29.8)(react@19.3.0) '@livekit/components-react': specifier: 'catalog:' - version: 2.9.20(livekit-client@fluxer_app+pkgs+livekit-client)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tslib@2.8.1) + version: 2.9.24(livekit-client@fluxer_app+pkgs+livekit-client)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(tslib@2.8.1) '@marsidev/react-turnstile': specifier: 'catalog:' - version: 1.4.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.6.1(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@phosphor-icons/react': specifier: 'catalog:' - version: 2.1.10(patch_hash=9b0b481de857aa7a7525f023baea9da72be4574ff72825e39d959e6979d78eea)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 2.1.10(patch_hash=9b0b481de857aa7a7525f023baea9da72be4574ff72825e39d959e6979d78eea)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@pkgs/list_utils': specifier: workspace:* version: link:pkgs/list_utils @@ -1475,22 +1624,22 @@ importers: version: link:pkgs/number_utils '@radix-ui/react-checkbox': specifier: 'catalog:' - version: 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.3.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@radix-ui/react-radio-group': specifier: 'catalog:' - version: 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.4.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@radix-ui/react-switch': specifier: 'catalog:' - version: 1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.3.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@sapphi-red/web-noise-suppressor': specifier: 'catalog:' version: 0.4.0 '@simplewebauthn/browser': specifier: 'catalog:' - version: 13.2.2 + version: 14.0.0 '@tanstack/react-virtual': - specifier: ^3.13.23 - version: 3.13.23(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: ^3.14.13 + version: 3.14.13(react-dom@19.3.0(react@19.3.0))(react@19.3.0) animejs: specifier: 4.5.0 version: 4.5.0 @@ -1505,13 +1654,13 @@ importers: version: 6.0.2 colorjs.io: specifier: 'catalog:' - version: 0.6.1 + version: 0.7.1 combokeys: specifier: 'catalog:' version: 3.0.1 deepfilternet3-noise-filter: specifier: 'catalog:' - version: 1.2.1(livekit-client@fluxer_app+pkgs+livekit-client) + version: 1.3.0(livekit-client@fluxer_app+pkgs+livekit-client) eventemitter3: specifier: 'catalog:' version: 5.0.4 @@ -1522,11 +1671,11 @@ importers: specifier: 'catalog:' version: 0.3.10 fflate: - specifier: ^0.8.2 - version: 0.8.2 + specifier: ^0.8.3 + version: 0.8.3 framer-motion: specifier: 'catalog:' - version: 12.34.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 13.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0) gifenc: specifier: ^1.0.3 version: 1.0.3 @@ -1535,19 +1684,19 @@ importers: version: 2.1.2 idna-uts46-hx: specifier: 'catalog:' - version: 6.1.1 + version: 6.2.1 jpeg-js: specifier: ^0.4.4 version: 0.4.4 katex: specifier: 'catalog:' - version: 0.16.33 + version: 0.18.7 lexical: specifier: 'catalog:' - version: 0.48.0(typescript@6.0.2) + version: 0.50.0(typescript@7.0.2) libphonenumber-js: specifier: 'catalog:' - version: 1.12.41 + version: 1.13.13 livekit-client: specifier: workspace:* version: link:pkgs/livekit-client @@ -1556,64 +1705,64 @@ importers: version: 4.18.1 lru-cache: specifier: 'catalog:' - version: 11.2.6 + version: 11.5.2 luxon: specifier: 'catalog:' version: 3.7.2 match-sorter: specifier: 'catalog:' - version: 8.2.0 + version: 8.3.0 mespeak: specifier: 2.0.2 version: 2.0.2 mobx: specifier: 'catalog:' - version: 6.15.0 + version: 7.0.3 mobx-persist-store: specifier: 'catalog:' - version: 1.1.8(mobx@6.15.0) + version: 1.1.8(mobx@7.0.3) mobx-react-lite: specifier: 'catalog:' - version: 4.1.1(mobx@6.15.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 5.0.3(mobx@7.0.3)(react@19.3.0) motion: specifier: 'catalog:' - version: 12.34.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 13.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0) onnxruntime-web: specifier: 'catalog:' - version: 1.27.0 + version: 1.30.0 qrcode: specifier: 'catalog:' version: 1.5.4 react: specifier: 'catalog:' - version: 19.2.4 + version: 19.3.0 react-aria-components: specifier: 'catalog:' - version: 1.15.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.21.1(react-dom@19.3.0(react@19.3.0))(react@19.3.0) react-day-picker: specifier: 'catalog:' - version: 9.13.2(react@19.2.4) + version: 10.0.1(@types/react@19.3.0)(react@19.3.0) react-dnd: specifier: 'catalog:' - version: 16.0.1(@types/node@25.3.0)(@types/react@19.2.14)(react@19.2.4) + version: 16.0.1(@types/node@26.6.1)(@types/react@19.3.0)(react@19.3.0) react-dnd-accessible-backend: specifier: 'catalog:' - version: 2.1.0(react-dnd@16.0.1(@types/node@25.3.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + version: 2.1.0(react-dnd@16.0.1(@types/node@26.6.1)(@types/react@19.3.0)(react@19.3.0))(react-dom@19.3.0(react@19.3.0))(react@19.3.0) react-dnd-html5-backend: specifier: 'catalog:' version: 16.0.1 react-dnd-multi-backend: specifier: 'catalog:' - version: 9.0.0(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@25.3.0)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 9.0.0(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@26.6.1)(@types/react@19.3.0)(react@19.3.0))(react-dom@19.3.0(react@19.3.0))(react@19.3.0) react-dom: specifier: 'catalog:' - version: 19.2.4(react@19.2.4) + version: 19.3.0(react@19.3.0) react-hook-form: specifier: 'catalog:' - version: 7.71.2(react@19.2.4) + version: 7.88.0(react@19.3.0) react-hotkeys-hook: specifier: 'catalog:' - version: 5.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 5.3.3(react-dom@19.3.0(react@19.3.0))(react@19.3.0) rxjs: specifier: 'catalog:' version: 7.8.2 @@ -1637,89 +1786,95 @@ importers: version: 10.1.0 valibot: specifier: 'catalog:' - version: 1.4.2(typescript@6.0.2) + version: 1.5.0(typescript@7.0.2) xstate: - specifier: 5.31.1 - version: 5.31.1 + specifier: 5.33.2 + version: 5.33.2 devDependencies: '@babel/parser': - specifier: 7.29.0 - version: 7.29.0 + specifier: 8.0.5 + version: 8.0.5 '@lingui/cli': specifier: 'catalog:' - version: 5.9.2(babel-plugin-macros@3.1.0)(typescript@6.0.2) + version: 6.7.0(esbuild@0.28.2)(rolldown@1.2.9)(supports-color@7.2.0) + '@lingui/format-po': + specifier: 'catalog:' + version: 6.7.0 '@lingui/swc-plugin': - specifier: 5.11.0 - version: 5.11.0(@lingui/core@5.9.2(@lingui/babel-plugin-lingui-macro@5.9.2(babel-plugin-macros@3.1.0)(typescript@6.0.2))(babel-plugin-macros@3.1.0)) + specifier: 6.7.0 + version: 6.7.0(@lingui/core@6.7.0(@babel/core@7.29.7(supports-color@7.2.0))(@babel/types@7.29.8)) '@rspack/cli': - specifier: 1.7.6 - version: 1.7.6(@rspack/core@1.7.6(@swc/helpers@0.5.19))(@types/express@4.17.25)(tslib@2.8.1) + specifier: 2.2.5 + version: 2.2.5(@rspack/core@2.2.5(@swc/helpers@0.5.23))(@rspack/dev-server@2.2.1(@rspack/core@2.2.5(@swc/helpers@0.5.23))) '@rspack/core': - specifier: 1.7.6 - version: 1.7.6(@swc/helpers@0.5.19) + specifier: 2.2.5 + version: 2.2.5(@swc/helpers@0.5.23) + '@rspack/dev-server': + specifier: 'catalog:' + version: 2.2.1(@rspack/core@2.2.5(@swc/helpers@0.5.23)) '@svgr/webpack': specifier: 'catalog:' - version: 8.1.0(typescript@6.0.2) + version: 8.1.0(supports-color@7.2.0)(typescript@7.0.2) '@types/combokeys': specifier: 'catalog:' version: 2.4.9 '@types/lodash': specifier: 'catalog:' - version: 4.17.24 + version: 4.17.25 '@types/luxon': specifier: 'catalog:' - version: 3.7.1 + version: 3.7.5 '@types/node': specifier: 'catalog:' - version: 25.3.0 + version: 26.6.1 '@types/qrcode': specifier: 'catalog:' version: 1.5.6 '@types/react': specifier: 'catalog:' - version: 19.2.14 + version: 19.3.0 '@types/react-dom': specifier: 'catalog:' - version: 19.2.3(@types/react@19.2.14) - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 19.3.0(@types/react@19.3.0) '@webgpu/types': specifier: 'catalog:' version: 0.1.72 autoprefixer: specifier: 'catalog:' - version: 10.4.24(postcss@8.5.26) + version: 10.6.1(postcss@8.5.28) esbuild: specifier: 'catalog:' version: 0.28.2 happy-dom: - specifier: 20.12.0 - version: 20.12.0 + specifier: 20.14.5 + version: 20.14.5 postcss: specifier: 'catalog:' - version: 8.5.26 + version: 8.5.28 postcss-discard-comments: specifier: 'catalog:' - version: 7.0.5(postcss@8.5.26) + version: 9.0.2(postcss@8.5.28) postcss-loader: specifier: 'catalog:' - version: 8.2.1(@rspack/core@1.7.6(@swc/helpers@0.5.19))(postcss@8.5.26)(typescript@6.0.2) + version: 8.2.1(@rspack/core@2.2.5(@swc/helpers@0.5.23))(postcss@8.5.28)(typescript@7.0.2) postcss-preset-env: specifier: 'catalog:' - version: 11.2.0(postcss@8.5.26) + version: 11.5.3(postcss@8.5.28) sharp: specifier: 'catalog:' - version: 0.35.4(@types/node@25.3.0) + version: 0.35.4(@types/node@26.6.1) tsx: specifier: 'catalog:' - version: 4.21.0 + version: 4.23.13 typed-css-modules: specifier: 'catalog:' version: 0.9.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) fluxer_app/pkgs/list_utils: dependencies: @@ -1733,39 +1888,39 @@ importers: specifier: 1.1.1 version: 1.1.1 '@livekit/protocol': - specifier: 1.42.2 - version: 1.42.2 + specifier: 1.51.0 + version: 1.51.0 events: specifier: ^3.3.0 version: 3.3.0 jose: specifier: ^6.1.0 - version: 6.1.3 + version: 6.2.12 loglevel: specifier: ^1.9.2 version: 1.9.2 + machina: + specifier: ^7.0.1 + version: 7.0.1 sdp-transform: specifier: ^2.15.0 version: 2.15.0 - ts-debounce: - specifier: ^4.0.0 - version: 4.0.0 typed-emitter: specifier: ^2.1.0 version: 2.1.0 webrtc-adapter: - specifier: ^9.0.1 - version: 9.0.4 + specifier: ^9.0.6 + version: 9.0.6 devDependencies: '@types/events': specifier: ^3.0.0 version: 3.0.3 '@types/sdp-transform': - specifier: ^2.4.9 + specifier: ^2.15.0 version: 2.15.0 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@6.0.3))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) fluxer_app/pkgs/number_utils: dependencies: @@ -1779,8 +1934,8 @@ importers: specifier: workspace:* version: link:../packages/voice_engine_v2 '@simplewebauthn/browser': - specifier: 13.2.2 - version: 13.2.2 + specifier: 14.0.0 + version: 14.0.0 franc-min: specifier: 6.2.0 version: 6.2.0 @@ -1788,33 +1943,30 @@ importers: specifier: 4.0.2 version: 4.0.2(patch_hash=594ff55f398ab3a575ba1b4d090c4838a26e4251a2f1d65ba0f02d5b098d02ae) update-electron-app: - specifier: 3.1.2 - version: 3.1.2 + specifier: 3.3.0 + version: 3.3.0 velopack: - specifier: 0.0.1298 - version: 0.0.1298 + specifier: 1.2.0 + version: 1.2.0 devDependencies: '@types/node': - specifier: 24.10.9 - version: 24.10.9 - '@typescript/native-preview': - specifier: 7.0.0-dev.20260130.1 - version: 7.0.0-dev.20260130.1 + specifier: 24.13.5 + version: 24.13.5 electron: - specifier: 44.1.1 - version: 44.1.1 + specifier: 44.4.1 + version: 44.4.1(supports-color@7.2.0) electron-builder: - specifier: 27.0.0-alpha.7 - version: 27.0.0-alpha.7(electron-builder-squirrel-windows@27.0.0-alpha.7) + specifier: 27.0.0-alpha.8 + version: 27.0.0-alpha.8(electron-builder-squirrel-windows@27.0.0-alpha.8)(supports-color@7.2.0) electron-builder-squirrel-windows: - specifier: 27.0.0-alpha.7 - version: 27.0.0-alpha.7(dmg-builder@27.0.0-alpha.7) + specifier: 27.0.0-alpha.8 + version: 27.0.0-alpha.8(dmg-builder@27.0.0-alpha.8)(supports-color@7.2.0) esbuild: - specifier: 0.27.2 - version: 0.27.2 + specifier: 'catalog:' + version: 0.28.2 typescript: - specifier: 5.9.3 - version: 5.9.3 + specifier: catalog:ts7 + version: 7.0.2 optionalDependencies: '@fluxer/hardware-encoder': specifier: file:./native/hardware-encoder @@ -1883,48 +2035,48 @@ importers: specifier: file:./native/windows-input-hook version: file:fluxer_desktop/native/windows-input-hook electron-log: - specifier: 5.4.3 - version: 5.4.3 + specifier: 5.4.4 + version: 5.4.4 fluxer_docs: dependencies: '@astrojs/markdown-remark': specifier: 'catalog:' - version: 7.2.1 + version: 7.3.1(supports-color@7.2.0) '@astrojs/mdx': specifier: 'catalog:' - version: 7.0.3(@astrojs/markdown-satteri@0.3.8)(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.3.0)(ioredis@5.9.3)(jiti@2.7.0)(rollup@4.63.1)(tsx@4.21.0)(yaml@2.9.0)) + version: 8.0.1(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@astrojs/markdown-satteri@0.4.1)(astro@7.3.2(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.1)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) '@astrojs/node': specifier: 'catalog:' - version: 11.0.2(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.3.0)(ioredis@5.9.3)(jiti@2.7.0)(rollup@4.63.1)(tsx@4.21.0)(yaml@2.9.0)) + version: 11.1.5(astro@7.3.2(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.1)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1))(supports-color@7.2.0) '@astrojs/starlight': specifier: 'catalog:' - version: 0.41.4(@astrojs/markdown-remark@7.2.1)(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.3.0)(ioredis@5.9.3)(jiti@2.7.0)(rollup@4.63.1)(tsx@4.21.0)(yaml@2.9.0))(typescript@6.0.2) + version: 0.42.1(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(astro@7.3.2(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.1)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1))(supports-color@7.2.0)(typescript@6.0.3) '@fluxer/config': specifier: workspace:* version: link:../packages/config astro: specifier: 'catalog:' - version: 7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.3.0)(ioredis@5.9.3)(jiti@2.7.0)(rollup@4.63.1)(tsx@4.21.0)(yaml@2.9.0) + version: 7.3.2(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.1)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1) send: specifier: 'catalog:' - version: 1.2.1 + version: 1.2.1(supports-color@7.2.0) sharp: specifier: 'catalog:' - version: 0.35.4(@types/node@25.3.0) + version: 0.35.4(@types/node@26.6.1) tsx: specifier: 'catalog:' - version: 4.21.0 + version: 4.23.13 devDependencies: '@astrojs/check': specifier: 'catalog:' - version: 0.9.9(prettier@3.8.3)(typescript@6.0.2) + version: 0.9.10(prettier@3.9.7)(typescript@6.0.3) '@fluxer/openapi': specifier: workspace:* version: link:../packages/openapi '@mdx-js/mdx': specifier: 'catalog:' - version: 3.1.1 + version: 3.1.1(supports-color@7.2.0) '@types/hast': specifier: 'catalog:' version: 3.0.5 @@ -1933,49 +2085,49 @@ importers: version: 4.0.4 '@types/node': specifier: 'catalog:' - version: 25.3.0 + version: 26.6.1 '@types/send': specifier: 'catalog:' version: 1.2.1 mdast-util-mdx-jsx: specifier: 'catalog:' - version: 3.2.0 + version: 3.2.0(supports-color@7.2.0) mdast-util-to-hast: specifier: 'catalog:' version: 13.2.1 remark-gfm: specifier: 'catalog:' - version: 4.0.1 + version: 4.0.1(supports-color@7.2.0) typescript: - specifier: 6.0.2 - version: 6.0.2 + specifier: 'catalog:' + version: 6.0.3 packages/config: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 '@vitest/coverage-v8': specifier: 'catalog:' - version: 4.1.11(vitest@4.1.11) + version: 5.0.1(vitest@5.0.1) + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) yaml: specifier: 'catalog:' - version: 2.9.0 + version: 2.9.1 packages/constants: devDependencies: - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) packages/date_utils: dependencies: @@ -1988,10 +2140,10 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 packages/errors: dependencies: @@ -2015,20 +2167,20 @@ importers: version: link:../schema hono: specifier: 'catalog:' - version: 4.13.5 + version: 4.13.8 devDependencies: '@messageformat/parser': specifier: 'catalog:' version: 5.1.1 '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) packages/geo_utils: dependencies: @@ -2038,10 +2190,10 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 packages/hono: dependencies: @@ -2056,26 +2208,26 @@ importers: version: link:../ip_utils '@hono/node-server': specifier: 'catalog:' - version: 1.19.17(patch_hash=71b3d7e8aa963d17fd5b48a0bb317e3ae0f2415c079f76c745b6a3bd1ace6a14)(hono@4.13.5) + version: 2.1.1(hono@4.13.8) hono: specifier: 'catalog:' - version: 4.13.5 + version: 4.13.8 devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) packages/hono_types: devDependencies: - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 packages/i18n: dependencies: @@ -2087,20 +2239,20 @@ importers: version: 5.1.1 yaml: specifier: 'catalog:' - version: 2.9.0 + version: 2.9.1 devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 tsx: specifier: 'catalog:' - version: 4.21.0 + version: 4.23.13 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) packages/instance_bootstrap: dependencies: @@ -2116,25 +2268,25 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 packages/ip_utils: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 '@vitest/coverage-v8': specifier: 'catalog:' - version: 4.1.11(vitest@4.1.11) + version: 5.0.1(vitest@5.0.1) + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) packages/limits: dependencies: @@ -2142,12 +2294,12 @@ importers: specifier: workspace:* version: link:../constants devDependencies: - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) packages/logger: dependencies: @@ -2160,13 +2312,13 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) packages/openapi: dependencies: @@ -2178,72 +2330,72 @@ importers: version: link:../schema '@redocly/openapi-core': specifier: 'catalog:' - version: 2.52.0 + version: 2.53.2 ts-morph: specifier: 'catalog:' version: 28.0.0 zod: specifier: 'catalog:' - version: 4.3.6 + version: 4.6.5 devDependencies: '@biomejs/biome': specifier: 'catalog:' - version: 2.4.4 + version: 2.5.14 '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 tsx: specifier: 'catalog:' - version: 4.21.0 + version: 4.23.13 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) packages/schema: dependencies: '@bufbuild/protobuf': - specifier: ^2.12.0 - version: 2.12.0 + specifier: ^2.15.0 + version: 2.15.0 '@fluxer/constants': specifier: workspace:* version: link:../constants '@simplewebauthn/server': specifier: 'catalog:' - version: 13.2.3 + version: 14.0.2 emoji-regex: specifier: 'catalog:' - version: 10.6.0 + version: 11.0.0 uint8array-extras: specifier: 'catalog:' version: 1.5.0 validator: specifier: 'catalog:' - version: 13.15.26 + version: 13.15.35 zod: specifier: 'catalog:' - version: 4.3.6 + version: 4.6.5 devDependencies: '@bufbuild/buf': - specifier: ^1.69.0 - version: 1.69.0 + specifier: ^1.73.0 + version: 1.73.0 '@bufbuild/protoc-gen-es': - specifier: ^2.12.0 - version: 2.12.0(@bufbuild/protobuf@2.12.0) + specifier: ^2.15.0 + version: 2.15.0(@bufbuild/protobuf@2.15.0)(supports-color@7.2.0) '@types/node': specifier: 'catalog:' - version: 25.3.0 + version: 26.6.1 '@types/validator': specifier: 'catalog:' version: 13.15.10 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) packages/snowflake: dependencies: @@ -2256,539 +2408,525 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) packages/voice_engine_v2: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.3.0 - '@typescript/native-preview': - specifier: 'catalog:' - version: 7.0.0-dev.20260224.1 + version: 26.6.1 + typescript: + specifier: catalog:ts7 + version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + version: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) packages: - '@acemir/cssom@0.9.31': - resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} - - '@arborium/ada@2.16.0': - resolution: {integrity: sha512-le5b4DPOzxF4dTV4XDrdOet4aQ8WvMTdbHrOgNt3G+h1vDpi86Tgw/AeRfx8OX1XSfof6gGq0HEUtX4SfcbhbA==} + '@arborium/ada@2.18.2': + resolution: {integrity: sha512-PbKs2uTH7aYaTeqVxCFzIYxKg1+UEYAcQZB53ulnzA+BLANfVKsnZJJWgcTghctCdprDQmw6Ocw5PZE7598nxw==} engines: {node: '>=18'} - '@arborium/agda@2.16.0': - resolution: {integrity: sha512-ubyA332wz2keOSRBZ1bezZhLhMwIjC/QbPQs8m6PQEFblDk95Uq8X4qhQ/dBJ7Q22fG04sjgB34pHw3PQph7wQ==} + '@arborium/agda@2.18.2': + resolution: {integrity: sha512-nY4ttgKWzMykOAq8cN188RrBxou7CU24HQ0W9pkG+ZtoNOj4uVs7Ux4lY3xp72O874OyqrYHMs9zV8jMnBL8Yw==} engines: {node: '>=18'} - '@arborium/arborium@2.16.0': - resolution: {integrity: sha512-9rz2J9Hx+nMq1qon65SbmE+XZvwr/oDqYPinj+BnYOzef7lGwzn1GtYhuB1Cz8jTZ84wIaBt+B8nTQEGYniqNg==} + '@arborium/arborium@2.18.2': + resolution: {integrity: sha512-Kgbbb28jfcucpTLaWOYrz4miVNYgE1HL7w3Bpvc/ylk05wduzXwMoPDwfUZqX+PHNhcWPL9KYkK69MIr2a1CvQ==} - '@arborium/asciidoc@2.16.0': - resolution: {integrity: sha512-NylxCDvfpw7Pjm7h4r0jAcX9EqerDZ1dREUYK62/U4yB1B8IWu/ygkCm+Dob0KWTojUrIZhaFm3ORWjkqT1chg==} + '@arborium/asciidoc@2.18.2': + resolution: {integrity: sha512-mJp/ojAJKp69quFlNgh/8HCfeMtK9SiJGD1O9wq3o8U49eM0hV5CHY0C/o4AjZsGux567j8Yi1p5RxvRWwkfuw==} engines: {node: '>=18'} - '@arborium/asm@2.16.0': - resolution: {integrity: sha512-tJZi/NrgO0MfUzKnEMsNhcTGCShcKZ+tgdNU0I4fqznLIv85UTYdlArBfMh2pJj5FOljZrlwQqbHBruscC4XIw==} + '@arborium/asm@2.18.2': + resolution: {integrity: sha512-JeP4rBEhG6G8tDjs+Nxdtu6yw3/NGq5rlzoBN6hZkr7AlXITZVwTsdTqTfwslVKjddY7uTMpGQiqeYEpvenpJw==} engines: {node: '>=18'} - '@arborium/awk@2.16.0': - resolution: {integrity: sha512-Bvu6o3y/ouOFECQoQ3QTg9Z0yBCc1kdeXfE7vXr+uhh9LOBDxKmGXwv7M8qtc9s2ojwzZ7ZTKVyCvEvSD1u7GQ==} + '@arborium/awk@2.18.2': + resolution: {integrity: sha512-YKJnlZ9Aeab2PaES8lYWx3UI6jukAcx/EWr5jnt5tkgI3N30Rqwbm4yhvtqvL4xx5RnEb8db8/kNcRUwhzFSBg==} engines: {node: '>=18'} - '@arborium/bash@2.16.0': - resolution: {integrity: sha512-wnL2K86Dk8eBomquOAbNcpsbo28CQMzxdZUqq1BVbKiI2L05Q4wWoRzY3eaoq/ioWMXyTbAtGt9b0Jd+JgydQA==} + '@arborium/bash@2.18.2': + resolution: {integrity: sha512-bwJVQTlRNZzdGg69ot6USqvX7pJO304KGuXERzhQwNRAS8Nf21VXsHKVoShXWz6gpAX3+hndoAA/YuwITPvMCQ==} engines: {node: '>=18'} - '@arborium/batch@2.16.0': - resolution: {integrity: sha512-/Z1NHR7dGeowROnIEWpxJXLBImIMl54oq9FR2514HNn62r42ixU09SgVoXSreR6vwikK63mr/tFZVPstjWRMAA==} + '@arborium/batch@2.18.2': + resolution: {integrity: sha512-JYr28+epR+NlMbzjI07OZmNdqykz2QQcyOxY9alU2DJeErmYezw3ue/51XGNhpPT7Vyp81PglHpdH0Q/5ye2RQ==} engines: {node: '>=18'} - '@arborium/c-sharp@2.16.0': - resolution: {integrity: sha512-8ezvpKivXaq24Vj3Z0iBdj8Fh3Rtu/Pk//VxJ6IXVCKQe4TK/BpGraGH95cVufJisZO2C6qImF79AY5w/FTohQ==} + '@arborium/c-sharp@2.18.2': + resolution: {integrity: sha512-Bwntj9uQh/aJzT2m+UbvkSphTFGzRMIXshoKomgXs/jkD6S2U+0Wrn6aBlnfCBpkcnEIIwQib396a7vvC4BXhg==} engines: {node: '>=18'} - '@arborium/c@2.16.0': - resolution: {integrity: sha512-eHS+j5n+Zp3v/Cv5G0wx+A0VnIz7SXgn8Ih7DjRADXa0mCvbdtDEl7xaRnDC+Cz/UT4Rs8F4OStahiv/HDHT6w==} + '@arborium/c@2.18.2': + resolution: {integrity: sha512-JZlfWeNRhWCuofnu1qIRsTDp/Ywv65rvq5viVPpvqbFPTr8sImPXKGp36DRBV56MvUZVwAGBFc4yU6Misz57MQ==} engines: {node: '>=18'} - '@arborium/caddy@2.16.0': - resolution: {integrity: sha512-Uez62WqL6BGlkGNaqMrrdMONIktPL3AOow7NMibN8dZzoFR5DLbt8LQDoZ+h/UkRzYmTi6XDXkBeml9+lTjd/Q==} + '@arborium/caddy@2.18.2': + resolution: {integrity: sha512-SFXZ4NfRuZ0xac+VrAf3bMmP5GYEBqXJC+cSXumugUy9OkjfMBXsklf+FsLbL75CbXTPUG5DGJUCaMoWG8jvlQ==} engines: {node: '>=18'} - '@arborium/capnp@2.16.0': - resolution: {integrity: sha512-Eg9ai5V14rgYSJdkSvQoROQ3TrYTXcBm+fKha0N+q8MAu4azfoXsQlrIkHsMTJNvcIKpO79sF0kSrhOgFyieVw==} + '@arborium/capnp@2.18.2': + resolution: {integrity: sha512-uZXv7+5V1Jlf9VmnBgkykn1vSf0FoJ7Dy5/kmDuq7xfvKMIghEA1PePCd/cxwcfIpU1BDHs4titK8z9LopPq4A==} engines: {node: '>=18'} - '@arborium/cedar@2.16.0': - resolution: {integrity: sha512-sApRWDH7bULrvr+NJqXyNu/ak96lxviOfRNN0x6uxkKBrBnyRbJZ91K39pMhyZ3Oh2yohCzdsoLJMfQQIi88wQ==} + '@arborium/cedar@2.18.2': + resolution: {integrity: sha512-3sLoDyqh1QihwVric07G/fm9AMpFBAP/8CFZkyQZv/zIz4DVWiz2PXhRWKBOWeQKzBQ3pSb2GrBgopHAnz6C1g==} engines: {node: '>=18'} - '@arborium/cedarschema@2.16.0': - resolution: {integrity: sha512-l39RikjaG5oxkyDioaOhnQws25RXXJLxdTgJxhzukFumF0LCYmWeafPv7FBeKIlqOxD2Yhb0f2Ln1mnZGBwp0w==} + '@arborium/cedarschema@2.18.2': + resolution: {integrity: sha512-vexTmrsCwv+6Jpli4p0yk8irsFe65+0MIFNko2CxZoxQkrRTEACVZaLR4f2t0YKYACcXpOvBZvydX6oku7UcYA==} engines: {node: '>=18'} - '@arborium/clojure@2.16.0': - resolution: {integrity: sha512-vcmnT1OCoVieQAlnshv7mhNadsVhNoaoeVK332PH5NAjDRpUOikq9x9EiJY3/8dHX1BXqhX82oA3dH59+fbqcw==} + '@arborium/clojure@2.18.2': + resolution: {integrity: sha512-4sHYDRDZO9gARZVfrMs/49cIEbWUkgsXI/N0OdEG9PbDYMyfXe74qs+a4S4e2CbUfFNeXokijCvUSOBjulaXNQ==} engines: {node: '>=18'} - '@arborium/cmake@2.16.0': - resolution: {integrity: sha512-vJfKmgfB8YGfRBOi/odKIiwnGFCIovASs112dBmr/Spi/UOnrWp5gVBnFt7w2AVFMPsYpmITq903R8uhYA9qNA==} + '@arborium/cmake@2.18.2': + resolution: {integrity: sha512-4m02JY8k1bfp9g145jC6NMmYisXcKzviATmM0fTr3TjFy+XfWeDZwxzeR3W06aBbJbLARrzbSxtC8h7ZCfbGNA==} engines: {node: '>=18'} - '@arborium/cobol@2.16.0': - resolution: {integrity: sha512-X+nL6Kepc0Ssgp60BqH/kO9Vz9hX0uGzz26LSh5RjPiCZY7e2OXOx7gBfssRfJTK3KvpGwDO66t4Rg84bLd2yg==} + '@arborium/cobol@2.18.2': + resolution: {integrity: sha512-jCq2gndkfmsDxcFdlXGANIDmWLb8W2+fgEV+AlZ4EFpjnF5kGdfzrH7QdJPdYJcBAJoH84hIx1/f7FBb7q9Z4A==} engines: {node: '>=18'} - '@arborium/commonlisp@2.16.0': - resolution: {integrity: sha512-zeC4mm0rdXfM+j3Gm1RK12qlXp8VHBSmqbSdD5mqmO4t2B9yax6YFpK9Pc0ZTWLysH0+KuQm9DJkV2uGUobs9g==} + '@arborium/commonlisp@2.18.2': + resolution: {integrity: sha512-UYwggSQd71pFG0nIU41MmY3xk7cv8hXWeVs4Oq2qhUp0JfkQwnhSvnO4ovzZbBOf5kiZz8uwbw9bwxxCNH1oKQ==} engines: {node: '>=18'} - '@arborium/cpp@2.16.0': - resolution: {integrity: sha512-lxFX7uBsklX4vPCF3DEE+jFjA2R3NOHINHu9bAo3y1O8VsafGUXct1/AkAs0LVn21YOaviljeLiDXcLDmVDrjQ==} + '@arborium/cpp@2.18.2': + resolution: {integrity: sha512-tjw5B/yWFJ02OqFCyph5Y3XF2Is7tMs8LVje/FySF5uagWoLuakWBlG0EYtctpbAO8FQHYDJ6d7eOEZpJw/wEQ==} engines: {node: '>=18'} - '@arborium/css@2.16.0': - resolution: {integrity: sha512-ehryFzmqPx9NpAy6WEZu2D05kdZ1OWn4AUbTzteGsV5hmLYAIG5RrMD4YC8qbIrmtM1ddI13Yk34XACBNyAwrw==} + '@arborium/css@2.18.2': + resolution: {integrity: sha512-oBLGef6oPWLD7sDZdo+1HmsQ9pjvDjQ5UKi20sdy5Yl7/vzD37v9I/0u/AjSc1Ss0pRJIkIttMIAe5lW8KDRvQ==} engines: {node: '>=18'} - '@arborium/d@2.16.0': - resolution: {integrity: sha512-NZUuEClw8JTP7jKQIecfnguDv2KnzDdMYQbTlP4vz4g0u1svjzruN0PDyyKI08ydiHHcnbvnNOGDjaAThMCUeg==} + '@arborium/d@2.18.2': + resolution: {integrity: sha512-V1S69H9Y/isDtbMUJtvEjWF7KNYosAucCz9bv5Jt1hl6+GxwYLhPanmZaG8LQM6v49/27UsljjsRHokyP/BGqg==} engines: {node: '>=18'} - '@arborium/dart@2.16.0': - resolution: {integrity: sha512-BugusjO6LuObRDsOrF25gweXUQHwZF8FPYw4E5HWqoIXgEoVJ/izLQmbHVAXid2JOcj3xGsSLuUaH9SiuV24GA==} + '@arborium/dart@2.18.2': + resolution: {integrity: sha512-NLE2ROB+3EIjPjif3hOu+oiHPEG5VpANP6QQHoVvDLl2V+goMmuD2HZlk/e0iznbFSYlK1HVLYyTg3INKe7VUw==} engines: {node: '>=18'} - '@arborium/devicetree@2.16.0': - resolution: {integrity: sha512-IVG4xDcksaSmOJPPe503Z6lKIzoNQufYCkW6FtXUSaB3J1YucA0xqiWlCmPNLaNjNoRI+H7zVUsEY/lELt7uCQ==} + '@arborium/devicetree@2.18.2': + resolution: {integrity: sha512-hCngHcI4fGY/JDR46t8RQnXQPWusQ3xZCqzFdoGi+9gsjynSVWgXTCxvf2f0k0c2b0JR5Dt06ejzaCqfBHrexA==} engines: {node: '>=18'} - '@arborium/diff@2.16.0': - resolution: {integrity: sha512-umooTJYJCD/yzRlFwztPkXyPQMsRlfUL7nEgZLkIEqoTH7b5hYrrWTUBARemWW+uGbOKc8VWXB3gFRbU5nsxtQ==} + '@arborium/diff@2.18.2': + resolution: {integrity: sha512-VoXrUVJsgq75g3O9iCawPFtK/PYoSKQdWYzKo73EZGK3aQE3M0Ii7EX0c0mJTK5EjiLpuWC7EIjLvl5nAiATNA==} engines: {node: '>=18'} - '@arborium/dockerfile@2.16.0': - resolution: {integrity: sha512-smzaJbFw27Y8rQFsFw4As9eSixen700Uk5AF4zdGe5xmYbzcMdgC2MruJIZQEdg7peEAmNQYTC0k36jQ/TsXcA==} + '@arborium/dockerfile@2.18.2': + resolution: {integrity: sha512-pNWghx+X+17DmBHsE5nij2qEeCGEqWR5kEbBBi/IU3xJ2rz0lm9JvDqSJeMWOAlg2dl9XsEz3rhqKIELkjf11w==} engines: {node: '>=18'} - '@arborium/dot@2.16.0': - resolution: {integrity: sha512-u13M3tn0dhEmzevN2oKKWZFS/DqaWRIdtugHlqWZs7xIcSBDpK3QU0rv+OH6LGT3kmc8GOIUwvOv1uoTw+/3ow==} + '@arborium/dot@2.18.2': + resolution: {integrity: sha512-83EvyR9DSbvgPoXEAQe9O93YvLM9bgS99ll8I76Rk5g4pbsHFCQO68tll4RSAOj577ZY3zu7vTbrUvoApGVUYA==} engines: {node: '>=18'} - '@arborium/elisp@2.16.0': - resolution: {integrity: sha512-gMIDLAY8QPv3ofWkmcddFs+AmC3+SupAsB2ALbkh2myFu4u18mLZP7iTc3ldQJMVzd+uWED61MjDnZH3CIoqHA==} + '@arborium/elisp@2.18.2': + resolution: {integrity: sha512-oBl8gX++CGCyLJnvk7aCxjxSsf4E4t3QZJPg0A9z38/kQw53n2vSNwLh4zn29YcA9sYpNWs19blkjeoWQuL9yg==} engines: {node: '>=18'} - '@arborium/elixir@2.16.0': - resolution: {integrity: sha512-wSPbT16PPTLRcPvmoOCPJk5L9JrtUMGxLzRqh6IBXYoNm4F+JlPAp0XmriJ9Wnk6pMv56xW966ZVzQWC0IuL2Q==} + '@arborium/elixir@2.18.2': + resolution: {integrity: sha512-7ubtGZpkVGd5Q2Tiwn9D2r5WXR1FzfwWjFYqy5pDXxJAkJW4sXYBShUNQRL5SNX+RDQhA2SvzJ4y2lEfvvKHKA==} engines: {node: '>=18'} - '@arborium/elm@2.16.0': - resolution: {integrity: sha512-k0PcB+kXQb/Rcxp+elwcz3puWpJ7DZgDdvE0fAe/aMJhjBFUc2p/xZbgcUAZBIJOtg32He253F0i0hY2mgnLaA==} + '@arborium/elm@2.18.2': + resolution: {integrity: sha512-vmBtxTVnBlu35r3L2tQ8pfm70okhx+vUFEGe3VBO0AKw8HTW1CrHc5ABWD0cmLE9atvxw/n5D8Ir7Gd9fm48iQ==} engines: {node: '>=18'} - '@arborium/erlang@2.16.0': - resolution: {integrity: sha512-TgNeOZnjXwTJDjX3Uc26BnUTpEBfHD+bKBkd6mDGnxU7s8kUWtr4Wn/VMiZ5ikq9F0vz9P9Ow9KK0/C4HSOacA==} + '@arborium/erlang@2.18.2': + resolution: {integrity: sha512-7fwk22I4Bv4uo7M3uiWDRoyLXiMZm3gHxxGCHk4VFSnwFXMjeBkBqF9hnTbM6KM8+vZv/r1MgI+Aw2q3Jw643g==} engines: {node: '>=18'} - '@arborium/fish@2.16.0': - resolution: {integrity: sha512-b2zOcL0JDTrMOUMTAAw9HXL8CCF+lj0cCLtXKETQ2tCNJzco+p82ET6EMWYuqkevpVIPw2VZywQMMYVywLtWlw==} + '@arborium/fish@2.18.2': + resolution: {integrity: sha512-6VnXmyJBqxoSkEM6us24FaY2cCUkZpqRJ3eJtLwjwKsf+gSmBti4qcltiOSmB3JLHV0v1gjIThSQzZAW5HhQzw==} engines: {node: '>=18'} - '@arborium/fsharp@2.16.0': - resolution: {integrity: sha512-WO0Wypc/AHjUSD0nv4LkWfS1Ll/Ye1CAPOwWXMk+5EesAyKhf1QTbOIUgDYrfWQ/3xLXq8iMIcaNwCgrHZErRw==} + '@arborium/fsharp@2.18.2': + resolution: {integrity: sha512-E64yJ+ay/vpFabE0GRZAgPgw0zSwJBh7WlECHwx+fjNZc+LRbbI+y5ttYRZH5pXF2guB9YO2ciJ9vvEBYBCfjg==} engines: {node: '>=18'} - '@arborium/gleam@2.16.0': - resolution: {integrity: sha512-cVGpdf46UBchEisEL9TOucrEmDfVSqeUPCcW1OCs7aP9kp/iD4atSftVIU0+7HN3sKT3WKuz0t35Rdw6pkNrkQ==} + '@arborium/gleam@2.18.2': + resolution: {integrity: sha512-tl5Oq2VQX027ol7CSJVM4ueyWIee9b4y6iWAHyr5Muyefmo3GjTW6rFwMNTOeVlAfvbhnmWnYKRaFAxIDb1DOw==} engines: {node: '>=18'} - '@arborium/glsl@2.16.0': - resolution: {integrity: sha512-6f34zGMEGBmlmV1Pu+in9FndfBa2gRlpq6xTAKRGPadPaKXf18Ru0bE/YYhytEPec9nGtJeOtlGPQzZrcPqJOg==} + '@arborium/glsl@2.18.2': + resolution: {integrity: sha512-If5Cd0Y+TAb9WkHqz8sQQ7Y9V05IowTV3Aoxp0PSBB3qHClGKbX+KLWw6fEsh43bqBO8q0jruLDqkgyvJd0d4w==} engines: {node: '>=18'} - '@arborium/go@2.16.0': - resolution: {integrity: sha512-2mj/9c5Jn/AEwbnw64mEVfsjkWiGw80sKMt69ZysMdjBAE3ewez6ncIJYALmGpjub7lW74JW9MhVrnoDqlAOsQ==} + '@arborium/go@2.18.2': + resolution: {integrity: sha512-u7r0zMSySHs8X3HMGPfAmZ1J/O98HM3W1A8ocTvk3KsGoKU/o+PJb6KxtdEH810enCABPXg2g1lRFDKQkiM1Jw==} engines: {node: '>=18'} - '@arborium/graphql@2.16.0': - resolution: {integrity: sha512-YAMsviNfT5mft3jo/NIFuetD7hQ6ubKvpErXlkjiGggCOE5hN+V1L2+09eEYDxdoBPaTAt6ua0J8pOGSvGQtZA==} + '@arborium/graphql@2.18.2': + resolution: {integrity: sha512-fWuXBIYzi6CAf6m9oBT9FsPQzPUQnAu0kWKNKOuHwHOF/hIwTg6/sAh6n6k4DSse/361xTaFpodu8PcPsdWAOQ==} engines: {node: '>=18'} - '@arborium/groovy@2.16.0': - resolution: {integrity: sha512-nXeOUB5FUMBFiGI07KdGyLKnxmDQu589UWDLNDNh2Qo0OOXgrxhtTvy1UMXlHtNArLdqOoZQWh8Ns8Oj5dxlWA==} + '@arborium/groovy@2.18.2': + resolution: {integrity: sha512-yS2DO1xsWR78tay2gRdBCQ294lQxGB9qRdcaPSDA1fb6uNko0zL+KkVY9JVmNoTF335ef73qHxV5ZGPWtJ9WWQ==} engines: {node: '>=18'} - '@arborium/haskell@2.16.0': - resolution: {integrity: sha512-y6BSH397cDXLgR1Y23I4bq12YRnGNQUOaJxp7cb4qVLSldQhFPYCd72ozR+szjIoE6MR/ctCE5W1VxQiGds5ag==} + '@arborium/haskell@2.18.2': + resolution: {integrity: sha512-Xdz1uTmsehmb8wKScy7a6VTcePGa6dAW+GpNFvndYyQRilUKX6oypvOplGIjI3V1hKZ+ZDzsKdX/AiZRukixUQ==} engines: {node: '>=18'} - '@arborium/hcl@2.16.0': - resolution: {integrity: sha512-rLFj5DUFZTBaYiJoB5You/k0St5zwEQcAi/5VKzqtza1vwwOKFZfGD7Xwqtst3VZyTmqH4SE4ZJtooadCGx3Sg==} + '@arborium/hcl@2.18.2': + resolution: {integrity: sha512-6tbY7ExFmUy/k2FBSeOWIav4m8SpuUJSWGWqZA7PeFiXacxcFbDrwfugRIU0tGJ8Tyakf/ByJhZZ1H/YY/OtJg==} engines: {node: '>=18'} - '@arborium/hlsl@2.16.0': - resolution: {integrity: sha512-pa0UAuK1dxijWwKyrw9uU9VFKcYMhFiisWATA0MLUItCp5fF2zdaE4AjlYCl6N6m0HTWH0RhAmCKDoqs3WGcMw==} + '@arborium/hlsl@2.18.2': + resolution: {integrity: sha512-htWZrhUed97C4Z7M0PTPic5C+BCslgXdt67K5gjGvItbncjPGtZeHHdVd014p3iUgYXruQpzbJvOLr6071YGtA==} engines: {node: '>=18'} - '@arborium/html@2.16.0': - resolution: {integrity: sha512-x+/c+pSwzlUqWWsxjDZ4VEtxi0rMzAuQ00UOBz5itLwBHHoSJQEPmJi4975UIaMWEgbCCQqAQWmaYg1zjKq1IQ==} + '@arborium/html@2.18.2': + resolution: {integrity: sha512-DI39HZ3kkeiD8B+xqpPMkalTeJxMOfM5KYPqrX1jvG2DQ6DBjKmICdaPVz/Wz3kwd6mknKYToPKEs+D41ZeMpQ==} engines: {node: '>=18'} - '@arborium/idris@2.16.0': - resolution: {integrity: sha512-Ro4KRSJ3h3KyGyZjp8lQnmlgmupI4qUcHZraayIO2jQ4LormpGkXcKgTuw2ebPalj60fajisJoPcwKjlDX3yDw==} + '@arborium/idris@2.18.2': + resolution: {integrity: sha512-IhjD5AQWULd5ZLls5PvIhP6KRtvtyaZEBNsnDK4si4ZXWWCKsLG7wUQheSjWj5WaMv5OPxRNQ+j2waIJcBmcuA==} engines: {node: '>=18'} - '@arborium/ini@2.16.0': - resolution: {integrity: sha512-Vi6tWD5fXlx/WmoTZc0ARY4KUCI/svcFaHZKsmYqgDrUSBMEY+EH0c+WbVR1rz7Nym5uCDukfkzYza4y9lARGA==} + '@arborium/ini@2.18.2': + resolution: {integrity: sha512-B2I9hyA+mupGufvql3qgqsUrtYH9fZ7/C0WGXqQL4j5RWbw2ftaMeGHqkZS3OHaaKdl/9P/k/eb9PKhG7INedA==} engines: {node: '>=18'} - '@arborium/java@2.16.0': - resolution: {integrity: sha512-AqNRzmcoWqXixz/VE3X9yTXkDxHTTtn7yzn44A61QMMxBBPZhEk2kB+GEqDn0exOHKKnyR6ZVKaxxxaTUCRF4w==} + '@arborium/java@2.18.2': + resolution: {integrity: sha512-2TclxEFYvOyokjK57L/a5rN/lEljwlaR81spjZv8Hs0ujND+2kM4IlA7cLKf5L8jgnyIoq+rtsqgotMcg3JsZg==} engines: {node: '>=18'} - '@arborium/javascript@2.16.0': - resolution: {integrity: sha512-5cRzi3keUhuY2tTVixweOrPAA2tVyHnfo8LZWz4Q1D12hsSunqBVS7xuaqw+B5Tr/u2MZX7qolKP4BVQ76PiPw==} + '@arborium/javascript@2.18.2': + resolution: {integrity: sha512-qJc0nWbzP3UXSe7SFap+9MHGh41gK/ehQtoGPOkFgIhEkrlVez924dLYZhRnDM5Zz4mqjQ2ugaA3CWUkMy7JgQ==} engines: {node: '>=18'} - '@arborium/jinja2@2.16.0': - resolution: {integrity: sha512-EFN917M+kaxv/BQf3bd6dlRtlM9SvBuglCH+wsl+WO3rDUTVvunm5zer8xgmJOSR7IIB47heqM1OVd9lhRtxGA==} + '@arborium/jinja2@2.18.2': + resolution: {integrity: sha512-L/r5dJb9eQtwkVl+5h1/I5EFQd1fbewEDrUn/93nX84M/dtV4uZ55XbIlTs/ryerSL3FZILy9oVTbNTaBcJ4Og==} engines: {node: '>=18'} - '@arborium/jq@2.16.0': - resolution: {integrity: sha512-1FKAhv9OP1EUypCOr/OOODnXwfDyVsVcIaM+0qAypgkr/o3cFfeegeFzMTUAubhUJKzFlt5nSolfc7dxhgCpzg==} + '@arborium/jq@2.18.2': + resolution: {integrity: sha512-ElcRFolzj8rjZfZgSIv6t4eQPtmyw1PvhcOvL8sU8O6eC7I6m5wkyIp8IvR5ZlpMaP0LljPDIze5Fkv3OarCsA==} engines: {node: '>=18'} - '@arborium/json@2.16.0': - resolution: {integrity: sha512-eL+/cTpzWiLAynuXoyWem+5VGAFeLVhvmIV1KS9J2XYtaueWUSFvZYmvTq6FI+nfKdQLjshFgFUx1XJr3QQw2Q==} + '@arborium/json@2.18.2': + resolution: {integrity: sha512-hW83hK5R+D6zLODismMLYnrva57upr+EvZj6acaftivKJOHTqZMZi/SXK1bdR3+V6bT5R8/2xdv9eUSTLBP5kQ==} engines: {node: '>=18'} - '@arborium/julia@2.16.0': - resolution: {integrity: sha512-C8tKdeOFi3nShgLpuXeRkImOG7iuf/bPxdwe/fUP9g99hfpafpWt9TJd94LB+rc/jnPhhS951TIqwIP3uiEulA==} + '@arborium/julia@2.18.2': + resolution: {integrity: sha512-lluye9SzrPMLT8qgysTH6rcKTo3u4JMSOO7QgZPY+CUMWnWpoMcE0trZqXaFWi4fwf6VL/98jeX+H5PNxOqFCQ==} engines: {node: '>=18'} - '@arborium/kotlin@2.16.0': - resolution: {integrity: sha512-W9+ssbUjy6RqrBatc7N0TIMls3UgQ3CLi5Dqpdma3wndhIDhKgv9fXEOgNfx6OnJ5SA8uPX97gVK6iw6JCqwPQ==} + '@arborium/kotlin@2.18.2': + resolution: {integrity: sha512-/yNM7Ymx9YCvkYYsB66aFZks+If6zGmNaq1wfSNVLKgBDtZi4sasn5/RGFgHEGPGNQvlwfGdBHO0zbQKnxL/cg==} engines: {node: '>=18'} - '@arborium/lean@2.16.0': - resolution: {integrity: sha512-01D/3srYvW9EDf1+/bxaOiHrwhJAEpQLnPC+KI7nDhuB3VGpr0uuTiH62IEcVF6FOOWKzfkwWrJbOzgshy8YeQ==} + '@arborium/lean@2.18.2': + resolution: {integrity: sha512-qROl42H6wyPW19YLKp8jm20myhTsgTdCSJAWIjgQsfvGVw0Tf0EGopfABWQKjcO+d/iDD3g9+USO1SHlJ+46Lw==} engines: {node: '>=18'} - '@arborium/lua@2.16.0': - resolution: {integrity: sha512-TVCKu3yz7JRDf6S/mBX/HxmlHvdmFeOGl/RYwxkR0xsHktji3V1Iz+viQaKKHbkQK7hQrv+HApjL2XBZtdK3mg==} + '@arborium/lua@2.18.2': + resolution: {integrity: sha512-VObZtDXKPIDd1hFrvjo7CM5jDD+8iQb1/dnMjnf+PCgJpBNLW6tJEKB2fhR+4wbPIxGDx5UdvPo4sQY3kCUHIA==} engines: {node: '>=18'} - '@arborium/markdown@2.16.0': - resolution: {integrity: sha512-WkTaIyxoqkJAAAtsa+LXVcAneShhkzVQg3+THpETxL4q3luQKHBy9f8jb1eb1RiM8aur+/mzznOn0rmHKESa/Q==} + '@arborium/markdown@2.18.2': + resolution: {integrity: sha512-Z9HN3mkC8E4ugNrOE4M+w94R4bYZnldvqqoxA+k4uQp8CiVNj4PkTwFpxc9sROxKubWJT+EG6r3917Xu97xGIA==} engines: {node: '>=18'} - '@arborium/matlab@2.16.0': - resolution: {integrity: sha512-6UmuD+rXuNw8VYlIrUlt0A9uCLZ5U+Qa6emvBhgmhslrXT93f7YJjz+NxjyXk6sgr+g9/aJiBY7gQtcR15WWyQ==} + '@arborium/matlab@2.18.2': + resolution: {integrity: sha512-5Egm+XmrcpaDkq4rNJZl4S7BaPae2X10tuZmRKyV0Hg9CuvONHde06R/+KWw3wFi5q3yKwzjnP0iTUfx5PdmZQ==} engines: {node: '>=18'} - '@arborium/meson@2.16.0': - resolution: {integrity: sha512-4BbsWx5N7iXDGZRmDelfzOvIE9hz33MkNbVILhgQtD+kCjlhnZMkrGLkVCM4ghMSPNCKT3qdFIqgJrnu35gHLQ==} + '@arborium/meson@2.18.2': + resolution: {integrity: sha512-t8w9mpn6Wol2M9ueoKiXZXsCdAghcM+ZzcWsLLA8sdKR/6BuwkDINdUiVjK2hI5MM4uAHIBlArbWIB9ayGBfCA==} engines: {node: '>=18'} - '@arborium/nginx@2.16.0': - resolution: {integrity: sha512-FaHuV8zWkqQ2FrVgRTEin8EJIauMvwMQU2GcdriAKCwF4JI0bP72d3p9axS3t3DU9bBV/+fh8uHUuc6gZX7U/A==} + '@arborium/nginx@2.18.2': + resolution: {integrity: sha512-h2p6kQ5Q39dbvj00TaiG0vgpQT5fbR86M74UQdzFUKlAOWZG7jTphFQq1ftpPzPdiski2hikfw7WAwk3gcpyLQ==} engines: {node: '>=18'} - '@arborium/ninja@2.16.0': - resolution: {integrity: sha512-X2bvyFmou8JpZo2ptrKSLewvN+lXa8WaYDCOm6TMr9Z9geymDDZveL9egHR4L6iRCydzsUdBRHRQksjKYTTHzA==} + '@arborium/ninja@2.18.2': + resolution: {integrity: sha512-j44cqVGYk92ivunRcCqX9pGMpce5IjDNP6IsmLXRyTm3V4nnxw7pUmgbOyM1OMyW20E8Bo/ImPzeMHgt82DFeA==} engines: {node: '>=18'} - '@arborium/nix@2.16.0': - resolution: {integrity: sha512-Lo8JlVoaaJ+x7sW2BN0laTY8zZeDdXvPwxCTyRpQ5omKKLFmJeA41H5mjusKIh4djtFbGy34Vw8Wu3/vxeG4wA==} + '@arborium/nix@2.18.2': + resolution: {integrity: sha512-EdQAEQKJ5uwTwNQZbU0zaiRMFzGtvHVNkkIdSSiPpjIXp1tb3N5e0YaCFDqTLXCVByFrGRA2na4CYJo8LEzvUA==} engines: {node: '>=18'} - '@arborium/objc@2.16.0': - resolution: {integrity: sha512-IdLd8VL3PooB0n6RWo0K6CMw3OtLMY1hFvTMp6Fu2oeYZ1PUpZJYHsbsBv4JL/wIS1pQYO6mhS2xBal0q0YbAg==} + '@arborium/objc@2.18.2': + resolution: {integrity: sha512-3tSD1ULOTm3iqMMyChvu8/GcpSaNvbaV0P/UhGBEaGlbomnBUrta7mg8VwXBU9e1ilfHAZeREzeT9gjDlOTYnw==} engines: {node: '>=18'} - '@arborium/ocaml@2.16.0': - resolution: {integrity: sha512-NDWD0A31J6Xgn7ynnJoAx0xUxIAOjWh8e8ovexun+gj9B8DqZotViea+tYh+9NouYeXQfe2pOP79V74KFlY/xA==} + '@arborium/ocaml@2.18.2': + resolution: {integrity: sha512-DgofJ5zcftTQ/PdZA6aokHTJh2Wun5LhGuykwp6vFRRUSG9BJ3HRR88v5PSDv8Go5ltRU19mv97JJwPNWsrrOQ==} engines: {node: '>=18'} - '@arborium/perl@2.16.0': - resolution: {integrity: sha512-LlkxFqqjAgP8mqwn0aNSRDtgtJfk0UIiEVNV2yU776NsXjhaj/a30fCkyo+ucIuZMY+ygADQ2FJ1ZyDBQ6jSvg==} + '@arborium/perl@2.18.2': + resolution: {integrity: sha512-wdo/ou7vV7OgIahqtP7/bBXMYBDI4yGX3X+FToDNWtuHxMF6nveK4S0akDb7pwGkKNM2sdWAt8lug4THWkgBMw==} engines: {node: '>=18'} - '@arborium/php@2.16.0': - resolution: {integrity: sha512-KdOSLca3XcdY8tZvAGhzu1hqhT+/h8RfGizGFEtjXbenv1Z1r3XLH6JpLIvYvGWz/p5YKeYIoxUwRrJUYB0tXQ==} + '@arborium/php@2.18.2': + resolution: {integrity: sha512-jsuzbsMtqyZU2/dE57XcTG5LEIgavO1pi9kVeTUNZ2JFS4/b7NHazXpTNDZ0UNldN7ELCwVKcavYM2//aB2LAw==} engines: {node: '>=18'} - '@arborium/postscript@2.16.0': - resolution: {integrity: sha512-butd/jJEC5sV+IvD6IKkNsUZBdpvWYsExqzyurKcYGJOd1IQFLKyRLL3eARpzpjX+8MfAB8cqckcLUJ3GWiGXA==} + '@arborium/postscript@2.18.2': + resolution: {integrity: sha512-/hILDZv4gjIBSuhWE4eF0aMlnXYxmfB1Bn/rEXzHAhzzroXPtmf7Tt5Decbka+0zP/YMS2gv2fdrWsjHxuAEYw==} engines: {node: '>=18'} - '@arborium/powershell@2.16.0': - resolution: {integrity: sha512-wavBsakuO03wHVrZaIkaUNuH01TikYTT2n1jLBeWKj+YgcykbYp4F1RUisvRbyjYyRxV67E5hCbxLnNPHz+cTg==} + '@arborium/powershell@2.18.2': + resolution: {integrity: sha512-w+t0u7yV8T3s+XI4kVF4Ty3mla6HwINbN0O0ud/tZEH/aL6eEm2foa93F0f9APz4nGuDFhMBOz8sEtw0PbnMhA==} engines: {node: '>=18'} - '@arborium/prolog@2.16.0': - resolution: {integrity: sha512-aSI7nwcQEnibL4xBMApzlwVSENTLyCReTOO3VPrPiQN8WDMOi4Iue7TsXSTWlmtF0Uevet5a3LXFyQEchy7TdA==} + '@arborium/prolog@2.18.2': + resolution: {integrity: sha512-55RK/GU0a9TH7MYqDocJIhbanP0kMobQAbMSM5/5nV2xcZZDVECaTOurxzIW3AJnHZ7xL3XXMG1kzyjmnxaDoA==} engines: {node: '>=18'} - '@arborium/python@2.16.0': - resolution: {integrity: sha512-dEJrzmcAx8EtgHs2SKbvGxVVbyGmt/kOzeiB61gn56AyKOzDI3wLs+lAKpd00jxwkUart0exphlCEi9N3C26GA==} + '@arborium/python@2.18.2': + resolution: {integrity: sha512-szEpYm83qqeUF9UaNEgagYKiGtsFg5rhQUnPPi0QRgcvrDOOO7QfsVvRFopwSr0IFuVlI0REswDeGYAA/jU34Q==} engines: {node: '>=18'} - '@arborium/query@2.16.0': - resolution: {integrity: sha512-jD1e/QvZBXjGZjqi4xyICbR6MeOAGQeYb0worHyF1fAtuG6pGB+ZDRXlVwFtH0yUUDIZGgfoQah0K6p57zIs5g==} + '@arborium/query@2.18.2': + resolution: {integrity: sha512-SFGBT8M+UDOQCax4jHQGicUPAOvJkZYI5zGVc7dBcHbhQqfp7FxysiILFtOeT8A0UEvGt/e28AQbTf/V+UbgGg==} engines: {node: '>=18'} - '@arborium/r@2.16.0': - resolution: {integrity: sha512-Kb3DgjvLGv0RrTLVtGI8LodV4CRBpKN96uzWt2/lwWPbs4Rhh0B9P2aAOJXr9dvwJDufDSG/Xkm/uDwt/NNXuQ==} + '@arborium/r@2.18.2': + resolution: {integrity: sha512-b+K5lBnZvKvWFQfOOlTDc3FX1sAwl7if63GYK54+RTO0PK5QO9MTZ85iZ81H+Z9+yA3wQt4fipIqD/0idR4Zdw==} engines: {node: '>=18'} - '@arborium/rego@2.16.0': - resolution: {integrity: sha512-SVoQegmdP8zL5zwFt/WPbAMjEIwqyaM4xJE/U+a/ZnNCz0laIjPC9bKxQQJQxGMlnxTJPimVNaML7YDeXcO8NA==} + '@arborium/rego@2.18.2': + resolution: {integrity: sha512-FzJ29ct5v8MvlkjPVaCi7xaNfqQIKzunl7l08becQP3hhZZulVcL77lLP80wU0NCopYMS9zEe9qbw0nBm9weXg==} engines: {node: '>=18'} - '@arborium/rescript@2.16.0': - resolution: {integrity: sha512-trnmrssssUq29R1PK583MKPan373x7zJsIPwIfvB1w0FedRh3hWdzfcPVes3rNMDFXg0Ao2T2uwCNaNRoj/u5Q==} + '@arborium/rescript@2.18.2': + resolution: {integrity: sha512-iuaOykArAvwE4hvizxjSW435eKkrvgyOs3KeMXmPOwwdACjj4XnhiPCDsJo1sFa7xBCGV+y3XFphxQWkWzmeIw==} engines: {node: '>=18'} - '@arborium/ron@2.16.0': - resolution: {integrity: sha512-ptw8HyWNxFKXlCZAMzqvqrgfIWXInPMex1P4MHKWh/SYlGbtBqoh7KJLx5PTW64rtlg2kcvfFoimnQ+fsYqD/Q==} + '@arborium/ron@2.18.2': + resolution: {integrity: sha512-Gp/FOPQswfw9pVUQtuU8lTtmUFkNksLddteBTWGw6srRpxIlEcYGzyq5NQbi+CIqmMZwvyUjbpLwiFOjm+XPog==} engines: {node: '>=18'} - '@arborium/ruby@2.16.0': - resolution: {integrity: sha512-ffG3hcr6zJOZI9ugK6l7WmcpjnUmPRgnIuLzpfE1OyxPbg25aL4k1/OEvZZlAfSn+a55jgHoF+z8a5+FaeHW/A==} + '@arborium/ruby@2.18.2': + resolution: {integrity: sha512-7tcm+KgfSxYEO9LW6+XvrK2jBcEnF5g0t7X46lWs0lJssSOkXKm853wWMjQ9dMObXsaiszuK3FW75fohhOA3ag==} engines: {node: '>=18'} - '@arborium/rust@2.16.0': - resolution: {integrity: sha512-o0N5Ih4/N8gcYOQ7ZvnsKiIe6tY0Ra55zEgMf8lQ8AjTni7a5mpi1iP0vAb+i4YMu8FYRld0fCGGTKKrPirm2w==} + '@arborium/rust@2.18.2': + resolution: {integrity: sha512-8OViqqd+u+Vlb/viKbrmyBHc9b3tpkdTAemdsw0A9es78LMTs+n21hJTcvXXQYQIUE/0KDsuYRAlzKKzbzEVxg==} engines: {node: '>=18'} - '@arborium/scala@2.16.0': - resolution: {integrity: sha512-b7wpd4IPqahEuCwSHRAu4VWffkpGnynRgGIc/mGLQBCRdkH9wu1YDYPy2I1ikDxuX0oZfYjaLDFIfHDdXLrjFw==} + '@arborium/scala@2.18.2': + resolution: {integrity: sha512-QTgBqQ7f0b41gOQirvdZsL+tyahQxwlJzCScyZPhjQypfL4MsimSUjHUsEXgbPa17TpHvAt8FjGxm29gVJ+6pw==} engines: {node: '>=18'} - '@arborium/scheme@2.16.0': - resolution: {integrity: sha512-TT66e43VAbCBNdUKniSXhcB8G16t7mJV6xT1IbwGlPCDt/hBXnjUNbTAPx5Qgo7/jGi1zVf2KmxmCSOFK/K2yQ==} + '@arborium/scheme@2.18.2': + resolution: {integrity: sha512-D9vd+zYajEV2s0xEgX2ysjXNw1Tdw0wyScgxTAqbfW3+0pnPMgujzM4Qj+YJooArSCVQULsDJm01qIPn/CIiDw==} engines: {node: '>=18'} - '@arborium/scss@2.16.0': - resolution: {integrity: sha512-lxR83tnCWNkY/Xt5K09rfg12SojBGuTin4VgnmxAxFIPkRgUWx7Cm+z+T3rv4sZpTkZK2b1JRfqFD0STEwB6Gg==} + '@arborium/scss@2.18.2': + resolution: {integrity: sha512-pqZBVUTFZTnexWJ37rAgrERY280MoUnTU3yhd/kfoOX31Eu85AdVgW9cih5I3fsR5coHfzSSQDhRMCiPFUwcsA==} engines: {node: '>=18'} - '@arborium/solidity@2.16.0': - resolution: {integrity: sha512-a8tLULH5P7Pm9sePlgc09xZsceAxXr/8e8QFdTS1EVDlDxTyKJPOjDQyFQcnN6MOvvvCFj6ZQH+q5ld+xCY2wQ==} + '@arborium/solidity@2.18.2': + resolution: {integrity: sha512-kXIN6eZDgmOP5I+ZzRPpWLDnyF8Cmq26E7USZj7iDTL2htItdD1rOiXRlvh1/UbILz2WRrVNR/UkXx0XjUwk6A==} engines: {node: '>=18'} - '@arborium/sparql@2.16.0': - resolution: {integrity: sha512-Zm6D6J3JXEsFEqnDNK1gE15Q8zOJTtnwpxsqXN7XzDI87tQuaRZUX8F8aC8KD3LfxAZRPmJQslJAoW/Bpc9upw==} + '@arborium/sparql@2.18.2': + resolution: {integrity: sha512-Fvq3eulebr0aIFKBLYGRKWHV7+av1nEioToEINkNLoI2mmZAX+1hoPuXQjq4sJ9bs7+PkzgYLUQj8WNlw8Tdmw==} engines: {node: '>=18'} - '@arborium/sql@2.16.0': - resolution: {integrity: sha512-wNAaFMML+PII+6B1F8s/DPGeqBb0D0vaePOthZOQRTRLcf1M0i7h75Qrw2NencTGM+PkQ4mmxdq2mIwBL2Wzow==} + '@arborium/sql@2.18.2': + resolution: {integrity: sha512-3M3TNq6/dvXEC0IC0dfEQcWPMKjaPyrfXaJjTT7TlOXe56jCmpyJCetSVt2ZIo52PJpB6RAfMtYlphFt8IHh+A==} engines: {node: '>=18'} - '@arborium/ssh-config@2.16.0': - resolution: {integrity: sha512-/imWsCTjbkj42bigkLaukLIsRClNl5T6njvBw7s6+D164HI2Lb5P5gm1NPKPvqGpTeP5+Qo2NsaEvo7NyIswsA==} + '@arborium/ssh-config@2.18.2': + resolution: {integrity: sha512-ooNPyhOQIRDaFn2z0l3s0yQcXqs3klRKGAhPTwJI86ljUkyt0PigsLL13gMc89NMmZGlMzIAhOb83zE0A02xRA==} engines: {node: '>=18'} - '@arborium/starlark@2.16.0': - resolution: {integrity: sha512-65kmYu5na0E3zm3madlm3d1dPmIniBkRzJ6S9tCBUSTrcN/HJ3tIlzEk6ct1EfKlUBK+I/oyhuVQ+Pijp+M2jQ==} + '@arborium/starlark@2.18.2': + resolution: {integrity: sha512-6Ufvytx61JmlKU/2x3Xidddo0VOMuSu3nDZQLO/x1Ua6NpfKgrVBtmgu9aL5EJ86OLyj6wHiWTmeMydLsYBlyg==} engines: {node: '>=18'} - '@arborium/styx@2.16.0': - resolution: {integrity: sha512-gvp0D313Xpdz/oeWksF1tBbm2XKbVNt6xNbLF8WZxxwYzfIoK9SaY4zPz4LdkuH6TmhrWzjWXy/79x5vfj8DYQ==} + '@arborium/styx@2.18.2': + resolution: {integrity: sha512-xVXtsVcxdpvU0YqjwMFLWONOAlSeAYK7fwvh4Hrbwn0RPq6oYntUtfLz0Wi8mxmdWZlWCgR3vBrCEWeNMREnJQ==} engines: {node: '>=18'} - '@arborium/svelte@2.16.0': - resolution: {integrity: sha512-Nbh+ImUHXz+Cd12JMNaXfm8U0FdrfyBfkhuVZNacDGBbxuJ+LvPwTvrwKO1QtxoCke/x7i1AsWMFTR1/NM7SWQ==} + '@arborium/svelte@2.18.2': + resolution: {integrity: sha512-aSbCZi9/Z0YFcUSHCmDuI0GqV3mnf3VzWmXXRZZJ4JjuTszdw2QfksXNwvkC9rqqY/TkYrhzLynCMxnjSmTHBw==} engines: {node: '>=18'} - '@arborium/swift@2.16.0': - resolution: {integrity: sha512-kW457HyGEFqU2/VPv8xtUYZdsq3L2wbPi/JBHfyEObtUmlmsuYj4TsywU9GLmehwf07GVuRls8Ab+Bu81JMDHg==} + '@arborium/swift@2.18.2': + resolution: {integrity: sha512-PR+1nvtCy5xafJKy4hyQ6FKt7qM25DnD17NNHfNxNGgF+IuRN2p3RaNvequG3DhKMGVhKlIRPZc//SzLUHIB3Q==} engines: {node: '>=18'} - '@arborium/textproto@2.16.0': - resolution: {integrity: sha512-I5fNJOzmIkvcvMiIihPnHxJHu0rq13n2m9OdR2RP5QH5lOzes+dgXXJO7gjKpoSyIPiHaCHk0cTQUfrnnuJyxg==} + '@arborium/textproto@2.18.2': + resolution: {integrity: sha512-nmMRo8B6VWQJJtRBiBK2utvQK0OaHn8ZJ6VIYk16q/yKdtPplV+QayZI0KUiU/uyRWumnR5blulrotQG7VH+uA==} engines: {node: '>=18'} - '@arborium/thrift@2.16.0': - resolution: {integrity: sha512-UgnuIHpIWbtv1sMl+tgUn1bV4tn7/anO57Zhs6dDHaq9+qE4jckKLRt6TTmSoJ7I1fJzNW7JsYVW/ZHGv26v4A==} + '@arborium/thrift@2.18.2': + resolution: {integrity: sha512-/xnZYwY2gZIBGdAcApyq3W4kS59YBMSdbYniD7xlA61B3Tt6MDkRSw5IEdDVg3fZ6L2ZhWrv+K28YFHF1DBYBA==} engines: {node: '>=18'} - '@arborium/tlaplus@2.16.0': - resolution: {integrity: sha512-u33kW3IL5Lx/W4zpdO9DJlo/LkuLZxDD9Jz9FiznRCO9XSoAhDdITzk6h15mwpfyGZxJpXcpNqlzEfP3uLlU/w==} + '@arborium/tlaplus@2.18.2': + resolution: {integrity: sha512-BvhM2ZgsqGVH1rbacATMGW7zJZsRoDZShurbZaZAQxgl6djO3guYUZFOWzTXEfipwWIvWstaAFf+F42MBqcq9Q==} engines: {node: '>=18'} - '@arborium/toml@2.16.0': - resolution: {integrity: sha512-c9uKXIok9mrlPufphUpe8mYjXFClulGfRiBVXsdrt1icx7MWqNqa1LhmV67/4UOEpZQDffSMH1PRor/DApHQMA==} + '@arborium/toml@2.18.2': + resolution: {integrity: sha512-j4z79So0FVc9qsmSEU4gzb1LimKDuA20HHYJtfV4jfMJcjDXKwgx4HWW3gF0SRY6UVqlYJslC5ckioG/4xWs1A==} engines: {node: '>=18'} - '@arborium/tsx@2.16.0': - resolution: {integrity: sha512-P9SOTp0/6TAS157ugJ6Nf2d+CK0lmup+H5BJeRaqJQ/IpQKoib15QSCXsXE892QYFr4XdeaZzAf+AFpKEyZ47g==} + '@arborium/tsx@2.18.2': + resolution: {integrity: sha512-2ESPXgOfw5FpEV12+ooAp5Vs5qZ8giSLbLxpbxKWansaIW+AXqZTpmu1KHXFVBvMzI8KOPtzvJYPtrAZhlXe0A==} engines: {node: '>=18'} - '@arborium/typescript@2.16.0': - resolution: {integrity: sha512-xXseOOYTNWH+FW7qT6mGNKMi+JrHH6ibQZVdZjtet4odJr04Y1K5ZoxSHhaer0Gk0MdSigPfUAYq0TigSTuh+w==} + '@arborium/typescript@2.18.2': + resolution: {integrity: sha512-zttEB32bqAFvrzJ6byuFfh93MQ43Uv3WqgFdh5iYkrPl7nnjGH0G7+L5SugYKrtYVk6sin/01f4EusncnJV3WA==} engines: {node: '>=18'} - '@arborium/typst@2.16.0': - resolution: {integrity: sha512-e1Moe653zxPj/xifl5jdxHivLy83WzC51Zq14DUP1Sl1AML6kw9tzgOI7Syhhc/u0KVD8v9woD6mWnwF0u1nhg==} + '@arborium/typst@2.18.2': + resolution: {integrity: sha512-islW4xVDJIzFlJ6O8dPvscHg4xstUD9pFZTfzbesqjsDJ6+tCPQOaUPGQJjG6oynv5HkGkoR4VCkaHZgVq1cKg==} engines: {node: '>=18'} - '@arborium/uiua@2.16.0': - resolution: {integrity: sha512-PLp8n/wnTHSitBG6zH/VoKVZfiLI5Zh+bcf9nPOg/kNh7WvFQ2bS7hGoKa9wzr61Ft8BaeQRd/wH4WiHXE5COA==} + '@arborium/uiua@2.18.2': + resolution: {integrity: sha512-rBj1JPnMbnY1SX1LHUw097HsGOclLqyZHxpd5dTUGG+pIln7kix42m+/7I6LYaujJjLCoce7Um3E1AJzEIwWCw==} engines: {node: '>=18'} - '@arborium/vb@2.16.0': - resolution: {integrity: sha512-utPWQqiwykb4SRjQYXhVmh1hOPwuCRZM2GunEcYteqWcYamLfs4YSKHTHj9pd2DMKMFc9fnyxy/5CAQ/nZDj5Q==} + '@arborium/vb@2.18.2': + resolution: {integrity: sha512-Gu5Mr9lkdTlnys8D9ueRC1hrkGkDrBLkqPPAWa9EZiB8C3yvYqVCOlaXwjG2tLa37coLaoDP0/1GbXF9OQW9vQ==} engines: {node: '>=18'} - '@arborium/verilog@2.16.0': - resolution: {integrity: sha512-XzGJEdNKJxgdGkBP8cVu6jF4G8ANOgjkoA9AawG0v6K3fREqYQ0J7oihU9lEGPCN4/xSre06nHCaEHZaWPsLvA==} + '@arborium/verilog@2.18.2': + resolution: {integrity: sha512-q4IBczSmzSdwKtHmCuy4GiU3djbyQpmttkVDsBig4iin041JS92aTGKPhhBb4fr5iE8ERaLdUZbEBmwjMCHs8w==} engines: {node: '>=18'} - '@arborium/vhdl@2.16.0': - resolution: {integrity: sha512-263ZXr05BZKu+CJpdIAmmRqFmHypJ5hqO1BVdcXOFWN8rzQbssj0TkMMrWFOs77H2CYQjrlTbIeCMYAV7uawoA==} + '@arborium/vhdl@2.18.2': + resolution: {integrity: sha512-NMMhmnsfY8WxWDZunKOTe/dyd3gQ93pCwjTMctXRWe4FZIISHMHqqCf5N/kfgXU/uCQKJlNUH1yIrLAR2aTjfA==} engines: {node: '>=18'} - '@arborium/vim@2.16.0': - resolution: {integrity: sha512-B+XHEE1yWo+ctz5yMFq/rhyMGE2RKiJpmL4CknlNYqBCoUUkkM1o1tJTkK5vDA7C3f1nClNsQAIFvrOLApaVsw==} + '@arborium/vim@2.18.2': + resolution: {integrity: sha512-U937v7vY+lft/6Xr19olIv3dgcyd7zoOaCrYBd46b9Ci0yOp0PD2fnvM9+TWpRWfhPV/C8ddcypym0T5J0JiXw==} engines: {node: '>=18'} - '@arborium/vue@2.16.0': - resolution: {integrity: sha512-5Vpfw46G6sKHATPOglcKcM22NRPuAgJciB+DxRe41FfLIha811VMLhsATZwxy1p8GkNr/LM0xPSV2kBXQftzaA==} + '@arborium/vue@2.18.2': + resolution: {integrity: sha512-vR+pnWf8skAHb1jaJ1oQ/RUyjBsmoFkWfO8mbZ+mHVR9++DkM64wQ7qlvzBjzGI5ZkT7u6Q6V0oKqcL1c/uxQg==} engines: {node: '>=18'} - '@arborium/wit@2.16.0': - resolution: {integrity: sha512-29CrWwU4o9i3Xgwnz6W2KTR2QiuXLcbRFnGI5MFDtDHFQzIQChngwt+mOqmoLrdVk1zE940BM0r3WEpeh9IE6A==} + '@arborium/wit@2.18.2': + resolution: {integrity: sha512-81c6Vq4GBPzUEn1yneyOXWxRYfNfe384e2QjG1XCUb6XckBEg4mp7r3hVD3MOOjrabl9o35qmVXmjM/x2mqQuQ==} engines: {node: '>=18'} - '@arborium/x86asm@2.16.0': - resolution: {integrity: sha512-4aXkvly75BsXijwmSiNNQBr0Ep2hSrRwCYTciAcBv5q6taiLMY2QtLK6WHTDuHp5lQ89rw2jeaNE0Be4JwHLpA==} + '@arborium/x86asm@2.18.2': + resolution: {integrity: sha512-npWETVgItXBRYekJ9dUEaf2EJQeRkz1zOqMtO3NuQuEfjREYsOLQFudgmus8KHdIx56Kz8NqxRLIac37kfbI5g==} engines: {node: '>=18'} - '@arborium/xml@2.16.0': - resolution: {integrity: sha512-t8Au4czP8vBlFQa52F/D+JVePxghBHpDhCdw8OYLnadXFwlUgNe1dcWRqflduSGAq/3ZKEILM7kFmQV1YHGCoQ==} + '@arborium/xml@2.18.2': + resolution: {integrity: sha512-LqwkNxj6rvU+mqaiusXfOlZ67gRts+CUaZ4O2L4qyCKvTEASzkmd5wDObAh7dW9rASsQahiR7MrGC84XyGOq8w==} engines: {node: '>=18'} - '@arborium/yaml@2.16.0': - resolution: {integrity: sha512-AAsJ7XlkTxjC/eK3lm3EsYiFyZZuik2s0pGJN/rZcpkQuTqXO/JU1O1tBIENMzu3fYPdgVbyLU8TCwACvbMK4w==} + '@arborium/yaml@2.18.2': + resolution: {integrity: sha512-GtfBbjc66Ep/x3kece1tTiFZ47GBNczfaK0T/fDQ+/06XEOxR0gR1ss1Xh5L9zgro6IftbT39qxoQq1rML7n2A==} engines: {node: '>=18'} - '@arborium/yuri@2.16.0': - resolution: {integrity: sha512-d0kNfadbiyvylXe3q0u5lIcgfWg/tkk0wH3mlYXgJCQj+yPpdHUaKPTl8sDwsDjs+GoNioXG91SMffwqM+Upvw==} + '@arborium/yuri@2.18.2': + resolution: {integrity: sha512-lcu1Z01CZuNFbeFcqEJ1RnNAL5Uw2aEX/YMDE/o8LO7nGG+qMvfR7PqYroN2NPqIJGewUd7VY0zGYKsQ4OP/Yg==} engines: {node: '>=18'} - '@arborium/zig@2.16.0': - resolution: {integrity: sha512-HVhNmzL01z765F2t/AYaRhz9eBFBhVHuN3EzkWy6k1oexkrxLodNVP6QJ20RJtHzPCmWEaXQK6QEVn4iKfA8JQ==} + '@arborium/zig@2.18.2': + resolution: {integrity: sha512-998rW9J0aQOFxQPueMGSBaWkEA62SJvUm6ZjNwKc8wwBLqDwKQWk0xG0hkGG3N4Y6P2+RvE2kI+X9OGM8DE2VQ==} engines: {node: '>=18'} - '@arborium/zsh@2.16.0': - resolution: {integrity: sha512-mt3LNEpFPLXNzQ02sCzvU5IQ2lGzjLYX5n/B1D8IPfPdKZM7OenJLLzspizObhpab0xwcPNG+XO1iuROKvyc8g==} + '@arborium/zsh@2.18.2': + resolution: {integrity: sha512-paqDOoW3ctxXkiyhI/zXZA4TOmIRBqC01Dts6Z6Yp0SmsDAYcOu3o7qu8TuWKSG1CPxS5BhUP/kkr+N1BKICbA==} engines: {node: '>=18'} - '@asamuzakjp/css-color@5.1.11': - resolution: {integrity: sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - - '@asamuzakjp/dom-selector@6.8.1': - resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} - - '@asamuzakjp/generational-cache@1.0.1': - resolution: {integrity: sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - - '@asamuzakjp/nwsapi@2.3.9': - resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} - - '@astrojs/check@0.9.9': - resolution: {integrity: sha512-A5UW8uIuErLWEoRQvzgXpO1gTjUFtK8r7nU2Z7GewAMxUb7bPvpk11qaKKgxqXlHJWlAvaaxy+Xg28A6bmQ1Tg==} + '@astrojs/check@0.9.10': + resolution: {integrity: sha512-zgx/UQMozdjOa3bOxjgeCFdtpE3c9rRX6xHwa+2QXvy8z8Akifu2AtubHyv/zzC2znO8dl8fFWL4K+Ba9kS8HQ==} hasBin: true peerDependencies: typescript: ^5.0.0 || ^6.0.0 - '@astrojs/compiler-binding-darwin-arm64@0.3.2': - resolution: {integrity: sha512-MM8tn8CSimcfytaOla4b6acN8mKWiL/rlAA1fpT3/Wl7dNGSE4y8FjTN/zJVNnb63CsLWG5zZwCt01TXtDKh9g==} + '@astrojs/compiler-binding-android-arm64@0.4.1': + resolution: {integrity: sha512-Wtx2DZORuNTLASLLZ8hlrjFaJe1LUloatcCn9EPq7knBhRpjMGXeJANIJMeBZG4igvz7x+3nyAJM2iwCSW9xog==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@astrojs/compiler-binding-darwin-arm64@0.4.1': + resolution: {integrity: sha512-7iwXcU+hB60Y1SvOfnWHNioT72gDsDQKaDipXh2Onwp/TvQMozhbvhy13wJR8Af940a0h6PbddCeJFpj791UDA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@astrojs/compiler-binding-darwin-x64@0.3.2': - resolution: {integrity: sha512-2lXOlzf8xb7jLomRsf/aswh61/NnGusynB2OwFkK6k4pmOtpfXMYnG0PLfXrEvxXYj69NdCnmUYXtHDd+JOOag==} + '@astrojs/compiler-binding-darwin-x64@0.4.1': + resolution: {integrity: sha512-pifjICos49RXhSVKSDu5gDB0/8j0O7DmxSp1DaWW2PyLG5ekwSkcrfOZto5JqhdI7QYMZB3XOiXpsdOXpS4npA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@astrojs/compiler-binding-linux-arm64-gnu@0.3.2': - resolution: {integrity: sha512-BmU3kWj7qnLrd4vzm49zFEPJ5oFnn1tCT4Vt9hZbqdU5Cmb8GZl7fn6VFsnNfe7B18a2gIFtVzbLINtYl5kBjQ==} + '@astrojs/compiler-binding-linux-arm64-gnu@0.4.1': + resolution: {integrity: sha512-hsZMlNWc6LqWHh9LlSwTq1/XCY7pxA5rkkKIdZRV8mgbOz9OwLvjEoe5Jry13eIZjMUQO8XnQyzk8o/Pjw2YFA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@astrojs/compiler-binding-linux-arm64-musl@0.3.2': - resolution: {integrity: sha512-f0heT9ZZEseSu5bHCeb80eL2DH07ArE6U9xi1WT/PEusNjzPmEr3GJsjG1tRLo5VYUUYX7h3ScaqGmGrMOVGmw==} + '@astrojs/compiler-binding-linux-arm64-musl@0.4.1': + resolution: {integrity: sha512-a3EW27f+Z9uf57vYmpLgUriA1y9wDhKz57PT8D8XlFZt2HZEWhUxKuxI1jvKVI9p8okYee11WXEm/FHY1G9yoQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@astrojs/compiler-binding-linux-x64-gnu@0.3.2': - resolution: {integrity: sha512-M8fOUt0itRpqiGyoEA/ij184s8O+hqbCz3+YozRusOOM3osgGljpDThhbKAJjqh82wOo6FioQ4w8PBvU1XMD5Q==} + '@astrojs/compiler-binding-linux-x64-gnu@0.4.1': + resolution: {integrity: sha512-XruPTKB/SS4DFzeAjQ1ZyM0ieHDjapHkOSnnzRApZ4FXY2YAI7UY3mETjfJiIS/acyZyrnPH5jObv1gATTdUJQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@astrojs/compiler-binding-linux-x64-musl@0.3.2': - resolution: {integrity: sha512-/Kebk8sO6HnLeSd691JkaAPfN7CqR9/KEXmWvyNPkaKNGmj8rTZ/lf2uXtnPu92Lan84UrKdIKVPy1fSo2encQ==} + '@astrojs/compiler-binding-linux-x64-musl@0.4.1': + resolution: {integrity: sha512-E8j7lGanqNpudtkUbsFaOLJhmwFe4Ecqux7K9hkj4wULIPNZRM2bYZNcMSj8r1oWvaUiwZl8LaaNwv3+14jqhw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@astrojs/compiler-binding-wasm32-wasi@0.3.2': - resolution: {integrity: sha512-pUA6xbcOSB7DhfzIArB8BCAkFfAIqriiR7zl5zOStd6oU2G0kIKj+GUdGnyXyhfiv881Hffyk5tC0mR18sDjDw==} + '@astrojs/compiler-binding-wasm32-wasi@0.4.1': + resolution: {integrity: sha512-vNLxIv41ZE+nmPFtw24cRW5ZXG+ZPcAGtgigtjCP8lvcxKI7u2GrXoMsCgEH5fMw8WCEJpwLvsVBg15rJKAkyA==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@astrojs/compiler-binding-win32-arm64-msvc@0.3.2': - resolution: {integrity: sha512-ESruf+6Qkl1trHUFxI6GSf6t52j8yN2kCNSzMWdzt7V/T09tFHrYzrVaJQohb2C9bJUH76pNvX6Zb51+xCQc9Q==} + '@astrojs/compiler-binding-win32-arm64-msvc@0.4.1': + resolution: {integrity: sha512-/xTDgRsFDoTh0/+KFXJ74DY4Jqn8CoSHwa8UP5RAblHfnRHkenwfSl4zYDET61O9vXKLk09UzHjjq09yP20/AQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@astrojs/compiler-binding-win32-x64-msvc@0.3.2': - resolution: {integrity: sha512-wzzVrEbOwbsLWOdEbocskjMRx2aZPxJ7ZbmL+jnpBamFwmigm+2M/wzuM6JWncocgYwLic1csSpalBh96kQKXA==} + '@astrojs/compiler-binding-win32-x64-msvc@0.4.1': + resolution: {integrity: sha512-0x5J6iHZO0Fjo/CVzoIbXKzWnGESftDbEUQ/oXQ61HhUAFoR7+T1jfToZSNAS+gYyBXHSTpMWYC7lzarbhClcg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@astrojs/compiler-binding@0.3.2': - resolution: {integrity: sha512-8w/9CWmYrAJJ8N0SY3O43ws2BgxoW6u3QsD8u2mE140lMYAlwh+tlNoUeSBq22wVheFuiBbR212l6ixZ2IIgCQ==} + '@astrojs/compiler-binding@0.4.1': + resolution: {integrity: sha512-ZYVDW1P58OXyxqZbOMp+/2U9KA7y2esIx9r4pWdpZ/l6fCZhaw4ul+D7EgpRVxYLkyTWqzANbTTUFGPFP8zDHA==} engines: {node: ^20.19.0 || >=22.12.0} - '@astrojs/compiler-rs@0.3.2': - resolution: {integrity: sha512-xlx/T7JovIKduu4ucbTQUxQ5+Q8wxkHxhLjnZk3VlJbhbQ9RLvvuDk1p2YYFYFQ5y14dVm3FGGO4isQXa4F+Tg==} + '@astrojs/compiler-rs@0.4.1': + resolution: {integrity: sha512-//NmAuRhy7eU9iP0ceI5Pymy55M+nUZ//kS6XeOyhBWdDib2KbJOyFaVJ52k7sDkJwTKVox7oPu3SpYiVnGm5A==} engines: {node: '>=22.12.0'} '@astrojs/compiler@2.13.1': resolution: {integrity: sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==} - '@astrojs/internal-helpers@0.10.1': - resolution: {integrity: sha512-5phcroT/vmOOrYuuAxtkbPixy5hePtlz9i8K4OeDv3dNK6/UQRuXPOSRTxIOBbUY5Sonw2UaxjbuVc43Mcir6Q==} - - '@astrojs/internal-helpers@0.10.4': - resolution: {integrity: sha512-nozZSy/mKYLqe4YrqbKtdOszedAfXYCtw3wZ0d+CAjz4GqQ4L9rl1ltIL5BlgwmYVinJg/RZ0MgGuWOdlyRZlA==} + '@astrojs/internal-helpers@0.11.0': + resolution: {integrity: sha512-3rzxJ+xbo0+8YyqOzLziIN32wmsHdCjEVz2sGOpRxJ+Ben/KiLph4ItxBy1abEL+E8fkRzqjg0rfXmaHJGw9JA==} '@astrojs/language-server@2.16.16': resolution: {integrity: sha512-KuS17AOOqH/M5mHXPmKvtp8L+NNteARC7Xjf395+9R9dtJOBndqdStwU4V+OKzYZpgZ+hliV13knzx/oMtFl7Q==} @@ -2802,29 +2940,27 @@ packages: prettier-plugin-astro: optional: true - '@astrojs/markdown-remark@7.2.1': - resolution: {integrity: sha512-jPVNIqTvk+yKviikszv/Y1U4jGUSKpp/Nw48QZV4qjWgp70j4Lkq3lhSDRbWwCfgKvEyO9GHuVbV1dM2WYXy1w==} + '@astrojs/markdown-remark@7.3.1': + resolution: {integrity: sha512-QCjsjZQl0+Cgb91+T3Ip9hyUe1r5aLm4udi584rML9YO3syupbAYE+jWpAxYg+z4lFLNUugPrylFxZ+8qFTClg==} - '@astrojs/markdown-satteri@0.3.4': - resolution: {integrity: sha512-6Lvt/bQZEBW+zzdhPblvfZEy5PGEYJaUsUqaCgwHeRPxZJL1gc9I+DRLKWJjjYTWDzVUTzXlMq4WwSK+X34CVw==} + '@astrojs/markdown-satteri@0.4.1': + resolution: {integrity: sha512-EniHbFNa6SQHDih7JnpPos3NWXO6hdt4raBcOosfGmlfc3gP9CI/sESA3VOf1PgJZ7SFfewlZW9Livn0JugEZg==} - '@astrojs/markdown-satteri@0.3.8': - resolution: {integrity: sha512-n8ItpFTCmlDsVR5+rwDmehSf+jFCYLWmZiisZNGuF7xILqYhsVeBfcha4qgS2Seq3fAc9Tm58ZVrvqFQ6RQgRQ==} - - '@astrojs/mdx@7.0.3': - resolution: {integrity: sha512-RxyIwU0uFam5ftwqKOjpIdhnFxZ/kEikeimLyQy3eGXbHT8WgRGzzesOIHVU8+m9TY8ag5WVOyvV24/GyqPdPQ==} + '@astrojs/mdx@8.0.1': + resolution: {integrity: sha512-VKodp/f3+XE6L0950K+ZOAolY47vdt0R78Ao+L2RdJ1hfAdYffL7IEjc/MsoyuS7CPVvCsd5/I3RP0ZyAIewdQ==} engines: {node: '>=22.12.0'} peerDependencies: - '@astrojs/markdown-satteri': ^0.3.1 - astro: ^7.0.0 + '@astrojs/markdown-remark': ^7.3.0 + '@astrojs/markdown-satteri': ^0.4.0 + astro: ^7.2.6 peerDependenciesMeta: - '@astrojs/markdown-satteri': + '@astrojs/markdown-remark': optional: true - '@astrojs/node@11.0.2': - resolution: {integrity: sha512-/ijULxT+A5Cm8wSwWZ2vgqfim1b05D6B8n/a9l6MMA4FCotIH73g7fL7y76XojKXpTe75FVvQH92OxsMqea9kQ==} + '@astrojs/node@11.1.5': + resolution: {integrity: sha512-CgA+LmG4UWqHxg/Vdc5MdxjjJNZSjKYQQx4uEUwnbj+1ZD2CYumJI3OWg2twsVdj2FlYsB5yvmCC54Re+OK+UQ==} peerDependencies: - astro: ^7.0.0 + astro: ^7.2.1 '@astrojs/prism@4.0.2': resolution: {integrity: sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==} @@ -2833,11 +2969,11 @@ packages: '@astrojs/sitemap@3.7.4': resolution: {integrity: sha512-LbKNC24bdUWcQf/pThB6qLlSqHojxGjZDURIzFocY8rlWnAn2t74nnhnK6S5x0NHriHoAduLEpVjRykmeGiVvA==} - '@astrojs/starlight@0.41.4': - resolution: {integrity: sha512-cRCKZhM2BKYViCakBiN68aVwPn5qj/XtMMq//G54xOWdXXcvic1gMMEI+veNlIKOqqC4QmIjcjk4jiFtlZ3mMg==} + '@astrojs/starlight@0.42.1': + resolution: {integrity: sha512-ABS/A0IfbJeMbuhCKVkrAcO3EWxhpeLveFuL28+7+BQje7ZHa9OXZbUoiLXdYUhH7XFaiAQjAg44RiF2uuZPJw==} peerDependencies: - '@astrojs/markdown-remark': ^7.2.0 - astro: ^7.0.2 + '@astrojs/markdown-remark': ^7.3.0 + astro: ^7.2.10 peerDependenciesMeta: '@astrojs/markdown-remark': optional: true @@ -2849,127 +2985,166 @@ packages: '@astrojs/yaml2ts@0.2.4': resolution: {integrity: sha512-8oddpOae35pJsXPQXhTkM0ypfKPskVsh2bCxRtbf7e+/Epw2nReakFYpLKjZMEr75CsoF203PMnCocpfz0s69A==} - '@atproto-labs/did-resolver@0.2.2': - resolution: {integrity: sha512-ca2B7xR43tVoQ8XxBvha58DXwIH8cIyKQl6lpOKGkPUrJuFoO4iCLlDiSDi2Ueh+yE1rMDPP/qveHdajgDX3WQ==} + '@atproto-labs/did-resolver@0.3.9': + resolution: {integrity: sha512-KBgUdQQ76XL/xjQbuMfVBOEa5jaragR9NPq1uMoM4iXKnW5GGcEMHMPu+WrTxYNBku0b7MhPUfCs1pKtyLBP6g==} + engines: {node: '>=22'} - '@atproto-labs/fetch-node@0.1.10': - resolution: {integrity: sha512-o7hGaonA71A6p7O107VhM6UBUN/g9tTyYohMp1q0Kf6xQ4npnuZYRSHSf2g6reSfGQJ1GoFNjBObETTT1ge/jQ==} - engines: {node: '>=18.7.0'} + '@atproto-labs/fetch-node@0.4.0': + resolution: {integrity: sha512-5Yi8fz/JDGEoObRgRJuglcodB/MJeQnnoqokOGSQK5ItISObSttbGIgHE1UMU1njcwxbvKtbGMWHUCRgqML2Dw==} + engines: {node: '>=22'} - '@atproto-labs/fetch@0.2.3': - resolution: {integrity: sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw==} + '@atproto-labs/fetch@0.3.6': + resolution: {integrity: sha512-ro/J/cnqIp4bnSzDl8N3SkruvQcE3Pze+1H70mKdFfyFcdhPr+7O4lggl4VCbhI84Yqgz47c0xC6F/Yl39SxDA==} + engines: {node: '>=22'} - '@atproto-labs/handle-resolver-node@0.1.20': - resolution: {integrity: sha512-094EL61XN9M7vm22cloSOxk/gcTRaCK52vN7BYgXgdoEI8uJJMTFXenQqu+LRGwiCcjvyclcBqbaz0DzJep50Q==} - engines: {node: '>=18.7.0'} + '@atproto-labs/handle-resolver-node@0.2.10': + resolution: {integrity: sha512-xUAXZ3yTYzOmjgF0PyD4R8yXa0EtCxBextrEuSw7/7UwJgcWnSgHn05SBhrgYiLqqhLcDfJVMJ00u+wv/z8m5A==} + engines: {node: '>=22'} - '@atproto-labs/handle-resolver@0.3.2': - resolution: {integrity: sha512-KIerCzh3qb+zZoqWbIvTlvBY0XPq0r56kwViaJY/LTe/3oPO2JaqlYKS/F4dByWBhHK6YoUOJ0sWrh6PMJl40A==} + '@atproto-labs/handle-resolver@0.4.9': + resolution: {integrity: sha512-I2xrVsgw0M1Gp5qAWQwX8aoq6E79PnNHuWX+mg7zMRpuazA5DWiHoJOyBZHPeEtbtYO3F8g3le7PRL8imaWljw==} + engines: {node: '>=22'} - '@atproto-labs/identity-resolver@0.3.2': - resolution: {integrity: sha512-MYxO9pe0WsFyi5HFdKAwqIqHfiF2kBPoVhAIuH/4PYHzGr799ED47xLhNMxR3ZUYrJm5+TQzWXypGZ0Btw1Ffw==} + '@atproto-labs/identity-resolver@0.4.9': + resolution: {integrity: sha512-dVfbDHybOlDimEdUSbDfCQpMbmf25LNpffxCqSE//hLD86wiUzJQwJn2sHfskZTfwGD896wyY8musfrR3vDnOA==} + engines: {node: '>=22'} - '@atproto-labs/pipe@0.1.1': - resolution: {integrity: sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg==} + '@atproto-labs/pipe@0.2.4': + resolution: {integrity: sha512-n67jCcrC+ouAeO10cWkpPzzLMlDi/lDCU30Us+LGqhOPhT6c4t5ASdBLQi9W3jUQtRzQBt3G9zipF+xKWNvVbw==} + engines: {node: '>=22'} - '@atproto-labs/simple-store-memory@0.1.4': - resolution: {integrity: sha512-3mKY4dP8I7yKPFj9VKpYyCRzGJOi5CEpOLPlRhoJyLmgs3J4RzDrjn323Oakjz2Aj2JzRU/AIvWRAZVhpYNJHw==} + '@atproto-labs/simple-store-memory@0.2.6': + resolution: {integrity: sha512-DD1v7MEfYF3BAcEpMTTpzfBLWLoI2HuyBhku2YpjHoqPrRrhCtE1alkxfPHjtjJVIjuU/XNU0cF/wB3+5FiKsA==} + engines: {node: '>=22'} - '@atproto-labs/simple-store@0.3.0': - resolution: {integrity: sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ==} + '@atproto-labs/simple-store@0.5.1': + resolution: {integrity: sha512-vfvoDhu6ds6BT3Pqe+d2/LBU1WpDRtt69y6zltlfMCoucPm82m1j50/Wb6xTvv+oZ+2j0JyZVXsmXQ12SWYQJg==} + engines: {node: '>=22'} - '@atproto/api@0.19.0': - resolution: {integrity: sha512-7u/EGgkIj4bbslGer2RMQPtMWCPvREcpH0mVagaf5om+NcPzUIZeIacWKANVv95BdMJ7jlcHS7xrkEMPmg2dFw==} + '@atproto/api@0.20.44': + resolution: {integrity: sha512-dl5Lo59tqW42B6TE1968R/iczZBVes6MzrO7ZYaFSVOkFTMEdp+iMAG1jzaj6S43HaOzibFP9kRGyypzzYR5Og==} + engines: {node: '>=22'} - '@atproto/common-web@0.4.17': - resolution: {integrity: sha512-sfxD8NGxyoxhxmM9EUshEFbWcJ3+JHEOZF4Quk6HsCh1UxpHBmLabT/vEsAkDWl+C/8U0ine0+c/gHyE/OZiQQ==} + '@atproto/common-web@0.5.12': + resolution: {integrity: sha512-FumNnUOUsk68gP+jU0sXY2wY2piqFV9/qU2YaoQq/IZknhJBlLYCzjQXXCN0FCzxAZWD0YUzgydeyuRvFoAxfA==} + engines: {node: '>=22'} - '@atproto/did@0.2.1': - resolution: {integrity: sha512-1i5BTU2GnBaaeYWhxUOnuEKFVq9euT5+dQPFabHpa927BlJ54PmLGyBBaOI7/NbLmN5HWwBa18SBkMpg3jGZRA==} + '@atproto/did@0.5.5': + resolution: {integrity: sha512-ibCxTPsPQtrtX+iidnE0bkMBHuoWFBdVfPFfCAlUKY6HfkqdUUxItzvQu9AMucYDhP6vJ15HLVj+QhNY2jtIvw==} + engines: {node: '>=22'} - '@atproto/lex-data@0.0.12': - resolution: {integrity: sha512-aekJudcK1p6sbTqUv2bJMJBAGZaOJS0mgDclpK3U6VuBREK/au4B6ffunBFWgrDfg0Vwj2JGyEA7E51WZkJcRw==} + '@atproto/jwk-jose@0.2.4': + resolution: {integrity: sha512-gzDoA0JTwnc0ZJOBLM7WX9xFxtynRS2K1Bofb8epzoMWDQvyvfbPcfkdPrKFM7NXCFUVpGpBnsCB8KFPTf1rCg==} + engines: {node: '>=22'} - '@atproto/lex-json@0.0.12': - resolution: {integrity: sha512-XlEpnWWZdDJ5BIgG25GyH+6iBfyrFL18BI5JSE6rUfMObbFMrQRaCuRLQfryRXNysVz3L3U+Qb9y8KcXbE8AcA==} + '@atproto/jwk-webcrypto@0.3.4': + resolution: {integrity: sha512-UsFIUozqnRecXPo6HgKV4PW4FqYHxX1V3iAe0rRV6Q2RSfYD8V2mZ89pv8NpvJynnaqJArBQ7HZlcg0F4tRYhA==} + engines: {node: '>=22'} - '@atproto/lexicon@0.6.1': - resolution: {integrity: sha512-/vI1kVlY50Si+5MXpvOucelnYwb0UJ6Qto5mCp+7Q5C+Jtp+SoSykAPVvjVtTnQUH2vrKOFOwpb3C375vSKzXw==} + '@atproto/jwk@0.7.4': + resolution: {integrity: sha512-tq7TUDmNfe1yDfpRgdGQMJdl9TUlJmREQNCag9yg5w8Evu+TOiFiLgiOCbo7X4ouRPSgd1DpOzXbUa8UyKKMZA==} + engines: {node: '>=22'} - '@atproto/syntax@0.4.3': - resolution: {integrity: sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA==} + '@atproto/lex-data@0.1.7': + resolution: {integrity: sha512-kW/dPLqo/WgCLV+XESR4JKwV6c1rZWJGOfuPupZGTjEDAKoBbKXdaEzX9/1vKQYbZ9U3j0DS/n7OFFK7wBugyQ==} + engines: {node: '>=22'} - '@atproto/xrpc@0.7.7': - resolution: {integrity: sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA==} + '@atproto/lex-json@0.1.6': + resolution: {integrity: sha512-mvrAd0lbyuecIHjyld8QN6MN6CBf4j0GCxLzegsvLh0SvDf+GbYWklkcQqmITL44yFQOwmA/QNIQj0Uvh7+R/g==} + engines: {node: '>=22'} - '@aws-sdk/checksums@3.1000.29': - resolution: {integrity: sha512-Dtu0gr4dnATZAPwEYbpCsG+MpLM7OAliy2gTepEFQwl1vZ6DL3QMH2FveMa3HLvPsOdhJsPRB3KtxVhph9T75A==} + '@atproto/lexicon@0.7.14': + resolution: {integrity: sha512-hDG2+61JTrvxDFtoojDFxKmZkFVl/lR/jFi82gSN0zNDjr+dlpUGKlG9MoPBkUKK83+Pi+I2jZ55xXboJq6JTA==} + engines: {node: '>=22'} + + '@atproto/oauth-client-node@0.5.7': + resolution: {integrity: sha512-MBzhBcDu3YTojlnJbCHH7ouvzpkhVEpK9FMJsW4QZ1UiujkEAMq7jL77X54WQl7YF/KfaCWxZ54liC0nlRMoPw==} + engines: {node: '>=22'} + + '@atproto/oauth-client@0.8.7': + resolution: {integrity: sha512-DbWMFcy6t2HyyPKVEhKeh8xNNwM6sokPl/Qk7ctZLvEu+FT4GKsUppgf2hkWqeUyVc7nacu+nE7dCkYwPZmBKA==} + engines: {node: '>=22'} + + '@atproto/oauth-types@0.7.6': + resolution: {integrity: sha512-FgFe2mJOUgJSQBxKBwLWv+lFyDxBnlqA+wfSLabCNnabtNuSO3UQI0CGI72K7/OQRQvdwkcYQMoUuw3Rqex/mg==} + engines: {node: '>=22'} + + '@atproto/syntax@0.7.6': + resolution: {integrity: sha512-luKQTcWw1H1jLmYvX34ldBqNjz2orF082njmcF9fxbWTqVhsO+TpY0FHRKVPoV7dwL0Y3L16DNz1ma0LFGH25g==} + engines: {node: '>=22'} + + '@atproto/xrpc@0.8.13': + resolution: {integrity: sha512-htpi93/Zqyk5WsT+RrWemxMcJFJx2M4VT8i8avuWJTyr7AZ42qvPsIdVsaPdOOS3rZwodq/SdZXJFgspJ4yc5g==} + engines: {node: '>=22'} + + '@aws-sdk/checksums@3.1001.0': + resolution: {integrity: sha512-6uTniZc87q+B5eXouGTl+7Tmc482rEeCcvxpsvREP8EfF0gvloRZ41UOA9sbSJlyy8TbqIBXb3kKfKarEArUQA==} engines: {node: '>=20.0.0'} - '@aws-sdk/client-s3@3.1121.0': - resolution: {integrity: sha512-hBnoqaVBeWdkgXcJElMXA2yUZWkBCBntu2qmN+tfqmzC+j4LzJC3ox8qIgS2WdMS1cb8UwyBogUVrkRXybNm0A==} + '@aws-sdk/client-s3@3.1133.0': + resolution: {integrity: sha512-b7IVvFjNxNt6i//qUr2tWQC1JhUY0HpIiM41vvXv30br/nuXjYtKAADrMFluxGYX0X7LQB5GvzUcFDxNOoLMLg==} engines: {node: '>=20.0.0'} - '@aws-sdk/core@3.977.9': - resolution: {integrity: sha512-reqPFEQrZxDZpeGj4PFMepBeR5LGYHRqq/L0motTzgFkCRBA4rFdaVXDSLYyGHhxVz7sT2PDnPN9CluGSfgyJA==} + '@aws-sdk/core@3.978.0': + resolution: {integrity: sha512-2yX9LUmxPklVjSGTb8dfnWRJSiFQ3TeH2nn7G1mdKHTfnabzF0+gfrS8rYfLWmZrQ8A3mEcxMJjRc51dL5KWaA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-env@3.972.70': - resolution: {integrity: sha512-H404B7dJl2mCrBqahDEYsanB0xhdDp6tXnXcTUnXmmpy2Q3J0Ho0bUajZ2jr/RdwzCyS59Gi8xXIFwPLGBl6Uw==} + '@aws-sdk/credential-provider-env@3.972.71': + resolution: {integrity: sha512-JN+JHruYZw3GUZB8YGAlDk4wTDPOEAEEdEzj5nS0xodWR4smzHsN7PnK2j6IeOsDIj2aqua5DSbhXl9Gtf90FQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-http@3.972.72': - resolution: {integrity: sha512-X98zYOrVOeuosCX+6ktf29FC2N2GHPLia7qv6mzPzTc+RPAuHWCDS++Z6JK7eGYqb/v6uaW7bAXaOvDBfol+0w==} + '@aws-sdk/credential-provider-http@3.972.73': + resolution: {integrity: sha512-uyYYnJOnlis8uQzaYGPd7N1JoioCoNpXgnkXYixsWJXHXgXyYi8WXJSDfofxJeWfQIGWLe2Nwyq60Uc7MZdVOg==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-ini@3.973.15': - resolution: {integrity: sha512-Rykg6s5ceBuynMOGWgoowO4N+27JfnqXAnVaSunZl0hOO1XodSrxGNz6sCEbnmS0lAfQZDKyb3fbr46gSuv6Sg==} + '@aws-sdk/credential-provider-ini@3.973.16': + resolution: {integrity: sha512-i++ly+0Uxa+u3ebSSyr0S/3CFhFJDxCXT3+Zj+mW2bXenEx5bKGCdTIKFu39SgXBNhWDjex/8cXUx9MUTMCrTw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-login@3.972.77': - resolution: {integrity: sha512-Jb59xfEISoN5mmbnA+HYqdtrSX3CgCtJoof+V5D8/TgUI56W63GEEd5Y58WijU3Ou6+WEgaLD1feVzaRXV5IDQ==} + '@aws-sdk/credential-provider-login@3.972.78': + resolution: {integrity: sha512-eUtswnXu0+Ii9ieRK+0L7aPFV3Z/dnW2VntJzjBP9xs8s+8p5nBNuymIXtXwZ+5r5+XJP3e32nMkuZ/r0HozEA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-node@3.972.81': - resolution: {integrity: sha512-Rml+WitoFvXmv6JZ18U/xGdGDGGvB/mOin0ya0lTnTrdC0Z1lrVxTYh7iNklZBcvcRMrs4DoEf6xy1KWyrLQQw==} + '@aws-sdk/credential-provider-node@3.972.83': + resolution: {integrity: sha512-jdso7ejzfRnatxMUZK4S/U6KbaDPCvfIV4XL+IQAPFDBt5rj5Fq595euqlK8Le4lNCMFR9oUpt+1l0aMgaayOQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-process@3.972.70': - resolution: {integrity: sha512-2ry03fGRJr4sV3jI+ocjj5JqALnFD6ymM5KiNCDZMvq8bX2GSbE0vji4aM43TVCl2nXqqLRZaUxdq/KeWRAY4Q==} + '@aws-sdk/credential-provider-process@3.972.71': + resolution: {integrity: sha512-lYmXJa4gvq4xN1lrT5NiP5vIYYKcGWAdj8y+8o6dlcateB5eF3Dn8DtmjjHKfMBrTPAMr2pebIiX/UOj8c1/UA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-sso@3.973.14': - resolution: {integrity: sha512-jkhg/8ocAAoc0RFyLMhCw+/zZh7gystQgd4F4hznNa8P4Cc501PQmxd+jGLiMHodPJ+7Zv/3znM62gZojyasmA==} + '@aws-sdk/credential-provider-sso@3.973.15': + resolution: {integrity: sha512-6Jhcf4v0pSFdjk1EW2kvzuEBKD+UZ2uNcHUIglKKLndD20YhvkL2kdmDOV5/j4mYuWWwe/a1FQ1aomU86/Cg5Q==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.76': - resolution: {integrity: sha512-d3AGyVu759PGr35mEB2s22xxlNEA5rpdxtSPJthfPFJvoQ8dt357iVPECqWfUxXp1toJAvKmbtcIYVGigaGsCA==} + '@aws-sdk/credential-provider-web-identity@3.972.77': + resolution: {integrity: sha512-uylIQSUWpfLuH2LovxEEfwzJGM/SabLOfLMg6YXu/E8jJEKUdpdILCVCQCdFvHyu/7dLJOHPMfrSwduxO56NkQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/lib-storage@3.1121.0': - resolution: {integrity: sha512-sx86QqM0/HjKNCS5eQGcaP9Q8GKg3FtCExO/6FfGyw00JNUsFJPmEKNCJIkWY7OmKS9jIOuJe/DtAgfr/+G/bQ==} + '@aws-sdk/lib-storage@3.1133.0': + resolution: {integrity: sha512-vPPVsfhtFDsZT0V96ViNrfNfpUyzR5KWFJ/CWKL+x+NMmI4XxWVx2X2/ZG1P9khImLoSnfQwxlebZvroeqhIng==} engines: {node: '>=20.0.0'} peerDependencies: - '@aws-sdk/client-s3': ^3.1121.0 + '@aws-sdk/client-s3': ^3.1133.0 - '@aws-sdk/middleware-sdk-s3@3.972.75': - resolution: {integrity: sha512-wMIsNumRVKaNMKhvU/s9VrdEwE8S6gSzXp4RygFG5BEMnGkkXf8cjh8zf7cKJBpUDpqTWqwbz5isEgp9rH6Lng==} + '@aws-sdk/middleware-sdk-s3@3.972.76': + resolution: {integrity: sha512-NfnTkVUTBKTBuBgqaapFK9r3YdkKt1b2oRvgLzZq91bwNKh6ZS0S7sEcheguttREaL4iyfs/xQnqD7Z7AsWSsA==} engines: {node: '>=20.0.0'} - '@aws-sdk/nested-clients@3.997.44': - resolution: {integrity: sha512-NhEgryjlBF9w38ZXqGymQV28IhkYa1mKhlbYnqIis57AYwWGVYfUPgg/qC2rLRqOUfblxx++irvju10kVTa8Vw==} + '@aws-sdk/nested-clients@3.997.45': + resolution: {integrity: sha512-mooq9Q+jLa18VoM7HouczmslZU60iiB0aKc/Ztnq/luIL1ud0z4DnYprLR/ZO1gp331S9tJctM1HZr7u6YKBXQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/s3-request-presigner@3.1121.0': - resolution: {integrity: sha512-uudb+S0RTbdmBd2ChRCnDbjK1lbZsBwNtFeCnC1lusWUYpZJ12cYzf7E0HhJzhPV4W83RQgxFNDAh2ZNhuGSJw==} + '@aws-sdk/s3-request-presigner@3.1133.0': + resolution: {integrity: sha512-8e9ouff7Lenl1d6XF5o2n/BxFq1cdq8mSvFy9/PjXG2OKSLmTBvaX3d8QnOCTGMZe7Pptr7fVEYb+Va+JpaV+w==} engines: {node: '>=20.0.0'} '@aws-sdk/signature-v4-multi-region@3.996.46': resolution: {integrity: sha512-L+2xZTye/2T96f3lwCws0Zw6GG2JHZW9e8FpVgGBeeExSKyeoZ6CWRpBml/7DNiK/O26jrgPM9F+Ay8VkgzUWQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/token-providers@3.1116.0': - resolution: {integrity: sha512-ygIivKqh8aHzNkucOCXHyIBgBpLPfrSI0mCqXF+vLBsPTUKqj0VSqAY0GFPe7lQl4HntjOcQ+KSyS7oUV2C54Q==} + '@aws-sdk/token-providers@3.1129.0': + resolution: {integrity: sha512-Sbl3rpzQdsG4ZK2zh0JWUYyZPKKorJlVOddA2T0DVbKJFrsW8J6wgnslxxUH04+WaBMr4A1HzJZvZX0xUvkniA==} engines: {node: '>=20.0.0'} '@aws-sdk/types@3.974.5': @@ -2984,161 +3159,159 @@ packages: resolution: {integrity: sha512-sl4Bm6yiMNYrZKkqqDFWN0UfnWhlS8ivKxrYl+6t0gCLrqr8y3B2IqZZbFRkfaVVp7C/baApyh71P+LeE1A2sQ==} engines: {node: '>=18.0.0'} - '@babel/code-frame@7.29.0': - resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.29.7': resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.29.0': - resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} engines: {node: '>=6.9.0'} - '@babel/core@7.29.6': - resolution: {integrity: sha512-QdxmAo/ikZqqRGA8s43ww8lcql6naWRvEz0FFrl6MIlc7Gi6TroXnSdWa5U/kq6fzcpqpHesicQxFZIieZbyIA==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.29.1': - resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} engines: {node: '>=6.9.0'} '@babel/generator@7.29.8': resolution: {integrity: sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.27.3': - resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + '@babel/helper-annotate-as-pure@7.29.7': + resolution: {integrity: sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.28.6': - resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.28.6': - resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} + '@babel/helper-create-class-features-plugin@7.29.7': + resolution: {integrity: sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.28.5': - resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} + '@babel/helper-create-regexp-features-plugin@7.29.7': + resolution: {integrity: sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.6.6': - resolution: {integrity: sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==} + '@babel/helper-define-polyfill-provider@0.6.8': + resolution: {integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.28.5': - resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + '@babel/helper-member-expression-to-functions@7.29.7': + resolution: {integrity: sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.28.6': - resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.28.6': - resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.27.1': - resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + '@babel/helper-optimise-call-expression@7.29.7': + resolution: {integrity: sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.28.6': - resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + '@babel/helper-plugin-utils@7.29.7': + resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} engines: {node: '>=6.9.0'} - '@babel/helper-remap-async-to-generator@7.27.1': - resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} + '@babel/helper-remap-async-to-generator@7.29.7': + resolution: {integrity: sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.28.6': - resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} + '@babel/helper-replace-supers@7.29.7': + resolution: {integrity: sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': - resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + '@babel/helper-skip-transparent-expression-wrappers@7.29.7': + resolution: {integrity: sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.29.7': resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@8.0.0': + resolution: {integrity: sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg==} + engines: {node: ^22.18.0 || >=24.11.0} '@babel/helper-validator-identifier@7.29.7': resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + '@babel/helper-validator-identifier@8.0.4': + resolution: {integrity: sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==} + engines: {node: ^22.18.0 || >=24.11.0} + + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.28.6': - resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==} + '@babel/helper-wrap-function@7.29.7': + resolution: {integrity: sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==} engines: {node: '>=6.9.0'} '@babel/helpers@7.29.7': resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.0': - resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.29.8': resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': - resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} + '@babel/parser@8.0.5': + resolution: {integrity: sha512-51RXvQNFakaS0bTpYiGkxNbUVwkPO4kONv6EVLorZABxsx+KZ6Z7uSYvi/wmKS/+X+rfj9RvOw0/ZNh+cmI0Rw==} + engines: {node: ^22.18.0 || >=24.11.0} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.29.7': + resolution: {integrity: sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': - resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.29.7': + resolution: {integrity: sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': - resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.29.7': + resolution: {integrity: sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': - resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} + '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@7.29.7': + resolution: {integrity: sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.29.7': + resolution: {integrity: sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6': - resolution: {integrity: sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.29.7': + resolution: {integrity: sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -3149,26 +3322,26 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-assertions@7.28.6': - resolution: {integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==} + '@babel/plugin-syntax-import-assertions@7.29.7': + resolution: {integrity: sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-attributes@7.28.6': - resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==} + '@babel/plugin-syntax-import-attributes@7.29.7': + resolution: {integrity: sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.28.6': - resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} + '@babel/plugin-syntax-jsx@7.29.7': + resolution: {integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.28.6': - resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} + '@babel/plugin-syntax-typescript@7.29.7': + resolution: {integrity: sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3179,350 +3352,350 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-arrow-functions@7.27.1': - resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} + '@babel/plugin-transform-arrow-functions@7.29.7': + resolution: {integrity: sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.29.0': - resolution: {integrity: sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==} + '@babel/plugin-transform-async-generator-functions@7.29.7': + resolution: {integrity: sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-to-generator@7.28.6': - resolution: {integrity: sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==} + '@babel/plugin-transform-async-to-generator@7.29.7': + resolution: {integrity: sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoped-functions@7.27.1': - resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} + '@babel/plugin-transform-block-scoped-functions@7.29.7': + resolution: {integrity: sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.28.6': - resolution: {integrity: sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==} + '@babel/plugin-transform-block-scoping@7.29.7': + resolution: {integrity: sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-properties@7.28.6': - resolution: {integrity: sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==} + '@babel/plugin-transform-class-properties@7.29.7': + resolution: {integrity: sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-static-block@7.28.6': - resolution: {integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==} + '@babel/plugin-transform-class-static-block@7.29.7': + resolution: {integrity: sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.28.6': - resolution: {integrity: sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==} + '@babel/plugin-transform-classes@7.29.7': + resolution: {integrity: sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-computed-properties@7.28.6': - resolution: {integrity: sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==} + '@babel/plugin-transform-computed-properties@7.29.7': + resolution: {integrity: sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.28.5': - resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==} + '@babel/plugin-transform-destructuring@7.29.7': + resolution: {integrity: sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dotall-regex@7.28.6': - resolution: {integrity: sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==} + '@babel/plugin-transform-dotall-regex@7.29.7': + resolution: {integrity: sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-keys@7.27.1': - resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} + '@babel/plugin-transform-duplicate-keys@7.29.7': + resolution: {integrity: sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0': - resolution: {integrity: sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.7': + resolution: {integrity: sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-dynamic-import@7.27.1': - resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} + '@babel/plugin-transform-dynamic-import@7.29.7': + resolution: {integrity: sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-explicit-resource-management@7.28.6': - resolution: {integrity: sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==} + '@babel/plugin-transform-explicit-resource-management@7.29.7': + resolution: {integrity: sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.28.6': - resolution: {integrity: sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==} + '@babel/plugin-transform-exponentiation-operator@7.29.7': + resolution: {integrity: sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-export-namespace-from@7.27.1': - resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} + '@babel/plugin-transform-export-namespace-from@7.29.7': + resolution: {integrity: sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-for-of@7.27.1': - resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} + '@babel/plugin-transform-for-of@7.29.7': + resolution: {integrity: sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-function-name@7.27.1': - resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} + '@babel/plugin-transform-function-name@7.29.7': + resolution: {integrity: sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-json-strings@7.28.6': - resolution: {integrity: sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==} + '@babel/plugin-transform-json-strings@7.29.7': + resolution: {integrity: sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-literals@7.27.1': - resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} + '@babel/plugin-transform-literals@7.29.7': + resolution: {integrity: sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.28.6': - resolution: {integrity: sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==} + '@babel/plugin-transform-logical-assignment-operators@7.29.7': + resolution: {integrity: sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-member-expression-literals@7.27.1': - resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} + '@babel/plugin-transform-member-expression-literals@7.29.7': + resolution: {integrity: sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-amd@7.27.1': - resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} + '@babel/plugin-transform-modules-amd@7.29.7': + resolution: {integrity: sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.28.6': - resolution: {integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==} + '@babel/plugin-transform-modules-commonjs@7.29.7': + resolution: {integrity: sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.29.4': - resolution: {integrity: sha512-N7QmZ0xRZfjHOfZeQLJjwgX2zS9pdGHSVl/cjSGlo4dXMqvurfxXDMKY4RqEKzPozV78VMcd0lxyG13mlbKc4w==} + '@babel/plugin-transform-modules-systemjs@7.29.8': + resolution: {integrity: sha512-6iSnEK0zlkLKU4heofK/AdmRD4e2SHVpJMtrwnTCzhnaM98ria4rTrOXBBi45BTTYnJtO8txnPsX4fChYXkmeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-umd@7.27.1': - resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} + '@babel/plugin-transform-modules-umd@7.29.7': + resolution: {integrity: sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-named-capturing-groups-regex@7.29.0': - resolution: {integrity: sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==} + '@babel/plugin-transform-named-capturing-groups-regex@7.29.7': + resolution: {integrity: sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-new-target@7.27.1': - resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} + '@babel/plugin-transform-new-target@7.29.7': + resolution: {integrity: sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.28.6': - resolution: {integrity: sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==} + '@babel/plugin-transform-nullish-coalescing-operator@7.29.7': + resolution: {integrity: sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-numeric-separator@7.28.6': - resolution: {integrity: sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==} + '@babel/plugin-transform-numeric-separator@7.29.7': + resolution: {integrity: sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.28.6': - resolution: {integrity: sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==} + '@babel/plugin-transform-object-rest-spread@7.29.7': + resolution: {integrity: sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-super@7.27.1': - resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} + '@babel/plugin-transform-object-super@7.29.7': + resolution: {integrity: sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-catch-binding@7.28.6': - resolution: {integrity: sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==} + '@babel/plugin-transform-optional-catch-binding@7.29.7': + resolution: {integrity: sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.28.6': - resolution: {integrity: sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==} + '@babel/plugin-transform-optional-chaining@7.29.7': + resolution: {integrity: sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-parameters@7.27.7': - resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==} + '@babel/plugin-transform-parameters@7.29.7': + resolution: {integrity: sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-methods@7.28.6': - resolution: {integrity: sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==} + '@babel/plugin-transform-private-methods@7.29.7': + resolution: {integrity: sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-property-in-object@7.28.6': - resolution: {integrity: sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==} + '@babel/plugin-transform-private-property-in-object@7.29.7': + resolution: {integrity: sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-property-literals@7.27.1': - resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} + '@babel/plugin-transform-property-literals@7.29.7': + resolution: {integrity: sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-constant-elements@7.27.1': - resolution: {integrity: sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==} + '@babel/plugin-transform-react-constant-elements@7.29.7': + resolution: {integrity: sha512-J0wGhKan+rIiE2OhfhRptySLrJ6SjQYM6b6N1FMlhyhCcw1Mig8vQjWchyB+bgHGDvaWo6Diu6CLRMra2uMtmg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-display-name@7.28.0': - resolution: {integrity: sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==} + '@babel/plugin-transform-react-display-name@7.29.7': + resolution: {integrity: sha512-+1wdDMGNb4UPeY3Q4L5yLiYe6TXPXubs4NjrgRFw13hPRLJfEMw2Q5OXkee6/IfdqePIeW4Jjwe3aBh7SdKz4Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-development@7.27.1': - resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} + '@babel/plugin-transform-react-jsx-development@7.29.7': + resolution: {integrity: sha512-Xfy3UVMF04+ypnFbkhvfqtmvwfe92qwQdbGZVonhE+6v35GzlofmOnA1szaZqzb9xYWr0nl1e5EMmzi0DNON1g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.28.6': - resolution: {integrity: sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==} + '@babel/plugin-transform-react-jsx@7.29.7': + resolution: {integrity: sha512-WsZulLVBUHXVj2cUcPVx6UE21TpalB6bHbSFErKT0Ib++ax24jjXe73FqlWvdylFOjiuPHYi6VCcgRad1ItN+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-pure-annotations@7.27.1': - resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==} + '@babel/plugin-transform-react-pure-annotations@7.29.7': + resolution: {integrity: sha512-H5E+HBgDpr6Q5t+Aj11tL7XkIui1jhbIoArVQnqjgXo5/3YxkN7ZEBcWF4RQlB0T4rrxJQbXS6kiFV6B7XTqUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.29.0': - resolution: {integrity: sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==} + '@babel/plugin-transform-regenerator@7.29.8': + resolution: {integrity: sha512-0UpIXPtdDtMXfnV2OJAVMLpj3H/92vmkA6lpSRakmycJvj3VUy6Xs1dM8tXRugupykr5WB+LpiVl0J8LMVg2mg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regexp-modifiers@7.28.6': - resolution: {integrity: sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==} + '@babel/plugin-transform-regexp-modifiers@7.29.7': + resolution: {integrity: sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-reserved-words@7.27.1': - resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} + '@babel/plugin-transform-reserved-words@7.29.7': + resolution: {integrity: sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-shorthand-properties@7.27.1': - resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} + '@babel/plugin-transform-shorthand-properties@7.29.7': + resolution: {integrity: sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-spread@7.28.6': - resolution: {integrity: sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==} + '@babel/plugin-transform-spread@7.29.8': + resolution: {integrity: sha512-4S9ksMGVWUshvgK0mKfvZky7leuG5/uoFVwMpAomJ8bMoDJiNHRVmc1EglwW/CmGVSqqWpEbXm9FmbRit22qoA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-sticky-regex@7.27.1': - resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} + '@babel/plugin-transform-sticky-regex@7.29.7': + resolution: {integrity: sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-template-literals@7.27.1': - resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} + '@babel/plugin-transform-template-literals@7.29.7': + resolution: {integrity: sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.27.1': - resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} + '@babel/plugin-transform-typeof-symbol@7.29.7': + resolution: {integrity: sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.28.6': - resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==} + '@babel/plugin-transform-typescript@7.29.7': + resolution: {integrity: sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-escapes@7.27.1': - resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} + '@babel/plugin-transform-unicode-escapes@7.29.7': + resolution: {integrity: sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-property-regex@7.28.6': - resolution: {integrity: sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==} + '@babel/plugin-transform-unicode-property-regex@7.29.7': + resolution: {integrity: sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-regex@7.27.1': - resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} + '@babel/plugin-transform-unicode-regex@7.29.7': + resolution: {integrity: sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-sets-regex@7.28.6': - resolution: {integrity: sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==} + '@babel/plugin-transform-unicode-sets-regex@7.29.7': + resolution: {integrity: sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.29.0': - resolution: {integrity: sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==} + '@babel/preset-env@7.29.7': + resolution: {integrity: sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3532,48 +3705,40 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/preset-react@7.28.5': - resolution: {integrity: sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==} + '@babel/preset-react@7.29.7': + resolution: {integrity: sha512-C+PV1TFUPTmBQGoPBL8j2QmLpZ117YTCwxIZeJOM96GbYMFSc7/pOXU5lVykwnZxyTqQxRsvoRk6f2FktZgGHA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/preset-typescript@7.28.5': - resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==} + '@babel/preset-typescript@7.29.7': + resolution: {integrity: sha512-/Foi8vKY2EVbed/1eZx0gJEEwHAIxogrySI7rULcRIvhZzbvoE/b5qG5Ghc0WKAFKOHA9SD1x7RsFlOYdutIiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.28.6': - resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} - engines: {node: '>=6.9.0'} - '@babel/runtime@7.29.7': resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} engines: {node: '>=6.9.0'} - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} - engines: {node: '>=6.9.0'} - '@babel/template@7.29.7': resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.29.0': - resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + '@babel/traverse@7.29.8': + resolution: {integrity: sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==} engines: {node: '>=6.9.0'} '@babel/types@7.29.8': resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} engines: {node: '>=6.9.0'} - '@base-ui/react@1.5.0': - resolution: {integrity: sha512-z1gSAlced1yY+iM+mHDEtIkD8UI3Ebs52MuBPxvV6f5hRutk+xvCH/wuB7hDqDzK9JG5FoMz5nhrqtSs1wjt1A==} + '@babel/types@8.0.5': + resolution: {integrity: sha512-eVdMqi3ej5aHhyQ2Si6yD2cAWeV8FJK9UrhK5aL0Sd8hu5GhT+YswhVNbVheOGVYMg8kuGuMaUpkB3stjj4z8A==} + engines: {node: ^22.18.0 || >=24.11.0} + + '@base-ui/react@1.8.0': + resolution: {integrity: sha512-P0/1sxo6SBVZOklKMIedvTWqw2s2IQzi9x5bIVsXu980cuSOD4NeuRSs+/L7LZQfDkZP/uRZyGPyfFl/B1oH+Q==} engines: {node: '>=14.0.0'} peerDependencies: '@date-fns/tz': ^1.2.0 @@ -3589,8 +3754,8 @@ packages: date-fns: optional: true - '@base-ui/utils@0.2.9': - resolution: {integrity: sha512-x/PDDCYzoqPpjrdyb3VcyylTI2IjUXEtYDGi5foh7KsnmNJIIaVwA2GLgDH1dps1GgXiJbA60hM+AyuTfQzIvw==} + '@base-ui/utils@0.4.0': + resolution: {integrity: sha512-bO9fz25kKtPf+aZVyfQrC0PDmJdmVni31W2hCS5/Owb+inwdIL3XU26pCPRPlt4LSxZrBgLwubXQXQlKaFEZzw==} peerDependencies: '@types/react': ^17 || ^18 || ^19 react: ^17 || ^18 || ^19 @@ -3603,264 +3768,177 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} - '@biomejs/biome@2.4.4': - resolution: {integrity: sha512-tigwWS5KfJf0cABVd52NVaXyAVv4qpUXOWJ1rxFL8xF1RVoeS2q/LK+FHgYoKMclJCuRoCWAPy1IXaN9/mS61Q==} + '@biomejs/biome@2.5.14': + resolution: {integrity: sha512-0FabLIjd4M/dm8VFI86RMaLLdgepzbdfiAL2R8cr7V81OYYrP1w7Z73KfAwPK5h9SrEBXTzNG2y+mBwPo9xRnw==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.4.4': - resolution: {integrity: sha512-jZ+Xc6qvD6tTH5jM6eKX44dcbyNqJHssfl2nnwT6vma6B1sj7ZLTGIk6N5QwVBs5xGN52r3trk5fgd3sQ9We9A==} + '@biomejs/cli-darwin-arm64@2.5.14': + resolution: {integrity: sha512-UnzaXO65L4tsZimFITFP2M121GyhDcWFrT3pL5ZJ5U4XcS/0L5VHYytVohdCf/gnDUFHgl2I9xnt5bV/J1kxHQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.4.4': - resolution: {integrity: sha512-Dh1a/+W+SUCXhEdL7TiX3ArPTFCQKJTI1mGncZNWfO+6suk+gYA4lNyJcBB+pwvF49uw0pEbUS49BgYOY4hzUg==} + '@biomejs/cli-darwin-x64@2.5.14': + resolution: {integrity: sha512-kiy8qA16K93J7uvFfWi4LgjqDpnRKyePAna6A0Y4jxyUga35SYpIZ2cNWlhy0lsfgqRenCpfymnJWEZ6mgpRgA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.4.4': - resolution: {integrity: sha512-+sPAXq3bxmFwhVFJnSwkSF5Rw2ZAJMH3MF6C9IveAEOdSpgajPhoQhbbAK12SehN9j2QrHpk4J/cHsa/HqWaYQ==} + '@biomejs/cli-linux-arm64-musl@2.5.14': + resolution: {integrity: sha512-SJ9PrZkBnnH9dHJDnxk34vKs0GB2dbsioaft6/hPhWJ7AHpwYH83Isnhj0FSRpFkGgpVfJ1lds23ApB2czUDLQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64@2.4.4': - resolution: {integrity: sha512-V/NFfbWhsUU6w+m5WYbBenlEAz8eYnSqRMDMAW3K+3v0tYVkNyZn8VU0XPxk/lOqNXLSCCrV7FmV/u3SjCBShg==} + '@biomejs/cli-linux-arm64@2.5.14': + resolution: {integrity: sha512-vO/9BaU1n30CiFNLx49gMTMtbCAAqlo/EqFoG0BU3deQInTbJrmXSmTQ9e3FoDZIKQnvSLDVNL4lx1ci7y1T1Q==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64-musl@2.4.4': - resolution: {integrity: sha512-gGvFTGpOIQDb5CQ2VC0n9Z2UEqlP46c4aNgHmAMytYieTGEcfqhfCFnhs6xjt0S3igE6q5GLuIXtdQt3Izok+g==} + '@biomejs/cli-linux-x64-musl@2.5.14': + resolution: {integrity: sha512-2kI5PrMgW5dcEZYrstLPmUmCwkUwZY39rP4BN93Vxbwcs2O57LDQOktUZZYPvvspN5i0mhGr3TJtF5sU26NUWg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [musl] - '@biomejs/cli-linux-x64@2.4.4': - resolution: {integrity: sha512-R4+ZCDtG9kHArasyBO+UBD6jr/FcFCTH8QkNTOCu0pRJzCWyWC4EtZa2AmUZB5h3e0jD7bRV2KvrENcf8rndBg==} + '@biomejs/cli-linux-x64@2.5.14': + resolution: {integrity: sha512-VHZRa7CCQBUWKxNwUvHJeuW03WFRgN5NWO//SDGOitc9QIeNyfA42V9zlKm+x82xFSG9Bzi5fi+hbhm9anO8yA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [glibc] - '@biomejs/cli-win32-arm64@2.4.4': - resolution: {integrity: sha512-trzCqM7x+Gn832zZHgr28JoYagQNX4CZkUZhMUac2YxvvyDRLJDrb5m9IA7CaZLlX6lTQmADVfLEKP1et1Ma4Q==} + '@biomejs/cli-win32-arm64@2.5.14': + resolution: {integrity: sha512-pHgAFffmZtaYoxavEsWEYNvcA7NwOIjLyqw2HXyLbt16xYryX0L4fMV2u0G9ag6LNYPIoqWaWqzUcnc6rLGGXg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.4.4': - resolution: {integrity: sha512-gnOHKVPFAAPrpoPt2t+Q6FZ7RPry/FDV3GcpU53P3PtLNnQjBmKyN2Vh/JtqXet+H4pme8CC76rScwdjDcT1/A==} + '@biomejs/cli-win32-x64@2.5.14': + resolution: {integrity: sha512-oJWmBhoHsnhUKIke+0gXDX0mltJrWHA1UyHsrTlXwX0TL64ilVZAo+TYZm97baecV0esBdpzy3k96q+09JaZUQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] - '@bluesky-social/common-web@0.4.3': - resolution: {integrity: sha512-MY5PSizMLPDoT2T/BMXlnLaR75pXtcUgbwCDpzcqOBhvHOoUHhPWFDNv2jnSSzI/do20rjOcgE7vnCnr90x+uA==} - - '@bluesky-social/did@0.2.1': - resolution: {integrity: sha512-EqmAAUXurKZVxwJN2fAdeOJ4fqzsFqpysPKsk1kEs6AK2mLIC7zV1LwZvkdCyljOribcuieCbMacjNa14p0zWA==} - - '@bluesky-social/jwk-jose@0.1.11': - resolution: {integrity: sha512-QphzMYmTyIorOVM/TeB4ciH1MeVOi73MZ+UqmMtCUINqdF6jKgwmxUT5lSDbCHvJBLKqC0/iMlN3xpUyvkftWg==} - - '@bluesky-social/jwk-webcrypto@0.2.0': - resolution: {integrity: sha512-XkESTFKKgqMK8nUG20xQG2d1z4ToBXLpN8nfogy1rkp3leZuOcKlxUAt3chZn+ym4fq7UrXK/4YXUxn7okjrow==} - - '@bluesky-social/jwk@0.6.0': - resolution: {integrity: sha512-xLT9OE8jQgaUQRlg3dTB5fZsJ86ORQp5WiVY5bA+srwWCoNS+4b6vAJ9GUGHCL/IhMikajDDTGnbSf5n2Lh12g==} - - '@bluesky-social/lexicon@0.5.1': - resolution: {integrity: sha512-VDSXru+u4s+nPMtJs1mUU4YxXbxm3eB/EPE+M4D+Avn9ZPCuSOPK+cca1f3uY0ZBeL0Ta6dECi+GwS+AwRKUmQ==} - - '@bluesky-social/oauth-client-node@0.3.9': - resolution: {integrity: sha512-DAg8YosJLeUn8Z32+i/i/nEzyhwoa9M3JlCOyghHOmJHImht8ZgrQP1vkDyx0GNDfaLMAmAmd0NLcPFR+JX1dw==} - engines: {node: '>=18.7.0'} - - '@bluesky-social/oauth-client@0.5.7': - resolution: {integrity: sha512-WxgABvkTtcdnKWQTT7vTchxYTqwxUUuzpt7VihcV5xCxHl4DLc+UJXoG2TNMuH5MNOmE0hHWlOoHEwkV3lHDRA==} - - '@bluesky-social/oauth-types@0.4.2': - resolution: {integrity: sha512-t1Xw45GFTR3xSli9Gapg7G12AyQEv31I9vaxf4e1wvNxsqilrpxA6NINjEJ1ewhf3KOPL0SFh9OIrnsJBCpN7A==} - - '@bluesky-social/syntax@0.4.1': - resolution: {integrity: sha512-MyJRZWzK4Qkbngpbsr1ANP1DfkZWrQvBFBl4taleaw15/qdoKBnF/niQZzjX4/A+MDh2ODz9MZukz0v+MTqa2g==} - - '@bluesky-social/xrpc@0.7.5': - resolution: {integrity: sha512-9ItUp5F1tsWWOqD3IXRVFLK+1Fa+uNnz3w4rkUTwX1mQZWAnx6tezlFmQrR+lYdiAaAlYr7jEhEPmIHU1PSclQ==} - - '@bramus/specificity@2.4.2': - resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} - hasBin: true - '@bruits/satteri-darwin-arm64@0.10.5': resolution: {integrity: sha512-27KTVl4TJkVahMy/ohyA7qd4938G5UNneFUz/PsScYfpIhj0IVAS23mpcJXdPF44sa6nva198lmV/cKIb2YPyA==} cpu: [arm64] os: [darwin] - '@bruits/satteri-darwin-arm64@0.9.5': - resolution: {integrity: sha512-iw4nZgx9v30lWo/MTngQqi1pI78KI0DnkSm+lVJGYdmPLgAyDNJigVhpG42/Iq55A6c1Ll8q66ljyyRiQUxwow==} - cpu: [arm64] - os: [darwin] - '@bruits/satteri-darwin-x64@0.10.5': resolution: {integrity: sha512-IjnLe3nKspq6qaeqGgjT7MT8VrTV74yWRlaag7ZdNsI8TDAYZ0iPxMCo+9KQZHUk5EyVB+reBI/PFWL5KuFw9Q==} cpu: [x64] os: [darwin] - '@bruits/satteri-darwin-x64@0.9.5': - resolution: {integrity: sha512-6T26Z5Kf3cFW2PSlk9p7zT7yVxvuBSiJvYyz9u8KjYwMTqZyIDOj2wDyNpxKV4+6yUVG7rddq2QwvG/8LJA2+Q==} - cpu: [x64] - os: [darwin] - '@bruits/satteri-linux-arm64-gnu@0.10.5': resolution: {integrity: sha512-glkYXZCJywjP13v67eAyAMSJdF+ncvEbYvgi/wOtffL9tQ27lr/zsyzUfgs+ovjJ9d8JNQKiXeiArJcX8PJL9w==} cpu: [arm64] os: [linux] libc: [glibc] - '@bruits/satteri-linux-arm64-gnu@0.9.5': - resolution: {integrity: sha512-u51id17uJwNEMK9nBlICsq6U31c+XVqQueVBkwRIzZG+gMpS8TOJctt5h5Wz33Z8xnMdTd+adtACVz0yHgGuOA==} - cpu: [arm64] - os: [linux] - libc: [glibc] - '@bruits/satteri-linux-arm64-musl@0.10.5': resolution: {integrity: sha512-yWdgG1g17Nh2QyGVlFUxGRa3FEFwiMcpZEyMNWkbM3deC94cmVc+/i9OuyFpdKuWo3GkgoCtYVOoxk1uCnCZIA==} cpu: [arm64] os: [linux] libc: [musl] - '@bruits/satteri-linux-arm64-musl@0.9.5': - resolution: {integrity: sha512-v39HxiwGC5Rqm01HksP6+5Y+xKLPlsuVFgIgpEAo+SiQ22c+mJVhS3u7Z6ePAKdhL5NJoK1xq70kLz3L13AhpQ==} - cpu: [arm64] - os: [linux] - libc: [musl] - '@bruits/satteri-linux-x64-gnu@0.10.5': resolution: {integrity: sha512-FVaLoPT1fBgGl0J+AYebyyXJYBachGl8Oyyrf1lye4RTqCB4S0Gwkj1uM9RJyThUOvx5VUmAT1CnNh1SFHA+kw==} cpu: [x64] os: [linux] libc: [glibc] - '@bruits/satteri-linux-x64-gnu@0.9.5': - resolution: {integrity: sha512-F3uO8uFp3pAP5ZGXttwvh57GS7s0lL953tnNdyI2gRyP4kOOkp6pyGojNJzCjkDvWI2Cvb9iNrKok3aqQPauAw==} - cpu: [x64] - os: [linux] - libc: [glibc] - '@bruits/satteri-linux-x64-musl@0.10.5': resolution: {integrity: sha512-EHpVAx2bqW3GINHTKkljtxVfQmVDGWIuwOYOP5YghTj+0PkBa2o8oKPRtQ9Kbsr1Fye8jtUcDjhwj2jMNugZKg==} cpu: [x64] os: [linux] libc: [musl] - '@bruits/satteri-linux-x64-musl@0.9.5': - resolution: {integrity: sha512-bicEqglLlz++mWyADaZoP0JY20s4vDfLjaPYgQqC+NI4zZLTOOg1T4GB8aqtc822Pqji8SQBmSrTb7CrP8i08Q==} - cpu: [x64] - os: [linux] - libc: [musl] - '@bruits/satteri-wasm32-wasi@0.10.5': resolution: {integrity: sha512-ypz8c/Zmipxp4IoeDa228Gstv6TLzVmNs3yC6wKCoNSOjx1iwpgzu87Y3hTkXFdwChVGU85qeUDuOIarGUZQLw==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@bruits/satteri-wasm32-wasi@0.9.5': - resolution: {integrity: sha512-zauAuMwfPnKPUkd4AFixRFpXdgKwP2mKgxrIIo2gJzW0/ZneF9dbHnLkojSpaBnCCp7VUL1hIi5WWZvB1CqmAQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - '@bruits/satteri-win32-arm64-msvc@0.10.5': resolution: {integrity: sha512-siTV88nb0LRqNpkL2gXboqCwVdq95sLtzMHS1/3eONV2gLbB3NAK46wmSMvCO/yquBvI2lvaFIfd8P12ecsxBw==} cpu: [arm64] os: [win32] - '@bruits/satteri-win32-arm64-msvc@0.9.5': - resolution: {integrity: sha512-SrfE7NEsgZjBvU3c+RR6oQRu0ToXY5uVJEbieXEF0YTctIV2zAVlbaMjWLts074QCgh3a+XHWkR/lWh2VH2LUg==} - cpu: [arm64] - os: [win32] - '@bruits/satteri-win32-x64-msvc@0.10.5': resolution: {integrity: sha512-C3IfPvfvMXmlzBxaMPKFS1XiuV9pu2mC7YqkPk7PSvTgPZ8gbdASIpHpztDLvTTQjqZ0z1Ol8tK5X+V6XXC0wQ==} cpu: [x64] os: [win32] - '@bruits/satteri-win32-x64-msvc@0.9.5': - resolution: {integrity: sha512-5Kw9ZAtTGS8WHizyn+CJhjjfIQrw+7jcZodpmpXJjefnO15M8UexIi6JR2E5thyvsmHyhL6ZDDMUNR4bKJPd4g==} - cpu: [x64] - os: [win32] - - '@bufbuild/buf-darwin-arm64@1.69.0': - resolution: {integrity: sha512-q7086l1PRS0fUn/IYef7WUAq5PEPIxCh3AVZZdObdOAA9C77ES7CYBSTWH3oEJHVElv1KPVVqvGmOC+G78HuXg==} + '@bufbuild/buf-darwin-arm64@1.73.0': + resolution: {integrity: sha512-cDd3y376ecClhyytNLlY3AtsZqsqXvEkQjMvrahrv/xUWWhEIX3efD8y0uufXDe8Yuk3sEmj7J1Xlx73Y46SkA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - '@bufbuild/buf-darwin-x64@1.69.0': - resolution: {integrity: sha512-ihM+lr0tahgLVbQvp5jhYS6T1cpydEX3TbJvAfePLJBCTrsXFMwKt1WIDjpSHIPHQABcqL9BuNnbs8r1+7E1MA==} + '@bufbuild/buf-darwin-x64@1.73.0': + resolution: {integrity: sha512-VTBTCwaqT7otsMGXlk3MRu6x5hp+YH9PaLKcyWAa8wEt0NnMzbXdkE8GiLgI8Qkl7S3+pC9YSTCE/I+O87Fvrw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - '@bufbuild/buf-linux-aarch64@1.69.0': - resolution: {integrity: sha512-4twJF1ehcPRBvgA2g2yIG/3ViZ3SrElqCqGjXHp+U4RfjHV249j8kzVj08mvI1t0kv8Rbm8JECYqkxcYnKyuRA==} + '@bufbuild/buf-linux-aarch64@1.73.0': + resolution: {integrity: sha512-HjoQ3wbLiUv5N5XLM3EAR2FY51Yn6t5MEXLPnS/Hx0KDkK/5eyIBZZ6toHBLjczAr1RTA1LagF38+lglZI+kvA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - '@bufbuild/buf-linux-armv7@1.69.0': - resolution: {integrity: sha512-zfbYrfPjOBp1Dxj+9avW05NWzGwLUTInfslhgWVbq61DYLegX6UW12hVk5xS/C5D0IlfIDfJUXEeTsHImigQTQ==} + '@bufbuild/buf-linux-armv7@1.73.0': + resolution: {integrity: sha512-NsZuVg8hXfGcR96Is14ArKxZg6pdJb6kb63bx2g7q8Cjo+gRqZMBFKGvF/fnQMxTrRQAm6hzeF4a2vV4W3lszg==} engines: {node: '>=12'} cpu: [arm] os: [linux] - '@bufbuild/buf-linux-x64@1.69.0': - resolution: {integrity: sha512-mt/hJesHK62TlsSJPwBpRIC/OzWTlgaRmyjC8QF+T6+IbFwiwz1E3ZBCfNECEa2HW4ma8HbugpJyCBbUSA+z/Q==} + '@bufbuild/buf-linux-x64@1.73.0': + resolution: {integrity: sha512-dMe6lBQrlHTU7DzqzaR7Udky7R78EDzzxtYZQdjkZun9jKdjGR4fLbPWEPyY4rLGVyk6UUnrtkf5qoIK2SC6qw==} engines: {node: '>=12'} cpu: [x64] os: [linux] - '@bufbuild/buf-win32-arm64@1.69.0': - resolution: {integrity: sha512-IlMSIdCWvllwenbLlrWEH2YHQwCqmONKZYv4MXj56v6TvCWCTbYlaF5ZFP+xFAHToHp1OrFc+rwUqCt7ElBbHg==} + '@bufbuild/buf-win32-arm64@1.73.0': + resolution: {integrity: sha512-UmubCflc8zJ48bVW0WeGeVTkNuumJP//wCWKUmeTXT1iNlEqkpaXy6y7o8YJKHGWLfX0/1UV3oay9ti0EyojMw==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - '@bufbuild/buf-win32-x64@1.69.0': - resolution: {integrity: sha512-wpKZLXUF/w85g4ZL9XqQqm33cfw2NRjiidSX5EVFMx4rDp7cnAUv3+PTwZvEPriqJEihnOJ5JCozsxjiWqSX7Q==} + '@bufbuild/buf-win32-x64@1.73.0': + resolution: {integrity: sha512-/Buo10rXzqNLnFDh3BpzGdcrx6OalcU8o8gUyObCFZA5wKcUvBVNDhhpMmoB6YeiOPpPn47jHgW4bSSlypaaOQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] - '@bufbuild/buf@1.69.0': - resolution: {integrity: sha512-hWk7cW6Z/7g6jpybePaf15QUUFd2+s4lJCeaAkBeo3tWPGoSgNJaJdMqIUy2y99uYy4yMjq9GYmjc5dSrfIn5A==} + '@bufbuild/buf@1.73.0': + resolution: {integrity: sha512-W3whb4P1y3Hs9bqwCu9++W1v1ofHZ3dBUCe6JSZq0Ff5OK5UKKZuMN4iunPbgdyXY4+4ujEYf2ESrN/6MbcFSQ==} engines: {node: '>=12'} hasBin: true '@bufbuild/protobuf@1.10.1': resolution: {integrity: sha512-wJ8ReQbHxsAfXhrf9ixl0aYbZorRuOWpBNzm8pL8ftmSxQx/wnJD5Eg861NwJU/czy2VXFIebCeZnZrI9rktIQ==} - '@bufbuild/protobuf@2.12.0': - resolution: {integrity: sha512-B/XlCaFIP8LOwzo+bz5uFzATYokcwCKQcghqnlfwSmM5eX/qTkvDBnDPs+gXtX/RyjxJ4DRikECcPJbyALA8FA==} + '@bufbuild/protobuf@2.15.0': + resolution: {integrity: sha512-DAheWUkVr/SJTWCc+lg9dhY0eN4SaWlf4+bG1KzHeXbnqt0AfB/NX0Z+VunGlM1ki1B4zVvye27MpKh/svySUA==} - '@bufbuild/protoc-gen-es@2.12.0': - resolution: {integrity: sha512-d9htF6jEkSwPbp9d/vSmZOBF7eeG18AvTMKmVg4I23afnrQOxL2w3WOXa9TaufMCyu24QakEUb4vux8apI5e7A==} - engines: {node: '>=20'} + '@bufbuild/protoc-gen-es@2.15.0': + resolution: {integrity: sha512-FRhNTAZEXW6arWx2JxgtpuazhmewYctXugu5SfXGpXpLLCInDT1005fSKDzEM/70Es2oIn07PM4RvpwvDvR/fg==} + engines: {node: '>=22'} hasBin: true peerDependencies: - '@bufbuild/protobuf': 2.12.0 + '@bufbuild/protobuf': 2.15.0 peerDependenciesMeta: '@bufbuild/protobuf': optional: true - '@bufbuild/protoplugin@2.12.0': - resolution: {integrity: sha512-ORlDITp8AFUXzIhLRoMCG+ud+D3MPKWb5HQXBoskMMnjeyEjE1H1qLonVNPyOr8lkx3xSfYUo8a0dvOZJVAzow==} + '@bufbuild/protoplugin@2.15.0': + resolution: {integrity: sha512-vZhRoqB/jTHATqItRvJQf1zbxdrGRRhiusGty4+lKcfEFODG0PMXky2Ezv4WHHS6oSxq+5qShITuE7K1/82SuQ==} '@cacheable/memory@2.2.0': resolution: {integrity: sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==} @@ -3872,37 +3950,41 @@ packages: resolution: {integrity: sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==} engines: {node: '>=18'} - '@clack/core@1.4.3': - resolution: {integrity: sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==} + '@clack/core@1.5.1': + resolution: {integrity: sha512-iHTrHA8MtVuLl2TfZySmcKv1qO2PoyC9Z7pfSDozEuV5vtY3/wcOPKJXlqJ5Oq2Cx5DDGQGAMVx6HZfRRoVEbQ==} engines: {node: '>= 20.12.0'} - '@clack/prompts@1.7.0': - resolution: {integrity: sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==} + '@clack/prompts@1.8.1': + resolution: {integrity: sha512-dlT1m5e/0yUL0kRNcQn7yGLVThkgbB0Ga/1AmfDDC/8ik6AIiSf2QLQO2zPYvefsHP0aFgxO93cVLCCfDp7kzQ==} engines: {node: '>= 20.12.0'} - '@codemirror/autocomplete@6.20.2': - resolution: {integrity: sha512-G5FPkgIiLjOgZMjqVjvuKQ1rGPtHogLldJr33eFJdVLtmwY+giGrlv/ewljLz6b9BSQLkjxuwBc6g6omDM+YxQ==} + '@codemirror/autocomplete@6.20.3': + resolution: {integrity: sha512-tlosUqb+3BbxCxZdu4tKeRghPFC+QM7q4X5YhKV2eCmPG+1r2F3f4AaSz5sCrFqUtX4Jh20VFTKecl16MgiV9g==} - '@codemirror/commands@6.10.3': - resolution: {integrity: sha512-JFRiqhKu+bvSkDLI+rUhJwSxQxYb759W5GBezE8Uc8mHLqC9aV/9aTC7yJSqCtB3F00pylrLCwnyS91Ap5ej4Q==} + '@codemirror/commands@6.11.1': + resolution: {integrity: sha512-O/4hG3SC1YwcmQ0d2UVNDs+AsaNWd1iHVxbTeEBuqH+6bExAiPK3iS/BvpY6rZGURALv4ZD3sIgcCmRvw3ehBg==} '@codemirror/lang-css@6.3.1': resolution: {integrity: sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==} - '@codemirror/language@6.12.3': - resolution: {integrity: sha512-QwCZW6Tt1siP37Jet9Tb02Zs81TQt6qQrZR2H+eGMcFsL1zMrk2/b9CLC7/9ieP1fjIUMgviLWMmgiHoJrj+ZA==} + '@codemirror/language@6.12.4': + resolution: {integrity: sha512-1q4PaT+o6PbgpkJt4Q8Fv5XJxTy4FUZ4MWETtyiDw3J0Pyr9E2vqcKL+k9wcvjNTIsauxvE7OfmWj3FRPHQ76A==} - '@codemirror/lint@6.9.6': - resolution: {integrity: sha512-6Kp7r6XfCi/D/5sdXieMfg9pJU1bUEx96WITuLU6ESaKizCz0QHFMjY/TaFSbigDdEAIgi93itLBIUETP4oK+A==} + '@codemirror/lint@6.9.7': + resolution: {integrity: sha512-28/+iWLYxKxsvGYhSYL7zaCZqLz5+FFFDq9tVsvGv9kv8RY4fFAchJ5WX9M3YrrRlTIsECjsXPqeNgnSmNP2dg==} - '@codemirror/search@6.7.0': - resolution: {integrity: sha512-ZvGm99wc/s2cITtMT15LFdn8aH/aS+V+DqyGq/N5ZlV5vWtH+nILvC2nw0zX7ByNoHHDZ2IxxdW38O0tc5nVHg==} + '@codemirror/search@6.7.2': + resolution: {integrity: sha512-gUYkYhT2+n/+VGZ+8EzE5WFkYZUZYm1VOKDudIsNqh42uRVQJ0a6Yss9sdKT3MeOYfuL1N6AZA57oza0Oyr0LA==} - '@codemirror/state@6.6.0': - resolution: {integrity: sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ==} + '@codemirror/state@6.7.5': + resolution: {integrity: sha512-QjLbZmY1Au3JiRrDVYFLRD0BZ3SOKS9pR3yjIkd7u27YY8TFD9/Q9fhPnLV5l1mHFSo3hHU/N31vpwEJOx4owQ==} - '@codemirror/view@6.43.0': - resolution: {integrity: sha512-V7ZCLQO3Jus9hzh2jVCCPW3mO4IBMr43O37PqSUYautJSnnJF41YlgLw21x0fLJTYvJ+Vkm6Gp+qKGH9pltgXA==} + '@codemirror/view@6.43.12': + resolution: {integrity: sha512-Nv0vxQ19NAqvB/c2pFzjIzFlzzJl7jmdtNkwOwGbn0Ks9mFAzibvumz7cQem5cRsFA2cEw2fg+uHZGbcHupLQQ==} + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} '@csstools/cascade-layer-name-parser@3.0.0': resolution: {integrity: sha512-/3iksyevwRfSJx5yH0RkcrcYXwuhMQx3Juqf40t97PeEy2/Mz2TItZ/z/216qpe4GgOyFBP8MKIwVvytzHmfIQ==} @@ -3911,37 +3993,19 @@ packages: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 - '@csstools/color-helpers@6.0.2': - resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} - engines: {node: '>=20.19.0'} - '@csstools/color-helpers@6.1.1': resolution: {integrity: sha512-gLNsunvwf3mCi5u5o46/Z/JcJMnhbHSaZ69rkgPzNM3J4s8hWwpPUQB6/tt0EDFyCiWzxANlx+2LJwpYj4zS1w==} engines: {node: '>=20.19.0'} - '@csstools/css-calc@3.1.1': - resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} + '@csstools/css-calc@3.4.0': + resolution: {integrity: sha512-XQKj5B7QiZcHiegCOCAzcAOJdhGgWOHbbu62h5e5mkHnn8lWcfiJhllkqWmxu5zWR9jucPHuo1iTB56P033hcg==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-calc@3.3.0': - resolution: {integrity: sha512-c5ihYsPkdG6JCkU2zTMm4+k6r7RXuGxtWYhu5DHMIiF1FHzrfmHL5so11AoFpUv/tu61xfcmT4AmKoFfMPoqdQ==} - engines: {node: '>=20.19.0'} - peerDependencies: - '@csstools/css-parser-algorithms': ^4.0.0 - '@csstools/css-tokenizer': ^4.0.0 - - '@csstools/css-color-parser@4.0.2': - resolution: {integrity: sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==} - engines: {node: '>=20.19.0'} - peerDependencies: - '@csstools/css-parser-algorithms': ^4.0.0 - '@csstools/css-tokenizer': ^4.0.0 - - '@csstools/css-color-parser@4.2.1': - resolution: {integrity: sha512-YpAJZhaHplYQkG8ib+/Fx5Y0eF2lVWi3tIvMJA6i39TLyUNp2439cifzW8VMjhlqrBjHzK5hVGugRRm2zTKI/A==} + '@csstools/css-color-parser@4.2.3': + resolution: {integrity: sha512-y4LpL+lmpuyKDiEFq2PnZUVFdAjsoB/qQJod79yLNokXyW7jewi+/WJ69EfItj8A2unWtxXnGjw6LYXgXu5ZjA==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 @@ -3953,14 +4017,6 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.9': - resolution: {integrity: sha512-iGGw4OsAYsS6pD29MdJ2bX/nJx65a04ZZiw6x+VwWlP2DdXf6f++Zmuv/OzALpdyfVhjbduIIF2cXM7HWBIe9A==} - peerDependencies: - css-tree: ^3.2.1 - peerDependenciesMeta: - css-tree: - optional: true - '@csstools/css-tokenizer@4.0.0': resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} engines: {node: '>=20.19.0'} @@ -3972,8 +4028,8 @@ packages: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 - '@csstools/postcss-alpha-function@2.0.3': - resolution: {integrity: sha512-8GqzD3JnfpKJSVxPIC0KadyAfB5VRzPZdv7XQ4zvK1q0ku+uHVUAS2N/IDavQkW40gkuUci64O0ea6QB/zgCSw==} + '@csstools/postcss-alpha-function@2.0.13': + resolution: {integrity: sha512-PWN8cPY2+w26BeZuY9Yf5hp5hIf3qBf2GhroTKIkO6doDQfN5y89hBABdjEiDEBvHmdVDIHGoGaKzi9ckm7EXg==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -3984,44 +4040,56 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-color-function-display-p3-linear@2.0.2': - resolution: {integrity: sha512-TWUwSe1+2KdYGGWTx5LR4JQN07vKHAeSho+bGYRgow+9cs3dqgOqS1f/a1odiX30ESmZvwIudJ86wzeiDR6UGg==} + '@csstools/postcss-color-function-display-p3-linear@2.0.12': + resolution: {integrity: sha512-l62tzRpit0wUcXX59yDlG+ZvjzipGKYwu89Nw8SMk32DVW8p6+4xoLGdhIUtqudebd8EtiTiod4w/IatETWa3g==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-color-function@5.0.2': - resolution: {integrity: sha512-CjBdFemUFcAh3087MEJhZcO+QT1b8S75agysa1rU9TEC1YecznzwV+jpMxUc0JRBEV4ET2PjLssqmndR9IygeA==} + '@csstools/postcss-color-function@5.0.12': + resolution: {integrity: sha512-FyVNzDaX39FwM6pviCOPbW71OQHisO8+SWtNnQlIBIYGzLFUkJrYDPhzhPOhlvWWy5FQW9XTyztzHNS/y6IZEg==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-color-mix-function@4.0.2': - resolution: {integrity: sha512-PFKQKswFqZrYKpajZsP4lhqjU/6+J5PTOWq1rKiFnniKsf4LgpGXrgHS/C6nn5Rc51LX0n4dWOWqY5ZN2i5IjA==} + '@csstools/postcss-color-mix-function@4.0.12': + resolution: {integrity: sha512-MR7jvvLKS1k/IlhmQ/bmGQjLwWVCaVHX8NmxhbGfd6Zx1ib6m595+V7Y5sISA8yrblCxeUsWNdZqm3kB8ypyWg==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-color-mix-variadic-function-arguments@2.0.2': - resolution: {integrity: sha512-zEchsghpDH/6SytyjKu9TIPm4hiiWcur102cENl54cyIwTZsa+2MBJl/vtyALZ+uQ17h27L4waD+0Ow96sgZow==} + '@csstools/postcss-color-mix-variadic-function-arguments@2.0.12': + resolution: {integrity: sha512-363Emammc+2rpp77ylFfknxj0niQbvBr1vX3iK4Psx8yQi88n+eFJm1FF1n3n3C7+vzS8nyvE52WXx1i6Cdv6Q==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-content-alt-text@3.0.0': - resolution: {integrity: sha512-OHa+4aCcrJtHpPWB3zptScHwpS1TUbeLR4uO0ntIz0Su/zw9SoWkVu+tDMSySSAsNtNSI3kut4fTliFwIsrHxA==} + '@csstools/postcss-container-rule-prelude-list@1.0.1': + resolution: {integrity: sha512-c5qlevVGKHU+zDbVoUGSZl1Mw7Vl1gVRKv6cdIYnaoyM+9Ou23Ian0H5Gr2ZF+lsDWovPK03hOSAbkw6HS8aTg==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-contrast-color-function@3.0.2': - resolution: {integrity: sha512-fwOz/m+ytFPz4aIph2foQS9nEDOdOjYcN5bgwbGR2jGUV8mYaeD/EaTVMHTRb/zqB65y2qNwmcFcE6VQty69Pw==} + '@csstools/postcss-content-alt-text@3.0.4': + resolution: {integrity: sha512-yQCaxjfaZJ2jJgWYtBg1vZ239HHrN2eE09BA1+BwTuvNmiZYlVS7caQUiv4nH8Cwz+g+rVNN3SbuwXGDgactdA==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-exponential-functions@3.0.1': - resolution: {integrity: sha512-WHJ52Uk0AVUIICEYRY9xFHJZAuq0ZVg0f8xzqUN2zRFrZvGgRPpFwxK7h9FWvqKIOueOwN6hnJD23A8FwsUiVw==} + '@csstools/postcss-contrast-color-function@3.0.12': + resolution: {integrity: sha512-GiRcNvUwEgCumkaUVzFrWay/JT9BbPyA6IHdrKz/ywqosNutayV7DJzHIpehDQUdT7EtI5d0BO6Aw+bje6S3Ew==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-exponential-functions@3.0.6': + resolution: {integrity: sha512-ZOGh5Z0Lt9d9hyndGYcg2+ZOhc8BOHekfYmEeCnrlzM+JCl+yhWgZQ24qQZVSSjWwHdft41epbbN/xM07HX4UQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-fit-tolerance-property@1.0.1': + resolution: {integrity: sha512-z4/7waS/IJWYxuExc9szU2qMoFXmgWPYxmEnmVwVepHXNWuqfI4sk/S09efjjQI3IeA6kosb/xch7mKPh8fR9Q==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -4038,26 +4106,32 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-gamut-mapping@3.0.2': - resolution: {integrity: sha512-IrXAW3KQ3Sxm29C3/4mYQ/iA0Q5OH9YFOPQ2w24iIlXpD06A9MHvmQapP2vAGtQI3tlp2Xw5LIdm9F8khARfOA==} + '@csstools/postcss-gamut-mapping@3.0.12': + resolution: {integrity: sha512-YvFVHWaVWnSKqRpqy63kVbOcYqYZY3IjFPx+Qo9Nom/2lJprTHbvHzf6Q+mQvpl6pY4PISRD5ZniMjXTtzGWnQ==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-gradients-interpolation-method@6.0.2': - resolution: {integrity: sha512-saQHvD1PD/zCdn+kxCWCcQOdXZBljr8L6BKlCLs0w8GXYfo3SHdWL1HZQ+I1hVCPlU+MJPJJbZJjG/jHRJSlAw==} + '@csstools/postcss-gradients-interpolation-method@6.0.12': + resolution: {integrity: sha512-t+ix9AEZYOkb81YiBnEkH7Ath6ZcnRsrIAMbjcURAAVJLOlmL5mL5i+IA1Ex4MqyjzI3vVfufCeXyEObaTv9bA==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-hwb-function@5.0.2': - resolution: {integrity: sha512-ChR0+pKc/2cs900jakiv8dLrb69aez5P3T+g+wfJx1j6mreAe8orKTiMrVBk+DZvCRqpdOA2m8VoFms64A3Dew==} + '@csstools/postcss-hwb-function@5.0.12': + resolution: {integrity: sha512-R7hKUGqJs2k3EI/l2Mw5hsYThnymsZEUkHuWV8KHxx1acnO8eJRAW8B/G3JwXiUSi8w7wMSoUsBhuWlmkDdpOg==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-ic-unit@5.0.0': - resolution: {integrity: sha512-/ws5d6c4uKqfM9zIL3ugcGI+3fvZEOOkJHNzAyTAGJIdZ+aSL9BVPNlHGV4QzmL0vqBSCOdU3+rhcMEj3+KzYw==} + '@csstools/postcss-ic-unit@5.0.4': + resolution: {integrity: sha512-rDl/sZ/vEM4mk+jCotqHBouyOYt3Sa8iSDiPy2dlWLuA0bYHcIkgc/xUa8Und80qrKqoMOCuNetBuE9igMTBxA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-image-function@1.0.3': + resolution: {integrity: sha512-xEt0juUL09VQhyelxuQqgircEkAM2FUSOY/cMqVxz2oy1h7WMI2HvMeG8ryFqlKcZ51IDHTx9Rh1HlzWW8z+wA==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -4074,8 +4148,8 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-light-dark-function@3.0.0': - resolution: {integrity: sha512-s++V5/hYazeRUCYIn2lsBVzUsxdeC46gtwpgW6lu5U/GlPOS5UTDT14kkEyPgXmFbCvaWLREqV7YTMJq1K3G6w==} + '@csstools/postcss-light-dark-function@3.0.4': + resolution: {integrity: sha512-McKRC2v+kRhDUatEptWi01S4BUFgRM/JAENnzxGhaFo+v0N1j3I8uerFkLlOYul0+iFjJHBXObD4Lmc+aW4z4Q==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -4104,14 +4178,14 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-logical-viewport-units@4.0.0': - resolution: {integrity: sha512-TA3AqVN/1IH3dKRC2UUWvprvwyOs2IeD7FDZk5Hz20w4q33yIuSg0i0gjyTUkcn90g8A4n7QpyZ2AgBrnYPnnA==} + '@csstools/postcss-logical-viewport-units@4.0.1': + resolution: {integrity: sha512-5OEHV3etEGGKawnljQssXQoJMWqU6TBLY3kG7RT1CITicoNi5FOBLaFe2siCIay7JPEvth1pOcNHWE7nK4WU7Q==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-media-minmax@3.0.1': - resolution: {integrity: sha512-I+CrmZt23fyejMItpLQFOg9gPXkDBBDjTqRT0UxCTZlYZfGrzZn4z+2kbXLRwDfR59OK8zaf26M4kwYwG0e1MA==} + '@csstools/postcss-media-minmax@3.0.5': + resolution: {integrity: sha512-Wwjhopy23N9lGrZ8FbKXJVbfMxldVcKeQRjScFTEnGfKaFfFVZFwqUz8l6NluuS03ZrNMVB+JZjBcVCZ+6uiIg==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -4128,8 +4202,8 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-nested-calc@5.0.0': - resolution: {integrity: sha512-aPSw8P60e/i9BEfugauhikBqgjiwXcw3I9o4vXs+hktl4NSTgZRI0QHimxk9mst8N01A2TKDBxOln3mssRxiHQ==} + '@csstools/postcss-nested-calc@5.0.1': + resolution: {integrity: sha512-/hnKlIPhDySYpdGriKKsDVoLDanLxZgsbPONlX8W4atxY0hoKxw+CuB7db/yQrJ3ZPxqxAEYDNH8XEz3TUy/lg==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -4140,8 +4214,8 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-oklab-function@5.0.2': - resolution: {integrity: sha512-3d/Wcnp2uW6Io0Tajl0croeUo46gwOVQI9N32PjA/HVQo6z1iL7yp19Gp+6e5E5CDKGpW7U822MsDVo2XK1z0Q==} + '@csstools/postcss-oklab-function@5.0.12': + resolution: {integrity: sha512-Lw6+lpgHJc/qh+OGHCFNS5toBHjeOWAvYSITJAO0doQjBzzs6XN9oEPtM+K1dyuHXzfS35JfXR+gETrwUiH9Bg==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -4152,8 +4226,14 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-progressive-custom-properties@5.0.0': - resolution: {integrity: sha512-NsJoZ89rxmDrUsITf8QIk5w+lQZQ8Xw5K6cLFG+cfiffsLYHb3zcbOOrHLetGl1WIhjWWQ4Cr8MMrg46Q+oACg==} + '@csstools/postcss-progressive-custom-properties@5.1.3': + resolution: {integrity: sha512-H7Qt6Vr3RKuY+4rEk5scyRLyDZBFJ0l/Bzhkd5C/gMFaAlCqmjKFDKfMjsjVjzhTQV6/4b0fWFAgIVckVUp0qA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-property-rule-optional-descriptors@1.0.0': + resolution: {integrity: sha512-oPFzJF1R8bbFRYVcGKHFbHjhKUP2unw4tkTTlpa3E1aCI+XUr/4h6vwdWOegkyxPb9v0vk9tixIL+Npyx1L0qA==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -4164,14 +4244,14 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-random-function@3.0.1': - resolution: {integrity: sha512-SvKGfmj+WHfn4bWHaBYlkXDyU3SlA3fL8aaYZ8Op6M8tunNf3iV9uZyZZGWMCbDw0sGeoTmYZW9nmKN8Qi/ctg==} + '@csstools/postcss-random-function@4.0.2': + resolution: {integrity: sha512-R8h0Gg1k0j0/NRzzf+XpAjKfhvHLGc3eEK8sBnH/udJ5/Y8fPGB8/MAY9F5XNCaQbAI2G8eZQy2QN8+d0d7a9g==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-relative-color-syntax@4.0.2': - resolution: {integrity: sha512-HaMN+qMURinllszbps2AhXKaLeibg/2VW6FriYDrqE58ji82+z2S3/eLloywVOY8BQCJ9lZMdy6TcRQNbn9u3w==} + '@csstools/postcss-relative-color-syntax@4.0.12': + resolution: {integrity: sha512-moEAYKu7gjbOrJjcp3QfAHL9yfNgNh5RuTwUYJ5DGtUpjLTxTInxfsKqeKdkN9XZi38yVdWYTkiq2bj3PzyPsQ==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -4182,14 +4262,14 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-sign-functions@2.0.1': - resolution: {integrity: sha512-C3br0qcHJkQ0qSGUBnDJHXQdO8XObnCpGwai5m1L2tv2nCjt0vRHG6A9aVCQHvh08OqHNM2ty1dYDNNXV99YAQ==} + '@csstools/postcss-sign-functions@2.0.6': + resolution: {integrity: sha512-q4UoXYVYOzZJrm80KiGBItECdPBI17eZz3d8xLz80DfYDGFO6nS5J5ZaypbpUoiHlK49QemL0ghz3a27ngNWEA==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-stepped-value-functions@5.0.1': - resolution: {integrity: sha512-vZf7zPzRb7xIi2o5Z9q6wyeEAjoRCg74O2QvYxmQgxYO5V5cdBv4phgJDyOAOP3JHy4abQlm2YaEUS3gtGQo0g==} + '@csstools/postcss-stepped-value-functions@5.0.6': + resolution: {integrity: sha512-6z4fubLWFQbH4bIpK12utCpHaxTNi7npNq8xFxwfvCPeIp59RdnMznETZ2pb6H9/v0fhDvaFDLFJbI4sNdzznA==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -4206,14 +4286,14 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-text-decoration-shorthand@5.0.3': - resolution: {integrity: sha512-62fjggvIM1YYfDJPcErMUDkEZB6CByG8neTJqexnZe1hRBgCjD4dnXDLoCSSurjs1LzjBq6irFDpDaOvDZfrlw==} + '@csstools/postcss-text-decoration-shorthand@5.0.5': + resolution: {integrity: sha512-BIpgsIO72M/ioe0LfRcqYWi/Dm+ym8RRaQMVRdEKrad4Yqql+xFdqKaUjbOHWL8jpsmiZkbi/fXQdal1HlnjAQ==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-trigonometric-functions@5.0.1': - resolution: {integrity: sha512-e8me32Mhl8JeBnxVJgsQUYpV4Md4KiyvpILpQlaY/eK1Gwdb04kasiTTswPQ5q7Z8+FppJZ2Z4d8HRfn6rjD3w==} + '@csstools/postcss-trigonometric-functions@5.0.6': + resolution: {integrity: sha512-gdE9nngXGNjkl72D79aQ+kkWDhpa0m5PInznUHyVO3Y8fy8ji9CtPaTT54Kqzk1ig0EPQPknsRUW4i0FCnKGXw==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -4224,8 +4304,8 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/selector-resolve-nested@4.0.0': - resolution: {integrity: sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA==} + '@csstools/selector-resolve-nested@4.0.1': + resolution: {integrity: sha512-j3vdQu0XwLME5qOTWxm8cnmvsf423R2YL6DbKklCHZwkDm7UdKNu6RPlw4REIJhSlKBICY3B70/7QZdicLqZgg==} engines: {node: '>=20.19.0'} peerDependencies: postcss-selector-parser: ^7.1.1 @@ -4242,20 +4322,21 @@ packages: peerDependencies: postcss: ^8.4 - '@ctrl/tinycolor@4.2.0': - resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==} + '@ctrl/tinycolor@4.2.1': + resolution: {integrity: sha512-Vh5uy9Y1JBMId6J1f68TMXnZrTCvNdo9Fu2k0d1YnJngR+sM5kWTKl441c/3TFs+cG0NWOjRWgQ/iaWhbYx+7A==} engines: {node: '>=14'} - '@date-fns/tz@1.4.1': - resolution: {integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==} + '@date-fns/tz@1.5.0': + resolution: {integrity: sha512-lwYN/vDPeNRULcepoE/LO2Pgx+7/RV+S9ARfbc9lr2DtGkOD7pAiruHvbR1RX3Qyf6ja47EWJDMsNK5vK08DJg==} - '@discoveryjs/json-ext@0.5.7': - resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} - engines: {node: '>=10.0.0'} - - '@elastic/elasticsearch@9.3.2': - resolution: {integrity: sha512-Td9+dajSx5KebnNgsxDxTDWSDL4bUILPiUGAFKiaCWRI0uSgmfOGrlFA8IUZDurjPpSy06o5cIBrVcPs37zHaQ==} - engines: {node: '>=18'} + '@elastic/elasticsearch@9.5.1': + resolution: {integrity: sha512-2ZZqCmgGPjSYn+OphFRYm9g46KVINA0i8fRmlPHJC60RvJeFB6NSHO0nKKOOYhm3WRXyGkLu1xkdXe724fnmnA==} + engines: {node: '>=22'} + peerDependencies: + apache-arrow: 18.x - 21.x + peerDependenciesMeta: + apache-arrow: + optional: true '@elastic/transport@9.4.0': resolution: {integrity: sha512-/lE1rEPoXWjbQD1pAFyI/zZuMU1XdsxYgfZIAbQGgDabhinKYpZbQh6Qc/dYS6tEPxHOqlJ/WSQvSHZap4+I+w==} @@ -4334,6 +4415,9 @@ packages: '@emnapi/core@1.11.2': resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} + '@emnapi/core@1.11.3': + resolution: {integrity: sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==} + '@emnapi/runtime@1.11.1': resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} @@ -4346,471 +4430,162 @@ packages: '@emnapi/wasi-threads@1.2.2': resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + '@emnapi/wasi-threads@1.2.3': + resolution: {integrity: sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==} + '@epic-web/invariant@1.0.0': resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} - '@esbuild/aix-ppc64@0.25.12': - resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.27.2': - resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.28.2': resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.12': - resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.27.2': - resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.28.2': resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.12': - resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.27.2': - resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.28.2': resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.12': - resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.27.2': - resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.28.2': resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.12': - resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.27.2': - resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.28.2': resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.12': - resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.27.2': - resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.28.2': resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.12': - resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.27.2': - resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.28.2': resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.12': - resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.27.2': - resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.28.2': resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.12': - resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.27.2': - resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.28.2': resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.12': - resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.27.2': - resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.28.2': resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.12': - resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.27.2': - resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.28.2': resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.12': - resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.27.2': - resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.28.2': resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.12': - resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.27.2': - resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.28.2': resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.12': - resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.27.2': - resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.28.2': resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.12': - resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.27.2': - resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.28.2': resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.12': - resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.27.2': - resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.28.2': resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.12': - resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.27.2': - resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.28.2': resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.12': - resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-arm64@0.27.2': - resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.28.2': resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.12': - resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.27.2': - resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.28.2': resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.12': - resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-arm64@0.27.2': - resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.28.2': resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.12': - resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.27.2': - resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.28.2': resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.12': - resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/openharmony-arm64@0.27.2': - resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - '@esbuild/openharmony-arm64@0.28.2': resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.12': - resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.27.2': - resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.28.2': resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.12': - resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.27.2': - resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.28.2': resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.12': - resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.27.2': - resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.28.2': resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.12': - resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.27.2': - resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.28.2': resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==} engines: {node: '>=18'} @@ -4847,15 +4622,6 @@ packages: resolution: {integrity: sha512-IkO+/KEUvwbVpiURZg+P7zF74z5Jxe0UgJxVni+RtoHQ6IZieXaO02kmadomap/q+l6bc/jdPGGqTjhuZnuz1Q==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@exodus/bytes@1.15.1': - resolution: {integrity: sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - peerDependencies: - '@noble/hashes': ^1.8.0 || ^2.0.0 - peerDependenciesMeta: - '@noble/hashes': - optional: true - '@expressive-code/core@0.44.2': resolution: {integrity: sha512-Yw5KonQCD1HoOO2P89y4wifqS9qrJcGVY0LkVMUsVZjhi++bhz4WwQ37inenKFNOEVo50P7cjoVsCdaVnUbq8w==} @@ -4868,23 +4634,11 @@ packages: '@expressive-code/plugin-text-markers@0.44.2': resolution: {integrity: sha512-SNI7EgUSiADqbqUzzMbj1ZeC/r2pa5eg3KyFOGAd3a7EsIA4qzjXQLp+ODWQtHVDKFCdGs4J3ovSJUqvKIK96g==} - '@floating-ui/core@1.7.4': - resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} + '@floating-ui/core@1.8.0': + resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} - '@floating-ui/dom@1.7.5': - resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} - - '@floating-ui/react-dom@2.1.7': - resolution: {integrity: sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@floating-ui/react-dom@2.1.8': - resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' + '@floating-ui/dom@1.8.0': + resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} '@floating-ui/react-dom@2.1.9': resolution: {integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==} @@ -4892,24 +4646,12 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/react@0.27.18': - resolution: {integrity: sha512-xJWJxvmy3a05j643gQt+pRbht5XnTlGpsEsAPnMi5F5YTOEEJymA90uZKBD8OvIv5XvZ1qi4GcccSlqT3Bq44Q==} - peerDependencies: - react: '>=17.0.0' - react-dom: '>=17.0.0' - '@floating-ui/react@0.27.20': resolution: {integrity: sha512-CMqMy7OaXl9W0eq1Uy7L7i2Y/anPvHmFmESd2CEw0t5YvZhcVCeo4MBevAmswRllX7Y2dEidA4ozGPunLSTQpw==} peerDependencies: react: '>=17.0.0' react-dom: '>=17.0.0' - '@floating-ui/utils@0.2.10': - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - - '@floating-ui/utils@0.2.11': - resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} - '@floating-ui/utils@0.2.12': resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} @@ -5020,30 +4762,15 @@ packages: cpu: [x64, arm64] os: [win32] - '@formatjs/ecma402-abstract@2.3.6': - resolution: {integrity: sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==} - - '@formatjs/fast-memoize@2.2.7': - resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==} - - '@formatjs/icu-messageformat-parser@2.11.4': - resolution: {integrity: sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==} - - '@formatjs/icu-skeleton-parser@1.8.16': - resolution: {integrity: sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==} - - '@formatjs/intl-localematcher@0.6.2': - resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==} - - '@hcaptcha/react-hcaptcha@2.0.2': - resolution: {integrity: sha512-VbuH6VJ6m3BHmVBHs0fL9t+suZd7PQEqCzqL2BiUbBvbHI3XfvSgdiug2QiEPN8zskbPTIV/FfGPF53JCckrow==} + '@hcaptcha/react-hcaptcha@2.2.0': + resolution: {integrity: sha512-/HrPgNLRrJziLrh2s+qFRO33ubBSuHn9sdNsQcP0wQElpORxlpR6wnq3X9j/bZGd+uQtYIvPl4QSU2la+Jl9Hg==} '@hexagon/base64@1.1.28': resolution: {integrity: sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==} - '@hono/node-server@1.19.17': - resolution: {integrity: sha512-dSneS5qhiauZWGDCeK4o695Xd9nUNjviSZCMQrj10eetr8Uln1ucn6bbphOM6UynAMMtNIzZNSpL9vnASJwrPQ==} - engines: {node: '>=18.14.1'} + '@hono/node-server@2.1.1': + resolution: {integrity: sha512-ELuehkj5VCBdgEw9zs+ivkKwyzzUCSQuE96YmiPvn1ECBoZCczbFXJLeEGMTYjphP6gydh4pHMqEYPVMYUVgQg==} + engines: {node: '>=20'} peerDependencies: hono: ^4 @@ -5229,63 +4956,52 @@ packages: cpu: [x64] os: [win32] - '@inquirer/ansi@1.0.2': - resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} - engines: {node: '>=18'} + '@inquirer/ansi@2.0.8': + resolution: {integrity: sha512-WpQM+Ti6Z40EFwwt+uL2p4UabT+W179zHp6HhLVOzfbwnVn05IPO/eXIZXGNqcT1jbQ15SujNLzQ39k4QPPxBQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - '@inquirer/confirm@5.1.21': - resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} - engines: {node: '>=18'} + '@inquirer/confirm@6.3.2': + resolution: {integrity: sha512-Xvr/0HggjddPtGppuqVmxhTw+Hr8PvsZ/k0HmOEaAqQEt80OITNkFWnsdNmyT0/eM4Ab+iJLx2R8rctlEyfSVg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/core@10.3.2': - resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} - engines: {node: '>=18'} + '@inquirer/core@12.0.3': + resolution: {integrity: sha512-wsSy0sznmXwkty+2PzZwx00Cazc/E0r0B7mAzdGROz2Ct+DFZXaK7WDjGZvgjRldxH5ZhFVfF2lgkYrqgOw2KA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/figures@1.0.15': - resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} - engines: {node: '>=18'} + '@inquirer/figures@2.0.9': + resolution: {integrity: sha512-EAWgUTGQ/Umgga51dE3B2PUHbufuXarDfg86uVgoSgNHNNQnyFKcOrQLWVqYMghuSyHh8+2HUH0Js9cTC1WAdg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - '@inquirer/type@3.0.10': - resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} - engines: {node: '>=18'} + '@inquirer/type@4.1.1': + resolution: {integrity: sha512-yJoHYrMnxIsJZCY+0Vb66Dy3he3kL3e2wOBKhoSwWWAzZAY82emlxwgprCtp6yRixvNRNq9ztfRWQYPNr3Go7A==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@internationalized/date@3.11.0': - resolution: {integrity: sha512-BOx5huLAWhicM9/ZFs84CzP+V3gBW6vlpM02yzsdYC7TGlZJX1OJiEEHcSayF00Z+3jLlm4w79amvSt6RqKN3Q==} + '@internationalized/date@3.12.4': + resolution: {integrity: sha512-M1dEn4c1U1HsSlaVR8upZtSqvXrTkHDfv18H01uCSJyjVLDxnBR38v/fMxecmlwXKR4i9HeZcmgQAPE6A+aGJQ==} - '@internationalized/message@3.1.8': - resolution: {integrity: sha512-Rwk3j/TlYZhn3HQ6PyXUV0XP9Uv42jqZGNegt0BXlxjE6G3+LwHjbQZAGHhCnCPdaA6Tvd3ma/7QzLlLkJxAWA==} + '@internationalized/number@3.6.8': + resolution: {integrity: sha512-8UmMFia46DUt+k97zKd9fKWXcWHR+k8ae3eYzILETuT2KbIvLyOfac7zesw+sJdRAAZ7Q9pM1Mk22aXp2LD0Ig==} - '@internationalized/number@3.6.5': - resolution: {integrity: sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==} + '@internationalized/string@3.2.10': + resolution: {integrity: sha512-PDx6//vHSpRnHfxqMqto11zQvhsaU74O3mKv2F/0eicGZcl9NLjQmGlbHz/LsJh5tLKp4A4L7ZVTzN1/MmMTvA==} - '@internationalized/string@3.2.7': - resolution: {integrity: sha512-D4OHBjrinH+PFZPvfCXvG28n2LSykWcJ7GIioQL+ok0LON15SdfoUssoHzzOUmVZLbRoREsQXVzA6r8JKsbP6A==} - - '@ioredis/commands@1.5.0': - resolution: {integrity: sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow==} - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@isaacs/cliui@9.0.0': - resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==} - engines: {node: '>=18'} + '@ioredis/commands@2.0.0': + resolution: {integrity: sha512-vrx0AE/T0h7cRZwfo1M39Cr+ZhZrkf0V8mQN75wucKCxCLD9l/VX6no3gFvrLqD1IlG/1LtzWovqEw3t0Vr9zg==} '@isaacs/fs-minipass@4.0.1': resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} @@ -5309,132 +5025,12 @@ packages: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/sourcemap-codec@1.6.0': + resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==} '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@jsonjoy.com/base64@1.1.2': - resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/base64@17.67.0': - resolution: {integrity: sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/buffers@1.2.1': - resolution: {integrity: sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/buffers@17.67.0': - resolution: {integrity: sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/codegen@1.0.0': - resolution: {integrity: sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/codegen@17.67.0': - resolution: {integrity: sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/fs-core@4.56.10': - resolution: {integrity: sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/fs-fsa@4.56.10': - resolution: {integrity: sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/fs-node-builtins@4.56.10': - resolution: {integrity: sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/fs-node-to-fsa@4.56.10': - resolution: {integrity: sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/fs-node-utils@4.56.10': - resolution: {integrity: sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/fs-node@4.56.10': - resolution: {integrity: sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/fs-print@4.56.10': - resolution: {integrity: sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/fs-snapshot@4.56.10': - resolution: {integrity: sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/json-pack@1.21.0': - resolution: {integrity: sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/json-pack@17.67.0': - resolution: {integrity: sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/json-pointer@1.0.2': - resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/json-pointer@17.67.0': - resolution: {integrity: sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/util@1.9.0': - resolution: {integrity: sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - '@jsonjoy.com/util@17.67.0': - resolution: {integrity: sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - '@keyv/bigmap@1.3.1': resolution: {integrity: sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==} engines: {node: '>= 18'} @@ -5444,38 +5040,35 @@ packages: '@keyv/serialize@1.1.1': resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} - '@leichtgewicht/ip-codec@2.0.5': - resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - '@levischuck/tiny-cbor@0.2.11': resolution: {integrity: sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==} - '@lexical/a11y@0.48.0': - resolution: {integrity: sha512-18W4ehyipkUim4YVoDZitoH63Om3j6iCN4c84zdqE9RgkWf/PE4rvI/8BHTm6Ni7NkVE14nimXgkpaP5ok15zA==} + '@lexical/a11y@0.50.0': + resolution: {integrity: sha512-qxEe+ZOeti/jueuVTx0fNc0GO8aD6OOBLP6z48VP2ACJkEW+jI15bidI9rfT+FHpDnmWCmYChHUiVL477q6JeQ==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/clipboard@0.48.0': - resolution: {integrity: sha512-xO2trk6+yBl8XXa/VNe20kXczmPxFoWtUHjidbBLEtlGBj+mo63pJj6H5o/WlZsoMKmIOJxwxsn2ejrS8G0/7A==} + '@lexical/clipboard@0.50.0': + resolution: {integrity: sha512-Sb+bDluH0JZNRrSURIfry2ZwdkQPTSRMtpV6XHRRKMFh86o4KcR9PMbfSdaGxZOHctHNabTp0JRmkpt/zrItjQ==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/code-core@0.48.0': - resolution: {integrity: sha512-+O1Ge06AuSo6+r8R2Xk6SkWG07H5/e4K/Scw9aqCM/BRjITxgvFTHTNvgQbaobCsP0uBJiwW1+ZGeWAWcBCY4w==} + '@lexical/code-core@0.50.0': + resolution: {integrity: sha512-0KPTDmcPL/4ObLy5N/yFo+t6l/bHE63NODPOsyUN1NACc62i0Pc8NXGwo4xhaLcpgIRDiN1ABZ+h3AVLp5GlWQ==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/devtools-core@0.48.0': - resolution: {integrity: sha512-4kvKWW6ebgQnJNLXPLmw7dqgSChvzYIBNYtfuR6c48Sw+V/QXQTWqfIUbCIe5X4uG8EEXd5O/udXaJx7GBuP+w==} + '@lexical/devtools-core@0.50.0': + resolution: {integrity: sha512-70m994RIZ5sdYjtGEHTo6nIOkUddaWVVl920WGWR0zqNblxYmFuDQAsMgz6nJmA9TNbCbLLufFi5RMPwnBVVOA==} peerDependencies: react: '>=18.x' react-dom: '>=18.x' @@ -5484,160 +5077,160 @@ packages: typescript: optional: true - '@lexical/dragon@0.48.0': - resolution: {integrity: sha512-uPuu7fVca9vmL/Oz30CRZ7FIPIodwMrTgNsRmV8jE6Qd6a7RNiTW7r3+EhbhIdkLb/sjcWsYyOMyUR1TJAB0wQ==} + '@lexical/dragon@0.50.0': + resolution: {integrity: sha512-JX+uzkRn4QLIljS6bWS93Vg1TYIohTP7TXP2mUz6RrxW+x8iqzJuaAR8tjN4SkpCTxI8VpBNWFU8d6B7I9qnXg==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/extension@0.48.0': - resolution: {integrity: sha512-4uBObgz84mVbQWiumndmIhkuJL0ojHiMwFSvSUM/FCo1YMVIZvpI56blI0y+2Vix/oLui9EgVQSJjjWV4NAszw==} + '@lexical/extension@0.50.0': + resolution: {integrity: sha512-iktLl+eLOVT6hE4BOy2GIQeuIOmsksWoPDT9WhEkIlV5IEM/OBLGAzO23Q2G0UV89tXDq1wKa4p6vwLWlCHWLA==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/hashtag@0.48.0': - resolution: {integrity: sha512-hPQtdnbVoNAFsmfnCGfgY7mDbvk6mIznlCRmIR7tLeQKXqz/0Tb6eH3W24EESk9hAF8wFUYNKWE1/Kb3Hl2vEQ==} + '@lexical/hashtag@0.50.0': + resolution: {integrity: sha512-KnkJU+49HV47KrgCoS+zqUQuTZ/e5CtH7ttu0ZgAcZJyNojZ7kHbqtdiH78kZSuqBknD75l+VCNJBpg6ShdtlQ==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/history@0.48.0': - resolution: {integrity: sha512-NllvUfO+u3mfi5uC8k2CodwdzeeopFFVtMZ/NMifzFbZFysdWi9m9mqfO46NrEA1rSFOydyefv6oMzC8ULXInA==} + '@lexical/history@0.50.0': + resolution: {integrity: sha512-UMbvTWOHxfS3SQA0oWN8uvmG64WrFgurojM1KoYjxuUbPFGjumD6al5zsA06d6+TkCDSw6l639tJ43bFr3HE5A==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/html@0.48.0': - resolution: {integrity: sha512-uBxlgKl4YgSNEgHJSshdBqtGDzruWdx1ewop+u6faT67qHUdP3P0cUXIrG6NToDWvsL6fzCstAbN76PMER1Pnw==} + '@lexical/html@0.50.0': + resolution: {integrity: sha512-vMdMWvOyD9EXljNCJk3thms/WEBMUR0rLLaJdzcOk/CwUiAv1KPopGp/8vW0zFmnu42n5i9ufERv0BZ/UGzZMw==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/internal@0.48.0': - resolution: {integrity: sha512-sRwg53K7N0ZQ7KNAvcCY38LSwGizbXP1zlR1lIojZp0GoqHWNvR+vL49t1wYXu1nXx3Osf4ilHHm+aGcwq5hTw==} + '@lexical/internal@0.50.0': + resolution: {integrity: sha512-FGfEKY1L1aIHEh/O+RcRxeLRQV0g95MuU5b26YuzGGyd0IX90pliK9bVph54OaqDdS1AQ0MEVEFGXfSXaGJzxg==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/link@0.48.0': - resolution: {integrity: sha512-E0UDmNLUXs/yMCnnE7hbFO0CvhWghmqa+qqPksFfzLkpMHdPpdS1yg59YEbYoNHLi/DXIu4cFRvpHIEuooxwNg==} + '@lexical/link@0.50.0': + resolution: {integrity: sha512-J/Wn7+XzW3Tm56RKCaHeISPIRJrWaSywGasna7yaMwvZykTM9JS5D/bzPCg0pCCxw8qsPeRX29oDQ+nUEixmUA==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/list@0.48.0': - resolution: {integrity: sha512-9Qe/Vur44v9F9enj55SUzf79FVsijcGOQug7SpiIU8ekLr7JNzcilKYBYcZ6etGEo7bqQHsYMHXeJcSBbCI2zA==} + '@lexical/list@0.50.0': + resolution: {integrity: sha512-eSGU10DUqS+seXkGfTVGJ475M4scdaDE15Vk52nuYODhi0lbO6zNbIoDDGKxaxvzs/CfrHHT3AUGYmruIp/LPw==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/mark@0.48.0': - resolution: {integrity: sha512-DTtypWvnYSXyNUxEmsUnh4y0xXkmdk8Y72EZl8WDHcCwjqaLJlUakH7p/TuSJczs3uVSaoJzu0yh7oGkP1Vsvw==} + '@lexical/mark@0.50.0': + resolution: {integrity: sha512-FClGXbLzEHFX0hJRslXb/YdO5xSZLMuPOj9skRoA3fwbWRLsBhfaIYSEz+7pjMF4P8fFqW2vPCFHvgJD+SgYXw==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/markdown@0.48.0': - resolution: {integrity: sha512-1WasBenW4bEsa5xtnycVo8G2hcxIqyYLn3/r98yD2Y+54ZyeFuIQfOeJYhIgCh4YkKpfqyrFwkMQwAOsQDqZjA==} + '@lexical/markdown@0.50.0': + resolution: {integrity: sha512-H2z7Eed7sVCX+K/UmULqPCpkB5Ch86+/vRHs+VCe7xmDkvBRYZQmErUqx14cV7QwcrQ+wclcDlCojJTUh5MBOQ==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/overflow@0.48.0': - resolution: {integrity: sha512-1YEvMz2tW3EbwrON9mjrkjMVl/vdTcPYSn9P1j6mf5gj0LOoLDNI4TbvSD4SViy+TDghxNdG8YdCISyU2b4YKA==} + '@lexical/overflow@0.50.0': + resolution: {integrity: sha512-jeBFFaViAWxg+i7UKoWxN+VImvwNXq9fuRUMEMXFZqfWhgsC37/NvUOMF4oNVf3mppTMsv38n2y1qR51JLujcQ==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/plain-text@0.48.0': - resolution: {integrity: sha512-q4f/4VZKVgCrIW2FhDFR2RII1BU0ljedPgEmJ8XQn1zc+JOFPom8Lp0lV5nyEvZaAJYwM/TfoJ9g2V7ESFKznA==} + '@lexical/plain-text@0.50.0': + resolution: {integrity: sha512-X1iH6yamtE6PZRlUB4T2epUOzKA19ONozWja3A87mlXEDVhCM7hxeDFzxzWnbqY1/TWsyy8ZCaFktz8GRzTFvw==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/react@0.48.0': - resolution: {integrity: sha512-uVh9/QSrbtjLjVbxfJ+sfiMyhUq/rv7H6uBEVDDIw1rkZJSDY1fvf/CX+dyKgwcDFjKQZ8/9i5f9UCVPeQ01hA==} + '@lexical/react@0.50.0': + resolution: {integrity: sha512-q9USUeO5tunqPmxDG9D11kydRts5jgXO1WJ62u86WXeHOGjMtSjvVwLY+PfQDhCn0aNYF7XvGaIM3Aa04UxF7A==} peerDependencies: react: '>=18.x' react-dom: '>=18.x' typescript: '>=5.2' - yjs: '>=13.5.22' + yjs: '>=13.5.37' peerDependenciesMeta: typescript: optional: true yjs: optional: true - '@lexical/rich-text@0.48.0': - resolution: {integrity: sha512-QMXFnwCKAQ4yzxvx5FwmANcx3K+NaBkGTxAVD8s8pOKDD/U5rzDS1iIvhH6TLWaFp7VzvLmLB+Sl1Ie/RnkaDQ==} + '@lexical/rich-text@0.50.0': + resolution: {integrity: sha512-4EDspglulL6zHlV53Azsq4OduRunJqyrDkldZ8ekrE8ujHhvu2UB3Utzq98Z8TSIllFPvNKmW0Qp/9lJ7378Ag==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/selection@0.48.0': - resolution: {integrity: sha512-Uc0wTrEtHcYK6z/aHHjkgH3vX/R4Bf8mO+qH3VbxfSAKYzNYktM0j+ZGdq5kIEL4frnw/9SulNCXlH7xpjuDgA==} + '@lexical/selection@0.50.0': + resolution: {integrity: sha512-Lu4W+Ht7xd3+R8fXorzsl1LbDMF7UALgvh0LA/nbY5qlmozEyfHr1z4oaV4HAzXN5F8NxSrxCfDEXt5EHU1bfA==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/table@0.48.0': - resolution: {integrity: sha512-t9Mz7q6ODLUz0lG5Xn9EY/5YiVpTHCqlPQP4EtFXlnBQT3DuKeDS3cC0Cn8sGSZc11YY5OLDfWpB64Frs9BL3g==} + '@lexical/table@0.50.0': + resolution: {integrity: sha512-K5GDw8oIsujL8IQY9L5PJXxkODs0c9gqL1CROcfLw7kE4icNXeIVrK/kQ7K3SxQ/stpb5NnBLERTK9ohzPEuLQ==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/text@0.48.0': - resolution: {integrity: sha512-ktTMRbsX4wKxdG2OpZCkrqtt8k9Vg/ZpWdukOQ0r1xPRtCuL1T+q91l7cy2ywIuCfMGYS0aoZGB4LdpUMe/H1g==} + '@lexical/text@0.50.0': + resolution: {integrity: sha512-K2bf6NfzS+PutNrrNlWr47kZx34fCYyiX1vPT4a1/sob8LsGrYwy9mseyFFlNYDlWSP2U/xIKLv2JuaYZX8ohw==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/utils@0.48.0': - resolution: {integrity: sha512-W4k4P+y6jmRfna8+ad4X+iMd5h8es5PC3bUw5tbi7MRApxaaFG/0w+uJiZVSwbT2Q6JnA2xhBaqzPgt/Gn6djg==} + '@lexical/utils@0.50.0': + resolution: {integrity: sha512-iFEKYQufeCtx9I918SteutyMkEKlR6VNldovnCE2ue9ilfKMnj8ghhenMaLzRfslzttvMLrn8d9DP5TWysZqZw==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: typescript: optional: true - '@lexical/yjs@0.48.0': - resolution: {integrity: sha512-fFsE8EnPM/2KK9rMJ0z6T+Da5UW5V4P+XiAA03LoHTY5YQ/Oy8Q0i7Wcmocv/B/SpsY2o8g07euZEfudl9MVKA==} + '@lexical/yjs@0.50.0': + resolution: {integrity: sha512-AfKaHZs0IpHDUS1uoB7yWbhP1VRVWuUbHZ3HnNI2bqhn0h05SWfxxwt/QCwaldLM0WzY9wszpQc8VFSHipjldA==} peerDependencies: typescript: '>=5.2' - yjs: '>=13.5.22' + yjs: '>=13.5.37' peerDependenciesMeta: typescript: optional: true @@ -5645,8 +5238,8 @@ packages: '@lezer/common@1.5.2': resolution: {integrity: sha512-sxQE460fPZyU3sdc8lafxiPwJHBzZRy/udNFynGQky1SePYBdhkBl1kOagA9uT3pxR8K09bOrmTUqA9wb/PjSQ==} - '@lezer/css@1.3.3': - resolution: {integrity: sha512-RzBo8r+/6QJeow7aPHIpGVIH59xTcJXp399820gZoMo9noQDRVpJLheIBUicYwKcsbOYoBRoLZlf2720dG/4Tg==} + '@lezer/css@1.3.6': + resolution: {integrity: sha512-YJE78Wcg+zX8f10hiHWQ4Az48Qr/c13eId0VtRQYLBpxHDmDeSrXIlkbl+fJGW42rWC/uoUco9mhBZeVWP/A1g==} '@lezer/highlight@1.2.3': resolution: {integrity: sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==} @@ -5654,65 +5247,70 @@ packages: '@lezer/lr@1.4.10': resolution: {integrity: sha512-rnCpTIBafOx4mRp43xOxDJbFipJm/c0cia/V5TiGlhmMa+wsSdoGmUN3w5Bqrks/09Q/D4tNAmWaT8p6NRi77A==} - '@lingui/babel-plugin-extract-messages@5.9.2': - resolution: {integrity: sha512-x9HxUUZgnzF5nTsRwCyJxL/csll/psQCeiTiUPMqE1qC9Mq3ZFPygHDUgijIwOCSDnILHM581Fjar/Njvpnnow==} - engines: {node: '>=20.0.0'} + '@lingui/babel-plugin-extract-messages@6.7.0': + resolution: {integrity: sha512-9QNMFsXruVQJMhPRjDBO/6TR7jvKXZWmFnK0ugyjCnjmryiXBWDpYaAsWaZ4vUEMRSPomQlp50Az6Mt9Stk6Ng==} + engines: {node: '>=22.19.0'} - '@lingui/babel-plugin-lingui-macro@5.9.2': - resolution: {integrity: sha512-xy5MNUvtoAlZwQtfby3B9Dnjmnf3w4Xe+jeLEQvB1wOxz/pYMNGxCWgekUQyihlxvFFRKmMyA88EByqAyvGEug==} - engines: {node: '>=20.0.0'} + '@lingui/babel-plugin-lingui-macro@6.7.0': + resolution: {integrity: sha512-YY0mxBP6RZ6sHJ0QymQClEsgNYQ46RGXGBpZUsL16cpALwFnC32nj45yfpIN+eYar+g3wT49ptrD45gylYUirA==} + engines: {node: '>=22.19.0'} peerDependencies: - babel-plugin-macros: 2 || 3 + '@babel/core': ^7.20.12 || ^8.0.0 + '@babel/types': ^7.20.7 || ^8.0.0 peerDependenciesMeta: - babel-plugin-macros: + '@babel/core': + optional: true + '@babel/types': optional: true - '@lingui/cli@5.9.2': - resolution: {integrity: sha512-jGmIB/hKparFvuyspcn3UTjnQEdOrlnBwkQH3xip0LRCyQNjd1sALi27HDyYQAqVINTfk3sDmLbKixYvJhPl1Q==} - engines: {node: '>=20.0.0'} + '@lingui/cli@6.7.0': + resolution: {integrity: sha512-DDhayqKZxl5+h3hoCE8qmP7CbH5/hp8UX832uuaVxRJh9V/fwCmqYoi8nfNa/nvl3CPHkvvwgFhdj+zVyGjHAQ==} + engines: {node: '>=22.19.0'} hasBin: true - - '@lingui/conf@5.9.2': - resolution: {integrity: sha512-tkobrx4HIJDWgYO/qUOJgwOVB5QX+FdQHmk9wetzlhgf0BSc52OCGYeG//oKHteJB0dnr2XYicnTuUtoVwr3+g==} - engines: {node: '>=20.0.0'} - - '@lingui/core@5.9.2': - resolution: {integrity: sha512-2K2lIEiUJ9VNTZU0igiRUubIUvcHu8TEuS4uRrrA5f2DGgCtHD5o7rw6OO9cM1RxZFCC5rpRwIMDeXHrc44W3g==} - engines: {node: '>=20.0.0'} peerDependencies: - '@lingui/babel-plugin-lingui-macro': 5.9.2 + esbuild: ^0.28.1 + rolldown: ^1.0.0 + peerDependenciesMeta: + esbuild: + optional: true + rolldown: + optional: true + + '@lingui/conf@6.7.0': + resolution: {integrity: sha512-qZsE98lhJjT+GRTyFLlAnMKmEcTBE3R5foesY0aJP31r2gd8cxKgAPeiznrzhw7n4PDl7wgUgtQhdfDawDUqCQ==} + engines: {node: '>=22.19.0'} + + '@lingui/core@6.7.0': + resolution: {integrity: sha512-dw6n4S/11ZQJZQZe85AMKOOU+q/D360H4NkWTBO6A597D+2FFkgdLQV89UCidTPyxiI7t5P4qrgcy4m53tQ/+g==} + engines: {node: '>=22.19.0'} + peerDependencies: babel-plugin-macros: 2 || 3 peerDependenciesMeta: - '@lingui/babel-plugin-lingui-macro': - optional: true babel-plugin-macros: optional: true - '@lingui/format-po@5.9.2': - resolution: {integrity: sha512-PMlJERgG0/rCYqMuBDQdsAuEEUxbqe1apwwDJxIniN9vZpwl+4jDZhDQ6J9CwjlaUPe7rCfOm/B79N88ELwTQQ==} - engines: {node: '>=20.0.0'} + '@lingui/format-po@6.7.0': + resolution: {integrity: sha512-lCVeoANXP9fCdEWXTg2quok4j49wgt1O4hdZMdR7ImoUTxdQP0p/QlpT20QecqghPPATeSNuFfzvtFPS2nr93g==} + engines: {node: '>=22.19.0'} - '@lingui/message-utils@5.9.2': - resolution: {integrity: sha512-PQA+bP4TBX7F5nmrEm9eDk+xddepjO7okI6bsOQ+6LIw1eJMvh9w/Xt3AoKTgzBCwd1ZwyqzBOelrX6sa6y+fg==} - engines: {node: '>=20.0.0'} + '@lingui/message-utils@6.7.0': + resolution: {integrity: sha512-Rqxb/Hvq+3sWoPLdaJiNywsFNOcYiBSYBGJOrjyRCVbSUE4T9jviR05+vibmqyaABa1w+W0Pw/EhwV+gCSw4wQ==} + engines: {node: '>=22.19.0'} - '@lingui/react@5.9.2': - resolution: {integrity: sha512-rvDBlz9s1AftAgkJnH/5u3YKlAouRZUsUpSoIajFqkXNEcnIcljFH2Lp7i4nQ7XQ4vpOjzpSH03cggvoo4fWKg==} - engines: {node: '>=20.0.0'} + '@lingui/react@6.7.0': + resolution: {integrity: sha512-CjlWVMOSJ5bqgp9ZSZ+0yrF+1iTQygGNDBzrr1A7s+JYqGjFkGET+vCYDkHaytNpf0p2Xf39/2MsZsZmcHmXLA==} + engines: {node: '>=22.19.0'} peerDependencies: - '@lingui/babel-plugin-lingui-macro': 5.9.2 babel-plugin-macros: 2 || 3 react: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: - '@lingui/babel-plugin-lingui-macro': - optional: true babel-plugin-macros: optional: true - '@lingui/swc-plugin@5.11.0': - resolution: {integrity: sha512-0PBYyozQOiA4WtxKPsnCyrbA9da9zOYehyZjvrv56Kzt9w81xbgnNjuAQZyjIX7UYuqFFE48GvzBqnB5SLLOFA==} + '@lingui/swc-plugin@6.7.0': + resolution: {integrity: sha512-TRLHfeQT/q9JXy0cBGOtbfcEWJFF1szjPCVM4AT1HdZyfGj+dQ0r8hHq+08c4iXZLzlsYilzw+bZJ3TahG5g5w==} peerDependencies: - '@lingui/core': '5' + '@lingui/core': 5 || 6 '@swc/core': '*' next: '*' peerDependenciesMeta: @@ -5721,19 +5319,19 @@ packages: next: optional: true - '@livekit/components-core@0.12.13': - resolution: {integrity: sha512-DQmi84afHoHjZ62wm8y+XPNIDHTwFHAltjd3lmyXj8UZHOY7wcza4vFt1xnghJOD5wLRY58L1dkAgAw59MgWvw==} + '@livekit/components-core@0.12.15': + resolution: {integrity: sha512-bDkK+jkPMgyT4a5lZmdcuc/hZ8fZUrXW+qQPNHVeSpXCBMzk5q9QWzx+HPtTsPJ8hnncWGfoT81RnXHBsy+Z8g==} engines: {node: '>=18'} peerDependencies: - livekit-client: ^2.17.2 + livekit-client: ^2.20.1 tslib: ^2.6.2 - '@livekit/components-react@2.9.20': - resolution: {integrity: sha512-hjkYOsJj9Jbghb7wM5cI8HoVisKeL6Zcy1VnRWTLm0sqVbto8GJp/17T4Udx85mCPY6Jgh8I1Cv0yVzgz7CQtg==} + '@livekit/components-react@2.9.24': + resolution: {integrity: sha512-qw5Oy1EfPg1f/xrKYrFielSrmtxY8BZ9mDt6299G5aikotQIztmldBfTNosrVS7VSNit7qeYfOFSyKaML20W6Q==} engines: {node: '>=18'} peerDependencies: - '@livekit/krisp-noise-filter': ^0.2.12 || ^0.3.0 - livekit-client: ^2.17.2 + '@livekit/krisp-noise-filter': ^0.2.12 || ^0.3.0 || ^0.4.0 + livekit-client: ^2.20.1 react: '>=18' react-dom: '>=18' tslib: ^2.6.2 @@ -5744,11 +5342,8 @@ packages: '@livekit/mutex@1.1.1': resolution: {integrity: sha512-EsshAucklmpuUAfkABPxJNhzj9v2sG7JuzFDL4ML1oJQSV14sqrpTYnsaOudMAw9yOaW53NU3QQTlUQoRs4czw==} - '@livekit/protocol@1.42.2': - resolution: {integrity: sha512-0jeCwoMJKcwsZICg5S6RZM4xhJoF78qMvQELjACJQn6/VB+jmiySQKOSELTXvPBVafHfEbMlqxUw2UR1jTXs2g==} - - '@livekit/protocol@1.44.0': - resolution: {integrity: sha512-/vfhDUGcUKO8Q43r6i+5FrDhl5oZjm/X3U4x2Iciqvgn5C8qbj+57YPcWSJ1kyIZm5Cm6AV2nAPjMm3ETD/iyg==} + '@livekit/protocol@1.51.0': + resolution: {integrity: sha512-kEDEDaFvIcp5VlYBromdSKMJMEJKfPvXPfEaJPdEz1Qgo84gZAoLF2g58CcMlVYGsjrwE5XYgQxRS5B7KuEj3w==} '@malept/cross-spawn-promise@2.0.0': resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} @@ -5758,11 +5353,11 @@ packages: resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} engines: {node: '>= 10.0.0'} - '@marijn/find-cluster-break@1.0.2': - resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} + '@marijn/find-cluster-break@1.0.4': + resolution: {integrity: sha512-Wy0V7+SGUjnF9/TkiM1hKVDPj7jKXduPNboMVtHTA8dySMURWqfg/JZ9E2Sq8JgSJmkl7k7Qe9FLeMSrSraWmQ==} - '@marsidev/react-turnstile@1.4.2': - resolution: {integrity: sha512-xs1qOuyeMOz6t9BXXCXWiukC0/0+48vR08B7uwNdG05wCMnbcNgxiFmdFKDOFbM76qFYFRYlGeRfhfq1U/iZmA==} + '@marsidev/react-turnstile@1.6.1': + resolution: {integrity: sha512-ojI9NLYv821IRKi7KraTkxTto6KC/m58hNNyKxvYxm/cQBu5MI5eMkaiJs2JSQBFiXE3LPQI3seJVjv/2lgALA==} peerDependencies: react: ^17.0.2 || ^18.0.0 || ^19.0 react-dom: ^17.0.2 || ^18.0.0 || ^19.0 @@ -5785,47 +5380,43 @@ packages: '@messageformat/runtime@3.0.2': resolution: {integrity: sha512-dkIPDCjXcfhSHgNE1/qV6TeczQZR59Yx0xXeafVKgK3QVWoxc38ljwpksUpnzCGvN151KUbCJTDZVmahtf1YZw==} - '@module-federation/error-codes@0.22.0': - resolution: {integrity: sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==} - - '@module-federation/runtime-core@0.22.0': - resolution: {integrity: sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==} - - '@module-federation/runtime-tools@0.22.0': - resolution: {integrity: sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==} - - '@module-federation/runtime@0.22.0': - resolution: {integrity: sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==} - - '@module-federation/sdk@0.22.0': - resolution: {integrity: sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==} - - '@module-federation/webpack-bundler-runtime@0.22.0': - resolution: {integrity: sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==} - - '@mswjs/interceptors@0.41.3': - resolution: {integrity: sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==} + '@mswjs/interceptors@0.41.9': + resolution: {integrity: sha512-VVPPgHyQ6ShqnrmDWuxjmUIsO9gWyOZFmuOfLd9LfBGQJwZfy0gvv9pbHSJuoFNIYC7ZDX9aoFwowjcdSC4E8w==} engines: {node: '>=18'} - '@napi-rs/lzma-linux-x64-gnu@1.5.1': - resolution: {integrity: sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==} - engines: {node: ^22.20 || ^24.12 || >=25} - cpu: [x64] - os: [linux] - libc: [glibc] + '@napi-rs/wasm-runtime@1.1.6': + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 - '@napi-rs/wasm-runtime@1.0.7': - resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} - - '@napi-rs/wasm-runtime@1.2.3': - resolution: {integrity: sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==} + '@napi-rs/wasm-runtime@1.2.4': + resolution: {integrity: sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g==} engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} peerDependencies: '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 - '@neon-rs/load@0.1.82': - resolution: {integrity: sha512-H4Gu2o5kPp+JOEhRrOQCnJnf7X6sv9FBLttM/wSbb4efsgFWeHzfU/ItZ01E5qqEk+U6QGdeVO7lxXIAtYHr5A==} + '@nats-io/jetstream@3.4.0': + resolution: {integrity: sha512-GzHQodNJ942+R5LRb8PuZ5ugVWVWMRiufxUYLLVWkXKfwDXYN+Owo0d7L/b9O7BPyrbYD7jQWAC6+ZVuXa9Gyw==} + + '@nats-io/nats-core@3.4.0': + resolution: {integrity: sha512-QMDM86EUNm+wudlKC67HLar/KHHQUvJGLfb4jbahje3pUk3K9afeck9fwsxBZF0eUFox6T/TA6m/t+lQqf+QsQ==} + + '@nats-io/nkeys@2.0.3': + resolution: {integrity: sha512-JVt56GuE6Z89KUkI4TXUbSI9fmIfAmk6PMPknijmuL72GcD+UgIomTcRWiNvvJKxA01sBbmIPStqJs5cMRBC3A==} + engines: {node: '>=18.0.0'} + + '@nats-io/nuid@3.0.0': + resolution: {integrity: sha512-QbXZDrxmYlrn5AD06gYcUTmEHwxn96HBQMIk7XTjDlEcx6FPzVBBPjp4AMRh1lEv6B4iJ6Xb/Uz61JugPXFRQg==} + engines: {node: '>= 22.x'} + + '@nats-io/transport-node@3.4.0': + resolution: {integrity: sha512-hH7u7ejIBTFEJIZ8rIcMrHJI6wl+HhpO5sVFs1+ppmXa8RuB2+Lh1+UwTzZ5xTNNm1TKcRkYy+2qCV56qp8RxA==} + engines: {node: '>= 18.0.0'} + + '@neon-rs/load@0.2.6': + resolution: {integrity: sha512-7p8j+guEhGTJNJISgmHO0homqGYAc0SDfmgGZfluMcQnimcceMY87b4hdqufp+7YmsOVC4W/JvT3/Tpi3/gy+Q==} '@noble/hashes@1.4.0': resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} @@ -5838,47 +5429,163 @@ packages: '@nodable/entities@3.0.0': resolution: {integrity: sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw==} - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - '@open-draft/deferred-promise@2.2.0': resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + '@open-draft/deferred-promise@3.0.0': + resolution: {integrity: sha512-XW375UK8/9SqUVNVa6M0yEy8+iTi4QN5VZ7aZuRFQmy76LRwI9wy5F4YIBU6T+eTe2/DNDo8tqu8RHlwLHM6RA==} + '@open-draft/logger@0.3.0': resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@opentelemetry/api@1.9.0': - resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + '@opentelemetry/api@1.9.1': + resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} engines: {node: '>=8.0.0'} - '@opentelemetry/core@2.10.0': - resolution: {integrity: sha512-/wNZ8twnEQQA4HoHu22+vcsdru6pWPWxW+7w+FlxT6Id7PE/WIbZmVKkte+PF72e0F2dnImFeHD2syyE1Mw6MQ==} + '@opentelemetry/core@2.11.0': + resolution: {integrity: sha512-7YP44XH0tV6+Mb54x2YGf84i7yi+31MBZlE8JwvozkxyTvXbSp10X7cI7YE49ChJ3shMJoBmCJF3+1QFBJctGA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/semantic-conventions@1.39.0': - resolution: {integrity: sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==} + '@opentelemetry/semantic-conventions@1.43.0': + resolution: {integrity: sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==} engines: {node: '>=14'} '@oslojs/encoding@1.1.0': resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + '@oxc-parser/binding-android-arm-eabi@0.148.0': + resolution: {integrity: sha512-pHASv9g5pASxb7akHERZNSkrEqPhFaUix98o7d9hbTpolnnFWl7UiRrcMhCsV1+iVO4/cJwKsbKRJTFNs2tdBQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-parser/binding-android-arm64@0.148.0': + resolution: {integrity: sha512-sg/6Ez0KdAygsu0POELux9wN1Po2CP93WY8eNl4DBKIGprsd4QSHBXOb471Pu9i2OCD5sLkISSb2agZEhVn2Zw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-parser/binding-darwin-arm64@0.148.0': + resolution: {integrity: sha512-yiSJmzGUvCUaJT8X3j40gVcX+ckuHQMuiOtF8DvzTs5+JtB/7XuHFPp4M+vv5u+HlBtDUd4Ks5pyHpWz8mfnkg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.148.0': + resolution: {integrity: sha512-6ZeklaamrMy4H2JmhvcJg6iip59tYILtuLaILxyAHT3l5FDxnI5ihVievAft5ZmAbqtlWHErOi1OpJK8gy1wcA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-freebsd-x64@0.148.0': + resolution: {integrity: sha512-vFsPx+a/qFECPnz/H8nC6x6MDvnWscLTCo/5muojEF54ERUq1kdgbvnWo95YnkhjF9sTIcG/uDxQBh1gffaufQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-parser/binding-linux-arm-gnueabihf@0.148.0': + resolution: {integrity: sha512-eOr3M+6iGbbxNL4PSS0VtsyQ2eOUxSBh00BqO22SbolDimPSYsBuLr/LCrZBkiqW2BoabhR6V4R8jrRAay7hjg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-musleabihf@0.148.0': + resolution: {integrity: sha512-58ZKDw0mQRbCNfrd2IDyV4o8T7enzGERJn41BH2tjrZVGyiKiFzcfDicuB7Zcpb/1xIOrObovr8Dja6lZi8dLw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm64-gnu@0.148.0': + resolution: {integrity: sha512-Fnu95O4eZ5i++GPvIzBEZ8y4ddTLR+D9paYa8JRaRk6ZK7nHQiWP5xtrhcPQsXqgat1d7sU/d5rbbI0p1FTHSQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-arm64-musl@0.148.0': + resolution: {integrity: sha512-3CQy/BMdx7N7H3qrcPxUL+a2CwUZodUcf6oq8iJuNZ9C6Ol1aq3mcWzsgySJ7CHFLvpX21ZDPp1r1X0QLbu/AQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-ppc64-gnu@0.148.0': + resolution: {integrity: sha512-9LkaYvfiF8hMOw900csAvkf1oxE8XlmMeGowu5BcastSSwV8mKvKRMNU7HsV+ycyj1dQD8pX5qgOw8ja6SJacg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-gnu@0.148.0': + resolution: {integrity: sha512-2GBiM9h26dR4WJfhoMvnFMnFLf7m/kYs4UMqjvrOfQG4BV1nuTJDH22Zc2MQr3INZF7nSKYQ6xlhD3hQ7A6gug==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-musl@0.148.0': + resolution: {integrity: sha512-uPqZexvKJmEgq4mAu36qe2xTfXZE7oyik1R7KtZ5tl8qKlq1U1fIqTFRUEBZqRGvforoTrGIpatRzcoPKO66RA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-s390x-gnu@0.148.0': + resolution: {integrity: sha512-9oUHvnTbp7ZraFsTC8PN6XhdhPSSxZumYvixWl7Smi353gEULvK6yV0sXNVrdFMHQeaDKFCi8TgDhNK7/A+Y+Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-gnu@0.148.0': + resolution: {integrity: sha512-2qhDSJwKzbSZzF7lDqqk8sr/yXsmwr3PeUa4/nazIF+zFAYz1gVPEfC34GQtGxzJUUmklaYAL63368LEfrMeyw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-musl@0.148.0': + resolution: {integrity: sha512-qQoPDZUFV0bh9xA09XydmkjMBpgc1ukJuhMvzQ9QeVmFaHTS9W5TE5CoLmSl3QQyUP9OuHO3x/WPZTIIZPWR3Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-openharmony-arm64@0.148.0': + resolution: {integrity: sha512-1UGbaQWEXUCLqAmaR5kwRDjx/R4S5LQKZkM9CHmaHkuKhriOF32aRLfS0jCRNE2yGQJLMEA1z9UucbBVqjXnDw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-parser/binding-win32-arm64-msvc@0.148.0': + resolution: {integrity: sha512-pWKdzRDNG2+NK4h/V6U/CYERcfYD6u28h5IB/VJVsrZaD3muvE58tUj22lieL5vLZ+XFi1GPv9YXckZbJZ9BLA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-ia32-msvc@0.148.0': + resolution: {integrity: sha512-i3p4x+mvwtjcE1J5HM6V7ggsbXiznExN/4MkNyOy3dfXrVV3bnkSfmZxvo6/84qCVX4ShkpNE1SKt9biIF31GQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.148.0': + resolution: {integrity: sha512-Ye6vB7VQulghWYkYkECOBYFRVEizz4XyRTUAv+t8BuyurhKU7uD0P9eowL+mKG5Mf8MSYx+DI3Cm8SKZvYG7bQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@oxc-project/types@0.148.0': resolution: {integrity: sha512-Nm4s/jB+4FpFsPhWGEC4h7rzksesmtnMXomo6rCMcg/b8zLQuOziRgkCS1fxDCXOlJB/6Q8oABOZ/OP6RIPj9A==} + '@oxc-project/types@0.150.0': + resolution: {integrity: sha512-rDS5/31E9HfPl/CIzGrn0DOlvBbXFseQ5URJ9sYMfstbKLD/c6Gm9vmRzRGDdAXyOIL4zmO37lc9RIwYqVruZw==} + '@oxc-resolver/binding-android-arm-eabi@11.24.2': resolution: {integrity: sha512-y09e0L0SRI2OA2tUIrjBgoV3eH5hvUKXNkJqXmNo5V2WxIjyC7I7aJfRLMEVpA8yi95f90gFDvO0VMgrDw+vwA==} cpu: [arm] @@ -6020,130 +5727,145 @@ packages: cpu: [x64] os: [win32] - '@parcel/watcher-android-arm64@2.5.6': - resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} + '@parcel/watcher-android-arm64@2.5.1': + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [android] - '@parcel/watcher-darwin-arm64@2.5.6': - resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] - '@parcel/watcher-darwin-x64@2.5.6': - resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} + '@parcel/watcher-darwin-x64@2.5.1': + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] - '@parcel/watcher-freebsd-x64@2.5.6': - resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] - '@parcel/watcher-linux-arm-glibc@2.5.6': - resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] libc: [glibc] - '@parcel/watcher-linux-arm-musl@2.5.6': - resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} + '@parcel/watcher-linux-arm-musl@2.5.1': + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] libc: [musl] - '@parcel/watcher-linux-arm64-glibc@2.5.6': - resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} + '@parcel/watcher-linux-arm64-glibc@2.5.1': + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] libc: [glibc] - '@parcel/watcher-linux-arm64-musl@2.5.6': - resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] libc: [musl] - '@parcel/watcher-linux-x64-glibc@2.5.6': - resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] libc: [glibc] - '@parcel/watcher-linux-x64-musl@2.5.6': - resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] libc: [musl] - '@parcel/watcher-win32-arm64@2.5.6': - resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} + '@parcel/watcher-win32-arm64@2.5.1': + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [win32] - '@parcel/watcher-win32-ia32@2.5.6': - resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} + '@parcel/watcher-win32-ia32@2.5.1': + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} engines: {node: '>= 10.0.0'} cpu: [ia32] os: [win32] - '@parcel/watcher-win32-x64@2.5.6': - resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} + '@parcel/watcher-win32-x64@2.5.1': + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] - '@parcel/watcher@2.5.6': - resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} + '@parcel/watcher@2.5.1': + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} engines: {node: '>= 10.0.0'} - '@peculiar/asn1-android@2.6.0': - resolution: {integrity: sha512-cBRCKtYPF7vJGN76/yG8VbxRcHLPF3HnkoHhKOZeHpoVtbMYfY9ROKtH3DtYUY9m8uI1Mh47PRhHf2hSK3xcSQ==} + '@peculiar/asn1-android@2.9.4': + resolution: {integrity: sha512-SYHm4SoWSI0nRCoos6jpGusIqhPH9bbGBqv7ohlZ+H6BunrDzzQPk2ePgDuEUzV82OdvbLgtW4twUDwhU9P3YQ==} + engines: {node: '>=14'} - '@peculiar/asn1-cms@2.6.1': - resolution: {integrity: sha512-vdG4fBF6Lkirkcl53q6eOdn3XYKt+kJTG59edgRZORlg/3atWWEReRCx5rYE1ZzTTX6vLK5zDMjHh7vbrcXGtw==} + '@peculiar/asn1-asym-key@2.9.4': + resolution: {integrity: sha512-s7SJfjcXlR3MYMngDTeMLCy3VjGaIxeEy905CQ0j09pDbeYhNBvBGA7r7cAvCZYkVFo9kVg9RAki0K2iUz7SGQ==} + engines: {node: '>=14'} - '@peculiar/asn1-csr@2.6.1': - resolution: {integrity: sha512-WRWnKfIocHyzFYQTka8O/tXCiBquAPSrRjXbOkHbO4qdmS6loffCEGs+rby6WxxGdJCuunnhS2duHURhjyio6w==} + '@peculiar/asn1-cms@2.9.4': + resolution: {integrity: sha512-cben7oxmQsUGZqotus7yt0srYdncOT6RNWcTQ77T2RFOXejYVYkXadrfePdRcrVpO9K95IRLKKglG2k38jKXuw==} + engines: {node: '>=14'} - '@peculiar/asn1-ecc@2.6.1': - resolution: {integrity: sha512-+Vqw8WFxrtDIN5ehUdvlN2m73exS2JVG0UAyfVB31gIfor3zWEAQPD+K9ydCxaj3MLen9k0JhKpu9LqviuCE1g==} + '@peculiar/asn1-csr@2.9.4': + resolution: {integrity: sha512-xd4YN4vpRjkDAQWVfZZkeu12IEND7DOpkqaHSIHxZl1uggUNa9Ju0QxY2jHvDAS9pP0zhRBytg8ifsnGo3V0jw==} + engines: {node: '>=14'} - '@peculiar/asn1-pfx@2.6.1': - resolution: {integrity: sha512-nB5jVQy3MAAWvq0KY0R2JUZG8bO/bTLpnwyOzXyEh/e54ynGTatAR+csOnXkkVD9AFZ2uL8Z7EV918+qB1qDvw==} + '@peculiar/asn1-ecc@2.9.4': + resolution: {integrity: sha512-JJXefFshRAuVAjWQo/39bkg1ywc1VaiO44S8RRC+Ykvf/u2KDmYffoDb0ZBPCR5uJy4AGKQhl8mX+Q8ShcWaXQ==} + engines: {node: '>=14'} - '@peculiar/asn1-pkcs8@2.6.1': - resolution: {integrity: sha512-JB5iQ9Izn5yGMw3ZG4Nw3Xn/hb/G38GYF3lf7WmJb8JZUydhVGEjK/ZlFSWhnlB7K/4oqEs8HnfFIKklhR58Tw==} + '@peculiar/asn1-pfx@2.9.4': + resolution: {integrity: sha512-khuGzHTzNzk4GDlIBEILyIs6Lce0yn0ZBdoI9v93kmNncfZRhD+AQ5ODFqdhvoE8cMJF/JMTQ8yA+t1D14kqCw==} + engines: {node: '>=14'} - '@peculiar/asn1-pkcs9@2.6.1': - resolution: {integrity: sha512-5EV8nZoMSxeWmcxWmmcolg22ojZRgJg+Y9MX2fnE2bGRo5KQLqV5IL9kdSQDZxlHz95tHvIq9F//bvL1OeNILw==} + '@peculiar/asn1-pkcs8@2.9.4': + resolution: {integrity: sha512-duRdotlUx9eDZe6QrQpQKl61RbWykCHBCkKayP8V8XdEFwlKHZ8qGGDMyS6Pye7OX7nLFttTTpRkJeet78ckwQ==} + engines: {node: '>=14'} - '@peculiar/asn1-rsa@2.6.1': - resolution: {integrity: sha512-1nVMEh46SElUt5CB3RUTV4EG/z7iYc7EoaDY5ECwganibQPkZ/Y2eMsTKB/LeyrUJ+W/tKoD9WUqIy8vB+CEdA==} + '@peculiar/asn1-pkcs9@2.9.4': + resolution: {integrity: sha512-kaL4cNxBpdQE2dKlyZBqz4ygCrwffO+8wfoxTEqM1Z8RadvCeELBRzcv0dzM8aY9azHMwODO5nxU65zXmhToOQ==} + engines: {node: '>=14'} - '@peculiar/asn1-schema@2.6.0': - resolution: {integrity: sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==} + '@peculiar/asn1-rsa@2.9.4': + resolution: {integrity: sha512-pZ96eD1PptovcWQ/GSmuNFXd/7EQJNlKfDaNCyE2rx3W0v6QFelkzquVqRSRyyDXXCYD69ZXJDzZ8GhIiQzKoA==} + engines: {node: '>=14'} '@peculiar/asn1-schema@2.9.4': resolution: {integrity: sha512-GjzePcT9Iw8NzeOPf73iNS9xM+TBhd/FilAfP+RQGkTMQJTVWtytN3JHJACCjf/ABNau5S7mS3g+DcuxmRgYEg==} engines: {node: '>=14'} - '@peculiar/asn1-x509-attr@2.6.1': - resolution: {integrity: sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ==} + '@peculiar/asn1-x509-attr@2.9.4': + resolution: {integrity: sha512-ehQXbpQaQYycgu8OrvigwSPTFfVRcu0ECNYCWw+yzBp02Lw5paRqzzhUpfOgO2K38+WfFZuEz/0RPtam5g0OMg==} + engines: {node: '>=14'} - '@peculiar/asn1-x509@2.6.1': - resolution: {integrity: sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA==} + '@peculiar/asn1-x509-post-quantum@2.9.4': + resolution: {integrity: sha512-GD0k7BY3dsEIeai7C7bVRPddj/PzZu+sTawRPRxdHKbdy1f9b58WQyk0eFJdr28GShyLVTU8poyi4+bTAZfEtQ==} + engines: {node: '>=14'} + + '@peculiar/asn1-x509@2.9.4': + resolution: {integrity: sha512-CxhBo/RdEbMMob7T31ZdQjGuoyRFLVwrDzTn25bihzBasRg9kRm/0IxIPvhgQtcK/9dNcO1XQL2fuPugwELL0Q==} + engines: {node: '>=14'} '@peculiar/json-schema@1.1.12': resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} @@ -6156,8 +5878,8 @@ packages: resolution: {integrity: sha512-ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ==} engines: {node: '>=14.18.0'} - '@peculiar/x509@1.14.3': - resolution: {integrity: sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==} + '@peculiar/x509@2.1.0': + resolution: {integrity: sha512-IYbg1R03CSQGWwl24kGyqrdVtixNSbRaDvBg1r5wyYjTP+VwPQkka1BzTgU5+vxiuwqg04OxdvdJ1xYYFIdUSA==} engines: {node: '>=20.0.0'} '@phc/format@1.0.0': @@ -6174,13 +5896,6 @@ packages: '@pinojs/redact@0.4.0': resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@polka/url@1.0.0-next.29': - resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - '@preact/signals-core@1.14.4': resolution: {integrity: sha512-HNB6HYeYKhQbJ1aKl+YRjrS4+QWHLKX6qKoUsfS/m0vqzsVaEBiZiaKbG/e+NKk2ch5ALQr/ihWaMHxiCuuWHA==} @@ -6211,11 +5926,11 @@ packages: '@protobufjs/utf8@1.1.2': resolution: {integrity: sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug==} - '@radix-ui/primitive@1.1.3': - resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + '@radix-ui/primitive@1.1.7': + resolution: {integrity: sha512-rqWnm76nYT8HoNNqEjpgJ7Pw/DrBj5iBTrmEPo6HTX5+VJyBNOqTdv4g89G63HuR5g0AaENoAcH7Is5fF2kZ8Q==} - '@radix-ui/react-checkbox@1.3.3': - resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==} + '@radix-ui/react-checkbox@1.3.11': + resolution: {integrity: sha512-Gnptr9pDDQxD3hgq2dtPbtrp/c2qH1mBwIzw3X/ivrMb2e1t0jMTi606fVEqFPaQR1ggXIVQWKj3P2WW9v7zGQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6227,8 +5942,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-collection@1.1.7': - resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} + '@radix-ui/react-collection@1.1.15': + resolution: {integrity: sha512-9W+B9NPF0NaaPh/1NJd3+KqsnlLqU9H7T2rvww+fp+T/evVXdNAyYcnfRQZFOjkR1ajQp3yORlqnI8soawLvNA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6240,8 +5955,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-compose-refs@1.1.2': - resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + '@radix-ui/react-compose-refs@1.1.5': + resolution: {integrity: sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -6249,8 +5964,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-context@1.1.2': - resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + '@radix-ui/react-context@1.2.2': + resolution: {integrity: sha512-RHCUGwKHDr0hDGg4X7ma4JG4/+12qxw8rkh5QKdDldlCvtja6nUx1Ef/8HVrJze81lEsgLQlqjzjGNHantgnQA==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -6258,8 +5973,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-direction@1.1.1': - resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} + '@radix-ui/react-direction@1.1.4': + resolution: {integrity: sha512-5pzg4FGQNpExhnhT2zlrP1wZFaYCd1K0nYWoFAdcYoYK868IEigqMX3B3f8yIoRlAhAeDWciLI6ZdCKHF9P4Vg==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -6267,8 +5982,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-id@1.1.1': - resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + '@radix-ui/react-id@1.1.4': + resolution: {integrity: sha512-TMQp2llA+RYn7JcjnrMnz7wN4pcVttPZnRZo52PLQsoLVKzNlVwUeHmfePgTgRluXFvlD3GD5g5MOVVTJCO0qA==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -6276,8 +5991,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-presence@1.1.5': - resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + '@radix-ui/react-presence@1.1.10': + resolution: {integrity: sha512-3wyzCQ6+ubRA+D4uv9m95JYLXxmOHp05qjrkjeA7uKHHtjpPggQzc6DAb0URl7j67oR0K2foO4ip27TiX037Bw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6289,8 +6004,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-primitive@2.1.3': - resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + '@radix-ui/react-primitive@2.1.10': + resolution: {integrity: sha512-MucOnzh6hR5mid6VpkbglRAMYMjKLqRnGBbjXkzjK52fuQDd1qbkx78a5P40mkcnVXJdEVxm26E9OPAiUq7nBg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6302,8 +6017,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-radio-group@1.3.8': - resolution: {integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==} + '@radix-ui/react-radio-group@1.4.7': + resolution: {integrity: sha512-cgYFEkntCxppHZgtSZ+7vh0wbZQ+IC7PPMw8DSnRG27B6kDd32/Zw0OJt7dGDigCoprMuWHjg2PvUn3PYvPFoQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6315,8 +6030,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-roving-focus@1.1.11': - resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} + '@radix-ui/react-roving-focus@1.1.19': + resolution: {integrity: sha512-V9jI6hDjT7l3jsCQD9bLNvDLM3tH/gdbOTp7Tefp3hbbgCGQoK7tUvrWiRlcoBHIZ809ElXwNQwVo0B98LuTXQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6328,8 +6043,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-slot@1.2.3': - resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + '@radix-ui/react-slot@1.3.3': + resolution: {integrity: sha512-qx7oqnYbxnK9kYI9m317qmFmEgo6ywqWvbTogdj7cL9p3/yx4M48p7Rnw5z3H890cL/ow/EeWJsuTykeZVXP5Q==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -6337,8 +6052,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-switch@1.2.6': - resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} + '@radix-ui/react-switch@1.3.7': + resolution: {integrity: sha512-48tB/4dn2UVLBCYhTu9AuR63IHl73l/qLbLgxd86noTUor4/K4LFDAcYjK+isP5313qxaFpjPVogE7+Y0/V3Kw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6350,8 +6065,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-use-callback-ref@1.1.1': - resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + '@radix-ui/react-use-callback-ref@1.1.4': + resolution: {integrity: sha512-R6OUY2e2fA6Yn6s+VSx5KBV6Nx8LQEhu+cz7LCej18rQ1HLyg9PSC9jP/ZNx0o6FAIK9c0F1kHylzSxKsdlkrQ==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -6359,8 +6074,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-controllable-state@1.2.2': - resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + '@radix-ui/react-use-controllable-state@1.2.6': + resolution: {integrity: sha512-uEQJGT97ZA/TgP/Hydw47lHu+/vQj6z/0jA+WeTbK1o9Rx45GImjpD0tc3W5ad3D6XTSR6e1yEO0FvGq6WQfVQ==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -6368,8 +6083,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-effect-event@0.0.2': - resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + '@radix-ui/react-use-effect-event@0.0.5': + resolution: {integrity: sha512-7cshFL8HGS/7HEiHH+9kL9HBwp2sa9yX18Knwek6KYWmXwM7pegMgta2AXMQKI+rq3JnfSj9x8wYqFMTdG1Jgg==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -6377,8 +6092,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-layout-effect@1.1.1': - resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + '@radix-ui/react-use-is-hydrated@0.1.3': + resolution: {integrity: sha512-umO/aJ+82CpOnhDZUTbILCQf7kU/g0iv+oGs/Q8jw7IkhWBzaEP4sA268PhFAJTFetbwp3ICc6ktpI4TqtxcIw==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -6386,8 +6101,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-previous@1.1.1': - resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + '@radix-ui/react-use-layout-effect@1.1.4': + resolution: {integrity: sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -6395,8 +6110,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-use-size@1.1.1': - resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + '@radix-ui/react-use-size@1.1.4': + resolution: {integrity: sha512-D3anSY15EJoxrihpsXI6SMrmmonnQtR2ni7arO+Lfdg3O95b9hNXxONk8jA5C8ANdF/h5HMAxejgs8PWJ6rlhw==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -6404,293 +6119,8 @@ packages: '@types/react': optional: true - '@react-aria/autocomplete@3.0.0-rc.5': - resolution: {integrity: sha512-qcGr/ZlSJxw78QtXB29MnvCwGZKlJ5FGfSICjaX/KIg4ONGFR/u4QjP/axA+vhlPa9Ik7BNeikWQriTcYrkbhw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/breadcrumbs@3.5.31': - resolution: {integrity: sha512-j8F2NMHFGT/n3alfFKdO4bvrY/ymtdL04GdclY7Vc6zOmCnWoEZ2UA0sFuV7Rk9dOL8fAtYV1kMD1ZRO/EMcGA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/button@3.14.4': - resolution: {integrity: sha512-6mTPiSSQhELnWlnYJ1Tm1B0VL1GGKAs2PGAY3ZGbPGQPPDc6Wu82yIhuAO8TTFJrXkwAiqjQawgDLil/yB0V7Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/calendar@3.9.4': - resolution: {integrity: sha512-0BvU8cj6uHn622Vp8Xd21XxXtvp3Bh4Yk1pHloqDNmUvvdBN+ol3Xsm5gG3XKKkZ+6CCEi6asCbLaEg3SZSbyg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/checkbox@3.16.4': - resolution: {integrity: sha512-FcZj6/f27mNp2+G5yxyOMRZbZQjJ1cuWvo0PPnnZ4ybSPUmSzI4uUZBk1wvsJVP9F9n+J2hZuYVCaN8pyzLweA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/collections@3.0.2': - resolution: {integrity: sha512-5GV0fj1bvfdztHozlZQ1nzdmcZOAOdZ5BhwrSyuHbK5ptmQrpAoWUK+VTQlxkAfyn5i6niaaN/llP1v3RgEemw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/color@3.1.4': - resolution: {integrity: sha512-LNFo0A9EEn2HZ8O/hASschH++M+krfezcp01XPv0/2ZQJ5b5u7VvJlUOEXtPsD4i9+BzvkSAEoVUXdlJie9V2Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/combobox@3.14.2': - resolution: {integrity: sha512-qwBeb8cMgK3xwrvXYHPtcphduD/k+oTcU18JHPvEO2kmR32knB33H81C2/Zoh4x86zTDJXaEtPscXBWuQ/M7AQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/datepicker@3.16.0': - resolution: {integrity: sha512-QynYHIHE+wvuGopl/k05tphmDpykpfZ3l3eKnUfGrqvAYJEeCOyS0qoMlw7Vq3NscMLFbJI6ajqBmlmtgFNiSA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/dialog@3.5.33': - resolution: {integrity: sha512-C5FpLAMJU6gQU8gztWKlEJ2A0k/JKl0YijNOv3Lizk+vUdF5njROSrmFs16bY5Hd6ycmsK9x/Pqkq3m/OpNFXA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/disclosure@3.1.2': - resolution: {integrity: sha512-UQ/CmWcdcROfRTMtvfsnYHrEsPPNbwZifZ/UErQpbvU4kzal2N+PpuP3+kpdf4G7TeMt+uJ8S9dLzyFVijOj9A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/dnd@3.11.5': - resolution: {integrity: sha512-3IGrABfK8Cf6/b/uEmGEDGeubWKMUK3umWunF/tdkWBnIaxpdj4gRkWFMw7siWQYnqir6AN567nrWXtHFcLKsA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/focus@3.21.4': - resolution: {integrity: sha512-6gz+j9ip0/vFRTKJMl3R30MHopn4i19HqqLfSQfElxJD+r9hBnYG1Q6Wd/kl/WRR1+CALn2F+rn06jUnf5sT8Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/form@3.1.4': - resolution: {integrity: sha512-GjPS85cE/34zal3vs6MOi7FxUsXwbxN4y6l1LFor2g92UK97gVobp238f3xdMW2T8IuaWGcnHeYFg+cjiZ51pQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/grid@3.14.7': - resolution: {integrity: sha512-8eaJThNHUs75Xf4+FQC2NKQtTOVYkkDdA8VbfbqG06oYDAn7ETb1yhbwoqh1jOv7MezCNkYjyFe4ADsz2rBVcw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/gridlist@3.14.3': - resolution: {integrity: sha512-t3nr29nU5jRG9MdWe9aiMd02V8o0pmidLU/7c4muWAu7hEH+IYdeDthGDdXL9tXAom/oQ+6yt6sOfLxpsVNmGA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/i18n@3.12.15': - resolution: {integrity: sha512-3CrAN7ORVHrckvTmbPq76jFZabqq+rScosGT5+ElircJ5rF5+JcdT99Hp5Xg6R10jk74e8G3xiqdYsUd+7iJMA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/interactions@3.27.0': - resolution: {integrity: sha512-D27pOy+0jIfHK60BB26AgqjjRFOYdvVSkwC31b2LicIzRCSPOSP06V4gMHuGmkhNTF4+YWDi1HHYjxIvMeiSlA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/label@3.7.24': - resolution: {integrity: sha512-lcJbUy6xyicWKNgzfrXksrJ2CeCST2rDxGAvHOmUxSbFOm26kK710DjaFvtO4tICWh/TKW5mC3sm77soNcVUGA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/landmark@3.0.9': - resolution: {integrity: sha512-YYyluDBCXupnMh91ccE5g27fczjYmzPebHqTkVYjH4B6k45pOoqsMmWBCMnOTl0qOCeioI+daT8W0MamAZzoSw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/link@3.8.8': - resolution: {integrity: sha512-hxQEvo5rrn2C0GOSwB/tROe+y//dyhmyXGbm8arDy6WF5Mj0wcjjrAu0/dhGYBqoltJa16iIEvs52xgzOC+f+Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/listbox@3.15.2': - resolution: {integrity: sha512-xcrgSediV8MaVmsuDrDPmWywF82/HOv+H+Y/dgr6GLCWl0XDj5Q7PyAhDzUsYdZNIne3B9muGh6IQc3HdkgWqg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/live-announcer@3.4.4': - resolution: {integrity: sha512-PTTBIjNRnrdJOIRTDGNifY2d//kA7GUAwRFJNOEwSNG4FW+Bq9awqLiflw0JkpyB0VNIwou6lqKPHZVLsGWOXA==} - - '@react-aria/menu@3.20.0': - resolution: {integrity: sha512-BAsHuf7kTVmawNUkTUd5RB3ZvL6DQQT7hgZ2cYKd/1ZwYq4KO2wWGYdzyTOtK1qimZL0eyHyQwDYv4dNKBH4gw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/meter@3.4.29': - resolution: {integrity: sha512-XAhJf8LlYQl+QQXqtpWvzjlrT8MZKEG6c8N3apC5DONgSKlCwfmDm4laGEJPqtuz3QGiOopsfSfyTFYHjWsfZw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/numberfield@3.12.4': - resolution: {integrity: sha512-TgKBjKOjyURzbqNR2wF4tSFmQKNK5DqE4QZSlQxpYYo1T6zuztkh+oTOUZ4IWCJymL5qLtuPfGHCZbR7B+DN2w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/overlays@3.31.1': - resolution: {integrity: sha512-U5BedzcXU97U5PWm4kIPnNoVpAs9KjTYfbkGx33vapmTVpGYhQyYW9eg6zW2E8ZKsyFJtQ/jkQnbWGen97aHSQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/progress@3.4.29': - resolution: {integrity: sha512-orSaaFLX5LdD9UyxgBrmP1J/ivyEFX+5v4ENPQM5RH5+Hl+0OJa+8ozI0AfVKBqCYc89BOZfG7kzi7wFHACZcQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/radio@3.12.4': - resolution: {integrity: sha512-2sjBAE8++EtAAfjwPdrqEVswbzR4Mvcy4n8SvwUxTo02yESa9nolBzCSdAUFUmhrNj3MiMA+zLxQ+KACfUjJOg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/searchfield@3.8.11': - resolution: {integrity: sha512-5R0prEC+jRFwPeJsK6G4RN8QG3V/+EaIuw9p79G1gFD+1dY81ZakiZIIJaLWRyO7AzYBGyC/QFHtz0m3KGQT/Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/select@3.17.2': - resolution: {integrity: sha512-oMpHStyMluRf67qxrzH5Qfcvw6ETQgZT1Qw2xvAxQVRd5IBb0PfzZS7TGiULOcMLqXAUOC28O/ycUGrGRKLarg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/selection@3.27.1': - resolution: {integrity: sha512-8WQ4AtWiBnk9UEeYkqpH12dd8KQW2aFbNZvM4sDfLtz7K7HWyY/MkqMe/snk9IcoSa7t4zr0bnoZJcWSGgn2PQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/separator@3.4.15': - resolution: {integrity: sha512-A1aPQhCaE8XeelNJYPjHtA2uh921ROh8PNiZI4o62x80wcziRoctN5PAtNHJAx7VKvX66A8ZVGbOqb7iqS3J5Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/slider@3.8.4': - resolution: {integrity: sha512-/FYCgK1qVqaz2VCDfR2x4BjyJ8lmWg1v8//+WIwKdIu4cz0KUs+U3yx0w1vp676RoERp3OEvkT3tb+/jHQ1hjA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/spinbutton@3.7.1': - resolution: {integrity: sha512-Nisah6yzxOC6983u/5ck0w+OQoa3sRKmpDvWpTEX0g2+ZIABOl8ttdSd65XKtxXmXHdK8X1zmrfeGOBfBR3sKA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/ssr@3.9.10': - resolution: {integrity: sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==} - engines: {node: '>= 12'} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/switch@3.7.10': - resolution: {integrity: sha512-j7nrYnqX6H9J8GuqD0kdMECUozeqxeG19A2nsvfaTx3//Q7RhgIR9fqhQdVHW/wgraTlEHNH6AhDzmomBg0TNw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/table@3.17.10': - resolution: {integrity: sha512-xdEeyOzuETkOfAHhZrX7HOIwMUsCUr4rbPvHqdcNqg7Ngla2ck9iulZNAyvOPfFwELuBEd2rz1I9TYRQ2OzSQQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/tabs@3.11.0': - resolution: {integrity: sha512-9Gwo118GHrMXSyteCZL1L/LHLVlGSYkhGgiTL3e/UgnYjHfEfDJVTkV2JikuE2O/4uig52gQRlq5E99axLeE9Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/tag@3.8.0': - resolution: {integrity: sha512-sTV6uRKFIFU1aljKb0QjM6fPPnzBuitrbkkCUZCJ0w0RIX1JinZPh96NknNtjFwWmqoROjVNCq51EUd0Hh2SQw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/textfield@3.18.4': - resolution: {integrity: sha512-ts3Vdy2qNOzjCVeO+4RH8FSgTYN2USAMcYFeGbHOriCukVOrvgRsqcDniW7xaT60LgFdlWMJsCusvltSIyo6xw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/toast@3.0.10': - resolution: {integrity: sha512-irW5Cr4msbPo4A4ysjT70MDJbpGCe1h9SkFgdYXBPA4Xbi4jRT7TiEZeIS1I7Hsvp6shAK1Ld/m6NBS0b/gyzg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/toggle@3.12.4': - resolution: {integrity: sha512-yVcl8kEFLsV47aCA22EMPcd/KWoYqPIPSzoKjRD/iWmxcP6iGzSxDjdUgMQojNGY8Q6wL8lUxfRqKBjvl/uezQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/toolbar@3.0.0-beta.23': - resolution: {integrity: sha512-FzvNf2hWtjEwk8F2MBf4qSs6AAR/p2WFSws6kJ4f0SrWXl4wR9VDEwBEUQcIPbWCK2aUsyOjubCh55Cl4t3MoQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/tooltip@3.9.1': - resolution: {integrity: sha512-mvEhqpvF4v/wj9zw3a8bsAEnySutGbxKXXt39s6WvF6dkVfaXfsmV9ahuMCHH//UGh/yidZGLrXX4YVdrgS8lA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/tree@3.1.6': - resolution: {integrity: sha512-igLX+OQrbXCBLrtPWgUevU0iDrgTSAJh1ncHoPzfD/YDcyTDLqKdy2nZhNbJ/IdHCwTyzIknhFJ700K20Ymw9A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/utils@3.33.0': - resolution: {integrity: sha512-yvz7CMH8d2VjwbSa5nGXqjU031tYhD8ddax95VzJsHSPyqHDEGfxul8RkhGV6oO7bVqZxVs6xY66NIgae+FHjw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/virtualizer@4.1.12': - resolution: {integrity: sha512-va0VAD28nq7rk1vHZvnkq591EbWuDKBwh2NzAEn+zz9JjMtpg4utcihNXECJ1DwMRkpaT6q+KpOE7dSdzTxPBQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/visually-hidden@3.8.30': - resolution: {integrity: sha512-iY44USEU8sJy0NOJ/sTDn3YlspbhHuVG3nx2YYrzfmxbS3i+lNwkCfG8kJ77dtmbuDLIdBGKENjGkbcwz3kiJg==} + '@react-aria/live-announcer@3.5.1': + resolution: {integrity: sha512-kLvwHjM3D7KgdquiAhUpRnMLKFrvl2r8naDXqPUlSWGRG15wsJRLhQOHLxGp0Umyg7KcSA+OD1mhQV5aRv0P1w==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6704,298 +6134,8 @@ packages: '@react-dnd/shallowequal@4.0.2': resolution: {integrity: sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==} - '@react-stately/autocomplete@3.0.0-beta.4': - resolution: {integrity: sha512-K2Uy7XEdseFvgwRQ8CyrYEHMupjVKEszddOapP8deNz4hntYvT1aRm0m+sKa5Kl/4kvg9c/3NZpQcrky/vRZIg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/calendar@3.9.2': - resolution: {integrity: sha512-AQj8/izwb7eY+KFqKcMLI2ygvnbAIwLuQG5KPHgJsMygFqnN4yzXKz5orGqVJnxEXLKiLPteVztx7b5EQobrtw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/checkbox@3.7.4': - resolution: {integrity: sha512-oXHMkK22CWLcmNlunDuu4p52QXYmkpx6es9AjWx/xlh3XLZdJzo/5SANioOH1QvBtwPA/c2KQy+ZBqC21NtMHw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/collections@3.12.9': - resolution: {integrity: sha512-2jywPMhVgMOh0XtutxPqIxFCIiLOnL/GXIrRKoBEo8M3Q24NoMRBavUrn9RTvjqNnec1i/8w1/8sq8cmCKEohA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/color@3.9.4': - resolution: {integrity: sha512-SprAP5STMg6K0jq+A3UoimsvvTCIGItUtWurS/lDRoQJYajFR8IUdz+mekU/GaXzvFhMN32dijOtFcfxnA4cfA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/combobox@3.12.2': - resolution: {integrity: sha512-h4YRmzA+s3aMwUrXm6jyWLN0BWWXUNiodArB1wC24xNdeI7S8O3mxz6G2r3Ne8AE02FXmZXs9SD30Mx5vVVuqQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/data@3.15.1': - resolution: {integrity: sha512-lchubLxCWg1Yswpe9yRYJAjmzP0eTYZe+AQyFJQRIT6axRi9Gs92RIZ7zhwLXxI0vcWpnAWADB9kD4bsos7xww==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/datepicker@3.16.0': - resolution: {integrity: sha512-mYtzKXufFVivrHjmxys3ryJFMPIQNhVqaSItmGnWv3ehxw+0HKBrROf3BFiEN4zP20euoP149ZaR4uNx90kMYw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/disclosure@3.0.10': - resolution: {integrity: sha512-nUistLYMjBDy+yaS5H0y0Dwfcjr12zpIh7vjhQXF4wxIh3D08NRvV1NCQ0LV+IsMej/qoPJvKS4EnXHxBI3GmQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/dnd@3.7.3': - resolution: {integrity: sha512-yBtzAimyYvJWnzP80Scx7l559+43TVSyjaMpUR6/s2IjqD3XoPKgPsv7KaFUmygBTkCBGBFJn404rYgMCOsu3g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/flags@3.1.2': - resolution: {integrity: sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==} - - '@react-stately/form@3.2.3': - resolution: {integrity: sha512-NPvjJtns1Pq9uvqeRJCf8HIdVmOm2ARLYQ2F/sqXj1w5IChJ4oWL4Xzvj29/zBitgE1vVjDhnrnwSfNlHZGX0g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/grid@3.11.8': - resolution: {integrity: sha512-tCabR5U7ype+uEElS5Chv5n6ntUv3drXa9DwebjO05cFevUmjTkEfYPJWixpgX4UlCCvjdUFgzeQlJF+gCiozg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/layout@4.5.3': - resolution: {integrity: sha512-BDYnvO2AKzvWfxxVM96kif3qCynsA+XcNoQC+T77exH+LLT8zlK9oOdarZXTlok/eZmjs6+5wmjq51PeL6eM5w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/list@3.13.3': - resolution: {integrity: sha512-xN0v7rzhIKshhcshOzx+ZgVngXnGCtMPRdhoDLGaHzQy5YfxvKBMNLCnr5Lm4T1U/kIvHbyzxmr5uwmH8WxoIg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/menu@3.9.10': - resolution: {integrity: sha512-dY9FzjQ+6iNInVujZPyMklDGoSbaoO0yguUnALAY+yfkPAyStEElfm4aXZgRfNKOTNHe9E34oV7qefSYsclvTg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/numberfield@3.10.4': - resolution: {integrity: sha512-EniHHwXOw/Ta0x5j61OvldDAvLoi/8xOo//bzrqwnDvf2/1IKGFMD9CHs7HYhQw+9oNl3Q2V1meOTNPc4PvoMQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/overlays@3.6.22': - resolution: {integrity: sha512-sWBnuy5dqVp8d+1e+ABTRVB3YBcOW86/90pF5PWY44au3bUFXVSUBO2QMdR/6JtojDoPRmrjufonI19/Zs/20w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/radio@3.11.4': - resolution: {integrity: sha512-3svsW5VxJA5/p1vO+Qlxv+7Jq9g7f4rqX9Rbqdfd+pH7ykHaV0CUKkSRMaWfcY8Vgaf2xmcc6dvusPRqKX8T1A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/searchfield@3.5.18': - resolution: {integrity: sha512-C3/1wOON5oK0QBljj0vSbHm/IWgd29NxB+7zT1JjZcxtbcFxCj4HOxKdnPCT/d8Pojb0YS26QgKzatLZ0NnhgQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/select@3.9.1': - resolution: {integrity: sha512-CJQRqv8Dg+0RRvcig3a2YfY6POJIscDINvidRF31yK6J72rsP01dY3ria9aJjizNDHR9Q5dWFp/z+ii0cOTWIQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/selection@3.20.8': - resolution: {integrity: sha512-V1kRN1NLW+i/3Xv+Q0pN9OzuM0zFEW9mdXOOOq7l+YL6hFjqIjttT2/q4KoyiNV3W0hfoRFSTQ7XCgqnqtwEng==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/slider@3.7.4': - resolution: {integrity: sha512-cSOYSx2nsOQejMg6Ql0+GUpqAiPwRA5teYXUghNvuBDtVxnd4l2rnXs54Ww48tU43xf2+L3kkmMofThjABoEPw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/table@3.15.3': - resolution: {integrity: sha512-W1wR0O/PmdD8hCUFIAelHICjUX/Ii6ZldPlH6EILr9olyGpoCaY7XmnyG7kii1aANuQGBeskjJdXvS6LX/gyDw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/tabs@3.8.8': - resolution: {integrity: sha512-BZImWT+pHZitImRQkoL7jVhTtpGPSra1Rhh4pi8epzwogeqseEIEpuWpQebjQP74r1kfNi/iT2p5Qb31eWfh1Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/toast@3.1.3': - resolution: {integrity: sha512-mT9QJKmD523lqFpOp0VWZ6QHZENFK7HrodnNJDVc7g616s5GNmemdlkITV43fSY3tHeThCVvPu+Uzh7RvQ9mpQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/toggle@3.9.4': - resolution: {integrity: sha512-tjWsshRJtHC+PI5NYMlnDlV/BTo1eWq6fmR6x1mXlQfKuKGTJRzhgJyaQ2mc5K+LkifD7fchOhfapHCrRlzwMg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/tooltip@3.5.10': - resolution: {integrity: sha512-GauUdc6Of08Np2iUw4xx/DdgpvszS9CxJWYcRnNyAAGPLQrmniVrpJvb0EUKQTP9sUSci1SlmpvJh4SNZx26Bw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/tree@3.9.5': - resolution: {integrity: sha512-UpvBlzL/MpFdOepDg+cohI/zvw8DEVM8cXY/OZ8tKUXWpew1HpUglwnAI3ivm0L2k9laUIB9siW0g04ZWiH9Lg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/utils@3.11.0': - resolution: {integrity: sha512-8LZpYowJ9eZmmYLpudbo/eclIRnbhWIJZ994ncmlKlouNzKohtM8qTC6B1w1pwUbiwGdUoyzLuQbeaIor5Dvcw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/virtualizer@4.4.5': - resolution: {integrity: sha512-MP33zys3nRYTk/+3BPchxlil9GrwbMksc3XuvNACeZqYEA/oEidsHffgPL+LY0iitKCmQE6pg49MI5HvBuOd2w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/autocomplete@3.0.0-alpha.37': - resolution: {integrity: sha512-9KkL/UEUHIqp4OD4PffeZPiRV93ZBKq84sBrzTbTIPN+os+N+Lfz45Mg67NM2RumR/KQSVE0gZp7OA0eOvxPYA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/breadcrumbs@3.7.18': - resolution: {integrity: sha512-zwltqx2XSELBRQeuCraxrdfT4fpIOVu6eQXsZ4RhWlsT7DLhzj3pUGkxdPDAMfYaVdyNBqc+nhiAnCwz6tUJ8A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/button@3.15.0': - resolution: {integrity: sha512-X/K2/Oeuq7Hi8nMIzx4/YlZuvWFiSOHZt27p4HmThCnNO/9IDFPmvPrpkYjWN5eN9Nuk+P5vZUb4A7QJgYpvGA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/calendar@3.8.2': - resolution: {integrity: sha512-QbPFhvBQfrsz3x1Nnatr5SL+8XtbxvP4obESFuDrKmsqaaAv+jG5vwLiPTKp6Z3L+MWkCvKavBPuW+byhq+69A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/checkbox@3.10.3': - resolution: {integrity: sha512-Xw4jHG7uK352Wc18XXzdzmtr3Xjg8d2tPoBGNgsw39f92EY2UpoDAPHxYR0BaDe04lGfAn6YwVivI4OGVbjXIg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/color@3.1.3': - resolution: {integrity: sha512-XM0x8iZpAf036w9qceD2RFroehLxKRwkVer7EvdJNs8K8iUN8TuhCagzsomiSJtyYh5MFysEVQ2ir85toiAFyw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/combobox@3.13.11': - resolution: {integrity: sha512-5/tdmTAvqPpiWzEeaV7uLLSbSTkkoQ1mVz6NfKMPuw4ZBkY3lPc9JDkkQjY/JrquZao+KY4Dx8ZIoS0NqkrFrw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/datepicker@3.13.4': - resolution: {integrity: sha512-B5sAPoYZfluDBpgVK3ADlHbXBKRkFCQFO18Bs091IvRRwqzfoO/uf+/9UpXMw+BEF4pciLf0/kdiVQTvI3MzlA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/dialog@3.5.23': - resolution: {integrity: sha512-3tMzweYuaDOaufF5tZPMgXSA0pPFJNgdg89YRITh0wMXMG0pm+tAKVQJL1TSLLhOiLCEL08V8M/AK67dBdr2IA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/form@3.7.17': - resolution: {integrity: sha512-wBFRJ3jehHw2X2Td/KwUNxFWOqXCK7OTGG9A+W3ZI3nDGyflHQpIjqKCKV1jRySs6sv7huiPckJ7ScDleCKf7w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/grid@3.3.7': - resolution: {integrity: sha512-riET3xeKPTcRWQy6hYCMxdbdL3yubPY5Ow66b2GA2rEqoYvmDBniYXAM2Oh+q9s+YgnAP7qJK++ym8NljvHiLA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/link@3.6.6': - resolution: {integrity: sha512-M6WXxUJFmiF6GNu7xUH0uHj0jsorFBN6npkfSCNM4puStC8NbUT2+ZPySQyZXCoHMQ89g6qZ6vCc8QduVkTE7Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/listbox@3.7.5': - resolution: {integrity: sha512-Cn+yNip+YZBaGzu+z5xPNgmfSupnLl+li7uG5hRc+EArkk8/G42myRXz6M8wPrLM1bFAq3r85tAbyoXVmKG5Jw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/menu@3.10.6': - resolution: {integrity: sha512-OJTznQ4xE/VddBJU+HO4x5tceSOdyQhiHA1bREE1aHl+PcgHOUZLdMjXp1zFaGF16HhItHJaxpifJ4hzf4hWQA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/meter@3.4.14': - resolution: {integrity: sha512-rNw0Do2AM3zLGZ0pSWweViuddg1uW99PWzE6RQXE8nsTHTeiwDZt9SYGdObEnjd+nJ3YzemqekG0Kqt93iNBcA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/numberfield@3.8.17': - resolution: {integrity: sha512-Q9n24OaSMXrebMowbtowmHLNclknN3XkcBIaYMwA2BIGIl+fZFnI8MERM0pG87W+wki6FepDExsDW9YxQF4pnw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/overlays@3.9.3': - resolution: {integrity: sha512-LzetThNNk8T26pQRbs1I7+isuFhdFYREy7wJCsZmbB0FnZgCukGTfOtThZWv+ry11veyVJiX68jfl4SV6ACTWA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/progress@3.5.17': - resolution: {integrity: sha512-JtiGlek6QS04bFrRj1WfChjPNr7+3/+pd6yZayXGUkQUPHt1Z/cFnv3QZ/tSQTdUt1XXmjnCak9ZH9JQBqe64Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/radio@3.9.3': - resolution: {integrity: sha512-w2BrMGIiZxYXPCnnB2NQyifwE/rRFMIW87MyawrKO9zPSbnDkqLIHAAtqmlNk2zkz1ZEWjk9opNsuztjP7D4sA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/searchfield@3.6.7': - resolution: {integrity: sha512-POo3spZcYD14aqo0f4eNbymJ8w9EKrlu0pOOjYYWI2P0GUSRmib9cBA9xZFhvRGHuNlHo3ePjeFitYQI7L3g1g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/select@3.12.1': - resolution: {integrity: sha512-PtIUymvQNIIzgr+piJtK/8gbH7akWtbswIbfoADPSxtZEd1/vfUIO0s8c750s3XYNlmx/4DrhugQsLYwgC35yg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/shared@3.33.0': - resolution: {integrity: sha512-xuUpP6MyuPmJtzNOqF5pzFUIHH2YogyOQfUQHag54PRmWB7AbjuGWBUv0l1UDmz6+AbzAYGmDVAzcRDOu2PFpw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/slider@3.8.3': - resolution: {integrity: sha512-HCDegYiUA27CcJKvFwgpR8ktFKf2nAirXqQEgVPV4uxk6JIeiRx41yqM/xPJGfmaqa7BARYARLT41yN2V8Kadg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/switch@3.5.16': - resolution: {integrity: sha512-6fynclkyg0wGHo3f1bwk4Z+gZZEg0Z63iP5TFhgHWdZ8W+Uq6F3u7V4IgQpuJ2NleL1c2jy2/CKdS9v06ac2Og==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/table@3.13.5': - resolution: {integrity: sha512-4/CixlNmXSuJuX2IKuUlgNd/dEgNh3WvfE/bdwuI1t5JBdShP9tHIzSkgZbrzE2xX46NeA2xq4vXNO5kBv+QDA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/tabs@3.3.21': - resolution: {integrity: sha512-Dq9bKI62rHoI4LGGcBGlZ5s0aSwB0G4Y8o0r7hQZvf1eZWc9fmqdAdTTaGG/RUyhMIGRYWl5RRUBUuC5RmaO6w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/textfield@3.12.7': - resolution: {integrity: sha512-ddiacsS6sLFtAn2/fym7lR8nbdsLgPfelNDcsDqHiu6XUHh5TCNe8ItXHFaIiyfnKTH8uJqZrSli4wfAYNfMsw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/tooltip@3.5.1': - resolution: {integrity: sha512-h6xOAWbWUJKs9CzcCyzSPATLHq7W5dS866HkXLrtCrRDShLuzQnojZnctD2tKtNt17990hjnOhl36GUBuO5kyw==} + '@react-types/shared@3.36.1': + resolution: {integrity: sha512-AzsuD9OfxTOZMMvTRhlN3oHBwOmFN7tDh27LzqmHt4+uOgPhJT7ZM7/kVs/8/o0WxayMUIk3hBmCFRHv1FUoag==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7005,102 +6145,102 @@ packages: '@redocly/config@0.56.0': resolution: {integrity: sha512-sGEC13BWOSKgFEHSPmFmTHpRt+zfNOc4+5+COe3Z4TD37glshCzM8qaeX7fIddGf6akRSs1tz3j+2FZVEQtCWw==} - '@redocly/openapi-core@2.52.0': - resolution: {integrity: sha512-oTIwD59KSgMEYBcRPjKmQtEcgANBAhh/Z8r20nWlzRqmvENAWm7A5NdGiX+QUnrk1IIP0d7nbdoU36dlFSTLKg==} + '@redocly/openapi-core@2.53.2': + resolution: {integrity: sha512-i6cCS1Mu0VCUjQsma8VLzBjmA+nCJfaihfuOtz7Bhe7ec9+7jIqwVMWEFmwJZuVGBKnMlZ2vK7vOM9o3D9w9zA==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} - '@rolldown/binding-android-arm-eabi@1.2.7': - resolution: {integrity: sha512-EypzgnYCwyVY4NDHKzGmNJT5b+XaQEBniHxsMdeIQLB/tcCzZnhqrzHpZFbX9iaxx+5RiB8caATBtfvZP7zVxQ==} + '@rolldown/binding-android-arm-eabi@1.2.9': + resolution: {integrity: sha512-tNISae1QEf/vkb3xkRcjV5SEdzPE97We5IVaa2Z8jSszQPZ8U60B/YCYpw4QI7VidYsBtKavczXf+DyDs9WGxw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@rolldown/binding-android-arm64@1.2.7': - resolution: {integrity: sha512-l17HE9EweWaqJZhuUuNBN/FzM62xw+DECVnJyvMsxn8vJFAGLy5QfLDoYAcronkAN8VxKZHezDpulHDPx95vFw==} + '@rolldown/binding-android-arm64@1.2.9': + resolution: {integrity: sha512-YC8YsI30o606GTZi0VyzYlsDKFP8W61i/QzayHDkLbNEz/IShqAmTa+hsJRj13xTHA0H+6fk4b2UmGn+Q/cMlg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.2.7': - resolution: {integrity: sha512-8ED8ELFvHXc6OCETIn4gXObPiaR6bckM/ipXtbzlPVDRMBfEGjCKgO90F9YtfdpDatVx/ZQw7aZ1vUMf/+T3Mw==} + '@rolldown/binding-darwin-arm64@1.2.9': + resolution: {integrity: sha512-IwhlH3qK5urrY8hZiEgGkHKEFN901p/p2bjxCxJlr4GyNnF7wYpUvK+Y43uaRYuC4hpfjzbR3SJC3arX1jGvmw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.2.7': - resolution: {integrity: sha512-/WPripjtiAIZ2tWY7ddijORT0Ujg87wxWW/qcoFVCKAWVDPhtY0xr7Dj0M3GyNGz60jGwTElhro/mkF9dT7dDQ==} + '@rolldown/binding-darwin-x64@1.2.9': + resolution: {integrity: sha512-XxpJfVzFh+jilRxIXUqcfYAYcunIc/XEzIizsOL1fcJee5Sf7H3mH8WlLmfHfluz5amqR88QQo9izKtmMlavAw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.2.7': - resolution: {integrity: sha512-14DI4NcqpvbICxSnGLx3PmtDaWqRP/KGSGb6C+JLLVPeZRl6dKdHba3pGsqT3vpdTqhEYIPG0MMQ8c0xYqoJxA==} + '@rolldown/binding-freebsd-x64@1.2.9': + resolution: {integrity: sha512-kSfvhmgeWyfkbT3p/1s5vSgboogoah2zkm9fX2zjg2hHxSV7T4KhMWRUUaRk4OXNqoD3QAUeRqLcs1aZOK4U1g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.2.7': - resolution: {integrity: sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ==} + '@rolldown/binding-linux-arm-gnueabihf@1.2.9': + resolution: {integrity: sha512-1RVzG17pxqbTfYLC352JlLt6kKLG+6Hr30n8DlIJqsnV5luUDd2Qdx9Ayw1Cabfyb1K9k0jXEZ7evxkRoT+uiw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.2.7': - resolution: {integrity: sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg==} + '@rolldown/binding-linux-arm64-gnu@1.2.9': + resolution: {integrity: sha512-BXqPvZ2drqVD+/Z8UpKwcs4Mp7grM+eGFku4CAEKrEtcbAsUpzREphK1sogCRZGreVPiMkiiBtw0n3TPteuqvw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.2.7': - resolution: {integrity: sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q==} + '@rolldown/binding-linux-arm64-musl@1.2.9': + resolution: {integrity: sha512-11vWvo8YDwLzukt27J3aYDWU+gg2P7J+ZOmiJ0hkF5BXZDW7pVya7r40MXDy6ya0i9KamoENSVKIugvJNgFXIA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.2.7': - resolution: {integrity: sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg==} + '@rolldown/binding-linux-ppc64-gnu@1.2.9': + resolution: {integrity: sha512-a1tijMkdwsIARtc0F39ApURROkf3NwqinI6TOiSSWCTR7dT96dffNvMUtDHnq64wKNTIZOIlzKrFvvFUznJiyw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.2.7': - resolution: {integrity: sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw==} + '@rolldown/binding-linux-s390x-gnu@1.2.9': + resolution: {integrity: sha512-x6SQNdAvv4c3hWqTMaWuawzMX9myaCs/yEmlGsxJzkdClnHW7FbrjQuSiRDhuSYzEYoEMhsaJy9qHG/XNemJPQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.2.7': - resolution: {integrity: sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA==} + '@rolldown/binding-linux-x64-gnu@1.2.9': + resolution: {integrity: sha512-9s0AZ8BFK5/n7B/TBoa2yJE3gI3KURrbXcPBlsAsvjU4VeJKgE90y1YtNxyEUIcHPQkg6/yfF3qihUrcM/Kf0Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.2.7': - resolution: {integrity: sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw==} + '@rolldown/binding-linux-x64-musl@1.2.9': + resolution: {integrity: sha512-P7VWAmV+WdJluH7ovnRGoiv2i8To7GAZ+kGzfGup635cyL7SyYl3lSUaA3Gp5THf0n/Co5EyEqb2zbqq+nMOHQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.2.7': - resolution: {integrity: sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w==} + '@rolldown/binding-openharmony-arm64@1.2.9': + resolution: {integrity: sha512-1qixtsE4BK8h+yS3BfmZ09UhA7O/N4IACva6YBr7EBvCJraByTuRcgOTaiA62Tm0vey3UcKXLOaoGHtYmNGEVg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-win32-arm64-msvc@1.2.7': - resolution: {integrity: sha512-e3Gu3WxbNk/UqQhxqU7YIYO+9ZBvWNz3U+h/qRFosscMFzdRPbXYSaSWgSnklv2fz1TgzBTcti2z35c/7irsHw==} + '@rolldown/binding-win32-arm64-msvc@1.2.9': + resolution: {integrity: sha512-ok8IQjcEPs1AKZfuEUznVBrJw+gK4soq+bx8b1X2XoMqVClarc1q5JDmVtWXY1xfr6ZuHTAsPXHTgTrqKTZeww==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.2.7': - resolution: {integrity: sha512-W/jg5qoRSqjsEv0+dZi4e687mcHqmVuU0P4fK6qS/xjetW2Gmc1W8j//z5nAeNcC8Ttm0hV46IjcYeuVwYhuiw==} + '@rolldown/binding-win32-x64-msvc@1.2.9': + resolution: {integrity: sha512-Ip2mXoU0hM0boq3Rf+ekuT653OROSo6aSYcPT1VHE4q52KvyxgFkQgrgb/IEsxOuvQ2fZZbs8khJAyCEPM24/g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -7108,232 +6248,126 @@ packages: '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} - '@rollup/pluginutils@5.4.0': - resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} - 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.63.1': - resolution: {integrity: sha512-UZ8sUxPTiHWYX9QNdJedb1kDZSpS1t/VPWBWGSgqHNi9w3Cu6IXvu2mzbhiTiPvtrqgTQJ+zqiAq2iPIPilpaQ==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.63.1': - resolution: {integrity: sha512-cQ4nFQABN5cDvDpbvJ7bMStCpnaVxynZrRMfUJYgxcIk9Sh54FIO1vtfkg0B69REjER77ioZ/ov+eAApx/KmLQ==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.63.1': - resolution: {integrity: sha512-FQNqd1lRy/0QhDk3xeRIkSBiCpXCiDnZO3YLVdcDKN1UBiKToNftCzcXYNLshmPDUMlu2TdeS8tGcsU6f3YF1Q==} + '@rspack/binding-darwin-arm64@2.2.5': + resolution: {integrity: sha512-JMLrdZose2ZZs8jP4P+QLTHFHoTFKKrOY6AQIzIbvKdUMCrc6djlhkZQ6vSXQ7oYSiHLFxS8QqUqxr1P3pfvxg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.63.1': - resolution: {integrity: sha512-pvD16V939D3CloK0+qikpGaxiPrDUXTe7Y5cWOMkMSy7m1cawa8EGy/kXYi/G/cKAC4HDAbSnzCIk1WmsoOKXg==} + '@rspack/binding-darwin-x64@2.2.5': + resolution: {integrity: sha512-ndUQ174Q5QdAbetBc9D6OveW2YAqB97d+jMBMGTBG1y/ry2e46zpJNt1ndBboXXp2QQD5DzdmHXw+zCh8lNLDg==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.63.1': - resolution: {integrity: sha512-pcFGeL2345VwdTnJhA6zLbew+YgWB0qBG2+dMtXjCicf6+rm6kO6cOoh5VnTe0ZMrMRgRyuHmCJxZWrIdzYuOw==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.63.1': - resolution: {integrity: sha512-mRJlqSRulVzcKq/LKA6ICSIc3K/l4fzlVn/gePn2nXIHy8seRi5z/eeRE0d/XMBxcMldiXtQTSpRj0tkkC3g8Q==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.63.1': - resolution: {integrity: sha512-YDUNvVM85TI3g/1OpnqKP1h4NeW/j64DfWMf+G3M809xNk1bJSnpFp4sh83NpmVE5DXnkh8ULor4LTVZKoYLHw==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm-musleabihf@4.63.1': - resolution: {integrity: sha512-7Mcn71p9ZuQFAj+h+dhQXy/yeLePRS2yKRnmW1DijA9thKO5qap0GNOIQK4yQ6iP3SU0Mrb/yWo8h8vgRba8lw==} - cpu: [arm] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-arm64-gnu@4.63.1': - resolution: {integrity: sha512-4YiLQTX6U4CSl0L9cluep9A9W6UmTfqBDc2/CH6wlu54pl4E7Jn3cOD8oxzvBDEGk/JMKgJ47C8g+radF7mwvg==} + '@rspack/binding-linux-arm64-gnu@2.2.5': + resolution: {integrity: sha512-Kr7c2QYO2REmeG4//6gn/5HPitqRhXq4iWJDzadTJLGOUBVz3eLyEnr96t6/CScjB9XTEtvzH41ZFSwXpxopsA==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.63.1': - resolution: {integrity: sha512-2ra8F7w8OquwZN9z2/fKFnli69wa8PLwaVzRMIPGb13ByMJwC28Fbp8YcVGoUhlYMTt7j5j9bNgpysrN2UM+vw==} + '@rspack/binding-linux-arm64-musl@2.2.5': + resolution: {integrity: sha512-q3Vftsbvl1Q72PEJ+1JYOLf8nukfr47M960ikD7Kd7iD2mA/vZ98sJRlslISpcDdQsBR6lFK4S8NOBHYMYA2Hw==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.63.1': - resolution: {integrity: sha512-Sy20ncyhjmBP0Ml+UvQbimjlk6VFgjW5uNP+qqwHB00mTE8Bl2C1TuHTlRwK2YoXeZbee5lP2XevBWVkAQAtSQ==} - cpu: [loong64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-loong64-musl@4.63.1': - resolution: {integrity: sha512-noITLp8oNjYliPnGWmLyelIHwULGqbHloQHGw1rtxbWhTuWooRpnZarZQJ1y9EUC4szuCusCc+HEpUtxpIwYvA==} - cpu: [loong64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-ppc64-gnu@4.63.1': - resolution: {integrity: sha512-hlxxXd+F1mWiAcaFR7Sv9ZQT6m6UfI8+Vy/kFJzztq2pDMU/0wZ9sish0iszNZvsQDo8Gc0i5yuFEOz5dDf6fA==} + '@rspack/binding-linux-ppc64-gnu@2.2.5': + resolution: {integrity: sha512-FkDQvXw0ghmJwCB4ryuzSbNetKgJt6A4Xfy7Ua2zvp9sJpoMBGIF/QHWGsV7WcBEdXUDpCPui23E+DsRDCR1DQ==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.63.1': - resolution: {integrity: sha512-EF7OpqQTQ/BvGqLzUi4rEHuagCV9MugAUXSHemwPW5vxZ75RR+jxO/2j95Ph2dalMpFHSVECjRoioHZgA9zOYA==} - cpu: [ppc64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-riscv64-gnu@4.63.1': - resolution: {integrity: sha512-wQO3JesW9PRkwlabQ27y7sPfVOOTLRG73I4F2UYHG5PXun3J9U3y+b7ezVKSYbsvSKGQ1k1cq8Qlun4C9kLt3w==} + '@rspack/binding-linux-riscv64-gnu@2.2.5': + resolution: {integrity: sha512-T+9K2zrb7GWYafbdJMy3cUlh0yPI5pINHbD63G1FHvklP/LNTrlAP5V53L144g7s4/Ygj89S0MZPpr4o3oBFAA==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.63.1': - resolution: {integrity: sha512-ouAGwhO6wHRXdnOVCOsB0tRFkA7nhNB2Nwax6oECXN0YiN8EYUTBAOudADOB1PI+yDL61TeNx/u7MVCzksNbkQ==} + '@rspack/binding-linux-riscv64-musl@2.2.5': + resolution: {integrity: sha512-XyOIs/afntFO8rXcgbJ+oR5pMC0srX5jTe7LC3GcR3EvHAMfknboixjdchZebl5YDhqaDXvknhu7+yTUhy6cKg==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.63.1': - resolution: {integrity: sha512-q2R38Sn+1J8RxhfJ+T54wSWmyKXWec+9jgDfqO2AtArEqHO5R2aeayp5H5OYLr5UYDVGsVaZPEFUooMhYCdz5A==} + '@rspack/binding-linux-s390x-gnu@2.2.5': + resolution: {integrity: sha512-K/HH0f0MA5AhT/6cYQtXD6pKagzkzxntSrRCi/IoMd98FGQOV+Dh+902ytUBxBIeypBKbCHWu+LOvbAQOtkkbQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.63.1': - resolution: {integrity: sha512-gfI5T24WLLuFfSKw7Go/zDXjAAV0fny0swTaDv+WjK7vqcw4cRhFfdsyKL1n+ukI+ooBxn3bVQnyrn06WpI50w==} + '@rspack/binding-linux-x64-gnu@2.2.5': + resolution: {integrity: sha512-S5JReQsQjixPhbBcuHamLw0CQglvbyT4YnBWrt5ds+sraemX42U1Q5tKpICfU92oDqZz6yICC3uH1fGyLEW9Qg==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.63.1': - resolution: {integrity: sha512-4h6XqthmB4Hspji84wvgk+ElodTsGj+dbZqHJHHtKxj4mYq0ANSEEPX9ys3moJueqsRjwpaJYH7874Itwnj2ow==} + '@rspack/binding-linux-x64-musl@2.2.5': + resolution: {integrity: sha512-5HC8rumh+QIGMjAwGyB5W0DFon9IBSdHDco10CXdUDTbnw71a7VwpiaQGoRTmxocdxU8sGHKN1isp4T3ABnbyg==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.63.1': - resolution: {integrity: sha512-dlfCOa87o1VAYegLQ9EKilx2JCeRofiyPGhTCmqnuXZ6bMPiycO1rq1+sKoulAp7pGLIsTIw+1x5R+zgh5LhhA==} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.63.1': - resolution: {integrity: sha512-cjkLbOlfcm3QGhMM1J5zaZjsw1GggbN6rw9UTSSRrPrR1KkcXnN7Uq9rPw34xImQ9VOY9GN+6u2Zj80B9ptkcw==} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.63.1': - resolution: {integrity: sha512-Li1KdUnWGE4N3e1F/B4RTB1ms+nG4WBgjByO46pkeBVX/2UBsY53xf5vK9WygVmnH3RwncIST7lkSdLSY6P9lg==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.63.1': - resolution: {integrity: sha512-t4ZYOSoLTgwhuFMrmTMLx/+i1DQVK7HYqMc6kY46EApwi8X0nIVphzdNoThU3xt6n+N5urG1/gxBdCaKDLavfg==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.63.1': - resolution: {integrity: sha512-RgroPfMmKlD1RzSDxvwgcPiy2HNQKoYV7OmwIXDsk73uKW5t6B/V8KIy27SMv/FNXFo/oSBtWc9J0X7t91ezZg==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.63.1': - resolution: {integrity: sha512-at8QVep6S3h5Y6gSbdGU06bRY5WJkf6WUduM9YtvYMbYhB1MOFfUgc6kehitQXzOtMSaT70q7f9ydPhpqu821w==} - cpu: [x64] - os: [win32] - - '@rspack/binding-darwin-arm64@1.7.6': - resolution: {integrity: sha512-NZ9AWtB1COLUX1tA9HQQvWpTy07NSFfKBU8A6ylWd5KH8AePZztpNgLLAVPTuNO4CZXYpwcoclf8jG/luJcQdQ==} - cpu: [arm64] - os: [darwin] - - '@rspack/binding-darwin-x64@1.7.6': - resolution: {integrity: sha512-J2g6xk8ZS7uc024dNTGTHxoFzFovAZIRixUG7PiciLKTMP78svbSSWrmW6N8oAsAkzYfJWwQpVgWfFNRHvYxSw==} - cpu: [x64] - os: [darwin] - - '@rspack/binding-linux-arm64-gnu@1.7.6': - resolution: {integrity: sha512-eQfcsaxhFrv5FmtaA7+O1F9/2yFDNIoPZzV/ZvqvFz5bBXVc4FAm/1fVpBg8Po/kX1h0chBc7Xkpry3cabFW8w==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@rspack/binding-linux-arm64-musl@1.7.6': - resolution: {integrity: sha512-DfQXKiyPIl7i1yECHy4eAkSmlUzzsSAbOjgMuKn7pudsWf483jg0UUYutNgXSlBjc/QSUp7906Cg8oty9OfwPA==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@rspack/binding-linux-x64-gnu@1.7.6': - resolution: {integrity: sha512-NdA+2X3lk2GGrMMnTGyYTzM3pn+zNjaqXqlgKmFBXvjfZqzSsKq3pdD1KHZCd5QHN+Fwvoszj0JFsquEVhE1og==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@rspack/binding-linux-x64-musl@1.7.6': - resolution: {integrity: sha512-rEy6MHKob02t/77YNgr6dREyJ0e0tv1X6Xsg8Z5E7rPXead06zefUbfazj4RELYySWnM38ovZyJAkPx/gOn3VA==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@rspack/binding-wasm32-wasi@1.7.6': - resolution: {integrity: sha512-YupOrz0daSG+YBbCIgpDgzfMM38YpChv+afZpaxx5Ml7xPeAZIIdgWmLHnQ2rts73N2M1NspAiBwV00Xx0N4Vg==} + '@rspack/binding-wasm32-wasi@2.2.5': + resolution: {integrity: sha512-JLxx6dBm8nmTjYvq+HxHBPh3e+otmK9zrlzvYcyy612LV1Ixw78qdiQvMLjI7nM9aWsCqbix0FDaxPJ8VsT4GA==} cpu: [wasm32] - '@rspack/binding-win32-arm64-msvc@1.7.6': - resolution: {integrity: sha512-INj7aVXjBvlZ84kEhSK4kJ484ub0i+BzgnjDWOWM1K+eFYDZjLdAsQSS3fGGXwVc3qKbPIssFfnftATDMTEJHQ==} + '@rspack/binding-win32-arm64-msvc@2.2.5': + resolution: {integrity: sha512-QkuTOVRVZ5bgCrpqnXS9SPc5J7T6uJA3z2dpJbdHr+zA5NUxSg2klk+mYiZ4j/zk4NwXZEkISGVp3f5FRrp38A==} cpu: [arm64] os: [win32] - '@rspack/binding-win32-ia32-msvc@1.7.6': - resolution: {integrity: sha512-lXGvC+z67UMcw58In12h8zCa9IyYRmuptUBMItQJzu+M278aMuD1nETyGLL7e4+OZ2lvrnnBIcjXN1hfw2yRzw==} + '@rspack/binding-win32-ia32-msvc@2.2.5': + resolution: {integrity: sha512-27pgkQ7LTTlL8Xcs0gLQtjqgQmX5NV+6RzVC9YJ4ivSFCS94RG6UFX7lPSnWmmIRP6N4qxBOKL3Chkc8mNpqcg==} cpu: [ia32] os: [win32] - '@rspack/binding-win32-x64-msvc@1.7.6': - resolution: {integrity: sha512-zeUxEc0ZaPpmaYlCeWcjSJUPuRRySiSHN23oJ2Xyw0jsQ01Qm4OScPdr0RhEOFuK/UE+ANyRtDo4zJsY52Hadw==} + '@rspack/binding-win32-x64-msvc@2.2.5': + resolution: {integrity: sha512-TNi/O6ujzy6CszH6629wILSj0cPBqCEAjTrayBGWafM5+2FctML8ovz/8GqxSxmzD1KsOsXwOlNMuUY5PfDHyg==} cpu: [x64] os: [win32] - '@rspack/binding@1.7.6': - resolution: {integrity: sha512-/NrEcfo8Gx22hLGysanrV6gHMuqZSxToSci/3M4kzEQtF5cPjfOv5pqeLK/+B6cr56ul/OmE96cCdWcXeVnFjQ==} + '@rspack/binding@2.2.5': + resolution: {integrity: sha512-cR1vRgl4hIEB7j654y3PHs3IVB+x/Mj4jJYWobUmwp62kP3JkP7OPyqY0VaRSbwcrQzOXQ77I09/Z3x3lsilVw==} - '@rspack/cli@1.7.6': - resolution: {integrity: sha512-oIC8F3es8EIZfme5jy/MCf9KJPhYlR9pBzKr8vzLal1H/aheGobNhiV0tYRl22I2gx9XAQItiea36g04byiEOw==} + '@rspack/cli@2.2.5': + resolution: {integrity: sha512-1ZUT+MeDkoGM8wBC1y0UYUK/H3Qj54828pypHKmrB1hmLcz6r04PpwNV8EECZz2A8+NMN1MSwV+zMoJ5CaSs0w==} hasBin: true peerDependencies: - '@rspack/core': 1.7.6 - - '@rspack/core@1.7.6': - resolution: {integrity: sha512-Iax6UhrfZqJajA778c1d5DBFbSIqPOSrI34kpNIiNpWd8Jq7mFIa+Z60SQb5ZQDZuUxcCZikjz5BxinFjTkg7Q==} - engines: {node: '>=18.12.0'} - peerDependencies: - '@swc/helpers': '>=0.5.1' + '@rspack/core': 2.2.5 + '@rspack/dev-server': ^2.0.0-0 peerDependenciesMeta: + '@rspack/dev-server': + optional: true + + '@rspack/core@2.2.5': + resolution: {integrity: sha512-V5yqXFyGB8k2UiOh2VGc9q0z+GfKQzBQOrbo9wnk+IV+SsHZD/Z0SVjy9p7q+hG/ULVdOwsAhmltn1pXxLywSA==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@module-federation/runtime-tools': ^0.24.1 || ^2.0.0 + '@swc/helpers': ^0.5.23 + peerDependenciesMeta: + '@module-federation/runtime-tools': + optional: true '@swc/helpers': optional: true - '@rspack/dev-server@1.1.5': - resolution: {integrity: sha512-cwz0qc6iqqoJhyWqxP7ZqE2wyYNHkBMQUXxoQ0tNoZ4YNRkDyQ4HVJ/3oPSmMKbvJk/iJ16u7xZmwG6sK47q/A==} - engines: {node: '>= 18.12.0'} + '@rspack/dev-middleware@2.0.4': + resolution: {integrity: sha512-VCdT8hv9YvMPiBohhukD/OkGB+2GJ7mPRbeuDJ/jIT6hv5gvmJCnydMetJVARh6vXoBtfSHEd2gX78Dqaxh1NQ==} + engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: - '@rspack/core': 1.7.6 + '@rspack/core': 2.2.5 + peerDependenciesMeta: + '@rspack/core': + optional: true - '@rspack/lite-tapable@1.1.0': - resolution: {integrity: sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==} + '@rspack/dev-server@2.2.1': + resolution: {integrity: sha512-Il8HbYGK3rH5rM0XmUOsOGZVw69BKRpBZ61P28Fy8ry35CtfniDBWtbo/rvJtIT/sK0qwijmNrhF498ltsV+uA==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@rspack/core': 2.2.5 + selfsigned: ^5.0.0 + peerDependenciesMeta: + selfsigned: + optional: true '@sapphi-red/web-noise-suppressor@0.4.0': resolution: {integrity: sha512-vkBEL/VDkbeP3qqSRQFRtPLGa19a38JUzO6J0r5D/MQSumrlERy671DAMaETgY6etXjDCoJcD7JBIaXnuGVtVw==} @@ -7369,43 +6403,40 @@ packages: '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - '@simplewebauthn/browser@13.2.2': - resolution: {integrity: sha512-FNW1oLQpTJyqG5kkDg5ZsotvWgmBaC6jCHR7Ej0qUNep36Wl9tj2eZu7J5rP+uhXgHaLk+QQ3lqcw2vS5MX1IA==} + '@simplewebauthn/browser@14.0.0': + resolution: {integrity: sha512-1odWVqeEBTl7lJ9zMKLEsmTlnyrDO5iRcTvfMKKk1WThUnp/i8JJdffdj2icP+tty159s4PgwE3BiMoEW9NFow==} - '@simplewebauthn/server@13.2.3': - resolution: {integrity: sha512-ZhcVBOw63birYx9jVfbhK6rTehckVes8PeWV324zpmdxr0BUfylospwMzcrxrdMcOi48MHWj2LCA+S528LnGvg==} + '@simplewebauthn/server@14.0.2': + resolution: {integrity: sha512-g+m/xv9/8FRWsDY22CwsTYRzt3WwS9fJrR3P7eY3Ti01FXH5FQ36Xn55v6D+5tb6VajlqOj4hywP/Vxsb6a3Sg==} engines: {node: '>=20.0.0'} - '@sinclair/typebox@0.27.10': - resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} + '@sinclair/typebox@0.27.12': + resolution: {integrity: sha512-hhyNJ+nbR6ZR7pToHvllEFun9TL0sbL+tk/ON75lo+Xas054uez98qRbsuNt7MBCyZKK4+8Yli/OAGZhmfBZ/g==} - '@smithy/core@3.33.3': - resolution: {integrity: sha512-CsOeKq/9kA3y6VJHt+/+VTCtBaxJ4OTFpgrjIUhPpDIKxBci1k2bJaQASF2h/ELWrulGp+t97DZ0mevfAD8idg==} + '@smithy/core@3.34.1': + resolution: {integrity: sha512-dLcOUxz8YCv1RZUMKq6GbyUf95pLbrqh34bPvpCZ1+CByFF31BEAFewZjsGCnVsZTKdThNENfGyAgk2TJqVwSw==} engines: {node: '>=18.0.0'} '@smithy/credential-provider-imds@4.5.2': resolution: {integrity: sha512-A9uSdn72ozbRUSit0eib0TW7nXuNPlaeM0zcGkJ+nE6tFcSDbnmtwoxbTCFBukVQcszDAyvsd7+rTduPTXpygg==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.7.2': - resolution: {integrity: sha512-nZyWTmSpJEXl6VtWVMBJve/7x12DZu6sIX1z1a+ZMaHlQQRs9Zpu6NbTe/gmxYXVRpkjxyDYpZ5gx2IM6f/Wkw==} + '@smithy/fetch-http-handler@5.8.0': + resolution: {integrity: sha512-ycSJu3tFAQ4v04CBB0agqFMVsSQ1iG3yw+SpgxRqKfaURpQD4CZ8Wn0zPMmSnOuTpTh65Vz+EA0rMrw089wvkA==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.11.3': - resolution: {integrity: sha512-2jY1tSpERfPfWqyBV2pH+iGFaghVsIJszJNsT7hxtQYhVJpWDyc0LqOWI+nXOxOAHaEfZ4PXXtp1wW1TGpHhkA==} + '@smithy/node-http-handler@4.12.1': + resolution: {integrity: sha512-ThMkboGeONWXAelq9FvGsuJC4rOi+qyC4/zhUF58xYpxUg5sQKx2VXZYJmtNjr4dSuBJ1HeJXETQILCz3wOHvw==} engines: {node: '>=18.0.0'} '@smithy/signature-v4@5.7.3': resolution: {integrity: sha512-7ImGm+FkHRLcBaRttIAMZ6bzJZWb2cJGoYjq46F2UjycujWzrL9GEN9h4w7eQyXJYnltrUhxbbieBAIRrdqpow==} engines: {node: '>=18.0.0'} - '@smithy/types@4.17.2': - resolution: {integrity: sha512-FOKpVZob9MPTn2znRzGrnsMHv7BOsKVw3XiP/cOyYLDVZ9qKp4nifIiSCuUU/fIj5Vu0UOAxCFr+qRAtG0NUkA==} + '@smithy/types@4.18.0': + resolution: {integrity: sha512-CgB6HHWer/vrKps24ulRIbpcpb7K4xAU7SkZ7YHzBPlwHsvsrCJFEXK421s+cJzX+ZrqtA/TuU5w1HzI7k9N8A==} engines: {node: '>=18.0.0'} - '@standard-schema/spec@1.1.0': - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@svgr/babel-plugin-add-jsx-attribute@8.0.0': resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} engines: {node: '>=14'} @@ -7484,76 +6515,76 @@ packages: resolution: {integrity: sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==} engines: {node: '>=14'} - '@swc/helpers@0.5.19': - resolution: {integrity: sha512-QamiFeIK3txNjgUTNppE6MiG3p7TdninpZu0E0PbqVh1a9FNLT2FRhisaa4NcaX52XVhA5l7Pk58Ft7Sqi/2sA==} + '@swc/helpers@0.5.23': + resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} - '@tailwindcss/cli@4.2.1': - resolution: {integrity: sha512-b7MGn51IA80oSG+7fuAgzfQ+7pZBgjzbqwmiv6NO7/+a1sev32cGqnwhscT7h0EcAvMa9r7gjRylqOH8Xhc4DA==} + '@tailwindcss/cli@4.3.3': + resolution: {integrity: sha512-ZvS/n1ZHOBKcVlhkt8l5NNr1EDXk1NboYO5CYDOs6NUmvT9z6bzkwsosaJftY57T/3gWNzWMJzIXLodZC8ssdw==} hasBin: true - '@tailwindcss/node@4.2.1': - resolution: {integrity: sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==} + '@tailwindcss/node@4.3.3': + resolution: {integrity: sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==} - '@tailwindcss/oxide-android-arm64@4.2.1': - resolution: {integrity: sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==} + '@tailwindcss/oxide-android-arm64@4.3.3': + resolution: {integrity: sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==} engines: {node: '>= 20'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.2.1': - resolution: {integrity: sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==} + '@tailwindcss/oxide-darwin-arm64@4.3.3': + resolution: {integrity: sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==} engines: {node: '>= 20'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.2.1': - resolution: {integrity: sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==} + '@tailwindcss/oxide-darwin-x64@4.3.3': + resolution: {integrity: sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==} engines: {node: '>= 20'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.2.1': - resolution: {integrity: sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==} + '@tailwindcss/oxide-freebsd-x64@4.3.3': + resolution: {integrity: sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==} engines: {node: '>= 20'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1': - resolution: {integrity: sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': + resolution: {integrity: sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==} engines: {node: '>= 20'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.2.1': - resolution: {integrity: sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==} + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': + resolution: {integrity: sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==} engines: {node: '>= 20'} cpu: [arm64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-arm64-musl@4.2.1': - resolution: {integrity: sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==} + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': + resolution: {integrity: sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==} engines: {node: '>= 20'} cpu: [arm64] os: [linux] libc: [musl] - '@tailwindcss/oxide-linux-x64-gnu@4.2.1': - resolution: {integrity: sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==} + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': + resolution: {integrity: sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==} engines: {node: '>= 20'} cpu: [x64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-x64-musl@4.2.1': - resolution: {integrity: sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==} + '@tailwindcss/oxide-linux-x64-musl@4.3.3': + resolution: {integrity: sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==} engines: {node: '>= 20'} cpu: [x64] os: [linux] libc: [musl] - '@tailwindcss/oxide-wasm32-wasi@4.2.1': - resolution: {integrity: sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==} + '@tailwindcss/oxide-wasm32-wasi@4.3.3': + resolution: {integrity: sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -7564,45 +6595,39 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.2.1': - resolution: {integrity: sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==} + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': + resolution: {integrity: sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==} engines: {node: '>= 20'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.2.1': - resolution: {integrity: sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==} + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': + resolution: {integrity: sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==} engines: {node: '>= 20'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.2.1': - resolution: {integrity: sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==} + '@tailwindcss/oxide@4.3.3': + resolution: {integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==} engines: {node: '>= 20'} - '@tanstack/react-virtual@3.13.23': - resolution: {integrity: sha512-XnMRnHQ23piOVj2bzJqHrRrLg4r+F86fuBcwteKfbIjJrtGxb4z7tIvPVAe4B+4UVwo9G4Giuz5fmapcrnZ0OQ==} + '@tanstack/react-virtual@3.14.13': + resolution: {integrity: sha512-JbDTAwtzZ99aOeCrAfW5EsE5KSq5RWh6Af2dtFwyLIIk48Ja7vm6n4axu/43T3vfjFnEGJalxJ1wyYjSQD6bSg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/virtual-core@3.13.23': - resolution: {integrity: sha512-zSz2Z2HNyLjCplANTDyl3BcdQJc2k1+yyFoKhNRmCr7V7dY8o8q5m8uFTI1/Pg1kL+Hgrz6u3Xo6eFUB7l66cg==} + '@tanstack/virtual-core@3.17.11': + resolution: {integrity: sha512-+ILjvtHup6Y2hzQ6YzwMgX1Q+oQpxEGOXCEsCNaPoIP0VxMbizIBTmYTDtkerkIQS8/CbP1BRuyt8V/8BCsy1g==} '@ts-morph/common@0.29.0': resolution: {integrity: sha512-35oUmphHbJvQ/+UTwFNme/t2p3FoKiGJ5auTjjpNTop2dyREspirjMy82PLSC1pnDJ8ah1GU98hwpVt64YXQsg==} - '@tybys/wasm-util@0.10.3': - resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@tybys/wasm-util@0.10.4': + resolution: {integrity: sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==} - '@types/archiver@7.0.0': - resolution: {integrity: sha512-/3vwGwx9n+mCQdYZ2IKGGHEFL30I96UgBlk8EtRDDFQ9uxM1l4O5Ci6r00EMAkiDaTqD9DQ6nVrWRICnBPtzzg==} - - '@types/body-parser@1.19.6': - resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} - - '@types/bonjour@3.5.13': - resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + '@types/archiver@8.0.0': + resolution: {integrity: sha512-YpXPbEuv9+eUIPPQWUPahj3cvs9isWRuF+J4z+KbdYVDO3rWorWQFxUVHnwPu2AgKwvgpki5F2VMX0Xx+mX45A==} '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -7610,18 +6635,6 @@ packages: '@types/combokeys@2.4.9': resolution: {integrity: sha512-Hwk0Z6XltfTKCxCPh0RVbg42PZQDsObrgFSh3MTmrcPPKj1iJByAdT1bmrfzmYr/66bjdC3c/T0b1c3cgS3Vjw==} - '@types/command-line-args@5.2.3': - resolution: {integrity: sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==} - - '@types/command-line-usage@5.0.4': - resolution: {integrity: sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==} - - '@types/connect-history-api-fallback@1.5.4': - resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} - - '@types/connect@3.4.38': - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - '@types/debug@4.1.13': resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} @@ -7640,24 +6653,12 @@ packages: '@types/events@3.0.3': resolution: {integrity: sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==} - '@types/express-serve-static-core@4.19.8': - resolution: {integrity: sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==} - - '@types/express@4.17.25': - resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==} - '@types/fs-extra@9.0.13': resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} '@types/hast@3.0.5': resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} - '@types/http-errors@2.0.5': - resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} - - '@types/http-proxy@1.17.17': - resolution: {integrity: sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==} - '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -7673,11 +6674,11 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/lodash@4.17.24': - resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} + '@types/lodash@4.17.25': + resolution: {integrity: sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ==} - '@types/luxon@3.7.1': - resolution: {integrity: sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==} + '@types/luxon@3.7.5': + resolution: {integrity: sha512-jJ41Q4z6ZVO260MNDdHfW7+7a5iMiX8Mr6ZJHcmgrvhZha6dz5704o/lF2kKl6URjH6ivEL97w9xS/MgpJEphg==} '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -7685,76 +6686,49 @@ packages: '@types/mdx@2.0.14': resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==} - '@types/mime@1.3.5': - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} '@types/nlcst@2.0.3': resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} - '@types/node@18.19.130': - resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} + '@types/node@20.19.43': + resolution: {integrity: sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==} - '@types/node@24.10.9': - resolution: {integrity: sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==} + '@types/node@24.13.5': + resolution: {integrity: sha512-TXyindR+lBr22aJIdMQzCFHPHR6cR4js838mRDCSz5hOKWZvZwsXSSiXDmjRj4iJmgl+sR9O+1mkoVBSMadNug==} - '@types/node@25.3.0': - resolution: {integrity: sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==} + '@types/node@26.6.1': + resolution: {integrity: sha512-VqGJBMCtdhqkBUCcBLvywI0NJ+KLuVzgNnlBUNFOQjqVxzo2lxLUNg1DSey8+u2u6ktswSAxg+s68QLzWHNOuA==} - '@types/nodemailer@7.0.11': - resolution: {integrity: sha512-E+U4RzR2dKrx+u3N4DlsmLaDC6mMZOM/TPROxA0UAPiTgI0y4CEFBmZE+coGWTjakDriRsXG368lNk1u9Q0a2g==} - - '@types/parse-json@4.0.2': - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - - '@types/pg@8.16.0': - resolution: {integrity: sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==} + '@types/pg@8.23.1': + resolution: {integrity: sha512-fKVHpikPdg4GKks3JuLEhvwSyvwzF23hnabPy6DD8ljVbC7+6J5dQzdv4arV6jqq57djnMgs1HKBxX4P8aBI3A==} '@types/qrcode@1.5.6': resolution: {integrity: sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==} - '@types/qs@6.14.0': - resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} - - '@types/range-parser@1.2.7': - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - - '@types/react-dom@19.2.3': - resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + '@types/react-dom@19.3.0': + resolution: {integrity: sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==} peerDependencies: - '@types/react': ^19.2.0 + '@types/react': ^19.3.0 - '@types/react@19.2.14': - resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + '@types/react@19.3.0': + resolution: {integrity: sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==} '@types/readdir-glob@1.1.5': resolution: {integrity: sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==} - '@types/retry@0.12.2': - resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} - '@types/sax@1.2.7': resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} '@types/sdp-transform@2.15.0': resolution: {integrity: sha512-ikIFF0EaYt/2XetIYYVeMj6SB52oVXFasJUXDzWHgzNJS5ep2Pbsu7f8f3Za+dEie8HQtt3Zr9mHYBpWT0XgxQ==} - '@types/send@0.17.6': - resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==} - '@types/send@1.2.1': resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==} - '@types/serve-index@1.9.4': - resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} - - '@types/serve-static@1.15.10': - resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==} - - '@types/sockjs@0.3.36': - resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} + '@types/set-cookie-parser@2.4.10': + resolution: {integrity: sha512-GGmQVGpQWUe5qglJozEjZV/5dyxbOOZ0LHe/lqyWssB88Y4svNfst0uqBVscdDeIKl5Jy5+aPSvy7mI9tYRguw==} '@types/statuses@2.0.6': resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} @@ -7842,84 +6816,126 @@ packages: resolution: {integrity: sha512-BoC8PiO4Hkdo0TVJh9Ntxr5MxPDI7/oFsrygN5ADelFSeXG/qgNuucIGA+L5Z6JpPTE/uRfcTWtscjbUaufepQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260130.1': - resolution: {integrity: sha512-Jo5kVoxaewKPn/3bKWyUB/gPR+Tjhj6isLc8VshV4OyFX4n6pkvVyk3ANivl7Kwmiv3WGKGUotbZ71DKCZATwA==} + '@typescript/typescript-aix-ppc64@7.0.2': + resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [aix] + + '@typescript/typescript-darwin-arm64@7.0.2': + resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==} + engines: {node: '>=16.20.0'} cpu: [arm64] os: [darwin] - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260224.1': - resolution: {integrity: sha512-9VHXRhB7sM5DFqdlKaeDww8vuklgfzhYCjBazLCEnuFvb4J+rJ1DodLykc2bL+6kE8k6sdhYi3x8ipfbjtO44g==} - cpu: [arm64] - os: [darwin] - - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260130.1': - resolution: {integrity: sha512-dR0fjdcLykfiDOIKjZMGqPBHVl9Dd/C+jFU43Wr3dcPFPFf1oVYsaWAZBSkTXnN9QP8i0/ZV+ZUr1gDjoi3x0Q==} + '@typescript/typescript-darwin-x64@7.0.2': + resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==} + engines: {node: '>=16.20.0'} cpu: [x64] os: [darwin] - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260224.1': - resolution: {integrity: sha512-uCHipPRcIhHnvb7lAM29MQ1QT9pZ+uirqtH630aOMFm8VG3j8mkxVM9iGRLx829n38DMSDLjc3joCrQO3+sDcQ==} + '@typescript/typescript-freebsd-arm64@7.0.2': + resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [freebsd] + + '@typescript/typescript-freebsd-x64@7.0.2': + resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==} + engines: {node: '>=16.20.0'} cpu: [x64] - os: [darwin] + os: [freebsd] - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260130.1': - resolution: {integrity: sha512-P/1YTpIiFd2pPtHt4sKEmUTaKf1xvuuiV0TvhQ7n2gDYskNjZ66iWCC9w7okjgsmWE9JLh/IRrNcb9FKVk3SHw==} + '@typescript/typescript-linux-arm64@7.0.2': + resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==} + engines: {node: '>=16.20.0'} cpu: [arm64] os: [linux] - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260224.1': - resolution: {integrity: sha512-yFEEq6hD2R70+lTogb211sPdCwz3H5hpYh0+YuKVMPsKo0oM8/jMvgjj2pyutmj/uCKLdbcJ9HP2vJ/13Szbcg==} - cpu: [arm64] - os: [linux] - - '@typescript/native-preview-linux-arm@7.0.0-dev.20260130.1': - resolution: {integrity: sha512-wnx4bY/1u006U67fEkPtPVZ65VYMLgkFqOadGyrUxhtveR5WbbgFUuUBES0mPxvzS4ToZzn94jhcnAvN8VOTcA==} + '@typescript/typescript-linux-arm@7.0.2': + resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==} + engines: {node: '>=16.20.0'} cpu: [arm] os: [linux] - '@typescript/native-preview-linux-arm@7.0.0-dev.20260224.1': - resolution: {integrity: sha512-cEWSRQ8b+CXdMJvoG18IjNTvBo+qT22B5imqm6nAssMpyHHQb62PvZGnrA8mPRQNPzLpa5F956j8GwAjyP8hBQ==} - cpu: [arm] + '@typescript/typescript-linux-loong64@7.0.2': + resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==} + engines: {node: '>=16.20.0'} + cpu: [loong64] os: [linux] - '@typescript/native-preview-linux-x64@7.0.0-dev.20260130.1': - resolution: {integrity: sha512-OgHVjivuOS22WIZvIm+Pnm7yqFLwonkIrBOxRdew/pPwVGLQVSo+bQ+RocQDj2VFYxXcHs2yXwCk3PDmwLIYYg==} + '@typescript/typescript-linux-mips64el@7.0.2': + resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==} + engines: {node: '>=16.20.0'} + cpu: [mips64el] + os: [linux] + + '@typescript/typescript-linux-ppc64@7.0.2': + resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [linux] + + '@typescript/typescript-linux-riscv64@7.0.2': + resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==} + engines: {node: '>=16.20.0'} + cpu: [riscv64] + os: [linux] + + '@typescript/typescript-linux-s390x@7.0.2': + resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==} + engines: {node: '>=16.20.0'} + cpu: [s390x] + os: [linux] + + '@typescript/typescript-linux-x64@7.0.2': + resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==} + engines: {node: '>=16.20.0'} cpu: [x64] os: [linux] - '@typescript/native-preview-linux-x64@7.0.0-dev.20260224.1': - resolution: {integrity: sha512-zGz5kVcCeBRheQwA4jVTAxtbLsBsTkp9AEvWK5AlyCs1rQCUQobBhtx37X4VEmxn4ekIDMxYgaZdlZb7/PGp8w==} - cpu: [x64] - os: [linux] + '@typescript/typescript-netbsd-arm64@7.0.2': + resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [netbsd] - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260130.1': - resolution: {integrity: sha512-f/DUxQtIWkZq0eUjZHFmaSxterO/ccu1NxFk0L/Oqj7AfjWVDCqrLVgZJKjvwcG5TEb5AVt7GMUpGEAYZQiUvg==} + '@typescript/typescript-netbsd-x64@7.0.2': + resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [netbsd] + + '@typescript/typescript-openbsd-arm64@7.0.2': + resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [openbsd] + + '@typescript/typescript-openbsd-x64@7.0.2': + resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [openbsd] + + '@typescript/typescript-sunos-x64@7.0.2': + resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [sunos] + + '@typescript/typescript-win32-arm64@7.0.2': + resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==} + engines: {node: '>=16.20.0'} cpu: [arm64] os: [win32] - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260224.1': - resolution: {integrity: sha512-A0f9ZDQqKvGk/an59HuAJuzoI/wMyrgTd69oX9gFCx7+5E/ajSdgv0Eg1Fco+nyLfT/UVM0CV3ERyWrKzx277w==} - cpu: [arm64] - os: [win32] - - '@typescript/native-preview-win32-x64@7.0.0-dev.20260130.1': - resolution: {integrity: sha512-Isr051Cq8RbXOUMYYmwLYw8yBGaEG/Zp0sp7HNeYhVVkc3/3KeveEqCk29q1QRwiBr7HnApdzJP7f+lSZk8gmg==} + '@typescript/typescript-win32-x64@7.0.2': + resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==} + engines: {node: '>=16.20.0'} cpu: [x64] os: [win32] - '@typescript/native-preview-win32-x64@7.0.0-dev.20260224.1': - resolution: {integrity: sha512-Se9JrcMdVLeDYMLn+CKEV3qy1yiildb5N23USGvnC9siNFalz8tVgd589dhRP+ywDhXnbIsZiFKDrZF/7B4wSQ==} - cpu: [x64] - os: [win32] - - '@typescript/native-preview@7.0.0-dev.20260130.1': - resolution: {integrity: sha512-lvt9sECmBkrABxl3rMNRAX2unzhYcoNhlTyR7rOvbyM//QTXKUctVD7ByWBvk02et2caUUwIWq2vnygaeW8Mew==} - hasBin: true - - '@typescript/native-preview@7.0.0-dev.20260224.1': - resolution: {integrity: sha512-PU0zBXLvz6RKxbIubT66RCnJXgScdDIhfmNMkvRhOnX/C4SZom5TFSn7BEHC3w8JPj7OSz5OYoubtV1Haty2GA==} - hasBin: true - '@typescript/vfs@1.6.4': resolution: {integrity: sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ==} peerDependencies: @@ -7928,20 +6944,25 @@ packages: '@ungap/structured-clone@1.4.0': resolution: {integrity: sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==} - '@vitest/coverage-v8@4.1.11': - resolution: {integrity: sha512-8MVGEFnJIcdGjcbfKmeq8z0pZHH0JlVtoVZH9Q/qwUp6wyFnEJUBMrw9DCaj+ra3vShGmhavjalMIhPNxZAUcw==} + '@vitest/coverage-v8@5.0.1': + resolution: {integrity: sha512-FRC8ACiudC3dI6MTplzRSYWHDRnIv2IPfbzs4FdoJNsMal/35sWV8hwIfV8ZcqzSPy+uXHeMVONt9CEqtOU17w==} peerDependencies: - '@vitest/browser': 4.1.11 - vitest: 4.1.11 + '@vitest/browser': 5.0.1 + vitest: 5.0.1 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@4.1.11': - resolution: {integrity: sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==} + '@vitest/istanbul-lib-coverage@1.0.1': + resolution: {integrity: sha512-k3DJZ8LhMBK9NS4SclF1ASD3OgXEWDorbIcPTRDK0/Zae6fRvu+fJRxtFdLfHsa9Y24beCdPnoNZ4LviTNstfA==} + engines: {node: '>=22'} - '@vitest/mocker@4.1.11': - resolution: {integrity: sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==} + '@vitest/istanbul-lib-report@1.0.1': + resolution: {integrity: sha512-1EOLRfsTMnyAr3+kEAsP4o9dhaDlGPpD7H5iLBBeq//YpNB1VIahkPhB+eRp9N2Dkfw8oySROjE3yf9XDeaIkQ==} + engines: {node: '>=22'} + + '@vitest/mocker@5.0.1': + resolution: {integrity: sha512-6K1DoBNAPGvuOcSsGA4D6x+5zEEff/KmOOP3uetT2TrGpVfI+HRHRnJJfKi5ib/g1vx8IYHQD8s0pbJz8WQI7Q==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -7951,20 +6972,8 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.11': - resolution: {integrity: sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==} - - '@vitest/runner@4.1.11': - resolution: {integrity: sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==} - - '@vitest/snapshot@4.1.11': - resolution: {integrity: sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==} - - '@vitest/spy@4.1.11': - resolution: {integrity: sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==} - - '@vitest/utils@4.1.11': - resolution: {integrity: sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==} + '@vitest/spy@5.0.1': + resolution: {integrity: sha512-rbto/mF/SGERxEgYOek7Xm6B9b+y+mVoo+f4b2LymYO8zM1b7uB5nHuhVMTP2hxdzgxvGiZYGxGIaMvL5y180Q==} '@volar/kit@2.4.28': resolution: {integrity: sha512-cKX4vK9dtZvDRaAzeoUdaAJEew6IdxHNCRrdp5Kvcl6zZOqb6jTOfk3kXkIkG3T7oTFXguEMt5+9ptyqYR84Pg==} @@ -7976,15 +6985,30 @@ packages: '@volar/language-server@2.4.28': resolution: {integrity: sha512-NqcLnE5gERKuS4PUFwlhMxf6vqYo7hXtbMFbViXcbVkbZ905AIVWhnSo0ZNBC2V127H1/2zP7RvVOVnyITFfBw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true '@volar/language-service@2.4.28': resolution: {integrity: sha512-Rh/wYCZJrI5vCwMk9xyw/Z+MsWxlJY1rmMZPsxUoJKfzIRjS/NF1NmnuEcrMbEVGja00aVpCsInJfixQTMdvLw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true '@volar/source-map@2.4.28': resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==} '@volar/typescript@2.4.28': resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true '@vscode/emmet-helper@2.11.0': resolution: {integrity: sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==} @@ -7998,15 +7022,9 @@ packages: '@webgpu/types@0.1.72': resolution: {integrity: sha512-0cF7RFM2edNoiIS1ODJp0/Gzv4/xSXhwoR0YCza+OWpJWtn4wmo9DvK91aLlH9+uUnwIriP7ZiC3WitmyhuzBw==} - '@xmldom/xmldom@0.8.13': - resolution: {integrity: sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==} + '@xmldom/xmldom@0.8.15': + resolution: {integrity: sha512-/5NV/vDALVFDXgLmfsy9TRCBlKwO2LNBFzpzvb9iIj+jR+eSc6DLYYvVOdivT/jm7MtU6TebYuRmzEOI7w40UA==} engines: {node: '>=10.0.0'} - deprecated: this version has critical issues, please update to the latest version - - '@xmldom/xmldom@0.9.10': - resolution: {integrity: sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw==} - engines: {node: '>=14.6'} - deprecated: this version has critical issues, please update to the latest version abbrev@4.0.0: resolution: {integrity: sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==} @@ -8016,26 +7034,18 @@ packages: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.5: - resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} - engines: {node: '>=0.4.0'} - - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + acorn@8.18.0: + resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==} engines: {node: '>=0.4.0'} hasBin: true - adm-zip@0.6.0: - resolution: {integrity: sha512-XleryMhbuksdKtofnWZ9Sk+4CUTbms4Mb/EU32SZwToAyZ5RgVos/ki8n+yr0LWHOGKuakbXTuuYNHLQjhddgg==} + adm-zip@0.6.1: + resolution: {integrity: sha512-Xwrja8nx9e5o2N1my4DsKCeKpdrnACyr1wtbPxBDgGzKzKyE9kRtBFA8mWldI+RVlD7CBZNWY/wQ2+ydwOR6kQ==} engines: {node: '>=14.0'} agent-base@7.1.4: @@ -8050,14 +7060,6 @@ packages: ajv: optional: true - 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: @@ -8071,16 +7073,11 @@ packages: peerDependencies: ajv: ^8.0.0-beta.0 - ajv-keywords@5.1.0: - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} - peerDependencies: - ajv: ^8.8.2 - ajv@6.15.0: resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} am-i-vibing@0.4.0: resolution: {integrity: sha512-MxT4XZL7pzLHpuvhDKdMaQHMGGkJDLluKBLsbstn+8wv9sWcFT6h+0ve9qkml95amVTZtZV83gQe2hY+ojgHLg==} @@ -8097,17 +7094,12 @@ packages: three: optional: true - 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.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + ansi-regex@6.3.0: + resolution: {integrity: sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==} engines: {node: '>=12'} ansi-styles@4.3.0: @@ -8129,24 +7121,16 @@ packages: anynum@1.0.1: resolution: {integrity: sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==} - apache-arrow@21.1.0: - resolution: {integrity: sha512-kQrYLxhC+NTVVZ4CCzGF6L/uPVOzJmD1T3XgbiUnP7oTeVFOFgEUu6IKNwCDkpFoBVqDKQivlX4RUFqqnWFlEA==} - hasBin: true - - app-builder-lib@27.0.0-alpha.7: - resolution: {integrity: sha512-d4lr2xtJ4l7pd3CqG+h8DqfyMIvckyfk81luYm+O22q7GNO0y3i3IlQcs3CLWHBGnLOGxmb1HpY2pHTMUXRrmQ==} + app-builder-lib@27.0.0-alpha.8: + resolution: {integrity: sha512-EnGEDEYPSxyIC3L0AlJNBZ9uymoqJlAwwYRX65XEeIvmjedeMeKDv0GKYJv4H2NKWG4pvTN50v5cb8ZROPUaVg==} engines: {node: '>=22.12.0'} peerDependencies: - dmg-builder: 27.0.0-alpha.7 - electron-builder-squirrel-windows: 27.0.0-alpha.7 + dmg-builder: 27.0.0-alpha.8 + electron-builder-squirrel-windows: 27.0.0-alpha.8 - archiver-utils@5.0.2: - resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} - engines: {node: '>= 14'} - - archiver@7.0.1: - resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} - engines: {node: '>= 14'} + archiver@8.0.0: + resolution: {integrity: sha512-fV1orZfsnPn9BaSByR/qE67rJCLJEy2Ox5bq7nJh+jquWaNh6Sfec75kJ2T6PtdGUbPQlrVoSVCEOa5SdiTQ1g==} + engines: {node: '>=18'} arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -8158,17 +7142,14 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + aria-query@5.3.2: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} - array-back@6.2.2: - resolution: {integrity: sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==} - engines: {node: '>=12.17'} - - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - array-iterate@2.0.1: resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} @@ -8176,16 +7157,12 @@ packages: resolution: {integrity: sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==} engines: {node: '>=12.0.0'} - asn1js@3.0.7: - resolution: {integrity: sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==} - engines: {node: '>=12.0.0'} - assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - ast-v8-to-istanbul@1.0.5: - resolution: {integrity: sha512-UPAgKJFSEGMWSDr3LX4tqnAb4f7KGT8O40Tyx8wbYmmZ/yn58lNCm8h3svs3eXgiGd5AXxz8NDOvXWvicq+rJA==} + ast-v8-to-istanbul@1.0.6: + resolution: {integrity: sha512-fvpl29helSO2w/z7utIbrkNXILdrLwDwAMH2I/zPKlGf5244+gf+B4cyS1sANcrPY2h+hWCGSgC8N61s/+AF9A==} astring@1.9.0: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} @@ -8196,12 +7173,12 @@ packages: peerDependencies: astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta || ^7.0.0 - astro@7.1.3: - resolution: {integrity: sha512-4dhPyAAXthf3xLEYnG8SeL7yr/nTPPABfY7e9YF0yuO+vK9Xp+8Q5j4xzsmL3GueukQv4oNwGNTBepLOiDGeJA==} + astro@7.3.2: + resolution: {integrity: sha512-ysTcdpGP61XZpHoMRYC/CK19DQ94qkBvzXMtXEo0gEqPNkmOU/Tv++CtWmzaI4nF2Ck8RXFdiWvdlTWa2oOr9w==} engines: {node: '>=22.12.0', npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true peerDependencies: - '@astrojs/markdown-remark': 7.2.1 + '@astrojs/markdown-remark': ^7.3.0 peerDependenciesMeta: '@astrojs/markdown-remark': optional: true @@ -8224,15 +7201,15 @@ packages: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} - autoprefixer@10.4.24: - resolution: {integrity: sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==} + autoprefixer@10.6.1: + resolution: {integrity: sha512-cL1Qz6ADZhcEbny/8HPfe99J6HhNoYtpX2LFLIbhgGE7Q1hlQVkYFdetDN7Id3KiQxhDrHwzlHr/YQCnZ8+xSA==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 - await-lock@2.2.2: - resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==} + await-lock@3.0.0: + resolution: {integrity: sha512-eO6fLiSnrJrMdjWMNK8zbVRXPs2TKJg78iKZd9wDpN3na5tcoV6EoeiOlMgk2QaAQ1gIrK1YuMsJHXWqz89tSA==} aws4@1.13.2: resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} @@ -8241,30 +7218,26 @@ packages: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} - b4a@1.8.0: - resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==} + b4a@1.9.0: + resolution: {integrity: sha512-dpfcF9fDNR6++cthXR67iyhgqWy9CBouAvIWhIntzBG6cvK/cnIPiZQjBwi/ZqjjBEDGfoNDtmB0kTjroOJ3pQ==} peerDependencies: react-native-b4a: '*' peerDependenciesMeta: react-native-b4a: optional: true - babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} - - babel-plugin-polyfill-corejs2@0.4.15: - resolution: {integrity: sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==} + babel-plugin-polyfill-corejs2@0.4.17: + resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-corejs3@0.14.0: - resolution: {integrity: sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==} + babel-plugin-polyfill-corejs3@0.14.2: + resolution: {integrity: sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.6: - resolution: {integrity: sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==} + babel-plugin-polyfill-regenerator@0.6.8: + resolution: {integrity: sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -8278,73 +7251,86 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - bare-events@2.8.2: - resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} + bare-events@2.9.2: + resolution: {integrity: sha512-AIPKioV7/Y/8KfZ3AAhjPJxLLbY49S64Ym5DakZlUg75qQiTgUq9hEJoEwa4eUezPUlXRy/i5NpsKvo9jgKmoA==} peerDependencies: bare-abort-controller: '*' peerDependenciesMeta: bare-abort-controller: optional: true + bare-fs@4.8.1: + resolution: {integrity: sha512-N1nnXdHZAOSstz0XiHikGS4HGMH4CnSwhqWdGQQMqqdvp4Jybm9sE3R1WVnpWVd4SFkc8ryPDBLViNLwiEqECg==} + engines: {bare: '>=1.28.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-path@3.1.2: + resolution: {integrity: sha512-ZyKbsuuqK6Ag0K8pX6V5Txq6XeJRvY+wXucnFGRjiyVYP9YWDpIQugk/b+enRYrEYBJaqLzghRQpXPMR7341Nw==} + + bare-stream@2.13.4: + resolution: {integrity: sha512-PcrQ8lVLbiJscNm1Kez+Yp4Gy4AHGcN1lzwjvf5NybWen7VvEgUfyfnXYJ2zNqWnzOfCb1Abq6lH8ti0syQszA==} + peerDependencies: + bare-abort-controller: '*' + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + bare-buffer: + optional: true + bare-events: + optional: true + + bare-url@2.5.4: + resolution: {integrity: sha512-Gxa7UVWBr0/edU1b+TJhn/AZvMQUj9OGspvYsaTYQrAbZA4BOTZGL3LiZxvD+CeMlDH4juwD84+eTAp/bLYW5g==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.10.0: - resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==} + baseline-browser-mapping@2.11.24: + resolution: {integrity: sha512-hYrgxie335U08WqICoGqKRzV1HFXv6zdxwJE4ekCb80CM9a0SVVsN4QPwT67RraRo+9h8IATk6uxHJw7QSkdOg==} engines: {node: '>=6.0.0'} hasBin: true - batch@0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - bcp-47-match@2.0.3: resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==} bcp-47@2.1.1: resolution: {integrity: sha512-KLw+H/gd2p4zly1X7Yh/qziuyae5/w/QFnvTng9eZL5fvszL7Whl3MBoWF8yxL7ksUjBfOD+OxkytiqbBpG+Fw==} - bidi-js@1.0.3: - resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} - binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - body-parser@1.20.6: - resolution: {integrity: sha512-p5tAzS57i5MV9fZFDj9LeIiTZEufbSe2eDozP+ElheSUq1m74CRq1jI4mYNDdVs9vQztXFLuk/Gd6BWTdwRJ5g==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - bonjour-service@1.3.0: - resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} - boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} bowser@2.14.1: resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} - brace-expansion@1.1.18: - resolution: {integrity: sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==} + brace-expansion@1.1.21: + resolution: {integrity: sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==} - brace-expansion@2.1.4: - resolution: {integrity: sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==} + brace-expansion@2.1.7: + resolution: {integrity: sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==} - brace-expansion@5.0.9: - resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} + brace-expansion@5.0.12: + resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==} engines: {node: 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.28.1: - resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + browserslist@4.29.0: + resolution: {integrity: sha512-3GSvyjvDI4Dur1Meg2BekJquu5uF+9R9a1+5M1Mde192eZoXbeXjzgOsgqPS2V8D5wrrip0gR5Hf/GhWQ9ZzaA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -8362,28 +7348,17 @@ packages: buffer@5.6.0: resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==} - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - builder-util-runtime@10.0.0-alpha.6: - resolution: {integrity: sha512-MxX5TNPlDfpH37t7Ol5BFYfDLnhDna6hoqPOzhZfVrnWxqL776Kvnyxdk5rn+e74yISEaEZYuhrmj+GxmmxApg==} + builder-util-runtime@10.0.0-alpha.7: + resolution: {integrity: sha512-LB7RU1QF6vLRD8xgpnqcpkGuMBnk2mCcijet4sF/4YZ0PpNwMt58bZd1bAjC4436Fjw7MLDMKUjn8zA3v/yBSQ==} engines: {node: '>=22.12.0'} - builder-util@27.0.0-alpha.7: - resolution: {integrity: sha512-8cK/Ner+F2TGmtxyENSIubNjut29ZhrQSppMwCKvG+987cRP75eKvAMx+g8ieflO9fQpibgUaPOd6MxLnC3zsw==} + builder-util@27.0.0-alpha.8: + resolution: {integrity: sha512-aOB19TCE19sRRDc8bPH79L1mb7vk+kChy22nB2DsDRO2uJ8LAXj3PMlzg//MvjTXw7TSYhUZ63FoCikTYV6rvg==} engines: {node: '>=22.12.0'} - bundle-name@4.1.0: - resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} - engines: {node: '>=18'} - - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - bytestreamjs@2.0.1: resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} engines: {node: '>=6.0.0'} @@ -8395,18 +7370,10 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - camelcase-keys@9.1.3: - resolution: {integrity: sha512-Rircqi9ch8AnZscQcsA1C47NFdaO3wukpmIRzYcDOrmvgt78hM/sj5pZhZNec2NM12uk5vTwRHZ4anGcrC4ZTg==} - engines: {node: '>=16'} - camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} @@ -8415,16 +7382,12 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - camelcase@8.0.0: - resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} - engines: {node: '>=16'} - caniuse-lite@1.0.30001810: resolution: {integrity: sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==} - cassandra-driver@4.8.0: - resolution: {integrity: sha512-HritfMGq9V7SuESeSodHvArs0mLuMk7uh+7hQK2lqdvXrvm50aWxb4RPxkK3mPDdsgHjJ427xNRFITMH2ei+Sw==} - engines: {node: '>=18'} + cassandra-driver@4.9.0: + resolution: {integrity: sha512-svYpdkLIGjD0WmuuwkkeYbfBdPX1zksK2cDyT1mWjX53OVTzuWBOVy54K6PPij8GgYpIG+K82OryrBv/xNeuWg==} + engines: {node: '>=20'} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -8433,14 +7396,14 @@ packages: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} - chalk-template@0.4.0: - resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} - engines: {node: '>=12'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -8453,10 +7416,6 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - chokidar@3.5.1: - resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} - engines: {node: '>= 8.10.0'} - chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -8480,17 +7439,17 @@ packages: resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} - 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.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} + cli-spinners@3.4.0: + resolution: {integrity: sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==} + engines: {node: '>=18.20'} - cli-table@0.3.11: - resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==} - engines: {node: '>= 0.2.0'} + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} @@ -8506,16 +7465,16 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - cluster-key-slot@1.1.2: - resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} + cluster-key-slot@1.1.1: + resolution: {integrity: sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==} engines: {node: '>=0.10.0'} code-block-writer@13.0.3: @@ -8540,12 +7499,8 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - colorjs.io@0.6.1: - resolution: {integrity: sha512-8lyR2wHzuIykCpqHKgluGsqQi5iDm3/a2IgP2GBZrasn2sBRkE4NOGsglZxWLs/jZQoNkmA/KM/8NV16rLUdBg==} - - colors@1.0.3: - resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} - engines: {node: '>=0.1.90'} + colorjs.io@0.7.1: + resolution: {integrity: sha512-LY7OHnJZxHwT5UlzNa9bbhHHDbzB6yE5+3MIPwJEQKRvSCt/T4G7epsj+9j2BExUIIfXFIJGsIXUKdfrK9Q5tA==} combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} @@ -8557,23 +7512,6 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - command-line-args@6.0.1: - resolution: {integrity: sha512-Jr3eByUjqyK0qd8W0SGFW1nZwqCaNCtbXjRo2cRJC1OYxWl3MZ5t1US3jq+cO4sPavqgw4l9BMGX0CBe+trepg==} - engines: {node: '>=12.20'} - peerDependencies: - '@75lb/nature': latest - peerDependenciesMeta: - '@75lb/nature': - optional: true - - command-line-usage@7.0.3: - resolution: {integrity: sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==} - engines: {node: '>=12.20.0'} - - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - commander@11.1.0: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} @@ -8582,6 +7520,14 @@ packages: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} + + commander@15.0.0: + resolution: {integrity: sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==} + engines: {node: '>=22.12.0'} + commander@5.1.0: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} engines: {node: '>= 6'} @@ -8590,10 +7536,6 @@ packages: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} - commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - commander@9.5.0: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} @@ -8602,46 +7544,19 @@ packages: resolution: {integrity: sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==} engines: {node: '>= 18'} - compress-commons@6.0.2: - resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} - engines: {node: '>= 14'} - - compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - - compression@1.8.1: - resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} - engines: {node: '>= 0.8.0'} + compress-commons@7.0.1: + resolution: {integrity: sha512-g0S8KAD8qf4+V//pr3BfB1aBnARLXNz2Gx+jmHU0LEriUuoQUOPOulVquHKTJ8+EAIIO7fhseNDr9wK5Q9FKBQ==} + engines: {node: '>=18'} 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'} - - 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@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} cookie-es@1.2.3: resolution: {integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==} - cookie-signature@1.0.7: - resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} - - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - cookie@1.1.1: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} @@ -8650,19 +7565,16 @@ packages: resolution: {integrity: sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==} engines: {node: '>=22'} - core-js-compat@3.48.0: - resolution: {integrity: sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==} + core-js-compat@3.50.0: + resolution: {integrity: sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q==} + engines: {node: '>=6.4.0'} - core-js@3.48.0: - resolution: {integrity: sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==} + core-js@3.50.0: + resolution: {integrity: sha512-BRWgOLKkFeCgRudR6zrs8p9XJZcE14grzKMMssoYrk6krtuEZ7MTKPIY5RzOnqsEKIR9kst7wNzphttraT+Yqw==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - cosmiconfig@8.3.6: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} @@ -8672,8 +7584,8 @@ packages: typescript: optional: true - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + cosmiconfig@9.0.2: + resolution: {integrity: sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==} engines: {node: '>=14'} peerDependencies: typescript: '>=4.9.5' @@ -8686,12 +7598,12 @@ packages: engines: {node: '>=0.8'} hasBin: true - crc32-stream@6.0.0: - resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} - engines: {node: '>= 14'} + crc32-stream@7.0.1: + resolution: {integrity: sha512-IBWsY8xznyQrcHn8h4bC8/4ErNke5elzgG8GcqF4RFPw6aHkWWRc7Tgw6upjaTX/CT/yQgqYENkxYsTYN+hW2g==} + engines: {node: '>=18'} - crelt@1.0.6: - resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + crelt@1.0.7: + resolution: {integrity: sha512-aK6BbWfhf4U/wCcLHKPJl/xa6VkVstRaPywWtMKGwuOLc/wZTyQYuoxgvZnNsBvv7Kg3YTBQYYBCggcviQczuA==} cross-dirname@0.1.0: resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==} @@ -8712,20 +7624,20 @@ packages: resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} engines: {node: '>=12'} - css-blank-pseudo@8.0.1: - resolution: {integrity: sha512-C5B2e5hCM4llrQkUms+KnWEMVW8K1n2XvX9G7ppfMZJQ7KAS/4rNnkP1Cs+HhWriOz1mWWTMFD4j1J7s31Dgug==} + css-blank-pseudo@8.0.2: + resolution: {integrity: sha512-slkPVai9igcMmQqbbb6j1Y2PI6kSyKHKYspouvZbU74ZepumYlFmPEDGJWULh1dLtYyPMHoVqFwOByrSBvOq2g==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - css-has-pseudo@8.0.0: - resolution: {integrity: sha512-Uz/bsHRbOeir/5Oeuz85tq/yLJLxX+3dpoRdjNTshs6jjqwUg8XaEZGDd0ci3fw7l53Srw0EkJ8mYan0eW5uGQ==} + css-has-pseudo@8.0.1: + resolution: {integrity: sha512-rbAA5luesIpXfRwc88KfJtaLQ2TTFmoUAU1AnolV8GHr+Z796hICAErTZl/PLnif/X18UoteT8G8fnmol3e0rQ==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - css-prefers-color-scheme@11.0.0: - resolution: {integrity: sha512-fv0mgtwUhh2m9iio3Kxc2CkrogjIaRdMFaaqyzSFdii17JF4cfPyMNX72B15ZW2Nrr/NZUpxI4dec1VMHYJvdw==} + css-prefers-color-scheme@11.0.1: + resolution: {integrity: sha512-JjBlS/GDGlqUBXS5duzFsSOMF5NJmnd11tGggppuhZeur7c1DEFWMw4xDPrUlRzfKt6AectVaiV622dZXpOPHA==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -8759,8 +7671,8 @@ packages: resolution: {integrity: sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==} engines: {node: '>= 6'} - cssdb@8.8.0: - resolution: {integrity: sha512-QbLeyz2Bgso1iRlh7IpWk6OKa3lLNGXsujVjDMPl9rOZpxKeiG69icLpbLCFxeURwmcdIfZqQyhlooKJYM4f8Q==} + cssdb@8.11.0: + resolution: {integrity: sha512-VzY/8kcK5M8oCVr/cwh24J8XVlCOITpmzCizKBC28o7Z1s23MMojXoJ3q7a+TQQoMKvxC3YlG0Z9yU10kJF1uQ==} cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} @@ -8771,40 +7683,15 @@ packages: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - cssstyle@6.2.0: - resolution: {integrity: sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==} - engines: {node: '>=20'} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - data-urls@7.0.0: - resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - - date-fns-jalali@4.1.0-0: - resolution: {integrity: sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==} - - date-fns@3.6.0: - resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} - - date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + date-fns@4.4.0: + resolution: {integrity: sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==} dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} - debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -8818,17 +7705,14 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - decimal.js@10.6.0: - resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} - decode-named-character-reference@1.3.0: resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deepfilternet3-noise-filter@1.2.1: - resolution: {integrity: sha512-OAyrHTDlUHH+AhfpVNKYEOhVqb9cZpu0fdNThplA/tB/Ts4PF/UsI+abl2n1IbSxUkhiF0OqDejEhk1n42Oqpw==} + deepfilternet3-noise-filter@1.3.0: + resolution: {integrity: sha512-yYFUlPuvPguqcd/R6/OSsr0noGqlqOE50JkCWYHogk+PjLj9qrNgwTt5zKraVkKnw0l4+eXJagkz2SUWtUl4sQ==} engines: {node: '>=18.0.0'} peerDependencies: livekit-client: ^2.0.0 @@ -8837,21 +7721,6 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - default-browser-id@5.0.1: - resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} - engines: {node: '>=18'} - - default-browser@5.5.0: - resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} - engines: {node: '>=18'} - - 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'} - defu@6.1.7: resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} @@ -8863,10 +7732,6 @@ packages: resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} engines: {node: '>=0.10'} - depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -8878,25 +7743,23 @@ packages: destr@2.0.5: resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - devalue@5.9.2: resolution: {integrity: sha512-po4PAY5c53tw5XMocSnf8A/5OHhbbUftpr93aEN6BBoAdntUmK7vu7wOATqvt7cXO7m1Cl4gMVn6p7n6n4mj0w==} devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - diff@8.0.4: - resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} + diff@9.0.0: + resolution: {integrity: sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==} engines: {node: '>=0.3.1'} dijkstrajs@1.0.3: @@ -8906,8 +7769,8 @@ packages: resolution: {integrity: sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==} hasBin: true - dmg-builder@27.0.0-alpha.7: - resolution: {integrity: sha512-XMnjKMJD05696mWfgNSGfqlbbbYjdvrJBeC+6lOeuMxzA/682Vgxkaq5KhVXT6bb7LejyLRDASQt6BuBex85LA==} + dmg-builder@27.0.0-alpha.8: + resolution: {integrity: sha512-bU6Vf/sPHVOxPnQjeNsGU3bVLNxrC2RvlZuFqiSs3zckdU+AVP7SOPcAEIGBXvaoTJL+e/CLEdEbkmEf739gIw==} engines: {node: '>=22.12.0'} dnd-core@16.0.1: @@ -8918,10 +7781,6 @@ packages: peerDependencies: dnd-core: ^16.0.1 - dns-packet@5.6.1: - resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} - engines: {node: '>=6'} - dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -8938,12 +7797,12 @@ packages: dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dotenv-expand@11.0.7: - resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} + dotenv-expand@13.0.0: + resolution: {integrity: sha512-aBfBS8eYIeXmpHI9ThIlA7/WLq+SLt18iXUZhb52rW89QLKQFoIpPG1bPeewoPZsTyjSSO3T7234FBVUM1V2rA==} engines: {node: '>=12'} - dotenv@16.6.1: - resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + dotenv@17.4.2: + resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} engines: {node: '>=12'} dset@3.1.4: @@ -8957,12 +7816,6 @@ packages: duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} - duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -8971,32 +7824,32 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-builder-squirrel-windows@27.0.0-alpha.7: - resolution: {integrity: sha512-/R8JXDyefyvzLUMfR2LbkY3fbwSYU2SX3ws8NLK6Ydw6J7KFIsjQBhT6WQJxpDOB6Aq7GIZ4I9/gwtrBZ+wDHg==} + electron-builder-squirrel-windows@27.0.0-alpha.8: + resolution: {integrity: sha512-XH7iH9xwQCr9Wt4Dh1x3V7iIJAF8783B07NAkQbe+eYgnjzyH5O9j8VR60ZVmyyxEDL1yNDm1u3XQeoSwOZJJQ==} engines: {node: '>=22.12.0'} - electron-builder@27.0.0-alpha.7: - resolution: {integrity: sha512-VRE2TMojrZSpWs49ARCW/bkExH5k6yUJH8ukg59wTfh6M2cuXuWxEWUY4FE3c1gSCcR38+4SEdWo1VfsHUJhSQ==} + electron-builder@27.0.0-alpha.8: + resolution: {integrity: sha512-7CE5ZcMz079G4+s+BH0xVudb0TUovvR+rb1rjSmtEumoDXxkoTNNr2V8xhVVntnq51P8MFuznrBoV9aW7+w0ew==} engines: {node: '>=22.12.0'} hasBin: true - electron-log@5.4.3: - resolution: {integrity: sha512-sOUsM3LjZdugatazSQ/XTyNcw8dfvH1SYhXWiJyfYodAAKOZdHs0txPiLDXFzOZbhXgAgshQkshH2ccq0feyLQ==} + electron-log@5.4.4: + resolution: {integrity: sha512-istWgaXjBfURBSS8LWVW9C3jsc6+ac+tY1lXrQEOTp0lVj+a4OlO1Tmqb36GgnEUDv92DGC9VI1HNXwJinWpgA==} engines: {node: '>= 14'} - electron-publish@27.0.0-alpha.7: - resolution: {integrity: sha512-jrM0rrVZycnjixbodXITaozF0TWCQWLr0NIOU/HrHjkF1MFKtOqRKhph+mJtrIRuA8LTtjAJ4FnmBodS9bh77A==} + electron-publish@27.0.0-alpha.8: + resolution: {integrity: sha512-KV8+9wvSqdUJjlGT3yJlxu1oBwR0xp24oK7FmzYfWZBWnUnh5cCj+QXnextYMc43yw7eBzykaq9yzVpWRATVhg==} engines: {node: '>=22.12.0'} - electron-to-chromium@1.5.302: - resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==} + electron-to-chromium@1.5.430: + resolution: {integrity: sha512-e1QEj72Y4zd8RlNZVmoTg+iCOSVwpk05IOiiQwdrkwCSVlZfPthevErhE+nckGd2YbsXfp1SkisznhGVIXP2NQ==} electron-winstaller@5.4.0: resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} engines: {node: '>=8.0.0'} - electron@44.1.1: - resolution: {integrity: sha512-N2WCq2sbOkqQgvXJYx2lS6UiO8bF+Yr67trDnS6JKa2WxTCRQsAjGl57SUtdW9h6r5PlduBFjIhxhgd3dzv1hg==} + electron@44.4.1: + resolution: {integrity: sha512-gXJarQ2Utfn8G6bp/IqLXvckOSCtrxPWjFqQaqm02Gf4zYn1aP+RN9PKimoLH/DMqjKLfBrNC4C4CviPv0cXnQ==} engines: {node: '>= 22.12.0'} hasBin: true @@ -9006,12 +7859,12 @@ packages: emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + emoji-regex@11.0.0: + resolution: {integrity: sha512-2qQtc7syPcJmvF7BfKxBvwgvhzDth6u3q23+Jr4JOQUcmMGgmj7B4/ePZ2DmOhrrb77S8kMNHq2kilVASysfqA==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - emscripten-wasm-loader@3.0.3: resolution: {integrity: sha512-fyq2maBt5LOou27LEBlL5H6G04BxgSamXkvmMsAuIT6rd8ioH4BxNQhuyl6jVPeODh6U8Wk1BoFZxzHpg3o8wA==} engines: {node: '>=10'} @@ -9023,8 +7876,8 @@ packages: end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - enhanced-resolve@5.19.0: - resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} + enhanced-resolve@5.25.1: + resolution: {integrity: sha512-nGXts5znJzmWPu+mIE9izCOzdg63oJca2mDzGWWTth7sr4aCToKcoyFVBQwN75Ij5Pf6p510EwkTqViTRzDV+w==} engines: {node: '>=10.13.0'} entities@4.5.0: @@ -9039,10 +7892,6 @@ packages: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} - entities@8.0.0: - resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==} - engines: {node: '>=20.19.0'} - env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -9068,8 +7917,8 @@ packages: es-module-lexer@2.3.2: resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==} - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} es-set-tostringtag@2.1.0: @@ -9082,16 +7931,6 @@ packages: esast-util-from-js@2.0.1: resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} - esbuild@0.25.12: - resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} - engines: {node: '>=18'} - hasBin: true - - esbuild@0.27.2: - resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.28.2: resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==} engines: {node: '>=18'} @@ -9140,10 +7979,6 @@ packages: jiti: optional: true - esm@3.2.25: - resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} - engines: {node: '>=6'} - espree@11.2.0: resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -9178,9 +8013,6 @@ packages: estree-util-visit@2.0.0: resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -9196,9 +8028,6 @@ packages: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} @@ -9209,29 +8038,21 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - exit-hook@4.0.0: - resolution: {integrity: sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==} - engines: {node: '>=18'} - - expect-type@1.3.0: - resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + expect-type@1.4.0: + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} engines: {node: '>=12.0.0'} exponential-backoff@3.1.3: resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} - express@4.22.1: - resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} - engines: {node: '>= 0.10.0'} - expressive-code@0.44.2: resolution: {integrity: sha512-MLNghkvhyFgVW4oCD5DxBuYnnTXIf0PygzGmfT6OZeOOYWh/D4sH1j931biElkA5RG/J9wY/iuSMGAPF5vzHOg==} extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - fast-copy@4.0.2: - resolution: {integrity: sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==} + fast-copy@4.1.1: + resolution: {integrity: sha512-A4QTJmuiztpGtr6AMeJts9R4hbj2ZBUwtOaKrG6rw2y7t6+IaJKjz5M3XDs8BUznxDH43FVc6A0y/gWlMl4UtA==} fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -9239,10 +8060,6 @@ packages: fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -9261,8 +8078,8 @@ packages: fast-string-width@3.0.2: resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} - fast-uri@3.1.5: - resolution: {integrity: sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==} + fast-uri@3.1.8: + resolution: {integrity: sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==} fast-wrap-ansi@0.2.2: resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} @@ -9274,16 +8091,9 @@ packages: resolution: {integrity: sha512-TBw6K/fxoQGGjCmZDw9w/ZwP3uDcnTM4YH/g+PFRWr8sbe5idXtxNN6vITh4+1ruCZaho6uBFurElsA7F0zzgw==} hasBin: true - fastq@1.20.1: - resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} - favico.js@0.3.10: resolution: {integrity: sha512-S5KvqAOczRjlyjQPPZPSlUEybBkfBgKosY/pzTIxkvKgigB+DkITvIEI70dxQarbv4PZ+UD77QzquCAcU/6LHQ==} - faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} - fd-package-json@2.0.0: resolution: {integrity: sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==} @@ -9296,8 +8106,8 @@ packages: picomatch: optional: true - fflate@0.8.2: - resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + fflate@0.8.3: + resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==} file-entry-cache@11.1.5: resolution: {integrity: sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==} @@ -9309,18 +8119,9 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - finalhandler@1.3.2: - resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} - engines: {node: '>= 0.8'} - - find-replace@5.0.2: - resolution: {integrity: sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q==} - engines: {node: '>=14'} - peerDependencies: - '@75lb/nature': latest - peerDependenciesMeta: - '@75lb/nature': - optional: true + find-proc@0.1.0: + resolution: {integrity: sha512-OaOpEYv2PiQ7SQ5LIrl+deA1XaWcxEjnpM6VuWXTUvn+teIXxeFTLDmu18/zDQpFmHN4o3oDBX+BT0AGwEhemg==} + engines: {node: ^20.19.0 || >=22.12.0} find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} @@ -9343,15 +8144,6 @@ packages: resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} engines: {node: '>=8'} - follow-redirects@1.16.0: - resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - fontace@0.4.1: resolution: {integrity: sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==} @@ -9359,35 +8151,24 @@ packages: resolution: {integrity: sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==} engines: {node: '>=20'} - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - form-data@4.0.6: resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} engines: {node: '>= 6'} - formatly@0.3.0: - resolution: {integrity: sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w==} + formatly@0.7.0: + resolution: {integrity: sha512-7CXJtIIA0zy/u12StsYk25qVKxvdLA2ep2sTNxK3ov0mGNIIDqIvAXDSgTnAfDJFsPfWjuz0WjfYSdpvnLA5Tg==} engines: {node: '>=18.3.0'} hasBin: true - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - fraction.js@5.3.4: resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} - framer-motion@12.34.3: - resolution: {integrity: sha512-v81ecyZKYO/DfpTwHivqkxSUBzvceOpoI+wLfgCgoUIKxlFKEXdg0oR9imxwXumT4SFy8vRk9xzJ5l3/Du/55Q==} + framer-motion@13.4.0: + resolution: {integrity: sha512-HCpqKM9BTu6UYKtj0u6J1QNxojnnirNcghcSDZ+SkpiL3myxvtsgXPS3ZGEELC2eSma7YiA937rAEXtRyydSXQ==} peerDependencies: - '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: - '@emotion/is-prop-valid': - optional: true react: optional: true react-dom: @@ -9396,10 +8177,6 @@ packages: franc-min@6.2.0: resolution: {integrity: sha512-1uDIEUSlUZgvJa2AKYR/dmJC66v/PvGQ9mWfI9nOr/kPpMFyvswK0gPXOwpYJYiYD008PpHLkGfG58SPjQJFxw==} - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - fresh@2.0.0: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} @@ -9443,6 +8220,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -9451,8 +8232,8 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-tsconfig@4.13.6: - resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} + get-tsconfig@4.14.3: + resolution: {integrity: sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==} get-tsconfig@5.0.0-beta.4: resolution: {integrity: sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==} @@ -9482,23 +8263,6 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob-to-regex.js@1.2.0: - resolution: {integrity: sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - - glob@10.5.0: - resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - hasBin: true - - glob@11.1.0: - resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} - engines: {node: 20 || >=22} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - hasBin: true - glob@13.0.6: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} @@ -9514,13 +8278,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - graphql@16.13.0: - resolution: {integrity: sha512-uSisMYERbaB9bkA9M4/4dnqyktaEkf1kMHNKq/7DHyxVeWqHQ2mBmVqm5u6/FVHwF3iCNalKcg82Zfl+tffWoA==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - graphql@16.14.2: resolution: {integrity: sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} @@ -9528,18 +8285,11 @@ packages: guid-typescript@1.0.9: resolution: {integrity: sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==} - gzip-size@6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} - h3@1.15.11: resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==} - handle-thing@2.0.1: - resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - - happy-dom@20.12.0: - resolution: {integrity: sha512-7uMYJu2SEwwL8vVcKp0C0lnt6d2LSGGe+T+oY79PiCJNNSgFpbxW8n5KuzpDQvrU4mt+fYiK1+Jy7Z2v39YR6g==} + happy-dom@20.14.5: + resolution: {integrity: sha512-x/RzkpWO40bTjIoT30iQtt64FLLmH/iRcUCN2X//bLx7H3ifkdfPXyqsro/OYtqzIAhiLMMA7mmiOR9C3NOKjQ==} engines: {node: '>=20.0.0'} has-flag@4.0.0: @@ -9622,8 +8372,8 @@ packages: hastscript@9.0.1: resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} - headers-polyfill@4.0.3: - resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + headers-polyfill@5.0.1: + resolution: {integrity: sha512-1TJ6Fih/b8h5TIcv+1+Hw0PDQWJTKDKzFZzcKOiW1wJza3XoAQlkCuXLbymPYB8+ZQyw8mHvdw560e8zVFIWyA==} help-me@5.0.0: resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} @@ -9634,8 +8384,8 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - hono@4.13.5: - resolution: {integrity: sha512-O6+/eCYRkzzzy0rPWwKLiGBR1nFuUPZynnwjxN1MBA62NNqbT0wQEzQyK2gSO5yDIDB336sXQleAhOHrzlYyKw==} + hono@4.13.8: + resolution: {integrity: sha512-/Gng7NfoykZl2pjukW5Z6+8Yxm3BPRf86GTbQnt0SbySkvax4fyL4H3HhY1cCpBGmiW9XDRFzRV+CXK2W8QudQ==} engines: {node: '>=16.9.0'} hookified@1.15.1: @@ -9648,23 +8398,13 @@ packages: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} - hpack.js@2.1.6: - resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} - hpagent@1.2.0: resolution: {integrity: sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==} engines: {node: '>=14'} - html-encoding-sniffer@6.0.0: - resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - html-entities@2.6.0: resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - html-escaper@3.0.3: resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} @@ -9677,37 +8417,14 @@ packages: http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - http-deceiver@1.2.7: - resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - - http-errors@1.8.1: - resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} - engines: {node: '>= 0.6'} - http-errors@2.0.1: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} - http-parser-js@0.5.10: - resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==} - http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} - http-proxy-middleware@2.0.10: - resolution: {integrity: sha512-RKzRWNPxUZqbuk3BC5mGVJbBnWgr+diEnjJexIOytFbBzDy88Fbh/YvBr3DsNrl1jYAfjWfpATEv0NO35FDuPQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true - - http-proxy@1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} - https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -9716,10 +8433,6 @@ packages: resolution: {integrity: sha512-u3ZuEYKGYnLZlIs+k5S+KdY+Q57mYD46fTwZJCiSXdES+fhxcLNF5mJ0nxjqrPAgE/8Kow6XLxRdRd/HDUPQZg==} engines: {node: '>=4'} - hyperdyperid@1.2.0: - resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} - engines: {node: '>=10.18'} - i18next@26.4.2: resolution: {integrity: sha512-RX+R0VLg13IbvRuJSxnqykUFS9vQZTl8wYpWPCIUDWVrSGjsQywB5Y+pjzrkboxGAuYfJZVH1InFTdgBdxq6ug==} peerDependencies: @@ -9728,10 +8441,6 @@ packages: typescript: optional: true - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - icss-replace-symbols@1.1.0: resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} @@ -9741,9 +8450,10 @@ packages: peerDependencies: postcss: ^8.1.0 - idna-uts46-hx@6.1.1: - resolution: {integrity: sha512-xqYoAnxCwMb1FSwHGxqoEeB4qhL0qBmCsSDYCajL/cUnhxbdkouTatAV3DyATUnGoJ+aenv8zCMgfhd55uze8Q==} - engines: {node: ^22.14.0 || >= 24.10.0} + idna-uts46-hx@6.2.1: + resolution: {integrity: sha512-ywCsEJObClsvgOeiUaV70O4sGZvwX+w2Svr1I+KECCtPelsuANcLK4Y1n+TZ3KNAlnQYMF6Te8rTZ2xbIuK8WQ==} + engines: {node: ^24.15.0 || ^26.0.0, npm: '>=12.0.0'} + hasBin: true ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -9752,8 +8462,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.8: - resolution: {integrity: sha512-YYNsSlXBjMk92SKnkwvB5LOVSa6OznlFUGcsvrFgNJbJCd0M1XKeFVRc8ZByeCqz32FivYNHJVooLmdqrmvp/Q==} + ignore@7.0.9: + resolution: {integrity: sha512-brTTsvFRt5C1gGHtPst/281UjPD5t9fBqbgoMPlVWy11ZLTPfu7HxK4ZYqO9H7o/yC9rSTCI85EaQ4OoY12qYw==} engines: {node: '>= 4'} import-fresh@3.3.1: @@ -9774,22 +8484,15 @@ packages: inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} - intl-messageformat@10.7.18: - resolution: {integrity: sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==} - iobuffer@6.0.1: resolution: {integrity: sha512-SZWYkWNfjIXIBYSDpXDYIgshqtbOPsi4lviawAEceR1Kqk+sHDlcQjWrzNQsii80AyBY0q5c8HCTNjqo74ul+Q==} - ioredis@5.9.3: - resolution: {integrity: sha512-VI5tMCdeoxZWU5vjHWsiE/Su76JGhBvWF1MJnV9ZtGltHk9BmD48oDq8Tj8haZ85aceXZMxLNDQZRVo5QKNgXA==} - engines: {node: '>=12.22.0'} + ioredis@6.0.0: + resolution: {integrity: sha512-f+Dtubxfpf6KYFq7WVXJoOLn0bk4TJrMrN9SzeE+jrWrCWj7XX3fA6vkryafhADX+GMymRxgDJDOI33COkJc0w==} + engines: {node: '>=20.0.0'} - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - - ipaddr.js@2.3.0: - resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==} + ipaddr.js@2.5.0: + resolution: {integrity: sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w==} engines: {node: '>= 10'} iron-webcrypto@1.2.1: @@ -9808,10 +8511,6 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - is-core-module@2.16.2: resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} engines: {node: '>= 0.4'} @@ -9819,11 +8518,6 @@ packages: is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - 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-docker@4.0.0: resolution: {integrity: sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==} engines: {node: '>=20'} @@ -9844,18 +8538,9 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - 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-network-error@1.3.0: - resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==} - engines: {node: '>=16'} + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} is-node-process@1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} @@ -9864,35 +8549,24 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-observable@2.1.0: - resolution: {integrity: sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw==} - engines: {node: '>=8'} - - is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + is-there@4.5.2: resolution: {integrity: sha512-ixMkfz3rtS1vEsLf0TjgjqUn96Q0ukpUVDMnPYVocJyTzu2G/QgEtqYddcHZawHO+R31cKVPggJmBLrm1vJCOg==} - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} is-unsafe@2.0.2: resolution: {integrity: sha512-HgbIHPBH0KHHCcjLfGsCvhtPTVxjaAZlXjwdz7/GQC40SjSe4sfQsar8J5VFo8JOSbarkpV0OLG95bbaNd9aAQ==} @@ -9900,10 +8574,6 @@ packages: is-url@1.2.4: resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} - is-wsl@3.1.1: - resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} - engines: {node: '>=16'} - isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -9932,28 +8602,9 @@ packages: isomorphic.js@0.2.5: resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==} - istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - - istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - - istanbul-reports@3.2.0: - resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} - engines: {node: '>=8'} - itty-time@2.0.2: resolution: {integrity: sha512-95U9Xo3Qggz/e82ewZQJw8x76HgiMvbrijzoPy6nCTae4FZEwbcVJgrB57Kvddf8Q5pQdgJKTX6euFJpDr6Low==} - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jackspeak@4.2.3: - resolution: {integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==} - engines: {node: 20 || >=22} - jake@10.9.4: resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} engines: {node: '>=10'} @@ -9967,10 +8618,6 @@ packages: resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true - jiti@2.7.0: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true @@ -9978,8 +8625,8 @@ packages: jose@5.10.0: resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} - jose@6.1.3: - resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + jose@6.2.12: + resolution: {integrity: sha512-9NiFmJEex0sy2Dk58j2UGBSHgUs2ypF9eZSu4L6vjOX3Dp96Sw1F3uL+H+D1sx02jZZdzUT0HgvCy59CuvXcWw==} joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} @@ -10008,28 +8655,15 @@ packages: resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==} hasBin: true - js-yaml@5.4.1: - resolution: {integrity: sha512-28R/k+NAjeuf7+CKlTxWZVExJGwVVLwY06DgEnOMz2gEpfNkDcD7QvyiVPT0xy0XXhU8vHsd4Ot42OOPdJG7dQ==} + js-yaml@5.4.2: + resolution: {integrity: sha512-m+aqu+LwO1O6sIopafj8HUVl5aawITwZQe/yHpMCKjaWBaA/d07B/QdMb3529REftiU+RMMHL3Vlsw3hON7vWg==} hasBin: true - jsdom@28.1.0: - resolution: {integrity: sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - peerDependencies: - canvas: ^3.0.0 - peerDependenciesMeta: - canvas: - optional: true - jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} hasBin: true - json-bignum@0.0.3: - resolution: {integrity: sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==} - engines: {node: '>=0.8'} - json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -10063,8 +8697,8 @@ packages: jsonfile@6.2.1: resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} - katex@0.16.33: - resolution: {integrity: sha512-q3N5u+1sY9Bu7T4nlXoiRBXWfwSefNGoKeOwekV+gw0cAXQlz2Ww6BLcmBxVDeXBMUDQv6fK5bcNaJLxob3ZQA==} + katex@0.18.7: + resolution: {integrity: sha512-h+UCwkZ+4Jz8WQ7MLGfj7UVFrRCizGb912fwF4luGdYsC5paYG1vx+jy+KRcC/XkpjGva/P7nAWuxNnPzRvzHw==} hasBin: true keyv@5.6.0: @@ -10078,16 +8712,10 @@ packages: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} - knip@5.88.1: - resolution: {integrity: sha512-tpy5o7zu1MjawVkLPuahymVJekYY3kYjvzcoInhIchgePxTlo+api90tBv2KfhAIe5uXh+mez1tAfmbv8/TiZg==} - engines: {node: '>=18.18.0'} + knip@6.36.0: + resolution: {integrity: sha512-DWETufDYX4UdaLeCK9gI5rfROanxVxbrsyEPzHFIrrn1H+W04f3XdQ6HPWMnA7O2u2VOKOLWt+EV23K/kb5jlA==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - peerDependencies: - '@types/node': '>=18' - typescript: '>=5.0.4 <7' - - launch-editor@2.14.1: - resolution: {integrity: sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==} lazy-val@1.0.5: resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} @@ -10104,8 +8732,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lexical@0.48.0: - resolution: {integrity: sha512-KK4Tyr/cPsleoZ7XvhGRiRmcrZidSmoFUdIXK9nPubIifoC+80Dc5THyc4xtGKtsW24S1TsHzk5gmfBU+TxmEg==} + lexical@0.50.0: + resolution: {integrity: sha512-m/uySKGi66CEjCjIvmMeLjLgMnckCKAQn1ynFGj+YJfjlr6KtkodH/dpFL+hdLDqqEZHhR75EP64J96MNIMwDw==} peerDependencies: typescript: '>=5.2' peerDependenciesMeta: @@ -10117,11 +8745,11 @@ packages: engines: {node: '>=16'} hasBin: true - libphonenumber-js@1.12.41: - resolution: {integrity: sha512-lsmMmGXBxXIK/VMLEj0kL6MtUs1kBGj1nTCzi6zgQoG1DEwqwt2DQyHxcLykceIxAnfE3hya7NuIh6PpC6S3fA==} + libphonenumber-js@1.13.13: + resolution: {integrity: sha512-hV6SmWnyQ8U1QXhhqbqYBHIStNnscG7A5XbGodgdHhf/8N5PwhYpJA5U/yHDjYwPYTd8uNGXqq416XctuvK2PA==} - lightningcss-android-arm64@1.31.1: - resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] @@ -10132,8 +8760,8 @@ packages: cpu: [arm64] os: [android] - lightningcss-darwin-arm64@1.31.1: - resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==} + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] @@ -10144,8 +8772,8 @@ packages: cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.31.1: - resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==} + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] @@ -10156,8 +8784,8 @@ packages: cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.31.1: - resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==} + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] @@ -10168,8 +8796,8 @@ packages: cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.31.1: - resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==} + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] @@ -10180,8 +8808,8 @@ packages: cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.31.1: - resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==} + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] @@ -10194,8 +8822,8 @@ packages: os: [linux] libc: [glibc] - lightningcss-linux-arm64-musl@1.31.1: - resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] @@ -10208,8 +8836,8 @@ packages: os: [linux] libc: [musl] - lightningcss-linux-x64-gnu@1.31.1: - resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] @@ -10222,8 +8850,8 @@ packages: os: [linux] libc: [glibc] - lightningcss-linux-x64-musl@1.31.1: - resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] @@ -10236,8 +8864,8 @@ packages: os: [linux] libc: [musl] - lightningcss-win32-arm64-msvc@1.31.1: - resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] @@ -10248,8 +8876,8 @@ packages: cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.31.1: - resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==} + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] @@ -10260,20 +8888,24 @@ packages: cpu: [x64] os: [win32] - lightningcss@1.31.1: - resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} lightningcss@1.33.0: resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} engines: {node: '>= 12.0.0'} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - livekit-server-sdk@2.15.0: - resolution: {integrity: sha512-HmzjWnwEwwShu8yUf7VGFXdc+BuMJR5pnIY4qsdlhqI9d9wDgq+4cdTEHg0NEBaiGnc6PCOBiaTYgmIyVJ0S9w==} - engines: {node: '>=18'} + livekit-server-sdk@2.19.0: + resolution: {integrity: sha512-9q+MuVS2qky5+Xaf7/XalMu90EcGX2wkKBy80ANlJH8WCulQpfNMU8ILIMq913X59kH6itNyxP4fr16616KG3A==} + engines: {node: '>=19'} locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} @@ -10283,24 +8915,15 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - lodash.defaults@4.2.0: - resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} - - lodash.isarguments@3.1.0: - resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} - lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@7.0.1: + resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} + engines: {node: '>=18'} loglevel@1.9.1: resolution: {integrity: sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==} @@ -10325,10 +8948,6 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.2.6: - resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} - engines: {node: 20 || >=22} - lru-cache@11.5.2: resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} engines: {node: 20 || >=22} @@ -10344,23 +8963,22 @@ packages: resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} engines: {node: '>=12'} + machina@7.0.1: + resolution: {integrity: sha512-0Xkgs8NeBvO2hW6bjJT8ewLWrMfh1haMPstaghpASWjXkLjRhtDiaJG1Kb7mslaOHxZYxpH7PIjpmirRVYbMMA==} + engines: {node: '>=22.22'} + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.5.2: - resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} + magic-string@1.4.1: + resolution: {integrity: sha512-8lyCu36ErXR0J9uaGKlKQoiLZKmtI63YGLE8G2o9jyRPdr4X47LusSOwgOJOzcVtp81fTAAjxR7BwKz682Jhow==} - make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + magicast@0.5.5: + resolution: {integrity: sha512-UicdXN8zQ3JHlxVq+28afMXPr1z7WNY6+7EJnzTdQWkTAlMLF5fNCCKxJHBQwGaNGR11581EiQmQzx73+MvszA==} make-plural@7.5.0: resolution: {integrity: sha512-0booA+aVYyVFoR67JBHdfVk0U08HmrBH2FrtmBqBa+NldlqXv/G2Z9VQuQq6Wgp2jDWdybEWGfBkk1cq5264WA==} - map-obj@5.0.0: - resolution: {integrity: sha512-2L3MIgJynYrZ3TYMriLDLWocz15okFakV6J12HXvMXDHui2x/zgChzg1u9mFFGbbGWE+GsLpQByt4POb9Or+uA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} @@ -10368,15 +8986,15 @@ packages: markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - match-sorter@8.2.0: - resolution: {integrity: sha512-qRVB7wYMJXizAWR4TKo5UYwgW7oAVzA8V9jve0wGzRvV91ou9dcqL+/2gJtD0PZ/Pm2Fq6cVT4VHXHmDFVMGRA==} + match-sorter@8.3.0: + resolution: {integrity: sha512-8Py1GbZi5zsclYSFcPAH4H5xfTbeD0bOREA7qP/t8bW4MbOSlPl8sbqHOedEV7O+Bxyvxm6xs/v6BXJGe+JDNA==} math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - maxmind@5.0.5: - resolution: {integrity: sha512-1lcH2kMjbBpCFhuHaMU32vz8CuOsKttRcWMQyXvtlklopCzN7NNHSVR/h9RYa8JPuFTGmkn2vYARm+7cIGuqDw==} + maxmind@5.0.7: + resolution: {integrity: sha512-+w637dwfv01MKjkrp4sKDBTEKHLPvWLYb647QTjiz3wG/teSemqudIKNShaS6eqZ7ffxC9oZlQQgIqY0rGojog==} engines: {node: '>=12', npm: '>=6'} mdast-util-definitions@6.0.0: @@ -10442,29 +9060,9 @@ packages: mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - - memfs@4.56.10: - resolution: {integrity: sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w==} - peerDependencies: - tslib: '2' - - merge-descriptors@1.0.3: - resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - mespeak@2.0.2: resolution: {integrity: sha512-vrSqilK/IXXpgPqyFQjuJLqwO6TYgVXd84hGj76F1jQ/DEBna4wjSntyTz/zlaH/6oJm8cRj50AkpKcLzQiuxQ==} - methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -10480,8 +9078,8 @@ packages: micromark-extension-gfm-strikethrough@2.1.0: resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} - micromark-extension-gfm-table@2.1.1: - resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + micromark-extension-gfm-table@2.1.2: + resolution: {integrity: sha512-pRzm4kDTu0MjlmBkxmS9yYhw60nncfcEwu9NNdPFSQEFXS95ZKyIIyTSHu/o3ReBUrLKYEq+7YaXCRn/bPB4MA==} micromark-extension-gfm-tagfilter@2.0.0: resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} @@ -10593,11 +9191,6 @@ packages: resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} engines: {node: '>=18'} - 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'} @@ -10608,12 +9201,9 @@ packages: engines: {node: '>=16'} hasBin: true - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} minimatch@10.2.6: resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} @@ -10626,10 +9216,6 @@ packages: resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} engines: {node: '>=10'} - minimatch@9.0.9: - resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} - engines: {node: '>=16 || 14 >=14.17'} - minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -10650,8 +9236,8 @@ packages: engines: {node: '>=10'} hasBin: true - mmdb-lib@3.0.2: - resolution: {integrity: sha512-7e87vk0DdWT647wjcfEtWeMtjm+zVGqNohN/aeIymbUfjHQ2T4Sx5kM+1irVDBSloNC3CkGKxswdMoo8yhqTDg==} + mmdb-lib@3.0.3: + resolution: {integrity: sha512-xQPoBXcNjjHiOvOraFBKtA++uNWF6aCVHL9dRKFXEov8eI3QJwtgiw3qApsonFT5SpoqsEVISUTg3HIDs2DiXw==} engines: {node: '>=10', npm: '>=6'} mobx-persist-store@1.1.8: @@ -10659,40 +9245,30 @@ packages: peerDependencies: mobx: '*' - mobx-react-lite@4.1.1: - resolution: {integrity: sha512-iUxiMpsvNraCKXU+yPotsOncNNmyeS2B5DKL+TL6Tar/xm+wwNJAubJmtRSeAoYawdZqwv8Z/+5nPRHeQxTiXg==} + mobx-react-lite@5.0.3: + resolution: {integrity: sha512-8qT/d/8Cg8ljt+heKhoFHNoqgedyeSGzdTixT0lgbFMMFlWfHUcXHZ8UD63eQi3ELjkxaH1VU07lXWhRwM0cVA==} peerDependencies: - mobx: ^6.9.0 - react: ^16.8.0 || ^17 || ^18 || ^19 - react-dom: '*' - react-native: '*' - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true + mobx: ^7.0.0 + react: ^18 || ^19 - mobx@6.15.0: - resolution: {integrity: sha512-UczzB+0nnwGotYSgllfARAqWCJ5e/skuV2K/l+Zyck/H6pJIhLXuBnz+6vn2i211o7DtbE78HQtsYEKICHGI+g==} + mobx@7.0.3: + resolution: {integrity: sha512-KopyyzqZ8xT1fqxFNl8ItKKMpGifRe2ySaNAHs80/cx0mL1bpJtJ46S+FSyzXKRjW0TODWj5zwq/Y9hUdJUy4w==} - moo@0.5.2: - resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} + moo@0.5.3: + resolution: {integrity: sha512-m2fmM2dDm7GZQsY7KK2cme8agi+AAljILjQnof7p1ZMDe6dQ4bdnSMx0cPppudoeNv5hEFQirN6u+O4fDE0IWA==} - motion-dom@12.34.3: - resolution: {integrity: sha512-sYgFe+pR9aIM7o4fhs2aXtOI+oqlUd33N9Yoxcgo1Fv7M20sRkHtCmzE/VRNIcq7uNJ+qio+Xubt1FXH3pQ+eQ==} + motion-dom@13.3.0: + resolution: {integrity: sha512-AmAnB6pHdZ1vHGzWzuzteG6Q3j1lHKeX/lbST6jGlgm0cjvLUgaCk1xhOuPMOy5SgovN6wnnUdwFrkcsus7Ftg==} - motion-utils@12.29.2: - resolution: {integrity: sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==} + motion-utils@13.3.0: + resolution: {integrity: sha512-sgSschQp7EseHInIlR7hBbMuvet3RA0bs28KPZAXJcGKGdxHGvh1ogpYDilY3bOMtl73EqPNmp75sAKHYPU5sg==} - motion@12.34.3: - resolution: {integrity: sha512-xZIkBGO7v/Uvm+EyaqYd+9IpXu0sZqLywVlGdCFrrMiaO9JI4Kx51mO9KlHSWwll+gZUVY5OJsWgYI5FywJ/tw==} + motion@13.4.0: + resolution: {integrity: sha512-aiNSA29N+vgV5p5cJSB5cFzx8KTuuxB99z8zGtxsaqlwKtBK6sq8YgPRpkVQLkbJMOcLDU0q/ShdT95qpBy/0g==} peerDependencies: - '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: - '@emotion/is-prop-valid': - optional: true react: optional: true react-dom: @@ -10706,14 +9282,11 @@ packages: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw@2.12.10: - resolution: {integrity: sha512-G3VUymSE0/iegFnuipujpwyTM2GuZAKXNeerUSrG2+Eg391wW63xFs5ixWsK9MWzr1AGoSkYGmyAzNgbR3+urw==} + msw@2.15.0: + resolution: {integrity: sha512-2wQAmKkQKxRuXvYJxVhPGG0wZNBQyD06oJvxqw90XqLvptdqxdlHrFUfEteKkpaNORX3Xzc+HtEl/q0nfmN2wQ==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -10725,49 +9298,28 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} - multicast-dns@7.2.5: - resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true + multiformats@13.4.2: + resolution: {integrity: sha512-eh6eHCrRi1+POZ3dA+Dq1C6jhP1GNtr9CRINMb67OKzqW9I5DUuZM/3jLPlzhgpGeiNUlEGEbkCYChXMCc/8DQ==} - multiformats@9.9.0: - resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} - - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} + mute-stream@3.0.0: + resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} + engines: {node: ^20.17.0 || >=22.9.0} n-gram@2.0.2: resolution: {integrity: sha512-S24aGsn+HLBxUGVAUFOwGpKs7LBcG4RudKU//eWzt/mQ97/NMKQxDWHyHx63UNWk/OOdihgmzoETn1tf5nQDzQ==} - nanoid@3.3.18: - resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} + nanoid@3.3.19: + resolution: {integrity: sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nats@2.29.3: - resolution: {integrity: sha512-tOQCRCwC74DgBTk4pWZ9V45sk4d7peoE2njVprMRCBXrhJ5q5cYM7i6W+Uvw2qUrcfOSnuisrX7bEx3b3Wx4QA==} - engines: {node: '>= 14.0.0'} - deprecated: Package moved. Use @nats-io/transport-node from https://github.com/nats-io/nats.js - natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - - negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} - neotraverse@1.0.1: resolution: {integrity: sha512-WmmLty1YWwJl9yZi77v2dVIV6X2kuYV8YYBI/G3LWGKdGHmHUvL1z7FW0iDvEvGAwNEoc5x1tOOOyDnf5jJw/w==} engines: {node: '>= 10'} - nkeys.js@1.1.0: - resolution: {integrity: sha512-tB/a0shZL5UZWSwsoeyqfTszONTt4k2YS0tuQioMOD180+MbombYVgzDUYHlx+gejYK6rgf08n/2Df99WY0Sxg==} - engines: {node: '>=10.0.0'} - nlcst-to-string@4.0.0: resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} @@ -10781,8 +9333,8 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-addon-api@8.5.0: - resolution: {integrity: sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==} + node-addon-api@8.9.2: + resolution: {integrity: sha512-VijLXbi3UACN69I0JVXJsX4tjACjNoQDgv2gTF6sx2wWEi8tkSg2eX8p5gSIFi8z2+DL3oHmY6OyKce38SDolg==} engines: {node: ^18 || ^20 || >= 21} node-api-version@0.2.1: @@ -10806,12 +9358,13 @@ packages: node-mock-http@1.0.5: resolution: {integrity: sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw==} - node-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + node-releases@2.0.55: + resolution: {integrity: sha512-mIrE/Cw9y+9Au6dS5vDKDhQza9YvG6w+ZrS6X+ZzA7yFW/soAeaups4Qzn1bL6g5FVy8WtP79+0j82oPIbqRjQ==} + engines: {node: '>=18'} - nodemailer@9.0.6: - resolution: {integrity: sha512-IQUGFdhdGwI9+AWX+FpUt4DLmvFaOjTMEoneTIWX/RXxuy1TdenPwWrvFMSfLkPKl+HQEXWuSAxEMMbPYXtBmg==} - engines: {node: '>=6.0.0'} + nodemailer@10.0.10: + resolution: {integrity: sha512-He9XskOFms62SyAKkLu8CcGcYHAo+BSHSsORI8s4PJH8qZgZY4L4lDfvyN0twvmbpyG+eGrxpyBlskj9d9rJ8A==} + engines: {node: '>=20.0.0'} nopt@9.0.0: resolution: {integrity: sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==} @@ -10829,18 +9382,9 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - observable-fns@0.6.1: - resolution: {integrity: sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg==} - - obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - - obug@2.1.1: - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + obug@2.2.1: + resolution: {integrity: sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==} + engines: {node: '>=12.20.0'} ofetch@1.5.1: resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} @@ -10856,16 +9400,12 @@ packages: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} - on-headers@1.1.0: - resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} - engines: {node: '>= 0.8'} - once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - 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'} oniguruma-parser@0.12.2: resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} @@ -10873,31 +9413,27 @@ packages: oniguruma-to-es@4.3.6: resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} - onnxruntime-common@1.27.0: - resolution: {integrity: sha512-3KxL5wIVqa8Ex08jxSzncm9CMgw8CjOFyOQ7SxvG9o0cVLlhTNKXyIQuTbtX4tGPJEf73OER2xrjt4HJSBL4ow==} + onnxruntime-common@1.30.0: + resolution: {integrity: sha512-7fdVWjAID1dVhH/G8qK3APARunV4VkBFoCQAP7qp4Wkab0mrorvmc+sqiT+mKXOzDqdjN5j+/Z9nb4gzNPWcyA==} - onnxruntime-web@1.27.0: - resolution: {integrity: sha512-ogDLsqIozHZwifPuN37OproAo0byX6t43/bP8GzeZWBWD6MOGExswFAx3up4NS/vvWBOg2u2PXomDt3rMmdQSg==} - - open@10.2.0: - resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} - engines: {node: '>=18'} - - opener@1.5.2: - resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} - hasBin: true + onnxruntime-web@1.30.0: + resolution: {integrity: sha512-q0y+JrrtukXSzsBWEMccVfqX25LRmosXHF+CaRJmg8pZClzcV7svNc4rKY3jL02Vb7QmRMDs1SigqR4CXAfKYQ==} optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + ora@9.4.1: + resolution: {integrity: sha512-6VlU9MLXbjVQD04AZCMX28hVtA5bUoadvUqO76MUCVA0ilwJbMiHsITRPfyVm6p/BC0Av/BXMujx39WCe1LEqw==} + engines: {node: '>=20'} outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + oxc-parser@0.148.0: + resolution: {integrity: sha512-syxUKHeUll89RIABQADcI7sikYrwyssvA6gj4phSSIPezKVM8yMaLAiLLSc7fmzVvrwybfFGFbW5zme9sX87rg==} + engines: {node: ^20.19.0 || >=22.12.0} + oxc-resolver@11.24.2: resolution: {integrity: sha512-FY91FiDBj7ls5MsFS9jN3tjz2o0/zsdSsymlakySaBwVJZorHhkWyICLZMKxlu1R9vYo+sd3z1jwb4J8x7bNDw==} @@ -10925,21 +9461,14 @@ packages: resolution: {integrity: sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA==} engines: {node: '>=20'} - p-retry@6.2.1: - resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} - engines: {node: '>=16.17'} - - p-timeout@7.0.1: - resolution: {integrity: sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==} + p-timeout@7.0.2: + resolution: {integrity: sha512-prbX4Z3YszrFNgH+MW5Zoeq3baXrMtP/MQnFeET90UB/GtGcGDQ5Usg9OCy6ETjTTntOw1SL2z9fMPUppN3Guw==} engines: {node: '>=20'} p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - package-manager-detector@1.8.0: resolution: {integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==} @@ -10967,13 +9496,6 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - parse5@8.0.1: - resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -10996,17 +9518,10 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - path-scurry@2.0.2: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} - path-to-regexp@0.1.13: - resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==} - path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} @@ -11014,9 +9529,6 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pe-library@0.4.1: resolution: {integrity: sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==} engines: {node: '>=12', npm: '>=6'} @@ -11024,8 +9536,8 @@ packages: pg-cloudflare@1.4.0: resolution: {integrity: sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A==} - pg-connection-string@2.13.0: - resolution: {integrity: sha512-EMnU9E2fSULdsbErBbMaXJvFeD9B4+nPcM3f+4lsiCR0BHLPrLVjv3DbyM2hgQQviKJaTWIRRTjKjWlHg3p2ig==} + pg-connection-string@2.14.0: + resolution: {integrity: sha512-XwWDGcLRGCXAR8F/AM5bG7Q+A3Wm2s6QeEjlOKZLlH3UYcguiqCWKyWXVag5TLTIjR7oOJUY8kcADaZgWPyLeg==} pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} @@ -11036,15 +9548,15 @@ packages: peerDependencies: pg: '>=8.0' - pg-protocol@1.14.0: - resolution: {integrity: sha512-n5taZ1kO3s9ngDTVxsEznOqCyToTgz0FLuPq0B33COy5pPpuWJpY3/2oRBVETuOgzdqRXfWpM9HIhp2LBBT1BA==} + pg-protocol@1.16.0: + resolution: {integrity: sha512-sILXutLVjCLjcDuOmvhX5e2Z4cS5qG/6Bu3VkpFwdf/633ElGLpEh9bgmuI5I4sqKqkifQiGyiCcx1HdtrK7tg==} pg-types@2.2.0: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} - pg@8.16.3: - resolution: {integrity: sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==} + pg@8.23.0: + resolution: {integrity: sha512-Ip2EQCngowJLGOfCwkFhPXU7/ljlhn6Rxlmy4XYfL2Y+vyRM59+8uR2xqRWKdYmbXmxCFOAmKxBuSUCdF34qLg==} engines: {node: '>= 16.0.0'} peerDependencies: pg-native: '>=3.0.1' @@ -11094,10 +9606,6 @@ packages: resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} engines: {node: '>=10.4.0'} - plist@3.1.1: - resolution: {integrity: sha512-ZIfcLJC+7E7FBFnDxm9MPmt7D+DidyQ26lewieO75AdhA2ayMtsJSES0iWzqJQbcVRSrTufQoy0DR94xHue0oA==} - engines: {node: '>=10.4.0'} - pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -11106,8 +9614,9 @@ packages: resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} engines: {node: '>=10.13.0'} - pofile@1.1.4: - resolution: {integrity: sha512-r6Q21sKsY1AjTVVjOuU02VYKVNQGJNQHjTIvs4dEbeuuYfxgYk/DGD2mqqq4RDaVkwdSq0VEtmQUOPe/wH8X3g==} + pofile-ts@4.0.3: + resolution: {integrity: sha512-sz1pnjgEfPyZ+QvaeX3NtCmbYnEvG01LZRLoN/uXoLtPZtxCIH5IctL7yXXc0fFyk/fqV6K8g3hlNfr6IJwupA==} + engines: {node: '>=20'} postcss-attribute-case-insensitive@8.0.0: resolution: {integrity: sha512-fovIPEV35c2JzVXdmP+sp2xirbBMt54J+upU8u6TSj410kUU5+axgEzvBBSAX8KCybze8CFCelzFAw/FfWg2TA==} @@ -11121,20 +9630,20 @@ packages: peerDependencies: postcss: ^8.4.6 - postcss-color-functional-notation@8.0.2: - resolution: {integrity: sha512-tbmkk6teYpJzFcGwPIhN1gkvxqGHvNx2PMb8Y3S5Ktyn7xOlvD98XzQ99MFY5mAyvXWclDG+BgoJKYJXFJOp5Q==} + postcss-color-functional-notation@8.0.12: + resolution: {integrity: sha512-nDfaB13By3JfyM1GgdamKJRQIzC7NWC120M0DA6SM30WeHxKFaByJ0zW/jdb22hiW/cMtAXnDnQPKxe5TjZ3pg==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - postcss-color-hex-alpha@11.0.0: - resolution: {integrity: sha512-NCGa6vjIyrjosz9GqRxVKbONBklz5TeipYqTJp3IqbnBWlBq5e5EMtG6MaX4vqk9LzocPfMQkuRK9tfk+OQuKg==} + postcss-color-hex-alpha@11.0.1: + resolution: {integrity: sha512-eZ+rhgVGXHmHTb7NJmTRNG0+ocf0Pccw6FoP+04B31NCjrjT5+SejLT3qevMzCUZp8tks7e9+aYz+nMIJ4Im+g==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - postcss-color-rebeccapurple@11.0.0: - resolution: {integrity: sha512-g9561mx7cbdqx7XeO/L+lJzVlzu7bICyXr72efBVKZGxIhvBBJf9fGXn3Cb6U4Bwh3LbzQO2e9NWBLVYdX5Eag==} + postcss-color-rebeccapurple@11.0.1: + resolution: {integrity: sha512-KlnC+kEJF2gsOddvyIG2Y940/IVhiyMSdZIArdvWt15ApV9RS0Eb3ulApmz8vcb3dXVdiVraLZndYQQb8JCcjw==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -11163,14 +9672,14 @@ packages: peerDependencies: postcss: ^8.4 - postcss-discard-comments@7.0.5: - resolution: {integrity: sha512-IR2Eja8WfYgN5n32vEGSctVQ1+JARfu4UH8M7bgGh1bC+xI/obsPJXaBpQF7MAByvgwZinhpHpdrmXtvVVlKcQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-discard-comments@9.0.2: + resolution: {integrity: sha512-QxOYI1haY3f9rPgY7i0W0+lQihsbvC/edPAAJAaSZmteI+UtGraWNnkWOZ/nCNZ6D+Ab8a9hksOCjJYBg/gF0A==} + engines: {node: ^22.22.3 || ^24.15.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.28 - postcss-double-position-gradients@7.0.0: - resolution: {integrity: sha512-Msr/dxj8Os7KLJE5Hdhvprwm3K5Zrh1KTY0eFN3ngPKNkej/Usy4BM9JQmqE6CLAkDpHoQVsi4snbL72CPt6qg==} + postcss-double-position-gradients@7.0.4: + resolution: {integrity: sha512-ThVG2bN+Q1EMpDyl9NOB643nlGRQh4ySMPcDRuTZJbloeYcUf9+EV3qtWmutb+TWaRgYtAOIWARt0SzUESZNsg==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -11181,8 +9690,8 @@ packages: peerDependencies: postcss: ^8.4 - postcss-focus-within@10.0.0: - resolution: {integrity: sha512-dvql0fzUTG+gcJYp+KTbag5vAjuo94LDYZHkqDV1rnf5gPGer1v/SrmIZBdvKU8moep3HbcbujqGjzSb3DL53Q==} + postcss-focus-within@10.0.1: + resolution: {integrity: sha512-A5w/D1q/PR6eRqXwwLZPNxNYMSbLOgelxHw2I/HAV4+okY8bxvafbrmuoy+xPuWSXahpVoUO2aw72PYlYEXXAg==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -11198,14 +9707,14 @@ packages: peerDependencies: postcss: ^8.4 - postcss-image-set-function@8.0.0: - resolution: {integrity: sha512-rEGNkOkNusf4+IuMmfEoIdLuVmvbExGbmG+MIsyV6jR5UaWSoyPcAYHV/PxzVDCmudyF+2Nh/o6Ub2saqUdnuA==} + postcss-image-set-function@8.0.1: + resolution: {integrity: sha512-QlX0xNSS3PPkpPDMEh/XlRDVrgf4WgMtL+S4xDw3npdt1xOGT96ntGqaJy4aPqOxm1zBGx1cGdWwjDeceETzpg==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - postcss-lab-function@8.0.2: - resolution: {integrity: sha512-1ZIAh8ODhZdnAb09Aq2BTenePKS1G/kUR0FwvzkQDfFtSOV64Ycv27YvV11fDycEvhIcEmgYkLABXKRiWcXRuA==} + postcss-lab-function@8.0.12: + resolution: {integrity: sha512-k4TENop9KTuP+h3ZFC8BIWqngBlmsV7VnpBYpJAxSxTT9ljA5K+2GE/pqNp1DBqM6aeIBSTPFcsJj8KWfmISVQ==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -11214,7 +9723,7 @@ packages: resolution: {integrity: sha512-k98jtRzthjj3f76MYTs9JTpRqV1RaaMhEU0Lpw9OTmQZQdppg4B30VZ74BojuBHt3F4KyubHJoXCMUeM8Bqeow==} engines: {node: '>= 18.12.0'} peerDependencies: - '@rspack/core': 1.7.6 + '@rspack/core': 2.2.5 postcss: ^7.0.0 || ^8.0.1 webpack: ^5.0.0 peerDependenciesMeta: @@ -11259,8 +9768,8 @@ packages: peerDependencies: postcss: ^8.2.14 - postcss-nesting@14.0.0: - resolution: {integrity: sha512-YGFOfVrjxYfeGTS5XctP1WCI5hu8Lr9SmntjfRC+iX5hCihEO+QZl9Ra+pkjqkgoVdDKvb2JccpElcowhZtzpw==} + postcss-nesting@14.0.1: + resolution: {integrity: sha512-80MH7KcmMtb7ffSBX82uZwnogltubaXF0sagu+OGD8M9jViR3ngRgCdoTzKCvKEtllB0MW2U7Rgfcub5fR1Bug==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -11288,8 +9797,8 @@ packages: peerDependencies: postcss: ^8.4 - postcss-preset-env@11.2.0: - resolution: {integrity: sha512-eNYpuj68cjGjvZMoSAbHilaCt3yIyzBL1cVuSGJfvJewsaBW/U6dI2bqCJl3iuZsL+yvBobcy4zJFA/3I68IHQ==} + postcss-preset-env@11.5.3: + resolution: {integrity: sha512-aiPgwezqC7jQvtfajzDQc+u7v99wsB+D3m947AZsKG8dTQrfX4Xrs2Xk9mLGUtnQYO3L85MqwW40iHcNiuoCXQ==} engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 @@ -11315,15 +9824,15 @@ packages: resolution: {integrity: sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==} engines: {node: '>=4'} - postcss-selector-parser@7.1.1: - resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + postcss-selector-parser@7.1.6: + resolution: {integrity: sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==} engines: {node: '>=4'} postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.26: - resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==} + postcss@8.5.28: + resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==} engines: {node: ^10 || ^12 || >=14} postgres-array@2.0.0: @@ -11351,8 +9860,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier@3.8.3: - resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} + prettier@3.9.7: + resolution: {integrity: sha512-T3mF5P7HFzZVLDQuCUNtJj6WK1pcpLMweMNUVwGb01bLNkH9AkKxtZvmInw8K6bnn2O3d6/5RHl6zSHiBAD0Og==} engines: {node: '>=14'} hasBin: true @@ -11375,8 +9884,8 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - process-warning@5.0.0: - resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + process-warning@5.1.0: + resolution: {integrity: sha512-jQSaVHsPgtyw60e1rQ/A+/ArPEj/S8pS/vFnyGa/gYFXrKk/6RuDkoqVDQ5NI5MmS01698ltlAk0NoDBNLujRw==} process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} @@ -11400,17 +9909,13 @@ packages: resolution: {integrity: sha512-dYDWdjSl5RNb7SgPxGQcRU+GtvP7s2fpkrY0r432PcOIaZ0/rBcxEZnQN67iJhFuQiVw754JDoPruPCNdGsbjg==} engines: {node: '>=12.0.0'} - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - - pseudolocale@2.2.0: - resolution: {integrity: sha512-O+D2eU7fO9wVLqrohvt9V/9fwMadnJQ4jxwiK+LeNEqhMx8JYx4xQHkArDCJFAdPPOp/pQq6z5L37eBvAoc8jw==} - engines: {node: '>=16.0.0'} + pseudolocale@3.1.0: + resolution: {integrity: sha512-jBidehQu5WO8zbFUod0ETJYoVPxZ0ixsdI9B8ilkE0eA+YTydxHA7ujNdU4YhTexD5yH5Griv9r5CuXx+nwFUA==} + engines: {node: '>=24.0.0'} hasBin: true - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} @@ -11419,8 +9924,8 @@ packages: pvtsutils@1.3.6: resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} - pvutils@1.1.5: - resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} + pvutils@1.2.0: + resolution: {integrity: sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg==} engines: {node: '>=16.0.0'} qified@0.10.1: @@ -11432,52 +9937,37 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - qs@6.15.3: - resolution: {integrity: sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==} - engines: {node: '>=0.6'} - - qs@6.16.0: - resolution: {integrity: sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==} - engines: {node: '>=0.6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} - quick-lru@6.1.2: - resolution: {integrity: sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==} - engines: {node: '>=12'} - radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + range-parser@1.3.0: + resolution: {integrity: sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==} engines: {node: '>= 0.6'} - raw-body@2.5.3: - resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} - engines: {node: '>= 0.8'} - - react-aria-components@1.15.1: - resolution: {integrity: sha512-irGhZ+vBvoY9xJHf/qzPLLwFZ8cBUrYwPERGhgjE62dy/RXMUiEW+1DeTHz0OvtjbvFbhNp/I7XM9IaBvmLALg==} + react-aria-components@1.21.1: + resolution: {integrity: sha512-J88WflYY0z+EhLX0ce+GjFlQ3ag3ubIgfUTjpKSrBQBu92Xtl4Ub9o118HItUddtbk1Ido0jzyPy94/klZy1hg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-aria@3.46.0: - resolution: {integrity: sha512-We0diSsMK35jw53JFjgF9w8obBjehAUI/TRiynnzSrjRd9eoHYQcecHlptke/HEFxvya/Gcm+LA21Im1+qnIeQ==} + react-aria@3.52.1: + resolution: {integrity: sha512-fdZZruC9/x/joCg0mhKGs5aHpwrXLCSZ4GOJmhhYyiE0ffyEsk9MLFt9LCOCF9tn8ErTD+UDQP4oDUSlZkmpCg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-day-picker@9.13.2: - resolution: {integrity: sha512-IMPiXfXVIAuR5Yk58DDPBC8QKClrhdXV+Tr/alBrwrHUw0qDDYB1m5zPNuTnnPIr/gmJ4ChMxmtqPdxm8+R4Eg==} + react-day-picker@10.0.1: + resolution: {integrity: sha512-eNh6BlwcYInWaJtRv18mXQ06Ys/H6rdTZAnTaSdOYJuTpwP1JMCHNd1FDRadA+gbeinq+psdULN5Xnowy9mV8w==} engines: {node: '>=18'} peerDependencies: + '@types/react': '>=16.8.0' react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true react-dnd-accessible-backend@2.1.0: resolution: {integrity: sha512-wzg1mshxVGbeTGeYFucFJ3uf/lG5mZL5VqQbEb3AIfgkkCBoo7tBjnT9Tp5evVCTR2ymhM0BDGGnv8qPMeyJKg==} @@ -11518,19 +10008,19 @@ packages: '@types/react': optional: true - react-dom@19.2.4: - resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} + react-dom@19.3.0: + resolution: {integrity: sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==} peerDependencies: - react: ^19.2.4 + react: ^19.3.0 - react-hook-form@7.71.2: - resolution: {integrity: sha512-1CHvcDYzuRUNOflt4MOq3ZM46AronNJtQ1S7tnX6YN4y72qhgiUItpacZUAQ0TyWYci3yz1X+rXaSxiuEm86PA==} + react-hook-form@7.88.0: + resolution: {integrity: sha512-QRaLOWhX93YCnMiRfnOFRSwWXZNt8qhm2JTZwypoDvKpSffTJHmpzMXt8U6PV5UThvL3IiiLDUWe2nHMtz6Mmw==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 - react-hotkeys-hook@5.2.4: - resolution: {integrity: sha512-BgKg+A1+TawkYluh5Bo4cTmcgMN5L29uhJbDUQdHwPX+qgXRjIPYU5kIDHyxnAwCkCBiu9V5OpB2mpyeluVF2A==} + react-hotkeys-hook@5.3.3: + resolution: {integrity: sha512-aswgyWUnE25hmhzHTfKDmKzsaSE5DJ4LKaU/o6rQSXkDd/1Bh9TfAFQbHkf6fLy11HvlYkp+cDDarGdhmCDhoQ==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -11541,13 +10031,13 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-stately@3.44.0: - resolution: {integrity: sha512-Il3trIp2Mo1SSa9PhQFraqOpC74zEFmwuMAlu5Fj3qdtihJOKOFqoyDl7ALRrVfnvCkau6rui155d/NMKvd+RQ==} + react-stately@3.50.0: + resolution: {integrity: sha512-TnckvpDQGU0672wEaLZqdzvhuSeXWjgW6vijMWxiKOxc8CosQUfPGISdcZyfHqjX3XMjEtRxj4w9HumvX4h4mw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react@19.2.4: - resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} + react@19.3.0: + resolution: {integrity: sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==} engines: {node: '>=0.10.0'} read-binary-file-arch@1.0.6: @@ -11565,12 +10055,9 @@ packages: resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - readdir-glob@1.1.3: - resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} - - readdirp@3.5.0: - resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} - engines: {node: '>=8.10.0'} + readdir-glob@3.0.0: + resolution: {integrity: sha512-AhNB2KgKeVJr16nK9LLZbJNWnYoT23ZrumNKFDebHBdkC8KHSqWo871JAUhoWC/RtjEVdqNMFpM6qrwRbaUqpw==} + engines: {node: '>=18'} readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} @@ -11584,6 +10071,9 @@ packages: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} + real-require@1.0.0: + resolution: {integrity: sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==} + recma-build-jsx@1.0.0: resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} @@ -11602,10 +10092,6 @@ packages: resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} engines: {node: '>=4'} - redis-parser@3.0.0: - resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} - engines: {node: '>=4'} - redux@4.2.1: resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} @@ -11635,19 +10121,13 @@ packages: regjsgen@0.8.0: resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} - regjsparser@0.13.0: - resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} + regjsparser@0.13.2: + resolution: {integrity: sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==} hasBin: true rehype-expressive-code@0.44.2: resolution: {integrity: sha512-jvjQpsfWKBquDrEl5YQA3CJybRRIuDOYsui1BJTs5oKDUK8pPkJSSxY8FjxNlIFIdtgrTjC1zuahuY4Cc1j9SQ==} - rehype-format@5.0.1: - resolution: {integrity: sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==} - - rehype-parse@9.0.1: - resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} - rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} @@ -11657,9 +10137,6 @@ packages: rehype-stringify@10.0.1: resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} - rehype@13.0.2: - resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} - remark-directive@4.0.0: resolution: {integrity: sha512-7sxn4RfF1o3izevPV1DheyGDD6X4c9hrGpfdUpm7uC++dqrnJxIZVkk7CoKqcLm0VUMAuOol7Mno3m6g8cfMuA==} @@ -11705,15 +10182,12 @@ packages: require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - resedit@1.7.2: resolution: {integrity: sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==} engines: {node: '>=12', npm: '>=6'} - reselect@5.2.0: - resolution: {integrity: sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==} + reselect@5.3.0: + resolution: {integrity: sha512-XGoLeRAVzUTcJ1qkxPQhDJyIZ5d6zzZD9nT7AEZOaaU9UbWclhycElmhO+VD5bFeLuzhPBaOV2oXC8uG35ZSpg==} resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} @@ -11722,19 +10196,14 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} - engines: {node: '>= 0.4'} - hasBin: true - resolve@1.22.12: resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} engines: {node: '>= 0.4'} 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'} retext-latin@4.0.0: resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} @@ -11752,39 +10221,19 @@ packages: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - - rettime@0.10.1: - resolution: {integrity: sha512-uyDrIlUEH37cinabq0AX4QbgV4HbFZ/gqoiunWQ1UqBtRvTTytwhNYjE++pO/MjPTZL5KQCf2bEoJ/BJNVQ5Kw==} - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rettime@0.11.11: + resolution: {integrity: sha512-ILJRqVWBCTlg9r42fFgwVZx1gnFAcQF8mRoMkbgQfIrjEDf9nbBFDFx00oloOa+Q869FUtaYDXZvEfnecQSCoQ==} rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rolldown@1.2.7: - resolution: {integrity: sha512-g0EtLvBjTUB7jhyV0S/TCup3v/XSVl45vUIGbOGU4QPiyjTenCe4mKuFvW9fEgYmS2Fo42AUssRmNuMziXdrig==} + rolldown@1.2.9: + resolution: {integrity: sha512-hx/Pv0N1haXRb11qkfnK5MXB/iqr7i0yjWQqmO9uHqZpBgQSqzc8UsSnEpalsh+j1I8qQ2CkXAkJC8Br3dKSlg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rollup@4.63.1: - resolution: {integrity: sha512-3Df9jsstwhccuEfmAMi9l8XUh/GOkVObmFTU7CCVBysEbcOZLl84jCtaAZMcPiMz2EGKsATzQcU+Xr3n/wU6cg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - run-applescript@7.1.0: - resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} - engines: {node: '>=18'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} @@ -11801,81 +10250,47 @@ packages: resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} engines: {node: '>=10'} - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sanitize-filename@1.6.4: resolution: {integrity: sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==} satteri@0.10.5: resolution: {integrity: sha512-Ao1LKpAEa9Wdg0otgbVKViZHEq9ebdXe4DMrp3s9vQAU0HNIuHnFEuMuOcm0ZIXyV0Yzxj91NvhLpvXZJO/5ZQ==} - satteri@0.9.5: - resolution: {integrity: sha512-ZuWVl+vnM64y+/TtX8Kosv2c00W+hLQiiwnEL6H0UKVVrxFqMw4D2CJHHQaouVd89OAhtBBfjWLqhKi3TVUV4w==} - - sax@1.6.0: - resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} - engines: {node: '>=11.0.0'} - sax@1.6.1: resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} engines: {node: '>=11.0.0'} - saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} - - scheduler@0.27.0: - resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - - schema-utils@4.3.3: - resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} - engines: {node: '>= 10.13.0'} + scheduler@0.28.0: + resolution: {integrity: sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==} sdp-transform@2.15.0: resolution: {integrity: sha512-KrOH82c/W+GYQ0LHqtr3caRpM3ITglq3ljGUIb8LTki7ByacJZ9z+piSGiwZDsRyhQbYBOBJgr2k6X4BZXi3Kw==} hasBin: true - sdp@3.2.1: - resolution: {integrity: sha512-lwsAIzOPlH8/7IIjjz3K0zYBk7aBVVcvjMwt3M4fLxpjMYyy7i3I97SLHebgn4YBjirkzfp3RvRDWSKsh/+WFw==} + sdp@3.2.2: + resolution: {integrity: sha512-xZocWwfyp4hkbN4hLWxMjmv2Q8aNa9MhmOZ7L9aCZPT+dZsgRr6wZRrSYE3HTdyk/2pZKPSgqI7ns7Een1xMSA==} secure-json-parse@4.1.0: resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} - select-hose@2.0.0: - resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - - selfsigned@5.5.0: - resolution: {integrity: sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==} - engines: {node: '>=18'} - - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} hasBin: true - send@0.19.2: - resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} - engines: {node: '>= 0.8.0'} - send@1.2.1: resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} engines: {node: '>= 18'} - serve-index@1.9.2: - resolution: {integrity: sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==} - engines: {node: '>= 0.8.0'} - - serve-static@1.16.3: - resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} - engines: {node: '>= 0.8.0'} - server-destroy@1.0.1: resolution: {integrity: sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==} set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + set-cookie-parser@3.1.2: + resolution: {integrity: sha512-5/r/lTwbJ3zQ+qwdUFZYeRNqda7P5HD8zQKqlSjdGt1/S0cjLAphHusj4Y58ahDtWn/g32xrIS58/ikOvwl0Lw==} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -11896,30 +10311,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shell-quote@1.10.0: - resolution: {integrity: sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==} - engines: {node: '>= 0.4'} - shiki@4.4.3: resolution: {integrity: sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g==} engines: {node: '>=20'} - side-channel-list@1.0.1: - resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.1: - resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} - engines: {node: '>= 0.4'} - siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -11934,10 +10329,6 @@ packages: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} - sirv@2.0.4: - resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} - engines: {node: '>= 10'} - sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -11953,9 +10344,6 @@ packages: snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - sockjs@0.3.24: - resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} - sonic-boom@4.2.1: resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} @@ -11977,13 +10365,6 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - 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'} - split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -11998,10 +10379,6 @@ packages: resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} engines: {node: '>= 6'} - statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} @@ -12009,11 +10386,15 @@ packages: std-env@4.2.0: resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} + stdin-discarder@0.3.2: + resolution: {integrity: sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==} + engines: {node: '>=18'} + stream-browserify@3.0.0: resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} - streamx@2.23.0: - resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} + streamx@2.28.1: + resolution: {integrity: sha512-zEzXb0s5Cds7tqMH6rhZ05lcJydCWiQPEwiNngVqzsxCc962vLY4Uw+mW7od8kDH258k2Uz/JrOkdIAAhSh9VA==} strict-event-emitter@0.5.1: resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} @@ -12022,9 +10403,13 @@ packages: 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-width@8.2.2: + resolution: {integrity: sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==} + engines: {node: '>=20'} string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -12039,16 +10424,16 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} strip-json-comments@5.0.3: resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} engines: {node: '>=14.16'} - stripe@22.0.2: - resolution: {integrity: sha512-2/BLrQ3oB1zlNfeL/LfHFjTGx6EQn0j+ztrrTJHuDjV5VVIpk92oSDaxyKLUr3pG3dnee2LZqhFUv2Bf0G1/3g==} + stripe@22.6.2: + resolution: {integrity: sha512-PwRE2scocvXqDKPiskMa5vRJEAEkq46W69XyUYmAwrNSLr675lQnfqLwnsndAWizwgihOWw/irLmoFRo3ez7ew==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -12080,8 +10465,9 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svg-parser@2.0.4: - resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + svg-parser@2.1.0: + resolution: {integrity: sha512-bwLf38YmY+TDYHJw1Ex0Co8c4yeXuJAo8YnXGZrscxrvYoVVIvLeniEkV1Ks/54VteMnL4FtyN1+P+TZJdUPmQ==} + engines: {node: '>=8'} svgo@3.3.5: resolution: {integrity: sha512-8SQMzdrvWaD8deUmrnYB+ASyxBVgWUOilg+A75nE/76WdLpj6LopCwiAVvkzkcqy/9b7t2Mg7faFLjg0ZRcZ3w==} @@ -12093,34 +10479,30 @@ packages: engines: {node: '>=16'} hasBin: true - symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - - tabbable@6.4.0: - resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} - - table-layout@4.1.1: - resolution: {integrity: sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==} - engines: {node: '>=12.17'} + tabbable@6.5.0: + resolution: {integrity: sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==} tagged-tag@1.0.0: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} - tailwindcss@4.2.1: - resolution: {integrity: sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==} + tailwindcss@4.3.3: + resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==} - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} - tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + tar-stream@3.2.1: + resolution: {integrity: sha512-nqsEO8zLZJvrOMdEwkA0QdCLFbetHMn95Zqu4fKwX+hkaTWJPZZOrxx/PwtxoK0MMGQmBQNRW3CPs8IFYQz4cQ==} tar@7.5.22: resolution: {integrity: sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==} engines: {node: '>=18'} + teex@1.0.1: + resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + temp-dir@3.0.0: resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} engines: {node: '>=14.16'} @@ -12139,25 +10521,13 @@ packages: text-decoder@1.2.7: resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} - thingies@2.5.0: - resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==} - engines: {node: '>=10.18'} - peerDependencies: - tslib: ^2 - - thread-stream@4.0.0: - resolution: {integrity: sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==} + thread-stream@4.2.0: + resolution: {integrity: sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ==} engines: {node: '>=20'} - threads@1.7.0: - resolution: {integrity: sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==} - thumbhash@0.1.1: resolution: {integrity: sha512-kH5pKeIIBPQXAOni2AiY/Cu/NKdkFREdpH+TLdM0g6WA7RriCv0kPLgP731ady67MhTAqrVG/4mnEeibVuCJcg==} - thunky@1.1.0: - resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - tiny-async-pool@1.3.0: resolution: {integrity: sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==} @@ -12167,22 +10537,20 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tiny-lru@11.4.7: - resolution: {integrity: sha512-w/Te7uMUVeH0CR8vZIjr+XiN41V+30lkDdK+NRIDCUYKKuL9VcmaUEmaPISuwGhLlrTGh5yu18lENtR9axSxYw==} - engines: {node: '>=12'} + tiny-lru@13.0.0: + resolution: {integrity: sha512-xDHxKKS1FdF0Tv2P+QT7IeSEg74K/8cEDzbv3Tv6UyHHUgBOjOiQiBp818MGj66dhurQus/IBcoAbwIKtSGc6Q==} + engines: {node: '>=14'} - tiny-worker@2.3.0: - resolution: {integrity: sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g==} - - tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinybench@6.1.4: + resolution: {integrity: sha512-9APumHG7r4yOk4X4WlkmE71aZcv1gvin1czO3OQ1U9iJcFA5Ja/ygyb0vPOVHTthFozUYs8CLoLUlM8grb2lTQ==} + engines: {node: '>=20.0.0'} tinyclip@0.1.15: resolution: {integrity: sha512-uo33abH+Ays0xYaDysoBt494Hb3hsEczMpcC0MwFl773pazORx4fmvKhclhR1wonUbB6vvpRsvVMwnhfqeMc+A==} engines: {node: ^16.14.0 || >= 17.3.0} - tinyexec@1.0.2: - resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + tinyexec@1.3.0: + resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==} engines: {node: '>=18'} tinyexec@1.3.1: @@ -12193,6 +10561,10 @@ packages: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} + tinypool@2.2.0: + resolution: {integrity: sha512-jBrmx4lYmaC9k/mgPbylxs7kBUxHtD8256up+HjLaDFfXScKJQyil+SWXSvhAtT7XHo+yTVlpB81PGmHP8oLSQ==} + engines: {node: ^20.0.0 || >=22.0.0} + tinyrainbow@3.1.1: resolution: {integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==} engines: {node: '>=14.0.0'} @@ -12201,18 +10573,11 @@ packages: resolution: {integrity: sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==} hasBin: true - tldts-core@7.0.23: - resolution: {integrity: sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==} + tldts-core@7.4.13: + resolution: {integrity: sha512-mbYsrih5FRtGxs3Usvl/PqwJsNpp+jsmrdFviiK02teHDG0/HebBG/pqCylje3kzgXYzuLoHJF/0mz9W53t8Xg==} - tldts-core@7.4.11: - resolution: {integrity: sha512-CW3WN2rIIE/Of21mulhgnGOwoDyEFNygyIBOONSdyAuSATgMMUCpLeUlB+E8sAwA5xRV9hYPl+kyZ9citHCaKg==} - - tldts@7.0.23: - resolution: {integrity: sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==} - hasBin: true - - tldts@7.4.11: - resolution: {integrity: sha512-aBiNayCfTQxuIJBm06M+xR14cYaYlDlSXZbgsnKzKNxDKUVq7KFwTjwBSsb7m9Y5xO8WfPnBc63WaYFMTGlvqw==} + tldts@7.4.13: + resolution: {integrity: sha512-iHtaIWWIbMDkCeJdTBzZFGgbluE5J+oHlb2g7+oAz1S1gpuVpabRZdQyd471Vl8UUkcz2vXSL8xZH2kyCe8tfA==} hasBin: true tmp-promise@3.0.3: @@ -12230,14 +10595,6 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} - - tough-cookie@6.0.0: - resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} - engines: {node: '>=16'} - tough-cookie@6.0.2: resolution: {integrity: sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==} engines: {node: '>=16'} @@ -12251,12 +10608,6 @@ packages: engines: {node: '>=20.0.0'} hasBin: true - tree-dump@1.1.0: - resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' - trigram-utils@2.0.1: resolution: {integrity: sha512-nfWIXHEaB+HdyslAfMxSqWKDdmqY9I32jS7GnqpdWQnLH89r6A5sdk3fDVYqGAZ0CrT8ovAFSAo6HRiWcWNIGQ==} @@ -12278,9 +10629,6 @@ packages: peerDependencies: typescript: '>=4.8.4' - ts-debounce@4.0.0: - resolution: {integrity: sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==} - ts-morph@28.0.0: resolution: {integrity: sha512-Wp3tnZ2bzwxyTZMtgWVzXDfm7lB1Drz+y9DmmYH/L702PQhPyVrp3pkou3yIz4qjS14GY9kcpmLiOOMvl8oG1g==} @@ -12290,8 +10638,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.21.0: - resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + tsx@4.23.13: + resolution: {integrity: sha512-BL5MGkRln6aDYhb0xbQlEAGw743BaZYWdbWtdJOBriYJboKgUUYCadFp2/FpBBZquBC/ezNBn7wMMPx7FDZUDw==} engines: {node: '>=18.0.0'} hasBin: true @@ -12314,18 +10662,10 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} - - type-fest@5.4.4: - resolution: {integrity: sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==} + type-fest@5.9.0: + resolution: {integrity: sha512-yANm3Jr3GiJ1qgJlxGAVxTOIcEOk1rhQHamlXtnrCK7EHP4HeM9OGxtMg/W7HFdrVzw/ZWJKGVIJusVH85sLtw==} engines: {node: '>=20'} - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - typed-css-modules@0.9.1: resolution: {integrity: sha512-W2HWKncdKd+bLWsnuWB2EyuQBzZ7KJ9Byr/67KLiiyGegcN52rOveun9JR8yAvuL5IXunRMxt0eORMtAUj5bmA==} engines: {node: '>=18.0.0'} @@ -12352,20 +10692,16 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true - typescript@6.0.2: - resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==} - engines: {node: '>=14.17'} + typescript@7.0.2: + resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} + engines: {node: '>=16.20.0'} hasBin: true - typical@7.3.0: - resolution: {integrity: sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==} - engines: {node: '>=12.17'} - ufo@1.6.4: resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} @@ -12373,34 +10709,31 @@ packages: resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} engines: {node: '>=18'} - uint8arrays@3.0.0: - resolution: {integrity: sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==} - ultrahtml@1.7.0: resolution: {integrity: sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==} - unbash@2.2.0: - resolution: {integrity: sha512-X2wH19RAPZE3+ldGicOkoj/SIA83OIxcJ6Cuaw23hf8Xc6fQpvZXY0SftE2JgS0QhYLUG4uwodSI3R53keyh7w==} + unbash@4.0.11: + resolution: {integrity: sha512-FoSOKV7NEofQSkAefMVHam4ZPKYMxjAydxiV72UFEDNV/YofxjGfiZ2A9pZjdL/lRJzTjcu4PABo1JYJX8N5iQ==} engines: {node: '>=14'} uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} undici-types@7.18.2: resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} - undici@6.28.0: - resolution: {integrity: sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==} + undici-types@8.9.0: + resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==} + + undici@6.28.1: + resolution: {integrity: sha512-zWpdTVD54H48CIybL0rWQ3ukpb9d23wM7eH5RtfdmeP70cWHNjtfo7P4vZX+5CoDcO53J4Pu5uXp7lNfjc6DRA==} engines: {node: '>=18.17'} - undici@7.29.0: - resolution: {integrity: sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==} + undici@7.29.1: + resolution: {integrity: sha512-RYONW2MeafgYlkVOKYKkA/Ag7BmXqgIWCa8t1m0JcxrQg9pI9lEqRhAOruOBCbAohOa/gkCF+iPi9hrgvTzu6Q==} engines: {node: '>=20.18.1'} undici@8.10.2: @@ -12482,10 +10815,6 @@ packages: resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} engines: {node: '>=0.10.0'} - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - unstorage@1.17.5: resolution: {integrity: sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==} peerDependencies: @@ -12554,14 +10883,14 @@ packages: unzipper@0.12.5: resolution: {integrity: sha512-tXYOi9R57Uj/2Z25SOs5RRSzq886MBQj2gY8dPL+xl/kv6s6SvByoKfAtvfVeEuhntWDgjd2o9p2lb4TVPAz0A==} - update-browserslist-db@1.2.3: - resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + update-browserslist-db@1.3.3: + resolution: {integrity: sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' - update-electron-app@3.1.2: - resolution: {integrity: sha512-htLyPJv7mEoCpaSzCg0W3Hxz7ID0GC7BIhhpK32/ITG7McrWak4aOkLEOjJheKAI94AxtBVTjCk4EFIvyttw2w==} + update-electron-app@3.3.0: + resolution: {integrity: sha512-5s73OcyNhAvogjxzAy8pbephY+bP6aXpXFv68OT1dNiEbcUpIUCv/ZZPalqGclnXUgx3oyn+yVdAIIVUpn/C1g==} upng-js@2.1.0: resolution: {integrity: sha512-d3xzZzpMP64YkjP5pr8gNyvBt7dLk/uGI67EctzDuVp4lCZyVMo0aJO6l/VDlgbInJYDY6cnClLoBp29eKWI6g==} @@ -12576,8 +10905,8 @@ packages: urlpattern-polyfill@10.1.0: resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} - use-sync-external-store@1.6.0: - resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + use-sync-external-store@1.7.0: + resolution: {integrity: sha512-6L+EeigHMQhdaIPNIFUKwfWJSwWFQ8gJbJ2DLOs5sDIegTwR9fRxvnM3uciHKjIZhFz+KAv2emhWMRvDmMcY8A==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -12593,33 +10922,21 @@ packages: 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@11.1.1: - resolution: {integrity: sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==} - hasBin: true - - valibot@1.4.2: - resolution: {integrity: sha512-gjdCvJ6d3RyHAneqxMYMW9QMCwYMb3jpOO0IyHZV1bnRHFBHrX3VkIILt5XYR0WhwHiH7Mty8ovuPZ/O3gamrg==} + valibot@1.5.0: + resolution: {integrity: sha512-nil6AkP2TChWL43Z5uJ6GTxX01CUA+g8LWUM+N/rB9NBbkUMaUsi9PUNzlUPgoKASgmx9f7eGOYpJ04/fSa6FQ==} peerDependencies: typescript: '>=5' peerDependenciesMeta: typescript: optional: true - validator@13.15.26: - resolution: {integrity: sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA==} + validator@13.15.35: + resolution: {integrity: sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==} engines: {node: '>= 0.10'} - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - velopack@0.0.1298: - resolution: {integrity: sha512-rG1pdRLpl5B/FeV2NS9Ewp4qpo3TzxN0rmwp5e284Ee/hhDITUn15eNeoCUp2hUi8DSf6JEMpbx2I3vuRitafg==} - engines: {node: '>=18.0.0 <=22.16.0'} + velopack@1.2.0: + resolution: {integrity: sha512-rWX8G9h5gv2AgrjiADhvyrrv7LpCCcFeepw+jBx80/jm1FIXW7BgmSEQtJVXt3jqC2YnCKiBD6E1i/DBWnpIyw==} + engines: {node: '>=20.0.0 <26.0.0'} vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} @@ -12630,53 +10947,13 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@7.3.6: - resolution: {integrity: sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==} + vite@8.3.0: + resolution: {integrity: sha512-lhZBVvEHefgE+HQZC9O7EBJgCU/nVzFNl7vkS4RE0APtWLP02/8QVIkQtzBxPquh7lq5/78NHipTj7ODQ6XuyQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - - vite@8.2.2: - resolution: {integrity: sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.4.0 || ^0.5.0 + '@vitejs/devtools': ^0.7.1 esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 @@ -12721,23 +10998,23 @@ packages: vite: optional: true - vitest@4.1.11: - resolution: {integrity: sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + vitest@5.0.1: + resolution: {integrity: sha512-iA95lQbKEkvrtTkdAgnWbXfbipWiiWe/hDl2P5tMi6WFwD76G0NxXAGp/M9EOcYupeGJRr6wppMc7CoA41TQjg==} + engines: {node: ^22.12.0 || ^24.0.0 || >=26.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.11 - '@vitest/browser-preview': 4.1.11 - '@vitest/browser-webdriverio': 4.1.11 - '@vitest/coverage-istanbul': 4.1.11 - '@vitest/coverage-v8': 4.1.11 - '@vitest/ui': 4.1.11 + '@types/node': ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 5.0.1 + '@vitest/browser-preview': 5.0.1 + '@vitest/browser-webdriverio': ^5.0.0-beta.5 || >=5.0.0 + '@vitest/coverage-istanbul': 5.0.1 + '@vitest/coverage-v8': 5.0.1 + '@vitest/ui': 5.0.1 happy-dom: '*' jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + vite: ^6.4.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -12801,17 +11078,23 @@ packages: resolution: {integrity: sha512-9K2k72s4n7rV9s4bX0MyjbX9iBribvKZbBJKuEmTCZfeWJXs6Yh7bGpY4eoc7UufAjvpheBqwyZCOIPBvxCv0A==} peerDependencies: '@volar/language-service': ~2.4.0 + typescript: '*' peerDependenciesMeta: '@volar/language-service': optional: true + typescript: + optional: true volar-service-typescript@0.0.71: resolution: {integrity: sha512-yTtM/BVT6hoyEYnDtaCyAtNhdNeS/mhTTABlBOdw3NNiRBUin3IznFJpgfjer4c6RYopiPjjQjc9VFhxVl1mLw==} peerDependencies: '@volar/language-service': ~2.4.0 + typescript: '*' peerDependenciesMeta: '@volar/language-service': optional: true + typescript: + optional: true volar-service-yaml@0.0.71: resolution: {integrity: sha512-qYGWGuVpUTnZGu5P/CR4KLK4aIR8RrcVnmfZ2eRcj9q/I8VZCoC5yy9FtEvfNvnDp4MU17yhdJcvpQPIqhJS2Q==} @@ -12867,81 +11150,24 @@ packages: w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} - w3c-xmlserializer@5.0.0: - resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} - engines: {node: '>=18'} - walk-up-path@4.0.0: resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==} engines: {node: 20 || >=22} - wbuf@1.7.3: - resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} - - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} webcrypto-core@1.9.2: resolution: {integrity: sha512-gsXecm82UQNlTBURJGuqOWy1Ww08S3kZUcr3aOJS02Pk0xLtkfeUAVC0u0xhgdonFme80edSJUIJyuvL/7250Q==} - webidl-conversions@8.0.1: - resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} - engines: {node: '>=20'} - - webpack-bundle-analyzer@4.10.2: - resolution: {integrity: sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==} - engines: {node: '>= 10.13.0'} - hasBin: true - - webpack-dev-middleware@7.4.5: - resolution: {integrity: sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==} - engines: {node: '>= 18.12.0'} - peerDependencies: - webpack: ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true - - webpack-dev-server@5.2.6: - resolution: {integrity: sha512-HNLRmamRvVavZQ+avceZifmv8hmdUjg43t6MI4SqJDwFdW7RPQwH5vzGhDRZSX59SgfbeHhLnq3g+uooWo7pVw==} - engines: {node: '>= 18.12.0'} - hasBin: true - peerDependencies: - webpack: ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true - - webrtc-adapter@9.0.4: - resolution: {integrity: sha512-5ZZY1+lGq8LEKuDlg9M2RPJHlH3R7OVwyHqMcUsLKCgd9Wvf+QrFTCItkXXYPmrJn8H6gRLXbSgxLLdexiqHxw==} + webrtc-adapter@9.0.6: + resolution: {integrity: sha512-CHbl2ZQbxx164IgWRgzJno4hWtM4tFbRam1QfI3Yxhs3w/DvqluVxVWeXs3oL5/fbGkSNLKo0Ty5MgUWceNhog==} engines: {node: '>=6.0.0', npm: '>=3.10.0'} - websocket-driver@0.7.5: - resolution: {integrity: sha512-ZL2+3c7kMBdIRCMz6l8jQMHyGVxj+UL+xVk74Ombiciboca8rHa15L86B19E5oh1pL9Ii/uj54gtsIrZGMo6zA==} - engines: {node: '>=0.8.0'} - - websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} - whatwg-mimetype@5.0.0: - resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} - engines: {node: '>=20'} - - whatwg-url@16.0.1: - resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} @@ -12969,10 +11195,6 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wordwrapjs@5.1.1: - resolution: {integrity: sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg==} - engines: {node: '>=12.17'} - wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -12981,25 +11203,13 @@ packages: 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.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@7.5.13: - resolution: {integrity: sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA==} - 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 - ws@8.21.3: resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==} engines: {node: '>=10.0.0'} @@ -13012,14 +11222,6 @@ packages: utf-8-validate: optional: true - wsl-utils@0.1.0: - resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} - engines: {node: '>=18'} - - xml-name-validator@5.0.0: - resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} - engines: {node: '>=18'} - xml-naming@0.3.0: resolution: {integrity: sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ==} engines: {node: '>=16.0.0'} @@ -13028,11 +11230,8 @@ packages: resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} engines: {node: '>=8.0'} - xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - - xstate@5.31.1: - resolution: {integrity: sha512-3P7t7GQ61BvLu+8Cj6Zq7rcS34vecL9pvfN2ucUWmIFIUG+rAREviOs4Xy4OO3BuJHSz6RLU8eqDXxSbVotjDQ==} + xstate@5.33.2: + resolution: {integrity: sha512-8tC7yXgeCvpT8gKEeEje6ikJJG1wpnoLiXe+HfECW8m10ubMd3QxKOwWA8KxPJVBcLwfdRoMKYxIBGYKmo37/A==} xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} @@ -13065,17 +11264,13 @@ packages: resolution: {integrity: sha512-3qVyCOexLCWw06PQa5kRPwvMWMZ/eZeCRWUvgD6a0OkqL/4iCnxy2WumbWifa937Uo5xhyWJ0uxlU39ljhNh7A==} hasBin: true - yaml@1.10.3: - resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} - engines: {node: '>= 6'} - yaml@2.8.3: resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} engines: {node: '>= 14.6'} hasBin: true - yaml@2.9.0: - resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + yaml@2.9.1: + resolution: {integrity: sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==} engines: {node: '>= 14.6'} hasBin: true @@ -13095,10 +11290,14 @@ packages: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + yargs@17.7.3: + resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} engines: {node: '>=12'} + yargs@18.1.0: + resolution: {integrity: sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yjs@13.6.32: resolution: {integrity: sha512-lfiJIIC4Xayt5ItynE407ehlE03pCjeOc4hkR4yxxvvNJ4kuiN25B0g+Qp8XagYz361LLL7DCzR5bvFJ81QKtQ==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} @@ -13111,328 +11310,305 @@ packages: resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} - yoctocolors-cjs@2.1.3: - resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + yoctocolors@2.2.0: + resolution: {integrity: sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==} engines: {node: '>=18'} - zip-stream@6.0.1: - resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} - engines: {node: '>= 14'} + zip-stream@7.0.5: + resolution: {integrity: sha512-dSvYKdvLsAHCDqPOhIwk/q5CvuWtTB3Dgpoe0uVEFjTzIOAmsQpprX25InCvrvJsirEbu1OHyy67n/kAj1Sw/w==} + engines: {node: '>=18'} zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zod@4.3.6: - resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + zod@4.6.5: + resolution: {integrity: sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: - '@acemir/cssom@0.9.31': - optional: true + '@arborium/ada@2.18.2': {} - '@arborium/ada@2.16.0': {} + '@arborium/agda@2.18.2': {} - '@arborium/agda@2.16.0': {} + '@arborium/arborium@2.18.2': {} - '@arborium/arborium@2.16.0': {} + '@arborium/asciidoc@2.18.2': {} - '@arborium/asciidoc@2.16.0': {} + '@arborium/asm@2.18.2': {} - '@arborium/asm@2.16.0': {} + '@arborium/awk@2.18.2': {} - '@arborium/awk@2.16.0': {} + '@arborium/bash@2.18.2': {} - '@arborium/bash@2.16.0': {} + '@arborium/batch@2.18.2': {} - '@arborium/batch@2.16.0': {} + '@arborium/c-sharp@2.18.2': {} - '@arborium/c-sharp@2.16.0': {} + '@arborium/c@2.18.2': {} - '@arborium/c@2.16.0': {} + '@arborium/caddy@2.18.2': {} - '@arborium/caddy@2.16.0': {} + '@arborium/capnp@2.18.2': {} - '@arborium/capnp@2.16.0': {} + '@arborium/cedar@2.18.2': {} - '@arborium/cedar@2.16.0': {} + '@arborium/cedarschema@2.18.2': {} - '@arborium/cedarschema@2.16.0': {} + '@arborium/clojure@2.18.2': {} - '@arborium/clojure@2.16.0': {} + '@arborium/cmake@2.18.2': {} - '@arborium/cmake@2.16.0': {} + '@arborium/cobol@2.18.2': {} - '@arborium/cobol@2.16.0': {} + '@arborium/commonlisp@2.18.2': {} - '@arborium/commonlisp@2.16.0': {} + '@arborium/cpp@2.18.2': {} - '@arborium/cpp@2.16.0': {} + '@arborium/css@2.18.2': {} - '@arborium/css@2.16.0': {} + '@arborium/d@2.18.2': {} - '@arborium/d@2.16.0': {} + '@arborium/dart@2.18.2': {} - '@arborium/dart@2.16.0': {} + '@arborium/devicetree@2.18.2': {} - '@arborium/devicetree@2.16.0': {} + '@arborium/diff@2.18.2': {} - '@arborium/diff@2.16.0': {} + '@arborium/dockerfile@2.18.2': {} - '@arborium/dockerfile@2.16.0': {} + '@arborium/dot@2.18.2': {} - '@arborium/dot@2.16.0': {} + '@arborium/elisp@2.18.2': {} - '@arborium/elisp@2.16.0': {} + '@arborium/elixir@2.18.2': {} - '@arborium/elixir@2.16.0': {} + '@arborium/elm@2.18.2': {} - '@arborium/elm@2.16.0': {} + '@arborium/erlang@2.18.2': {} - '@arborium/erlang@2.16.0': {} + '@arborium/fish@2.18.2': {} - '@arborium/fish@2.16.0': {} + '@arborium/fsharp@2.18.2': {} - '@arborium/fsharp@2.16.0': {} + '@arborium/gleam@2.18.2': {} - '@arborium/gleam@2.16.0': {} + '@arborium/glsl@2.18.2': {} - '@arborium/glsl@2.16.0': {} + '@arborium/go@2.18.2': {} - '@arborium/go@2.16.0': {} + '@arborium/graphql@2.18.2': {} - '@arborium/graphql@2.16.0': {} + '@arborium/groovy@2.18.2': {} - '@arborium/groovy@2.16.0': {} + '@arborium/haskell@2.18.2': {} - '@arborium/haskell@2.16.0': {} + '@arborium/hcl@2.18.2': {} - '@arborium/hcl@2.16.0': {} + '@arborium/hlsl@2.18.2': {} - '@arborium/hlsl@2.16.0': {} + '@arborium/html@2.18.2': {} - '@arborium/html@2.16.0': {} + '@arborium/idris@2.18.2': {} - '@arborium/idris@2.16.0': {} + '@arborium/ini@2.18.2': {} - '@arborium/ini@2.16.0': {} + '@arborium/java@2.18.2': {} - '@arborium/java@2.16.0': {} + '@arborium/javascript@2.18.2': {} - '@arborium/javascript@2.16.0': {} + '@arborium/jinja2@2.18.2': {} - '@arborium/jinja2@2.16.0': {} + '@arborium/jq@2.18.2': {} - '@arborium/jq@2.16.0': {} + '@arborium/json@2.18.2': {} - '@arborium/json@2.16.0': {} + '@arborium/julia@2.18.2': {} - '@arborium/julia@2.16.0': {} + '@arborium/kotlin@2.18.2': {} - '@arborium/kotlin@2.16.0': {} + '@arborium/lean@2.18.2': {} - '@arborium/lean@2.16.0': {} + '@arborium/lua@2.18.2': {} - '@arborium/lua@2.16.0': {} + '@arborium/markdown@2.18.2': {} - '@arborium/markdown@2.16.0': {} + '@arborium/matlab@2.18.2': {} - '@arborium/matlab@2.16.0': {} + '@arborium/meson@2.18.2': {} - '@arborium/meson@2.16.0': {} + '@arborium/nginx@2.18.2': {} - '@arborium/nginx@2.16.0': {} + '@arborium/ninja@2.18.2': {} - '@arborium/ninja@2.16.0': {} + '@arborium/nix@2.18.2': {} - '@arborium/nix@2.16.0': {} + '@arborium/objc@2.18.2': {} - '@arborium/objc@2.16.0': {} + '@arborium/ocaml@2.18.2': {} - '@arborium/ocaml@2.16.0': {} + '@arborium/perl@2.18.2': {} - '@arborium/perl@2.16.0': {} + '@arborium/php@2.18.2': {} - '@arborium/php@2.16.0': {} + '@arborium/postscript@2.18.2': {} - '@arborium/postscript@2.16.0': {} + '@arborium/powershell@2.18.2': {} - '@arborium/powershell@2.16.0': {} + '@arborium/prolog@2.18.2': {} - '@arborium/prolog@2.16.0': {} + '@arborium/python@2.18.2': {} - '@arborium/python@2.16.0': {} + '@arborium/query@2.18.2': {} - '@arborium/query@2.16.0': {} + '@arborium/r@2.18.2': {} - '@arborium/r@2.16.0': {} + '@arborium/rego@2.18.2': {} - '@arborium/rego@2.16.0': {} + '@arborium/rescript@2.18.2': {} - '@arborium/rescript@2.16.0': {} + '@arborium/ron@2.18.2': {} - '@arborium/ron@2.16.0': {} + '@arborium/ruby@2.18.2': {} - '@arborium/ruby@2.16.0': {} + '@arborium/rust@2.18.2': {} - '@arborium/rust@2.16.0': {} + '@arborium/scala@2.18.2': {} - '@arborium/scala@2.16.0': {} + '@arborium/scheme@2.18.2': {} - '@arborium/scheme@2.16.0': {} + '@arborium/scss@2.18.2': {} - '@arborium/scss@2.16.0': {} + '@arborium/solidity@2.18.2': {} - '@arborium/solidity@2.16.0': {} + '@arborium/sparql@2.18.2': {} - '@arborium/sparql@2.16.0': {} + '@arborium/sql@2.18.2': {} - '@arborium/sql@2.16.0': {} + '@arborium/ssh-config@2.18.2': {} - '@arborium/ssh-config@2.16.0': {} + '@arborium/starlark@2.18.2': {} - '@arborium/starlark@2.16.0': {} + '@arborium/styx@2.18.2': {} - '@arborium/styx@2.16.0': {} + '@arborium/svelte@2.18.2': {} - '@arborium/svelte@2.16.0': {} + '@arborium/swift@2.18.2': {} - '@arborium/swift@2.16.0': {} + '@arborium/textproto@2.18.2': {} - '@arborium/textproto@2.16.0': {} + '@arborium/thrift@2.18.2': {} - '@arborium/thrift@2.16.0': {} + '@arborium/tlaplus@2.18.2': {} - '@arborium/tlaplus@2.16.0': {} + '@arborium/toml@2.18.2': {} - '@arborium/toml@2.16.0': {} + '@arborium/tsx@2.18.2': {} - '@arborium/tsx@2.16.0': {} + '@arborium/typescript@2.18.2': {} - '@arborium/typescript@2.16.0': {} + '@arborium/typst@2.18.2': {} - '@arborium/typst@2.16.0': {} + '@arborium/uiua@2.18.2': {} - '@arborium/uiua@2.16.0': {} + '@arborium/vb@2.18.2': {} - '@arborium/vb@2.16.0': {} + '@arborium/verilog@2.18.2': {} - '@arborium/verilog@2.16.0': {} + '@arborium/vhdl@2.18.2': {} - '@arborium/vhdl@2.16.0': {} + '@arborium/vim@2.18.2': {} - '@arborium/vim@2.16.0': {} + '@arborium/vue@2.18.2': {} - '@arborium/vue@2.16.0': {} + '@arborium/wit@2.18.2': {} - '@arborium/wit@2.16.0': {} + '@arborium/x86asm@2.18.2': {} - '@arborium/x86asm@2.16.0': {} + '@arborium/xml@2.18.2': {} - '@arborium/xml@2.16.0': {} + '@arborium/yaml@2.18.2': {} - '@arborium/yaml@2.16.0': {} + '@arborium/yuri@2.18.2': {} - '@arborium/yuri@2.16.0': {} + '@arborium/zig@2.18.2': {} - '@arborium/zig@2.16.0': {} + '@arborium/zsh@2.18.2': {} - '@arborium/zsh@2.16.0': {} - - '@asamuzakjp/css-color@5.1.11': + '@astrojs/check@0.9.10(prettier@3.9.7)(typescript@6.0.3)': dependencies: - '@asamuzakjp/generational-cache': 1.0.1 - '@csstools/css-calc': 3.3.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-color-parser': 4.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - optional: true - - '@asamuzakjp/dom-selector@6.8.1': - dependencies: - '@asamuzakjp/nwsapi': 2.3.9 - bidi-js: 1.0.3 - css-tree: 3.2.1 - is-potential-custom-element-name: 1.0.1 - lru-cache: 11.5.2 - optional: true - - '@asamuzakjp/generational-cache@1.0.1': - optional: true - - '@asamuzakjp/nwsapi@2.3.9': - optional: true - - '@astrojs/check@0.9.9(prettier@3.8.3)(typescript@6.0.2)': - dependencies: - '@astrojs/language-server': 2.16.16(prettier@3.8.3)(typescript@6.0.2) + '@astrojs/language-server': 2.16.16(prettier@3.9.7)(typescript@6.0.3) chokidar: 5.0.0 kleur: 4.1.5 - typescript: 6.0.2 - yargs: 17.7.2 + typescript: 6.0.3 + yargs: 18.1.0 transitivePeerDependencies: - prettier - prettier-plugin-astro - '@astrojs/compiler-binding-darwin-arm64@0.3.2': + '@astrojs/compiler-binding-android-arm64@0.4.1': optional: true - '@astrojs/compiler-binding-darwin-x64@0.3.2': + '@astrojs/compiler-binding-darwin-arm64@0.4.1': optional: true - '@astrojs/compiler-binding-linux-arm64-gnu@0.3.2': + '@astrojs/compiler-binding-darwin-x64@0.4.1': optional: true - '@astrojs/compiler-binding-linux-arm64-musl@0.3.2': + '@astrojs/compiler-binding-linux-arm64-gnu@0.4.1': optional: true - '@astrojs/compiler-binding-linux-x64-gnu@0.3.2': + '@astrojs/compiler-binding-linux-arm64-musl@0.4.1': optional: true - '@astrojs/compiler-binding-linux-x64-musl@0.3.2': + '@astrojs/compiler-binding-linux-x64-gnu@0.4.1': optional: true - '@astrojs/compiler-binding-wasm32-wasi@0.3.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)': + '@astrojs/compiler-binding-linux-x64-musl@0.4.1': + optional: true + + '@astrojs/compiler-binding-wasm32-wasi@0.4.1(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)': dependencies: - '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3) + '@napi-rs/wasm-runtime': 1.2.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' optional: true - '@astrojs/compiler-binding-win32-arm64-msvc@0.3.2': + '@astrojs/compiler-binding-win32-arm64-msvc@0.4.1': optional: true - '@astrojs/compiler-binding-win32-x64-msvc@0.3.2': + '@astrojs/compiler-binding-win32-x64-msvc@0.4.1': optional: true - '@astrojs/compiler-binding@0.3.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)': + '@astrojs/compiler-binding@0.4.1(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)': optionalDependencies: - '@astrojs/compiler-binding-darwin-arm64': 0.3.2 - '@astrojs/compiler-binding-darwin-x64': 0.3.2 - '@astrojs/compiler-binding-linux-arm64-gnu': 0.3.2 - '@astrojs/compiler-binding-linux-arm64-musl': 0.3.2 - '@astrojs/compiler-binding-linux-x64-gnu': 0.3.2 - '@astrojs/compiler-binding-linux-x64-musl': 0.3.2 - '@astrojs/compiler-binding-wasm32-wasi': 0.3.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3) - '@astrojs/compiler-binding-win32-arm64-msvc': 0.3.2 - '@astrojs/compiler-binding-win32-x64-msvc': 0.3.2 + '@astrojs/compiler-binding-android-arm64': 0.4.1 + '@astrojs/compiler-binding-darwin-arm64': 0.4.1 + '@astrojs/compiler-binding-darwin-x64': 0.4.1 + '@astrojs/compiler-binding-linux-arm64-gnu': 0.4.1 + '@astrojs/compiler-binding-linux-arm64-musl': 0.4.1 + '@astrojs/compiler-binding-linux-x64-gnu': 0.4.1 + '@astrojs/compiler-binding-linux-x64-musl': 0.4.1 + '@astrojs/compiler-binding-wasm32-wasi': 0.4.1(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) + '@astrojs/compiler-binding-win32-arm64-msvc': 0.4.1 + '@astrojs/compiler-binding-win32-x64-msvc': 0.4.1 transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' - '@astrojs/compiler-rs@0.3.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)': + '@astrojs/compiler-rs@0.4.1(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)': dependencies: - '@astrojs/compiler-binding': 0.3.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3) + '@astrojs/compiler-binding': 0.4.1(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' '@astrojs/compiler@2.13.1': {} - '@astrojs/internal-helpers@0.10.1': + '@astrojs/internal-helpers@0.11.0': dependencies: '@types/hast': 3.0.5 '@types/mdast': 4.0.4 @@ -13443,56 +11619,50 @@ snapshots: smol-toml: 1.8.0 unified: 11.0.5 - '@astrojs/internal-helpers@0.10.4': - dependencies: - '@types/hast': 3.0.5 - '@types/mdast': 4.0.4 - js-yaml: 4.3.2 - picomatch: 4.0.7 - retext-smartypants: 6.2.0 - shiki: 4.4.3 - smol-toml: 1.8.0 - unified: 11.0.5 - - '@astrojs/language-server@2.16.16(prettier@3.8.3)(typescript@6.0.2)': + '@astrojs/language-server@2.16.16(prettier@3.9.7)(typescript@6.0.3)': dependencies: '@astrojs/compiler': 2.13.1 '@astrojs/yaml2ts': 0.2.4 - '@jridgewell/sourcemap-codec': 1.5.5 - '@volar/kit': 2.4.28(typescript@6.0.2) + '@jridgewell/sourcemap-codec': 1.6.0 + '@volar/kit': 2.4.28(typescript@6.0.3) '@volar/language-core': 2.4.28 - '@volar/language-server': 2.4.28 - '@volar/language-service': 2.4.28 + '@volar/language-server': 2.4.28(typescript@6.0.3) + '@volar/language-service': 2.4.28(typescript@6.0.3) muggle-string: 0.4.1 tinyglobby: 0.2.17 - volar-service-css: 0.0.71(@volar/language-service@2.4.28) - volar-service-emmet: 0.0.71(@volar/language-service@2.4.28) - volar-service-html: 0.0.71(@volar/language-service@2.4.28) - volar-service-prettier: 0.0.71(@volar/language-service@2.4.28)(prettier@3.8.3) - volar-service-typescript: 0.0.71(@volar/language-service@2.4.28) - volar-service-typescript-twoslash-queries: 0.0.71(@volar/language-service@2.4.28) - volar-service-yaml: 0.0.71(@volar/language-service@2.4.28) + volar-service-css: 0.0.71(@volar/language-service@2.4.28(typescript@6.0.3)) + volar-service-emmet: 0.0.71(@volar/language-service@2.4.28(typescript@6.0.3)) + volar-service-html: 0.0.71(@volar/language-service@2.4.28(typescript@6.0.3)) + volar-service-prettier: 0.0.71(@volar/language-service@2.4.28(typescript@6.0.3))(prettier@3.9.7) + volar-service-typescript: 0.0.71(@volar/language-service@2.4.28(typescript@6.0.3))(typescript@6.0.3) + volar-service-typescript-twoslash-queries: 0.0.71(@volar/language-service@2.4.28(typescript@6.0.3))(typescript@6.0.3) + volar-service-yaml: 0.0.71(@volar/language-service@2.4.28(typescript@6.0.3)) vscode-html-languageservice: 5.6.2 vscode-uri: 3.2.0 optionalDependencies: - prettier: 3.8.3 + prettier: 3.9.7 transitivePeerDependencies: - typescript - '@astrojs/markdown-remark@7.2.1': + '@astrojs/markdown-remark@7.3.1(supports-color@7.2.0)': dependencies: - '@astrojs/internal-helpers': 0.10.1 + '@astrojs/internal-helpers': 0.11.0 '@astrojs/prism': 4.0.2 + '@mdx-js/mdx': 3.1.1(supports-color@7.2.0) + acorn: 8.18.0 + estree-util-visit: 2.0.0 github-slugger: 2.0.0 hast-util-from-html: 2.0.3 + hast-util-to-html: 9.0.5 hast-util-to-text: 4.0.2 mdast-util-definitions: 6.0.0 rehype-raw: 7.0.0 rehype-stringify: 10.0.1 - remark-gfm: 4.0.1 - remark-parse: 11.0.0 + remark-gfm: 4.0.1(supports-color@7.2.0) + remark-parse: 11.0.0(supports-color@7.2.0) remark-rehype: 11.1.2 remark-smartypants: 3.0.3 + source-map: 0.7.6 unified: 11.0.5 unist-util-remove-position: 5.0.0 unist-util-visit: 5.1.0 @@ -13501,48 +11671,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/markdown-satteri@0.3.4': + '@astrojs/markdown-satteri@0.4.1': dependencies: - '@astrojs/internal-helpers': 0.10.1 - '@astrojs/prism': 4.0.2 - github-slugger: 2.0.0 - hast-util-from-html: 2.0.3 - satteri: 0.9.5 - - '@astrojs/markdown-satteri@0.3.8': - dependencies: - '@astrojs/internal-helpers': 0.10.4 + '@astrojs/internal-helpers': 0.11.0 '@astrojs/prism': 4.0.2 github-slugger: 2.0.0 satteri: 0.10.5 - '@astrojs/mdx@7.0.3(@astrojs/markdown-satteri@0.3.8)(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.3.0)(ioredis@5.9.3)(jiti@2.7.0)(rollup@4.63.1)(tsx@4.21.0)(yaml@2.9.0))': + '@astrojs/mdx@8.0.1(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@astrojs/markdown-satteri@0.4.1)(astro@7.3.2(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.1)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1))': dependencies: - '@astrojs/internal-helpers': 0.10.1 - '@astrojs/markdown-remark': 7.2.1 - '@mdx-js/mdx': 3.1.1 - acorn: 8.16.0 - astro: 7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.3.0)(ioredis@5.9.3)(jiti@2.7.0)(rollup@4.63.1)(tsx@4.21.0)(yaml@2.9.0) + '@astrojs/internal-helpers': 0.11.0 + '@astrojs/markdown-satteri': 0.4.1 + astro: 7.3.2(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.1)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1) es-module-lexer: 2.3.2 - estree-util-visit: 2.0.0 - hast-util-to-html: 9.0.5 - piccolore: 0.1.3 - rehype-raw: 7.0.0 - remark-gfm: 4.0.1 - remark-smartypants: 3.0.3 - source-map: 0.7.6 - unist-util-visit: 5.1.0 - vfile: 6.0.3 optionalDependencies: - '@astrojs/markdown-satteri': 0.3.8 - transitivePeerDependencies: - - supports-color + '@astrojs/markdown-remark': 7.3.1(supports-color@7.2.0) - '@astrojs/node@11.0.2(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.3.0)(ioredis@5.9.3)(jiti@2.7.0)(rollup@4.63.1)(tsx@4.21.0)(yaml@2.9.0))': + '@astrojs/node@11.1.5(astro@7.3.2(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.1)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1))(supports-color@7.2.0)': dependencies: - '@astrojs/internal-helpers': 0.10.1 - astro: 7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.3.0)(ioredis@5.9.3)(jiti@2.7.0)(rollup@4.63.1)(tsx@4.21.0)(yaml@2.9.0) - send: 1.2.1 + '@astrojs/internal-helpers': 0.11.0 + astro: 7.3.2(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.1)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1) + send: 1.2.1(supports-color@7.2.0) server-destroy: 1.0.1 transitivePeerDependencies: - supports-color @@ -13554,42 +11703,41 @@ snapshots: '@astrojs/sitemap@3.7.4': dependencies: sitemap: 9.0.1 - zod: 4.3.6 + zod: 4.6.5 - '@astrojs/starlight@0.41.4(@astrojs/markdown-remark@7.2.1)(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.3.0)(ioredis@5.9.3)(jiti@2.7.0)(rollup@4.63.1)(tsx@4.21.0)(yaml@2.9.0))(typescript@6.0.2)': + '@astrojs/starlight@0.42.1(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(astro@7.3.2(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.1)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1))(supports-color@7.2.0)(typescript@6.0.3)': dependencies: - '@astrojs/markdown-satteri': 0.3.8 - '@astrojs/mdx': 7.0.3(@astrojs/markdown-satteri@0.3.8)(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.3.0)(ioredis@5.9.3)(jiti@2.7.0)(rollup@4.63.1)(tsx@4.21.0)(yaml@2.9.0)) + '@astrojs/markdown-satteri': 0.4.1 + '@astrojs/mdx': 8.0.1(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@astrojs/markdown-satteri@0.4.1)(astro@7.3.2(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.1)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) '@astrojs/sitemap': 3.7.4 '@pagefind/default-ui': 1.5.2 '@types/hast': 3.0.5 '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.3.0)(ioredis@5.9.3)(jiti@2.7.0)(rollup@4.63.1)(tsx@4.21.0)(yaml@2.9.0) - astro-expressive-code: 0.44.2(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.3.0)(ioredis@5.9.3)(jiti@2.7.0)(rollup@4.63.1)(tsx@4.21.0)(yaml@2.9.0)) + astro: 7.3.2(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.1)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1) + astro-expressive-code: 0.44.2(astro@7.3.2(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.1)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) bcp-47: 2.1.1 - hast-util-from-html: 2.0.3 + hast-util-format: 1.1.0 hast-util-select: 6.0.4 + hast-util-to-html: 9.0.5 hast-util-to-string: 3.0.1 hastscript: 9.0.1 - i18next: 26.4.2(typescript@6.0.2) + i18next: 26.4.2(typescript@6.0.3) js-yaml: 4.3.2 klona: 2.0.6 - magic-string: 0.30.21 - mdast-util-directive: 3.1.0 + magic-string: 1.4.1 + mdast-util-directive: 3.1.0(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 mdast-util-to-string: 4.0.0 pagefind: 1.5.2 - rehype: 13.0.2 - rehype-format: 5.0.1 - remark-directive: 4.0.0 - satteri: 0.9.5 + remark-directive: 4.0.0(supports-color@7.2.0) + satteri: 0.10.5 ultrahtml: 1.7.0 unified: 11.0.5 unist-util-visit: 5.1.0 vfile: 6.0.3 optionalDependencies: - '@astrojs/markdown-remark': 7.2.1 + '@astrojs/markdown-remark': 7.3.1(supports-color@7.2.0) transitivePeerDependencies: - supports-color - typescript @@ -13603,332 +11751,369 @@ snapshots: '@astrojs/yaml2ts@0.2.4': dependencies: - yaml: 2.9.0 + yaml: 2.9.1 - '@atproto-labs/did-resolver@0.2.2': + '@atproto-labs/did-resolver@0.3.9': dependencies: - '@atproto-labs/fetch': 0.2.3 - '@atproto-labs/pipe': 0.1.1 - '@atproto-labs/simple-store': 0.3.0 - '@atproto-labs/simple-store-memory': 0.1.4 - '@atproto/did': 0.2.1 + '@atproto-labs/fetch': 0.3.6 + '@atproto-labs/pipe': 0.2.4 + '@atproto-labs/simple-store': 0.5.1 + '@atproto-labs/simple-store-memory': 0.2.6 + '@atproto/did': 0.5.5 zod: 3.25.76 - '@atproto-labs/fetch-node@0.1.10': + '@atproto-labs/fetch-node@0.4.0': dependencies: - '@atproto-labs/fetch': 0.2.3 - '@atproto-labs/pipe': 0.1.1 - ipaddr.js: 2.3.0 - undici: 6.28.0 + '@atproto-labs/fetch': 0.3.6 + '@atproto-labs/pipe': 0.2.4 + ipaddr.js: 2.5.0 + undici_v6: undici@6.28.1 + undici_v7: undici@7.29.1 + undici_v8: undici@8.10.2 - '@atproto-labs/fetch@0.2.3': + '@atproto-labs/fetch@0.3.6': dependencies: - '@atproto-labs/pipe': 0.1.1 + '@atproto-labs/pipe': 0.2.4 - '@atproto-labs/handle-resolver-node@0.1.20': + '@atproto-labs/handle-resolver-node@0.2.10': dependencies: - '@atproto-labs/fetch-node': 0.1.10 - '@atproto-labs/handle-resolver': 0.3.2 - '@atproto/did': 0.2.1 + '@atproto-labs/fetch-node': 0.4.0 + '@atproto-labs/handle-resolver': 0.4.9 + '@atproto/did': 0.5.5 - '@atproto-labs/handle-resolver@0.3.2': + '@atproto-labs/handle-resolver@0.4.9': dependencies: - '@atproto-labs/simple-store': 0.3.0 - '@atproto-labs/simple-store-memory': 0.1.4 - '@atproto/did': 0.2.1 + '@atproto-labs/simple-store': 0.5.1 + '@atproto-labs/simple-store-memory': 0.2.6 + '@atproto/did': 0.5.5 zod: 3.25.76 - '@atproto-labs/identity-resolver@0.3.2': + '@atproto-labs/identity-resolver@0.4.9': dependencies: - '@atproto-labs/did-resolver': 0.2.2 - '@atproto-labs/handle-resolver': 0.3.2 + '@atproto-labs/did-resolver': 0.3.9 + '@atproto-labs/handle-resolver': 0.4.9 - '@atproto-labs/pipe@0.1.1': {} + '@atproto-labs/pipe@0.2.4': {} - '@atproto-labs/simple-store-memory@0.1.4': + '@atproto-labs/simple-store-memory@0.2.6': dependencies: - '@atproto-labs/simple-store': 0.3.0 + '@atproto-labs/simple-store': 0.5.1 lru-cache: 10.4.3 - '@atproto-labs/simple-store@0.3.0': {} + '@atproto-labs/simple-store@0.5.1': {} - '@atproto/api@0.19.0': + '@atproto/api@0.20.44': dependencies: - '@atproto/common-web': 0.4.17 - '@atproto/lexicon': 0.6.1 - '@atproto/syntax': 0.4.3 - '@atproto/xrpc': 0.7.7 - await-lock: 2.2.2 - multiformats: 9.9.0 + '@atproto/common-web': 0.5.12 + '@atproto/lexicon': 0.7.14 + '@atproto/syntax': 0.7.6 + '@atproto/xrpc': 0.8.13 + await-lock: 3.0.0 + multiformats: 13.4.2 tlds: 1.261.0 zod: 3.25.76 - '@atproto/common-web@0.4.17': + '@atproto/common-web@0.5.12': dependencies: - '@atproto/lex-data': 0.0.12 - '@atproto/lex-json': 0.0.12 - '@atproto/syntax': 0.4.3 + '@atproto/lex-data': 0.1.7 + '@atproto/lex-json': 0.1.6 + '@atproto/syntax': 0.7.6 zod: 3.25.76 - '@atproto/did@0.2.1': + '@atproto/did@0.5.5': dependencies: zod: 3.25.76 - '@atproto/lex-data@0.0.12': + '@atproto/jwk-jose@0.2.4': dependencies: - multiformats: 9.9.0 + '@atproto/jwk': 0.7.4 + jose: 5.10.0 + + '@atproto/jwk-webcrypto@0.3.4': + dependencies: + '@atproto/jwk': 0.7.4 + '@atproto/jwk-jose': 0.2.4 + zod: 3.25.76 + + '@atproto/jwk@0.7.4': + dependencies: + multiformats: 13.4.2 + zod: 3.25.76 + + '@atproto/lex-data@0.1.7': + dependencies: + multiformats: 13.4.2 tslib: 2.8.1 - uint8arrays: 3.0.0 unicode-segmenter: 0.14.5 - '@atproto/lex-json@0.0.12': + '@atproto/lex-json@0.1.6': dependencies: - '@atproto/lex-data': 0.0.12 + '@atproto/lex-data': 0.1.7 tslib: 2.8.1 - '@atproto/lexicon@0.6.1': + '@atproto/lexicon@0.7.14': + dependencies: + '@atproto/common-web': 0.5.12 + '@atproto/syntax': 0.7.6 + multiformats: 13.4.2 + zod: 3.25.76 + + '@atproto/oauth-client-node@0.5.7': + dependencies: + '@atproto-labs/did-resolver': 0.3.9 + '@atproto-labs/handle-resolver-node': 0.2.10 + '@atproto-labs/simple-store': 0.5.1 + '@atproto/did': 0.5.5 + '@atproto/jwk': 0.7.4 + '@atproto/jwk-jose': 0.2.4 + '@atproto/jwk-webcrypto': 0.3.4 + '@atproto/oauth-client': 0.8.7 + '@atproto/oauth-types': 0.7.6 + + '@atproto/oauth-client@0.8.7': + dependencies: + '@atproto-labs/did-resolver': 0.3.9 + '@atproto-labs/fetch': 0.3.6 + '@atproto-labs/handle-resolver': 0.4.9 + '@atproto-labs/identity-resolver': 0.4.9 + '@atproto-labs/simple-store': 0.5.1 + '@atproto-labs/simple-store-memory': 0.2.6 + '@atproto/did': 0.5.5 + '@atproto/jwk': 0.7.4 + '@atproto/oauth-types': 0.7.6 + '@atproto/xrpc': 0.8.13 + core-js: 3.50.0 + multiformats: 13.4.2 + zod: 3.25.76 + + '@atproto/oauth-types@0.7.6': + dependencies: + '@atproto/did': 0.5.5 + '@atproto/jwk': 0.7.4 + zod: 3.25.76 + + '@atproto/syntax@0.7.6': dependencies: - '@atproto/common-web': 0.4.17 - '@atproto/syntax': 0.4.3 iso-datestring-validator: 2.2.2 - multiformats: 9.9.0 - zod: 3.25.76 - - '@atproto/syntax@0.4.3': - dependencies: tslib: 2.8.1 - '@atproto/xrpc@0.7.7': + '@atproto/xrpc@0.8.13': dependencies: - '@atproto/lexicon': 0.6.1 + '@atproto/lexicon': 0.7.14 zod: 3.25.76 - '@aws-sdk/checksums@3.1000.29': + '@aws-sdk/checksums@3.1001.0': dependencies: - '@aws-sdk/core': 3.977.9 + '@aws-sdk/core': 3.978.0 '@aws-sdk/types': 3.974.5 - '@smithy/core': 3.33.3 - '@smithy/types': 4.17.2 + '@smithy/core': 3.34.1 + '@smithy/types': 4.18.0 tslib: 2.8.1 - '@aws-sdk/client-s3@3.1121.0': + '@aws-sdk/client-s3@3.1133.0': dependencies: - '@aws-sdk/checksums': 3.1000.29 - '@aws-sdk/core': 3.977.9 - '@aws-sdk/credential-provider-node': 3.972.81 - '@aws-sdk/middleware-sdk-s3': 3.972.75 + '@aws-sdk/checksums': 3.1001.0 + '@aws-sdk/core': 3.978.0 + '@aws-sdk/credential-provider-node': 3.972.83 + '@aws-sdk/middleware-sdk-s3': 3.972.76 '@aws-sdk/signature-v4-multi-region': 3.996.46 '@aws-sdk/types': 3.974.5 - '@smithy/core': 3.33.3 - '@smithy/fetch-http-handler': 5.7.2 - '@smithy/node-http-handler': 4.11.3 - '@smithy/types': 4.17.2 + '@smithy/core': 3.34.1 + '@smithy/fetch-http-handler': 5.8.0 + '@smithy/node-http-handler': 4.12.1 + '@smithy/types': 4.18.0 tslib: 2.8.1 - '@aws-sdk/core@3.977.9': + '@aws-sdk/core@3.978.0': dependencies: '@aws-sdk/types': 3.974.5 '@aws-sdk/xml-builder': 3.972.40 '@aws/lambda-invoke-store': 0.3.0 - '@smithy/core': 3.33.3 + '@smithy/core': 3.34.1 '@smithy/signature-v4': 5.7.3 - '@smithy/types': 4.17.2 + '@smithy/types': 4.18.0 bowser: 2.14.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.972.70': + '@aws-sdk/credential-provider-env@3.972.71': dependencies: - '@aws-sdk/core': 3.977.9 + '@aws-sdk/core': 3.978.0 '@aws-sdk/types': 3.974.5 - '@smithy/core': 3.33.3 - '@smithy/types': 4.17.2 + '@smithy/core': 3.34.1 + '@smithy/types': 4.18.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.972.72': + '@aws-sdk/credential-provider-http@3.972.73': dependencies: - '@aws-sdk/core': 3.977.9 + '@aws-sdk/core': 3.978.0 '@aws-sdk/types': 3.974.5 - '@smithy/core': 3.33.3 - '@smithy/fetch-http-handler': 5.7.2 - '@smithy/node-http-handler': 4.11.3 - '@smithy/types': 4.17.2 + '@smithy/core': 3.34.1 + '@smithy/fetch-http-handler': 5.8.0 + '@smithy/node-http-handler': 4.12.1 + '@smithy/types': 4.18.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.973.15': + '@aws-sdk/credential-provider-ini@3.973.16': dependencies: - '@aws-sdk/core': 3.977.9 - '@aws-sdk/credential-provider-env': 3.972.70 - '@aws-sdk/credential-provider-http': 3.972.72 - '@aws-sdk/credential-provider-login': 3.972.77 - '@aws-sdk/credential-provider-process': 3.972.70 - '@aws-sdk/credential-provider-sso': 3.973.14 - '@aws-sdk/credential-provider-web-identity': 3.972.76 - '@aws-sdk/nested-clients': 3.997.44 + '@aws-sdk/core': 3.978.0 + '@aws-sdk/credential-provider-env': 3.972.71 + '@aws-sdk/credential-provider-http': 3.972.73 + '@aws-sdk/credential-provider-login': 3.972.78 + '@aws-sdk/credential-provider-process': 3.972.71 + '@aws-sdk/credential-provider-sso': 3.973.15 + '@aws-sdk/credential-provider-web-identity': 3.972.77 + '@aws-sdk/nested-clients': 3.997.45 '@aws-sdk/types': 3.974.5 - '@smithy/core': 3.33.3 + '@smithy/core': 3.34.1 '@smithy/credential-provider-imds': 4.5.2 - '@smithy/types': 4.17.2 + '@smithy/types': 4.18.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-login@3.972.77': + '@aws-sdk/credential-provider-login@3.972.78': dependencies: - '@aws-sdk/core': 3.977.9 - '@aws-sdk/nested-clients': 3.997.44 + '@aws-sdk/core': 3.978.0 + '@aws-sdk/nested-clients': 3.997.45 '@aws-sdk/types': 3.974.5 - '@smithy/core': 3.33.3 - '@smithy/types': 4.17.2 + '@smithy/core': 3.34.1 + '@smithy/types': 4.18.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-node@3.972.81': + '@aws-sdk/credential-provider-node@3.972.83': dependencies: - '@aws-sdk/credential-provider-env': 3.972.70 - '@aws-sdk/credential-provider-http': 3.972.72 - '@aws-sdk/credential-provider-ini': 3.973.15 - '@aws-sdk/credential-provider-process': 3.972.70 - '@aws-sdk/credential-provider-sso': 3.973.14 - '@aws-sdk/credential-provider-web-identity': 3.972.76 + '@aws-sdk/credential-provider-env': 3.972.71 + '@aws-sdk/credential-provider-http': 3.972.73 + '@aws-sdk/credential-provider-ini': 3.973.16 + '@aws-sdk/credential-provider-process': 3.972.71 + '@aws-sdk/credential-provider-sso': 3.973.15 + '@aws-sdk/credential-provider-web-identity': 3.972.77 '@aws-sdk/types': 3.974.5 - '@smithy/core': 3.33.3 + '@smithy/core': 3.34.1 '@smithy/credential-provider-imds': 4.5.2 - '@smithy/types': 4.17.2 + '@smithy/types': 4.18.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-process@3.972.70': + '@aws-sdk/credential-provider-process@3.972.71': dependencies: - '@aws-sdk/core': 3.977.9 + '@aws-sdk/core': 3.978.0 '@aws-sdk/types': 3.974.5 - '@smithy/core': 3.33.3 - '@smithy/types': 4.17.2 + '@smithy/core': 3.34.1 + '@smithy/types': 4.18.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.973.14': + '@aws-sdk/credential-provider-sso@3.973.15': dependencies: - '@aws-sdk/core': 3.977.9 - '@aws-sdk/nested-clients': 3.997.44 - '@aws-sdk/token-providers': 3.1116.0 + '@aws-sdk/core': 3.978.0 + '@aws-sdk/nested-clients': 3.997.45 + '@aws-sdk/token-providers': 3.1129.0 '@aws-sdk/types': 3.974.5 - '@smithy/core': 3.33.3 - '@smithy/types': 4.17.2 + '@smithy/core': 3.34.1 + '@smithy/types': 4.18.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-web-identity@3.972.76': + '@aws-sdk/credential-provider-web-identity@3.972.77': dependencies: - '@aws-sdk/core': 3.977.9 - '@aws-sdk/nested-clients': 3.997.44 + '@aws-sdk/core': 3.978.0 + '@aws-sdk/nested-clients': 3.997.45 '@aws-sdk/types': 3.974.5 - '@smithy/core': 3.33.3 - '@smithy/types': 4.17.2 + '@smithy/core': 3.34.1 + '@smithy/types': 4.18.0 tslib: 2.8.1 - '@aws-sdk/lib-storage@3.1121.0(@aws-sdk/client-s3@3.1121.0)': + '@aws-sdk/lib-storage@3.1133.0(@aws-sdk/client-s3@3.1133.0)': dependencies: - '@aws-sdk/client-s3': 3.1121.0 - '@smithy/core': 3.33.3 - '@smithy/types': 4.17.2 + '@aws-sdk/client-s3': 3.1133.0 + '@smithy/core': 3.34.1 + '@smithy/types': 4.18.0 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.972.75': + '@aws-sdk/middleware-sdk-s3@3.972.76': dependencies: - '@aws-sdk/core': 3.977.9 + '@aws-sdk/core': 3.978.0 '@aws-sdk/signature-v4-multi-region': 3.996.46 '@aws-sdk/types': 3.974.5 - '@smithy/core': 3.33.3 - '@smithy/types': 4.17.2 + '@smithy/core': 3.34.1 + '@smithy/types': 4.18.0 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.997.44': + '@aws-sdk/nested-clients@3.997.45': dependencies: - '@aws-sdk/core': 3.977.9 + '@aws-sdk/core': 3.978.0 '@aws-sdk/signature-v4-multi-region': 3.996.46 '@aws-sdk/types': 3.974.5 - '@smithy/core': 3.33.3 - '@smithy/fetch-http-handler': 5.7.2 - '@smithy/node-http-handler': 4.11.3 - '@smithy/types': 4.17.2 + '@smithy/core': 3.34.1 + '@smithy/fetch-http-handler': 5.8.0 + '@smithy/node-http-handler': 4.12.1 + '@smithy/types': 4.18.0 tslib: 2.8.1 - '@aws-sdk/s3-request-presigner@3.1121.0': + '@aws-sdk/s3-request-presigner@3.1133.0': dependencies: - '@aws-sdk/core': 3.977.9 + '@aws-sdk/core': 3.978.0 '@aws-sdk/signature-v4-multi-region': 3.996.46 '@aws-sdk/types': 3.974.5 - '@smithy/core': 3.33.3 - '@smithy/types': 4.17.2 + '@smithy/core': 3.34.1 + '@smithy/types': 4.18.0 tslib: 2.8.1 '@aws-sdk/signature-v4-multi-region@3.996.46': dependencies: '@aws-sdk/types': 3.974.5 '@smithy/signature-v4': 5.7.3 - '@smithy/types': 4.17.2 + '@smithy/types': 4.18.0 tslib: 2.8.1 - '@aws-sdk/token-providers@3.1116.0': + '@aws-sdk/token-providers@3.1129.0': dependencies: - '@aws-sdk/core': 3.977.9 - '@aws-sdk/nested-clients': 3.997.44 + '@aws-sdk/core': 3.978.0 + '@aws-sdk/nested-clients': 3.997.45 '@aws-sdk/types': 3.974.5 - '@smithy/core': 3.33.3 - '@smithy/types': 4.17.2 + '@smithy/core': 3.34.1 + '@smithy/types': 4.18.0 tslib: 2.8.1 '@aws-sdk/types@3.974.5': dependencies: - '@smithy/types': 4.17.2 + '@smithy/types': 4.18.0 tslib: 2.8.1 '@aws-sdk/xml-builder@3.972.40': dependencies: - '@smithy/types': 4.17.2 + '@smithy/types': 4.18.0 tslib: 2.8.1 '@aws/lambda-invoke-store@0.3.0': {} - '@babel/code-frame@7.29.0': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - '@babel/code-frame@7.29.7': dependencies: '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.29.0': {} + '@babel/compat-data@7.29.7': {} - '@babel/core@7.29.6': + '@babel/core@7.29.7(supports-color@7.2.0)': dependencies: - '@babel/code-frame': 7.29.0 + '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.8 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.6) + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) '@babel/helpers': 7.29.7 '@babel/parser': 7.29.8 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.8(supports-color@7.2.0) + '@babel/types': 7.29.8 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) gensync: 1.0.0-beta.2 json5: 2.2.3 - semver: 7.7.4 + semver: 7.8.5 transitivePeerDependencies: - supports-color - '@babel/generator@7.29.1': - dependencies: - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - '@babel/generator@7.29.8': dependencies: '@babel/parser': 7.29.8 @@ -13937,120 +12122,120 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.27.3': + '@babel/helper-annotate-as-pure@7.29.7': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.8 - '@babel/helper-compilation-targets@7.28.6': + '@babel/helper-compilation-targets@7.29.7': dependencies: - '@babel/compat-data': 7.29.0 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.1 + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + browserslist: 4.29.0 lru-cache: 5.1.1 - semver: 7.7.4 + semver: 7.8.5 - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.6)': + '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.6) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.29.0 - semver: 7.7.4 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@7.2.0) + '@babel/helper-optimise-call-expression': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@7.2.0) + '@babel/traverse': 7.29.8(supports-color@7.2.0) + semver: 7.8.5 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.6)': + '@babel/helper-create-regexp-features-plugin@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-annotate-as-pure': 7.29.7 regexpu-core: 6.4.0 - semver: 7.7.4 + semver: 7.8.5 - '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.29.6)': + '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - debug: 4.4.3 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + debug: 4.4.3(supports-color@7.2.0) lodash.debounce: 4.0.8 - resolve: 1.22.11 + resolve: 1.22.12 transitivePeerDependencies: - supports-color - '@babel/helper-globals@7.28.0': {} + '@babel/helper-globals@7.29.7': {} - '@babel/helper-member-expression-to-functions@7.28.5': + '@babel/helper-member-expression-to-functions@7.29.7(supports-color@7.2.0)': dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/traverse': 7.29.8(supports-color@7.2.0) + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.28.6': + '@babel/helper-module-imports@7.29.7(supports-color@7.2.0)': dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/traverse': 7.29.8(supports-color@7.2.0) + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.6)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.8(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/helper-optimise-call-expression@7.27.1': + '@babel/helper-optimise-call-expression@7.29.7': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.8 - '@babel/helper-plugin-utils@7.28.6': {} + '@babel/helper-plugin-utils@7.29.7': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.6)': + '@babel/helper-remap-async-to-generator@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-wrap-function': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-wrap-function': 7.29.7(supports-color@7.2.0) + '@babel/traverse': 7.29.8(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.6)': + '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.29.0 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@7.2.0) + '@babel/helper-optimise-call-expression': 7.29.7 + '@babel/traverse': 7.29.8(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + '@babel/helper-skip-transparent-expression-wrappers@7.29.7(supports-color@7.2.0)': dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/traverse': 7.29.8(supports-color@7.2.0) + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-string-parser@7.29.7': {} - '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-string-parser@8.0.0': {} '@babel/helper-validator-identifier@7.29.7': {} - '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-validator-identifier@8.0.4': {} - '@babel/helper-wrap-function@7.28.6': + '@babel/helper-validator-option@7.29.7': {} + + '@babel/helper-wrap-function@7.29.7(supports-color@7.2.0)': dependencies: - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.8(supports-color@7.2.0) + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color @@ -14059,853 +12244,742 @@ snapshots: '@babel/template': 7.29.7 '@babel/types': 7.29.8 - '@babel/parser@7.29.0': - dependencies: - '@babel/types': 7.29.0 - '@babel/parser@7.29.8': dependencies: '@babel/types': 7.29.8 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.6)': + '@babel/parser@8.0.5': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/types': 8.0.5 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/traverse': 7.29.8(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.6) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.29.6)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@7.2.0) + '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.6)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - - '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.6) - '@babel/traverse': 7.29.0 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/traverse': 7.29.8(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.6)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.6) + '@babel/core': 7.29.7(supports-color@7.2.0) + + '@babel/plugin-syntax-import-assertions@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-import-attributes@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-arrow-functions@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-async-generator-functions@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/traverse': 7.29.8(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-async-to-generator@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.6)': + '@babel/plugin-transform-block-scoped-functions@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-block-scoping@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-class-properties@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.6)': + '@babel/plugin-transform-class-static-block@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-globals': 7.28.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.6) - '@babel/traverse': 7.29.0 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.6)': + '@babel/plugin-transform-classes@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/template': 7.28.6 - - '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/traverse': 7.29.8(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.29.6)': + '@babel/plugin-transform-computed-properties@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/template': 7.29.7 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-destructuring@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.6) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/traverse': 7.29.8(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.29.6)': + '@babel/plugin-transform-dotall-regex@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-duplicate-keys@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-dynamic-import@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-explicit-resource-management@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-exponentiation-operator@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-export-namespace-from@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-for-of@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.29.6)': + '@babel/plugin-transform-function-name@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/traverse': 7.29.8(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.6)': + '@babel/plugin-transform-json-strings@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-literals@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-logical-assignment-operators@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-member-expression-literals@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-modules-amd@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.29.4(@babel/core@7.29.6)': + '@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-modules-systemjs@7.29.8(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.8(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.6)': + '@babel/plugin-transform-modules-umd@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.6) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.6) - '@babel/traverse': 7.29.0 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-named-capturing-groups-regex@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.6) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-new-target@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-nullish-coalescing-operator@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-numeric-separator@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-object-rest-spread@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/traverse': 7.29.8(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.6)': + '@babel/plugin-transform-object-super@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.6)': + '@babel/plugin-transform-optional-catch-binding@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.6)': + '@babel/plugin-transform-optional-chaining@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.6)': + '@babel/plugin-transform-parameters@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-private-methods@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-private-property-in-object@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-react-constant-elements@7.27.1(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.6) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.29.6)': + '@babel/plugin-transform-property-literals@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.6) - '@babel/types': 7.29.0 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-react-constant-elements@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-react-display-name@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-react-jsx-development@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-react-jsx@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.6)': - dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-react-pure-annotations@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-regenerator@7.29.8(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-regexp-modifiers@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.6)': + '@babel/plugin-transform-reserved-words@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.6) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-shorthand-properties@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-spread@7.29.8(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-sticky-regex@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.29.6)': + '@babel/plugin-transform-template-literals@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.6)': + '@babel/plugin-transform-typeof-symbol@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.29.6)': + '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.6) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/preset-env@7.29.0(@babel/core@7.29.6)': - dependencies: - '@babel/compat-data': 7.29.0 - '@babel/core': 7.29.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.29.6) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.6) - '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.6) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.6) - '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.6) - '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.6) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-modules-systemjs': 7.29.4(@babel/core@7.29.6) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.6) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.6) - '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.6) - '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.6) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.6) - babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.29.6) - babel-plugin-polyfill-corejs3: 0.14.0(@babel/core@7.29.6) - babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.29.6) - core-js-compat: 3.48.0 - semver: 7.7.4 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@7.2.0) + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.6)': + '@babel/plugin-transform-unicode-escapes@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/types': 7.29.0 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-unicode-property-regex@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-unicode-regex@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-unicode-sets-regex@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + dependencies: + '@babel/compat-data': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-syntax-import-assertions': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-arrow-functions': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-async-generator-functions': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-async-to-generator': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-block-scoped-functions': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-block-scoping': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-class-static-block': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-computed-properties': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-dotall-regex': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-duplicate-keys': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-dynamic-import': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-explicit-resource-management': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-exponentiation-operator': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-export-namespace-from': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-for-of': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-function-name': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-json-strings': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-literals': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-logical-assignment-operators': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-member-expression-literals': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-modules-amd': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-modules-systemjs': 7.29.8(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-modules-umd': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-new-target': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-nullish-coalescing-operator': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-numeric-separator': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-object-rest-spread': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-object-super': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-optional-catch-binding': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-private-methods': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-private-property-in-object': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-property-literals': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-regenerator': 7.29.8(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-regexp-modifiers': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-reserved-words': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-shorthand-properties': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-spread': 7.29.8(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-sticky-regex': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-template-literals': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-typeof-symbol': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-unicode-escapes': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-unicode-property-regex': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-unicode-sets-regex': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.7(supports-color@7.2.0)) + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + core-js-compat: 3.50.0 + semver: 7.8.5 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.7(supports-color@7.2.0))': + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/types': 7.29.8 esutils: 2.0.3 - '@babel/preset-react@7.28.5(@babel/core@7.29.6)': + '@babel/preset-react@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.6) - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.6) - '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.6) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + '@babel/plugin-transform-react-display-name': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-react-jsx-development': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-react-pure-annotations': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.28.5(@babel/core@7.29.6)': + '@babel/preset-typescript@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.6) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.6) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/runtime@7.28.6': {} - '@babel/runtime@7.29.7': {} - '@babel/template@7.28.6': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 - '@babel/template@7.29.7': dependencies: '@babel/code-frame': 7.29.7 '@babel/parser': 7.29.8 '@babel/types': 7.29.8 - '@babel/traverse@7.29.0': + '@babel/traverse@7.29.8(supports-color@7.2.0)': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.0 - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - debug: 4.4.3 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.8 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/template': 7.29.7 + '@babel/types': 7.29.8 + debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/types@7.29.0': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/types@7.29.8': dependencies: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@base-ui/react@1.5.0(@date-fns/tz@1.4.1)(@types/react@19.2.14)(date-fns@4.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@babel/types@8.0.5': dependencies: - '@babel/runtime': 7.29.7 - '@base-ui/utils': 0.2.9(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@floating-ui/react-dom': 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@floating-ui/utils': 0.2.11 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - use-sync-external-store: 1.6.0(react@19.2.4) - optionalDependencies: - '@date-fns/tz': 1.4.1 - '@types/react': 19.2.14 - date-fns: 4.1.0 + '@babel/helper-string-parser': 8.0.0 + '@babel/helper-validator-identifier': 8.0.4 - '@base-ui/utils@0.2.9(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@base-ui/react@1.8.0(@date-fns/tz@1.5.0)(@types/react@19.3.0)(date-fns@4.4.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: '@babel/runtime': 7.29.7 - '@floating-ui/utils': 0.2.11 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - reselect: 5.2.0 - use-sync-external-store: 1.6.0(react@19.2.4) + '@base-ui/utils': 0.4.0(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@floating-ui/react-dom': 2.1.9(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@floating-ui/utils': 0.2.12 + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) + use-sync-external-store: 1.7.0(react@19.3.0) optionalDependencies: - '@types/react': 19.2.14 + '@date-fns/tz': 1.5.0 + '@types/react': 19.3.0 + date-fns: 4.4.0 + + '@base-ui/utils@0.4.0(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': + dependencies: + '@babel/runtime': 7.29.7 + '@floating-ui/utils': 0.2.12 + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) + reselect: 5.3.0 + use-sync-external-store: 1.7.0(react@19.3.0) + optionalDependencies: + '@types/react': 19.3.0 '@bcoe/v8-coverage@1.0.2': {} - '@biomejs/biome@2.4.4': + '@biomejs/biome@2.5.14': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.4.4 - '@biomejs/cli-darwin-x64': 2.4.4 - '@biomejs/cli-linux-arm64': 2.4.4 - '@biomejs/cli-linux-arm64-musl': 2.4.4 - '@biomejs/cli-linux-x64': 2.4.4 - '@biomejs/cli-linux-x64-musl': 2.4.4 - '@biomejs/cli-win32-arm64': 2.4.4 - '@biomejs/cli-win32-x64': 2.4.4 + '@biomejs/cli-darwin-arm64': 2.5.14 + '@biomejs/cli-darwin-x64': 2.5.14 + '@biomejs/cli-linux-arm64': 2.5.14 + '@biomejs/cli-linux-arm64-musl': 2.5.14 + '@biomejs/cli-linux-x64': 2.5.14 + '@biomejs/cli-linux-x64-musl': 2.5.14 + '@biomejs/cli-win32-arm64': 2.5.14 + '@biomejs/cli-win32-x64': 2.5.14 - '@biomejs/cli-darwin-arm64@2.4.4': + '@biomejs/cli-darwin-arm64@2.5.14': optional: true - '@biomejs/cli-darwin-x64@2.4.4': + '@biomejs/cli-darwin-x64@2.5.14': optional: true - '@biomejs/cli-linux-arm64-musl@2.4.4': + '@biomejs/cli-linux-arm64-musl@2.5.14': optional: true - '@biomejs/cli-linux-arm64@2.4.4': + '@biomejs/cli-linux-arm64@2.5.14': optional: true - '@biomejs/cli-linux-x64-musl@2.4.4': + '@biomejs/cli-linux-x64-musl@2.5.14': optional: true - '@biomejs/cli-linux-x64@2.4.4': + '@biomejs/cli-linux-x64@2.5.14': optional: true - '@biomejs/cli-win32-arm64@2.4.4': + '@biomejs/cli-win32-arm64@2.5.14': optional: true - '@biomejs/cli-win32-x64@2.4.4': - optional: true - - '@bluesky-social/common-web@0.4.3': - dependencies: - graphemer: 1.4.0 - multiformats: 9.9.0 - uint8arrays: 3.0.0 - zod: 3.25.76 - - '@bluesky-social/did@0.2.1': - dependencies: - zod: 3.25.76 - - '@bluesky-social/jwk-jose@0.1.11': - dependencies: - '@bluesky-social/jwk': 0.6.0 - jose: 5.10.0 - - '@bluesky-social/jwk-webcrypto@0.2.0': - dependencies: - '@bluesky-social/jwk': 0.6.0 - '@bluesky-social/jwk-jose': 0.1.11 - zod: 3.25.76 - - '@bluesky-social/jwk@0.6.0': - dependencies: - multiformats: 9.9.0 - zod: 3.25.76 - - '@bluesky-social/lexicon@0.5.1': - dependencies: - '@bluesky-social/common-web': 0.4.3 - '@bluesky-social/syntax': 0.4.1 - iso-datestring-validator: 2.2.2 - multiformats: 9.9.0 - zod: 3.25.76 - - '@bluesky-social/oauth-client-node@0.3.9': - dependencies: - '@atproto-labs/did-resolver': 0.2.2 - '@atproto-labs/handle-resolver-node': 0.1.20 - '@atproto-labs/simple-store': 0.3.0 - '@bluesky-social/did': 0.2.1 - '@bluesky-social/jwk': 0.6.0 - '@bluesky-social/jwk-jose': 0.1.11 - '@bluesky-social/jwk-webcrypto': 0.2.0 - '@bluesky-social/oauth-client': 0.5.7 - '@bluesky-social/oauth-types': 0.4.2 - - '@bluesky-social/oauth-client@0.5.7': - dependencies: - '@atproto-labs/did-resolver': 0.2.2 - '@atproto-labs/fetch': 0.2.3 - '@atproto-labs/handle-resolver': 0.3.2 - '@atproto-labs/identity-resolver': 0.3.2 - '@atproto-labs/simple-store': 0.3.0 - '@atproto-labs/simple-store-memory': 0.1.4 - '@bluesky-social/did': 0.2.1 - '@bluesky-social/jwk': 0.6.0 - '@bluesky-social/oauth-types': 0.4.2 - '@bluesky-social/xrpc': 0.7.5 - core-js: 3.48.0 - multiformats: 9.9.0 - zod: 3.25.76 - - '@bluesky-social/oauth-types@0.4.2': - dependencies: - '@bluesky-social/did': 0.2.1 - '@bluesky-social/jwk': 0.6.0 - zod: 3.25.76 - - '@bluesky-social/syntax@0.4.1': {} - - '@bluesky-social/xrpc@0.7.5': - dependencies: - '@bluesky-social/lexicon': 0.5.1 - zod: 3.25.76 - - '@bramus/specificity@2.4.2': - dependencies: - css-tree: 3.2.1 + '@biomejs/cli-win32-x64@2.5.14': optional: true '@bruits/satteri-darwin-arm64@0.10.5': optional: true - '@bruits/satteri-darwin-arm64@0.9.5': - optional: true - '@bruits/satteri-darwin-x64@0.10.5': optional: true - '@bruits/satteri-darwin-x64@0.9.5': - optional: true - '@bruits/satteri-linux-arm64-gnu@0.10.5': optional: true - '@bruits/satteri-linux-arm64-gnu@0.9.5': - optional: true - '@bruits/satteri-linux-arm64-musl@0.10.5': optional: true - '@bruits/satteri-linux-arm64-musl@0.9.5': - optional: true - '@bruits/satteri-linux-x64-gnu@0.10.5': optional: true - '@bruits/satteri-linux-x64-gnu@0.9.5': - optional: true - '@bruits/satteri-linux-x64-musl@0.10.5': optional: true - '@bruits/satteri-linux-x64-musl@0.9.5': - optional: true - '@bruits/satteri-wasm32-wasi@0.10.5': dependencies: '@emnapi/core': 1.11.1 '@emnapi/runtime': 1.11.1 - '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) - optional: true - - '@bruits/satteri-wasm32-wasi@0.9.5': - dependencies: - '@emnapi/core': 1.11.1 - '@emnapi/runtime': 1.11.1 - '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@napi-rs/wasm-runtime': 1.2.4(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optional: true '@bruits/satteri-win32-arm64-msvc@0.10.5': optional: true - '@bruits/satteri-win32-arm64-msvc@0.9.5': - optional: true - '@bruits/satteri-win32-x64-msvc@0.10.5': optional: true - '@bruits/satteri-win32-x64-msvc@0.9.5': + '@bufbuild/buf-darwin-arm64@1.73.0': optional: true - '@bufbuild/buf-darwin-arm64@1.69.0': + '@bufbuild/buf-darwin-x64@1.73.0': optional: true - '@bufbuild/buf-darwin-x64@1.69.0': + '@bufbuild/buf-linux-aarch64@1.73.0': optional: true - '@bufbuild/buf-linux-aarch64@1.69.0': + '@bufbuild/buf-linux-armv7@1.73.0': optional: true - '@bufbuild/buf-linux-armv7@1.69.0': + '@bufbuild/buf-linux-x64@1.73.0': optional: true - '@bufbuild/buf-linux-x64@1.69.0': + '@bufbuild/buf-win32-arm64@1.73.0': optional: true - '@bufbuild/buf-win32-arm64@1.69.0': + '@bufbuild/buf-win32-x64@1.73.0': optional: true - '@bufbuild/buf-win32-x64@1.69.0': - optional: true - - '@bufbuild/buf@1.69.0': + '@bufbuild/buf@1.73.0': optionalDependencies: - '@bufbuild/buf-darwin-arm64': 1.69.0 - '@bufbuild/buf-darwin-x64': 1.69.0 - '@bufbuild/buf-linux-aarch64': 1.69.0 - '@bufbuild/buf-linux-armv7': 1.69.0 - '@bufbuild/buf-linux-x64': 1.69.0 - '@bufbuild/buf-win32-arm64': 1.69.0 - '@bufbuild/buf-win32-x64': 1.69.0 + '@bufbuild/buf-darwin-arm64': 1.73.0 + '@bufbuild/buf-darwin-x64': 1.73.0 + '@bufbuild/buf-linux-aarch64': 1.73.0 + '@bufbuild/buf-linux-armv7': 1.73.0 + '@bufbuild/buf-linux-x64': 1.73.0 + '@bufbuild/buf-win32-arm64': 1.73.0 + '@bufbuild/buf-win32-x64': 1.73.0 '@bufbuild/protobuf@1.10.1': {} - '@bufbuild/protobuf@2.12.0': {} + '@bufbuild/protobuf@2.15.0': {} - '@bufbuild/protoc-gen-es@2.12.0(@bufbuild/protobuf@2.12.0)': + '@bufbuild/protoc-gen-es@2.15.0(@bufbuild/protobuf@2.15.0)(supports-color@7.2.0)': dependencies: - '@bufbuild/protoplugin': 2.12.0 + '@bufbuild/protoplugin': 2.15.0(supports-color@7.2.0) optionalDependencies: - '@bufbuild/protobuf': 2.12.0 + '@bufbuild/protobuf': 2.15.0 transitivePeerDependencies: - supports-color - '@bufbuild/protoplugin@2.12.0': + '@bufbuild/protoplugin@2.15.0(supports-color@7.2.0)': dependencies: - '@bufbuild/protobuf': 2.12.0 - '@typescript/vfs': 1.6.4(typescript@5.4.5) + '@bufbuild/protobuf': 2.15.0 + '@typescript/vfs': 1.6.4(supports-color@7.2.0)(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -14926,117 +13000,98 @@ snapshots: dependencies: fontkitten: 1.0.3 - '@clack/core@1.4.3': + '@clack/core@1.5.1': dependencies: fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 - '@clack/prompts@1.7.0': + '@clack/prompts@1.8.1': dependencies: - '@clack/core': 1.4.3 + '@clack/core': 1.5.1 fast-string-width: 3.0.2 fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 - '@codemirror/autocomplete@6.20.2': + '@codemirror/autocomplete@6.20.3': dependencies: - '@codemirror/language': 6.12.3 - '@codemirror/state': 6.6.0 - '@codemirror/view': 6.43.0 + '@codemirror/language': 6.12.4 + '@codemirror/state': 6.7.5 + '@codemirror/view': 6.43.12 '@lezer/common': 1.5.2 - '@codemirror/commands@6.10.3': + '@codemirror/commands@6.11.1': dependencies: - '@codemirror/language': 6.12.3 - '@codemirror/state': 6.6.0 - '@codemirror/view': 6.43.0 + '@codemirror/language': 6.12.4 + '@codemirror/state': 6.7.5 + '@codemirror/view': 6.43.12 '@lezer/common': 1.5.2 '@codemirror/lang-css@6.3.1': dependencies: - '@codemirror/autocomplete': 6.20.2 - '@codemirror/language': 6.12.3 - '@codemirror/state': 6.6.0 + '@codemirror/autocomplete': 6.20.3 + '@codemirror/language': 6.12.4 + '@codemirror/state': 6.7.5 '@lezer/common': 1.5.2 - '@lezer/css': 1.3.3 + '@lezer/css': 1.3.6 - '@codemirror/language@6.12.3': + '@codemirror/language@6.12.4': dependencies: - '@codemirror/state': 6.6.0 - '@codemirror/view': 6.43.0 + '@codemirror/state': 6.7.5 + '@codemirror/view': 6.43.12 '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.10 style-mod: 4.1.3 - '@codemirror/lint@6.9.6': + '@codemirror/lint@6.9.7': dependencies: - '@codemirror/state': 6.6.0 - '@codemirror/view': 6.43.0 - crelt: 1.0.6 + '@codemirror/state': 6.7.5 + '@codemirror/view': 6.43.12 + crelt: 1.0.7 - '@codemirror/search@6.7.0': + '@codemirror/search@6.7.2': dependencies: - '@codemirror/state': 6.6.0 - '@codemirror/view': 6.43.0 - crelt: 1.0.6 + '@codemirror/state': 6.7.5 + '@codemirror/view': 6.43.12 + crelt: 1.0.7 - '@codemirror/state@6.6.0': + '@codemirror/state@6.7.5': dependencies: - '@marijn/find-cluster-break': 1.0.2 + '@marijn/find-cluster-break': 1.0.4 - '@codemirror/view@6.43.0': + '@codemirror/view@6.43.12': dependencies: - '@codemirror/state': 6.6.0 - crelt: 1.0.6 + '@codemirror/state': 6.7.5 + crelt: 1.0.7 style-mod: 4.1.3 w3c-keyname: 2.2.8 + '@colors/colors@1.5.0': + optional: true + '@csstools/cascade-layer-name-parser@3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/color-helpers@6.0.2': {} + '@csstools/color-helpers@6.1.1': {} - '@csstools/color-helpers@6.1.1': - optional: true - - '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-calc@3.4.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-calc@3.3.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': - dependencies: - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - optional: true - - '@csstools/css-color-parser@4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': - dependencies: - '@csstools/color-helpers': 6.0.2 - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - - '@csstools/css-color-parser@4.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-color-parser@4.2.3(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/color-helpers': 6.1.1 - '@csstools/css-calc': 3.3.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.4.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - optional: true '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.9(css-tree@3.2.1)': - optionalDependencies: - css-tree: 3.2.1 - optional: true - '@csstools/css-tokenizer@4.0.0': {} '@csstools/media-query-list-parser@5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': @@ -15044,321 +13099,340 @@ snapshots: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-alpha-function@2.0.3(postcss@8.5.26)': + '@csstools/postcss-alpha-function@2.0.13(postcss@8.5.28)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.2.3(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 - '@csstools/postcss-cascade-layers@6.0.0(postcss@8.5.26)': + '@csstools/postcss-cascade-layers@6.0.0(postcss@8.5.28)': dependencies: - '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.26 - postcss-selector-parser: 7.1.1 + '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.6) + postcss: 8.5.28 + postcss-selector-parser: 7.1.6 - '@csstools/postcss-color-function-display-p3-linear@2.0.2(postcss@8.5.26)': + '@csstools/postcss-color-function-display-p3-linear@2.0.12(postcss@8.5.28)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.2.3(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 - '@csstools/postcss-color-function@5.0.2(postcss@8.5.26)': + '@csstools/postcss-color-function@5.0.12(postcss@8.5.28)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.2.3(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 - '@csstools/postcss-color-mix-function@4.0.2(postcss@8.5.26)': + '@csstools/postcss-color-mix-function@4.0.12(postcss@8.5.28)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.2.3(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 - '@csstools/postcss-color-mix-variadic-function-arguments@2.0.2(postcss@8.5.26)': + '@csstools/postcss-color-mix-variadic-function-arguments@2.0.12(postcss@8.5.28)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.2.3(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 - '@csstools/postcss-content-alt-text@3.0.0(postcss@8.5.26)': + '@csstools/postcss-container-rule-prelude-list@1.0.1(postcss@8.5.28)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + postcss: 8.5.28 - '@csstools/postcss-contrast-color-function@3.0.2(postcss@8.5.26)': + '@csstools/postcss-content-alt-text@3.0.4(postcss@8.5.28)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 - '@csstools/postcss-exponential-functions@3.0.1(postcss@8.5.26)': + '@csstools/postcss-contrast-color-function@3.0.12(postcss@8.5.28)': dependencies: - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.2.3(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.26 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 - '@csstools/postcss-font-format-keywords@5.0.0(postcss@8.5.26)': + '@csstools/postcss-exponential-functions@3.0.6(postcss@8.5.28)': dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/css-calc': 3.4.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + postcss: 8.5.28 + + '@csstools/postcss-fit-tolerance-property@1.0.1(postcss@8.5.28)': + dependencies: + postcss: 8.5.28 + + '@csstools/postcss-font-format-keywords@5.0.0(postcss@8.5.28)': + dependencies: + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 postcss-value-parser: 4.2.0 - '@csstools/postcss-font-width-property@1.0.0(postcss@8.5.26)': + '@csstools/postcss-font-width-property@1.0.0(postcss@8.5.28)': dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 - '@csstools/postcss-gamut-mapping@3.0.2(postcss@8.5.26)': + '@csstools/postcss-gamut-mapping@3.0.12(postcss@8.5.28)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.2.3(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.26 + postcss: 8.5.28 - '@csstools/postcss-gradients-interpolation-method@6.0.2(postcss@8.5.26)': + '@csstools/postcss-gradients-interpolation-method@6.0.12(postcss@8.5.28)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.2.3(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 - '@csstools/postcss-hwb-function@5.0.2(postcss@8.5.26)': + '@csstools/postcss-hwb-function@5.0.12(postcss@8.5.28)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.2.3(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 - '@csstools/postcss-ic-unit@5.0.0(postcss@8.5.26)': + '@csstools/postcss-ic-unit@5.0.4(postcss@8.5.28)': dependencies: - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 postcss-value-parser: 4.2.0 - '@csstools/postcss-initial@3.0.0(postcss@8.5.26)': - dependencies: - postcss: 8.5.26 - - '@csstools/postcss-is-pseudo-class@6.0.0(postcss@8.5.26)': - dependencies: - '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.26 - postcss-selector-parser: 7.1.1 - - '@csstools/postcss-light-dark-function@3.0.0(postcss@8.5.26)': + '@csstools/postcss-image-function@1.0.3(postcss@8.5.28)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 - '@csstools/postcss-logical-float-and-clear@4.0.0(postcss@8.5.26)': + '@csstools/postcss-initial@3.0.0(postcss@8.5.28)': dependencies: - postcss: 8.5.26 + postcss: 8.5.28 - '@csstools/postcss-logical-overflow@3.0.0(postcss@8.5.26)': + '@csstools/postcss-is-pseudo-class@6.0.0(postcss@8.5.28)': dependencies: - postcss: 8.5.26 + '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.6) + postcss: 8.5.28 + postcss-selector-parser: 7.1.6 - '@csstools/postcss-logical-overscroll-behavior@3.0.0(postcss@8.5.26)': + '@csstools/postcss-light-dark-function@3.0.4(postcss@8.5.28)': dependencies: - postcss: 8.5.26 + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 - '@csstools/postcss-logical-resize@4.0.0(postcss@8.5.26)': + '@csstools/postcss-logical-float-and-clear@4.0.0(postcss@8.5.28)': dependencies: - postcss: 8.5.26 + postcss: 8.5.28 + + '@csstools/postcss-logical-overflow@3.0.0(postcss@8.5.28)': + dependencies: + postcss: 8.5.28 + + '@csstools/postcss-logical-overscroll-behavior@3.0.0(postcss@8.5.28)': + dependencies: + postcss: 8.5.28 + + '@csstools/postcss-logical-resize@4.0.0(postcss@8.5.28)': + dependencies: + postcss: 8.5.28 postcss-value-parser: 4.2.0 - '@csstools/postcss-logical-viewport-units@4.0.0(postcss@8.5.26)': + '@csstools/postcss-logical-viewport-units@4.0.1(postcss@8.5.28)': dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 - '@csstools/postcss-media-minmax@3.0.1(postcss@8.5.26)': + '@csstools/postcss-media-minmax@3.0.5(postcss@8.5.28)': dependencies: - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.4.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - postcss: 8.5.26 + postcss: 8.5.28 - '@csstools/postcss-media-queries-aspect-ratio-number-values@4.0.0(postcss@8.5.26)': + '@csstools/postcss-media-queries-aspect-ratio-number-values@4.0.0(postcss@8.5.28)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - postcss: 8.5.26 + postcss: 8.5.28 - '@csstools/postcss-mixins@1.0.0(postcss@8.5.26)': + '@csstools/postcss-mixins@1.0.0(postcss@8.5.28)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.26 + postcss: 8.5.28 - '@csstools/postcss-nested-calc@5.0.0(postcss@8.5.26)': + '@csstools/postcss-nested-calc@5.0.1(postcss@8.5.28)': dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 postcss-value-parser: 4.2.0 - '@csstools/postcss-normalize-display-values@5.0.1(postcss@8.5.26)': + '@csstools/postcss-normalize-display-values@5.0.1(postcss@8.5.28)': dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - '@csstools/postcss-oklab-function@5.0.2(postcss@8.5.26)': + '@csstools/postcss-oklab-function@5.0.12(postcss@8.5.28)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.2.3(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 - '@csstools/postcss-position-area-property@2.0.0(postcss@8.5.26)': + '@csstools/postcss-position-area-property@2.0.0(postcss@8.5.28)': dependencies: - postcss: 8.5.26 + postcss: 8.5.28 - '@csstools/postcss-progressive-custom-properties@5.0.0(postcss@8.5.26)': + '@csstools/postcss-progressive-custom-properties@5.1.3(postcss@8.5.28)': dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - '@csstools/postcss-property-rule-prelude-list@2.0.0(postcss@8.5.26)': + '@csstools/postcss-property-rule-optional-descriptors@1.0.0(postcss@8.5.28)': + dependencies: + postcss: 8.5.28 + + '@csstools/postcss-property-rule-prelude-list@2.0.0(postcss@8.5.28)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.26 + postcss: 8.5.28 - '@csstools/postcss-random-function@3.0.1(postcss@8.5.26)': + '@csstools/postcss-random-function@4.0.2(postcss@8.5.28)': dependencies: - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.4.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.26 + postcss: 8.5.28 - '@csstools/postcss-relative-color-syntax@4.0.2(postcss@8.5.26)': + '@csstools/postcss-relative-color-syntax@4.0.12(postcss@8.5.28)': dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.2.3(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 - '@csstools/postcss-scope-pseudo-class@5.0.0(postcss@8.5.26)': + '@csstools/postcss-scope-pseudo-class@5.0.0(postcss@8.5.28)': dependencies: - postcss: 8.5.26 - postcss-selector-parser: 7.1.1 + postcss: 8.5.28 + postcss-selector-parser: 7.1.6 - '@csstools/postcss-sign-functions@2.0.1(postcss@8.5.26)': + '@csstools/postcss-sign-functions@2.0.6(postcss@8.5.28)': dependencies: - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.4.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.26 + postcss: 8.5.28 - '@csstools/postcss-stepped-value-functions@5.0.1(postcss@8.5.26)': + '@csstools/postcss-stepped-value-functions@5.0.6(postcss@8.5.28)': dependencies: - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.4.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.26 + postcss: 8.5.28 - '@csstools/postcss-syntax-descriptor-syntax-production@2.0.0(postcss@8.5.26)': + '@csstools/postcss-syntax-descriptor-syntax-production@2.0.0(postcss@8.5.28)': dependencies: '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.26 + postcss: 8.5.28 - '@csstools/postcss-system-ui-font-family@2.0.0(postcss@8.5.26)': + '@csstools/postcss-system-ui-font-family@2.0.0(postcss@8.5.28)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.26 + postcss: 8.5.28 - '@csstools/postcss-text-decoration-shorthand@5.0.3(postcss@8.5.26)': + '@csstools/postcss-text-decoration-shorthand@5.0.5(postcss@8.5.28)': dependencies: - '@csstools/color-helpers': 6.0.2 - postcss: 8.5.26 + '@csstools/color-helpers': 6.1.1 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - '@csstools/postcss-trigonometric-functions@5.0.1(postcss@8.5.26)': + '@csstools/postcss-trigonometric-functions@5.0.6(postcss@8.5.28)': dependencies: - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.4.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.26 + postcss: 8.5.28 - '@csstools/postcss-unset-value@5.0.0(postcss@8.5.26)': + '@csstools/postcss-unset-value@5.0.0(postcss@8.5.28)': dependencies: - postcss: 8.5.26 + postcss: 8.5.28 - '@csstools/selector-resolve-nested@4.0.0(postcss-selector-parser@7.1.1)': + '@csstools/selector-resolve-nested@4.0.1(postcss-selector-parser@7.1.6)': dependencies: - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.6 - '@csstools/selector-specificity@6.0.0(postcss-selector-parser@7.1.1)': + '@csstools/selector-specificity@6.0.0(postcss-selector-parser@7.1.6)': dependencies: - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.6 - '@csstools/utilities@3.0.0(postcss@8.5.26)': + '@csstools/utilities@3.0.0(postcss@8.5.28)': dependencies: - postcss: 8.5.26 + postcss: 8.5.28 - '@ctrl/tinycolor@4.2.0': {} + '@ctrl/tinycolor@4.2.1': {} - '@date-fns/tz@1.4.1': {} + '@date-fns/tz@1.5.0': {} - '@discoveryjs/json-ext@0.5.7': {} - - '@elastic/elasticsearch@9.3.2': + '@elastic/elasticsearch@9.5.1(supports-color@7.2.0)': dependencies: - '@elastic/transport': 9.4.0 - apache-arrow: 21.1.0 + '@elastic/transport': 9.4.0(supports-color@7.2.0) tslib: 2.8.1 transitivePeerDependencies: - - '@75lb/nature' - supports-color - '@elastic/transport@9.4.0': + '@elastic/transport@9.4.0(supports-color@7.2.0)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) - debug: 4.4.3 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.11.0(@opentelemetry/api@1.9.1) + debug: 4.4.3(supports-color@7.2.0) hpagent: 1.2.0 ms: 2.1.3 secure-json-parse: 4.1.0 tslib: 2.8.1 - undici: 7.29.0 + undici: 7.29.1 transitivePeerDependencies: - supports-color @@ -15375,62 +13449,62 @@ snapshots: commander: 13.1.0 glob: 13.0.6 minimatch: 10.2.6 - plist: 3.1.1 + plist: 3.1.0 '@electron/fuses@2.1.3': {} - '@electron/get@5.1.0': + '@electron/get@5.1.0(supports-color@7.2.0)': dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) env-paths: 3.0.0 graceful-fs: 4.2.11 progress: 2.0.3 - semver: 7.7.4 - sumchecker: 3.0.1 + semver: 7.8.5 + sumchecker: 3.0.1(supports-color@7.2.0) optionalDependencies: - undici: 7.29.0 + undici: 7.29.1 transitivePeerDependencies: - supports-color - '@electron/notarize@3.1.1': + '@electron/notarize@3.1.1(supports-color@7.2.0)': dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) promise-retry: 2.0.1 transitivePeerDependencies: - supports-color - '@electron/osx-sign@2.4.0': + '@electron/osx-sign@2.4.0(supports-color@7.2.0)': dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) isbinaryfile: 4.0.10 - plist: 3.1.1 - semver: 7.7.4 + plist: 3.1.0 + semver: 7.8.5 transitivePeerDependencies: - supports-color - '@electron/rebuild@4.2.0': + '@electron/rebuild@4.2.0(supports-color@7.2.0)': dependencies: '@malept/cross-spawn-promise': 2.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) node-abi: 4.35.0 node-api-version: 0.2.1 node-gyp: 12.4.0 - read-binary-file-arch: 1.0.6 + read-binary-file-arch: 1.0.6(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@electron/universal@3.0.4': + '@electron/universal@3.0.4(supports-color@7.2.0)': dependencies: '@electron/asar': 4.1.1 - debug: 4.4.3 - plist: 3.1.1 + debug: 4.4.3(supports-color@7.2.0) + plist: 3.1.0 transitivePeerDependencies: - supports-color - '@electron/windows-sign@1.2.2': + '@electron/windows-sign@1.2.2(supports-color@7.2.0)': dependencies: cross-dirname: 0.1.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) fs-extra: 11.4.0 minimist: 1.2.8 postject: 1.0.0-alpha.6 @@ -15473,6 +13547,12 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/core@1.11.3': + dependencies: + '@emnapi/wasi-threads': 1.2.3 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.11.1': dependencies: tslib: 2.8.1 @@ -15493,253 +13573,102 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.2.3': + dependencies: + tslib: 2.8.1 + optional: true + '@epic-web/invariant@1.0.0': {} - '@esbuild/aix-ppc64@0.25.12': - optional: true - - '@esbuild/aix-ppc64@0.27.2': - optional: true - '@esbuild/aix-ppc64@0.28.2': optional: true - '@esbuild/android-arm64@0.25.12': - optional: true - - '@esbuild/android-arm64@0.27.2': - optional: true - '@esbuild/android-arm64@0.28.2': optional: true - '@esbuild/android-arm@0.25.12': - optional: true - - '@esbuild/android-arm@0.27.2': - optional: true - '@esbuild/android-arm@0.28.2': optional: true - '@esbuild/android-x64@0.25.12': - optional: true - - '@esbuild/android-x64@0.27.2': - optional: true - '@esbuild/android-x64@0.28.2': optional: true - '@esbuild/darwin-arm64@0.25.12': - optional: true - - '@esbuild/darwin-arm64@0.27.2': - optional: true - '@esbuild/darwin-arm64@0.28.2': optional: true - '@esbuild/darwin-x64@0.25.12': - optional: true - - '@esbuild/darwin-x64@0.27.2': - optional: true - '@esbuild/darwin-x64@0.28.2': optional: true - '@esbuild/freebsd-arm64@0.25.12': - optional: true - - '@esbuild/freebsd-arm64@0.27.2': - optional: true - '@esbuild/freebsd-arm64@0.28.2': optional: true - '@esbuild/freebsd-x64@0.25.12': - optional: true - - '@esbuild/freebsd-x64@0.27.2': - optional: true - '@esbuild/freebsd-x64@0.28.2': optional: true - '@esbuild/linux-arm64@0.25.12': - optional: true - - '@esbuild/linux-arm64@0.27.2': - optional: true - '@esbuild/linux-arm64@0.28.2': optional: true - '@esbuild/linux-arm@0.25.12': - optional: true - - '@esbuild/linux-arm@0.27.2': - optional: true - '@esbuild/linux-arm@0.28.2': optional: true - '@esbuild/linux-ia32@0.25.12': - optional: true - - '@esbuild/linux-ia32@0.27.2': - optional: true - '@esbuild/linux-ia32@0.28.2': optional: true - '@esbuild/linux-loong64@0.25.12': - optional: true - - '@esbuild/linux-loong64@0.27.2': - optional: true - '@esbuild/linux-loong64@0.28.2': optional: true - '@esbuild/linux-mips64el@0.25.12': - optional: true - - '@esbuild/linux-mips64el@0.27.2': - optional: true - '@esbuild/linux-mips64el@0.28.2': optional: true - '@esbuild/linux-ppc64@0.25.12': - optional: true - - '@esbuild/linux-ppc64@0.27.2': - optional: true - '@esbuild/linux-ppc64@0.28.2': optional: true - '@esbuild/linux-riscv64@0.25.12': - optional: true - - '@esbuild/linux-riscv64@0.27.2': - optional: true - '@esbuild/linux-riscv64@0.28.2': optional: true - '@esbuild/linux-s390x@0.25.12': - optional: true - - '@esbuild/linux-s390x@0.27.2': - optional: true - '@esbuild/linux-s390x@0.28.2': optional: true - '@esbuild/linux-x64@0.25.12': - optional: true - - '@esbuild/linux-x64@0.27.2': - optional: true - '@esbuild/linux-x64@0.28.2': optional: true - '@esbuild/netbsd-arm64@0.25.12': - optional: true - - '@esbuild/netbsd-arm64@0.27.2': - optional: true - '@esbuild/netbsd-arm64@0.28.2': optional: true - '@esbuild/netbsd-x64@0.25.12': - optional: true - - '@esbuild/netbsd-x64@0.27.2': - optional: true - '@esbuild/netbsd-x64@0.28.2': optional: true - '@esbuild/openbsd-arm64@0.25.12': - optional: true - - '@esbuild/openbsd-arm64@0.27.2': - optional: true - '@esbuild/openbsd-arm64@0.28.2': optional: true - '@esbuild/openbsd-x64@0.25.12': - optional: true - - '@esbuild/openbsd-x64@0.27.2': - optional: true - '@esbuild/openbsd-x64@0.28.2': optional: true - '@esbuild/openharmony-arm64@0.25.12': - optional: true - - '@esbuild/openharmony-arm64@0.27.2': - optional: true - '@esbuild/openharmony-arm64@0.28.2': optional: true - '@esbuild/sunos-x64@0.25.12': - optional: true - - '@esbuild/sunos-x64@0.27.2': - optional: true - '@esbuild/sunos-x64@0.28.2': optional: true - '@esbuild/win32-arm64@0.25.12': - optional: true - - '@esbuild/win32-arm64@0.27.2': - optional: true - '@esbuild/win32-arm64@0.28.2': optional: true - '@esbuild/win32-ia32@0.25.12': - optional: true - - '@esbuild/win32-ia32@0.27.2': - optional: true - '@esbuild/win32-ia32@0.28.2': optional: true - '@esbuild/win32-x64@0.25.12': - optional: true - - '@esbuild/win32-x64@0.27.2': - optional: true - '@esbuild/win32-x64@0.28.2': optional: true - '@eslint-community/eslint-utils@4.10.1(eslint@10.10.0(jiti@2.7.0))': + '@eslint-community/eslint-utils@4.10.1(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))': dependencies: - eslint: 10.10.0(jiti@2.7.0) + eslint: 10.10.0(jiti@2.7.0)(supports-color@7.2.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.23.5': + '@eslint/config-array@0.23.5(supports-color@7.2.0)': dependencies: '@eslint/object-schema': 3.0.5 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) minimatch: 10.2.6 transitivePeerDependencies: - supports-color @@ -15759,20 +13688,15 @@ snapshots: '@eslint/core': 1.2.1 levn: 0.4.1 - '@exodus/bytes@1.15.1(@noble/hashes@2.4.0)': - optionalDependencies: - '@noble/hashes': 2.4.0 - optional: true - '@expressive-code/core@0.44.2': dependencies: - '@ctrl/tinycolor': 4.2.0 + '@ctrl/tinycolor': 4.2.1 hast-util-select: 6.0.4 hast-util-to-html: 9.0.5 hast-util-to-text: 4.0.2 hastscript: 9.0.1 - postcss: 8.5.26 - postcss-nested: 6.2.0(postcss@8.5.26) + postcss: 8.5.28 + postcss-nested: 6.2.0(postcss@8.5.28) unist-util-visit: 5.1.0 unist-util-visit-parents: 6.0.2 @@ -15789,52 +13713,28 @@ snapshots: dependencies: '@expressive-code/core': 0.44.2 - '@floating-ui/core@1.7.4': + '@floating-ui/core@1.8.0': dependencies: - '@floating-ui/utils': 0.2.10 - - '@floating-ui/dom@1.7.5': - dependencies: - '@floating-ui/core': 1.7.4 - '@floating-ui/utils': 0.2.10 - - '@floating-ui/react-dom@2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@floating-ui/dom': 1.7.5 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@floating-ui/dom': 1.7.5 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@floating-ui/react-dom@2.1.9(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@floating-ui/dom': 1.7.5 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@floating-ui/react@0.27.18(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@floating-ui/react-dom': 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@floating-ui/utils': 0.2.10 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - tabbable: 6.4.0 - - '@floating-ui/react@0.27.20(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@floating-ui/react-dom': 2.1.9(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@floating-ui/utils': 0.2.12 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - tabbable: 6.4.0 - '@floating-ui/utils@0.2.10': {} + '@floating-ui/dom@1.8.0': + dependencies: + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 - '@floating-ui/utils@0.2.11': {} + '@floating-ui/react-dom@2.1.9(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': + dependencies: + '@floating-ui/dom': 1.8.0 + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) + + '@floating-ui/react@0.27.20(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': + dependencies: + '@floating-ui/react-dom': 2.1.9(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@floating-ui/utils': 0.2.12 + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) + tabbable: 6.5.0 '@floating-ui/utils@0.2.12': {} @@ -15904,39 +13804,13 @@ snapshots: '@fluxer/windows-input-hook@file:fluxer_desktop/native/windows-input-hook': optional: true - '@formatjs/ecma402-abstract@2.3.6': - dependencies: - '@formatjs/fast-memoize': 2.2.7 - '@formatjs/intl-localematcher': 0.6.2 - decimal.js: 10.6.0 - tslib: 2.8.1 - - '@formatjs/fast-memoize@2.2.7': - dependencies: - tslib: 2.8.1 - - '@formatjs/icu-messageformat-parser@2.11.4': - dependencies: - '@formatjs/ecma402-abstract': 2.3.6 - '@formatjs/icu-skeleton-parser': 1.8.16 - tslib: 2.8.1 - - '@formatjs/icu-skeleton-parser@1.8.16': - dependencies: - '@formatjs/ecma402-abstract': 2.3.6 - tslib: 2.8.1 - - '@formatjs/intl-localematcher@0.6.2': - dependencies: - tslib: 2.8.1 - - '@hcaptcha/react-hcaptcha@2.0.2': {} + '@hcaptcha/react-hcaptcha@2.2.0': {} '@hexagon/base64@1.1.28': {} - '@hono/node-server@1.19.17(patch_hash=71b3d7e8aa963d17fd5b48a0bb317e3ae0f2415c079f76c745b6a3bd1ace6a14)(hono@4.13.5)': + '@hono/node-server@2.1.1(hono@4.13.8)': dependencies: - hono: 4.13.5 + hono: 4.13.8 '@humanfs/core@0.19.2': dependencies: @@ -16060,63 +13934,46 @@ snapshots: '@img/sharp-win32-x64@0.35.4': optional: true - '@inquirer/ansi@1.0.2': {} + '@inquirer/ansi@2.0.8': {} - '@inquirer/confirm@5.1.21(@types/node@25.3.0)': + '@inquirer/confirm@6.3.2(@types/node@26.6.1)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.3.0) - '@inquirer/type': 3.0.10(@types/node@25.3.0) + '@inquirer/core': 12.0.3(@types/node@26.6.1) + '@inquirer/type': 4.1.1(@types/node@26.6.1) optionalDependencies: - '@types/node': 25.3.0 + '@types/node': 26.6.1 - '@inquirer/core@10.3.2(@types/node@25.3.0)': + '@inquirer/core@12.0.3(@types/node@26.6.1)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.3.0) + '@inquirer/ansi': 2.0.8 + '@inquirer/figures': 2.0.9 + '@inquirer/type': 4.1.1(@types/node@26.6.1) cli-width: 4.1.0 - mute-stream: 2.0.0 + fast-wrap-ansi: 0.2.2 + mute-stream: 3.0.0 signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.3.0 + '@types/node': 26.6.1 - '@inquirer/figures@1.0.15': {} + '@inquirer/figures@2.0.9': {} - '@inquirer/type@3.0.10(@types/node@25.3.0)': + '@inquirer/type@4.1.1(@types/node@26.6.1)': optionalDependencies: - '@types/node': 25.3.0 + '@types/node': 26.6.1 - '@internationalized/date@3.11.0': + '@internationalized/date@3.12.4': dependencies: - '@swc/helpers': 0.5.19 + '@swc/helpers': 0.5.23 - '@internationalized/message@3.1.8': + '@internationalized/number@3.6.8': dependencies: - '@swc/helpers': 0.5.19 - intl-messageformat: 10.7.18 + '@swc/helpers': 0.5.23 - '@internationalized/number@3.6.5': + '@internationalized/string@3.2.10': dependencies: - '@swc/helpers': 0.5.19 + '@swc/helpers': 0.5.23 - '@internationalized/string@3.2.7': - dependencies: - '@swc/helpers': 0.5.19 - - '@ioredis/commands@1.5.0': {} - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@isaacs/cliui@9.0.0': {} + '@ioredis/commands@2.0.0': {} '@isaacs/fs-minipass@4.0.1': dependencies: @@ -16124,20 +13981,20 @@ snapshots: '@jest/schemas@29.6.3': dependencies: - '@sinclair/typebox': 0.27.10 + '@sinclair/typebox': 0.27.12 '@jest/types@29.6.3': dependencies: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 24.10.9 + '@types/node': 26.6.1 '@types/yargs': 17.0.35 chalk: 4.1.2 '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.6.0 '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/remapping@2.3.5': @@ -16147,139 +14004,12 @@ snapshots: '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/sourcemap-codec@1.6.0': {} '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/base64@17.67.0(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/buffers@1.2.1(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/buffers@17.67.0(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/codegen@1.0.0(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/codegen@17.67.0(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/fs-core@4.56.10(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - thingies: 2.5.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/fs-fsa@4.56.10(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - thingies: 2.5.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/fs-node-builtins@4.56.10(tslib@2.8.1)': - dependencies: - tslib: 2.8.1 - - '@jsonjoy.com/fs-node-to-fsa@4.56.10(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/fs-fsa': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/fs-node-utils@4.56.10(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/fs-node@4.56.10(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-print': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-snapshot': 4.56.10(tslib@2.8.1) - glob-to-regex.js: 1.2.0(tslib@2.8.1) - thingies: 2.5.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/fs-print@4.56.10(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - tree-dump: 1.1.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/fs-snapshot@4.56.10(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/json-pack': 17.67.0(tslib@2.8.1) - '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/json-pack@1.21.0(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) - '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1) - '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) - '@jsonjoy.com/json-pointer': 1.0.2(tslib@2.8.1) - '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) - hyperdyperid: 1.2.0 - thingies: 2.5.0(tslib@2.8.1) - tree-dump: 1.1.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/json-pack@17.67.0(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/base64': 17.67.0(tslib@2.8.1) - '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) - '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1) - '@jsonjoy.com/json-pointer': 17.67.0(tslib@2.8.1) - '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) - hyperdyperid: 1.2.0 - thingies: 2.5.0(tslib@2.8.1) - tree-dump: 1.1.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/json-pointer@1.0.2(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) - '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/json-pointer@17.67.0(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/util@1.9.0(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1) - '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) - tslib: 2.8.1 - - '@jsonjoy.com/util@17.67.0(tslib@2.8.1)': - dependencies: - '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) - '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1) - tslib: 2.8.1 + '@jridgewell/sourcemap-codec': 1.6.0 '@keyv/bigmap@1.3.1(keyv@5.6.0)': dependencies: @@ -16289,243 +14019,243 @@ snapshots: '@keyv/serialize@1.1.1': {} - '@leichtgewicht/ip-codec@2.0.5': {} - '@levischuck/tiny-cbor@0.2.11': {} - '@lexical/a11y@0.48.0(typescript@6.0.2)': + '@lexical/a11y@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/extension': 0.48.0(typescript@6.0.2) - '@lexical/utils': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) + '@lexical/extension': 0.50.0(typescript@7.0.2) + '@lexical/utils': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/clipboard@0.48.0(typescript@6.0.2)': + '@lexical/clipboard@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/extension': 0.48.0(typescript@6.0.2) - '@lexical/html': 0.48.0(typescript@6.0.2) - '@lexical/internal': 0.48.0(typescript@6.0.2) - '@lexical/list': 0.48.0(typescript@6.0.2) - '@lexical/selection': 0.48.0(typescript@6.0.2) - '@lexical/utils': 0.48.0(typescript@6.0.2) + '@lexical/extension': 0.50.0(typescript@7.0.2) + '@lexical/html': 0.50.0(typescript@7.0.2) + '@lexical/internal': 0.50.0(typescript@7.0.2) + '@lexical/list': 0.50.0(typescript@7.0.2) + '@lexical/selection': 0.50.0(typescript@7.0.2) + '@lexical/utils': 0.50.0(typescript@7.0.2) '@types/trusted-types': 2.0.7 - lexical: 0.48.0(typescript@6.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/code-core@0.48.0(typescript@6.0.2)': + '@lexical/code-core@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/extension': 0.48.0(typescript@6.0.2) - '@lexical/html': 0.48.0(typescript@6.0.2) - '@lexical/internal': 0.48.0(typescript@6.0.2) - '@lexical/utils': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) + '@lexical/extension': 0.50.0(typescript@7.0.2) + '@lexical/html': 0.50.0(typescript@7.0.2) + '@lexical/internal': 0.50.0(typescript@7.0.2) + '@lexical/utils': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/devtools-core@0.48.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)': + '@lexical/devtools-core@0.50.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(typescript@7.0.2)': dependencies: - '@lexical/html': 0.48.0(typescript@6.0.2) - '@lexical/link': 0.48.0(typescript@6.0.2) - '@lexical/mark': 0.48.0(typescript@6.0.2) - '@lexical/table': 0.48.0(typescript@6.0.2) - '@lexical/utils': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@lexical/html': 0.50.0(typescript@7.0.2) + '@lexical/link': 0.50.0(typescript@7.0.2) + '@lexical/mark': 0.50.0(typescript@7.0.2) + '@lexical/table': 0.50.0(typescript@7.0.2) + '@lexical/utils': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/dragon@0.48.0(typescript@6.0.2)': + '@lexical/dragon@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/extension': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) + '@lexical/extension': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/extension@0.48.0(typescript@6.0.2)': + '@lexical/extension@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/internal': 0.48.0(typescript@6.0.2) - '@lexical/utils': 0.48.0(typescript@6.0.2) + '@lexical/internal': 0.50.0(typescript@7.0.2) + '@lexical/utils': 0.50.0(typescript@7.0.2) '@preact/signals-core': 1.14.4 - lexical: 0.48.0(typescript@6.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/hashtag@0.48.0(typescript@6.0.2)': + '@lexical/hashtag@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/text': 0.48.0(typescript@6.0.2) - '@lexical/utils': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) + '@lexical/text': 0.50.0(typescript@7.0.2) + '@lexical/utils': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/history@0.48.0(typescript@6.0.2)': + '@lexical/history@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/extension': 0.48.0(typescript@6.0.2) - '@lexical/utils': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) + '@lexical/extension': 0.50.0(typescript@7.0.2) + '@lexical/utils': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/html@0.48.0(typescript@6.0.2)': + '@lexical/html@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/extension': 0.48.0(typescript@6.0.2) - '@lexical/internal': 0.48.0(typescript@6.0.2) - '@lexical/selection': 0.48.0(typescript@6.0.2) - '@lexical/utils': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) + '@lexical/extension': 0.50.0(typescript@7.0.2) + '@lexical/internal': 0.50.0(typescript@7.0.2) + '@lexical/selection': 0.50.0(typescript@7.0.2) + '@lexical/utils': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/internal@0.48.0(typescript@6.0.2)': + '@lexical/internal@0.50.0(typescript@7.0.2)': optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/link@0.48.0(typescript@6.0.2)': + '@lexical/link@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/extension': 0.48.0(typescript@6.0.2) - '@lexical/html': 0.48.0(typescript@6.0.2) - '@lexical/internal': 0.48.0(typescript@6.0.2) - '@lexical/utils': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) + '@lexical/a11y': 0.50.0(typescript@7.0.2) + '@lexical/extension': 0.50.0(typescript@7.0.2) + '@lexical/html': 0.50.0(typescript@7.0.2) + '@lexical/internal': 0.50.0(typescript@7.0.2) + '@lexical/utils': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/list@0.48.0(typescript@6.0.2)': + '@lexical/list@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/extension': 0.48.0(typescript@6.0.2) - '@lexical/html': 0.48.0(typescript@6.0.2) - '@lexical/internal': 0.48.0(typescript@6.0.2) - '@lexical/utils': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) + '@lexical/extension': 0.50.0(typescript@7.0.2) + '@lexical/html': 0.50.0(typescript@7.0.2) + '@lexical/internal': 0.50.0(typescript@7.0.2) + '@lexical/utils': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/mark@0.48.0(typescript@6.0.2)': + '@lexical/mark@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/utils': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) + '@lexical/utils': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/markdown@0.48.0(typescript@6.0.2)': + '@lexical/markdown@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/code-core': 0.48.0(typescript@6.0.2) - '@lexical/internal': 0.48.0(typescript@6.0.2) - '@lexical/link': 0.48.0(typescript@6.0.2) - '@lexical/list': 0.48.0(typescript@6.0.2) - '@lexical/rich-text': 0.48.0(typescript@6.0.2) - '@lexical/selection': 0.48.0(typescript@6.0.2) - '@lexical/text': 0.48.0(typescript@6.0.2) - '@lexical/utils': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) + '@lexical/code-core': 0.50.0(typescript@7.0.2) + '@lexical/internal': 0.50.0(typescript@7.0.2) + '@lexical/link': 0.50.0(typescript@7.0.2) + '@lexical/list': 0.50.0(typescript@7.0.2) + '@lexical/rich-text': 0.50.0(typescript@7.0.2) + '@lexical/selection': 0.50.0(typescript@7.0.2) + '@lexical/text': 0.50.0(typescript@7.0.2) + '@lexical/utils': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/overflow@0.48.0(typescript@6.0.2)': + '@lexical/overflow@0.50.0(typescript@7.0.2)': dependencies: - lexical: 0.48.0(typescript@6.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/plain-text@0.48.0(typescript@6.0.2)': + '@lexical/plain-text@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/clipboard': 0.48.0(typescript@6.0.2) - '@lexical/dragon': 0.48.0(typescript@6.0.2) - '@lexical/extension': 0.48.0(typescript@6.0.2) - '@lexical/selection': 0.48.0(typescript@6.0.2) - '@lexical/utils': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) + '@lexical/clipboard': 0.50.0(typescript@7.0.2) + '@lexical/dragon': 0.50.0(typescript@7.0.2) + '@lexical/extension': 0.50.0(typescript@7.0.2) + '@lexical/selection': 0.50.0(typescript@7.0.2) + '@lexical/utils': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/react@0.48.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2)(yjs@13.6.32)': + '@lexical/react@0.50.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(typescript@7.0.2)(yjs@13.6.32)': dependencies: - '@floating-ui/react': 0.27.20(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@lexical/a11y': 0.48.0(typescript@6.0.2) - '@lexical/devtools-core': 0.48.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) - '@lexical/dragon': 0.48.0(typescript@6.0.2) - '@lexical/extension': 0.48.0(typescript@6.0.2) - '@lexical/hashtag': 0.48.0(typescript@6.0.2) - '@lexical/history': 0.48.0(typescript@6.0.2) - '@lexical/internal': 0.48.0(typescript@6.0.2) - '@lexical/link': 0.48.0(typescript@6.0.2) - '@lexical/list': 0.48.0(typescript@6.0.2) - '@lexical/mark': 0.48.0(typescript@6.0.2) - '@lexical/markdown': 0.48.0(typescript@6.0.2) - '@lexical/overflow': 0.48.0(typescript@6.0.2) - '@lexical/plain-text': 0.48.0(typescript@6.0.2) - '@lexical/rich-text': 0.48.0(typescript@6.0.2) - '@lexical/table': 0.48.0(typescript@6.0.2) - '@lexical/text': 0.48.0(typescript@6.0.2) - '@lexical/utils': 0.48.0(typescript@6.0.2) - '@lexical/yjs': 0.48.0(typescript@6.0.2)(yjs@13.6.32) - lexical: 0.48.0(typescript@6.0.2) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@floating-ui/react': 0.27.20(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@lexical/a11y': 0.50.0(typescript@7.0.2) + '@lexical/devtools-core': 0.50.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(typescript@7.0.2) + '@lexical/dragon': 0.50.0(typescript@7.0.2) + '@lexical/extension': 0.50.0(typescript@7.0.2) + '@lexical/hashtag': 0.50.0(typescript@7.0.2) + '@lexical/history': 0.50.0(typescript@7.0.2) + '@lexical/internal': 0.50.0(typescript@7.0.2) + '@lexical/link': 0.50.0(typescript@7.0.2) + '@lexical/list': 0.50.0(typescript@7.0.2) + '@lexical/mark': 0.50.0(typescript@7.0.2) + '@lexical/markdown': 0.50.0(typescript@7.0.2) + '@lexical/overflow': 0.50.0(typescript@7.0.2) + '@lexical/plain-text': 0.50.0(typescript@7.0.2) + '@lexical/rich-text': 0.50.0(typescript@7.0.2) + '@lexical/table': 0.50.0(typescript@7.0.2) + '@lexical/text': 0.50.0(typescript@7.0.2) + '@lexical/utils': 0.50.0(typescript@7.0.2) + '@lexical/yjs': 0.50.0(typescript@7.0.2)(yjs@13.6.32) + lexical: 0.50.0(typescript@7.0.2) + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 yjs: 13.6.32 - '@lexical/rich-text@0.48.0(typescript@6.0.2)': + '@lexical/rich-text@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/clipboard': 0.48.0(typescript@6.0.2) - '@lexical/dragon': 0.48.0(typescript@6.0.2) - '@lexical/extension': 0.48.0(typescript@6.0.2) - '@lexical/html': 0.48.0(typescript@6.0.2) - '@lexical/selection': 0.48.0(typescript@6.0.2) - '@lexical/utils': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) + '@lexical/a11y': 0.50.0(typescript@7.0.2) + '@lexical/clipboard': 0.50.0(typescript@7.0.2) + '@lexical/dragon': 0.50.0(typescript@7.0.2) + '@lexical/extension': 0.50.0(typescript@7.0.2) + '@lexical/html': 0.50.0(typescript@7.0.2) + '@lexical/selection': 0.50.0(typescript@7.0.2) + '@lexical/utils': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/selection@0.48.0(typescript@6.0.2)': + '@lexical/selection@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/internal': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) + '@lexical/internal': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/table@0.48.0(typescript@6.0.2)': + '@lexical/table@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/clipboard': 0.48.0(typescript@6.0.2) - '@lexical/extension': 0.48.0(typescript@6.0.2) - '@lexical/html': 0.48.0(typescript@6.0.2) - '@lexical/internal': 0.48.0(typescript@6.0.2) - '@lexical/utils': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) + '@lexical/clipboard': 0.50.0(typescript@7.0.2) + '@lexical/extension': 0.50.0(typescript@7.0.2) + '@lexical/html': 0.50.0(typescript@7.0.2) + '@lexical/internal': 0.50.0(typescript@7.0.2) + '@lexical/utils': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/text@0.48.0(typescript@6.0.2)': + '@lexical/text@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/internal': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) + '@lexical/internal': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/utils@0.48.0(typescript@6.0.2)': + '@lexical/utils@0.50.0(typescript@7.0.2)': dependencies: - '@lexical/internal': 0.48.0(typescript@6.0.2) - '@lexical/selection': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) + '@lexical/internal': 0.50.0(typescript@7.0.2) + '@lexical/selection': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - '@lexical/yjs@0.48.0(typescript@6.0.2)(yjs@13.6.32)': + '@lexical/yjs@0.50.0(typescript@7.0.2)(yjs@13.6.32)': dependencies: - '@lexical/internal': 0.48.0(typescript@6.0.2) - '@lexical/selection': 0.48.0(typescript@6.0.2) - lexical: 0.48.0(typescript@6.0.2) + '@lexical/internal': 0.50.0(typescript@7.0.2) + '@lexical/selection': 0.50.0(typescript@7.0.2) + lexical: 0.50.0(typescript@7.0.2) yjs: 13.6.32 optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 '@lezer/common@1.5.2': {} - '@lezer/css@1.3.3': + '@lezer/css@1.3.6': dependencies: '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 @@ -16539,128 +14269,113 @@ snapshots: dependencies: '@lezer/common': 1.5.2 - '@lingui/babel-plugin-extract-messages@5.9.2': {} - - '@lingui/babel-plugin-lingui-macro@5.9.2(babel-plugin-macros@3.1.0)(typescript@6.0.2)': + '@lingui/babel-plugin-extract-messages@6.7.0': dependencies: - '@babel/core': 7.29.6 - '@babel/runtime': 7.29.7 - '@babel/types': 7.29.0 - '@lingui/conf': 5.9.2(typescript@6.0.2) - '@lingui/core': 5.9.2(@lingui/babel-plugin-lingui-macro@5.9.2(babel-plugin-macros@3.1.0)(typescript@6.0.2))(babel-plugin-macros@3.1.0) - '@lingui/message-utils': 5.9.2 + '@lingui/conf': 6.7.0 + + '@lingui/babel-plugin-lingui-macro@6.7.0(@babel/core@7.29.7(supports-color@7.2.0))(@babel/types@7.29.8)': + dependencies: + '@lingui/conf': 6.7.0 + '@lingui/message-utils': 6.7.0 optionalDependencies: - babel-plugin-macros: 3.1.0 - transitivePeerDependencies: - - supports-color - - typescript + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/types': 7.29.8 - '@lingui/cli@5.9.2(babel-plugin-macros@3.1.0)(typescript@6.0.2)': + '@lingui/cli@6.7.0(esbuild@0.28.2)(rolldown@1.2.9)(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@babel/generator': 7.29.1 - '@babel/parser': 7.29.0 - '@babel/runtime': 7.29.7 - '@babel/types': 7.29.0 - '@lingui/babel-plugin-extract-messages': 5.9.2 - '@lingui/babel-plugin-lingui-macro': 5.9.2(babel-plugin-macros@3.1.0)(typescript@6.0.2) - '@lingui/conf': 5.9.2(typescript@6.0.2) - '@lingui/core': 5.9.2(@lingui/babel-plugin-lingui-macro@5.9.2(babel-plugin-macros@3.1.0)(typescript@6.0.2))(babel-plugin-macros@3.1.0) - '@lingui/format-po': 5.9.2(typescript@6.0.2) - '@lingui/message-utils': 5.9.2 - chokidar: 3.5.1 - cli-table: 0.3.11 - commander: 10.0.1 - convert-source-map: 2.0.0 - date-fns: 3.6.0 - esbuild: 0.25.12 - glob: 11.1.0 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/generator': 7.29.8 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 + '@lingui/babel-plugin-extract-messages': 6.7.0 + '@lingui/babel-plugin-lingui-macro': 6.7.0(@babel/core@7.29.7(supports-color@7.2.0))(@babel/types@7.29.8) + '@lingui/conf': 6.7.0 + '@lingui/core': 6.7.0(@babel/core@7.29.7(supports-color@7.2.0))(@babel/types@7.29.8) + '@lingui/format-po': 6.7.0 + '@lingui/message-utils': 6.7.0 + chokidar: 5.0.0 + cli-table3: 0.6.5 + commander: 14.0.3 + jiti: 2.7.0 micromatch: 4.0.8 ms: 2.1.3 normalize-path: 3.0.0 - ora: 5.4.1 - picocolors: 1.1.1 - pofile: 1.1.4 - pseudolocale: 2.2.0 + ora: 9.4.1 + pseudolocale: 3.1.0 source-map: 0.7.6 - threads: 1.7.0 + tinypool: 2.2.0 + optionalDependencies: + esbuild: 0.28.2 + rolldown: 1.2.9 transitivePeerDependencies: - babel-plugin-macros - supports-color - - typescript - '@lingui/conf@5.9.2(typescript@6.0.2)': + '@lingui/conf@6.7.0': dependencies: - '@babel/runtime': 7.29.7 - cosmiconfig: 8.3.6(typescript@6.0.2) jest-validate: 29.7.0 - jiti: 2.6.1 - picocolors: 1.1.1 + jiti: 2.7.0 + lilconfig: 3.1.3 + normalize-path: 3.0.0 + + '@lingui/core@6.7.0(@babel/core@7.29.7(supports-color@7.2.0))(@babel/types@7.29.8)': + dependencies: + '@lingui/babel-plugin-lingui-macro': 6.7.0(@babel/core@7.29.7(supports-color@7.2.0))(@babel/types@7.29.8) + '@lingui/message-utils': 6.7.0 transitivePeerDependencies: - - typescript + - '@babel/core' + - '@babel/types' - '@lingui/core@5.9.2(@lingui/babel-plugin-lingui-macro@5.9.2(babel-plugin-macros@3.1.0)(typescript@6.0.2))(babel-plugin-macros@3.1.0)': + '@lingui/format-po@6.7.0': dependencies: - '@babel/runtime': 7.29.7 - '@lingui/message-utils': 5.9.2 - optionalDependencies: - '@lingui/babel-plugin-lingui-macro': 5.9.2(babel-plugin-macros@3.1.0)(typescript@6.0.2) - babel-plugin-macros: 3.1.0 + '@lingui/conf': 6.7.0 + '@lingui/message-utils': 6.7.0 + pofile-ts: 4.0.3 - '@lingui/format-po@5.9.2(typescript@6.0.2)': - dependencies: - '@lingui/conf': 5.9.2(typescript@6.0.2) - '@lingui/message-utils': 5.9.2 - date-fns: 3.6.0 - pofile: 1.1.4 - transitivePeerDependencies: - - typescript - - '@lingui/message-utils@5.9.2': + '@lingui/message-utils@6.7.0': dependencies: + '@messageformat/date-skeleton': 1.1.0 '@messageformat/parser': 5.1.1 js-sha256: 0.10.1 - '@lingui/react@5.9.2(@lingui/babel-plugin-lingui-macro@5.9.2(babel-plugin-macros@3.1.0)(typescript@6.0.2))(babel-plugin-macros@3.1.0)(react@19.2.4)': + '@lingui/react@6.7.0(@babel/core@7.29.7(supports-color@7.2.0))(@babel/types@7.29.8)(react@19.3.0)': dependencies: - '@babel/runtime': 7.29.7 - '@lingui/core': 5.9.2(@lingui/babel-plugin-lingui-macro@5.9.2(babel-plugin-macros@3.1.0)(typescript@6.0.2))(babel-plugin-macros@3.1.0) - react: 19.2.4 - optionalDependencies: - '@lingui/babel-plugin-lingui-macro': 5.9.2(babel-plugin-macros@3.1.0)(typescript@6.0.2) - babel-plugin-macros: 3.1.0 + '@lingui/babel-plugin-lingui-macro': 6.7.0(@babel/core@7.29.7(supports-color@7.2.0))(@babel/types@7.29.8) + '@lingui/core': 6.7.0(@babel/core@7.29.7(supports-color@7.2.0))(@babel/types@7.29.8) + react: 19.3.0 + use-sync-external-store: 1.7.0(react@19.3.0) + transitivePeerDependencies: + - '@babel/core' + - '@babel/types' - '@lingui/swc-plugin@5.11.0(@lingui/core@5.9.2(@lingui/babel-plugin-lingui-macro@5.9.2(babel-plugin-macros@3.1.0)(typescript@6.0.2))(babel-plugin-macros@3.1.0))': + '@lingui/swc-plugin@6.7.0(@lingui/core@6.7.0(@babel/core@7.29.7(supports-color@7.2.0))(@babel/types@7.29.8))': dependencies: - '@lingui/core': 5.9.2(@lingui/babel-plugin-lingui-macro@5.9.2(babel-plugin-macros@3.1.0)(typescript@6.0.2))(babel-plugin-macros@3.1.0) + '@lingui/conf': 6.7.0 + '@lingui/core': 6.7.0(@babel/core@7.29.7(supports-color@7.2.0))(@babel/types@7.29.8) - '@livekit/components-core@0.12.13(livekit-client@fluxer_app+pkgs+livekit-client)(tslib@2.8.1)': + '@livekit/components-core@0.12.15(livekit-client@fluxer_app+pkgs+livekit-client)(tslib@2.8.1)': dependencies: - '@floating-ui/dom': 1.7.5 + '@floating-ui/dom': 1.8.0 livekit-client: link:fluxer_app/pkgs/livekit-client loglevel: 1.9.1 rxjs: 7.8.2 tslib: 2.8.1 - '@livekit/components-react@2.9.20(livekit-client@fluxer_app+pkgs+livekit-client)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tslib@2.8.1)': + '@livekit/components-react@2.9.24(livekit-client@fluxer_app+pkgs+livekit-client)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(tslib@2.8.1)': dependencies: - '@livekit/components-core': 0.12.13(livekit-client@fluxer_app+pkgs+livekit-client)(tslib@2.8.1) + '@livekit/components-core': 0.12.15(livekit-client@fluxer_app+pkgs+livekit-client)(tslib@2.8.1) clsx: 2.1.1 events: 3.3.0 - jose: 6.1.3 + jose: 6.2.12 livekit-client: link:fluxer_app/pkgs/livekit-client - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) tslib: 2.8.1 - usehooks-ts: 3.1.1(react@19.2.4) + usehooks-ts: 3.1.1(react@19.3.0) '@livekit/mutex@1.1.1': {} - '@livekit/protocol@1.42.2': - dependencies: - '@bufbuild/protobuf': 1.10.1 - - '@livekit/protocol@1.44.0': + '@livekit/protocol@1.51.0': dependencies: '@bufbuild/protobuf': 1.10.1 @@ -16668,42 +14383,42 @@ snapshots: dependencies: cross-spawn: 7.0.6 - '@malept/flatpak-bundler@0.4.0': + '@malept/flatpak-bundler@0.4.0(supports-color@7.2.0)': dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) fs-extra: 9.1.0 lodash: 4.18.1 tmp-promise: 3.0.3 transitivePeerDependencies: - supports-color - '@marijn/find-cluster-break@1.0.2': {} + '@marijn/find-cluster-break@1.0.4': {} - '@marsidev/react-turnstile@1.4.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@marsidev/react-turnstile@1.6.1(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) - '@mdx-js/mdx@3.1.1': + '@mdx-js/mdx@3.1.1(supports-color@7.2.0)': dependencies: '@types/estree': 1.0.9 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 '@types/mdx': 2.0.14 - acorn: 8.16.0 + acorn: 8.18.0 collapse-white-space: 2.1.0 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 estree-util-scope: 1.0.1 estree-walker: 3.0.3 - hast-util-to-jsx-runtime: 2.3.6 + hast-util-to-jsx-runtime: 2.3.6(supports-color@7.2.0) markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.1(acorn@8.16.0) + recma-jsx: 1.0.1(acorn@8.18.0) recma-stringify: 1.0.0 - rehype-recma: 1.0.0 - remark-mdx: 3.1.1 - remark-parse: 11.0.0 + rehype-recma: 1.0.0(supports-color@7.2.0) + remark-mdx: 3.1.1(supports-color@7.2.0) + remark-parse: 11.0.0(supports-color@7.2.0) remark-rehype: 11.1.2 source-map: 0.7.6 unified: 11.0.5 @@ -16729,38 +14444,13 @@ snapshots: '@messageformat/parser@5.1.1': dependencies: - moo: 0.5.2 + moo: 0.5.3 '@messageformat/runtime@3.0.2': dependencies: make-plural: 7.5.0 - '@module-federation/error-codes@0.22.0': {} - - '@module-federation/runtime-core@0.22.0': - dependencies: - '@module-federation/error-codes': 0.22.0 - '@module-federation/sdk': 0.22.0 - - '@module-federation/runtime-tools@0.22.0': - dependencies: - '@module-federation/runtime': 0.22.0 - '@module-federation/webpack-bundler-runtime': 0.22.0 - - '@module-federation/runtime@0.22.0': - dependencies: - '@module-federation/error-codes': 0.22.0 - '@module-federation/runtime-core': 0.22.0 - '@module-federation/sdk': 0.22.0 - - '@module-federation/sdk@0.22.0': {} - - '@module-federation/webpack-bundler-runtime@0.22.0': - dependencies: - '@module-federation/runtime': 0.22.0 - '@module-federation/sdk': 0.22.0 - - '@mswjs/interceptors@0.41.3': + '@mswjs/interceptors@0.41.9': dependencies: '@open-draft/deferred-promise': 2.2.0 '@open-draft/logger': 0.3.0 @@ -16769,38 +14459,56 @@ snapshots: outvariant: 1.4.3 strict-event-emitter: 0.5.1 - '@napi-rs/lzma-linux-x64-gnu@1.5.1': - optional: true - - '@napi-rs/wasm-runtime@1.0.7': + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)': dependencies: - '@emnapi/core': 1.11.2 + '@emnapi/core': 1.11.3 '@emnapi/runtime': 1.11.3 - '@tybys/wasm-util': 0.10.3 + '@tybys/wasm-util': 0.10.4 optional: true - '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + '@napi-rs/wasm-runtime@1.2.4(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: '@emnapi/core': 1.11.1 '@emnapi/runtime': 1.11.1 - '@tybys/wasm-util': 0.10.3 + '@tybys/wasm-util': 0.10.4 optional: true - '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': + '@napi-rs/wasm-runtime@1.2.4(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': dependencies: '@emnapi/core': 1.11.2 '@emnapi/runtime': 1.11.2 - '@tybys/wasm-util': 0.10.3 + '@tybys/wasm-util': 0.10.4 optional: true - '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)': + '@napi-rs/wasm-runtime@1.2.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)': dependencies: - '@emnapi/core': 1.11.2 + '@emnapi/core': 1.11.3 '@emnapi/runtime': 1.11.3 - '@tybys/wasm-util': 0.10.3 + '@tybys/wasm-util': 0.10.4 optional: true - '@neon-rs/load@0.1.82': {} + '@nats-io/jetstream@3.4.0': + dependencies: + '@nats-io/nats-core': 3.4.0 + + '@nats-io/nats-core@3.4.0': + dependencies: + '@nats-io/nkeys': 2.0.3 + '@nats-io/nuid': 3.0.0 + + '@nats-io/nkeys@2.0.3': + dependencies: + tweetnacl: 1.0.3 + + '@nats-io/nuid@3.0.0': {} + + '@nats-io/transport-node@3.4.0': + dependencies: + '@nats-io/nats-core': 3.4.0 + '@nats-io/nkeys': 2.0.3 + '@nats-io/nuid': 3.0.0 + + '@neon-rs/load@0.2.6': {} '@noble/hashes@1.4.0': {} @@ -16808,20 +14516,10 @@ snapshots: '@nodable/entities@3.0.0': {} - '@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.20.1 - '@open-draft/deferred-promise@2.2.0': {} + '@open-draft/deferred-promise@3.0.0': {} + '@open-draft/logger@0.3.0': dependencies: is-node-process: 1.2.0 @@ -16829,19 +14527,78 @@ snapshots: '@open-draft/until@2.1.0': {} - '@opentelemetry/api@1.9.0': {} + '@opentelemetry/api@1.9.1': {} - '@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/core@2.11.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.39.0 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.43.0 - '@opentelemetry/semantic-conventions@1.39.0': {} + '@opentelemetry/semantic-conventions@1.43.0': {} '@oslojs/encoding@1.1.0': {} + '@oxc-parser/binding-android-arm-eabi@0.148.0': + optional: true + + '@oxc-parser/binding-android-arm64@0.148.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.148.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.148.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.148.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.148.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.148.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.148.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.148.0': + optional: true + + '@oxc-parser/binding-linux-ppc64-gnu@0.148.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.148.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-musl@0.148.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.148.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.148.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.148.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.148.0': + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.148.0': + optional: true + + '@oxc-parser/binding-win32-ia32-msvc@0.148.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.148.0': + optional: true + '@oxc-project/types@0.148.0': {} + '@oxc-project/types@0.150.0': {} + '@oxc-resolver/binding-android-arm-eabi@11.24.2': optional: true @@ -16894,7 +14651,7 @@ snapshots: dependencies: '@emnapi/core': 1.11.2 '@emnapi/runtime': 1.11.2 - '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) + '@napi-rs/wasm-runtime': 1.2.4(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) optional: true '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': @@ -16926,132 +14683,134 @@ snapshots: '@pagefind/windows-x64@1.5.2': optional: true - '@parcel/watcher-android-arm64@2.5.6': + '@parcel/watcher-android-arm64@2.5.1': optional: true - '@parcel/watcher-darwin-arm64@2.5.6': + '@parcel/watcher-darwin-arm64@2.5.1': optional: true - '@parcel/watcher-darwin-x64@2.5.6': + '@parcel/watcher-darwin-x64@2.5.1': optional: true - '@parcel/watcher-freebsd-x64@2.5.6': + '@parcel/watcher-freebsd-x64@2.5.1': optional: true - '@parcel/watcher-linux-arm-glibc@2.5.6': + '@parcel/watcher-linux-arm-glibc@2.5.1': optional: true - '@parcel/watcher-linux-arm-musl@2.5.6': + '@parcel/watcher-linux-arm-musl@2.5.1': optional: true - '@parcel/watcher-linux-arm64-glibc@2.5.6': + '@parcel/watcher-linux-arm64-glibc@2.5.1': optional: true - '@parcel/watcher-linux-arm64-musl@2.5.6': + '@parcel/watcher-linux-arm64-musl@2.5.1': optional: true - '@parcel/watcher-linux-x64-glibc@2.5.6': + '@parcel/watcher-linux-x64-glibc@2.5.1': optional: true - '@parcel/watcher-linux-x64-musl@2.5.6': + '@parcel/watcher-linux-x64-musl@2.5.1': optional: true - '@parcel/watcher-win32-arm64@2.5.6': + '@parcel/watcher-win32-arm64@2.5.1': optional: true - '@parcel/watcher-win32-ia32@2.5.6': + '@parcel/watcher-win32-ia32@2.5.1': optional: true - '@parcel/watcher-win32-x64@2.5.6': + '@parcel/watcher-win32-x64@2.5.1': optional: true - '@parcel/watcher@2.5.6': + '@parcel/watcher@2.5.1': dependencies: - detect-libc: 2.1.2 + detect-libc: 1.0.3 is-glob: 4.0.3 + micromatch: 4.0.8 node-addon-api: 7.1.1 - picomatch: 4.0.7 optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.6 - '@parcel/watcher-darwin-arm64': 2.5.6 - '@parcel/watcher-darwin-x64': 2.5.6 - '@parcel/watcher-freebsd-x64': 2.5.6 - '@parcel/watcher-linux-arm-glibc': 2.5.6 - '@parcel/watcher-linux-arm-musl': 2.5.6 - '@parcel/watcher-linux-arm64-glibc': 2.5.6 - '@parcel/watcher-linux-arm64-musl': 2.5.6 - '@parcel/watcher-linux-x64-glibc': 2.5.6 - '@parcel/watcher-linux-x64-musl': 2.5.6 - '@parcel/watcher-win32-arm64': 2.5.6 - '@parcel/watcher-win32-ia32': 2.5.6 - '@parcel/watcher-win32-x64': 2.5.6 + '@parcel/watcher-android-arm64': 2.5.1 + '@parcel/watcher-darwin-arm64': 2.5.1 + '@parcel/watcher-darwin-x64': 2.5.1 + '@parcel/watcher-freebsd-x64': 2.5.1 + '@parcel/watcher-linux-arm-glibc': 2.5.1 + '@parcel/watcher-linux-arm-musl': 2.5.1 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 + '@parcel/watcher-linux-arm64-musl': 2.5.1 + '@parcel/watcher-linux-x64-glibc': 2.5.1 + '@parcel/watcher-linux-x64-musl': 2.5.1 + '@parcel/watcher-win32-arm64': 2.5.1 + '@parcel/watcher-win32-ia32': 2.5.1 + '@parcel/watcher-win32-x64': 2.5.1 - '@peculiar/asn1-android@2.6.0': + '@peculiar/asn1-android@2.9.4': dependencies: - '@peculiar/asn1-schema': 2.6.0 - asn1js: 3.0.7 - tslib: 2.8.1 - - '@peculiar/asn1-cms@2.6.1': - dependencies: - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.1 - '@peculiar/asn1-x509-attr': 2.6.1 - asn1js: 3.0.7 - tslib: 2.8.1 - - '@peculiar/asn1-csr@2.6.1': - dependencies: - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.1 - asn1js: 3.0.7 - tslib: 2.8.1 - - '@peculiar/asn1-ecc@2.6.1': - dependencies: - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.1 - asn1js: 3.0.7 - tslib: 2.8.1 - - '@peculiar/asn1-pfx@2.6.1': - dependencies: - '@peculiar/asn1-cms': 2.6.1 - '@peculiar/asn1-pkcs8': 2.6.1 - '@peculiar/asn1-rsa': 2.6.1 - '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-schema': 2.9.4 asn1js: 3.0.10 tslib: 2.8.1 - '@peculiar/asn1-pkcs8@2.6.1': + '@peculiar/asn1-asym-key@2.9.4': dependencies: - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.1 + '@peculiar/asn1-pkcs8': 2.9.4 + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 asn1js: 3.0.10 tslib: 2.8.1 - '@peculiar/asn1-pkcs9@2.6.1': + '@peculiar/asn1-cms@2.9.4': dependencies: - '@peculiar/asn1-cms': 2.6.1 - '@peculiar/asn1-pfx': 2.6.1 - '@peculiar/asn1-pkcs8': 2.6.1 - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.1 - '@peculiar/asn1-x509-attr': 2.6.1 - asn1js: 3.0.7 + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 + '@peculiar/asn1-x509-attr': 2.9.4 + asn1js: 3.0.10 tslib: 2.8.1 - '@peculiar/asn1-rsa@2.6.1': + '@peculiar/asn1-csr@2.9.4': dependencies: - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.1 - asn1js: 3.0.7 + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 + asn1js: 3.0.10 tslib: 2.8.1 - '@peculiar/asn1-schema@2.6.0': + '@peculiar/asn1-ecc@2.9.4': dependencies: - asn1js: 3.0.7 - pvtsutils: 1.3.6 + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-pfx@2.9.4': + dependencies: + '@peculiar/asn1-cms': 2.9.4 + '@peculiar/asn1-pkcs8': 2.9.4 + '@peculiar/asn1-rsa': 2.9.4 + '@peculiar/asn1-schema': 2.9.4 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-pkcs8@2.9.4': + dependencies: + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-pkcs9@2.9.4': + dependencies: + '@peculiar/asn1-cms': 2.9.4 + '@peculiar/asn1-pfx': 2.9.4 + '@peculiar/asn1-pkcs8': 2.9.4 + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 + '@peculiar/asn1-x509-attr': 2.9.4 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-rsa@2.9.4': + dependencies: + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 + asn1js: 3.0.10 tslib: 2.8.1 '@peculiar/asn1-schema@2.9.4': @@ -17060,18 +14819,26 @@ snapshots: asn1js: 3.0.10 tslib: 2.8.1 - '@peculiar/asn1-x509-attr@2.6.1': + '@peculiar/asn1-x509-attr@2.9.4': dependencies: - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.1 + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 asn1js: 3.0.10 tslib: 2.8.1 - '@peculiar/asn1-x509@2.6.1': + '@peculiar/asn1-x509-post-quantum@2.9.4': dependencies: - '@peculiar/asn1-schema': 2.6.0 - asn1js: 3.0.7 - pvtsutils: 1.3.6 + '@peculiar/asn1-asym-key': 2.9.4 + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/asn1-x509@2.9.4': + dependencies: + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/utils': 2.0.3 + asn1js: 3.0.10 tslib: 2.8.1 '@peculiar/json-schema@1.1.12': @@ -17090,34 +14857,29 @@ snapshots: tslib: 2.8.1 webcrypto-core: 1.9.2 - '@peculiar/x509@1.14.3': + '@peculiar/x509@2.1.0': dependencies: - '@peculiar/asn1-cms': 2.6.1 - '@peculiar/asn1-csr': 2.6.1 - '@peculiar/asn1-ecc': 2.6.1 - '@peculiar/asn1-pkcs9': 2.6.1 - '@peculiar/asn1-rsa': 2.6.1 - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.1 + '@peculiar/asn1-cms': 2.9.4 + '@peculiar/asn1-csr': 2.9.4 + '@peculiar/asn1-ecc': 2.9.4 + '@peculiar/asn1-pkcs9': 2.9.4 + '@peculiar/asn1-rsa': 2.9.4 + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 + '@peculiar/asn1-x509-post-quantum': 2.9.4 pvtsutils: 1.3.6 - reflect-metadata: 0.2.2 tslib: 2.8.1 tsyringe: 4.10.0 '@phc/format@1.0.0': {} - '@phosphor-icons/react@2.1.10(patch_hash=9b0b481de857aa7a7525f023baea9da72be4574ff72825e39d959e6979d78eea)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@phosphor-icons/react@2.1.10(patch_hash=9b0b481de857aa7a7525f023baea9da72be4574ff72825e39d959e6979d78eea)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) '@pinojs/redact@0.4.0': {} - '@pkgjs/parseargs@0.11.0': - optional: true - - '@polka/url@1.0.0-next.29': {} - '@preact/signals-core@1.14.4': {} '@protobufjs/aspromise@1.1.2': {} @@ -17140,808 +14902,182 @@ snapshots: '@protobufjs/utf8@1.1.2': {} - '@radix-ui/primitive@1.1.3': {} + '@radix-ui/primitive@1.1.7': {} - '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-checkbox@1.3.11(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-context': 1.2.2(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-presence': 1.1.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-use-size': 1.1.4(@types/react@19.3.0)(react@19.3.0) + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-collection@1.1.15(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-context': 1.2.2(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@radix-ui/react-slot': 1.3.3(@types/react@19.3.0)(react@19.3.0) + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-compose-refs@1.1.5(@types/react@19.3.0)(react@19.3.0)': dependencies: - react: 19.2.4 + react: 19.3.0 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.3.0 - '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-context@1.2.2(@types/react@19.3.0)(react@19.3.0)': dependencies: - react: 19.2.4 + react: 19.3.0 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.3.0 - '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-direction@1.1.4(@types/react@19.3.0)(react@19.3.0)': dependencies: - react: 19.2.4 + react: 19.3.0 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.3.0 - '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-id@1.1.4(@types/react@19.3.0)(react@19.3.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.3.0)(react@19.3.0) + react: 19.3.0 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.3.0 - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-presence@1.1.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.3.0)(react@19.3.0) + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-primitive@2.1.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-slot': 1.3.3(@types/react@19.3.0)(react@19.3.0) + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-radio-group@1.4.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-context': 1.2.2(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-direction': 1.1.4(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-presence': 1.1.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@radix-ui/react-roving-focus': 1.1.19(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-use-size': 1.1.4(@types/react@19.3.0)(react@19.3.0) + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-roving-focus@1.1.19(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-collection': 1.1.15(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-context': 1.2.2(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-direction': 1.1.4(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-id': 1.1.4(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-use-is-hydrated': 0.1.3(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.3.0)(react@19.3.0) + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-slot@1.3.3(@types/react@19.3.0)(react@19.3.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.3.0)(react@19.3.0) + react: 19.3.0 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.3.0 - '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@radix-ui/react-switch@1.3.7(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-context': 1.2.2(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-use-size': 1.1.4(@types/react@19.3.0)(react@19.3.0) + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0(@types/react@19.3.0) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-use-callback-ref@1.1.4(@types/react@19.3.0)(react@19.3.0)': dependencies: - react: 19.2.4 + react: 19.3.0 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.3.0 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-use-controllable-state@1.2.6(@types/react@19.3.0)(react@19.3.0)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-use-effect-event': 0.0.5(@types/react@19.3.0)(react@19.3.0) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.3.0)(react@19.3.0) + react: 19.3.0 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.3.0 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-use-effect-event@0.0.5(@types/react@19.3.0)(react@19.3.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.3.0)(react@19.3.0) + react: 19.3.0 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.3.0 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-use-is-hydrated@0.1.3(@types/react@19.3.0)(react@19.3.0)': dependencies: - react: 19.2.4 + react: 19.3.0 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.3.0 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-use-layout-effect@1.1.4(@types/react@19.3.0)(react@19.3.0)': dependencies: - react: 19.2.4 + react: 19.3.0 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.3.0 - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.4)': + '@radix-ui/react-use-size@1.1.4(@types/react@19.3.0)(react@19.3.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.3.0)(react@19.3.0) + react: 19.3.0 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.3.0 - '@react-aria/autocomplete@3.0.0-rc.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@react-aria/live-announcer@3.5.1(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: - '@react-aria/combobox': 3.14.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/focus': 3.21.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/listbox': 3.15.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/searchfield': 3.8.11(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/textfield': 3.18.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/autocomplete': 3.0.0-beta.4(react@19.2.4) - '@react-stately/combobox': 3.12.2(react@19.2.4) - '@react-types/autocomplete': 3.0.0-alpha.37(react@19.2.4) - '@react-types/button': 3.15.0(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/breadcrumbs@3.5.31(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/link': 3.8.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/breadcrumbs': 3.7.18(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/button@3.14.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/toolbar': 3.0.0-beta.23(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/toggle': 3.9.4(react@19.2.4) - '@react-types/button': 3.15.0(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/calendar@3.9.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@internationalized/date': 3.11.0 - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/calendar': 3.9.2(react@19.2.4) - '@react-types/button': 3.15.0(react@19.2.4) - '@react-types/calendar': 3.8.2(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/checkbox@3.16.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/form': 3.1.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/label': 3.7.24(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/toggle': 3.12.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/checkbox': 3.7.4(react@19.2.4) - '@react-stately/form': 3.2.3(react@19.2.4) - '@react-stately/toggle': 3.9.4(react@19.2.4) - '@react-types/checkbox': 3.10.3(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/collections@3.0.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/ssr': 3.9.10(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - use-sync-external-store: 1.6.0(react@19.2.4) - - '@react-aria/color@3.1.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/numberfield': 3.12.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/slider': 3.8.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/spinbutton': 3.7.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/textfield': 3.18.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/visually-hidden': 3.8.30(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/color': 3.9.4(react@19.2.4) - '@react-stately/form': 3.2.3(react@19.2.4) - '@react-types/color': 3.1.3(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/combobox@3.14.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/focus': 3.21.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/listbox': 3.15.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/menu': 3.20.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/overlays': 3.31.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/selection': 3.27.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/textfield': 3.18.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/collections': 3.12.9(react@19.2.4) - '@react-stately/combobox': 3.12.2(react@19.2.4) - '@react-stately/form': 3.2.3(react@19.2.4) - '@react-types/button': 3.15.0(react@19.2.4) - '@react-types/combobox': 3.13.11(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/datepicker@3.16.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@internationalized/date': 3.11.0 - '@internationalized/number': 3.6.5 - '@internationalized/string': 3.2.7 - '@react-aria/focus': 3.21.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/form': 3.1.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/label': 3.7.24(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/spinbutton': 3.7.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/datepicker': 3.16.0(react@19.2.4) - '@react-stately/form': 3.2.3(react@19.2.4) - '@react-types/button': 3.15.0(react@19.2.4) - '@react-types/calendar': 3.8.2(react@19.2.4) - '@react-types/datepicker': 3.13.4(react@19.2.4) - '@react-types/dialog': 3.5.23(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/dialog@3.5.33(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/overlays': 3.31.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/dialog': 3.5.23(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/disclosure@3.1.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/ssr': 3.9.10(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/disclosure': 3.0.10(react@19.2.4) - '@react-types/button': 3.15.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/dnd@3.11.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@internationalized/string': 3.2.7 - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/overlays': 3.31.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/collections': 3.12.9(react@19.2.4) - '@react-stately/dnd': 3.7.3(react@19.2.4) - '@react-types/button': 3.15.0(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/focus@3.21.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - clsx: 2.1.1 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/form@3.1.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/form': 3.2.3(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/grid@3.14.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/focus': 3.21.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/selection': 3.27.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/collections': 3.12.9(react@19.2.4) - '@react-stately/grid': 3.11.8(react@19.2.4) - '@react-stately/selection': 3.20.8(react@19.2.4) - '@react-types/checkbox': 3.10.3(react@19.2.4) - '@react-types/grid': 3.3.7(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/gridlist@3.14.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/focus': 3.21.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/grid': 3.14.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/selection': 3.27.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/list': 3.13.3(react@19.2.4) - '@react-stately/tree': 3.9.5(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/i18n@3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@internationalized/date': 3.11.0 - '@internationalized/message': 3.1.8 - '@internationalized/number': 3.6.5 - '@internationalized/string': 3.2.7 - '@react-aria/ssr': 3.9.10(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/interactions@3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/ssr': 3.9.10(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/flags': 3.1.2 - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/label@3.7.24(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/landmark@3.0.9(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - use-sync-external-store: 1.6.0(react@19.2.4) - - '@react-aria/link@3.8.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/link': 3.6.6(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/listbox@3.15.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/label': 3.7.24(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/selection': 3.27.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/collections': 3.12.9(react@19.2.4) - '@react-stately/list': 3.13.3(react@19.2.4) - '@react-types/listbox': 3.7.5(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/live-announcer@3.4.4': - dependencies: - '@swc/helpers': 0.5.19 - - '@react-aria/menu@3.20.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/focus': 3.21.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/overlays': 3.31.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/selection': 3.27.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/collections': 3.12.9(react@19.2.4) - '@react-stately/menu': 3.9.10(react@19.2.4) - '@react-stately/selection': 3.20.8(react@19.2.4) - '@react-stately/tree': 3.9.5(react@19.2.4) - '@react-types/button': 3.15.0(react@19.2.4) - '@react-types/menu': 3.10.6(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/meter@3.4.29(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/progress': 3.4.29(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/meter': 3.4.14(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/numberfield@3.12.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/spinbutton': 3.7.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/textfield': 3.18.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/form': 3.2.3(react@19.2.4) - '@react-stately/numberfield': 3.10.4(react@19.2.4) - '@react-types/button': 3.15.0(react@19.2.4) - '@react-types/numberfield': 3.8.17(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/overlays@3.31.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/focus': 3.21.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/ssr': 3.9.10(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/visually-hidden': 3.8.30(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/overlays': 3.6.22(react@19.2.4) - '@react-types/button': 3.15.0(react@19.2.4) - '@react-types/overlays': 3.9.3(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/progress@3.4.29(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/label': 3.7.24(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/progress': 3.5.17(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/radio@3.12.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/focus': 3.21.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/form': 3.1.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/label': 3.7.24(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/radio': 3.11.4(react@19.2.4) - '@react-types/radio': 3.9.3(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/searchfield@3.8.11(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/textfield': 3.18.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/searchfield': 3.5.18(react@19.2.4) - '@react-types/button': 3.15.0(react@19.2.4) - '@react-types/searchfield': 3.6.7(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/select@3.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/form': 3.1.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/label': 3.7.24(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/listbox': 3.15.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/menu': 3.20.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/selection': 3.27.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/visually-hidden': 3.8.30(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/select': 3.9.1(react@19.2.4) - '@react-types/button': 3.15.0(react@19.2.4) - '@react-types/select': 3.12.1(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/selection@3.27.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/focus': 3.21.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/selection': 3.20.8(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/separator@3.4.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/slider@3.8.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/label': 3.7.24(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/slider': 3.7.4(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@react-types/slider': 3.8.3(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/spinbutton@3.7.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/button': 3.15.0(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/ssr@3.9.10(react@19.2.4)': - dependencies: - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-aria/switch@3.7.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/toggle': 3.12.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/toggle': 3.9.4(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@react-types/switch': 3.5.16(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/table@3.17.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/focus': 3.21.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/grid': 3.14.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/visually-hidden': 3.8.30(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/collections': 3.12.9(react@19.2.4) - '@react-stately/flags': 3.1.2 - '@react-stately/table': 3.15.3(react@19.2.4) - '@react-types/checkbox': 3.10.3(react@19.2.4) - '@react-types/grid': 3.3.7(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@react-types/table': 3.13.5(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/tabs@3.11.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/focus': 3.21.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/selection': 3.27.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/tabs': 3.8.8(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@react-types/tabs': 3.3.21(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/tag@3.8.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/gridlist': 3.14.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/label': 3.7.24(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/selection': 3.27.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/list': 3.13.3(react@19.2.4) - '@react-types/button': 3.15.0(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/textfield@3.18.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/form': 3.1.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/label': 3.7.24(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/form': 3.2.3(react@19.2.4) - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@react-types/textfield': 3.12.7(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/toast@3.0.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/landmark': 3.0.9(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/toast': 3.1.3(react@19.2.4) - '@react-types/button': 3.15.0(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/toggle@3.12.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/toggle': 3.9.4(react@19.2.4) - '@react-types/checkbox': 3.10.3(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/toolbar@3.0.0-beta.23(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/focus': 3.21.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/tooltip@3.9.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/tooltip': 3.5.10(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@react-types/tooltip': 3.5.1(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/tree@3.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/gridlist': 3.14.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/selection': 3.27.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/tree': 3.9.5(react@19.2.4) - '@react-types/button': 3.15.0(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/utils@3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/ssr': 3.9.10(react@19.2.4) - '@react-stately/flags': 3.1.2 - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - clsx: 2.1.1 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/virtualizer@4.1.12(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/virtualizer': 4.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-aria/visually-hidden@3.8.30(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@swc/helpers': 0.5.23 + react: 19.3.0 + react-aria: 3.52.1(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + react-dom: 19.3.0(react@19.3.0) '@react-dnd/asap@5.0.2': {} @@ -17949,420 +15085,14 @@ snapshots: '@react-dnd/shallowequal@4.0.2': {} - '@react-stately/autocomplete@3.0.0-beta.4(react@19.2.4)': + '@react-types/shared@3.36.1(react@19.3.0)': dependencies: - '@react-stately/utils': 3.11.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/calendar@3.9.2(react@19.2.4)': - dependencies: - '@internationalized/date': 3.11.0 - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/calendar': 3.8.2(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/checkbox@3.7.4(react@19.2.4)': - dependencies: - '@react-stately/form': 3.2.3(react@19.2.4) - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/checkbox': 3.10.3(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/collections@3.12.9(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/color@3.9.4(react@19.2.4)': - dependencies: - '@internationalized/number': 3.6.5 - '@internationalized/string': 3.2.7 - '@react-stately/form': 3.2.3(react@19.2.4) - '@react-stately/numberfield': 3.10.4(react@19.2.4) - '@react-stately/slider': 3.7.4(react@19.2.4) - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/color': 3.1.3(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/combobox@3.12.2(react@19.2.4)': - dependencies: - '@react-stately/collections': 3.12.9(react@19.2.4) - '@react-stately/form': 3.2.3(react@19.2.4) - '@react-stately/list': 3.13.3(react@19.2.4) - '@react-stately/overlays': 3.6.22(react@19.2.4) - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/combobox': 3.13.11(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/data@3.15.1(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/datepicker@3.16.0(react@19.2.4)': - dependencies: - '@internationalized/date': 3.11.0 - '@internationalized/number': 3.6.5 - '@internationalized/string': 3.2.7 - '@react-stately/form': 3.2.3(react@19.2.4) - '@react-stately/overlays': 3.6.22(react@19.2.4) - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/datepicker': 3.13.4(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/disclosure@3.0.10(react@19.2.4)': - dependencies: - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/dnd@3.7.3(react@19.2.4)': - dependencies: - '@react-stately/selection': 3.20.8(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/flags@3.1.2': - dependencies: - '@swc/helpers': 0.5.19 - - '@react-stately/form@3.2.3(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/grid@3.11.8(react@19.2.4)': - dependencies: - '@react-stately/collections': 3.12.9(react@19.2.4) - '@react-stately/selection': 3.20.8(react@19.2.4) - '@react-types/grid': 3.3.7(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/layout@4.5.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-stately/collections': 3.12.9(react@19.2.4) - '@react-stately/table': 3.15.3(react@19.2.4) - '@react-stately/virtualizer': 4.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/grid': 3.3.7(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@react-types/table': 3.13.5(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-stately/list@3.13.3(react@19.2.4)': - dependencies: - '@react-stately/collections': 3.12.9(react@19.2.4) - '@react-stately/selection': 3.20.8(react@19.2.4) - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/menu@3.9.10(react@19.2.4)': - dependencies: - '@react-stately/overlays': 3.6.22(react@19.2.4) - '@react-types/menu': 3.10.6(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/numberfield@3.10.4(react@19.2.4)': - dependencies: - '@internationalized/number': 3.6.5 - '@react-stately/form': 3.2.3(react@19.2.4) - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/numberfield': 3.8.17(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/overlays@3.6.22(react@19.2.4)': - dependencies: - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/overlays': 3.9.3(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/radio@3.11.4(react@19.2.4)': - dependencies: - '@react-stately/form': 3.2.3(react@19.2.4) - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/radio': 3.9.3(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/searchfield@3.5.18(react@19.2.4)': - dependencies: - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/searchfield': 3.6.7(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/select@3.9.1(react@19.2.4)': - dependencies: - '@react-stately/form': 3.2.3(react@19.2.4) - '@react-stately/list': 3.13.3(react@19.2.4) - '@react-stately/overlays': 3.6.22(react@19.2.4) - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/select': 3.12.1(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/selection@3.20.8(react@19.2.4)': - dependencies: - '@react-stately/collections': 3.12.9(react@19.2.4) - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/slider@3.7.4(react@19.2.4)': - dependencies: - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@react-types/slider': 3.8.3(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/table@3.15.3(react@19.2.4)': - dependencies: - '@react-stately/collections': 3.12.9(react@19.2.4) - '@react-stately/flags': 3.1.2 - '@react-stately/grid': 3.11.8(react@19.2.4) - '@react-stately/selection': 3.20.8(react@19.2.4) - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/grid': 3.3.7(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@react-types/table': 3.13.5(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/tabs@3.8.8(react@19.2.4)': - dependencies: - '@react-stately/list': 3.13.3(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@react-types/tabs': 3.3.21(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/toast@3.1.3(react@19.2.4)': - dependencies: - '@swc/helpers': 0.5.19 - react: 19.2.4 - use-sync-external-store: 1.6.0(react@19.2.4) - - '@react-stately/toggle@3.9.4(react@19.2.4)': - dependencies: - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/checkbox': 3.10.3(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/tooltip@3.5.10(react@19.2.4)': - dependencies: - '@react-stately/overlays': 3.6.22(react@19.2.4) - '@react-types/tooltip': 3.5.1(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/tree@3.9.5(react@19.2.4)': - dependencies: - '@react-stately/collections': 3.12.9(react@19.2.4) - '@react-stately/selection': 3.20.8(react@19.2.4) - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/utils@3.11.0(react@19.2.4)': - dependencies: - '@swc/helpers': 0.5.19 - react: 19.2.4 - - '@react-stately/virtualizer@4.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - '@swc/helpers': 0.5.19 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@react-types/autocomplete@3.0.0-alpha.37(react@19.2.4)': - dependencies: - '@react-types/combobox': 3.13.11(react@19.2.4) - '@react-types/searchfield': 3.6.7(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/breadcrumbs@3.7.18(react@19.2.4)': - dependencies: - '@react-types/link': 3.6.6(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/button@3.15.0(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/calendar@3.8.2(react@19.2.4)': - dependencies: - '@internationalized/date': 3.11.0 - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/checkbox@3.10.3(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/color@3.1.3(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - '@react-types/slider': 3.8.3(react@19.2.4) - react: 19.2.4 - - '@react-types/combobox@3.13.11(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/datepicker@3.13.4(react@19.2.4)': - dependencies: - '@internationalized/date': 3.11.0 - '@react-types/calendar': 3.8.2(react@19.2.4) - '@react-types/overlays': 3.9.3(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/dialog@3.5.23(react@19.2.4)': - dependencies: - '@react-types/overlays': 3.9.3(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/form@3.7.17(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/grid@3.3.7(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/link@3.6.6(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/listbox@3.7.5(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/menu@3.10.6(react@19.2.4)': - dependencies: - '@react-types/overlays': 3.9.3(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/meter@3.4.14(react@19.2.4)': - dependencies: - '@react-types/progress': 3.5.17(react@19.2.4) - react: 19.2.4 - - '@react-types/numberfield@3.8.17(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/overlays@3.9.3(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/progress@3.5.17(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/radio@3.9.3(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/searchfield@3.6.7(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - '@react-types/textfield': 3.12.7(react@19.2.4) - react: 19.2.4 - - '@react-types/select@3.12.1(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/shared@3.33.0(react@19.2.4)': - dependencies: - react: 19.2.4 - - '@react-types/slider@3.8.3(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/switch@3.5.16(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/table@3.13.5(react@19.2.4)': - dependencies: - '@react-types/grid': 3.3.7(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/tabs@3.3.21(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/textfield@3.12.7(react@19.2.4)': - dependencies: - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - - '@react-types/tooltip@3.5.1(react@19.2.4)': - dependencies: - '@react-types/overlays': 3.9.3(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 + react: 19.3.0 '@redocly/ajv@8.18.3': dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.5 + fast-uri: 3.1.8 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -18370,7 +15100,7 @@ snapshots: dependencies: json-schema-to-ts: 2.7.2 - '@redocly/openapi-core@2.52.0': + '@redocly/openapi-core@2.53.2': dependencies: '@redocly/ajv': 8.18.3 '@redocly/config': 0.56.0 @@ -18379,230 +15109,141 @@ snapshots: colorette: 1.4.0 graphql: 16.14.2 js-levenshtein: 1.1.6 - js-yaml: 5.4.1 + js-yaml: 5.4.2 picomatch: 4.0.7 pluralize: 8.0.0 yaml-ast-parser: 0.0.43 - '@rolldown/binding-android-arm-eabi@1.2.7': + '@rolldown/binding-android-arm-eabi@1.2.9': optional: true - '@rolldown/binding-android-arm64@1.2.7': + '@rolldown/binding-android-arm64@1.2.9': optional: true - '@rolldown/binding-darwin-arm64@1.2.7': + '@rolldown/binding-darwin-arm64@1.2.9': optional: true - '@rolldown/binding-darwin-x64@1.2.7': + '@rolldown/binding-darwin-x64@1.2.9': optional: true - '@rolldown/binding-freebsd-x64@1.2.7': + '@rolldown/binding-freebsd-x64@1.2.9': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.2.7': + '@rolldown/binding-linux-arm-gnueabihf@1.2.9': optional: true - '@rolldown/binding-linux-arm64-gnu@1.2.7': + '@rolldown/binding-linux-arm64-gnu@1.2.9': optional: true - '@rolldown/binding-linux-arm64-musl@1.2.7': + '@rolldown/binding-linux-arm64-musl@1.2.9': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.2.7': + '@rolldown/binding-linux-ppc64-gnu@1.2.9': optional: true - '@rolldown/binding-linux-s390x-gnu@1.2.7': + '@rolldown/binding-linux-s390x-gnu@1.2.9': optional: true - '@rolldown/binding-linux-x64-gnu@1.2.7': + '@rolldown/binding-linux-x64-gnu@1.2.9': optional: true - '@rolldown/binding-linux-x64-musl@1.2.7': + '@rolldown/binding-linux-x64-musl@1.2.9': optional: true - '@rolldown/binding-openharmony-arm64@1.2.7': + '@rolldown/binding-openharmony-arm64@1.2.9': optional: true - '@rolldown/binding-win32-arm64-msvc@1.2.7': + '@rolldown/binding-win32-arm64-msvc@1.2.9': optional: true - '@rolldown/binding-win32-x64-msvc@1.2.7': + '@rolldown/binding-win32-x64-msvc@1.2.9': optional: true '@rolldown/pluginutils@1.0.1': {} - '@rollup/pluginutils@5.4.0(rollup@4.63.1)': + '@rspack/binding-darwin-arm64@2.2.5': + optional: true + + '@rspack/binding-darwin-x64@2.2.5': + optional: true + + '@rspack/binding-linux-arm64-gnu@2.2.5': + optional: true + + '@rspack/binding-linux-arm64-musl@2.2.5': + optional: true + + '@rspack/binding-linux-ppc64-gnu@2.2.5': + optional: true + + '@rspack/binding-linux-riscv64-gnu@2.2.5': + optional: true + + '@rspack/binding-linux-riscv64-musl@2.2.5': + optional: true + + '@rspack/binding-linux-s390x-gnu@2.2.5': + optional: true + + '@rspack/binding-linux-x64-gnu@2.2.5': + optional: true + + '@rspack/binding-linux-x64-musl@2.2.5': + optional: true + + '@rspack/binding-wasm32-wasi@2.2.5': dependencies: - '@types/estree': 1.0.9 - estree-walker: 2.0.2 - picomatch: 4.0.7 + '@emnapi/core': 1.11.3 + '@emnapi/runtime': 1.11.3 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) + optional: true + + '@rspack/binding-win32-arm64-msvc@2.2.5': + optional: true + + '@rspack/binding-win32-ia32-msvc@2.2.5': + optional: true + + '@rspack/binding-win32-x64-msvc@2.2.5': + optional: true + + '@rspack/binding@2.2.5': optionalDependencies: - rollup: 4.63.1 + '@rspack/binding-darwin-arm64': 2.2.5 + '@rspack/binding-darwin-x64': 2.2.5 + '@rspack/binding-linux-arm64-gnu': 2.2.5 + '@rspack/binding-linux-arm64-musl': 2.2.5 + '@rspack/binding-linux-ppc64-gnu': 2.2.5 + '@rspack/binding-linux-riscv64-gnu': 2.2.5 + '@rspack/binding-linux-riscv64-musl': 2.2.5 + '@rspack/binding-linux-s390x-gnu': 2.2.5 + '@rspack/binding-linux-x64-gnu': 2.2.5 + '@rspack/binding-linux-x64-musl': 2.2.5 + '@rspack/binding-wasm32-wasi': 2.2.5 + '@rspack/binding-win32-arm64-msvc': 2.2.5 + '@rspack/binding-win32-ia32-msvc': 2.2.5 + '@rspack/binding-win32-x64-msvc': 2.2.5 - '@rollup/rollup-android-arm-eabi@4.63.1': - optional: true - - '@rollup/rollup-android-arm64@4.63.1': - optional: true - - '@rollup/rollup-darwin-arm64@4.63.1': - optional: true - - '@rollup/rollup-darwin-x64@4.63.1': - optional: true - - '@rollup/rollup-freebsd-arm64@4.63.1': - optional: true - - '@rollup/rollup-freebsd-x64@4.63.1': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.63.1': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.63.1': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.63.1': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.63.1': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.63.1': - optional: true - - '@rollup/rollup-linux-loong64-musl@4.63.1': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.63.1': - optional: true - - '@rollup/rollup-linux-ppc64-musl@4.63.1': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.63.1': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.63.1': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.63.1': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.63.1': - optional: true - - '@rollup/rollup-linux-x64-musl@4.63.1': - optional: true - - '@rollup/rollup-openbsd-x64@4.63.1': - optional: true - - '@rollup/rollup-openharmony-arm64@4.63.1': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.63.1': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.63.1': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.63.1': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.63.1': - optional: true - - '@rspack/binding-darwin-arm64@1.7.6': - optional: true - - '@rspack/binding-darwin-x64@1.7.6': - optional: true - - '@rspack/binding-linux-arm64-gnu@1.7.6': - optional: true - - '@rspack/binding-linux-arm64-musl@1.7.6': - optional: true - - '@rspack/binding-linux-x64-gnu@1.7.6': - optional: true - - '@rspack/binding-linux-x64-musl@1.7.6': - optional: true - - '@rspack/binding-wasm32-wasi@1.7.6': + '@rspack/cli@2.2.5(@rspack/core@2.2.5(@swc/helpers@0.5.23))(@rspack/dev-server@2.2.1(@rspack/core@2.2.5(@swc/helpers@0.5.23)))': dependencies: - '@napi-rs/wasm-runtime': 1.0.7 - optional: true - - '@rspack/binding-win32-arm64-msvc@1.7.6': - optional: true - - '@rspack/binding-win32-ia32-msvc@1.7.6': - optional: true - - '@rspack/binding-win32-x64-msvc@1.7.6': - optional: true - - '@rspack/binding@1.7.6': + '@rspack/core': 2.2.5(@swc/helpers@0.5.23) optionalDependencies: - '@rspack/binding-darwin-arm64': 1.7.6 - '@rspack/binding-darwin-x64': 1.7.6 - '@rspack/binding-linux-arm64-gnu': 1.7.6 - '@rspack/binding-linux-arm64-musl': 1.7.6 - '@rspack/binding-linux-x64-gnu': 1.7.6 - '@rspack/binding-linux-x64-musl': 1.7.6 - '@rspack/binding-wasm32-wasi': 1.7.6 - '@rspack/binding-win32-arm64-msvc': 1.7.6 - '@rspack/binding-win32-ia32-msvc': 1.7.6 - '@rspack/binding-win32-x64-msvc': 1.7.6 + '@rspack/dev-server': 2.2.1(@rspack/core@2.2.5(@swc/helpers@0.5.23)) - '@rspack/cli@1.7.6(@rspack/core@1.7.6(@swc/helpers@0.5.19))(@types/express@4.17.25)(tslib@2.8.1)': + '@rspack/core@2.2.5(@swc/helpers@0.5.23)': dependencies: - '@discoveryjs/json-ext': 0.5.7 - '@rspack/core': 1.7.6(@swc/helpers@0.5.19) - '@rspack/dev-server': 1.1.5(@rspack/core@1.7.6(@swc/helpers@0.5.19))(@types/express@4.17.25)(tslib@2.8.1) - exit-hook: 4.0.0 - webpack-bundle-analyzer: 4.10.2 - transitivePeerDependencies: - - '@types/express' - - bufferutil - - debug - - supports-color - - tslib - - utf-8-validate - - webpack - - webpack-cli - - '@rspack/core@1.7.6(@swc/helpers@0.5.19)': - dependencies: - '@module-federation/runtime-tools': 0.22.0 - '@rspack/binding': 1.7.6 - '@rspack/lite-tapable': 1.1.0 + '@rspack/binding': 2.2.5 optionalDependencies: - '@swc/helpers': 0.5.19 + '@swc/helpers': 0.5.23 - '@rspack/dev-server@1.1.5(@rspack/core@1.7.6(@swc/helpers@0.5.19))(@types/express@4.17.25)(tslib@2.8.1)': + '@rspack/dev-middleware@2.0.4(@rspack/core@2.2.5(@swc/helpers@0.5.23))': + optionalDependencies: + '@rspack/core': 2.2.5(@swc/helpers@0.5.23) + + '@rspack/dev-server@2.2.1(@rspack/core@2.2.5(@swc/helpers@0.5.23))': dependencies: - '@rspack/core': 1.7.6(@swc/helpers@0.5.19) - chokidar: 3.6.0 - http-proxy-middleware: 2.0.10(@types/express@4.17.25) - p-retry: 6.2.1 - webpack-dev-server: 5.2.6(tslib@2.8.1) - ws: 8.21.3 - transitivePeerDependencies: - - '@types/express' - - bufferutil - - debug - - supports-color - - tslib - - utf-8-validate - - webpack - - webpack-cli - - '@rspack/lite-tapable@1.1.0': {} + '@rspack/core': 2.2.5(@swc/helpers@0.5.23) + '@rspack/dev-middleware': 2.0.4(@rspack/core@2.2.5(@swc/helpers@0.5.23)) '@sapphi-red/web-noise-suppressor@0.4.0': {} @@ -18646,106 +15287,106 @@ snapshots: '@shikijs/vscode-textmate@10.0.2': {} - '@simplewebauthn/browser@13.2.2': {} + '@simplewebauthn/browser@14.0.0': {} - '@simplewebauthn/server@13.2.3': + '@simplewebauthn/server@14.0.2': dependencies: '@hexagon/base64': 1.1.28 '@levischuck/tiny-cbor': 0.2.11 - '@peculiar/asn1-android': 2.6.0 - '@peculiar/asn1-ecc': 2.6.1 - '@peculiar/asn1-rsa': 2.6.1 - '@peculiar/asn1-schema': 2.6.0 - '@peculiar/asn1-x509': 2.6.1 - '@peculiar/x509': 1.14.3 + '@peculiar/asn1-android': 2.9.4 + '@peculiar/asn1-ecc': 2.9.4 + '@peculiar/asn1-rsa': 2.9.4 + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 + '@peculiar/asn1-x509-post-quantum': 2.9.4 + '@peculiar/x509': 2.1.0 + reflect-metadata: 0.2.2 - '@sinclair/typebox@0.27.10': {} + '@sinclair/typebox@0.27.12': {} - '@smithy/core@3.33.3': + '@smithy/core@3.34.1': dependencies: - '@smithy/types': 4.17.2 + '@smithy/types': 4.18.0 tslib: 2.8.1 '@smithy/credential-provider-imds@4.5.2': dependencies: - '@smithy/core': 3.33.3 - '@smithy/types': 4.17.2 + '@smithy/core': 3.34.1 + '@smithy/types': 4.18.0 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.7.2': + '@smithy/fetch-http-handler@5.8.0': dependencies: - '@smithy/core': 3.33.3 - '@smithy/types': 4.17.2 + '@smithy/core': 3.34.1 + '@smithy/types': 4.18.0 tslib: 2.8.1 - '@smithy/node-http-handler@4.11.3': + '@smithy/node-http-handler@4.12.1': dependencies: - '@smithy/core': 3.33.3 - '@smithy/types': 4.17.2 + '@smithy/core': 3.34.1 + '@smithy/types': 4.18.0 tslib: 2.8.1 '@smithy/signature-v4@5.7.3': dependencies: - '@smithy/core': 3.33.3 - '@smithy/types': 4.17.2 + '@smithy/core': 3.34.1 + '@smithy/types': 4.18.0 tslib: 2.8.1 - '@smithy/types@4.17.2': + '@smithy/types@4.18.0': dependencies: tslib: 2.8.1 - '@standard-schema/spec@1.1.0': {} - - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.6)': + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 + '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.6)': + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 + '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.6)': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 + '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.29.6)': + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 + '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.29.6)': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 + '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.29.6)': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 + '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.29.6)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 + '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.29.6)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 + '@babel/core': 7.29.7(supports-color@7.2.0) - '@svgr/babel-preset@8.1.0(@babel/core@7.29.6)': + '@svgr/babel-preset@8.1.0(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: - '@babel/core': 7.29.6 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.6) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.6) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.6) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.6) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.6) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.6) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.6) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.6) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.7(supports-color@7.2.0)) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.7(supports-color@7.2.0)) - '@svgr/core@8.1.0(typescript@6.0.2)': + '@svgr/core@8.1.0(supports-color@7.2.0)(typescript@7.0.2)': dependencies: - '@babel/core': 7.29.6 - '@svgr/babel-preset': 8.1.0(@babel/core@7.29.6) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.7(supports-color@7.2.0)) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@6.0.2) + cosmiconfig: 8.3.6(typescript@7.0.2) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -18753,124 +15394,124 @@ snapshots: '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.8 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@6.0.2))': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(supports-color@7.2.0)(typescript@7.0.2))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.29.6 - '@svgr/babel-preset': 8.1.0(@babel/core@7.29.6) - '@svgr/core': 8.1.0(typescript@6.0.2) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.7(supports-color@7.2.0)) + '@svgr/core': 8.1.0(supports-color@7.2.0)(typescript@7.0.2) '@svgr/hast-util-to-babel-ast': 8.0.0 - svg-parser: 2.0.4 + svg-parser: 2.1.0 transitivePeerDependencies: - supports-color - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@6.0.2))(typescript@6.0.2)': + '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(supports-color@7.2.0)(typescript@7.0.2))(typescript@7.0.2)': dependencies: - '@svgr/core': 8.1.0(typescript@6.0.2) - cosmiconfig: 8.3.6(typescript@6.0.2) + '@svgr/core': 8.1.0(supports-color@7.2.0)(typescript@7.0.2) + cosmiconfig: 8.3.6(typescript@7.0.2) deepmerge: 4.3.1 svgo: 3.3.5 transitivePeerDependencies: - typescript - '@svgr/webpack@8.1.0(typescript@6.0.2)': + '@svgr/webpack@8.1.0(supports-color@7.2.0)(typescript@7.0.2)': dependencies: - '@babel/core': 7.29.6 - '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.29.6) - '@babel/preset-env': 7.29.0(@babel/core@7.29.6) - '@babel/preset-react': 7.28.5(@babel/core@7.29.6) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.6) - '@svgr/core': 8.1.0(typescript@6.0.2) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@6.0.2)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@6.0.2))(typescript@6.0.2) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/plugin-transform-react-constant-elements': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/preset-env': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/preset-react': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@svgr/core': 8.1.0(supports-color@7.2.0)(typescript@7.0.2) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(supports-color@7.2.0)(typescript@7.0.2))(supports-color@7.2.0) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(supports-color@7.2.0)(typescript@7.0.2))(typescript@7.0.2) transitivePeerDependencies: - supports-color - typescript - '@swc/helpers@0.5.19': + '@swc/helpers@0.5.23': dependencies: tslib: 2.8.1 - '@tailwindcss/cli@4.2.1': + '@tailwindcss/cli@4.3.3': dependencies: - '@parcel/watcher': 2.5.6 - '@tailwindcss/node': 4.2.1 - '@tailwindcss/oxide': 4.2.1 - enhanced-resolve: 5.19.0 + '@parcel/watcher': 2.5.1 + '@tailwindcss/node': 4.3.3 + '@tailwindcss/oxide': 4.3.3 + enhanced-resolve: 5.25.1 mri: 1.2.0 picocolors: 1.1.1 - tailwindcss: 4.2.1 + tailwindcss: 4.3.3 - '@tailwindcss/node@4.2.1': + '@tailwindcss/node@4.3.3': dependencies: '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.19.0 - jiti: 2.6.1 - lightningcss: 1.31.1 + enhanced-resolve: 5.25.1 + jiti: 2.7.0 + lightningcss: 1.32.0 magic-string: 0.30.21 source-map-js: 1.2.1 - tailwindcss: 4.2.1 + tailwindcss: 4.3.3 - '@tailwindcss/oxide-android-arm64@4.2.1': + '@tailwindcss/oxide-android-arm64@4.3.3': optional: true - '@tailwindcss/oxide-darwin-arm64@4.2.1': + '@tailwindcss/oxide-darwin-arm64@4.3.3': optional: true - '@tailwindcss/oxide-darwin-x64@4.2.1': + '@tailwindcss/oxide-darwin-x64@4.3.3': optional: true - '@tailwindcss/oxide-freebsd-x64@4.2.1': + '@tailwindcss/oxide-freebsd-x64@4.3.3': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.2.1': + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.2.1': + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.2.1': + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.2.1': + '@tailwindcss/oxide-linux-x64-musl@4.3.3': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.2.1': + '@tailwindcss/oxide-wasm32-wasi@4.3.3': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.2.1': + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.2.1': + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': optional: true - '@tailwindcss/oxide@4.2.1': + '@tailwindcss/oxide@4.3.3': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.2.1 - '@tailwindcss/oxide-darwin-arm64': 4.2.1 - '@tailwindcss/oxide-darwin-x64': 4.2.1 - '@tailwindcss/oxide-freebsd-x64': 4.2.1 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.1 - '@tailwindcss/oxide-linux-arm64-gnu': 4.2.1 - '@tailwindcss/oxide-linux-arm64-musl': 4.2.1 - '@tailwindcss/oxide-linux-x64-gnu': 4.2.1 - '@tailwindcss/oxide-linux-x64-musl': 4.2.1 - '@tailwindcss/oxide-wasm32-wasi': 4.2.1 - '@tailwindcss/oxide-win32-arm64-msvc': 4.2.1 - '@tailwindcss/oxide-win32-x64-msvc': 4.2.1 + '@tailwindcss/oxide-android-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-x64': 4.3.3 + '@tailwindcss/oxide-freebsd-x64': 4.3.3 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.3 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.3 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-x64-musl': 4.3.3 + '@tailwindcss/oxide-wasm32-wasi': 4.3.3 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 - '@tanstack/react-virtual@3.13.23(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@tanstack/react-virtual@3.14.13(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: - '@tanstack/virtual-core': 3.13.23 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@tanstack/virtual-core': 3.17.11 + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) - '@tanstack/virtual-core@3.13.23': {} + '@tanstack/virtual-core@3.17.11': {} '@ts-morph/common@0.29.0': dependencies: @@ -18878,24 +15519,16 @@ snapshots: path-browserify: 1.0.1 tinyglobby: 0.2.17 - '@tybys/wasm-util@0.10.3': + '@tybys/wasm-util@0.10.4': dependencies: tslib: 2.8.1 optional: true - '@types/archiver@7.0.0': + '@types/archiver@8.0.0': dependencies: + '@types/node': 26.6.1 '@types/readdir-glob': 1.1.5 - '@types/body-parser@1.19.6': - dependencies: - '@types/connect': 3.4.38 - '@types/node': 24.10.9 - - '@types/bonjour@3.5.13': - dependencies: - '@types/node': 24.10.9 - '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 @@ -18903,19 +15536,6 @@ snapshots: '@types/combokeys@2.4.9': {} - '@types/command-line-args@5.2.3': {} - - '@types/command-line-usage@5.0.4': {} - - '@types/connect-history-api-fallback@1.5.4': - dependencies: - '@types/express-serve-static-core': 4.19.8 - '@types/node': 24.10.9 - - '@types/connect@3.4.38': - dependencies: - '@types/node': 24.10.9 - '@types/debug@4.1.13': dependencies: '@types/ms': 2.1.0 @@ -18932,34 +15552,14 @@ snapshots: '@types/events@3.0.3': {} - '@types/express-serve-static-core@4.19.8': - dependencies: - '@types/node': 24.10.9 - '@types/qs': 6.14.0 - '@types/range-parser': 1.2.7 - '@types/send': 1.2.1 - - '@types/express@4.17.25': - dependencies: - '@types/body-parser': 1.19.6 - '@types/express-serve-static-core': 4.19.8 - '@types/qs': 6.14.0 - '@types/serve-static': 1.15.10 - '@types/fs-extra@9.0.13': dependencies: - '@types/node': 24.10.9 + '@types/node': 24.13.5 '@types/hast@3.0.5': dependencies: '@types/unist': 3.0.3 - '@types/http-errors@2.0.5': {} - - '@types/http-proxy@1.17.17': - dependencies: - '@types/node': 24.10.9 - '@types/istanbul-lib-coverage@2.0.6': {} '@types/istanbul-lib-report@3.0.3': @@ -18974,9 +15574,9 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/lodash@4.17.24': {} + '@types/lodash@4.17.25': {} - '@types/luxon@3.7.1': {} + '@types/luxon@3.7.5': {} '@types/mdast@4.0.4': dependencies: @@ -18984,89 +15584,59 @@ snapshots: '@types/mdx@2.0.14': {} - '@types/mime@1.3.5': {} - '@types/ms@2.1.0': {} '@types/nlcst@2.0.3': dependencies: '@types/unist': 3.0.3 - '@types/node@18.19.130': + '@types/node@20.19.43': dependencies: - undici-types: 5.26.5 + undici-types: 6.21.0 - '@types/node@24.10.9': - dependencies: - undici-types: 7.16.0 - - '@types/node@25.3.0': + '@types/node@24.13.5': dependencies: undici-types: 7.18.2 - '@types/nodemailer@7.0.11': + '@types/node@26.6.1': dependencies: - '@types/node': 25.3.0 + undici-types: 8.9.0 - '@types/parse-json@4.0.2': - optional: true - - '@types/pg@8.16.0': + '@types/pg@8.23.1': dependencies: - '@types/node': 24.10.9 - pg-protocol: 1.14.0 + '@types/node': 26.6.1 + pg-protocol: 1.16.0 pg-types: 2.2.0 '@types/qrcode@1.5.6': dependencies: - '@types/node': 24.10.9 + '@types/node': 26.6.1 - '@types/qs@6.14.0': {} - - '@types/range-parser@1.2.7': {} - - '@types/react-dom@19.2.3(@types/react@19.2.14)': + '@types/react-dom@19.3.0(@types/react@19.3.0)': dependencies: - '@types/react': 19.2.14 + '@types/react': 19.3.0 - '@types/react@19.2.14': + '@types/react@19.3.0': dependencies: csstype: 3.2.3 '@types/readdir-glob@1.1.5': dependencies: - '@types/node': 24.10.9 - - '@types/retry@0.12.2': {} + '@types/node': 26.6.1 '@types/sax@1.2.7': dependencies: - '@types/node': 24.10.9 + '@types/node': 26.6.1 '@types/sdp-transform@2.15.0': {} - '@types/send@0.17.6': - dependencies: - '@types/mime': 1.3.5 - '@types/node': 24.10.9 - '@types/send@1.2.1': dependencies: - '@types/node': 24.10.9 + '@types/node': 26.6.1 - '@types/serve-index@1.9.4': + '@types/set-cookie-parser@2.4.10': dependencies: - '@types/express': 4.17.25 - - '@types/serve-static@1.15.10': - dependencies: - '@types/http-errors': 2.0.5 - '@types/node': 24.10.9 - '@types/send': 0.17.6 - - '@types/sockjs@0.3.36': - dependencies: - '@types/node': 24.10.9 + '@types/node': 26.6.1 '@types/statuses@2.0.6': {} @@ -19082,7 +15652,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.10.9 + '@types/node': 26.6.1 '@types/yargs-parser@21.0.3': {} @@ -19090,40 +15660,40 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2)': + '@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2) + '@typescript-eslint/parser': 8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.70.0 - '@typescript-eslint/type-utils': 8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2) - '@typescript-eslint/utils': 8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2) + '@typescript-eslint/type-utils': 8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/utils': 8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.70.0 - eslint: 10.10.0(jiti@2.7.0) - ignore: 7.0.8 + eslint: 10.10.0(jiti@2.7.0)(supports-color@7.2.0) + ignore: 7.0.9 natural-compare: 1.4.0 - ts-api-utils: 2.5.0(typescript@6.0.2) - typescript: 6.0.2 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2)': + '@typescript-eslint/parser@8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 8.70.0 '@typescript-eslint/types': 8.70.0 - '@typescript-eslint/typescript-estree': 8.70.0(typescript@6.0.2) + '@typescript-eslint/typescript-estree': 8.70.0(supports-color@7.2.0)(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.70.0 - debug: 4.4.3 - eslint: 10.10.0(jiti@2.7.0) - typescript: 6.0.2 + debug: 4.4.3(supports-color@7.2.0) + eslint: 10.10.0(jiti@2.7.0)(supports-color@7.2.0) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.70.0(typescript@6.0.2)': + '@typescript-eslint/project-service@8.70.0(supports-color@7.2.0)(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.70.0(typescript@6.0.2) + '@typescript-eslint/tsconfig-utils': 8.70.0(typescript@6.0.3) '@typescript-eslint/types': 8.70.0 - debug: 4.4.3 - typescript: 6.0.2 + debug: 4.4.3(supports-color@7.2.0) + typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -19132,47 +15702,47 @@ snapshots: '@typescript-eslint/types': 8.70.0 '@typescript-eslint/visitor-keys': 8.70.0 - '@typescript-eslint/tsconfig-utils@8.70.0(typescript@6.0.2)': + '@typescript-eslint/tsconfig-utils@8.70.0(typescript@6.0.3)': dependencies: - typescript: 6.0.2 + typescript: 6.0.3 - '@typescript-eslint/type-utils@8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2)': + '@typescript-eslint/type-utils@8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.70.0 - '@typescript-eslint/typescript-estree': 8.70.0(typescript@6.0.2) - '@typescript-eslint/utils': 8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2) - debug: 4.4.3 - eslint: 10.10.0(jiti@2.7.0) - ts-api-utils: 2.5.0(typescript@6.0.2) - typescript: 6.0.2 + '@typescript-eslint/typescript-estree': 8.70.0(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/utils': 8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + debug: 4.4.3(supports-color@7.2.0) + eslint: 10.10.0(jiti@2.7.0)(supports-color@7.2.0) + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.70.0': {} - '@typescript-eslint/typescript-estree@8.70.0(typescript@6.0.2)': + '@typescript-eslint/typescript-estree@8.70.0(supports-color@7.2.0)(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.70.0(typescript@6.0.2) - '@typescript-eslint/tsconfig-utils': 8.70.0(typescript@6.0.2) + '@typescript-eslint/project-service': 8.70.0(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.70.0(typescript@6.0.3) '@typescript-eslint/types': 8.70.0 '@typescript-eslint/visitor-keys': 8.70.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) minimatch: 10.2.6 - semver: 7.7.4 + semver: 7.8.5 tinyglobby: 0.2.17 - ts-api-utils: 2.5.0(typescript@6.0.2) - typescript: 6.0.2 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2)': + '@typescript-eslint/utils@8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0)) '@typescript-eslint/scope-manager': 8.70.0 '@typescript-eslint/types': 8.70.0 - '@typescript-eslint/typescript-estree': 8.70.0(typescript@6.0.2) - eslint: 10.10.0(jiti@2.7.0) - typescript: 6.0.2 + '@typescript-eslint/typescript-estree': 8.70.0(supports-color@7.2.0)(typescript@6.0.3) + eslint: 10.10.0(jiti@2.7.0)(supports-color@7.2.0) + typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -19181,157 +15751,121 @@ snapshots: '@typescript-eslint/types': 8.70.0 eslint-visitor-keys: 5.0.1 - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260130.1': + '@typescript/typescript-aix-ppc64@7.0.2': optional: true - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260224.1': + '@typescript/typescript-darwin-arm64@7.0.2': optional: true - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260130.1': + '@typescript/typescript-darwin-x64@7.0.2': optional: true - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260224.1': + '@typescript/typescript-freebsd-arm64@7.0.2': optional: true - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260130.1': + '@typescript/typescript-freebsd-x64@7.0.2': optional: true - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260224.1': + '@typescript/typescript-linux-arm64@7.0.2': optional: true - '@typescript/native-preview-linux-arm@7.0.0-dev.20260130.1': + '@typescript/typescript-linux-arm@7.0.2': optional: true - '@typescript/native-preview-linux-arm@7.0.0-dev.20260224.1': + '@typescript/typescript-linux-loong64@7.0.2': optional: true - '@typescript/native-preview-linux-x64@7.0.0-dev.20260130.1': + '@typescript/typescript-linux-mips64el@7.0.2': optional: true - '@typescript/native-preview-linux-x64@7.0.0-dev.20260224.1': + '@typescript/typescript-linux-ppc64@7.0.2': optional: true - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260130.1': + '@typescript/typescript-linux-riscv64@7.0.2': optional: true - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260224.1': + '@typescript/typescript-linux-s390x@7.0.2': optional: true - '@typescript/native-preview-win32-x64@7.0.0-dev.20260130.1': + '@typescript/typescript-linux-x64@7.0.2': optional: true - '@typescript/native-preview-win32-x64@7.0.0-dev.20260224.1': + '@typescript/typescript-netbsd-arm64@7.0.2': optional: true - '@typescript/native-preview@7.0.0-dev.20260130.1': - optionalDependencies: - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260130.1 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260130.1 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20260130.1 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260130.1 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20260130.1 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260130.1 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20260130.1 + '@typescript/typescript-netbsd-x64@7.0.2': + optional: true - '@typescript/native-preview@7.0.0-dev.20260224.1': - optionalDependencies: - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260224.1 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260224.1 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20260224.1 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260224.1 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20260224.1 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260224.1 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20260224.1 + '@typescript/typescript-openbsd-arm64@7.0.2': + optional: true - '@typescript/vfs@1.6.4(typescript@5.4.5)': + '@typescript/typescript-openbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-sunos-x64@7.0.2': + optional: true + + '@typescript/typescript-win32-arm64@7.0.2': + optional: true + + '@typescript/typescript-win32-x64@7.0.2': + optional: true + + '@typescript/vfs@1.6.4(supports-color@7.2.0)(typescript@5.4.5)': dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) typescript: 5.4.5 transitivePeerDependencies: - supports-color '@ungap/structured-clone@1.4.0': {} - '@vitest/coverage-v8@4.1.11(vitest@4.1.11)': + '@vitest/coverage-v8@5.0.1(vitest@5.0.1)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.1.11 - ast-v8-to-istanbul: 1.0.5 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-reports: 3.2.0 - magicast: 0.5.2 - obug: 2.1.1 + '@vitest/istanbul-lib-coverage': 1.0.1 + '@vitest/istanbul-lib-report': 1.0.1 + ast-v8-to-istanbul: 1.0.6 + magicast: 0.5.5 + obug: 2.2.1 std-env: 4.2.0 tinyrainbow: 3.1.1 - vitest: 4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.9.0)) + vitest: 5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@6.0.3))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) - '@vitest/expect@4.1.11': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@vitest/spy': 4.1.11 - '@vitest/utils': 4.1.11 - chai: 6.2.2 - tinyrainbow: 3.1.1 + '@vitest/istanbul-lib-coverage@1.0.1': {} - '@vitest/mocker@4.1.11(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0))': + '@vitest/istanbul-lib-report@1.0.1': dependencies: - '@vitest/spy': 4.1.11 + '@vitest/istanbul-lib-coverage': 1.0.1 + + '@vitest/mocker@5.0.1(msw@2.15.0(@types/node@26.6.1)(typescript@6.0.3))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1))': + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + '@vitest/spy': 5.0.1 estree-walker: 3.0.3 - magic-string: 0.30.21 + magic-string: 1.4.1 optionalDependencies: - msw: 2.12.10(@types/node@25.3.0)(typescript@5.4.5) - vite: 8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0) + msw: 2.15.0(@types/node@26.6.1)(typescript@6.0.3) + vite: 8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1) - '@vitest/mocker@4.1.11(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.9.0))': + '@vitest/mocker@5.0.1(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1))': dependencies: - '@vitest/spy': 4.1.11 + '@jridgewell/trace-mapping': 0.3.31 + '@vitest/spy': 5.0.1 estree-walker: 3.0.3 - magic-string: 0.30.21 + magic-string: 1.4.1 optionalDependencies: - msw: 2.12.10(@types/node@25.3.0)(typescript@6.0.2) - vite: 7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.9.0) + msw: 2.15.0(@types/node@26.6.1)(typescript@7.0.2) + vite: 8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1) - '@vitest/mocker@4.1.11(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0))': + '@vitest/spy@5.0.1': {} + + '@volar/kit@2.4.28(typescript@6.0.3)': dependencies: - '@vitest/spy': 4.1.11 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - msw: 2.12.10(@types/node@25.3.0)(typescript@6.0.2) - vite: 8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0) - - '@vitest/pretty-format@4.1.11': - dependencies: - tinyrainbow: 3.1.1 - - '@vitest/runner@4.1.11': - dependencies: - '@vitest/utils': 4.1.11 - pathe: 2.0.3 - - '@vitest/snapshot@4.1.11': - dependencies: - '@vitest/pretty-format': 4.1.11 - '@vitest/utils': 4.1.11 - magic-string: 0.30.21 - pathe: 2.0.3 - - '@vitest/spy@4.1.11': {} - - '@vitest/utils@4.1.11': - dependencies: - '@vitest/pretty-format': 4.1.11 - convert-source-map: 2.0.0 - tinyrainbow: 3.1.1 - - '@volar/kit@2.4.28(typescript@6.0.2)': - dependencies: - '@volar/language-service': 2.4.28 - '@volar/typescript': 2.4.28 + '@volar/language-service': 2.4.28(typescript@6.0.3) + '@volar/typescript': 2.4.28(typescript@6.0.3) typesafe-path: 0.2.2 - typescript: 6.0.2 + typescript: 6.0.3 vscode-languageserver-textdocument: 1.0.14 vscode-uri: 3.2.0 @@ -19339,32 +15873,38 @@ snapshots: dependencies: '@volar/source-map': 2.4.28 - '@volar/language-server@2.4.28': + '@volar/language-server@2.4.28(typescript@6.0.3)': dependencies: '@volar/language-core': 2.4.28 - '@volar/language-service': 2.4.28 - '@volar/typescript': 2.4.28 + '@volar/language-service': 2.4.28(typescript@6.0.3) + '@volar/typescript': 2.4.28(typescript@6.0.3) path-browserify: 1.0.1 request-light: 0.7.0 vscode-languageserver: 9.0.1 vscode-languageserver-protocol: 3.18.3 vscode-languageserver-textdocument: 1.0.14 vscode-uri: 3.2.0 + optionalDependencies: + typescript: 6.0.3 - '@volar/language-service@2.4.28': + '@volar/language-service@2.4.28(typescript@6.0.3)': dependencies: '@volar/language-core': 2.4.28 vscode-languageserver-protocol: 3.18.3 vscode-languageserver-textdocument: 1.0.14 vscode-uri: 3.2.0 + optionalDependencies: + typescript: 6.0.3 '@volar/source-map@2.4.28': {} - '@volar/typescript@2.4.28': + '@volar/typescript@2.4.28(typescript@6.0.3)': dependencies: '@volar/language-core': 2.4.28 path-browserify: 1.0.1 vscode-uri: 3.2.0 + optionalDependencies: + typescript: 6.0.3 '@vscode/emmet-helper@2.11.0': dependencies: @@ -19380,9 +15920,7 @@ snapshots: '@webgpu/types@0.1.72': {} - '@xmldom/xmldom@0.8.13': {} - - '@xmldom/xmldom@0.9.10': {} + '@xmldom/xmldom@0.8.15': {} abbrev@4.0.0: {} @@ -19390,45 +15928,27 @@ snapshots: dependencies: event-target-shim: 5.0.1 - accepts@1.3.8: + acorn-jsx@5.3.2(acorn@8.18.0): dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 + acorn: 8.18.0 - acorn-jsx@5.3.2(acorn@8.16.0): - dependencies: - acorn: 8.16.0 + acorn@8.18.0: {} - acorn-walk@8.3.5: - dependencies: - acorn: 8.16.0 - - acorn@8.16.0: {} - - adm-zip@0.6.0: {} + adm-zip@0.6.1: {} agent-base@7.1.4: {} - ajv-draft-04@1.0.0(ajv@8.18.0): + ajv-draft-04@1.0.0(ajv@8.20.0): optionalDependencies: - ajv: 8.18.0 - - ajv-formats@2.1.1(ajv@8.18.0): - optionalDependencies: - ajv: 8.18.0 + ajv: 8.20.0 ajv-formats@3.0.1(@redocly/ajv@8.18.3): optionalDependencies: ajv: '@redocly/ajv@8.18.3' - ajv-i18n@4.2.0(ajv@8.18.0): + ajv-i18n@4.2.0(ajv@8.20.0): dependencies: - ajv: 8.18.0 - - ajv-keywords@5.1.0(ajv@8.18.0): - dependencies: - ajv: 8.18.0 - fast-deep-equal: 3.1.3 + ajv: 8.20.0 ajv@6.15.0: dependencies: @@ -19437,10 +15957,10 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.18.0: + ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.5 + fast-uri: 3.1.8 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -19450,11 +15970,9 @@ snapshots: animejs@4.5.0: {} - ansi-html-community@0.0.8: {} - ansi-regex@5.0.1: {} - ansi-regex@6.2.2: {} + ansi-regex@6.3.0: {} ansi-styles@4.3.0: dependencies: @@ -19471,46 +15989,32 @@ snapshots: anynum@1.0.1: {} - apache-arrow@21.1.0: - dependencies: - '@swc/helpers': 0.5.19 - '@types/command-line-args': 5.2.3 - '@types/command-line-usage': 5.0.4 - '@types/node': 24.10.9 - command-line-args: 6.0.1 - command-line-usage: 7.0.3 - flatbuffers: 25.9.23 - json-bignum: 0.0.3 - tslib: 2.8.1 - transitivePeerDependencies: - - '@75lb/nature' - - app-builder-lib@27.0.0-alpha.7(dmg-builder@27.0.0-alpha.7)(electron-builder-squirrel-windows@27.0.0-alpha.7): + app-builder-lib@27.0.0-alpha.8(dmg-builder@27.0.0-alpha.8)(electron-builder-squirrel-windows@27.0.0-alpha.8)(supports-color@7.2.0): dependencies: '@electron/asar': 4.1.1 '@electron/fuses': 2.1.3 - '@electron/get': 5.1.0 - '@electron/notarize': 3.1.1 - '@electron/osx-sign': 2.4.0 - '@electron/rebuild': 4.2.0 - '@electron/universal': 3.0.4 - '@malept/flatpak-bundler': 0.4.0 + '@electron/get': 5.1.0(supports-color@7.2.0) + '@electron/notarize': 3.1.1(supports-color@7.2.0) + '@electron/osx-sign': 2.4.0(supports-color@7.2.0) + '@electron/rebuild': 4.2.0(supports-color@7.2.0) + '@electron/universal': 3.0.4(supports-color@7.2.0) + '@malept/flatpak-bundler': 0.4.0(supports-color@7.2.0) '@noble/hashes': 2.4.0 '@peculiar/webcrypto': 1.7.1 '@types/fs-extra': 9.0.13 - ajv: 8.18.0 + ajv: 8.20.0 asn1js: 3.0.10 - builder-util: 27.0.0-alpha.7 - builder-util-runtime: 10.0.0-alpha.6 + builder-util: 27.0.0-alpha.8(supports-color@7.2.0) + builder-util-runtime: 10.0.0-alpha.7(supports-color@7.2.0) chromium-pickle-js: 0.2.0 ci-info: 4.3.1 - debug: 4.4.3 - dmg-builder: 27.0.0-alpha.7(electron-builder-squirrel-windows@27.0.0-alpha.7) - dotenv: 16.6.1 - dotenv-expand: 11.0.7 + debug: 4.4.3(supports-color@7.2.0) + dmg-builder: 27.0.0-alpha.8(electron-builder-squirrel-windows@27.0.0-alpha.8)(supports-color@7.2.0) + dotenv: 17.4.2 + dotenv-expand: 13.0.0 ejs: 3.1.10 - electron-builder-squirrel-windows: 27.0.0-alpha.7(dmg-builder@27.0.0-alpha.7) - electron-publish: 27.0.0-alpha.7 + electron-builder-squirrel-windows: 27.0.0-alpha.8(dmg-builder@27.0.0-alpha.8)(supports-color@7.2.0) + electron-publish: 27.0.0-alpha.8(supports-color@7.2.0) fs-extra: 11.4.0 hosted-git-info: 4.1.0 isbinaryfile: 5.0.7 @@ -19523,37 +16027,30 @@ snapshots: plist: 3.1.0 proper-lockfile: 4.1.2 resedit: 1.7.2 - semver: 7.7.4 + semver: 7.8.5 tar: 7.5.22 temp-file: 3.4.0 tiny-async-pool: 1.3.0 - undici: 7.29.0 + undici: 7.29.1 unzipper: 0.12.5 which: 5.0.0 transitivePeerDependencies: - supports-color - archiver-utils@5.0.2: + archiver@8.0.0: dependencies: - glob: 10.5.0 - graceful-fs: 4.2.11 - is-stream: 2.0.1 - lazystream: 1.0.1 - lodash: 4.18.1 - normalize-path: 3.0.0 - readable-stream: 4.7.0 - - archiver@7.0.1: - dependencies: - archiver-utils: 5.0.2 async: 3.2.6 buffer-crc32: 1.0.0 + is-stream: 4.0.1 + lazystream: 1.0.1 + normalize-path: 3.0.0 readable-stream: 4.7.0 - readdir-glob: 1.1.3 - tar-stream: 3.1.7 - zip-stream: 6.0.1 + readdir-glob: 3.0.0 + tar-stream: 3.2.1 + zip-stream: 7.0.5 transitivePeerDependencies: - bare-abort-controller + - bare-buffer - react-native-b4a arg@5.0.2: {} @@ -19562,34 +16059,28 @@ snapshots: dependencies: '@phc/format': 1.0.0 cross-env: 10.1.0 - node-addon-api: 8.5.0 + node-addon-api: 8.9.2 node-gyp-build: 4.8.4 argparse@2.0.1: {} + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + aria-query@5.3.2: {} - array-back@6.2.2: {} - - array-flatten@1.1.1: {} - array-iterate@2.0.1: {} asn1js@3.0.10: dependencies: pvtsutils: 1.3.6 - pvutils: 1.1.5 - tslib: 2.8.1 - - asn1js@3.0.7: - dependencies: - pvtsutils: 1.3.6 - pvutils: 1.1.5 + pvutils: 1.2.0 tslib: 2.8.1 assertion-error@2.0.1: {} - ast-v8-to-istanbul@1.0.5: + ast-v8-to-istanbul@1.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 @@ -19597,22 +16088,21 @@ snapshots: astring@1.9.0: {} - astro-expressive-code@0.44.2(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.3.0)(ioredis@5.9.3)(jiti@2.7.0)(rollup@4.63.1)(tsx@4.21.0)(yaml@2.9.0)): + astro-expressive-code@0.44.2(astro@7.3.2(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.1)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)): dependencies: - astro: 7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.3.0)(ioredis@5.9.3)(jiti@2.7.0)(rollup@4.63.1)(tsx@4.21.0)(yaml@2.9.0) + astro: 7.3.2(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.1)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1) rehype-expressive-code: 0.44.2 url-extras: 0.1.0 - astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.3.0)(ioredis@5.9.3)(jiti@2.7.0)(rollup@4.63.1)(tsx@4.21.0)(yaml@2.9.0): + astro@7.3.2(@astrojs/markdown-remark@7.3.1(supports-color@7.2.0))(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@types/node@26.6.1)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1): dependencies: - '@astrojs/compiler-rs': 0.3.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3) - '@astrojs/internal-helpers': 0.10.1 - '@astrojs/markdown-satteri': 0.3.4 + '@astrojs/compiler-rs': 0.4.1(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) + '@astrojs/internal-helpers': 0.11.0 + '@astrojs/markdown-satteri': 0.4.1 '@astrojs/telemetry': 3.3.3 '@capsizecss/unpack': 4.0.1 - '@clack/prompts': 1.7.0 + '@clack/prompts': 1.8.1 '@oslojs/encoding': 1.1.0 - '@rollup/pluginutils': 5.4.0(rollup@4.63.1) am-i-vibing: 0.4.0 aria-query: 5.3.2 axobject-query: 4.1.0 @@ -19621,10 +16111,11 @@ snapshots: common-ancestor-path: 2.0.0 cookie: 2.0.1 devalue: 5.9.2 - diff: 8.0.4 + diff: 9.0.0 dset: 3.1.4 es-module-lexer: 2.3.2 esbuild: 0.28.2 + find-proc: 0.1.0 flattie: 1.1.1 fontace: 0.4.1 get-tsconfig: 5.0.0-beta.4 @@ -19633,17 +16124,17 @@ snapshots: http-cache-semantics: 4.2.0 js-yaml: 4.3.2 jsonc-parser: 3.3.1 - magic-string: 0.30.21 - magicast: 0.5.2 + magic-string: 1.4.1 + magicast: 0.5.5 mrmime: 2.0.1 neotraverse: 1.0.1 - obug: 2.1.1 + obug: 2.2.1 p-limit: 7.3.2 p-queue: 9.3.3 package-manager-detector: 1.8.0 piccolore: 0.1.3 picomatch: 4.0.7 - semver: 7.7.4 + semver: 7.8.5 shiki: 4.4.3 smol-toml: 1.8.0 svgo: 4.1.0 @@ -19652,15 +16143,15 @@ snapshots: tinyglobby: 0.2.17 ultrahtml: 1.7.0 unifont: 0.7.5 - unstorage: 1.17.5(ioredis@5.9.3) - vite: 8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0) - vitefu: 1.1.3(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + unstorage: 1.17.5 + vite: 8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1) + vitefu: 1.1.3(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) xxhash-wasm: 1.1.0 yargs-parser: 22.0.0 - zod: 4.3.6 + zod: 4.6.5 optionalDependencies: - '@astrojs/markdown-remark': 7.2.1 - sharp: 0.35.4(@types/node@25.3.0) + '@astrojs/markdown-remark': 7.3.1(supports-color@7.2.0) + sharp: 0.35.4(@types/node@26.6.1) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -19686,7 +16177,6 @@ snapshots: - ioredis - jiti - less - - rollup - sass - sass-embedded - stylus @@ -19706,51 +16196,44 @@ snapshots: atomic-sleep@1.0.0: {} - autoprefixer@10.4.24(postcss@8.5.26): + autoprefixer@10.6.1(postcss@8.5.28): dependencies: - browserslist: 4.28.1 + browserslist: 4.29.0 caniuse-lite: 1.0.30001810 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - await-lock@2.2.2: {} + await-lock@3.0.0: {} aws4@1.13.2: {} axobject-query@4.1.0: {} - b4a@1.8.0: {} + b4a@1.9.0: {} - babel-plugin-macros@3.1.0: + babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0): dependencies: - '@babel/runtime': 7.29.7 - cosmiconfig: 7.1.0 - resolve: 1.22.12 - optional: true - - babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.29.6): - dependencies: - '@babel/compat-data': 7.29.0 - '@babel/core': 7.29.6 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.6) - semver: 7.7.4 + '@babel/compat-data': 7.29.7 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + semver: 7.8.5 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.14.0(@babel/core@7.29.6): + babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0): dependencies: - '@babel/core': 7.29.6 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.6) - core-js-compat: 3.48.0 + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + core-js-compat: 3.50.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.29.6): + babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0): dependencies: - '@babel/core': 7.29.6 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.6) + '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) transitivePeerDependencies: - supports-color @@ -19760,13 +16243,38 @@ snapshots: balanced-match@4.0.4: {} - bare-events@2.8.2: {} + bare-events@2.9.2: {} + + bare-fs@4.8.1: + dependencies: + bare-events: 2.9.2 + bare-path: 3.1.2 + bare-stream: 2.13.4(bare-events@2.9.2) + bare-url: 2.5.4 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + bare-path@3.1.2: {} + + bare-stream@2.13.4(bare-events@2.9.2): + dependencies: + b4a: 1.9.0 + streamx: 2.28.1 + teex: 1.0.1 + optionalDependencies: + bare-events: 2.9.2 + transitivePeerDependencies: + - react-native-b4a + + bare-url@2.5.4: + dependencies: + bare-path: 3.1.2 base64-js@1.5.1: {} - baseline-browser-mapping@2.10.0: {} - - batch@0.6.1: {} + baseline-browser-mapping@2.11.24: {} bcp-47-match@2.0.3: {} @@ -19776,57 +16284,24 @@ snapshots: is-alphanumerical: 2.0.1 is-decimal: 2.0.1 - bidi-js@1.0.3: - dependencies: - require-from-string: 2.0.2 - optional: true - binary-extensions@2.3.0: {} - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - bluebird@3.7.2: {} - body-parser@1.20.6: - 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.1 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.15.3 - raw-body: 2.5.3 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - bonjour-service@1.3.0: - dependencies: - fast-deep-equal: 3.1.3 - multicast-dns: 7.2.5 - boolbase@1.0.0: {} bowser@2.14.1: {} - brace-expansion@1.1.18: + brace-expansion@1.1.21: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.1.4: + brace-expansion@2.1.7: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.9: + brace-expansion@5.0.12: dependencies: balanced-match: 4.0.4 @@ -19834,13 +16309,13 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.28.1: + browserslist@4.29.0: dependencies: - baseline-browser-mapping: 2.10.0 + baseline-browser-mapping: 2.11.24 caniuse-lite: 1.0.30001810 - electron-to-chromium: 1.5.302 - node-releases: 2.0.27 - update-browserslist-db: 1.2.3(browserslist@4.28.1) + electron-to-chromium: 1.5.430 + node-releases: 2.0.55 + update-browserslist-db: 1.3.3(browserslist@4.29.0) buffer-crc32@1.0.0: {} @@ -19848,40 +16323,35 @@ snapshots: buffer-image-size@0.6.4: dependencies: - '@types/node': 24.10.9 + '@types/node': 26.6.1 buffer@5.6.0: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - builder-util-runtime@10.0.0-alpha.6: + builder-util-runtime@10.0.0-alpha.7(supports-color@7.2.0): dependencies: - debug: 4.4.3 - sax: 1.6.0 + debug: 4.4.3(supports-color@7.2.0) + sax: 1.6.1 transitivePeerDependencies: - supports-color - builder-util@27.0.0-alpha.7: + builder-util@27.0.0-alpha.8(supports-color@7.2.0): dependencies: '@types/debug': 4.1.13 - builder-util-runtime: 10.0.0-alpha.6 + builder-util-runtime: 10.0.0-alpha.7(supports-color@7.2.0) chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) fs-extra: 11.4.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 + http-proxy-agent: 7.0.2(supports-color@7.2.0) + https-proxy-agent: 7.0.6(supports-color@7.2.0) js-yaml: 4.3.2 sanitize-filename: 1.6.4 source-map-support: 0.5.21 @@ -19891,12 +16361,6 @@ snapshots: transitivePeerDependencies: - supports-color - bundle-name@4.1.0: - dependencies: - run-applescript: 7.1.0 - - bytes@3.1.2: {} - bytestreamjs@2.0.1: {} cacheable@2.5.0: @@ -19912,47 +16376,31 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - callsites@3.1.0: {} - camelcase-keys@9.1.3: - dependencies: - camelcase: 8.0.0 - map-obj: 5.0.0 - quick-lru: 6.1.2 - type-fest: 4.41.0 - camelcase@5.3.1: {} camelcase@6.3.0: {} - camelcase@8.0.0: {} - caniuse-lite@1.0.30001810: {} - cassandra-driver@4.8.0: + cassandra-driver@4.9.0: dependencies: - '@types/node': 18.19.130 - adm-zip: 0.6.0 + '@types/node': 20.19.43 + adm-zip: 0.6.1 long: 5.2.5 ccount@2.0.1: {} chai@6.2.2: {} - chalk-template@0.4.0: - dependencies: - chalk: 4.1.2 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.6.2: {} + character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} @@ -19961,18 +16409,6 @@ snapshots: character-reference-invalid@2.0.1: {} - chokidar@3.5.1: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.5.0 - optionalDependencies: - fsevents: 2.3.3 - chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -19997,15 +16433,17 @@ snapshots: ci-info@4.4.0: {} - cli-cursor@3.1.0: + cli-cursor@5.0.0: dependencies: - restore-cursor: 3.1.0 + restore-cursor: 5.1.0 - cli-spinners@2.9.2: {} + cli-spinners@3.4.0: {} - cli-table@0.3.11: + cli-table3@0.6.5: dependencies: - colors: 1.0.3 + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 cli-width@4.1.0: {} @@ -20023,23 +16461,27 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone@1.0.4: {} + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 clsx@2.1.1: {} - cluster-key-slot@1.1.2: {} + cluster-key-slot@1.1.1: {} code-block-writer@13.0.3: {} codemirror@6.0.2: dependencies: - '@codemirror/autocomplete': 6.20.2 - '@codemirror/commands': 6.10.3 - '@codemirror/language': 6.12.3 - '@codemirror/lint': 6.9.6 - '@codemirror/search': 6.7.0 - '@codemirror/state': 6.6.0 - '@codemirror/view': 6.43.0 + '@codemirror/autocomplete': 6.20.3 + '@codemirror/commands': 6.11.1 + '@codemirror/language': 6.12.4 + '@codemirror/lint': 6.9.7 + '@codemirror/search': 6.7.2 + '@codemirror/state': 6.7.5 + '@codemirror/view': 6.43.12 collapse-white-space@2.1.0: {} @@ -20053,9 +16495,7 @@ snapshots: colorette@2.0.20: {} - colorjs.io@0.6.1: {} - - colors@1.0.3: {} + colorjs.io@0.7.1: {} combined-stream@1.0.8: dependencies: @@ -20065,126 +16505,75 @@ snapshots: comma-separated-tokens@2.0.3: {} - command-line-args@6.0.1: - dependencies: - array-back: 6.2.2 - find-replace: 5.0.2 - lodash.camelcase: 4.3.0 - typical: 7.3.0 - - command-line-usage@7.0.3: - dependencies: - array-back: 6.2.2 - chalk-template: 0.4.0 - table-layout: 4.1.1 - typical: 7.3.0 - - commander@10.0.1: {} - commander@11.1.0: {} commander@13.1.0: {} + commander@14.0.3: {} + + commander@15.0.0: {} + commander@5.1.0: {} commander@7.2.0: {} - commander@8.3.0: {} - commander@9.5.0: optional: true common-ancestor-path@2.0.0: {} - compress-commons@6.0.2: + compress-commons@7.0.1: dependencies: crc-32: 1.2.2 - crc32-stream: 6.0.0 - is-stream: 2.0.1 + crc32-stream: 7.0.1 + is-stream: 4.0.1 normalize-path: 3.0.0 readable-stream: 4.7.0 - compressible@2.0.18: - dependencies: - mime-db: 1.54.0 - - compression@1.8.1: - dependencies: - bytes: 3.1.2 - compressible: 2.0.18 - debug: 2.6.9 - negotiator: 0.6.4 - on-headers: 1.1.0 - safe-buffer: 5.2.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - concat-map@0.0.1: {} - connect-history-api-fallback@2.0.0: {} - - content-disposition@0.5.4: - dependencies: - safe-buffer: 5.2.1 - - content-type@1.0.5: {} - convert-source-map@2.0.0: {} cookie-es@1.2.3: {} - cookie-signature@1.0.7: {} - - cookie@0.7.2: {} - cookie@1.1.1: {} cookie@2.0.1: {} - core-js-compat@3.48.0: + core-js-compat@3.50.0: dependencies: - browserslist: 4.28.1 + browserslist: 4.29.0 - core-js@3.48.0: {} + core-js@3.50.0: {} core-util-is@1.0.3: {} - cosmiconfig@7.1.0: - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.1 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.3 - optional: true - - cosmiconfig@8.3.6(typescript@6.0.2): + cosmiconfig@8.3.6(typescript@7.0.2): dependencies: import-fresh: 3.3.1 js-yaml: 4.3.2 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - cosmiconfig@9.0.0(typescript@6.0.2): + cosmiconfig@9.0.2(typescript@7.0.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.3.2 parse-json: 5.2.0 optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 crc-32@1.2.2: {} - crc32-stream@6.0.0: + crc32-stream@7.0.1: dependencies: crc-32: 1.2.2 readable-stream: 4.7.0 - crelt@1.0.6: {} + crelt@1.0.7: {} cross-dirname@0.1.0: optional: true @@ -20208,21 +16597,21 @@ snapshots: dependencies: type-fest: 1.4.0 - css-blank-pseudo@8.0.1(postcss@8.5.26): + css-blank-pseudo@8.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.26 - postcss-selector-parser: 7.1.1 + postcss: 8.5.28 + postcss-selector-parser: 7.1.6 - css-has-pseudo@8.0.0(postcss@8.5.26): + css-has-pseudo@8.0.1(postcss@8.5.28): dependencies: - '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.26 - postcss-selector-parser: 7.1.1 + '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.6) + postcss: 8.5.28 + postcss-selector-parser: 7.1.6 postcss-value-parser: 4.2.0 - css-prefers-color-scheme@11.0.0(postcss@8.5.26): + css-prefers-color-scheme@11.0.1(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 css-select@5.2.2: dependencies: @@ -20261,7 +16650,7 @@ snapshots: css-what@7.0.0: {} - cssdb@8.8.0: {} + cssdb@8.11.0: {} cssesc@3.0.0: {} @@ -20269,108 +16658,65 @@ snapshots: dependencies: css-tree: 2.2.1 - cssstyle@6.2.0: - dependencies: - '@asamuzakjp/css-color': 5.1.11 - '@csstools/css-syntax-patches-for-csstree': 1.1.9(css-tree@3.2.1) - css-tree: 3.2.1 - lru-cache: 11.5.2 - optional: true - csstype@3.2.3: {} - data-urls@7.0.0(@noble/hashes@2.4.0): - dependencies: - whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.1(@noble/hashes@2.4.0) - transitivePeerDependencies: - - '@noble/hashes' - optional: true - - date-fns-jalali@4.1.0-0: {} - - date-fns@3.6.0: {} - - date-fns@4.1.0: {} + date-fns@4.4.0: {} dateformat@4.6.3: {} - debounce@1.2.1: {} - - debug@2.6.9: - dependencies: - ms: 2.0.0 - - debug@4.4.3: + debug@4.4.3(supports-color@7.2.0): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 7.2.0 decamelize@1.2.0: {} - decimal.js@10.6.0: {} - decode-named-character-reference@1.3.0: dependencies: character-entities: 2.0.2 deep-is@0.1.4: {} - deepfilternet3-noise-filter@1.2.1(livekit-client@fluxer_app+pkgs+livekit-client): + deepfilternet3-noise-filter@1.3.0(livekit-client@fluxer_app+pkgs+livekit-client): dependencies: livekit-client: link:fluxer_app/pkgs/livekit-client deepmerge@4.3.1: {} - default-browser-id@5.0.1: {} - - default-browser@5.5.0: - dependencies: - bundle-name: 4.1.0 - default-browser-id: 5.0.1 - - defaults@1.0.4: - dependencies: - clone: 1.0.4 - - define-lazy-prop@3.0.0: {} - defu@6.1.7: {} delayed-stream@1.0.0: {} denque@2.1.0: {} - depd@1.1.2: {} - depd@2.0.0: {} dequal@2.0.3: {} destr@2.0.5: {} - destroy@1.2.0: {} + detect-libc@1.0.3: {} detect-libc@2.1.2: {} - detect-node@2.1.0: {} - devalue@5.9.2: {} devlop@1.1.0: dependencies: dequal: 2.0.3 - diff@8.0.4: {} + diff@9.0.0: {} dijkstrajs@1.0.3: {} direction@2.0.1: {} - dmg-builder@27.0.0-alpha.7(electron-builder-squirrel-windows@27.0.0-alpha.7): + dmg-builder@27.0.0-alpha.8(electron-builder-squirrel-windows@27.0.0-alpha.8)(supports-color@7.2.0): dependencies: - app-builder-lib: 27.0.0-alpha.7(dmg-builder@27.0.0-alpha.7)(electron-builder-squirrel-windows@27.0.0-alpha.7) - builder-util: 27.0.0-alpha.7 - builder-util-runtime: 10.0.0-alpha.6 + app-builder-lib: 27.0.0-alpha.8(dmg-builder@27.0.0-alpha.8)(electron-builder-squirrel-windows@27.0.0-alpha.8)(supports-color@7.2.0) + builder-util: 27.0.0-alpha.8(supports-color@7.2.0) + builder-util-runtime: 10.0.0-alpha.7(supports-color@7.2.0) fs-extra: 11.4.0 js-yaml: 4.3.2 transitivePeerDependencies: @@ -20387,10 +16733,6 @@ snapshots: dependencies: dnd-core: 16.0.1 - dns-packet@5.6.1: - dependencies: - '@leichtgewicht/ip-codec': 2.0.5 - dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -20414,11 +16756,11 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 - dotenv-expand@11.0.7: + dotenv-expand@13.0.0: dependencies: - dotenv: 16.6.1 + dotenv: 17.4.2 - dotenv@16.6.1: {} + dotenv@17.4.2: {} dset@3.1.4: {} @@ -20432,50 +16774,46 @@ snapshots: dependencies: readable-stream: 2.3.8 - duplexer@0.1.2: {} - - eastasianwidth@0.2.0: {} - ee-first@1.1.1: {} ejs@3.1.10: dependencies: jake: 10.9.4 - electron-builder-squirrel-windows@27.0.0-alpha.7(dmg-builder@27.0.0-alpha.7): + electron-builder-squirrel-windows@27.0.0-alpha.8(dmg-builder@27.0.0-alpha.8)(supports-color@7.2.0): dependencies: - app-builder-lib: 27.0.0-alpha.7(dmg-builder@27.0.0-alpha.7)(electron-builder-squirrel-windows@27.0.0-alpha.7) - builder-util: 27.0.0-alpha.7 - electron-winstaller: 5.4.0 + app-builder-lib: 27.0.0-alpha.8(dmg-builder@27.0.0-alpha.8)(electron-builder-squirrel-windows@27.0.0-alpha.8)(supports-color@7.2.0) + builder-util: 27.0.0-alpha.8(supports-color@7.2.0) + electron-winstaller: 5.4.0(supports-color@7.2.0) transitivePeerDependencies: - dmg-builder - supports-color - electron-builder@27.0.0-alpha.7(electron-builder-squirrel-windows@27.0.0-alpha.7): + electron-builder@27.0.0-alpha.8(electron-builder-squirrel-windows@27.0.0-alpha.8)(supports-color@7.2.0): dependencies: - app-builder-lib: 27.0.0-alpha.7(dmg-builder@27.0.0-alpha.7)(electron-builder-squirrel-windows@27.0.0-alpha.7) - builder-util: 27.0.0-alpha.7 - builder-util-runtime: 10.0.0-alpha.6 + app-builder-lib: 27.0.0-alpha.8(dmg-builder@27.0.0-alpha.8)(electron-builder-squirrel-windows@27.0.0-alpha.8)(supports-color@7.2.0) + builder-util: 27.0.0-alpha.8(supports-color@7.2.0) + builder-util-runtime: 10.0.0-alpha.7(supports-color@7.2.0) chalk: 4.1.2 ci-info: 4.4.0 - dmg-builder: 27.0.0-alpha.7(electron-builder-squirrel-windows@27.0.0-alpha.7) - electron-publish: 27.0.0-alpha.7 + dmg-builder: 27.0.0-alpha.8(electron-builder-squirrel-windows@27.0.0-alpha.8)(supports-color@7.2.0) + electron-publish: 27.0.0-alpha.8(supports-color@7.2.0) fs-extra: 11.4.0 simple-update-notifier: 2.0.0 - yargs: 17.7.2 + yargs: 17.7.3 transitivePeerDependencies: - electron-builder-squirrel-windows - supports-color - electron-log@5.4.3: + electron-log@5.4.4: optional: true - electron-publish@27.0.0-alpha.7: + electron-publish@27.0.0-alpha.8(supports-color@7.2.0): dependencies: '@types/fs-extra': 9.0.13 aws4: 1.13.2 - builder-util: 27.0.0-alpha.7 - builder-util-runtime: 10.0.0-alpha.6 + builder-util: 27.0.0-alpha.8(supports-color@7.2.0) + builder-util-runtime: 10.0.0-alpha.7(supports-color@7.2.0) chalk: 4.1.2 form-data: 4.0.6 fs-extra: 11.4.0 @@ -20484,25 +16822,25 @@ snapshots: transitivePeerDependencies: - supports-color - electron-to-chromium@1.5.302: {} + electron-to-chromium@1.5.430: {} - electron-winstaller@5.4.0: + electron-winstaller@5.4.0(supports-color@7.2.0): dependencies: '@electron/asar': 3.4.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) fs-extra: 7.0.1 lodash: 4.18.1 temp: 0.9.4 optionalDependencies: - '@electron/windows-sign': 1.2.2 + '@electron/windows-sign': 1.2.2(supports-color@7.2.0) transitivePeerDependencies: - supports-color - electron@44.1.1: + electron@44.4.1(supports-color@7.2.0): dependencies: '@electron-internal/extract-zip': 1.0.5 - '@electron/get': 5.1.0 - '@types/node': 24.10.9 + '@electron/get': 5.1.0(supports-color@7.2.0) + '@types/node': 24.13.5 transitivePeerDependencies: - supports-color @@ -20513,14 +16851,14 @@ snapshots: emoji-regex@10.6.0: {} - emoji-regex@8.0.0: {} + emoji-regex@11.0.0: {} - emoji-regex@9.2.2: {} + emoji-regex@8.0.0: {} emscripten-wasm-loader@3.0.3(patch_hash=65d0567cd2da382764aee3839187feb5284662c4a9f0b755f1e52163c5e36399): dependencies: getroot: 1.0.0 - nanoid: 3.3.18 + nanoid: 3.3.19 unixify: 1.0.0 encodeurl@2.0.0: {} @@ -20529,10 +16867,10 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.19.0: + enhanced-resolve@5.25.1: dependencies: graceful-fs: 4.2.11 - tapable: 2.3.0 + tapable: 2.3.3 entities@4.5.0: {} @@ -20540,9 +16878,6 @@ snapshots: entities@7.0.1: {} - entities@8.0.0: - optional: true - env-paths@2.2.1: {} env-paths@3.0.0: {} @@ -20559,7 +16894,7 @@ snapshots: es-module-lexer@2.3.2: {} - es-object-atoms@1.1.1: + es-object-atoms@1.1.2: dependencies: es-errors: 1.3.0 @@ -20580,68 +16915,10 @@ snapshots: esast-util-from-js@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - acorn: 8.16.0 + acorn: 8.18.0 esast-util-from-estree: 2.0.0 vfile-message: 4.0.3 - esbuild@0.25.12: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.12 - '@esbuild/android-arm': 0.25.12 - '@esbuild/android-arm64': 0.25.12 - '@esbuild/android-x64': 0.25.12 - '@esbuild/darwin-arm64': 0.25.12 - '@esbuild/darwin-x64': 0.25.12 - '@esbuild/freebsd-arm64': 0.25.12 - '@esbuild/freebsd-x64': 0.25.12 - '@esbuild/linux-arm': 0.25.12 - '@esbuild/linux-arm64': 0.25.12 - '@esbuild/linux-ia32': 0.25.12 - '@esbuild/linux-loong64': 0.25.12 - '@esbuild/linux-mips64el': 0.25.12 - '@esbuild/linux-ppc64': 0.25.12 - '@esbuild/linux-riscv64': 0.25.12 - '@esbuild/linux-s390x': 0.25.12 - '@esbuild/linux-x64': 0.25.12 - '@esbuild/netbsd-arm64': 0.25.12 - '@esbuild/netbsd-x64': 0.25.12 - '@esbuild/openbsd-arm64': 0.25.12 - '@esbuild/openbsd-x64': 0.25.12 - '@esbuild/openharmony-arm64': 0.25.12 - '@esbuild/sunos-x64': 0.25.12 - '@esbuild/win32-arm64': 0.25.12 - '@esbuild/win32-ia32': 0.25.12 - '@esbuild/win32-x64': 0.25.12 - - esbuild@0.27.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.2 - '@esbuild/android-arm': 0.27.2 - '@esbuild/android-arm64': 0.27.2 - '@esbuild/android-x64': 0.27.2 - '@esbuild/darwin-arm64': 0.27.2 - '@esbuild/darwin-x64': 0.27.2 - '@esbuild/freebsd-arm64': 0.27.2 - '@esbuild/freebsd-x64': 0.27.2 - '@esbuild/linux-arm': 0.27.2 - '@esbuild/linux-arm64': 0.27.2 - '@esbuild/linux-ia32': 0.27.2 - '@esbuild/linux-loong64': 0.27.2 - '@esbuild/linux-mips64el': 0.27.2 - '@esbuild/linux-ppc64': 0.27.2 - '@esbuild/linux-riscv64': 0.27.2 - '@esbuild/linux-s390x': 0.27.2 - '@esbuild/linux-x64': 0.27.2 - '@esbuild/netbsd-arm64': 0.27.2 - '@esbuild/netbsd-x64': 0.27.2 - '@esbuild/openbsd-arm64': 0.27.2 - '@esbuild/openbsd-x64': 0.27.2 - '@esbuild/openharmony-arm64': 0.27.2 - '@esbuild/sunos-x64': 0.27.2 - '@esbuild/win32-arm64': 0.27.2 - '@esbuild/win32-ia32': 0.27.2 - '@esbuild/win32-x64': 0.27.2 - esbuild@0.28.2: optionalDependencies: '@esbuild/aix-ppc64': 0.28.2 @@ -20679,10 +16956,10 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-plugin-react-google-translate@1.0.4(patch_hash=343c47e52467ec6018beff92d73b6ca2cf231399d98116925687451e8bd527d8)(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2): + eslint-plugin-react-google-translate@1.0.4(patch_hash=343c47e52467ec6018beff92d73b6ca2cf231399d98116925687451e8bd527d8)(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3): dependencies: - '@typescript-eslint/utils': 8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2) - eslint: 10.10.0(jiti@2.7.0) + '@typescript-eslint/utils': 8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + eslint: 10.10.0(jiti@2.7.0)(supports-color@7.2.0) transitivePeerDependencies: - supports-color - typescript @@ -20698,11 +16975,11 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.10.0(jiti@2.7.0): + eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.5 + '@eslint/config-array': 0.23.5(supports-color@7.2.0) '@eslint/config-helpers': 0.7.0 '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.3 @@ -20712,7 +16989,7 @@ snapshots: '@types/estree': 1.0.9 ajv: 6.15.0 cross-spawn: 7.0.6 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) escape-string-regexp: 4.0.0 eslint-scope: 9.1.2 eslint-visitor-keys: 5.0.1 @@ -20735,13 +17012,10 @@ snapshots: transitivePeerDependencies: - supports-color - esm@3.2.25: - optional: true - espree@11.2.0: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) eslint-visitor-keys: 5.0.1 esquery@1.7.0: @@ -20783,8 +17057,6 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/unist': 3.0.3 - estree-walker@2.0.2: {} - estree-walker@3.0.3: dependencies: '@types/estree': 1.0.9 @@ -20795,60 +17067,20 @@ snapshots: event-target-shim@5.0.1: {} - eventemitter3@4.0.7: {} - eventemitter3@5.0.4: {} events-universal@1.0.1: dependencies: - bare-events: 2.8.2 + bare-events: 2.9.2 transitivePeerDependencies: - bare-abort-controller events@3.3.0: {} - exit-hook@4.0.0: {} - - expect-type@1.3.0: {} + expect-type@1.4.0: {} exponential-backoff@3.1.3: {} - express@4.22.1: - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.6 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.7.2 - cookie-signature: 1.0.7 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.3.2 - fresh: 0.5.2 - http-errors: 2.0.1 - merge-descriptors: 1.0.3 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.13 - proxy-addr: 2.0.7 - qs: 6.16.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.19.2 - serve-static: 1.16.3 - setprototypeof: 1.2.0 - statuses: 2.0.2 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - expressive-code@0.44.2: dependencies: '@expressive-code/core': 0.44.2 @@ -20858,27 +17090,19 @@ snapshots: extend@3.0.2: {} - fast-copy@4.0.2: {} + fast-copy@4.1.1: {} fast-deep-equal@3.1.3: {} fast-fifo@1.3.2: {} - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} fast-png@8.0.0: dependencies: - fflate: 0.8.2 + fflate: 0.8.3 iobuffer: 6.0.1 fast-safe-stringify@2.1.1: {} @@ -20889,7 +17113,7 @@ snapshots: dependencies: fast-string-truncated-width: 3.0.3 - fast-uri@3.1.5: {} + fast-uri@3.1.8: {} fast-wrap-ansi@0.2.2: dependencies: @@ -20909,16 +17133,8 @@ snapshots: strnum: 2.4.2 xml-naming: 0.3.0 - fastq@1.20.1: - dependencies: - reusify: 1.1.0 - favico.js@0.3.10: {} - faye-websocket@0.11.4: - dependencies: - websocket-driver: 0.7.5 - fd-package-json@2.0.0: dependencies: walk-up-path: 4.0.0 @@ -20927,7 +17143,7 @@ snapshots: optionalDependencies: picomatch: 4.0.7 - fflate@0.8.2: {} + fflate@0.8.3: {} file-entry-cache@11.1.5: dependencies: @@ -20941,19 +17157,7 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@1.3.2: - dependencies: - debug: 2.6.9 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.2 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - find-replace@5.0.2: {} + find-proc@0.1.0: {} find-up@4.1.0: dependencies: @@ -20977,8 +17181,6 @@ snapshots: flattie@1.1.1: {} - follow-redirects@1.16.0: {} - fontace@0.4.1: dependencies: fontkitten: 1.0.3 @@ -20987,11 +17189,6 @@ snapshots: dependencies: tiny-inflate: 1.0.3 - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - form-data@4.0.6: dependencies: asynckit: 0.4.0 @@ -21000,29 +17197,26 @@ snapshots: hasown: 2.0.4 mime-types: 2.1.35 - formatly@0.3.0: + formatly@0.7.0: dependencies: fd-package-json: 2.0.0 - - forwarded@0.2.0: {} + package-manager-detector: 1.8.0 fraction.js@5.3.4: {} - framer-motion@12.34.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + framer-motion@13.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0): dependencies: - motion-dom: 12.34.3 - motion-utils: 12.29.2 + motion-dom: 13.3.0 + motion-utils: 13.3.0 tslib: 2.8.1 optionalDependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) franc-min@6.2.0: dependencies: trigram-utils: 2.0.1 - fresh@0.5.2: {} - fresh@2.0.0: {} fs-extra@10.1.0: @@ -21067,12 +17261,14 @@ snapshots: get-caller-file@2.0.5: {} + get-east-asian-width@1.6.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 function-bind: 1.1.2 get-proto: 1.0.1 gopd: 1.2.0 @@ -21083,9 +17279,9 @@ snapshots: get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 - get-tsconfig@4.13.6: + get-tsconfig@4.14.3: dependencies: resolve-pkg-maps: 1.0.0 @@ -21117,28 +17313,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob-to-regex.js@1.2.0(tslib@2.8.1): - dependencies: - tslib: 2.8.1 - - glob@10.5.0: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.9 - minipass: 7.1.3 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - glob@11.1.0: - dependencies: - foreground-child: 3.3.1 - jackspeak: 4.2.3 - minimatch: 10.2.6 - minipass: 7.1.3 - package-json-from-dist: 1.0.1 - path-scurry: 2.0.2 - glob@13.0.6: dependencies: minimatch: 10.2.6 @@ -21158,18 +17332,10 @@ snapshots: graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - - graphql@16.13.0: {} - graphql@16.14.2: {} guid-typescript@1.0.9: {} - gzip-size@6.0.0: - dependencies: - duplexer: 0.1.2 - h3@1.15.11: dependencies: cookie-es: 1.2.3 @@ -21182,11 +17348,9 @@ snapshots: ufo: 1.6.4 uncrypto: 0.1.3 - handle-thing@2.0.1: {} - - happy-dom@20.12.0: + happy-dom@20.14.5: dependencies: - '@types/node': 24.10.9 + '@types/node': 26.6.1 '@types/whatwg-mimetype': 3.0.2 '@types/ws': 8.18.1 buffer-image-size: 0.6.4 @@ -21314,7 +17478,7 @@ snapshots: unist-util-visit: 5.1.0 zwitch: 2.0.4 - hast-util-to-estree@3.1.3: + hast-util-to-estree@3.1.3(supports-color@7.2.0): dependencies: '@types/estree': 1.0.9 '@types/estree-jsx': 1.0.5 @@ -21324,9 +17488,9 @@ snapshots: estree-util-attach-comments: 3.0.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 + mdast-util-mdx-expression: 2.0.1(supports-color@7.2.0) + mdast-util-mdx-jsx: 3.2.0(supports-color@7.2.0) + mdast-util-mdxjs-esm: 2.0.1(supports-color@7.2.0) property-information: 7.2.0 space-separated-tokens: 2.0.2 style-to-js: 1.1.21 @@ -21349,7 +17513,7 @@ snapshots: stringify-entities: 4.0.4 zwitch: 2.0.4 - hast-util-to-jsx-runtime@2.3.6: + hast-util-to-jsx-runtime@2.3.6(supports-color@7.2.0): dependencies: '@types/estree': 1.0.9 '@types/hast': 3.0.5 @@ -21358,9 +17522,9 @@ snapshots: devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 + mdast-util-mdx-expression: 2.0.1(supports-color@7.2.0) + mdast-util-mdx-jsx: 3.2.0(supports-color@7.2.0) + mdast-util-mdxjs-esm: 2.0.1(supports-color@7.2.0) property-information: 7.2.0 space-separated-tokens: 2.0.2 style-to-js: 1.1.21 @@ -21402,7 +17566,10 @@ snapshots: property-information: 7.2.0 space-separated-tokens: 2.0.2 - headers-polyfill@4.0.3: {} + headers-polyfill@5.0.1: + dependencies: + '@types/set-cookie-parser': 2.4.10 + set-cookie-parser: 3.1.2 help-me@5.0.0: {} @@ -21412,7 +17579,7 @@ snapshots: dependencies: react-is: 16.13.1 - hono@4.13.5: {} + hono@4.13.8: {} hookified@1.15.1: {} @@ -21422,26 +17589,10 @@ snapshots: dependencies: lru-cache: 6.0.0 - hpack.js@2.1.6: - dependencies: - inherits: 2.0.4 - obuf: 1.1.2 - readable-stream: 2.3.8 - wbuf: 1.7.3 - hpagent@1.2.0: {} - html-encoding-sniffer@6.0.0(@noble/hashes@2.4.0): - dependencies: - '@exodus/bytes': 1.15.1(@noble/hashes@2.4.0) - transitivePeerDependencies: - - '@noble/hashes' - optional: true - html-entities@2.6.0: {} - html-escaper@2.0.2: {} - html-escaper@3.0.3: {} html-void-elements@3.0.0: {} @@ -21450,16 +17601,6 @@ snapshots: http-cache-semantics@4.2.0: {} - http-deceiver@1.2.7: {} - - http-errors@1.8.1: - dependencies: - depd: 1.1.2 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 1.5.0 - toidentifier: 1.0.1 - http-errors@2.0.1: dependencies: depd: 2.0.0 @@ -21468,64 +17609,36 @@ snapshots: statuses: 2.0.2 toidentifier: 1.0.1 - http-parser-js@0.5.10: {} - - http-proxy-agent@7.0.2: + http-proxy-agent@7.0.2(supports-color@7.2.0): dependencies: agent-base: 7.1.4 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color - http-proxy-middleware@2.0.10(@types/express@4.17.25): - dependencies: - '@types/http-proxy': 1.17.17 - http-proxy: 1.18.1 - is-glob: 4.0.3 - is-plain-obj: 3.0.0 - micromatch: 4.0.8 - optionalDependencies: - '@types/express': 4.17.25 - transitivePeerDependencies: - - debug - - http-proxy@1.18.1: - dependencies: - eventemitter3: 4.0.7 - follow-redirects: 1.16.0 - requires-port: 1.0.0 - transitivePeerDependencies: - - debug - - https-proxy-agent@7.0.6: + https-proxy-agent@7.0.6(supports-color@7.2.0): dependencies: agent-base: 7.1.4 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color hunspell-asm@4.0.2(patch_hash=594ff55f398ab3a575ba1b4d090c4838a26e4251a2f1d65ba0f02d5b098d02ae): dependencies: emscripten-wasm-loader: 3.0.3(patch_hash=65d0567cd2da382764aee3839187feb5284662c4a9f0b755f1e52163c5e36399) - nanoid: 3.3.18 + nanoid: 3.3.19 - hyperdyperid@1.2.0: {} - - i18next@26.4.2(typescript@6.0.2): + i18next@26.4.2(typescript@6.0.3): optionalDependencies: - typescript: 6.0.2 - - iconv-lite@0.4.24: - dependencies: - safer-buffer: 2.1.2 + typescript: 6.0.3 icss-replace-symbols@1.1.0: {} - icss-utils@5.1.0(postcss@8.5.26): + icss-utils@5.1.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 - idna-uts46-hx@6.1.1: + idna-uts46-hx@6.2.1: dependencies: tr46: 6.0.0 @@ -21533,7 +17646,7 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.8: {} + ignore@7.0.9: {} import-fresh@3.3.1: dependencies: @@ -21551,32 +17664,20 @@ snapshots: inline-style-parser@0.2.7: {} - intl-messageformat@10.7.18: - dependencies: - '@formatjs/ecma402-abstract': 2.3.6 - '@formatjs/fast-memoize': 2.2.7 - '@formatjs/icu-messageformat-parser': 2.11.4 - tslib: 2.8.1 - iobuffer@6.0.1: {} - ioredis@5.9.3: + ioredis@6.0.0(supports-color@7.2.0): dependencies: - '@ioredis/commands': 1.5.0 - cluster-key-slot: 1.1.2 - debug: 4.4.3 + '@ioredis/commands': 2.0.0 + cluster-key-slot: 1.1.1 + debug: 4.4.3(supports-color@7.2.0) denque: 2.1.0 - lodash.defaults: 4.2.0 - lodash.isarguments: 3.1.0 redis-errors: 1.2.0 - redis-parser: 3.0.0 standard-as-callback: 2.1.0 transitivePeerDependencies: - supports-color - ipaddr.js@1.9.1: {} - - ipaddr.js@2.3.0: {} + ipaddr.js@2.5.0: {} iron-webcrypto@1.2.1: {} @@ -21593,19 +17694,12 @@ snapshots: dependencies: binary-extensions: 2.3.0 - is-core-module@2.16.1: - dependencies: - hasown: 2.0.4 - is-core-module@2.16.2: dependencies: hasown: 2.0.4 - optional: true is-decimal@2.0.1: {} - is-docker@3.0.0: {} - is-docker@4.0.0: {} is-extglob@2.1.1: {} @@ -21618,43 +17712,26 @@ snapshots: is-hexadecimal@2.0.1: {} - is-inside-container@1.0.0: - dependencies: - is-docker: 3.0.0 - - is-interactive@1.0.0: {} - - is-network-error@1.3.0: {} + is-interactive@2.0.0: {} is-node-process@1.2.0: {} is-number@7.0.0: {} - is-observable@2.1.0: {} - - is-plain-obj@3.0.0: {} - is-plain-obj@4.1.0: {} - is-potential-custom-element-name@1.0.1: - optional: true - - is-stream@2.0.1: {} - is-stream@3.0.0: {} + is-stream@4.0.1: {} + is-there@4.5.2: {} - is-unicode-supported@0.1.0: {} + is-unicode-supported@2.1.0: {} is-unsafe@2.0.2: {} is-url@1.2.4: {} - is-wsl@3.1.1: - dependencies: - is-inside-container: 1.0.0 - isarray@1.0.0: {} isbinaryfile@4.0.10: {} @@ -21671,31 +17748,8 @@ snapshots: isomorphic.js@0.2.5: {} - istanbul-lib-coverage@3.2.2: {} - - istanbul-lib-report@3.0.1: - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - - istanbul-reports@3.2.0: - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - itty-time@2.0.2: {} - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jackspeak@4.2.3: - dependencies: - '@isaacs/cliui': 9.0.0 - jake@10.9.4: dependencies: async: 3.2.6 @@ -21713,13 +17767,11 @@ snapshots: leven: 3.1.0 pretty-format: 29.7.0 - jiti@2.6.1: {} - jiti@2.7.0: {} jose@5.10.0: {} - jose@6.1.3: {} + jose@6.2.12: {} joycon@3.1.1: {} @@ -21739,42 +17791,12 @@ snapshots: dependencies: argparse: 2.0.1 - js-yaml@5.4.1: + js-yaml@5.4.2: dependencies: argparse: 2.0.1 - jsdom@28.1.0(@noble/hashes@2.4.0): - dependencies: - '@acemir/cssom': 0.9.31 - '@asamuzakjp/dom-selector': 6.8.1 - '@bramus/specificity': 2.4.2 - '@exodus/bytes': 1.15.1(@noble/hashes@2.4.0) - cssstyle: 6.2.0 - data-urls: 7.0.0(@noble/hashes@2.4.0) - decimal.js: 10.6.0 - html-encoding-sniffer: 6.0.0(@noble/hashes@2.4.0) - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - is-potential-custom-element-name: 1.0.1 - parse5: 8.0.1 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 6.0.2 - undici: 7.29.0 - w3c-xmlserializer: 5.0.0 - webidl-conversions: 8.0.1 - whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.1(@noble/hashes@2.4.0) - xml-name-validator: 5.0.0 - transitivePeerDependencies: - - '@noble/hashes' - - supports-color - optional: true - jsesc@3.1.0: {} - json-bignum@0.0.3: {} - json-parse-even-better-errors@2.3.1: {} json-schema-to-ts@2.7.2: @@ -21805,9 +17827,9 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - katex@0.16.33: + katex@0.18.7: dependencies: - commander: 8.3.0 + commander: 15.0.0 keyv@5.6.0: dependencies: @@ -21817,28 +17839,21 @@ snapshots: klona@2.0.6: {} - knip@5.88.1(@types/node@25.3.0)(typescript@6.0.2): + knip@6.36.0: dependencies: - '@nodelib/fs.walk': 1.2.8 - '@types/node': 25.3.0 - fast-glob: 3.3.3 - formatly: 0.3.0 - jiti: 2.6.1 - minimist: 1.2.8 + fdir: 6.5.0(picomatch@4.0.7) + formatly: 0.7.0 + get-tsconfig: 4.14.3 + jiti: 2.7.0 + oxc-parser: 0.148.0 oxc-resolver: 11.24.2 - picocolors: 1.1.1 picomatch: 4.0.7 smol-toml: 1.8.0 strip-json-comments: 5.0.3 - typescript: 6.0.2 - unbash: 2.2.0 - yaml: 2.9.0 - zod: 4.3.6 - - launch-editor@2.14.1: - dependencies: - picocolors: 1.1.1 - shell-quote: 1.10.0 + tinyglobby: 0.2.17 + unbash: 4.0.11 + yaml: 2.9.1 + zod: 4.6.5 lazy-val@1.0.5: {} @@ -21853,99 +17868,99 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lexical@0.48.0(typescript@6.0.2): + lexical@0.50.0(typescript@7.0.2): dependencies: - '@lexical/internal': 0.48.0(typescript@6.0.2) + '@lexical/internal': 0.50.0(typescript@7.0.2) optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 lib0@0.2.117: dependencies: isomorphic.js: 0.2.5 - libphonenumber-js@1.12.41: {} + libphonenumber-js@1.13.13: {} - lightningcss-android-arm64@1.31.1: + lightningcss-android-arm64@1.32.0: optional: true lightningcss-android-arm64@1.33.0: optional: true - lightningcss-darwin-arm64@1.31.1: + lightningcss-darwin-arm64@1.32.0: optional: true lightningcss-darwin-arm64@1.33.0: optional: true - lightningcss-darwin-x64@1.31.1: + lightningcss-darwin-x64@1.32.0: optional: true lightningcss-darwin-x64@1.33.0: optional: true - lightningcss-freebsd-x64@1.31.1: + lightningcss-freebsd-x64@1.32.0: optional: true lightningcss-freebsd-x64@1.33.0: optional: true - lightningcss-linux-arm-gnueabihf@1.31.1: + lightningcss-linux-arm-gnueabihf@1.32.0: optional: true lightningcss-linux-arm-gnueabihf@1.33.0: optional: true - lightningcss-linux-arm64-gnu@1.31.1: + lightningcss-linux-arm64-gnu@1.32.0: optional: true lightningcss-linux-arm64-gnu@1.33.0: optional: true - lightningcss-linux-arm64-musl@1.31.1: + lightningcss-linux-arm64-musl@1.32.0: optional: true lightningcss-linux-arm64-musl@1.33.0: optional: true - lightningcss-linux-x64-gnu@1.31.1: + lightningcss-linux-x64-gnu@1.32.0: optional: true lightningcss-linux-x64-gnu@1.33.0: optional: true - lightningcss-linux-x64-musl@1.31.1: + lightningcss-linux-x64-musl@1.32.0: optional: true lightningcss-linux-x64-musl@1.33.0: optional: true - lightningcss-win32-arm64-msvc@1.31.1: + lightningcss-win32-arm64-msvc@1.32.0: optional: true lightningcss-win32-arm64-msvc@1.33.0: optional: true - lightningcss-win32-x64-msvc@1.31.1: + lightningcss-win32-x64-msvc@1.32.0: optional: true lightningcss-win32-x64-msvc@1.33.0: optional: true - lightningcss@1.31.1: + lightningcss@1.32.0: dependencies: detect-libc: 2.1.2 optionalDependencies: - lightningcss-android-arm64: 1.31.1 - lightningcss-darwin-arm64: 1.31.1 - lightningcss-darwin-x64: 1.31.1 - lightningcss-freebsd-x64: 1.31.1 - lightningcss-linux-arm-gnueabihf: 1.31.1 - lightningcss-linux-arm64-gnu: 1.31.1 - lightningcss-linux-arm64-musl: 1.31.1 - lightningcss-linux-x64-gnu: 1.31.1 - lightningcss-linux-x64-musl: 1.31.1 - lightningcss-win32-arm64-msvc: 1.31.1 - lightningcss-win32-x64-msvc: 1.31.1 + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 lightningcss@1.33.0: dependencies: @@ -21963,13 +17978,14 @@ snapshots: lightningcss-win32-arm64-msvc: 1.33.0 lightningcss-win32-x64-msvc: 1.33.0 + lilconfig@3.1.3: {} + lines-and-columns@1.2.4: {} - livekit-server-sdk@2.15.0: + livekit-server-sdk@2.19.0: dependencies: '@bufbuild/protobuf': 1.10.1 - '@livekit/protocol': 1.44.0 - camelcase-keys: 9.1.3 + '@livekit/protocol': 1.51.0 jose: 5.10.0 locate-path@5.0.0: @@ -21980,20 +17996,14 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash.camelcase@4.3.0: {} - lodash.debounce@4.0.8: {} - lodash.defaults@4.2.0: {} - - lodash.isarguments@3.1.0: {} - lodash@4.18.1: {} - log-symbols@4.1.0: + log-symbols@7.0.1: dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 + is-unicode-supported: 2.1.0 + yoctocolors: 2.2.0 loglevel@1.9.1: {} @@ -22011,8 +18021,6 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.2.6: {} - lru-cache@11.5.2: {} lru-cache@5.1.1: @@ -22025,39 +18033,39 @@ snapshots: luxon@3.7.2: {} + machina@7.0.1: {} + magic-string@0.30.21: dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.6.0 - magicast@0.5.2: + magic-string@1.4.1: dependencies: - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 + '@jridgewell/sourcemap-codec': 1.6.0 + + magicast@0.5.5: + dependencies: + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 source-map-js: 1.2.1 - make-dir@4.0.0: - dependencies: - semver: 7.7.4 - make-plural@7.5.0: {} - map-obj@5.0.0: {} - markdown-extensions@2.0.0: {} markdown-table@3.0.4: {} - match-sorter@8.2.0: + match-sorter@8.3.0: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.7 remove-accents: 0.5.0 math-intrinsics@1.1.0: {} - maxmind@5.0.5: + maxmind@5.0.7: dependencies: - mmdb-lib: 3.0.2 - tiny-lru: 11.4.7 + mmdb-lib: 3.0.3 + tiny-lru: 13.0.0 mdast-util-definitions@6.0.0: dependencies: @@ -22065,13 +18073,13 @@ snapshots: '@types/unist': 3.0.3 unist-util-visit: 5.1.0 - mdast-util-directive@3.1.0: + mdast-util-directive@3.1.0(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 @@ -22086,14 +18094,14 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - mdast-util-from-markdown@2.0.3: + mdast-util-from-markdown@2.0.3(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 decode-named-character-reference: 1.3.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 - micromark: 4.0.2 + micromark: 4.0.2(supports-color@7.2.0) micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-decode-string: 2.0.1 micromark-util-normalize-identifier: 2.0.1 @@ -22111,67 +18119,67 @@ snapshots: mdast-util-find-and-replace: 3.0.2 micromark-util-character: 2.1.1 - mdast-util-gfm-footnote@2.1.0: + mdast-util-gfm-footnote@2.1.0(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 micromark-util-normalize-identifier: 2.0.1 transitivePeerDependencies: - supports-color - mdast-util-gfm-strikethrough@2.0.0: + mdast-util-gfm-strikethrough@2.0.0(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm-table@2.0.0: + mdast-util-gfm-table@2.0.0(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 markdown-table: 3.0.4 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm-task-list-item@2.0.0: + mdast-util-gfm-task-list-item@2.0.0(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm@3.1.0: + mdast-util-gfm@3.1.0(supports-color@7.2.0): dependencies: - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) mdast-util-gfm-autolink-literal: 2.0.1 - mdast-util-gfm-footnote: 2.1.0 - mdast-util-gfm-strikethrough: 2.0.0 - mdast-util-gfm-table: 2.0.0 - mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-gfm-footnote: 2.1.0(supports-color@7.2.0) + mdast-util-gfm-strikethrough: 2.0.0(supports-color@7.2.0) + mdast-util-gfm-table: 2.0.0(supports-color@7.2.0) + mdast-util-gfm-task-list-item: 2.0.0(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdx-expression@2.0.1: + mdast-util-mdx-expression@2.0.1(supports-color@7.2.0): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdx-jsx@3.2.0: + mdast-util-mdx-jsx@3.2.0(supports-color@7.2.0): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 @@ -22179,7 +18187,7 @@ snapshots: '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 @@ -22188,23 +18196,23 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-mdx@3.0.0: + mdast-util-mdx@3.0.0(supports-color@7.2.0): dependencies: - mdast-util-from-markdown: 2.0.3 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-mdx-expression: 2.0.1(supports-color@7.2.0) + mdast-util-mdx-jsx: 3.2.0(supports-color@7.2.0) + mdast-util-mdxjs-esm: 2.0.1(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdxjs-esm@2.0.1: + mdast-util-mdxjs-esm@2.0.1(supports-color@7.2.0): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -22248,33 +18256,8 @@ snapshots: mdn-data@2.27.1: {} - media-typer@0.3.0: {} - - memfs@4.56.10(tslib@2.8.1): - dependencies: - '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-fsa': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-to-fsa': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-print': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-snapshot': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1) - '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) - glob-to-regex.js: 1.2.0(tslib@2.8.1) - thingies: 2.5.0(tslib@2.8.1) - tree-dump: 1.1.0(tslib@2.8.1) - tslib: 2.8.1 - - merge-descriptors@1.0.3: {} - - merge2@1.4.1: {} - mespeak@2.0.2: {} - methods@1.1.2: {} - micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.3.0 @@ -22331,7 +18314,7 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - micromark-extension-gfm-table@2.1.1: + micromark-extension-gfm-table@2.1.2: dependencies: devlop: 1.1.0 micromark-factory-space: 2.0.1 @@ -22356,7 +18339,7 @@ snapshots: micromark-extension-gfm-autolink-literal: 2.1.0 micromark-extension-gfm-footnote: 2.1.0 micromark-extension-gfm-strikethrough: 2.1.0 - micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-table: 2.1.2 micromark-extension-gfm-tagfilter: 2.0.0 micromark-extension-gfm-task-list-item: 2.1.0 micromark-util-combine-extensions: 2.0.1 @@ -22404,8 +18387,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) micromark-extension-mdx-expression: 3.0.1 micromark-extension-mdx-jsx: 3.0.2 micromark-extension-mdx-md: 2.0.0 @@ -22527,10 +18510,10 @@ snapshots: micromark-util-types@2.0.2: {} - micromark@4.0.2: + micromark@4.0.2(supports-color@7.2.0): dependencies: '@types/debug': 4.1.13 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) decode-named-character-reference: 1.3.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 @@ -22566,31 +18549,23 @@ snapshots: dependencies: mime-db: 1.54.0 - mime@1.6.0: {} - mime@2.6.0: {} mime@4.1.0: {} - mimic-fn@2.1.0: {} - - minimalistic-assert@1.0.1: {} + mimic-function@5.0.1: {} minimatch@10.2.6: dependencies: - brace-expansion: 5.0.9 + brace-expansion: 5.0.12 minimatch@3.1.5: dependencies: - brace-expansion: 1.1.18 + brace-expansion: 1.1.21 minimatch@5.1.9: dependencies: - brace-expansion: 2.1.4 - - minimatch@9.0.9: - dependencies: - brace-expansion: 2.1.4 + brace-expansion: 2.1.7 minimist@1.2.8: {} @@ -22606,128 +18581,106 @@ snapshots: mkdirp@3.0.1: {} - mmdb-lib@3.0.2: {} + mmdb-lib@3.0.3: {} - mobx-persist-store@1.1.8(mobx@6.15.0): + mobx-persist-store@1.1.8(mobx@7.0.3): dependencies: - mobx: 6.15.0 + mobx: 7.0.3 - mobx-react-lite@4.1.1(mobx@6.15.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + mobx-react-lite@5.0.3(mobx@7.0.3)(react@19.3.0): dependencies: - mobx: 6.15.0 - react: 19.2.4 - use-sync-external-store: 1.6.0(react@19.2.4) - optionalDependencies: - react-dom: 19.2.4(react@19.2.4) + mobx: 7.0.3 + react: 19.3.0 - mobx@6.15.0: {} + mobx@7.0.3: {} - moo@0.5.2: {} + moo@0.5.3: {} - motion-dom@12.34.3: + motion-dom@13.3.0: dependencies: - motion-utils: 12.29.2 + motion-utils: 13.3.0 - motion-utils@12.29.2: {} + motion-utils@13.3.0: {} - motion@12.34.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + motion@13.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0): dependencies: - framer-motion: 12.34.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + framer-motion: 13.4.0(react-dom@19.3.0(react@19.3.0))(react@19.3.0) tslib: 2.8.1 optionalDependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) mri@1.2.0: {} mrmime@2.0.1: {} - ms@2.0.0: {} - ms@2.1.3: {} - msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5): + msw@2.15.0(@types/node@26.6.1)(typescript@6.0.3): dependencies: - '@inquirer/confirm': 5.1.21(@types/node@25.3.0) - '@mswjs/interceptors': 0.41.3 - '@open-draft/deferred-promise': 2.2.0 + '@inquirer/confirm': 6.3.2(@types/node@26.6.1) + '@mswjs/interceptors': 0.41.9 + '@open-draft/deferred-promise': 3.0.0 '@types/statuses': 2.0.6 cookie: 1.1.1 - graphql: 16.13.0 - headers-polyfill: 4.0.3 + graphql: 16.14.2 + headers-polyfill: 5.0.1 is-node-process: 1.2.0 outvariant: 1.4.3 path-to-regexp: 6.3.0 picocolors: 1.1.1 - rettime: 0.10.1 + rettime: 0.11.11 statuses: 2.0.2 strict-event-emitter: 0.5.1 - tough-cookie: 6.0.0 - type-fest: 5.4.4 + tough-cookie: 6.0.2 + type-fest: 5.9.0 until-async: 3.0.2 - yargs: 17.7.2 + yargs: 17.7.3 optionalDependencies: - typescript: 5.4.5 + typescript: 6.0.3 transitivePeerDependencies: - '@types/node' optional: true - msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2): + msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2): dependencies: - '@inquirer/confirm': 5.1.21(@types/node@25.3.0) - '@mswjs/interceptors': 0.41.3 - '@open-draft/deferred-promise': 2.2.0 + '@inquirer/confirm': 6.3.2(@types/node@26.6.1) + '@mswjs/interceptors': 0.41.9 + '@open-draft/deferred-promise': 3.0.0 '@types/statuses': 2.0.6 cookie: 1.1.1 - graphql: 16.13.0 - headers-polyfill: 4.0.3 + graphql: 16.14.2 + headers-polyfill: 5.0.1 is-node-process: 1.2.0 outvariant: 1.4.3 path-to-regexp: 6.3.0 picocolors: 1.1.1 - rettime: 0.10.1 + rettime: 0.11.11 statuses: 2.0.2 strict-event-emitter: 0.5.1 - tough-cookie: 6.0.0 - type-fest: 5.4.4 + tough-cookie: 6.0.2 + type-fest: 5.9.0 until-async: 3.0.2 - yargs: 17.7.2 + yargs: 17.7.3 optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 transitivePeerDependencies: - '@types/node' muggle-string@0.4.1: {} - multicast-dns@7.2.5: - dependencies: - dns-packet: 5.6.1 - thunky: 1.1.0 + multiformats@13.4.2: {} - multiformats@9.9.0: {} - - mute-stream@2.0.0: {} + mute-stream@3.0.0: {} n-gram@2.0.2: {} - nanoid@3.3.18: {} - - nats@2.29.3: - dependencies: - nkeys.js: 1.1.0 + nanoid@3.3.19: {} natural-compare@1.4.0: {} - negotiator@0.6.3: {} - - negotiator@0.6.4: {} - neotraverse@1.0.1: {} - nkeys.js@1.1.0: - dependencies: - tweetnacl: 1.0.3 - nlcst-to-string@4.0.0: dependencies: '@types/nlcst': 2.0.3 @@ -22739,15 +18692,15 @@ snapshots: node-abi@4.35.0: dependencies: - semver: 7.7.4 + semver: 7.8.5 node-addon-api@7.1.1: {} - node-addon-api@8.5.0: {} + node-addon-api@8.9.2: {} node-api-version@0.2.1: dependencies: - semver: 7.7.4 + semver: 7.8.5 node-fetch-native@1.6.7: {} @@ -22760,19 +18713,19 @@ snapshots: graceful-fs: 4.2.11 nopt: 9.0.0 proc-log: 6.1.0 - semver: 7.7.4 + semver: 7.8.5 tar: 7.5.22 tinyglobby: 0.2.17 - undici: 6.28.0 + undici: 6.28.1 which: 6.0.1 node-int64@0.4.0: {} node-mock-http@1.0.5: {} - node-releases@2.0.27: {} + node-releases@2.0.55: {} - nodemailer@9.0.6: {} + nodemailer@10.0.10: {} nopt@9.0.0: dependencies: @@ -22788,13 +18741,7 @@ snapshots: dependencies: boolbase: 1.0.0 - object-inspect@1.13.4: {} - - observable-fns@0.6.1: {} - - obuf@1.1.2: {} - - obug@2.1.1: {} + obug@2.2.1: {} ofetch@1.5.1: dependencies: @@ -22810,15 +18757,13 @@ snapshots: dependencies: ee-first: 1.1.1 - on-headers@1.1.0: {} - once@1.4.0: dependencies: wrappy: 1.0.2 - onetime@5.1.2: + onetime@7.0.0: dependencies: - mimic-fn: 2.1.0 + mimic-function: 5.0.1 oniguruma-parser@0.12.2: {} @@ -22828,26 +18773,17 @@ snapshots: regex: 6.1.0 regex-recursion: 6.0.2 - onnxruntime-common@1.27.0: {} + onnxruntime-common@1.30.0: {} - onnxruntime-web@1.27.0: + onnxruntime-web@1.30.0: dependencies: flatbuffers: 25.9.23 guid-typescript: 1.0.9 - long: 5.2.5 - onnxruntime-common: 1.27.0 + long: 5.3.2 + onnxruntime-common: 1.30.0 platform: 1.3.6 protobufjs: 7.6.6 - open@10.2.0: - dependencies: - default-browser: 5.5.0 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - wsl-utils: 0.1.0 - - opener@1.5.2: {} - optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -22857,20 +18793,43 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - ora@5.4.1: + ora@9.4.1: dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - 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 + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 3.4.0 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 7.0.1 + stdin-discarder: 0.3.2 + string-width: 8.2.2 outvariant@1.4.3: {} + oxc-parser@0.148.0: + dependencies: + '@oxc-project/types': 0.148.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.148.0 + '@oxc-parser/binding-android-arm64': 0.148.0 + '@oxc-parser/binding-darwin-arm64': 0.148.0 + '@oxc-parser/binding-darwin-x64': 0.148.0 + '@oxc-parser/binding-freebsd-x64': 0.148.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.148.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.148.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.148.0 + '@oxc-parser/binding-linux-arm64-musl': 0.148.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.148.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.148.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.148.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.148.0 + '@oxc-parser/binding-linux-x64-gnu': 0.148.0 + '@oxc-parser/binding-linux-x64-musl': 0.148.0 + '@oxc-parser/binding-openharmony-arm64': 0.148.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.148.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.148.0 + '@oxc-parser/binding-win32-x64-msvc': 0.148.0 + oxc-resolver@11.24.2: optionalDependencies: '@oxc-resolver/binding-android-arm-eabi': 11.24.2 @@ -22916,20 +18875,12 @@ snapshots: p-queue@9.3.3: dependencies: eventemitter3: 5.0.4 - p-timeout: 7.0.1 + p-timeout: 7.0.2 - p-retry@6.2.1: - dependencies: - '@types/retry': 0.12.2 - is-network-error: 1.3.0 - retry: 0.13.1 - - p-timeout@7.0.1: {} + p-timeout@7.0.2: {} p-try@2.2.0: {} - package-json-from-dist@1.0.1: {} - package-manager-detector@1.8.0: {} pagefind@1.5.2: @@ -22960,7 +18911,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.29.0 + '@babel/code-frame': 7.29.7 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -22978,13 +18929,6 @@ snapshots: dependencies: entities: 6.0.1 - parse5@8.0.1: - dependencies: - entities: 8.0.0 - optional: true - - parseurl@1.3.3: {} - path-browserify@1.0.1: {} path-exists@4.0.0: {} @@ -22997,38 +18941,29 @@ snapshots: path-parse@1.0.7: {} - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.3 - path-scurry@2.0.2: dependencies: - lru-cache: 11.2.6 + lru-cache: 11.5.2 minipass: 7.1.3 - path-to-regexp@0.1.13: {} - path-to-regexp@6.3.0: {} path-type@4.0.0: {} - pathe@2.0.3: {} - pe-library@0.4.1: {} pg-cloudflare@1.4.0: optional: true - pg-connection-string@2.13.0: {} + pg-connection-string@2.14.0: {} pg-int8@1.0.1: {} - pg-pool@3.14.0(pg@8.16.3): + pg-pool@3.14.0(pg@8.23.0): dependencies: - pg: 8.16.3 + pg: 8.23.0 - pg-protocol@1.14.0: {} + pg-protocol@1.16.0: {} pg-types@2.2.0: dependencies: @@ -23038,11 +18973,11 @@ snapshots: postgres-date: 1.0.7 postgres-interval: 1.2.0 - pg@8.16.3: + pg@8.23.0: dependencies: - pg-connection-string: 2.13.0 - pg-pool: 3.14.0(pg@8.16.3) - pg-protocol: 1.14.0 + pg-connection-string: 2.14.0 + pg-pool: 3.14.0(pg@8.23.0) + pg-protocol: 1.16.0 pg-types: 2.2.0 pgpass: 1.0.5 optionalDependencies: @@ -23068,14 +19003,14 @@ snapshots: dependencies: colorette: 2.0.20 dateformat: 4.6.3 - fast-copy: 4.0.2 + fast-copy: 4.1.1 fast-safe-stringify: 2.1.1 help-me: 5.0.0 joycon: 3.1.1 minimist: 1.2.8 on-exit-leak-free: 2.1.2 pino-abstract-transport: 3.0.0 - pump: 3.0.3 + pump: 3.0.4 secure-json-parse: 4.1.0 sonic-boom: 4.2.1 strip-json-comments: 5.0.3 @@ -23089,12 +19024,12 @@ snapshots: on-exit-leak-free: 2.1.2 pino-abstract-transport: 3.0.0 pino-std-serializers: 7.1.0 - process-warning: 5.0.0 + process-warning: 5.1.0 quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.5.0 sonic-boom: 4.2.1 - thread-stream: 4.0.0 + thread-stream: 4.2.0 pkijs@3.4.0: dependencies: @@ -23102,20 +19037,14 @@ snapshots: asn1js: 3.0.10 bytestreamjs: 2.0.1 pvtsutils: 1.3.6 - pvutils: 1.1.5 + pvutils: 1.2.0 tslib: 2.8.1 platform@1.3.6: {} plist@3.1.0: dependencies: - '@xmldom/xmldom': 0.8.13 - base64-js: 1.5.1 - xmlbuilder: 15.1.1 - - plist@3.1.1: - dependencies: - '@xmldom/xmldom': 0.9.10 + '@xmldom/xmldom': 0.8.15 base64-js: 1.5.1 xmlbuilder: 15.1.1 @@ -23123,287 +19052,291 @@ snapshots: pngjs@5.0.0: {} - pofile@1.1.4: {} + pofile-ts@4.0.3: {} - postcss-attribute-case-insensitive@8.0.0(postcss@8.5.26): + postcss-attribute-case-insensitive@8.0.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 - postcss-selector-parser: 7.1.1 + postcss: 8.5.28 + postcss-selector-parser: 7.1.6 - postcss-clamp@4.1.0(postcss@8.5.26): + postcss-clamp@4.1.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-color-functional-notation@8.0.2(postcss@8.5.26): + postcss-color-functional-notation@8.0.12(postcss@8.5.28): dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.2.3(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 - postcss-color-hex-alpha@11.0.0(postcss@8.5.26): + postcss-color-hex-alpha@11.0.1(postcss@8.5.28): dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-color-rebeccapurple@11.0.0(postcss@8.5.26): + postcss-color-rebeccapurple@11.0.1(postcss@8.5.28): dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-custom-media@12.0.1(postcss@8.5.26): + postcss-custom-media@12.0.1(postcss@8.5.28): dependencies: '@csstools/cascade-layer-name-parser': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - postcss: 8.5.26 + postcss: 8.5.28 - postcss-custom-properties@15.0.1(postcss@8.5.26): + postcss-custom-properties@15.0.1(postcss@8.5.28): dependencies: '@csstools/cascade-layer-name-parser': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-custom-selectors@9.0.1(postcss@8.5.26): + postcss-custom-selectors@9.0.1(postcss@8.5.28): dependencies: '@csstools/cascade-layer-name-parser': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - postcss: 8.5.26 - postcss-selector-parser: 7.1.1 + postcss: 8.5.28 + postcss-selector-parser: 7.1.6 - postcss-dir-pseudo-class@10.0.0(postcss@8.5.26): + postcss-dir-pseudo-class@10.0.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 - postcss-selector-parser: 7.1.1 + postcss: 8.5.28 + postcss-selector-parser: 7.1.6 - postcss-discard-comments@7.0.5(postcss@8.5.26): + postcss-discard-comments@9.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.26 - postcss-selector-parser: 7.1.1 + postcss: 8.5.28 + postcss-selector-parser: 7.1.6 - postcss-double-position-gradients@7.0.0(postcss@8.5.26): + postcss-double-position-gradients@7.0.4(postcss@8.5.28): dependencies: - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-focus-visible@11.0.0(postcss@8.5.26): + postcss-focus-visible@11.0.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 - postcss-selector-parser: 7.1.1 + postcss: 8.5.28 + postcss-selector-parser: 7.1.6 - postcss-focus-within@10.0.0(postcss@8.5.26): + postcss-focus-within@10.0.1(postcss@8.5.28): dependencies: - postcss: 8.5.26 - postcss-selector-parser: 7.1.1 + postcss: 8.5.28 + postcss-selector-parser: 7.1.6 - postcss-font-variant@5.0.0(postcss@8.5.26): + postcss-font-variant@5.0.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 - postcss-gap-properties@7.0.0(postcss@8.5.26): + postcss-gap-properties@7.0.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 - postcss-image-set-function@8.0.0(postcss@8.5.26): + postcss-image-set-function@8.0.1(postcss@8.5.28): dependencies: - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-lab-function@8.0.2(postcss@8.5.26): + postcss-lab-function@8.0.12(postcss@8.5.28): dependencies: - '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.2.3(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) - '@csstools/utilities': 3.0.0(postcss@8.5.26) - postcss: 8.5.26 + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/utilities': 3.0.0(postcss@8.5.28) + postcss: 8.5.28 - postcss-loader@8.2.1(@rspack/core@1.7.6(@swc/helpers@0.5.19))(postcss@8.5.26)(typescript@6.0.2): + postcss-loader@8.2.1(@rspack/core@2.2.5(@swc/helpers@0.5.23))(postcss@8.5.28)(typescript@7.0.2): dependencies: - cosmiconfig: 9.0.0(typescript@6.0.2) - jiti: 2.6.1 - postcss: 8.5.26 - semver: 7.7.4 + cosmiconfig: 9.0.2(typescript@7.0.2) + jiti: 2.7.0 + postcss: 8.5.28 + semver: 7.8.5 optionalDependencies: - '@rspack/core': 1.7.6(@swc/helpers@0.5.19) + '@rspack/core': 2.2.5(@swc/helpers@0.5.23) transitivePeerDependencies: - typescript - postcss-logical@9.0.0(postcss@8.5.26): + postcss-logical@9.0.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-modules-extract-imports@3.1.0(postcss@8.5.26): + postcss-modules-extract-imports@3.1.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 - postcss-modules-local-by-default@4.2.0(postcss@8.5.26): + postcss-modules-local-by-default@4.2.0(postcss@8.5.28): dependencies: - icss-utils: 5.1.0(postcss@8.5.26) - postcss: 8.5.26 - postcss-selector-parser: 7.1.1 + icss-utils: 5.1.0(postcss@8.5.28) + postcss: 8.5.28 + postcss-selector-parser: 7.1.6 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.5.26): + postcss-modules-scope@3.2.1(postcss@8.5.28): dependencies: - postcss: 8.5.26 - postcss-selector-parser: 7.1.1 + postcss: 8.5.28 + postcss-selector-parser: 7.1.6 - postcss-modules-values@4.0.0(postcss@8.5.26): + postcss-modules-values@4.0.0(postcss@8.5.28): dependencies: - icss-utils: 5.1.0(postcss@8.5.26) - postcss: 8.5.26 + icss-utils: 5.1.0(postcss@8.5.28) + postcss: 8.5.28 - postcss-nested@6.2.0(postcss@8.5.26): + postcss-nested@6.2.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-selector-parser: 6.1.4 - postcss-nesting@14.0.0(postcss@8.5.26): + postcss-nesting@14.0.1(postcss@8.5.28): dependencies: - '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.1) - '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.26 - postcss-selector-parser: 7.1.1 + '@csstools/selector-resolve-nested': 4.0.1(postcss-selector-parser@7.1.6) + '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.6) + postcss: 8.5.28 + postcss-selector-parser: 7.1.6 - postcss-opacity-percentage@3.0.0(postcss@8.5.26): + postcss-opacity-percentage@3.0.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 - postcss-overflow-shorthand@7.0.0(postcss@8.5.26): + postcss-overflow-shorthand@7.0.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-page-break@3.0.4(postcss@8.5.26): + postcss-page-break@3.0.4(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 - postcss-place@11.0.0(postcss@8.5.26): + postcss-place@11.0.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-preset-env@11.2.0(postcss@8.5.26): + postcss-preset-env@11.5.3(postcss@8.5.28): dependencies: - '@csstools/postcss-alpha-function': 2.0.3(postcss@8.5.26) - '@csstools/postcss-cascade-layers': 6.0.0(postcss@8.5.26) - '@csstools/postcss-color-function': 5.0.2(postcss@8.5.26) - '@csstools/postcss-color-function-display-p3-linear': 2.0.2(postcss@8.5.26) - '@csstools/postcss-color-mix-function': 4.0.2(postcss@8.5.26) - '@csstools/postcss-color-mix-variadic-function-arguments': 2.0.2(postcss@8.5.26) - '@csstools/postcss-content-alt-text': 3.0.0(postcss@8.5.26) - '@csstools/postcss-contrast-color-function': 3.0.2(postcss@8.5.26) - '@csstools/postcss-exponential-functions': 3.0.1(postcss@8.5.26) - '@csstools/postcss-font-format-keywords': 5.0.0(postcss@8.5.26) - '@csstools/postcss-font-width-property': 1.0.0(postcss@8.5.26) - '@csstools/postcss-gamut-mapping': 3.0.2(postcss@8.5.26) - '@csstools/postcss-gradients-interpolation-method': 6.0.2(postcss@8.5.26) - '@csstools/postcss-hwb-function': 5.0.2(postcss@8.5.26) - '@csstools/postcss-ic-unit': 5.0.0(postcss@8.5.26) - '@csstools/postcss-initial': 3.0.0(postcss@8.5.26) - '@csstools/postcss-is-pseudo-class': 6.0.0(postcss@8.5.26) - '@csstools/postcss-light-dark-function': 3.0.0(postcss@8.5.26) - '@csstools/postcss-logical-float-and-clear': 4.0.0(postcss@8.5.26) - '@csstools/postcss-logical-overflow': 3.0.0(postcss@8.5.26) - '@csstools/postcss-logical-overscroll-behavior': 3.0.0(postcss@8.5.26) - '@csstools/postcss-logical-resize': 4.0.0(postcss@8.5.26) - '@csstools/postcss-logical-viewport-units': 4.0.0(postcss@8.5.26) - '@csstools/postcss-media-minmax': 3.0.1(postcss@8.5.26) - '@csstools/postcss-media-queries-aspect-ratio-number-values': 4.0.0(postcss@8.5.26) - '@csstools/postcss-mixins': 1.0.0(postcss@8.5.26) - '@csstools/postcss-nested-calc': 5.0.0(postcss@8.5.26) - '@csstools/postcss-normalize-display-values': 5.0.1(postcss@8.5.26) - '@csstools/postcss-oklab-function': 5.0.2(postcss@8.5.26) - '@csstools/postcss-position-area-property': 2.0.0(postcss@8.5.26) - '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.26) - '@csstools/postcss-property-rule-prelude-list': 2.0.0(postcss@8.5.26) - '@csstools/postcss-random-function': 3.0.1(postcss@8.5.26) - '@csstools/postcss-relative-color-syntax': 4.0.2(postcss@8.5.26) - '@csstools/postcss-scope-pseudo-class': 5.0.0(postcss@8.5.26) - '@csstools/postcss-sign-functions': 2.0.1(postcss@8.5.26) - '@csstools/postcss-stepped-value-functions': 5.0.1(postcss@8.5.26) - '@csstools/postcss-syntax-descriptor-syntax-production': 2.0.0(postcss@8.5.26) - '@csstools/postcss-system-ui-font-family': 2.0.0(postcss@8.5.26) - '@csstools/postcss-text-decoration-shorthand': 5.0.3(postcss@8.5.26) - '@csstools/postcss-trigonometric-functions': 5.0.1(postcss@8.5.26) - '@csstools/postcss-unset-value': 5.0.0(postcss@8.5.26) - autoprefixer: 10.4.24(postcss@8.5.26) - browserslist: 4.28.1 - css-blank-pseudo: 8.0.1(postcss@8.5.26) - css-has-pseudo: 8.0.0(postcss@8.5.26) - css-prefers-color-scheme: 11.0.0(postcss@8.5.26) - cssdb: 8.8.0 - postcss: 8.5.26 - postcss-attribute-case-insensitive: 8.0.0(postcss@8.5.26) - postcss-clamp: 4.1.0(postcss@8.5.26) - postcss-color-functional-notation: 8.0.2(postcss@8.5.26) - postcss-color-hex-alpha: 11.0.0(postcss@8.5.26) - postcss-color-rebeccapurple: 11.0.0(postcss@8.5.26) - postcss-custom-media: 12.0.1(postcss@8.5.26) - postcss-custom-properties: 15.0.1(postcss@8.5.26) - postcss-custom-selectors: 9.0.1(postcss@8.5.26) - postcss-dir-pseudo-class: 10.0.0(postcss@8.5.26) - postcss-double-position-gradients: 7.0.0(postcss@8.5.26) - postcss-focus-visible: 11.0.0(postcss@8.5.26) - postcss-focus-within: 10.0.0(postcss@8.5.26) - postcss-font-variant: 5.0.0(postcss@8.5.26) - postcss-gap-properties: 7.0.0(postcss@8.5.26) - postcss-image-set-function: 8.0.0(postcss@8.5.26) - postcss-lab-function: 8.0.2(postcss@8.5.26) - postcss-logical: 9.0.0(postcss@8.5.26) - postcss-nesting: 14.0.0(postcss@8.5.26) - postcss-opacity-percentage: 3.0.0(postcss@8.5.26) - postcss-overflow-shorthand: 7.0.0(postcss@8.5.26) - postcss-page-break: 3.0.4(postcss@8.5.26) - postcss-place: 11.0.0(postcss@8.5.26) - postcss-pseudo-class-any-link: 11.0.0(postcss@8.5.26) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.5.26) - postcss-selector-not: 9.0.0(postcss@8.5.26) + '@csstools/postcss-alpha-function': 2.0.13(postcss@8.5.28) + '@csstools/postcss-cascade-layers': 6.0.0(postcss@8.5.28) + '@csstools/postcss-color-function': 5.0.12(postcss@8.5.28) + '@csstools/postcss-color-function-display-p3-linear': 2.0.12(postcss@8.5.28) + '@csstools/postcss-color-mix-function': 4.0.12(postcss@8.5.28) + '@csstools/postcss-color-mix-variadic-function-arguments': 2.0.12(postcss@8.5.28) + '@csstools/postcss-container-rule-prelude-list': 1.0.1(postcss@8.5.28) + '@csstools/postcss-content-alt-text': 3.0.4(postcss@8.5.28) + '@csstools/postcss-contrast-color-function': 3.0.12(postcss@8.5.28) + '@csstools/postcss-exponential-functions': 3.0.6(postcss@8.5.28) + '@csstools/postcss-fit-tolerance-property': 1.0.1(postcss@8.5.28) + '@csstools/postcss-font-format-keywords': 5.0.0(postcss@8.5.28) + '@csstools/postcss-font-width-property': 1.0.0(postcss@8.5.28) + '@csstools/postcss-gamut-mapping': 3.0.12(postcss@8.5.28) + '@csstools/postcss-gradients-interpolation-method': 6.0.12(postcss@8.5.28) + '@csstools/postcss-hwb-function': 5.0.12(postcss@8.5.28) + '@csstools/postcss-ic-unit': 5.0.4(postcss@8.5.28) + '@csstools/postcss-image-function': 1.0.3(postcss@8.5.28) + '@csstools/postcss-initial': 3.0.0(postcss@8.5.28) + '@csstools/postcss-is-pseudo-class': 6.0.0(postcss@8.5.28) + '@csstools/postcss-light-dark-function': 3.0.4(postcss@8.5.28) + '@csstools/postcss-logical-float-and-clear': 4.0.0(postcss@8.5.28) + '@csstools/postcss-logical-overflow': 3.0.0(postcss@8.5.28) + '@csstools/postcss-logical-overscroll-behavior': 3.0.0(postcss@8.5.28) + '@csstools/postcss-logical-resize': 4.0.0(postcss@8.5.28) + '@csstools/postcss-logical-viewport-units': 4.0.1(postcss@8.5.28) + '@csstools/postcss-media-minmax': 3.0.5(postcss@8.5.28) + '@csstools/postcss-media-queries-aspect-ratio-number-values': 4.0.0(postcss@8.5.28) + '@csstools/postcss-mixins': 1.0.0(postcss@8.5.28) + '@csstools/postcss-nested-calc': 5.0.1(postcss@8.5.28) + '@csstools/postcss-normalize-display-values': 5.0.1(postcss@8.5.28) + '@csstools/postcss-oklab-function': 5.0.12(postcss@8.5.28) + '@csstools/postcss-position-area-property': 2.0.0(postcss@8.5.28) + '@csstools/postcss-progressive-custom-properties': 5.1.3(postcss@8.5.28) + '@csstools/postcss-property-rule-optional-descriptors': 1.0.0(postcss@8.5.28) + '@csstools/postcss-property-rule-prelude-list': 2.0.0(postcss@8.5.28) + '@csstools/postcss-random-function': 4.0.2(postcss@8.5.28) + '@csstools/postcss-relative-color-syntax': 4.0.12(postcss@8.5.28) + '@csstools/postcss-scope-pseudo-class': 5.0.0(postcss@8.5.28) + '@csstools/postcss-sign-functions': 2.0.6(postcss@8.5.28) + '@csstools/postcss-stepped-value-functions': 5.0.6(postcss@8.5.28) + '@csstools/postcss-syntax-descriptor-syntax-production': 2.0.0(postcss@8.5.28) + '@csstools/postcss-system-ui-font-family': 2.0.0(postcss@8.5.28) + '@csstools/postcss-text-decoration-shorthand': 5.0.5(postcss@8.5.28) + '@csstools/postcss-trigonometric-functions': 5.0.6(postcss@8.5.28) + '@csstools/postcss-unset-value': 5.0.0(postcss@8.5.28) + autoprefixer: 10.6.1(postcss@8.5.28) + browserslist: 4.29.0 + css-blank-pseudo: 8.0.2(postcss@8.5.28) + css-has-pseudo: 8.0.1(postcss@8.5.28) + css-prefers-color-scheme: 11.0.1(postcss@8.5.28) + cssdb: 8.11.0 + postcss: 8.5.28 + postcss-attribute-case-insensitive: 8.0.0(postcss@8.5.28) + postcss-clamp: 4.1.0(postcss@8.5.28) + postcss-color-functional-notation: 8.0.12(postcss@8.5.28) + postcss-color-hex-alpha: 11.0.1(postcss@8.5.28) + postcss-color-rebeccapurple: 11.0.1(postcss@8.5.28) + postcss-custom-media: 12.0.1(postcss@8.5.28) + postcss-custom-properties: 15.0.1(postcss@8.5.28) + postcss-custom-selectors: 9.0.1(postcss@8.5.28) + postcss-dir-pseudo-class: 10.0.0(postcss@8.5.28) + postcss-double-position-gradients: 7.0.4(postcss@8.5.28) + postcss-focus-visible: 11.0.0(postcss@8.5.28) + postcss-focus-within: 10.0.1(postcss@8.5.28) + postcss-font-variant: 5.0.0(postcss@8.5.28) + postcss-gap-properties: 7.0.0(postcss@8.5.28) + postcss-image-set-function: 8.0.1(postcss@8.5.28) + postcss-lab-function: 8.0.12(postcss@8.5.28) + postcss-logical: 9.0.0(postcss@8.5.28) + postcss-nesting: 14.0.1(postcss@8.5.28) + postcss-opacity-percentage: 3.0.0(postcss@8.5.28) + postcss-overflow-shorthand: 7.0.0(postcss@8.5.28) + postcss-page-break: 3.0.4(postcss@8.5.28) + postcss-place: 11.0.0(postcss@8.5.28) + postcss-pseudo-class-any-link: 11.0.0(postcss@8.5.28) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.5.28) + postcss-selector-not: 9.0.0(postcss@8.5.28) - postcss-pseudo-class-any-link@11.0.0(postcss@8.5.26): + postcss-pseudo-class-any-link@11.0.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 - postcss-selector-parser: 7.1.1 + postcss: 8.5.28 + postcss-selector-parser: 7.1.6 - postcss-replace-overflow-wrap@4.0.0(postcss@8.5.26): + postcss-replace-overflow-wrap@4.0.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 + postcss: 8.5.28 - postcss-selector-not@9.0.0(postcss@8.5.26): + postcss-selector-not@9.0.0(postcss@8.5.28): dependencies: - postcss: 8.5.26 - postcss-selector-parser: 7.1.1 + postcss: 8.5.28 + postcss-selector-parser: 7.1.6 postcss-selector-parser@6.1.4: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-selector-parser@7.1.1: + postcss-selector-parser@7.1.6: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 postcss-value-parser@4.2.0: {} - postcss@8.5.26: + postcss@8.5.28: dependencies: - nanoid: 3.3.18 + nanoid: 3.3.19 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -23424,7 +19357,7 @@ snapshots: prelude-ls@1.2.1: {} - prettier@3.8.3: {} + prettier@3.9.7: {} pretty-format@29.7.0: dependencies: @@ -23440,7 +19373,7 @@ snapshots: process-nextick-args@2.0.1: {} - process-warning@5.0.0: {} + process-warning@5.1.0: {} process@0.11.10: {} @@ -23470,19 +19403,14 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.2 - '@types/node': 24.10.9 + '@types/node': 26.6.1 long: 5.3.2 - proxy-addr@2.0.7: + pseudolocale@3.1.0: dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 + commander: 13.1.0 - pseudolocale@2.2.0: - dependencies: - commander: 10.0.1 - - pump@3.0.3: + pump@3.0.4: dependencies: end-of-stream: 1.4.5 once: 1.4.0 @@ -23493,7 +19421,7 @@ snapshots: dependencies: tslib: 2.8.1 - pvutils@1.1.5: {} + pvutils@1.2.0: {} qified@0.10.1: dependencies: @@ -23505,210 +19433,117 @@ snapshots: pngjs: 5.0.0 yargs: 15.4.1 - qs@6.15.3: - dependencies: - es-define-property: 1.0.1 - side-channel: 1.1.1 - - qs@6.16.0: - dependencies: - es-define-property: 1.0.1 - side-channel: 1.1.1 - - queue-microtask@1.2.3: {} - quick-format-unescaped@4.0.4: {} - quick-lru@6.1.2: {} - radix3@1.1.2: {} - range-parser@1.2.1: {} + range-parser@1.3.0: {} - raw-body@2.5.3: + react-aria-components@1.21.1(react-dom@19.3.0(react@19.3.0))(react@19.3.0): dependencies: - bytes: 3.1.2 - http-errors: 2.0.1 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - - react-aria-components@1.15.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4): - dependencies: - '@internationalized/date': 3.11.0 - '@internationalized/string': 3.2.7 - '@react-aria/autocomplete': 3.0.0-rc.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/collections': 3.0.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/dnd': 3.11.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/focus': 3.21.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/live-announcer': 3.4.4 - '@react-aria/overlays': 3.31.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/ssr': 3.9.10(react@19.2.4) - '@react-aria/textfield': 3.18.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/toolbar': 3.0.0-beta.23(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/virtualizer': 4.1.12(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/autocomplete': 3.0.0-beta.4(react@19.2.4) - '@react-stately/layout': 4.5.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-stately/selection': 3.20.8(react@19.2.4) - '@react-stately/table': 3.15.3(react@19.2.4) - '@react-stately/utils': 3.11.0(react@19.2.4) - '@react-stately/virtualizer': 4.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/form': 3.7.17(react@19.2.4) - '@react-types/grid': 3.3.7(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - '@react-types/table': 3.13.5(react@19.2.4) - '@swc/helpers': 0.5.19 + '@internationalized/date': 3.12.4 + '@internationalized/string': 3.2.10 + '@react-types/shared': 3.36.1(react@19.3.0) + '@swc/helpers': 0.5.23 client-only: 0.0.1 - react: 19.2.4 - react-aria: 3.46.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react-dom: 19.2.4(react@19.2.4) - react-stately: 3.44.0(react@19.2.4) - use-sync-external-store: 1.6.0(react@19.2.4) + react: 19.3.0 + react-aria: 3.52.1(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + react-dom: 19.3.0(react@19.3.0) + react-stately: 3.50.0(react@19.3.0) - react-aria@3.46.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-aria@3.52.1(react-dom@19.3.0(react@19.3.0))(react@19.3.0): dependencies: - '@internationalized/string': 3.2.7 - '@react-aria/breadcrumbs': 3.5.31(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/button': 3.14.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/calendar': 3.9.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/checkbox': 3.16.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/color': 3.1.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/combobox': 3.14.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/datepicker': 3.16.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/dialog': 3.5.33(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/disclosure': 3.1.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/dnd': 3.11.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/focus': 3.21.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/gridlist': 3.14.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/i18n': 3.12.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/interactions': 3.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/label': 3.7.24(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/landmark': 3.0.9(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/link': 3.8.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/listbox': 3.15.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/menu': 3.20.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/meter': 3.4.29(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/numberfield': 3.12.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/overlays': 3.31.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/progress': 3.4.29(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/radio': 3.12.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/searchfield': 3.8.11(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/select': 3.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/selection': 3.27.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/separator': 3.4.15(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/slider': 3.8.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/ssr': 3.9.10(react@19.2.4) - '@react-aria/switch': 3.7.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/table': 3.17.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/tabs': 3.11.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/tag': 3.8.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/textfield': 3.18.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/toast': 3.0.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/tooltip': 3.9.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/tree': 3.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/utils': 3.33.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-aria/visually-hidden': 3.8.30(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + '@internationalized/date': 3.12.4 + '@internationalized/number': 3.6.8 + '@internationalized/string': 3.2.10 + '@react-types/shared': 3.36.1(react@19.3.0) + '@swc/helpers': 0.5.23 + aria-hidden: 1.2.6 + clsx: 2.1.1 + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) + react-stately: 3.50.0(react@19.3.0) + use-sync-external-store: 1.7.0(react@19.3.0) - react-day-picker@9.13.2(react@19.2.4): + react-day-picker@10.0.1(@types/react@19.3.0)(react@19.3.0): dependencies: - '@date-fns/tz': 1.4.1 - date-fns: 4.1.0 - date-fns-jalali: 4.1.0-0 - react: 19.2.4 + '@date-fns/tz': 1.5.0 + date-fns: 4.4.0 + react: 19.3.0 + optionalDependencies: + '@types/react': 19.3.0 - react-dnd-accessible-backend@2.1.0(react-dnd@16.0.1(@types/node@25.3.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): + react-dnd-accessible-backend@2.1.0(react-dnd@16.0.1(@types/node@26.6.1)(@types/react@19.3.0)(react@19.3.0))(react-dom@19.3.0(react@19.3.0))(react@19.3.0): dependencies: - '@react-aria/live-announcer': 3.4.4 - react: 19.2.4 - react-dnd: 16.0.1(@types/node@25.3.0)(@types/react@19.2.14)(react@19.2.4) + '@react-aria/live-announcer': 3.5.1(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + react: 19.3.0 + react-dnd: 16.0.1(@types/node@26.6.1)(@types/react@19.3.0)(react@19.3.0) + transitivePeerDependencies: + - react-dom react-dnd-html5-backend@16.0.1: dependencies: dnd-core: 16.0.1 - react-dnd-multi-backend@9.0.0(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@25.3.0)(@types/react@19.2.14)(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-dnd-multi-backend@9.0.0(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@26.6.1)(@types/react@19.3.0)(react@19.3.0))(react-dom@19.3.0(react@19.3.0))(react@19.3.0): dependencies: dnd-core: 16.0.1 dnd-multi-backend: 9.0.0(dnd-core@16.0.1) - react: 19.2.4 - react-dnd: 16.0.1(@types/node@25.3.0)(@types/react@19.2.14)(react@19.2.4) - react-dnd-preview: 9.0.0(react-dnd@16.0.1(@types/node@25.3.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - react-dom: 19.2.4(react@19.2.4) + react: 19.3.0 + react-dnd: 16.0.1(@types/node@26.6.1)(@types/react@19.3.0)(react@19.3.0) + react-dnd-preview: 9.0.0(react-dnd@16.0.1(@types/node@26.6.1)(@types/react@19.3.0)(react@19.3.0))(react@19.3.0) + react-dom: 19.3.0(react@19.3.0) - react-dnd-preview@9.0.0(react-dnd@16.0.1(@types/node@25.3.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): + react-dnd-preview@9.0.0(react-dnd@16.0.1(@types/node@26.6.1)(@types/react@19.3.0)(react@19.3.0))(react@19.3.0): dependencies: - react: 19.2.4 - react-dnd: 16.0.1(@types/node@25.3.0)(@types/react@19.2.14)(react@19.2.4) + react: 19.3.0 + react-dnd: 16.0.1(@types/node@26.6.1)(@types/react@19.3.0)(react@19.3.0) - react-dnd@16.0.1(@types/node@25.3.0)(@types/react@19.2.14)(react@19.2.4): + react-dnd@16.0.1(@types/node@26.6.1)(@types/react@19.3.0)(react@19.3.0): dependencies: '@react-dnd/invariant': 4.0.2 '@react-dnd/shallowequal': 4.0.2 dnd-core: 16.0.1 fast-deep-equal: 3.1.3 hoist-non-react-statics: 3.3.2 - react: 19.2.4 + react: 19.3.0 optionalDependencies: - '@types/node': 25.3.0 - '@types/react': 19.2.14 + '@types/node': 26.6.1 + '@types/react': 19.3.0 - react-dom@19.2.4(react@19.2.4): + react-dom@19.3.0(react@19.3.0): dependencies: - react: 19.2.4 - scheduler: 0.27.0 + react: 19.3.0 + scheduler: 0.28.0 - react-hook-form@7.71.2(react@19.2.4): + react-hook-form@7.88.0(react@19.3.0): dependencies: - react: 19.2.4 + react: 19.3.0 - react-hotkeys-hook@5.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-hotkeys-hook@5.3.3(react-dom@19.3.0(react@19.3.0))(react@19.3.0): dependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) + react: 19.3.0 + react-dom: 19.3.0(react@19.3.0) react-is@16.13.1: {} react-is@18.3.1: {} - react-stately@3.44.0(react@19.2.4): + react-stately@3.50.0(react@19.3.0): dependencies: - '@react-stately/calendar': 3.9.2(react@19.2.4) - '@react-stately/checkbox': 3.7.4(react@19.2.4) - '@react-stately/collections': 3.12.9(react@19.2.4) - '@react-stately/color': 3.9.4(react@19.2.4) - '@react-stately/combobox': 3.12.2(react@19.2.4) - '@react-stately/data': 3.15.1(react@19.2.4) - '@react-stately/datepicker': 3.16.0(react@19.2.4) - '@react-stately/disclosure': 3.0.10(react@19.2.4) - '@react-stately/dnd': 3.7.3(react@19.2.4) - '@react-stately/form': 3.2.3(react@19.2.4) - '@react-stately/list': 3.13.3(react@19.2.4) - '@react-stately/menu': 3.9.10(react@19.2.4) - '@react-stately/numberfield': 3.10.4(react@19.2.4) - '@react-stately/overlays': 3.6.22(react@19.2.4) - '@react-stately/radio': 3.11.4(react@19.2.4) - '@react-stately/searchfield': 3.5.18(react@19.2.4) - '@react-stately/select': 3.9.1(react@19.2.4) - '@react-stately/selection': 3.20.8(react@19.2.4) - '@react-stately/slider': 3.7.4(react@19.2.4) - '@react-stately/table': 3.15.3(react@19.2.4) - '@react-stately/tabs': 3.8.8(react@19.2.4) - '@react-stately/toast': 3.1.3(react@19.2.4) - '@react-stately/toggle': 3.9.4(react@19.2.4) - '@react-stately/tooltip': 3.5.10(react@19.2.4) - '@react-stately/tree': 3.9.5(react@19.2.4) - '@react-types/shared': 3.33.0(react@19.2.4) - react: 19.2.4 + '@internationalized/date': 3.12.4 + '@internationalized/number': 3.6.8 + '@internationalized/string': 3.2.10 + '@react-types/shared': 3.36.1(react@19.3.0) + '@swc/helpers': 0.5.23 + react: 19.3.0 + use-sync-external-store: 1.7.0(react@19.3.0) - react@19.2.4: {} + react@19.3.0: {} - read-binary-file-arch@1.0.6: + read-binary-file-arch@1.0.6(supports-color@7.2.0): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color @@ -23736,13 +19571,9 @@ snapshots: process: 0.11.10 string_decoder: 1.3.0 - readdir-glob@1.1.3: + readdir-glob@3.0.0: dependencies: - minimatch: 5.1.9 - - readdirp@3.5.0: - dependencies: - picomatch: 2.3.2 + minimatch: 10.2.6 readdirp@3.6.0: dependencies: @@ -23752,16 +19583,18 @@ snapshots: real-require@0.2.0: {} + real-require@1.0.0: {} + recma-build-jsx@1.0.0: dependencies: '@types/estree': 1.0.9 estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.1(acorn@8.16.0): + recma-jsx@1.0.1(acorn@8.18.0): dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 @@ -23783,10 +19616,6 @@ snapshots: redis-errors@1.2.0: {} - redis-parser@3.0.0: - dependencies: - redis-errors: 1.2.0 - redux@4.2.1: dependencies: '@babel/runtime': 7.29.7 @@ -23814,13 +19643,13 @@ snapshots: regenerate: 1.4.2 regenerate-unicode-properties: 10.2.2 regjsgen: 0.8.0 - regjsparser: 0.13.0 + regjsparser: 0.13.2 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.2.1 regjsgen@0.8.0: {} - regjsparser@0.13.0: + regjsparser@0.13.2: dependencies: jsesc: 3.1.0 @@ -23828,28 +19657,17 @@ snapshots: dependencies: expressive-code: 0.44.2 - rehype-format@5.0.1: - dependencies: - '@types/hast': 3.0.5 - hast-util-format: 1.1.0 - - rehype-parse@9.0.1: - dependencies: - '@types/hast': 3.0.5 - hast-util-from-html: 2.0.3 - unified: 11.0.5 - rehype-raw@7.0.0: dependencies: '@types/hast': 3.0.5 hast-util-raw: 9.1.0 vfile: 6.0.3 - rehype-recma@1.0.0: + rehype-recma@1.0.0(supports-color@7.2.0): dependencies: '@types/estree': 1.0.9 '@types/hast': 3.0.5 - hast-util-to-estree: 3.1.3 + hast-util-to-estree: 3.1.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color @@ -23859,44 +19677,37 @@ snapshots: hast-util-to-html: 9.0.5 unified: 11.0.5 - rehype@13.0.2: - dependencies: - '@types/hast': 3.0.5 - rehype-parse: 9.0.1 - rehype-stringify: 10.0.1 - unified: 11.0.5 - - remark-directive@4.0.0: + remark-directive@4.0.0(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 - mdast-util-directive: 3.1.0 + mdast-util-directive: 3.1.0(supports-color@7.2.0) micromark-extension-directive: 4.0.0 unified: 11.0.5 transitivePeerDependencies: - supports-color - remark-gfm@4.0.1: + remark-gfm@4.0.1(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 - mdast-util-gfm: 3.1.0 + mdast-util-gfm: 3.1.0(supports-color@7.2.0) micromark-extension-gfm: 3.0.0 - remark-parse: 11.0.0 + remark-parse: 11.0.0(supports-color@7.2.0) remark-stringify: 11.0.0 unified: 11.0.5 transitivePeerDependencies: - supports-color - remark-mdx@3.1.1: + remark-mdx@3.1.1(supports-color@7.2.0): dependencies: - mdast-util-mdx: 3.0.0 + mdast-util-mdx: 3.0.0(supports-color@7.2.0) micromark-extension-mdxjs: 3.0.0 transitivePeerDependencies: - supports-color - remark-parse@11.0.0: + remark-parse@11.0.0(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) micromark-util-types: 2.0.2 unified: 11.0.5 transitivePeerDependencies: @@ -23937,36 +19748,27 @@ snapshots: require-main-filename@2.0.0: {} - requires-port@1.0.0: {} - resedit@1.7.2: dependencies: pe-library: 0.4.1 - reselect@5.2.0: {} + reselect@5.3.0: {} resolve-from@4.0.0: {} resolve-pkg-maps@1.0.0: {} - resolve@1.22.11: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - resolve@1.22.12: dependencies: es-errors: 1.3.0 is-core-module: 2.16.2 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - optional: true - restore-cursor@3.1.0: + restore-cursor@5.1.0: dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 + onetime: 7.0.0 + signal-exit: 4.1.0 retext-latin@4.0.0: dependencies: @@ -23995,74 +19797,32 @@ snapshots: retry@0.12.0: {} - retry@0.13.1: {} - - rettime@0.10.1: {} - - reusify@1.1.0: {} + rettime@0.11.11: {} rimraf@2.6.3: dependencies: glob: 7.2.3 - rolldown@1.2.7: + rolldown@1.2.9: dependencies: - '@oxc-project/types': 0.148.0 + '@oxc-project/types': 0.150.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm-eabi': 1.2.7 - '@rolldown/binding-android-arm64': 1.2.7 - '@rolldown/binding-darwin-arm64': 1.2.7 - '@rolldown/binding-darwin-x64': 1.2.7 - '@rolldown/binding-freebsd-x64': 1.2.7 - '@rolldown/binding-linux-arm-gnueabihf': 1.2.7 - '@rolldown/binding-linux-arm64-gnu': 1.2.7 - '@rolldown/binding-linux-arm64-musl': 1.2.7 - '@rolldown/binding-linux-ppc64-gnu': 1.2.7 - '@rolldown/binding-linux-s390x-gnu': 1.2.7 - '@rolldown/binding-linux-x64-gnu': 1.2.7 - '@rolldown/binding-linux-x64-musl': 1.2.7 - '@rolldown/binding-openharmony-arm64': 1.2.7 - '@rolldown/binding-win32-arm64-msvc': 1.2.7 - '@rolldown/binding-win32-x64-msvc': 1.2.7 - - rollup@4.63.1: - dependencies: - '@types/estree': 1.0.9 - optionalDependencies: - '@napi-rs/lzma-linux-x64-gnu': 1.5.1 - '@rollup/rollup-android-arm-eabi': 4.63.1 - '@rollup/rollup-android-arm64': 4.63.1 - '@rollup/rollup-darwin-arm64': 4.63.1 - '@rollup/rollup-darwin-x64': 4.63.1 - '@rollup/rollup-freebsd-arm64': 4.63.1 - '@rollup/rollup-freebsd-x64': 4.63.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.63.1 - '@rollup/rollup-linux-arm-musleabihf': 4.63.1 - '@rollup/rollup-linux-arm64-gnu': 4.63.1 - '@rollup/rollup-linux-arm64-musl': 4.63.1 - '@rollup/rollup-linux-loong64-gnu': 4.63.1 - '@rollup/rollup-linux-loong64-musl': 4.63.1 - '@rollup/rollup-linux-ppc64-gnu': 4.63.1 - '@rollup/rollup-linux-ppc64-musl': 4.63.1 - '@rollup/rollup-linux-riscv64-gnu': 4.63.1 - '@rollup/rollup-linux-riscv64-musl': 4.63.1 - '@rollup/rollup-linux-s390x-gnu': 4.63.1 - '@rollup/rollup-linux-x64-gnu': 4.63.1 - '@rollup/rollup-linux-x64-musl': 4.63.1 - '@rollup/rollup-openbsd-x64': 4.63.1 - '@rollup/rollup-openharmony-arm64': 4.63.1 - '@rollup/rollup-win32-arm64-msvc': 4.63.1 - '@rollup/rollup-win32-ia32-msvc': 4.63.1 - '@rollup/rollup-win32-x64-gnu': 4.63.1 - '@rollup/rollup-win32-x64-msvc': 4.63.1 - fsevents: 2.3.3 - - run-applescript@7.1.0: {} - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 + '@rolldown/binding-android-arm-eabi': 1.2.9 + '@rolldown/binding-android-arm64': 1.2.9 + '@rolldown/binding-darwin-arm64': 1.2.9 + '@rolldown/binding-darwin-x64': 1.2.9 + '@rolldown/binding-freebsd-x64': 1.2.9 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.9 + '@rolldown/binding-linux-arm64-gnu': 1.2.9 + '@rolldown/binding-linux-arm64-musl': 1.2.9 + '@rolldown/binding-linux-ppc64-gnu': 1.2.9 + '@rolldown/binding-linux-s390x-gnu': 1.2.9 + '@rolldown/binding-linux-x64-gnu': 1.2.9 + '@rolldown/binding-linux-x64-musl': 1.2.9 + '@rolldown/binding-openharmony-arm64': 1.2.9 + '@rolldown/binding-win32-arm64-msvc': 1.2.9 + '@rolldown/binding-win32-x64-msvc': 1.2.9 rxjs@7.8.2: dependencies: @@ -24076,8 +19836,6 @@ snapshots: safe-stable-stringify@2.5.0: {} - safer-buffer@2.1.2: {} - sanitize-filename@1.6.4: dependencies: truncate-utf8-bytes: 1.0.2 @@ -24099,77 +19857,21 @@ snapshots: '@bruits/satteri-win32-arm64-msvc': 0.10.5 '@bruits/satteri-win32-x64-msvc': 0.10.5 - satteri@0.9.5: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.5 - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - optionalDependencies: - '@bruits/satteri-darwin-arm64': 0.9.5 - '@bruits/satteri-darwin-x64': 0.9.5 - '@bruits/satteri-linux-arm64-gnu': 0.9.5 - '@bruits/satteri-linux-arm64-musl': 0.9.5 - '@bruits/satteri-linux-x64-gnu': 0.9.5 - '@bruits/satteri-linux-x64-musl': 0.9.5 - '@bruits/satteri-wasm32-wasi': 0.9.5 - '@bruits/satteri-win32-arm64-msvc': 0.9.5 - '@bruits/satteri-win32-x64-msvc': 0.9.5 - - sax@1.6.0: {} - sax@1.6.1: {} - saxes@6.0.0: - dependencies: - xmlchars: 2.2.0 - optional: true - - scheduler@0.27.0: {} - - schema-utils@4.3.3: - dependencies: - '@types/json-schema': 7.0.15 - ajv: 8.18.0 - ajv-formats: 2.1.1(ajv@8.18.0) - ajv-keywords: 5.1.0(ajv@8.18.0) + scheduler@0.28.0: {} sdp-transform@2.15.0: {} - sdp@3.2.1: {} + sdp@3.2.2: {} secure-json-parse@4.1.0: {} - select-hose@2.0.0: {} + semver@7.8.5: {} - selfsigned@5.5.0: + send@1.2.1(supports-color@7.2.0): dependencies: - '@peculiar/x509': 1.14.3 - pkijs: 3.4.0 - - semver@7.7.4: {} - - send@0.19.2: - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.1 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.2 - transitivePeerDependencies: - - supports-color - - send@1.2.1: - dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -24178,43 +19880,24 @@ snapshots: mime-types: 3.0.2 ms: 2.1.3 on-finished: 2.4.1 - range-parser: 1.2.1 + range-parser: 1.3.0 statuses: 2.0.2 transitivePeerDependencies: - supports-color - serve-index@1.9.2: - dependencies: - accepts: 1.3.8 - batch: 0.6.1 - debug: 2.6.9 - escape-html: 1.0.3 - http-errors: 1.8.1 - mime-types: 2.1.35 - parseurl: 1.3.3 - transitivePeerDependencies: - - supports-color - - serve-static@1.16.3: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.19.2 - transitivePeerDependencies: - - supports-color - server-destroy@1.0.1: {} set-blocking@2.0.0: {} + set-cookie-parser@3.1.2: {} + setprototypeof@1.2.0: {} - sharp@0.35.4(@types/node@25.3.0): + sharp@0.35.4(@types/node@26.6.1): dependencies: '@img/colour': 1.1.0 detect-libc: 2.1.2 - semver: 7.7.4 + semver: 7.8.5 optionalDependencies: '@img/sharp-darwin-arm64': 0.35.4 '@img/sharp-darwin-x64': 0.35.4 @@ -24241,7 +19924,7 @@ snapshots: '@img/sharp-win32-arm64': 0.35.4 '@img/sharp-win32-ia32': 0.35.4 '@img/sharp-win32-x64': 0.35.4 - '@types/node': 25.3.0 + '@types/node': 26.6.1 shebang-command@2.0.0: dependencies: @@ -24249,8 +19932,6 @@ snapshots: shebang-regex@3.0.0: {} - shell-quote@1.10.0: {} - shiki@4.4.3: dependencies: '@shikijs/core': 4.4.3 @@ -24262,34 +19943,6 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.5 - side-channel-list@1.0.1: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.1: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.1 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - siginfo@2.0.0: {} signal-exit@3.0.7: {} @@ -24298,22 +19951,16 @@ snapshots: simple-update-notifier@2.0.0: dependencies: - semver: 7.7.4 - - sirv@2.0.4: - dependencies: - '@polka/url': 1.0.0-next.29 - mrmime: 2.0.1 - totalist: 3.0.1 + semver: 7.8.5 sisteransi@1.0.5: {} sitemap@9.0.1: dependencies: - '@types/node': 24.10.9 + '@types/node': 24.13.5 '@types/sax': 1.2.7 arg: 5.0.2 - sax: 1.6.0 + sax: 1.6.1 smol-toml@1.8.0: {} @@ -24322,12 +19969,6 @@ snapshots: dot-case: 3.0.4 tslib: 2.8.1 - sockjs@0.3.24: - dependencies: - faye-websocket: 0.11.4 - uuid: 11.1.1 - websocket-driver: 0.7.5 - sonic-boom@4.2.1: dependencies: atomic-sleep: 1.0.0 @@ -24345,27 +19986,6 @@ snapshots: space-separated-tokens@2.0.2: {} - spdy-transport@3.0.0: - dependencies: - debug: 4.4.3 - detect-node: 2.1.0 - hpack.js: 2.1.6 - obuf: 1.1.2 - readable-stream: 3.6.2 - wbuf: 1.7.3 - transitivePeerDependencies: - - supports-color - - spdy@4.0.2: - dependencies: - debug: 4.4.3 - handle-thing: 2.0.1 - http-deceiver: 1.2.7 - select-hose: 2.0.0 - spdy-transport: 3.0.0 - transitivePeerDependencies: - - supports-color - split2@4.2.0: {} stackback@0.0.2: {} @@ -24374,18 +19994,18 @@ snapshots: stat-mode@1.0.0: {} - statuses@1.5.0: {} - statuses@2.0.2: {} std-env@4.2.0: {} + stdin-discarder@0.3.2: {} + stream-browserify@3.0.0: dependencies: inherits: 2.0.4 readable-stream: 3.6.2 - streamx@2.23.0: + streamx@2.28.1: dependencies: events-universal: 1.0.1 fast-fifo: 1.3.2 @@ -24402,11 +20022,16 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string-width@5.1.2: + string-width@7.2.0: dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.2 + emoji-regex: 10.6.0 + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 + + string-width@8.2.2: + dependencies: + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 string_decoder@1.1.1: dependencies: @@ -24425,15 +20050,15 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.2: + strip-ansi@7.2.0: dependencies: - ansi-regex: 6.2.2 + ansi-regex: 6.3.0 strip-json-comments@5.0.3: {} - stripe@22.0.2(@types/node@25.3.0): + stripe@22.6.2(@types/node@26.6.1): optionalDependencies: - '@types/node': 25.3.0 + '@types/node': 26.6.1 strnum@2.4.2: dependencies: @@ -24449,9 +20074,9 @@ snapshots: dependencies: inline-style-parser: 0.2.7 - sumchecker@3.0.1: + sumchecker@3.0.1(supports-color@7.2.0): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color @@ -24461,7 +20086,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svg-parser@2.0.4: {} + svg-parser@2.1.0: {} svgo@3.3.5: dependencies: @@ -24471,7 +20096,7 @@ snapshots: css-what: 6.2.2 csso: 5.0.5 picocolors: 1.1.1 - sax: 1.6.0 + sax: 1.6.1 svgo@4.1.0: dependencies: @@ -24483,29 +20108,23 @@ snapshots: picocolors: 1.1.1 sax: 1.6.1 - symbol-tree@3.2.4: - optional: true - - tabbable@6.4.0: {} - - table-layout@4.1.1: - dependencies: - array-back: 6.2.2 - wordwrapjs: 5.1.1 + tabbable@6.5.0: {} tagged-tag@1.0.0: {} - tailwindcss@4.2.1: {} + tailwindcss@4.3.3: {} - tapable@2.3.0: {} + tapable@2.3.3: {} - tar-stream@3.1.7: + tar-stream@3.2.1: dependencies: - b4a: 1.8.0 + b4a: 1.9.0 + bare-fs: 4.8.1 fast-fifo: 1.3.2 - streamx: 2.23.0 + streamx: 2.28.1 transitivePeerDependencies: - bare-abort-controller + - bare-buffer - react-native-b4a tar@7.5.22: @@ -24516,6 +20135,13 @@ snapshots: minizlib: 3.1.0 yallist: 5.0.0 + teex@1.0.1: + dependencies: + streamx: 2.28.1 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + temp-dir@3.0.0: {} temp-file@3.4.0: @@ -24537,53 +20163,31 @@ snapshots: text-decoder@1.2.7: dependencies: - b4a: 1.8.0 + b4a: 1.9.0 transitivePeerDependencies: - react-native-b4a - thingies@2.5.0(tslib@2.8.1): + thread-stream@4.2.0: dependencies: - tslib: 2.8.1 - - thread-stream@4.0.0: - dependencies: - real-require: 0.2.0 - - threads@1.7.0: - dependencies: - callsites: 3.1.0 - debug: 4.4.3 - is-observable: 2.1.0 - observable-fns: 0.6.1 - optionalDependencies: - tiny-worker: 2.3.0 - transitivePeerDependencies: - - supports-color + real-require: 1.0.0 thumbhash@0.1.1: {} - thunky@1.1.0: {} - tiny-async-pool@1.3.0: dependencies: - semver: 7.7.4 + semver: 7.8.5 tiny-inflate@1.0.3: {} tiny-invariant@1.3.3: {} - tiny-lru@11.4.7: {} + tiny-lru@13.0.0: {} - tiny-worker@2.3.0: - dependencies: - esm: 3.2.25 - optional: true - - tinybench@2.9.0: {} + tinybench@6.1.4: {} tinyclip@0.1.15: {} - tinyexec@1.0.2: {} + tinyexec@1.3.0: {} tinyexec@1.3.1: {} @@ -24592,23 +20196,17 @@ snapshots: fdir: 6.5.0(picomatch@4.0.7) picomatch: 4.0.7 + tinypool@2.2.0: {} + tinyrainbow@3.1.1: {} tlds@1.261.0: {} - tldts-core@7.0.23: {} + tldts-core@7.4.13: {} - tldts-core@7.4.11: - optional: true - - tldts@7.0.23: + tldts@7.4.13: dependencies: - tldts-core: 7.0.23 - - tldts@7.4.11: - dependencies: - tldts-core: 7.4.11 - optional: true + tldts-core: 7.4.13 tmp-promise@3.0.3: dependencies: @@ -24622,16 +20220,9 @@ snapshots: toidentifier@1.0.1: {} - totalist@3.0.1: {} - - tough-cookie@6.0.0: - dependencies: - tldts: 7.0.23 - tough-cookie@6.0.2: dependencies: - tldts: 7.4.11 - optional: true + tldts: 7.4.13 tr46@6.0.0: dependencies: @@ -24639,10 +20230,6 @@ snapshots: transliteration@2.6.1: {} - tree-dump@1.1.0(tslib@2.8.1): - dependencies: - tslib: 2.8.1 - trigram-utils@2.0.1: dependencies: collapse-white-space: 2.1.0 @@ -24658,11 +20245,9 @@ snapshots: ts-algebra@1.2.2: {} - ts-api-utils@2.5.0(typescript@6.0.2): + ts-api-utils@2.5.0(typescript@6.0.3): dependencies: - typescript: 6.0.2 - - ts-debounce@4.0.0: {} + typescript: 6.0.3 ts-morph@28.0.0: dependencies: @@ -24673,10 +20258,9 @@ snapshots: tslib@2.8.1: {} - tsx@4.21.0: + tsx@4.23.13: dependencies: - esbuild: 0.27.2 - get-tsconfig: 4.13.6 + esbuild: 0.28.2 optionalDependencies: fsevents: 2.3.3 @@ -24694,32 +20278,25 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.41.0: {} - - type-fest@5.4.4: + type-fest@5.9.0: dependencies: tagged-tag: 1.0.0 - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - typed-css-modules@0.9.1: dependencies: camelcase: 6.3.0 chalk: 4.1.2 chokidar: 3.6.0 - glob: 10.5.0 + glob: 13.0.6 icss-replace-symbols: 1.1.0 is-there: 4.5.2 mkdirp: 3.0.1 - postcss: 8.5.26 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.26) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.26) - postcss-modules-scope: 3.2.1(postcss@8.5.26) - postcss-modules-values: 4.0.0(postcss@8.5.26) - yargs: 17.7.2 + postcss: 8.5.28 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.28) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.28) + postcss-modules-scope: 3.2.1(postcss@8.5.28) + postcss-modules-values: 4.0.0(postcss@8.5.28) + yargs: 17.7.3 typed-emitter@2.1.0: optionalDependencies: @@ -24729,50 +20306,65 @@ snapshots: typescript-auto-import-cache@0.3.6: dependencies: - semver: 7.7.4 + semver: 7.8.5 - typescript-eslint@8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2): + typescript-eslint@8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2) - '@typescript-eslint/parser': 8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2) - '@typescript-eslint/typescript-estree': 8.70.0(typescript@6.0.2) - '@typescript-eslint/utils': 8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.2) - eslint: 10.10.0(jiti@2.7.0) - typescript: 6.0.2 + '@typescript-eslint/eslint-plugin': 8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/parser': 8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.70.0(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/utils': 8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + eslint: 10.10.0(jiti@2.7.0)(supports-color@7.2.0) + typescript: 6.0.3 transitivePeerDependencies: - supports-color typescript@5.4.5: {} - typescript@5.9.3: {} + typescript@6.0.3: {} - typescript@6.0.2: {} - - typical@7.3.0: {} + typescript@7.0.2: + optionalDependencies: + '@typescript/typescript-aix-ppc64': 7.0.2 + '@typescript/typescript-darwin-arm64': 7.0.2 + '@typescript/typescript-darwin-x64': 7.0.2 + '@typescript/typescript-freebsd-arm64': 7.0.2 + '@typescript/typescript-freebsd-x64': 7.0.2 + '@typescript/typescript-linux-arm': 7.0.2 + '@typescript/typescript-linux-arm64': 7.0.2 + '@typescript/typescript-linux-loong64': 7.0.2 + '@typescript/typescript-linux-mips64el': 7.0.2 + '@typescript/typescript-linux-ppc64': 7.0.2 + '@typescript/typescript-linux-riscv64': 7.0.2 + '@typescript/typescript-linux-s390x': 7.0.2 + '@typescript/typescript-linux-x64': 7.0.2 + '@typescript/typescript-netbsd-arm64': 7.0.2 + '@typescript/typescript-netbsd-x64': 7.0.2 + '@typescript/typescript-openbsd-arm64': 7.0.2 + '@typescript/typescript-openbsd-x64': 7.0.2 + '@typescript/typescript-sunos-x64': 7.0.2 + '@typescript/typescript-win32-arm64': 7.0.2 + '@typescript/typescript-win32-x64': 7.0.2 ufo@1.6.4: {} uint8array-extras@1.5.0: {} - uint8arrays@3.0.0: - dependencies: - multiformats: 9.9.0 - ultrahtml@1.7.0: {} - unbash@2.2.0: {} + unbash@4.0.11: {} uncrypto@0.1.3: {} - undici-types@5.26.5: {} - - undici-types@7.16.0: {} + undici-types@6.21.0: {} undici-types@7.18.2: {} - undici@6.28.0: {} + undici-types@8.9.0: {} - undici@7.29.0: {} + undici@6.28.1: {} + + undici@7.29.1: {} undici@8.10.2: {} @@ -24865,9 +20457,7 @@ snapshots: dependencies: normalize-path: 2.1.1 - unpipe@1.0.0: {} - - unstorage@1.17.5(ioredis@5.9.3): + unstorage@1.17.5: dependencies: anymatch: 3.1.3 chokidar: 5.0.0 @@ -24877,8 +20467,6 @@ snapshots: node-fetch-native: 1.6.7 ofetch: 1.5.1 ufo: 1.6.4 - optionalDependencies: - ioredis: 5.9.3 until-async@3.0.2: {} @@ -24890,13 +20478,13 @@ snapshots: graceful-fs: 4.2.11 node-int64: 0.4.0 - update-browserslist-db@1.2.3(browserslist@4.28.1): + update-browserslist-db@1.3.3(browserslist@4.29.0): dependencies: - browserslist: 4.28.1 + browserslist: 4.29.0 escalade: 3.2.0 picocolors: 1.1.1 - update-electron-app@3.1.2: + update-electron-app@3.3.0: dependencies: github-url-to-object: 4.0.6 ms: 2.1.3 @@ -24913,34 +20501,28 @@ snapshots: urlpattern-polyfill@10.1.0: {} - use-sync-external-store@1.6.0(react@19.2.4): + use-sync-external-store@1.7.0(react@19.3.0): dependencies: - react: 19.2.4 + react: 19.3.0 - usehooks-ts@3.1.1(react@19.2.4): + usehooks-ts@3.1.1(react@19.3.0): dependencies: lodash.debounce: 4.0.8 - react: 19.2.4 + react: 19.3.0 utf8-byte-length@1.0.5: {} util-deprecate@1.0.2: {} - utils-merge@1.0.1: {} - - uuid@11.1.1: {} - - valibot@1.4.2(typescript@6.0.2): + valibot@1.5.0(typescript@7.0.2): optionalDependencies: - typescript: 6.0.2 + typescript: 7.0.2 - validator@13.15.26: {} + validator@13.15.35: {} - vary@1.1.2: {} - - velopack@0.0.1298: + velopack@1.2.0: dependencies: - '@neon-rs/load': 0.1.82 + '@neon-rs/load': 0.2.6 vfile-location@5.0.3: dependencies: @@ -24957,189 +20539,130 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.9.0): - dependencies: - esbuild: 0.27.2 - fdir: 6.5.0(picomatch@4.0.7) - picomatch: 4.0.7 - postcss: 8.5.26 - rollup: 4.63.1 - tinyglobby: 0.2.17 - optionalDependencies: - '@types/node': 25.3.0 - fsevents: 2.3.3 - jiti: 2.7.0 - lightningcss: 1.33.0 - tsx: 4.21.0 - yaml: 2.9.0 - - vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0): + vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1): dependencies: lightningcss: 1.33.0 picomatch: 4.0.7 - postcss: 8.5.26 - rolldown: 1.2.7 + postcss: 8.5.28 + rolldown: 1.2.9 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 25.3.0 + '@types/node': 26.6.1 esbuild: 0.28.2 fsevents: 2.3.3 jiti: 2.7.0 - tsx: 4.21.0 - yaml: 2.9.0 + tsx: 4.23.13 + yaml: 2.9.1 - vitefu@1.1.3(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)): + vitefu@1.1.3(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)): optionalDependencies: - vite: 8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0) + vite: 8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1) - vitest@4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)): + vitest@5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@6.0.3))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)): dependencies: - '@vitest/expect': 4.1.11 - '@vitest/mocker': 4.1.11(msw@2.12.10(@types/node@25.3.0)(typescript@5.4.5))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) - '@vitest/pretty-format': 4.1.11 - '@vitest/runner': 4.1.11 - '@vitest/snapshot': 4.1.11 - '@vitest/spy': 4.1.11 - '@vitest/utils': 4.1.11 + '@types/chai': 5.2.3 + '@vitest/mocker': 5.0.1(msw@2.15.0(@types/node@26.6.1)(typescript@6.0.3))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) + chai: 6.2.2 es-module-lexer: 2.3.2 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 + expect-type: 1.4.0 + magic-string: 1.4.1 + obug: 2.2.1 picomatch: 4.0.7 std-env: 4.2.0 - tinybench: 2.9.0 - tinyexec: 1.0.2 + tinybench: 6.1.4 + tinyexec: 1.3.0 tinyglobby: 0.2.17 - tinyrainbow: 3.1.1 - vite: 8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0) + vite: 8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1) why-is-node-running: 2.3.0 optionalDependencies: - '@opentelemetry/api': 1.9.0 - '@types/node': 25.3.0 - '@vitest/coverage-v8': 4.1.11(vitest@4.1.11) - happy-dom: 20.12.0 - jsdom: 28.1.0(@noble/hashes@2.4.0) + '@opentelemetry/api': 1.9.1 + '@types/node': 26.6.1 + '@vitest/coverage-v8': 5.0.1(vitest@5.0.1) + happy-dom: 20.14.5 transitivePeerDependencies: - msw - vitest@4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.9.0)): + vitest@5.0.1(@opentelemetry/api@1.9.1)(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(happy-dom@20.14.5)(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)): dependencies: - '@vitest/expect': 4.1.11 - '@vitest/mocker': 4.1.11(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.9.0)) - '@vitest/pretty-format': 4.1.11 - '@vitest/runner': 4.1.11 - '@vitest/snapshot': 4.1.11 - '@vitest/spy': 4.1.11 - '@vitest/utils': 4.1.11 + '@types/chai': 5.2.3 + '@vitest/mocker': 5.0.1(msw@2.15.0(@types/node@26.6.1)(typescript@7.0.2))(vite@8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1)) + chai: 6.2.2 es-module-lexer: 2.3.2 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 + expect-type: 1.4.0 + magic-string: 1.4.1 + obug: 2.2.1 picomatch: 4.0.7 std-env: 4.2.0 - tinybench: 2.9.0 - tinyexec: 1.0.2 + tinybench: 6.1.4 + tinyexec: 1.3.0 tinyglobby: 0.2.17 - tinyrainbow: 3.1.1 - vite: 7.3.6(@types/node@25.3.0)(jiti@2.7.0)(lightningcss@1.33.0)(tsx@4.21.0)(yaml@2.9.0) + vite: 8.3.0(@types/node@26.6.1)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.13)(yaml@2.9.1) why-is-node-running: 2.3.0 optionalDependencies: - '@opentelemetry/api': 1.9.0 - '@types/node': 25.3.0 - '@vitest/coverage-v8': 4.1.11(vitest@4.1.11) - happy-dom: 20.12.0 - jsdom: 28.1.0(@noble/hashes@2.4.0) + '@opentelemetry/api': 1.9.1 + '@types/node': 26.6.1 + '@vitest/coverage-v8': 5.0.1(vitest@5.0.1) + happy-dom: 20.14.5 transitivePeerDependencies: - msw - vitest@4.1.11(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/coverage-v8@4.1.11)(happy-dom@20.12.0)(jsdom@28.1.0(@noble/hashes@2.4.0))(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)): - dependencies: - '@vitest/expect': 4.1.11 - '@vitest/mocker': 4.1.11(msw@2.12.10(@types/node@25.3.0)(typescript@6.0.2))(vite@8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) - '@vitest/pretty-format': 4.1.11 - '@vitest/runner': 4.1.11 - '@vitest/snapshot': 4.1.11 - '@vitest/spy': 4.1.11 - '@vitest/utils': 4.1.11 - es-module-lexer: 2.3.2 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.7 - std-env: 4.2.0 - tinybench: 2.9.0 - tinyexec: 1.0.2 - tinyglobby: 0.2.17 - tinyrainbow: 3.1.1 - vite: 8.2.2(@types/node@25.3.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@opentelemetry/api': 1.9.0 - '@types/node': 25.3.0 - '@vitest/coverage-v8': 4.1.11(vitest@4.1.11) - happy-dom: 20.12.0 - jsdom: 28.1.0(@noble/hashes@2.4.0) - transitivePeerDependencies: - - msw - - volar-service-css@0.0.71(@volar/language-service@2.4.28): + volar-service-css@0.0.71(@volar/language-service@2.4.28(typescript@6.0.3)): dependencies: vscode-css-languageservice: 6.3.10 vscode-languageserver-textdocument: 1.0.14 vscode-uri: 3.2.0 optionalDependencies: - '@volar/language-service': 2.4.28 + '@volar/language-service': 2.4.28(typescript@6.0.3) - volar-service-emmet@0.0.71(@volar/language-service@2.4.28): + volar-service-emmet@0.0.71(@volar/language-service@2.4.28(typescript@6.0.3)): dependencies: '@emmetio/css-parser': 0.4.1 '@emmetio/html-matcher': 1.3.0 '@vscode/emmet-helper': 2.11.0 vscode-uri: 3.2.0 optionalDependencies: - '@volar/language-service': 2.4.28 + '@volar/language-service': 2.4.28(typescript@6.0.3) - volar-service-html@0.0.71(@volar/language-service@2.4.28): + volar-service-html@0.0.71(@volar/language-service@2.4.28(typescript@6.0.3)): dependencies: vscode-html-languageservice: 5.6.2 vscode-languageserver-textdocument: 1.0.14 vscode-uri: 3.2.0 optionalDependencies: - '@volar/language-service': 2.4.28 + '@volar/language-service': 2.4.28(typescript@6.0.3) - volar-service-prettier@0.0.71(@volar/language-service@2.4.28)(prettier@3.8.3): + volar-service-prettier@0.0.71(@volar/language-service@2.4.28(typescript@6.0.3))(prettier@3.9.7): dependencies: vscode-uri: 3.2.0 optionalDependencies: - '@volar/language-service': 2.4.28 - prettier: 3.8.3 + '@volar/language-service': 2.4.28(typescript@6.0.3) + prettier: 3.9.7 - volar-service-typescript-twoslash-queries@0.0.71(@volar/language-service@2.4.28): + volar-service-typescript-twoslash-queries@0.0.71(@volar/language-service@2.4.28(typescript@6.0.3))(typescript@6.0.3): dependencies: vscode-uri: 3.2.0 optionalDependencies: - '@volar/language-service': 2.4.28 + '@volar/language-service': 2.4.28(typescript@6.0.3) + typescript: 6.0.3 - volar-service-typescript@0.0.71(@volar/language-service@2.4.28): + volar-service-typescript@0.0.71(@volar/language-service@2.4.28(typescript@6.0.3))(typescript@6.0.3): dependencies: path-browserify: 1.0.1 - semver: 7.7.4 + semver: 7.8.5 typescript-auto-import-cache: 0.3.6 vscode-languageserver-textdocument: 1.0.14 vscode-nls: 5.2.0 vscode-uri: 3.2.0 optionalDependencies: - '@volar/language-service': 2.4.28 + '@volar/language-service': 2.4.28(typescript@6.0.3) + typescript: 6.0.3 - volar-service-yaml@0.0.71(@volar/language-service@2.4.28): + volar-service-yaml@0.0.71(@volar/language-service@2.4.28(typescript@6.0.3)): dependencies: vscode-uri: 3.2.0 yaml-language-server: 1.23.0 optionalDependencies: - '@volar/language-service': 2.4.28 + '@volar/language-service': 2.4.28(typescript@6.0.3) vscode-css-languageservice@6.3.10: dependencies: @@ -25193,21 +20716,8 @@ snapshots: w3c-keyname@2.2.8: {} - w3c-xmlserializer@5.0.0: - dependencies: - xml-name-validator: 5.0.0 - optional: true - walk-up-path@4.0.0: {} - wbuf@1.7.3: - dependencies: - minimalistic-assert: 1.0.1 - - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - web-namespaces@2.0.1: {} webcrypto-core@1.9.2: @@ -25218,101 +20728,12 @@ snapshots: asn1js: 3.0.10 tslib: 2.8.1 - webidl-conversions@8.0.1: - optional: true - - webpack-bundle-analyzer@4.10.2: + webrtc-adapter@9.0.6: dependencies: - '@discoveryjs/json-ext': 0.5.7 - acorn: 8.16.0 - acorn-walk: 8.3.5 - commander: 7.2.0 - debounce: 1.2.1 - escape-string-regexp: 4.0.0 - gzip-size: 6.0.0 - html-escaper: 2.0.2 - opener: 1.5.2 - picocolors: 1.1.1 - sirv: 2.0.4 - ws: 7.5.13 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - webpack-dev-middleware@7.4.5(tslib@2.8.1): - dependencies: - colorette: 2.0.20 - memfs: 4.56.10(tslib@2.8.1) - mime-types: 3.0.2 - on-finished: 2.4.1 - range-parser: 1.2.1 - schema-utils: 4.3.3 - transitivePeerDependencies: - - tslib - - webpack-dev-server@5.2.6(tslib@2.8.1): - dependencies: - '@types/bonjour': 3.5.13 - '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.25 - '@types/express-serve-static-core': 4.19.8 - '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.10 - '@types/sockjs': 0.3.36 - '@types/ws': 8.18.1 - ansi-html-community: 0.0.8 - bonjour-service: 1.3.0 - chokidar: 3.6.0 - colorette: 2.0.20 - compression: 1.8.1 - connect-history-api-fallback: 2.0.0 - express: 4.22.1 - graceful-fs: 4.2.11 - http-proxy-middleware: 2.0.10(@types/express@4.17.25) - ipaddr.js: 2.3.0 - launch-editor: 2.14.1 - open: 10.2.0 - p-retry: 6.2.1 - schema-utils: 4.3.3 - selfsigned: 5.5.0 - serve-index: 1.9.2 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(tslib@2.8.1) - ws: 8.21.3 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - tslib - - utf-8-validate - - webrtc-adapter@9.0.4: - dependencies: - sdp: 3.2.1 - - websocket-driver@0.7.5: - dependencies: - http-parser-js: 0.5.10 - safe-buffer: 5.2.1 - websocket-extensions: 0.1.4 - - websocket-extensions@0.1.4: {} + sdp: 3.2.2 whatwg-mimetype@3.0.0: {} - whatwg-mimetype@5.0.0: - optional: true - - whatwg-url@16.0.1(@noble/hashes@2.4.0): - dependencies: - '@exodus/bytes': 1.15.1(@noble/hashes@2.4.0) - tr46: 6.0.0 - webidl-conversions: 8.0.1 - transitivePeerDependencies: - - '@noble/hashes' - optional: true - which-module@2.0.1: {} which@2.0.2: @@ -25334,8 +20755,6 @@ snapshots: word-wrap@1.2.5: {} - wordwrapjs@5.1.1: {} - wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -25348,33 +20767,21 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@8.1.0: + wrap-ansi@9.0.2: dependencies: ansi-styles: 6.2.3 - string-width: 5.1.2 - strip-ansi: 7.1.2 + string-width: 7.2.0 + strip-ansi: 7.2.0 wrappy@1.0.2: {} - ws@7.5.13: {} - ws@8.21.3: {} - wsl-utils@0.1.0: - dependencies: - is-wsl: 3.1.1 - - xml-name-validator@5.0.0: - optional: true - xml-naming@0.3.0: {} xmlbuilder@15.1.1: {} - xmlchars@2.2.0: - optional: true - - xstate@5.31.1: {} + xstate@5.33.2: {} xtend@4.0.2: {} @@ -25395,10 +20802,10 @@ snapshots: yaml-language-server@1.23.0: dependencies: '@vscode/l10n': 0.0.18 - ajv: 8.18.0 - ajv-draft-04: 1.0.0(ajv@8.18.0) - ajv-i18n: 4.2.0(ajv@8.18.0) - prettier: 3.8.3 + ajv: 8.20.0 + ajv-draft-04: 1.0.0(ajv@8.20.0) + ajv-i18n: 4.2.0(ajv@8.20.0) + prettier: 3.9.7 request-light: 0.5.8 vscode-json-languageservice: 4.1.8 vscode-languageserver: 9.0.1 @@ -25407,12 +20814,9 @@ snapshots: vscode-uri: 3.2.0 yaml: 2.8.3 - yaml@1.10.3: - optional: true - yaml@2.8.3: {} - yaml@2.9.0: {} + yaml@2.9.1: {} yargs-parser@18.1.3: dependencies: @@ -25437,7 +20841,7 @@ snapshots: y18n: 4.0.3 yargs-parser: 18.1.3 - yargs@17.7.2: + yargs@17.7.3: dependencies: cliui: 8.0.1 escalade: 3.2.0 @@ -25447,6 +20851,15 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yargs@18.1.0: + dependencies: + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 8.2.2 + y18n: 5.0.8 + yargs-parser: 22.0.0 + yjs@13.6.32: dependencies: lib0: 0.2.117 @@ -25455,16 +20868,16 @@ snapshots: yocto-queue@1.2.2: {} - yoctocolors-cjs@2.1.3: {} + yoctocolors@2.2.0: {} - zip-stream@6.0.1: + zip-stream@7.0.5: dependencies: - archiver-utils: 5.0.2 - compress-commons: 6.0.2 + compress-commons: 7.0.1 + normalize-path: 3.0.0 readable-stream: 4.7.0 zod@3.25.76: {} - zod@4.3.6: {} + zod@4.6.5: {} zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 4e626bcd1..388b459df 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -32,177 +32,178 @@ allowBuilds: blockExoticSubdeps: true catalog: - '@arborium/arborium': 2.16.0 - '@astrojs/check': 0.9.9 - '@astrojs/markdown-remark': 7.2.1 - '@astrojs/mdx': 7.0.3 - '@astrojs/node': 11.0.2 - '@astrojs/starlight': 0.41.4 - '@atproto/api': 0.19.0 - '@aws-sdk/client-s3': 3.1121.0 - '@aws-sdk/lib-storage': 3.1121.0 - '@aws-sdk/s3-request-presigner': 3.1121.0 - '@base-ui/react': 1.5.0 - '@biomejs/biome': 2.4.4 - '@bluesky-social/jwk-jose': 0.1.11 - '@bluesky-social/oauth-client-node': 0.3.9 - '@elastic/elasticsearch': 9.3.2 - '@floating-ui/react': 0.27.18 - '@floating-ui/react-dom': 2.1.7 - '@hcaptcha/react-hcaptcha': 2.0.2 - '@hono/node-server': 1.19.17 - '@lexical/history': 0.48.0 - '@lexical/react': 0.48.0 - '@lexical/utils': 0.48.0 - '@lingui/cli': 5.9.2 - '@lingui/core': 5.9.2 - '@lingui/react': 5.9.2 - '@lingui/swc-plugin': 5.11.0 - '@livekit/components-react': 2.9.20 - '@marsidev/react-turnstile': 1.4.2 + '@arborium/arborium': 2.18.2 + '@astrojs/check': 0.9.10 + '@astrojs/markdown-remark': 7.3.1 + '@astrojs/mdx': 8.0.1 + '@astrojs/node': 11.1.5 + '@astrojs/starlight': 0.42.1 + '@atproto/api': 0.20.44 + '@atproto/jwk-jose': 0.2.4 + '@atproto/oauth-client-node': 0.5.7 + '@aws-sdk/client-s3': 3.1133.0 + '@aws-sdk/lib-storage': 3.1133.0 + '@aws-sdk/s3-request-presigner': 3.1133.0 + '@base-ui/react': 1.8.0 + '@biomejs/biome': 2.5.14 + '@elastic/elasticsearch': 9.5.1 + '@floating-ui/react': 0.27.20 + '@floating-ui/react-dom': 2.1.9 + '@hcaptcha/react-hcaptcha': 2.2.0 + '@hono/node-server': 2.1.1 + '@lexical/history': 0.50.0 + '@lexical/react': 0.50.0 + '@lexical/utils': 0.50.0 + '@lingui/cli': 6.7.0 + '@lingui/core': 6.7.0 + '@lingui/format-po': 6.7.0 + '@lingui/react': 6.7.0 + '@lingui/swc-plugin': 6.7.0 + '@livekit/components-react': 2.9.24 + '@marsidev/react-turnstile': 1.6.1 '@mdx-js/mdx': 3.1.1 '@messageformat/core': 3.4.0 '@messageformat/parser': 5.1.1 + '@nats-io/jetstream': 3.4.0 + '@nats-io/transport-node': 3.4.0 '@phosphor-icons/react': 2.1.10 - '@radix-ui/react-checkbox': 1.3.3 - '@radix-ui/react-radio-group': 1.3.8 - '@radix-ui/react-switch': 1.2.6 - '@redocly/openapi-core': 2.52.0 - '@rspack/cli': 1.7.6 - '@rspack/core': 1.7.6 + '@radix-ui/react-checkbox': 1.3.11 + '@radix-ui/react-radio-group': 1.4.7 + '@radix-ui/react-switch': 1.3.7 + '@redocly/openapi-core': 2.53.2 + '@rspack/cli': 2.2.5 + '@rspack/core': 2.2.5 + '@rspack/dev-server': 2.2.1 '@sapphi-red/web-noise-suppressor': 0.4.0 - '@simplewebauthn/browser': 13.2.2 - '@simplewebauthn/server': 13.2.3 + '@simplewebauthn/browser': 14.0.0 + '@simplewebauthn/server': 14.0.2 '@svgr/webpack': 8.1.0 - '@tailwindcss/cli': 4.2.1 - '@types/archiver': 7.0.0 + '@tailwindcss/cli': 4.3.3 + '@types/archiver': 8.0.0 '@types/combokeys': 2.4.9 '@types/hast': 3.0.5 - '@types/lodash': 4.17.24 - '@types/luxon': 3.7.1 + '@types/lodash': 4.17.25 + '@types/luxon': 3.7.5 '@types/mdast': 4.0.4 - '@types/node': 25.3.0 - '@types/nodemailer': 7.0.11 - '@types/pg': 8.16.0 + '@types/node': 26.6.1 + '@types/pg': 8.23.1 '@types/qrcode': 1.5.6 - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3 + '@types/react': 19.3.0 + '@types/react-dom': 19.3.0 '@types/send': 1.2.1 '@types/validator': 13.15.10 - '@typescript/native-preview': 7.0.0-dev.20260224.1 - '@vitest/coverage-v8': 4.1.11 + '@vitest/coverage-v8': 5.0.1 '@vvo/tzdb': 6.198.0 '@webgpu/types': 0.1.72 - ajv: 8.18.0 - archiver: 7.0.1 + ajv: 8.20.0 + archiver: 8.0.0 argon2: 0.44.0 - astro: 7.1.3 - autoprefixer: 10.4.24 + astro: 7.3.2 + autoprefixer: 10.6.1 bowser: 2.14.1 - cassandra-driver: 4.8.0 + cassandra-driver: 4.9.0 clsx: 2.1.1 - colorjs.io: 0.6.1 + colorjs.io: 0.7.1 combokeys: 3.0.1 - deepfilternet3-noise-filter: 1.2.1 - emoji-regex: 10.6.0 + deepfilternet3-noise-filter: 1.3.0 + emoji-regex: 11.0.0 esbuild: 0.28.2 eslint: 10.10.0 eslint-plugin-react-google-translate: 1.0.4 eventemitter3: 5.0.4 fast-xml-parser: 5.11.1 favico.js: 0.3.10 - framer-motion: 12.34.3 + framer-motion: 13.4.0 hi-base32: 0.5.1 - hono: 4.13.5 + hono: 4.13.8 html-entities: 2.6.0 - idna-uts46-hx: 6.1.1 - ioredis: 5.9.3 + idna-uts46-hx: 6.2.1 + ioredis: 6.0.0 itty-time: 2.0.2 - jose: 6.1.3 - katex: 0.16.33 - knip: 5.88.1 - lexical: 0.48.0 - libphonenumber-js: 1.12.41 - livekit-server-sdk: 2.15.0 + jose: 6.2.12 + katex: 0.18.7 + knip: 6.36.0 + lexical: 0.50.0 + libphonenumber-js: 1.13.13 + livekit-server-sdk: 2.19.0 lodash: 4.18.1 - lru-cache: 11.2.6 + lru-cache: 11.5.2 luxon: 3.7.2 - match-sorter: 8.2.0 - maxmind: 5.0.5 + match-sorter: 8.3.0 + maxmind: 5.0.7 mdast-util-mdx-jsx: 3.2.0 mdast-util-to-hast: 13.2.1 mime: 4.1.0 - mobx: 6.15.0 + mobx: 7.0.3 mobx-persist-store: 1.1.8 - mobx-react-lite: 4.1.1 - motion: 12.34.3 - msw: 2.12.10 - nats: 2.29.3 - nodemailer: 9.0.6 - onnxruntime-web: 1.27.0 - pg: 8.16.3 + mobx-react-lite: 5.0.3 + motion: 13.4.0 + msw: 2.15.0 + nodemailer: 10.0.10 + onnxruntime-web: 1.30.0 + pg: 8.23.0 pino: 10.3.1 pino-pretty: 13.1.3 - postcss: 8.5.26 - postcss-discard-comments: 7.0.5 + postcss: 8.5.28 + postcss-discard-comments: 9.0.2 postcss-loader: 8.2.1 - postcss-preset-env: 11.2.0 + postcss-preset-env: 11.5.3 qrcode: 1.5.4 - react: 19.2.4 - react-aria-components: 1.15.1 - react-day-picker: 9.13.2 + react: 19.3.0 + react-aria-components: 1.21.1 + react-day-picker: 10.0.1 react-dnd: 16.0.1 react-dnd-accessible-backend: 2.1.0 react-dnd-html5-backend: 16.0.1 react-dnd-multi-backend: 9.0.0 - react-dom: 19.2.4 - react-hook-form: 7.71.2 - react-hotkeys-hook: 5.2.4 + react-dom: 19.3.0 + react-hook-form: 7.88.0 + react-hotkeys-hook: 5.3.3 remark-gfm: 4.0.1 rxjs: 7.8.2 send: 1.2.1 sharp: 0.35.4 - stripe: 22.0.2 - tailwindcss: 4.2.1 + stripe: 22.6.2 + tailwindcss: 4.3.3 tempy: 3.2.0 thumbhash: 0.1.1 tiny-invariant: 1.3.3 transliteration: 2.6.1 ts-morph: 28.0.0 - tsx: 4.21.0 + tsx: 4.23.13 typed-css-modules: 0.9.1 - typescript: 6.0.2 + typescript: 6.0.3 typescript-eslint: 8.70.0 uint8array-extras: 1.5.0 - undici: 7.29.0 - undici-types: 7.18.2 + undici: 8.10.2 unique-names-generator: 4.7.1 urlpattern-polyfill: 10.1.0 - valibot: 1.4.2 - validator: 13.15.26 - vite: 7.3.6 - vitest: 4.1.11 - yaml: 2.9.0 - zod: 4.3.6 + valibot: 1.5.0 + validator: 13.15.35 + vite: 8.3.0 + vitest: 5.0.1 + yaml: 2.9.1 + zod: 4.6.5 + +catalogs: + ts7: + typescript: 7.0.2 minimumReleaseAge: 1440 overrides: - '@astrojs/check@0.9.9>chokidar': 5.0.0 - '@floating-ui/dom': 1.7.5 + '@astrojs/check@0.9.10>chokidar': 5.0.0 + '@floating-ui/dom': 1.8.0 '@lingui/swc-plugin': 'catalog:' '@rspack/cli': 'catalog:' '@rspack/core': 'catalog:' - '@rspack/dev-server@1.1.5>webpack-dev-server': 5.2.6 - cassandra-driver@4.8.0>adm-zip: 0.6.0 - emscripten-wasm-loader@3.0.3>nanoid: 3.3.18 - hunspell-asm@4.0.2>nanoid: 3.3.18 - qs@6.14.2: 6.16.0 - semver: 7.7.4 - sockjs@0.3.24>uuid: 11.1.1 + cassandra-driver@4.9.0>adm-zip: 0.6.1 + emscripten-wasm-loader@3.0.3>nanoid: 3.3.19 + hunspell-asm@4.0.2>nanoid: 3.3.19 + semver: 7.8.5 + typed-css-modules@0.9.1>glob: 13.0.6 patchedDependencies: - '@hono/node-server@1.19.17': patches/@hono__node-server@1.19.17.patch '@phosphor-icons/react@2.1.10': patches/@phosphor-icons__react@2.1.10.patch emscripten-wasm-loader@3.0.3: patches/emscripten-wasm-loader@3.0.3.patch eslint-plugin-react-google-translate@1.0.4: patches/eslint-plugin-react-google-translate@1.0.4.patch @@ -213,7 +214,6 @@ peerDependencyRules: react: '*' ignoreMissing: - webpack - - babel-plugin-macros strictDepBuilds: true @@ -221,3 +221,5 @@ trustPolicy: no-downgrade trustPolicyExclude: - semver + - undici-types@6.21.0 + - postcss-discard-comments@9.0.2 diff --git a/tools/ci/Cargo.lock b/tools/ci/Cargo.lock index 786b5d581..58ad0ce25 100644 --- a/tools/ci/Cargo.lock +++ b/tools/ci/Cargo.lock @@ -96,9 +96,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-config" -version = "1.8.18" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33f815b73a3899c03b380d543532e5865f230dce9678d108dc10732a8682275" +checksum = "b8d7b388a9fc3a6db15a5ec778c38b354eff1364882c94d08e0252f7a47dcaa4" dependencies = [ "aws-credential-types", "aws-runtime", @@ -127,9 +127,9 @@ dependencies = [ [[package]] name = "aws-credential-types" -version = "1.2.14" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f20799b373a1be121fe3005fba0c2090af9411573878f224df44b42727fcaf7" +checksum = "e93964ffdaf57857f544be3666a5f57570bb699e934700f11b49708f61bb556e" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -139,9 +139,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.18.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce2b2dcc879c3bae0d371e77c99f2238400ef24ec001394befa67b6e543add9e" +checksum = "b281d307588d634de920874890732659e2e7672f72b5e10e81badc1a8a83621e" dependencies = [ "aws-lc-sys", "zeroize", @@ -149,9 +149,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.44.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09fae7be8bb3174e05c6afdb34199e6dc0c7c04ba9fa237b1967adfbde27483" +checksum = "9bff6c3b54fad79a2e60b8102caf565819711497c1f5f092f49508e2f5c31b27" dependencies = [ "cc", "cmake", @@ -162,9 +162,9 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.7.5" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c9b9de216a988dd54b754a82a7660cfe14cee4f6782ae4524470972fa0ccb39" +checksum = "25b43ad47adc2517efe3d706559d94b97e50e80e0321b3cadbc9f77cee88adcd" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -190,9 +190,9 @@ dependencies = [ [[package]] name = "aws-sdk-s3" -version = "1.137.0" +version = "1.148.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd7213994e2ff9382ff100403b78c30d1b74cdfcd8fa9d0d1dc3a94a5c4874" +checksum = "8a61c1db3987ab6c8740fb87f248864687d50549401115244a84f02c3047b2d5" dependencies = [ "arc-swap", "aws-credential-types", @@ -206,6 +206,7 @@ dependencies = [ "aws-smithy-observability", "aws-smithy-runtime", "aws-smithy-runtime-api", + "aws-smithy-schema", "aws-smithy-types", "aws-smithy-xml", "aws-types", @@ -226,9 +227,9 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.102.0" +version = "1.111.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c82b3ac19f1431854f7ace3a7531674633e286bfdde21976893bfee36fd493b" +checksum = "65700d75f6da78c89a61a49f1539979400a4609d3329376b1dc2133d7a1b2b90" dependencies = [ "arc-swap", "aws-credential-types", @@ -239,6 +240,7 @@ dependencies = [ "aws-smithy-observability", "aws-smithy-runtime", "aws-smithy-runtime-api", + "aws-smithy-schema", "aws-smithy-types", "aws-types", "bytes", @@ -251,9 +253,9 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.104.0" +version = "1.113.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "321000d2b4c5519ee573f73167f612efd7329322d9b26969ad1979f0427f1913" +checksum = "eb1147c254af7b6cee3ace90ae7da6f21366ce9a9b899035fa8a0fdf586eb75a" dependencies = [ "arc-swap", "aws-credential-types", @@ -264,6 +266,7 @@ dependencies = [ "aws-smithy-observability", "aws-smithy-runtime", "aws-smithy-runtime-api", + "aws-smithy-schema", "aws-smithy-types", "aws-types", "bytes", @@ -276,9 +279,9 @@ dependencies = [ [[package]] name = "aws-sdk-sts" -version = "1.107.0" +version = "1.116.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d0d328ba962af23ecfa3c9f23b98d3d35e325fa218d7f13d17a6bf522f8a560" +checksum = "035c7392e751d20bf1060d625d023587eb14099646110a9cff7c697bfe4b253a" dependencies = [ "arc-swap", "aws-credential-types", @@ -290,6 +293,7 @@ dependencies = [ "aws-smithy-query", "aws-smithy-runtime", "aws-smithy-runtime-api", + "aws-smithy-schema", "aws-smithy-types", "aws-smithy-xml", "aws-types", @@ -302,9 +306,9 @@ dependencies = [ [[package]] name = "aws-sigv4" -version = "1.4.5" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae38512beae0ffee7010fc24e7a8a123c53efdfef42a61e80fda4882418dc71" +checksum = "31d955e76ff96acd555bf06fa0fa6d5bf9335fa84ae7c64481b20ae61d231f70" dependencies = [ "aws-credential-types", "aws-smithy-eventstream", @@ -329,9 +333,9 @@ dependencies = [ [[package]] name = "aws-smithy-async" -version = "1.2.14" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffcaf626bdda484571968400c326a244598634dc75fd451325a54ad1a59acfc" +checksum = "f02e407fb3b54891734224b9ffac8a71fdd35f542500fa1af95754a6b2beb316" dependencies = [ "futures-util", "pin-project-lite", @@ -340,9 +344,9 @@ dependencies = [ [[package]] name = "aws-smithy-checksums" -version = "0.64.8" +version = "0.65.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9e8e65f4f81fcccdeb6c3eca2af17ac21d421a1786a26a394aecf421d616d3a" +checksum = "b67ecd999972b58e67cab052f5129906c08c25883bd0788ceefc55ef97d61307" dependencies = [ "aws-smithy-http", "aws-smithy-types", @@ -361,9 +365,9 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.21" +version = "0.61.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78d8391e65fcea47c586a22e1a41f173b38615b112b2c6b7a44e80cec3e6b706" +checksum = "80c2051c2f1016fb8e6548dd07b8bc2ac9c3fe583721444b92f515e856d31609" dependencies = [ "aws-smithy-types", "bytes", @@ -372,9 +376,9 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.63.6" +version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1ab2dc1c2c3749ead27180d333c42f11be8b0e934058fb4b2258ee8dbe5231" +checksum = "37843d9add67c3aff5856f409c6dc315d3cdff60f9c0cb5b670dab1e9920306d" dependencies = [ "aws-smithy-eventstream", "aws-smithy-runtime-api", @@ -394,9 +398,9 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.1.13" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c3ef8931ad1c98aa6a55b4256f847f3116090819844e0dd41ea682cac5dd2d3" +checksum = "7bd25384a4e437aa8d8f339afad4b69e786b936a7cb10db668a7aaf66717b1a8" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -418,9 +422,9 @@ dependencies = [ [[package]] name = "aws-smithy-json" -version = "0.62.7" +version = "0.63.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "701a947f4797e52a911e114a898667c746c39feea467bbd1abd7b3721f702ffa" +checksum = "3385d469edbe8b60cc72002784652b5efca39178192aa9cc4b44c9875c6bdc18" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-schema", @@ -429,28 +433,31 @@ dependencies = [ [[package]] name = "aws-smithy-observability" -version = "0.2.6" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06c2315d173edbf1920da8ba3a7189695827002e4c0fc961973ab1c54abca9c" +checksum = "8e86338c869539a581bf161247762a6e87f92c5c075060057b5ed6d06632ed0c" dependencies = [ "aws-smithy-runtime-api", ] [[package]] name = "aws-smithy-query" -version = "0.60.15" +version = "0.62.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a56d79744fb3edb5d722ef79d86081e121d3b9422cb209eb03aea6aa4f21ebd" +checksum = "f1d1d71f6562be974caa85442ecd90194c40fdb5df045f182a6c2e872ce95056" dependencies = [ + "aws-smithy-runtime-api", + "aws-smithy-schema", "aws-smithy-types", + "aws-smithy-xml", "urlencoding", ] [[package]] name = "aws-smithy-runtime" -version = "1.11.3" +version = "1.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e6f5caf6fea86f8c2206541ab5857cfcda9013426cdbe8fa0098b9e2d32182" +checksum = "3296253d3a91b3f938a3f2bcce4daebadcb4aa4228153fcec90f9d23532b4484" dependencies = [ "aws-smithy-async", "aws-smithy-http", @@ -474,9 +481,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api" -version = "1.12.3" +version = "1.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9db177daa6ba8afb9ee1aefcf548c907abcf52065e394ee11a92780057fe0e8c" +checksum = "6d881a7b7ad179fd6611680c9de89f716fb00ab40299a9a7b8c6913e8f7511a8" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api-macros", @@ -492,9 +499,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api-macros" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d7396fd9500589e62e460e987ecb671bad374934e55ec3b5f498cc7a8a8a7b7" +checksum = "221eaa237ddf1ca79b60d1372aad77e47f9c0ea5b3ce5099da8c61d027dc77b3" dependencies = [ "proc-macro2", "quote", @@ -503,9 +510,9 @@ dependencies = [ [[package]] name = "aws-smithy-schema" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7442cb268338f0eb8278140a107c046756aa01093d8ef5e99628d34ae09c94f5" +checksum = "e8f395d93304280b64b7632fea798d177e74897fe7f063416ce627cd6fa24829" dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", @@ -514,9 +521,9 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.5.0" +version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b42fcf341259d85ca10fac9a2f6448a8ec691c6955a18e45bc3b71a85fab85" +checksum = "0b791f3ac597193fe1d08b82366986eb1f5bc31f2ac6c194c0855276116c76cd" dependencies = [ "base64-simd", "bytes", @@ -540,18 +547,21 @@ dependencies = [ [[package]] name = "aws-smithy-xml" -version = "0.60.15" +version = "0.62.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce02add1aa3677d022f8adf81dcbe3046a95f17a1b1e8979c145cd21d3d22b3" +checksum = "0b932c8d6dc127fc980eecd78f8694ae9b9551b69a93a7def2a199c1c0033daf" dependencies = [ + "aws-smithy-runtime-api", + "aws-smithy-schema", + "aws-smithy-types", "xmlparser", ] [[package]] name = "aws-types" -version = "1.3.16" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16bf10b03a3c01e6b3b7d47cd964e873ffe9e7d4e80fad16bd4c077cb068531" +checksum = "209f3a6d82a6e9e5f94abbed94c7a26e1c052341002bf57a5fb5481f625896fc" dependencies = [ "aws-credential-types", "aws-smithy-async", @@ -574,6 +584,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + [[package]] name = "base64-simd" version = "0.8.0" @@ -592,9 +608,9 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bitflags" -version = "2.13.1" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block-buffer" @@ -638,9 +654,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.4.4" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", "jobserver", @@ -650,9 +666,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "cfg_aliases" @@ -686,9 +702,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", "clap_derive", @@ -696,9 +712,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstream", "anstyle", @@ -708,21 +724,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.4" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" +checksum = "f9c751b79415d4e559e3d1fcf128e09e720eb673a06d26cf6f392d37d75b66e0" dependencies = [ "heck", "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "cmake" @@ -813,9 +829,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8498c871161e1742aaa9d52551b2d6ebdd4c3d45a3be423e3728f33b955be550" +checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78" dependencies = [ "cfg-if", ] @@ -834,9 +850,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.7" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "typenum", @@ -885,7 +901,7 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", "const-oid 0.9.6", - "crypto-common 0.1.7", + "crypto-common 0.1.6", "subtle", ] @@ -909,7 +925,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] @@ -992,9 +1008,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "flate2" @@ -1012,7 +1028,7 @@ dependencies = [ "anyhow", "aws-config", "aws-sdk-s3", - "base64", + "base64 0.23.1", "bytes", "chrono", "clap", @@ -1096,9 +1112,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", @@ -1164,21 +1180,15 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.1" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" dependencies = [ "allocator-api2", "equivalent", "foldhash", ] -[[package]] -name = "hashbrown" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - [[package]] name = "heck" version = "0.5.0" @@ -1272,9 +1282,9 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hybrid-array" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b" +checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" dependencies = [ "typenum", ] @@ -1322,7 +1332,7 @@ version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "futures-channel", "futures-util", @@ -1469,19 +1479,19 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.14.1" +version = "2.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07aa2048142242915a31d35844fb311e0e53fcca590c3a0a40dcf1b841fa09eb" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" dependencies = [ "equivalent", - "hashbrown 0.17.1", + "hashbrown", ] [[package]] name = "ipnet" -version = "2.12.1" +version = "2.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a756c3fac73139e83f14c2d742155dd2b78d3ee56597b419a0579b7bdd6dd78" +checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0" [[package]] name = "is_terminal_polyfill" @@ -1556,9 +1566,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.104" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", @@ -1591,18 +1601,18 @@ checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "lru" -version = "0.16.4" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f66e8d5d03f609abc3a39e6f08e4164ebf1447a732906d39eb9b99b7919ef39" +checksum = "ff9840bcc50b71349309900da0ce7279aa336ae71d73250b07998932c7d97c25" dependencies = [ - "hashbrown 0.16.1", + "hashbrown", ] [[package]] name = "lru-slab" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +checksum = "4050469837a6ff301cd14c1f8f24f88549e6d548f24f64e2148eb0f72cebc51f" [[package]] name = "md-5" @@ -1622,9 +1632,9 @@ checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "mio" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" +checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8" dependencies = [ "libc", "wasi", @@ -1769,9 +1779,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.11" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" +checksum = "4051e23e9185c255a7e33ef59cdbca87a22d359052eecd22fc6b901fb37d9d11" dependencies = [ "bytes", "cfg_aliases", @@ -1789,9 +1799,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.17" +version = "0.11.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04759210543be93709136e28212294a659ef5001836ff4eab4d663e4529bba83" +checksum = "a9746dbde176634f4f2f1faf2404e30a31b2bc1e9cafb5329c95d8177a18c9fc" dependencies = [ "aws-lc-rs", "bytes", @@ -1882,11 +1892,11 @@ checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "reqwest" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" +checksum = "16a1cfa75cc186dd73d5818e510e042e40927bccc9c236b061cea97e1eb08029" dependencies = [ - "base64", + "base64 0.23.1", "bytes", "futures-core", "http 1.5.0", @@ -1958,9 +1968,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" dependencies = [ "bitflags", "errno", @@ -1971,9 +1981,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.43" +version = "0.23.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06" +checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" dependencies = [ "aws-lc-rs", "once_cell", @@ -2144,7 +2154,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] @@ -2260,9 +2270,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.2" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" [[package]] name = "socket2" @@ -2321,9 +2331,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.4" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -2341,13 +2351,13 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", ] [[package]] @@ -2380,7 +2390,7 @@ checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] @@ -2425,18 +2435,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.12.0" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" [[package]] name = "tokio" @@ -2462,14 +2463,14 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] name = "tokio-rustls" -version = "0.26.4" +version = "0.26.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +checksum = "b0c85f2c3ef0b1cd58b36682f4b17aaa995f0e5db534d85692b4903abce21f67" dependencies = [ "rustls", "tokio", @@ -2585,9 +2586,9 @@ checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "untrusted" @@ -2627,9 +2628,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.26.0" +version = "1.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5772d71c9be8a8a6ac2117d949c5b224c1b72241bb611d9a3012edcf8af7812" +checksum = "2ef6dac1e96601b4fb3acccccff2139741fcb757cb9a36089bf5be91cfb285ce" dependencies = [ "js-sys", "wasm-bindgen", @@ -2674,9 +2675,9 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasm-bindgen" -version = "0.2.127" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -2687,9 +2688,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.77" +version = "0.4.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b7777d5cc23d0e91404e53ce2d5e8ec7acae3026b16233dba62cd3246457950" +checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928" dependencies = [ "js-sys", "wasm-bindgen", @@ -2697,9 +2698,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.127" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2707,31 +2708,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.127" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.127" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.104" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c435338968042f4f59a557f690a253676d47ce13ceb55d70100e7facf6620a30" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" dependencies = [ "js-sys", "wasm-bindgen", @@ -2931,13 +2932,13 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +checksum = "33811428bee40dbceb6d545e95754741d17a6aef9a4849f0fd62e2ba4f412a78" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", "synstructure", ] @@ -2952,13 +2953,13 @@ dependencies = [ [[package]] name = "zerofrom-derive" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", "synstructure", ] @@ -2998,7 +2999,7 @@ checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] @@ -3017,9 +3018,9 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34b31d188d9d685a4f9c7b46d6e36631b07058d2cfe190267adce54dc230bf12" +checksum = "b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112" [[package]] name = "zmij" diff --git a/tools/ci/Cargo.toml b/tools/ci/Cargo.toml index 6ab0bdbd2..f1042359e 100644 --- a/tools/ci/Cargo.toml +++ b/tools/ci/Cargo.toml @@ -6,19 +6,19 @@ license = "AGPL-3.0-or-later" [dependencies] anyhow = "1.0.104" -aws-config = "1.8.18" -aws-sdk-s3 = { version = "1.135.0", default-features = false, features = ["default-https-client", "http-1x", "rt-tokio", "sigv4a"] } -base64 = "0.22.1" -bytes = "1.11.1" +aws-config = "1.12.0" +aws-sdk-s3 = { version = "1.148.0", default-features = false, features = ["default-https-client", "http-1x", "rt-tokio", "sigv4a"] } +base64 = "0.23.1" +bytes = "1.12.1" chrono = "0.4.45" -clap = { version = "4.6.1", features = ["derive"] } +clap = { version = "4.6.7", features = ["derive"] } hex = "0.4.3" md-5 = "0.11.0" -reqwest = { version = "0.13.4", default-features = false, features = ["json", "rustls"] } -serde = { version = "1.0.228", features = ["derive"] } -serde_json = "1.0.150" +reqwest = { version = "0.13.5", default-features = false, features = ["json", "rustls"] } +serde = { version = "1.0.229", features = ["derive"] } +serde_json = "1.0.151" sha2 = "0.11.0" tempfile = "3.27.0" -tokio = { version = "1.52.3", features = ["fs", "io-util", "macros", "process", "rt-multi-thread", "signal", "sync", "time"] } +tokio = { version = "1.53.1", features = ["fs", "io-util", "macros", "process", "rt-multi-thread", "signal", "sync", "time"] } walkdir = "2.5.0" zip = { version = "8.6.0", default-features = false, features = ["deflate"] } diff --git a/tools/ci/src/app_proxy.rs b/tools/ci/src/app_proxy.rs index 37ded2181..790a065af 100644 --- a/tools/ci/src/app_proxy.rs +++ b/tools/ci/src/app_proxy.rs @@ -671,7 +671,7 @@ mod tests { fn dockerfile_guards_the_trim_on_an_absolute_asset_base_url() { let dockerfile = include_str!("../../../fluxer_app_proxy/Dockerfile"); let trim = dockerfile - .split("FROM alpine:3.21 AS app-assets") + .split("FROM alpine:3.24 AS app-assets") .nth(1) .expect("app-assets stage"); assert!( @@ -1001,7 +1001,7 @@ mod tests { fn dockerfile_prepares_the_asset_tree_once_before_the_architecture_stages() { let dockerfile = include_str!("../../../fluxer_app_proxy/Dockerfile"); let canonical = dockerfile - .split("FROM alpine:3.21 AS app-assets") + .split("FROM alpine:3.24 AS app-assets") .nth(1) .expect("app-assets stage"); let (canonical, per_architecture) = canonical diff --git a/tools/ci/src/app_wasm.rs b/tools/ci/src/app_wasm.rs index 6622753b6..3ee2807bf 100644 --- a/tools/ci/src/app_wasm.rs +++ b/tools/ci/src/app_wasm.rs @@ -11,7 +11,7 @@ use std::fs; use std::path::{Path, PathBuf}; use tempfile::TempDir; -const LIBFLUXCORE_WASM_BINDGEN_VERSION: &str = "0.2.123"; +const LIBFLUXCORE_WASM_BINDGEN_VERSION: &str = "0.2.128"; const LIBFLUXCORE_WASM_SIZE_BUDGET_BYTES: u64 = 300 * 1024; const LIBFLUXCORE_WRAPPER_JS: &str = include_str!("../templates/libfluxcore_wrapper.js"); const LIBFLUXCORE_WRAPPER_DTS: &str = include_str!("../templates/libfluxcore_wrapper.d.ts"); diff --git a/tools/ci/src/desktop.rs b/tools/ci/src/desktop.rs index b305cc488..7a0e7a27c 100644 --- a/tools/ci/src/desktop.rs +++ b/tools/ci/src/desktop.rs @@ -36,8 +36,8 @@ use walkdir::WalkDir; use zip::write::SimpleFileOptions; const PUBLIC_DL_BASE: &str = "https://api.fluxer.app/dl"; -const PNPM_VERSION: &str = "10.29.3"; -const RUST_TOOLCHAIN: &str = "1.93.0"; +const PNPM_VERSION: &str = "12.4.2"; +const RUST_TOOLCHAIN: &str = "1.98.1"; const DEFAULT_DESKTOP_VARIANT: &str = "default"; const LINUX_PIPEWIRE_VERSION: &str = "0.3.65"; const LINUX_PIPEWIRE_SOURCE_SHA256: &str = @@ -82,7 +82,7 @@ enum DesktopStep { WindowsPaths, SetWorkdirUnix, EnsurePython3Windows, - SetupPnpmCorepack, + SetupPnpm, ResolvePnpmStoreWindows, ResolvePnpmStoreUnix, InstallSetuptoolsWindowsArm64, @@ -193,7 +193,7 @@ pub async fn run(args: BuildDesktopArgs) -> Result<()> { DesktopStep::WindowsPaths => windows_paths_step().await, DesktopStep::SetWorkdirUnix => set_workdir_unix_step(), DesktopStep::EnsurePython3Windows => ensure_python3_windows_step(), - DesktopStep::SetupPnpmCorepack => setup_pnpm_corepack_step(), + DesktopStep::SetupPnpm => setup_pnpm_step(), DesktopStep::ResolvePnpmStoreWindows | DesktopStep::ResolvePnpmStoreUnix => { resolve_pnpm_store_step() } @@ -526,19 +526,20 @@ async fn windows_paths_step() -> Result<()> { let store_dir = PathBuf::from(&github_workspace).join(format!("pnpm-store-{arch}")); fs::create_dir_all(&store_dir) .with_context(|| format!("Failed to create {}", store_dir.display()))?; - fs::write( - Path::new(r"W:\.npmrc"), - format!("store-dir={}\n", store_dir.display()), - ) - .context("Failed to write W:\\.npmrc")?; append_github_env(&[ ("WORKDIR", "W:"), ("TEMP", r"C:\t"), ("TMP", r"C:\t"), ("ELECTRON_BUILDER_CACHE", r"C:\ebcache"), - ("NPM_CONFIG_STORE_DIR", store_dir.to_string_lossy().as_ref()), - ("npm_config_store_dir", store_dir.to_string_lossy().as_ref()), + ( + "PNPM_CONFIG_STORE_DIR", + store_dir.to_string_lossy().as_ref(), + ), + ( + "pnpm_config_store_dir", + store_dir.to_string_lossy().as_ref(), + ), ])?; run_command(CommandSpec::new("git").args(["config", "--global", "core.longpaths", "true"]))?; @@ -588,11 +589,11 @@ fn set_workdir_unix_step() -> Result<()> { fs::create_dir_all(&store_dir) .with_context(|| format!("Failed to create {}", store_dir.display()))?; env_pairs.push(( - "NPM_CONFIG_STORE_DIR", + "PNPM_CONFIG_STORE_DIR", store_dir.to_string_lossy().to_string(), )); env_pairs.push(( - "npm_config_store_dir", + "pnpm_config_store_dir", store_dir.to_string_lossy().to_string(), )); } @@ -624,69 +625,31 @@ fn ensure_python3_windows_step() -> Result<()> { Ok(()) } -fn setup_pnpm_corepack_step() -> Result<()> { - let corepack = corepack_program()?; - run_command(CommandSpec::new(corepack.clone()).arg("enable"))?; - run_command(CommandSpec::new(corepack).args([ - "prepare", - &format!("pnpm@{PNPM_VERSION}"), - "--activate", - ]))?; - ensure_pnpm_available() -} +fn setup_pnpm_step() -> Result<()> { + let npm = npm_program()?; + let pnpm_package = format!("pnpm@{PNPM_VERSION}"); + run_command(CommandSpec::new(npm.clone()).args(["install", "--global", &pnpm_package]))?; -fn corepack_program() -> Result { - if command_succeeds(CommandSpec::new("corepack").arg("--version")) { - return Ok(OsString::from("corepack")); - } + let npm_prefix = output_text(CommandSpec::new(npm).args(["prefix", "--global"])) + .context("Failed to resolve global npm prefix after installing pnpm")?; + let npm_bin = if cfg!(windows) { + PathBuf::from(npm_prefix) + } else { + PathBuf::from(npm_prefix).join("bin") + }; + append_github_path(&npm_bin)?; - if cfg!(windows) { - let node_dir = - node_executable_dir().context("Failed to locate Node.js while resolving corepack")?; - - for file_name in ["corepack.cmd", "corepack.exe", "corepack"] { - let candidate = node_dir.join(file_name); - if candidate.exists() { - return Ok(candidate.into_os_string()); - } - } - - bail!( - "corepack not found on PATH or next to Node.js at {}", - node_dir.display() - ); - } - - bail!("corepack not found on PATH") -} - -fn ensure_pnpm_available() -> Result<()> { - if let Ok(pnpm) = pnpm_program() - && command_succeeds(CommandSpec::new(pnpm).arg("--version")) - { - return Ok(()); - } - - if cfg!(windows) { - let npm = npm_program()?; - let pnpm_package = format!("pnpm@{PNPM_VERSION}"); - run_command(CommandSpec::new(npm.clone()).args(["install", "--global", &pnpm_package]))?; - - let npm_prefix = output_text(CommandSpec::new(npm).args(["prefix", "--global"])) - .context("Failed to resolve global npm prefix after installing pnpm")?; - let npm_prefix = PathBuf::from(npm_prefix); - append_github_path(&npm_prefix)?; - - for file_name in ["pnpm.cmd", "pnpm.exe", "pnpm"] { - let candidate = npm_prefix.join(file_name); - if candidate.exists() { - return run_command(CommandSpec::new(candidate.into_os_string()).arg("--version")); - } + for file_name in ["pnpm.cmd", "pnpm.exe", "pnpm"] { + let candidate = npm_bin.join(file_name); + if candidate.exists() { + return run_command(CommandSpec::new(candidate.into_os_string()).arg("--version")); } } - run_command(pnpm_command()?.arg("--version")) - .context("Failed to verify pnpm after Corepack setup") + bail!( + "pnpm not found in {} after installing {pnpm_package}", + npm_bin.display() + ) } fn pnpm_command() -> Result { @@ -1450,7 +1413,7 @@ fn install_velopack_cli_step() -> Result<()> { tool_dir.to_string_lossy().as_ref(), "vpk", "--version", - "0.0.1298", + "1.2.0", ])) } diff --git a/tools/content/update-frozen-snapshot/Cargo.toml b/tools/content/update-frozen-snapshot/Cargo.toml index a94492dce..23ab12ae1 100644 --- a/tools/content/update-frozen-snapshot/Cargo.toml +++ b/tools/content/update-frozen-snapshot/Cargo.toml @@ -6,7 +6,7 @@ license.workspace = true [dependencies] anyhow = "1.0.104" -base64 = "0.22.1" +base64 = "0.23.1" sha2 = "0.11.0" [dev-dependencies] diff --git a/tools/dev/Cargo.toml b/tools/dev/Cargo.toml index 1609a53a7..f074bccd4 100644 --- a/tools/dev/Cargo.toml +++ b/tools/dev/Cargo.toml @@ -9,19 +9,18 @@ publish = false fluxer_common = { path = "../../fluxer_common" } anyhow = "1.0.104" axum = "0.8.9" -base64 = "0.22.1" -clap = { version = "4.6.1", features = ["derive", "env"] } +clap = { version = "4.6.7", features = ["derive", "env"] } hmac = "0.13.0" -hyper = { version = "1.10.1", features = ["http1", "server"] } +hyper = { version = "1.11.1", features = ["http1", "server"] } hyper-util = { version = "0.1.20", features = ["tokio"] } image = { version = "0.25.10", default-features = false, features = ["gif", "jpeg", "png", "webp"] } -libc = "0.2.186" -regex = "1.12" -reqwest = { version = "0.13.4", default-features = false, features = ["rustls", "stream"] } -scylla = { version = "1.6.0", features = ["chrono-04"] } -serde = { version = "1.0.228", features = ["derive"] } -serde_json = "1.0.150" +libc = "0.2.189" +regex = "1.13" +reqwest = { version = "0.13.5", default-features = false, features = ["rustls", "stream"] } +scylla = { version = "1.9.0", features = ["chrono-04"] } +serde = { version = "1.0.229", features = ["derive"] } +serde_json = "1.0.151" sha2 = "0.11.0" tempfile = "3.27.0" -tokio = { version = "1.52.3", features = ["fs", "io-util", "macros", "net", "process", "rt-multi-thread", "signal", "time"] } +tokio = { version = "1.53.1", features = ["fs", "io-util", "macros", "net", "process", "rt-multi-thread", "signal", "time"] } url = "2.5.8" diff --git a/tools/dev/src/media_proxy.rs b/tools/dev/src/media_proxy.rs index e8dc3c50f..058529ed1 100644 --- a/tools/dev/src/media_proxy.rs +++ b/tools/dev/src/media_proxy.rs @@ -167,6 +167,7 @@ fn start_dev_seaweedfs() -> Result<()> { "mini", &data_dir_arg, "-admin.ui=false", + "-master.telemetry=false", "-filer.disableDirListing", "-s3.port.iceberg=0", "-webdav=false", diff --git a/tools/dev/src/proc.rs b/tools/dev/src/proc.rs index a41ea82ce..e8862ef3b 100644 --- a/tools/dev/src/proc.rs +++ b/tools/dev/src/proc.rs @@ -14,8 +14,8 @@ use tokio::time::sleep; pub const PNPM_INSTALL_ENV: &[(&str, &str)] = &[ ("CI", "true"), - ("npm_config_child_concurrency", "2"), - ("npm_config_network_concurrency", "8"), + ("pnpm_config_child_concurrency", "2"), + ("pnpm_config_network_concurrency", "8"), ]; pub fn format_command(args: &[impl AsRef]) -> String { diff --git a/tools/fonts/requirements.txt b/tools/fonts/requirements.txt index 7fb6f33d5..5d2a0af30 100644 --- a/tools/fonts/requirements.txt +++ b/tools/fonts/requirements.txt @@ -1,3 +1,3 @@ # SPDX-License-Identifier: AGPL-3.0-or-later -fonttools==4.60.2 +fonttools==4.65.0 brotli==1.2.0 diff --git a/tools/i18n_auto/Cargo.toml b/tools/i18n_auto/Cargo.toml index acb01ad59..aa1605dbf 100644 --- a/tools/i18n_auto/Cargo.toml +++ b/tools/i18n_auto/Cargo.toml @@ -6,11 +6,11 @@ license.workspace = true [dependencies] anyhow = "1.0.104" -clap = { version = "4.6.1", features = ["derive"] } -regex = "1.12" -reqwest = { version = "0.13.4", default-features = false, features = ["blocking", "json", "rustls"] } -serde = { version = "1.0.228", features = ["derive"] } -serde_json = "1.0.150" +clap = { version = "4.6.7", features = ["derive"] } +regex = "1.13" +reqwest = { version = "0.13.5", default-features = false, features = ["blocking", "json", "rustls"] } +serde = { version = "1.0.229", features = ["derive"] } +serde_json = "1.0.151" [dev-dependencies] tempfile = "3.27.0" diff --git a/tsconfigs/package.json b/tsconfigs/package.json index 7ffe92e2e..2b88d6e43 100644 --- a/tsconfigs/package.json +++ b/tsconfigs/package.json @@ -1,4 +1,9 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./base.json" + "extends": "./base.json", + "compilerOptions": { + "types": [ + "node" + ] + } }