diff --git a/.config/example.yml b/.config/example.yml
index 489cceec34..c7884a3687 100644
--- a/.config/example.yml
+++ b/.config/example.yml
@@ -107,13 +107,51 @@ port: 3000
# Proxy trust settings
#
-# Changes how the server interpret the origin IP of the request.
+# Specifies the IP addresses that Misskey will use as trusted
+# reverse proxies (e.g., nginx, Cloudflare). This affects how
+# Misskey determines the source IP for each request and is used
+# for important rate limiting and security features. If the value
+# is not set correctly, Misskey may use the IP address of the
+# reverse proxy instead of the actual source IP, which may lead to
+# unintended rate limiting or security vulnerabilities.
+# By default, the loopback network and private network address
+# ranges shown below are trusted.
+# If you are using a single reverse proxy and it is on the same
+# machine or the same private network as Misskey, it is unlikely you
+# need to change this setting, and the default setting is fine.
+# Also, if you are using multiple reverse proxy servers and they are
+# all on the same private network as Misskey, the default setting
+# is fine.
+# However, if you are using a reverse proxy server that accesses
+# Misskey web servers and streaming servers via public IP addresses
+# (for example, Cloudflare), you must set this variable.
+# When changing this setting, you can use one of the following values:
#
-# Any format supported by Fastify is accepted.
-# Default: trust all proxies (i.e. trustProxy: true)
-# See: https://fastify.dev/docs/latest/reference/server/#trustproxy
+# - true: Trust all proxies
+# - false: Do not trust any proxies
+# - IP address, IP address range, or array of them: Trust hops that
+# match the specified criteria.
+# - Integer: Trust the nth hop from the front-facing proxy server as
+# the client.
+# For more information on how to configure this setting, please refer
+# to the Fastify documentation:
+# https://fastify.dev/docs/latest/Reference/Server/#trustproxy
#
-# trustProxy: 1
+# Note that if this variable is set, it overrides the default range,
+# so if you have both an external reverse proxy and a proxy on the
+# local host, you must include both IPs (or IP ranges).
+#
+#trustProxy:
+# - '10.0.0.0/8'
+# - '172.16.0.0/12'
+# - '192.168.0.0/16'
+# - '127.0.0.1/32'
+# - '::1/128'
+# - 'fc00::/7'
+# # Example: If you are using some external reverse proxies like CDNs,
+# # you may need to add the CDN IP ranges here.
+# # If you're using Cloudflare, you can find IP Ranges at:
+# # https://www.cloudflare.com/ips/
# ┌──────────────────────────┐
#───┘ PostgreSQL configuration └────────────────────────────────
@@ -283,6 +321,10 @@ id: 'aidx'
# Whether disable HSTS
#disableHsts: true
+# Enable internal IP-based rate limiting (default: true)
+# To configure them in reverse proxy instead, set this to false.
+#enableIpRateLimit: true
+
# Number of worker processes
#clusterLimit: 1
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index e800743469..514abdfb20 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -5,7 +5,7 @@
"workspaceFolder": "/workspace",
"features": {
"ghcr.io/devcontainers/features/node:1": {
- "version": "24.10.0"
+ "version": "22.15.0"
},
"ghcr.io/devcontainers-extra/features/pnpm:2": {
"version": "10.10.0"
diff --git a/.github/workflows/api-misskey-js.yml b/.github/workflows/api-misskey-js.yml
index 6f40a67568..49ca3058f3 100644
--- a/.github/workflows/api-misskey-js.yml
+++ b/.github/workflows/api-misskey-js.yml
@@ -16,13 +16,13 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@v4.3.0
+ uses: actions/checkout@v6.0.1
- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
- name: Setup Node.js
- uses: actions/setup-node@v4.4.0
+ uses: actions/setup-node@v6.1.0
with:
node-version-file: '.node-version'
cache: 'pnpm'
diff --git a/.github/workflows/changelog-check.yml b/.github/workflows/changelog-check.yml
index f4abedd960..d17999a271 100644
--- a/.github/workflows/changelog-check.yml
+++ b/.github/workflows/changelog-check.yml
@@ -12,9 +12,9 @@ jobs:
steps:
- name: Checkout head
- uses: actions/checkout@v4.3.0
+ uses: actions/checkout@v6.0.1
- name: Setup Node.js
- uses: actions/setup-node@v4.4.0
+ uses: actions/setup-node@v6.1.0
with:
node-version-file: '.node-version'
diff --git a/.github/workflows/check-misskey-js-autogen.yml b/.github/workflows/check-misskey-js-autogen.yml
index 05034ea0f4..8a81e85521 100644
--- a/.github/workflows/check-misskey-js-autogen.yml
+++ b/.github/workflows/check-misskey-js-autogen.yml
@@ -18,7 +18,7 @@ jobs:
if: ${{ github.event.pull_request.mergeable == null || github.event.pull_request.mergeable == true }}
steps:
- name: checkout
- uses: actions/checkout@v4.3.0
+ uses: actions/checkout@v6.0.1
with:
submodules: true
persist-credentials: false
@@ -29,7 +29,7 @@ jobs:
- name: setup node
id: setup-node
- uses: actions/setup-node@v4.4.0
+ uses: actions/setup-node@v6.1.0
with:
node-version-file: '.node-version'
cache: pnpm
@@ -53,7 +53,7 @@ jobs:
# packages/misskey-js/generator/built/autogen
- name: Upload Generated
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: generated-misskey-js
path: packages/misskey-js/generator/built/autogen
@@ -66,14 +66,14 @@ jobs:
if: ${{ github.event.pull_request.mergeable == null || github.event.pull_request.mergeable == true }}
steps:
- name: checkout
- uses: actions/checkout@v4.3.0
+ uses: actions/checkout@v6.0.1
with:
submodules: true
persist-credentials: false
ref: refs/pull/${{ github.event.pull_request.number }}/merge
- name: Upload From Merged
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: actual-misskey-js
path: packages/misskey-js/src/autogen
@@ -86,13 +86,13 @@ jobs:
pull-requests: write
steps:
- name: download generated-misskey-js
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: generated-misskey-js
path: misskey-js-generated
- name: download actual-misskey-js
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: actual-misskey-js
path: misskey-js-actual
@@ -113,9 +113,9 @@ jobs:
- name: send message
if: steps.check-changes.outputs.changes == 'true'
- uses: thollander/actions-comment-pull-request@v2
+ uses: thollander/actions-comment-pull-request@v3
with:
- comment_tag: check-misskey-js-autogen
+ comment-tag: check-misskey-js-autogen
message: |-
Thank you for sending us a great Pull Request! 👍
Please regenerate misskey-js type definitions! 🙏
@@ -127,9 +127,9 @@ jobs:
- name: send message
if: steps.check-changes.outputs.changes == 'false'
- uses: thollander/actions-comment-pull-request@v2
+ uses: thollander/actions-comment-pull-request@v3
with:
- comment_tag: check-misskey-js-autogen
+ comment-tag: check-misskey-js-autogen
mode: delete
message: "Thank you!"
create_if_not_exists: false
diff --git a/.github/workflows/check-misskey-js-version.yml b/.github/workflows/check-misskey-js-version.yml
index 0e336a1551..ad07d47b65 100644
--- a/.github/workflows/check-misskey-js-version.yml
+++ b/.github/workflows/check-misskey-js-version.yml
@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v4.3.0
+ uses: actions/checkout@v6.0.1
- name: Check version
run: |
if [ "$(jq -r '.version' package.json)" != "$(jq -r '.version' packages/misskey-js/package.json)" ]; then
diff --git a/.github/workflows/check-spdx-license-id.yml b/.github/workflows/check-spdx-license-id.yml
index d0b1be4991..fe71473ea3 100644
--- a/.github/workflows/check-spdx-license-id.yml
+++ b/.github/workflows/check-spdx-license-id.yml
@@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v4.3.0
+ uses: actions/checkout@v6.0.1
- name: Check
run: |
counter=0
diff --git a/.github/workflows/check_copyright_year.yml b/.github/workflows/check_copyright_year.yml
index d891a538c6..40016d39c5 100644
--- a/.github/workflows/check_copyright_year.yml
+++ b/.github/workflows/check_copyright_year.yml
@@ -10,7 +10,7 @@ jobs:
check_copyright_year:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4.3.0
+ - uses: actions/checkout@v6.0.1
- run: |
if [ "$(grep Copyright COPYING | sed -e 's/.*2014-\([0-9]*\) .*/\1/g')" -ne "$(date +%Y)" ]; then
echo "Please change copyright year!"
diff --git a/.github/workflows/deploy-test-environment.yml b/.github/workflows/deploy-test-environment.yml
index d838bc35e5..32c7c6b6ea 100644
--- a/.github/workflows/deploy-test-environment.yml
+++ b/.github/workflows/deploy-test-environment.yml
@@ -28,7 +28,7 @@ jobs:
wait_time: ${{ steps.get-wait-time.outputs.wait_time }}
steps:
- name: Checkout
- uses: actions/checkout@v4.3.0
+ uses: actions/checkout@v6.0.1
- name: Check allowed users
id: check-allowed-users
diff --git a/.github/workflows/docker-develop.yml b/.github/workflows/docker-develop.yml
index e24ef00d78..8a97959907 100644
--- a/.github/workflows/docker-develop.yml
+++ b/.github/workflows/docker-develop.yml
@@ -27,7 +27,7 @@ jobs:
platform=${{ matrix.platform }}
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
- name: Check out the repo
- uses: actions/checkout@v4.3.0
+ uses: actions/checkout@v6.0.1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
@@ -53,7 +53,7 @@ jobs:
digest="${{ steps.build.outputs.digest }}"
touch "/tmp/digests/${digest#sha256:}"
- name: Upload digest
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: digests-${{ env.PLATFORM_PAIR }}
path: /tmp/digests/*
@@ -66,7 +66,7 @@ jobs:
- build
steps:
- name: Download digests
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
path: /tmp/digests
pattern: digests-*
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index 991fb85d85..37f6aca588 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -32,7 +32,7 @@ jobs:
platform=${{ matrix.platform }}
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
- name: Check out the repo
- uses: actions/checkout@v4.3.0
+ uses: actions/checkout@v6.0.1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
@@ -64,7 +64,7 @@ jobs:
digest="${{ steps.build.outputs.digest }}"
touch "/tmp/digests/${digest#sha256:}"
- name: Upload digest
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: digests-${{ env.PLATFORM_PAIR }}
path: /tmp/digests/*
@@ -77,7 +77,7 @@ jobs:
- build
steps:
- name: Download digests
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
path: /tmp/digests
pattern: digests-*
diff --git a/.github/workflows/dockle.yml b/.github/workflows/dockle.yml
index 1c0fe70116..ec7073c9fd 100644
--- a/.github/workflows/dockle.yml
+++ b/.github/workflows/dockle.yml
@@ -11,38 +11,43 @@ on:
jobs:
dockle:
runs-on: ubuntu-latest
+
env:
DOCKER_CONTENT_TRUST: 1
DOCKLE_VERSION: 0.4.15
steps:
- - uses: actions/checkout@v4.3.0
+ - uses: actions/checkout@v6.0.1
- name: Download and install dockle v${{ env.DOCKLE_VERSION }}
run: |
+ set -eux
curl -L -o dockle.deb "https://github.com/goodwithtech/dockle/releases/download/v${DOCKLE_VERSION}/dockle_${DOCKLE_VERSION}_Linux-64bit.deb"
sudo dpkg -i dockle.deb
- - run: |
- cp .config/docker_example.env .config/docker.env
- cp ./compose_example.yml ./compose.yml
-
- - run: |
- docker compose up -d web
- IMAGE_ID=$(docker compose images --format json web | jq -r '.[0].ID')
- docker tag "${IMAGE_ID}" misskey-web:latest
-
- - name: Prune docker junk (optional but recommended)
+ - name: Build web image (docker build)
run: |
- docker system prune -af
- docker volume prune -f
+ set -eux
+ docker build -t "misskey-web:ci" .
+ docker image ls
- - name: Save image for Dockle
+ - name: Mount tmpfs for Dockle tar
+ env:
+ TMPFS_SIZE: 8G
run: |
- docker save misskey-web:latest -o ./misskey-web.tar
- ls -lh ./misskey-web.tar
+ set -eux
+ sudo mkdir -p /mnt/dockle-tmp
+ sudo mount -t tmpfs -o size=${{ env.TMPFS_SIZE }} tmpfs /mnt/dockle-tmp
+ free -h
+ df -h
- - name: Run Dockle with tar input
+ - name: Save image tar into tmpfs
run: |
- dockle --exit-code 1 --input ./misskey-web.tar
+ set -eux
+ docker save misskey-web:ci -o /mnt/dockle-tmp/misskey-web.tar
+ ls -lh /mnt/dockle-tmp/misskey-web.tar
+ - name: Run Dockle Scan (tar input)
+ run: |
+ set -eux
+ dockle --exit-code 1 --input /mnt/dockle-tmp/misskey-web.tar
diff --git a/.github/workflows/get-api-diff.yml b/.github/workflows/get-api-diff.yml
index 90f7486413..f8a0c4aaa4 100644
--- a/.github/workflows/get-api-diff.yml
+++ b/.github/workflows/get-api-diff.yml
@@ -25,14 +25,14 @@ jobs:
ref: refs/pull/${{ github.event.number }}/merge
steps:
- - uses: actions/checkout@v4.3.0
+ - uses: actions/checkout@v6.0.1
with:
ref: ${{ matrix.ref }}
submodules: true
- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
- name: Use Node.js
- uses: actions/setup-node@v4.4.0
+ uses: actions/setup-node@v6.1.0
with:
node-version-file: '.node-version'
cache: 'pnpm'
@@ -48,7 +48,7 @@ jobs:
- name: Copy API.json
run: cp packages/backend/built/api.json ${{ matrix.api-json-name }}
- name: Upload Artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: api-artifact-${{ matrix.api-json-name }}
path: ${{ matrix.api-json-name }}
@@ -61,7 +61,7 @@ jobs:
PR_NUMBER: ${{ github.event.number }}
run: |
echo "$PR_NUMBER" > ./pr_number
- - uses: actions/upload-artifact@v4
+ - uses: actions/upload-artifact@v6
with:
name: api-artifact-pr-number
path: pr_number
diff --git a/.github/workflows/get-backend-memory.yml b/.github/workflows/get-backend-memory.yml
new file mode 100644
index 0000000000..99f89631bb
--- /dev/null
+++ b/.github/workflows/get-backend-memory.yml
@@ -0,0 +1,87 @@
+# this name is used in report-backend-memory.yml so be careful when change name
+name: Get backend memory usage
+
+on:
+ pull_request:
+ branches:
+ - master
+ - develop
+ paths:
+ - packages/backend/**
+ - packages/misskey-js/**
+ - .github/workflows/get-backend-memory.yml
+
+jobs:
+ get-memory-usage:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+
+ strategy:
+ matrix:
+ memory-json-name: [memory-base.json, memory-head.json]
+ include:
+ - memory-json-name: memory-base.json
+ ref: ${{ github.base_ref }}
+ - memory-json-name: memory-head.json
+ ref: refs/pull/${{ github.event.number }}/merge
+
+ services:
+ postgres:
+ image: postgres:18
+ ports:
+ - 54312:5432
+ env:
+ POSTGRES_DB: test-misskey
+ POSTGRES_HOST_AUTH_METHOD: trust
+ redis:
+ image: redis:7
+ ports:
+ - 56312:6379
+
+ steps:
+ - uses: actions/checkout@v6.0.1
+ with:
+ ref: ${{ matrix.ref }}
+ submodules: true
+ - name: Setup pnpm
+ uses: pnpm/action-setup@v4.2.0
+ - name: Use Node.js
+ uses: actions/setup-node@v6.1.0
+ with:
+ node-version-file: '.node-version'
+ cache: 'pnpm'
+ - run: pnpm i --frozen-lockfile
+ - name: Check pnpm-lock.yaml
+ run: git diff --exit-code pnpm-lock.yaml
+ - name: Copy Configure
+ run: cp .github/misskey/test.yml .config/default.yml
+ - name: Compile Configure
+ run: pnpm compile-config
+ - name: Build
+ run: pnpm build
+ - name: Run migrations
+ run: pnpm --filter backend migrate
+ - name: Measure memory usage
+ run: |
+ # Start the server and measure memory usage
+ node packages/backend/scripts/measure-memory.mjs > ${{ matrix.memory-json-name }}
+ - name: Upload Artifact
+ uses: actions/upload-artifact@v6
+ with:
+ name: memory-artifact-${{ matrix.memory-json-name }}
+ path: ${{ matrix.memory-json-name }}
+
+ save-pr-number:
+ runs-on: ubuntu-latest
+ permissions: {}
+ steps:
+ - name: Save PR number
+ env:
+ PR_NUMBER: ${{ github.event.number }}
+ run: |
+ echo "$PR_NUMBER" > ./pr_number
+ - uses: actions/upload-artifact@v6
+ with:
+ name: memory-artifact-pr-number
+ path: pr_number
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
index 88e2aceaed..5787572dd5 100644
--- a/.github/workflows/labeler.yml
+++ b/.github/workflows/labeler.yml
@@ -11,6 +11,6 @@ jobs:
pull-requests: write
runs-on: ubuntu-latest
steps:
- - uses: actions/labeler@v5
+ - uses: actions/labeler@v6
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 33a1ccbc76..91cbe52c38 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -36,13 +36,13 @@ jobs:
pnpm_install:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4.3.0
+ - uses: actions/checkout@v6.0.1
with:
fetch-depth: 0
submodules: true
- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
- - uses: actions/setup-node@v4.4.0
+ - uses: actions/setup-node@v6.1.0
with:
node-version-file: '.node-version'
cache: 'pnpm'
@@ -69,13 +69,13 @@ jobs:
eslint-cache-version: v1
eslint-cache-path: ${{ github.workspace }}/node_modules/.cache/eslint-${{ matrix.workspace }}
steps:
- - uses: actions/checkout@v4.3.0
+ - uses: actions/checkout@v6.0.1
with:
fetch-depth: 0
submodules: true
- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
- - uses: actions/setup-node@v4.4.0
+ - uses: actions/setup-node@v6.1.0
with:
node-version-file: '.node-version'
cache: 'pnpm'
@@ -100,13 +100,13 @@ jobs:
- sw
- misskey-js
steps:
- - uses: actions/checkout@v4.3.0
+ - uses: actions/checkout@v6.0.1
with:
fetch-depth: 0
submodules: true
- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
- - uses: actions/setup-node@v4.4.0
+ - uses: actions/setup-node@v6.1.0
with:
node-version-file: '.node-version'
cache: 'pnpm'
diff --git a/.github/workflows/locale.yml b/.github/workflows/locale.yml
index d75335f38f..15cc9153f6 100644
--- a/.github/workflows/locale.yml
+++ b/.github/workflows/locale.yml
@@ -16,13 +16,13 @@ jobs:
runs-on: ubuntu-latest
continue-on-error: true
steps:
- - uses: actions/checkout@v4.3.0
+ - uses: actions/checkout@v6.0.1
with:
fetch-depth: 0
submodules: true
- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
- - uses: actions/setup-node@v4.4.0
+ - uses: actions/setup-node@v6.1.0
with:
node-version-file: ".node-version"
cache: "pnpm"
diff --git a/.github/workflows/on-release-created.yml b/.github/workflows/on-release-created.yml
index ed5b60acf8..c9a47385a0 100644
--- a/.github/workflows/on-release-created.yml
+++ b/.github/workflows/on-release-created.yml
@@ -16,13 +16,13 @@ jobs:
id-token: write
steps:
- - uses: actions/checkout@v4.3.0
+ - uses: actions/checkout@v6.0.1
with:
submodules: true
- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
- name: Use Node.js
- uses: actions/setup-node@v4.4.0
+ uses: actions/setup-node@v6.1.0
with:
node-version-file: '.node-version'
cache: 'pnpm'
diff --git a/.github/workflows/release-edit-with-push.yml b/.github/workflows/release-edit-with-push.yml
index 57657a4ba7..bc16dbcef2 100644
--- a/.github/workflows/release-edit-with-push.yml
+++ b/.github/workflows/release-edit-with-push.yml
@@ -19,7 +19,7 @@ jobs:
edit:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
# headが$GITHUB_REF_NAME, baseが$STABLE_BRANCHかつopenのPRを1つ取得
- name: Get PR
run: |
diff --git a/.github/workflows/release-with-dispatch.yml b/.github/workflows/release-with-dispatch.yml
index d750001b71..f318200584 100644
--- a/.github/workflows/release-with-dispatch.yml
+++ b/.github/workflows/release-with-dispatch.yml
@@ -36,7 +36,7 @@ jobs:
outputs:
pr_number: ${{ steps.get_pr.outputs.pr_number }}
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
# headが$GITHUB_REF_NAME, baseが$STABLE_BRANCHかつopenのPRを1つ取得
- name: Get PRs
run: |
diff --git a/.github/workflows/report-api-diff.yml b/.github/workflows/report-api-diff.yml
index f24cd7d30e..59b92d022e 100644
--- a/.github/workflows/report-api-diff.yml
+++ b/.github/workflows/report-api-diff.yml
@@ -16,7 +16,7 @@ jobs:
# api-artifact
steps:
- name: Download artifact
- uses: actions/github-script@v7.1.0
+ uses: actions/github-script@v8.0.0
with:
script: |
const fs = require('fs');
@@ -60,7 +60,7 @@ jobs:
- name: Echo full diff
run: cat ./api-full.json.diff
- name: Upload full diff to Artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: api-artifact
path: |
@@ -73,9 +73,9 @@ jobs:
HEADER="このPRによるapi.jsonの差分"
FOOTER="[Get diff files from Workflow Page](https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})"
DIFF_BYTES="$(stat ./api.json.diff -c '%s' | tr -d '\n')"
-
+
echo "$HEADER" > ./output.md
-
+
if (( "$DIFF_BYTES" <= 1 )); then
echo '差分はありません。' >> ./output.md
else
@@ -87,18 +87,18 @@ jobs:
echo '```' >> ./output.md
echo '' >> .output.md
fi
-
+
echo "$FOOTER" >> ./output.md
- - uses: thollander/actions-comment-pull-request@v2
+ - uses: thollander/actions-comment-pull-request@v3
with:
- pr_number: ${{ steps.load-pr-num.outputs.pr-number }}
- comment_tag: show_diff
- filePath: ./output.md
+ pr-number: ${{ steps.load-pr-num.outputs.pr-number }}
+ comment-tag: show_diff
+ file-path: ./output.md
- name: Tell error to PR
- uses: thollander/actions-comment-pull-request@v2
+ uses: thollander/actions-comment-pull-request@v3
if: failure() && steps.load-pr-num.outputs.pr-number
with:
- pr_number: ${{ steps.load-pr-num.outputs.pr-number }}
- comment_tag: show_diff_error
+ pr-number: ${{ steps.load-pr-num.outputs.pr-number }}
+ comment-tag: show_diff_error
message: |
api.jsonの差分作成中にエラーが発生しました。詳細は[Workflowのログ](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})を確認してください。
diff --git a/.github/workflows/report-backend-memory.yml b/.github/workflows/report-backend-memory.yml
new file mode 100644
index 0000000000..c339ca49b4
--- /dev/null
+++ b/.github/workflows/report-backend-memory.yml
@@ -0,0 +1,122 @@
+name: Report backend memory
+
+on:
+ workflow_run:
+ types: [completed]
+ workflows:
+ - Get backend memory usage # get-backend-memory.yml
+
+jobs:
+ compare-memory:
+ runs-on: ubuntu-latest
+ if: ${{ github.event.workflow_run.conclusion == 'success' }}
+ permissions:
+ pull-requests: write
+
+ steps:
+ - name: Download artifact
+ uses: actions/github-script@v8.0.0
+ with:
+ script: |
+ const fs = require('fs');
+ let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ run_id: context.payload.workflow_run.id,
+ });
+ let matchArtifacts = allArtifacts.data.artifacts.filter((artifact) => {
+ return artifact.name.startsWith("memory-artifact-") || artifact.name == "memory-artifact"
+ });
+ await Promise.all(matchArtifacts.map(async (artifact) => {
+ let download = await github.rest.actions.downloadArtifact({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ artifact_id: artifact.id,
+ archive_format: 'zip',
+ });
+ await fs.promises.writeFile(`${process.env.GITHUB_WORKSPACE}/${artifact.name}.zip`, Buffer.from(download.data));
+ }));
+ - name: Extract all artifacts
+ run: |
+ find . -mindepth 1 -maxdepth 1 -type f -name '*.zip' -exec unzip {} -d artifacts ';'
+ ls -la artifacts/
+ - name: Load PR Number
+ id: load-pr-num
+ run: echo "pr-number=$(cat artifacts/pr_number)" >> "$GITHUB_OUTPUT"
+
+ - name: Output base
+ run: cat ./artifacts/memory-base.json
+ - name: Output head
+ run: cat ./artifacts/memory-head.json
+ - name: Compare memory usage
+ id: compare
+ run: |
+ BASE_MEMORY=$(cat ./artifacts/memory-base.json)
+ HEAD_MEMORY=$(cat ./artifacts/memory-head.json)
+
+ BASE_RSS=$(echo "$BASE_MEMORY" | jq -r '.memory.rss // 0')
+ HEAD_RSS=$(echo "$HEAD_MEMORY" | jq -r '.memory.rss // 0')
+
+ # Calculate difference
+ if [ "$BASE_RSS" -gt 0 ] && [ "$HEAD_RSS" -gt 0 ]; then
+ DIFF=$((HEAD_RSS - BASE_RSS))
+ DIFF_PERCENT=$(echo "scale=2; ($DIFF * 100) / $BASE_RSS" | bc)
+
+ # Convert to MB for readability
+ BASE_MB=$(echo "scale=2; $BASE_RSS / 1048576" | bc)
+ HEAD_MB=$(echo "scale=2; $HEAD_RSS / 1048576" | bc)
+ DIFF_MB=$(echo "scale=2; $DIFF / 1048576" | bc)
+
+ echo "base_mb=$BASE_MB" >> "$GITHUB_OUTPUT"
+ echo "head_mb=$HEAD_MB" >> "$GITHUB_OUTPUT"
+ echo "diff_mb=$DIFF_MB" >> "$GITHUB_OUTPUT"
+ echo "diff_percent=$DIFF_PERCENT" >> "$GITHUB_OUTPUT"
+ echo "has_data=true" >> "$GITHUB_OUTPUT"
+
+ # Determine if this is a significant change (more than 5% increase)
+ if [ "$(echo "$DIFF_PERCENT > 5" | bc)" -eq 1 ]; then
+ echo "significant_increase=true" >> "$GITHUB_OUTPUT"
+ else
+ echo "significant_increase=false" >> "$GITHUB_OUTPUT"
+ fi
+ else
+ echo "has_data=false" >> "$GITHUB_OUTPUT"
+ fi
+ - id: build-comment
+ name: Build memory comment
+ run: |
+ HEADER="## Backend Memory Usage Comparison"
+ FOOTER="[See workflow logs for details](https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})"
+
+ echo "$HEADER" > ./output.md
+ echo >> ./output.md
+
+ if [ "${{ steps.compare.outputs.has_data }}" == "true" ]; then
+ echo "| Metric | base | head | Diff |" >> ./output.md
+ echo "|--------|------|------|------|" >> ./output.md
+ echo "| RSS | ${{ steps.compare.outputs.base_mb }} MB | ${{ steps.compare.outputs.head_mb }} MB | ${{ steps.compare.outputs.diff_mb }} MB (${{ steps.compare.outputs.diff_percent }}%) |" >> ./output.md
+ echo >> ./output.md
+
+ if [ "${{ steps.compare.outputs.significant_increase }}" == "true" ]; then
+ echo "⚠️ **Warning**: Memory usage has increased by more than 5%. Please verify this is not an unintended change." >> ./output.md
+ echo >> ./output.md
+ fi
+ else
+ echo "Could not retrieve memory usage data." >> ./output.md
+ echo >> ./output.md
+ fi
+
+ echo "$FOOTER" >> ./output.md
+ - uses: thollander/actions-comment-pull-request@v3
+ with:
+ pr-number: ${{ steps.load-pr-num.outputs.pr-number }}
+ comment-tag: show_memory_diff
+ file-path: ./output.md
+ - name: Tell error to PR
+ uses: thollander/actions-comment-pull-request@v3
+ if: failure() && steps.load-pr-num.outputs.pr-number
+ with:
+ pr-number: ${{ steps.load-pr-num.outputs.pr-number }}
+ comment-tag: show_memory_diff_error
+ message: |
+ An error occurred while comparing backend memory usage. See [workflow logs](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) for details.
diff --git a/.github/workflows/request-release-review.yml b/.github/workflows/request-release-review.yml
index 0b4af4117a..9b6768149b 100644
--- a/.github/workflows/request-release-review.yml
+++ b/.github/workflows/request-release-review.yml
@@ -14,7 +14,7 @@ jobs:
pull-requests: write
steps:
- name: Reply
- uses: actions/github-script@v6
+ uses: actions/github-script@v8
with:
script: |
const body = `To dev team (@misskey-dev/dev):
diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml
index b9aef7a76c..c28b1f6e93 100644
--- a/.github/workflows/storybook.yml
+++ b/.github/workflows/storybook.yml
@@ -22,12 +22,12 @@ jobs:
NODE_OPTIONS: "--max_old_space_size=7168"
steps:
- - uses: actions/checkout@v4.3.0
+ - uses: actions/checkout@v6.0.1
if: github.event_name != 'pull_request_target'
with:
fetch-depth: 0
submodules: true
- - uses: actions/checkout@v4.3.0
+ - uses: actions/checkout@v6.0.1
if: github.event_name == 'pull_request_target'
with:
fetch-depth: 0
@@ -39,7 +39,7 @@ jobs:
- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
- name: Use Node.js
- uses: actions/setup-node@v4.4.0
+ uses: actions/setup-node@v6.1.0
with:
node-version-file: '.node-version'
cache: 'pnpm'
@@ -90,7 +90,7 @@ jobs:
env:
CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
- name: Notify that Chromatic detects changes
- uses: actions/github-script@v7.1.0
+ uses: actions/github-script@v8.0.0
if: github.event_name != 'pull_request_target' && steps.chromatic_push.outputs.success == 'false'
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -102,7 +102,7 @@ jobs:
body: 'Chromatic detects changes. Please [review the changes on Chromatic](https://www.chromatic.com/builds?appId=6428f7d7b962f0b79f97d6e4).'
})
- name: Upload Artifacts
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: storybook
path: packages/frontend/storybook-static
diff --git a/.github/workflows/test-backend.yml b/.github/workflows/test-backend.yml
index a65b244ba1..562ec76b85 100644
--- a/.github/workflows/test-backend.yml
+++ b/.github/workflows/test-backend.yml
@@ -50,7 +50,7 @@ jobs:
- 56312:6379
steps:
- - uses: actions/checkout@v4.3.0
+ - uses: actions/checkout@v6.0.1
with:
submodules: true
- name: Setup pnpm
@@ -86,7 +86,7 @@ jobs:
fi
done
- name: Use Node.js
- uses: actions/setup-node@v4.4.0
+ uses: actions/setup-node@v6.1.0
with:
node-version-file: ${{ matrix.node-version-file }}
cache: 'pnpm'
@@ -129,13 +129,13 @@ jobs:
- 56312:6379
steps:
- - uses: actions/checkout@v4.3.0
+ - uses: actions/checkout@v6.0.1
with:
submodules: true
- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
- name: Use Node.js
- uses: actions/setup-node@v4.4.0
+ uses: actions/setup-node@v6.1.0
with:
node-version-file: ${{ matrix.node-version-file }}
cache: 'pnpm'
@@ -173,7 +173,7 @@ jobs:
POSTGRES_HOST_AUTH_METHOD: trust
steps:
- - uses: actions/checkout@v4.3.0
+ - uses: actions/checkout@v6.0.1
with:
submodules: true
- name: Setup pnpm
@@ -182,7 +182,7 @@ jobs:
id: current-date
run: echo "today=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
- name: Use Node.js
- uses: actions/setup-node@v4.4.0
+ uses: actions/setup-node@v6.1.0
with:
node-version-file: ${{ matrix.node-version-file }}
cache: 'pnpm'
diff --git a/.github/workflows/test-federation.yml b/.github/workflows/test-federation.yml
index 88cd3649f9..7f8fe547e1 100644
--- a/.github/workflows/test-federation.yml
+++ b/.github/workflows/test-federation.yml
@@ -32,7 +32,7 @@ jobs:
- .node-version
- .github/min.node-version
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
with:
submodules: true
- name: Setup pnpm
@@ -68,7 +68,7 @@ jobs:
fi
done
- name: Use Node.js
- uses: actions/setup-node@v4.4.0
+ uses: actions/setup-node@v6.1.0
with:
node-version-file: ${{ matrix.node-version-file }}
cache: 'pnpm'
diff --git a/.github/workflows/test-frontend.yml b/.github/workflows/test-frontend.yml
index 3ccfb7e3e0..52723e894c 100644
--- a/.github/workflows/test-frontend.yml
+++ b/.github/workflows/test-frontend.yml
@@ -28,13 +28,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4.3.0
+ - uses: actions/checkout@v6.0.1
with:
submodules: true
- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
- name: Use Node.js
- uses: actions/setup-node@v4.4.0
+ uses: actions/setup-node@v6.1.0
with:
node-version-file: '.node-version'
cache: 'pnpm'
@@ -76,7 +76,7 @@ jobs:
- 56312:6379
steps:
- - uses: actions/checkout@v4.3.0
+ - uses: actions/checkout@v6.0.1
with:
submodules: true
# https://github.com/cypress-io/cypress-docker-images/issues/150
@@ -88,7 +88,7 @@ jobs:
- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
- name: Use Node.js
- uses: actions/setup-node@v4.4.0
+ uses: actions/setup-node@v6.1.0
with:
node-version-file: '.node-version'
cache: 'pnpm'
@@ -113,12 +113,12 @@ jobs:
wait-on: 'http://localhost:61812'
headed: true
browser: ${{ matrix.browser }}
- - uses: actions/upload-artifact@v4
+ - uses: actions/upload-artifact@v6
if: failure()
with:
name: ${{ matrix.browser }}-cypress-screenshots
path: cypress/screenshots
- - uses: actions/upload-artifact@v4
+ - uses: actions/upload-artifact@v6
if: always()
with:
name: ${{ matrix.browser }}-cypress-videos
diff --git a/.github/workflows/test-misskey-js.yml b/.github/workflows/test-misskey-js.yml
index 5825e8a8a3..428cbce3b8 100644
--- a/.github/workflows/test-misskey-js.yml
+++ b/.github/workflows/test-misskey-js.yml
@@ -22,13 +22,13 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@v4.3.0
+ uses: actions/checkout@v6.0.1
- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
- name: Setup Node.js
- uses: actions/setup-node@v4.4.0
+ uses: actions/setup-node@v6.1.0
with:
node-version-file: '.node-version'
cache: 'pnpm'
diff --git a/.github/workflows/test-production.yml b/.github/workflows/test-production.yml
index 0a3902ad5c..9c0ea4d738 100644
--- a/.github/workflows/test-production.yml
+++ b/.github/workflows/test-production.yml
@@ -16,13 +16,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4.3.0
+ - uses: actions/checkout@v6.0.1
with:
submodules: true
- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
- name: Use Node.js
- uses: actions/setup-node@v4.4.0
+ uses: actions/setup-node@v6.1.0
with:
node-version-file: '.node-version'
cache: 'pnpm'
diff --git a/.github/workflows/validate-api-json.yml b/.github/workflows/validate-api-json.yml
index 82c522c65c..8ffc60fc6e 100644
--- a/.github/workflows/validate-api-json.yml
+++ b/.github/workflows/validate-api-json.yml
@@ -17,13 +17,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4.3.0
+ - uses: actions/checkout@v6.0.1
with:
submodules: true
- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
- name: Use Node.js
- uses: actions/setup-node@v4.4.0
+ uses: actions/setup-node@v6.1.0
with:
node-version-file: '.node-version'
cache: 'pnpm'
diff --git a/.node-version b/.node-version
index 21651351e2..b8ffd70759 100644
--- a/.node-version
+++ b/.node-version
@@ -1 +1 @@
-24.10.0
+22.15.0
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 5f36a32af4..2d11d24db2 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -3,6 +3,7 @@
"**/node_modules": true
},
"typescript.tsdk": "node_modules/typescript/lib",
+ "typescript.enablePromptUseWorkspaceTsdk": true,
"files.associations": {
"*.test.ts": "typescript"
},
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 90f749b0b2..692d47e647 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,4 @@
-## 2025.11.2
+## Unreleased
### General
-
@@ -6,11 +6,65 @@
### Client
-
+### Server
+-
+
+
+## 2025.12.2
+
+### Note
+v2025.12.0で行われた「configの`trustProxy`のデフォルト値を`false`に変更」について、正しく環境に応じた設定を行わないとサインインが困難になるといった状態を緩和するために、以下の対応を行いました。
+
+**正しく設定しないと、上記のような不具合の原因となったり、セキュリティリスクが高まったりする可能性があります。必ず現在のconfigをご確認の上、必要に応じて値を変更してください。**
+
+- `trustProxy`について、デフォルト(configに値が設定されていない状態)ではループバックアドレスとローカルIPアドレス空間を信頼するようにしました。
+- `trustProxy`の設定方法について、より詳細に記述しました。
+- リバースプロキシやCDNなどのより上流のレイヤでレートリミットを設定したい場合や、緊急時の一時的な緩和策として、Misskey内部でのIPアドレスペースでのレートリミットを無効化できるようにしました。
+
+### General
+- 依存関係の更新
+
+### Client
+- Enhance: デッキのUI説明を追加
+- Enhance: 設定がブラウザによって消去されないようにするオプションを追加
+- Fix: バージョン表記のないPlayが正しく動作しない問題を修正
+ バージョン表記のないものは v0.x 系として実行されます。v1.x 系で動作させたい場合は必ずバージョン表記を含めてください。
+- Fix: デッキUIでメニュー位置を下にしているとプロファイル削除ボタンが表示されないのを修正
+- Fix: 一部のUnicode絵文字のリアクションがボタンにならない問題を修正
+
+### Server
+- Enhance: Misskey内部でのIPアドレスペースでのレートリミットを無効化できるように
+ - リバースプロキシやCDNなど別のレイヤで別途レートリミットを設定する場合や、ローカルでのテスト用途等として利用することを想定しています。
+ - デフォルトは `enableIpRateLimit: true`(Misskey内部でのIPアドレスペースでのレートリミットは有効)です。
+- Fix: コントロールパネルのジョブキューページで使用される一部APIの応答速度を改善
+
+## 2025.12.1
+
+### Client
+- Fix: 特定の条件下でMisskeyが起動せず空白のページが表示されることがある問題を軽減
+- Fix: 初回読み込み時などに、言語設定で不整合が発生することがある問題を修正
+- Fix: 削除されたノートのリノートが正しく動作されない問題を修正
+- Fix: チャンネルオーナーが削除済みの時にチャンネルのヘッダーメニューが表示されない不具合を修正
+- Fix: ドライブで登録日以外でソートする場合は月でグループ化して表示しないように
+- Fix: `null` を返す note_view_intrruptor プラグインが動作しない問題を修正
+
+### Server
+- Fix: ジョブキューでSentryが有効にならない問題を修正
+
+
+## 2025.12.0
+
+### Note
+- configの`trustProxy`のデフォルト値を`false`に変更しました。アップデート前に現在のconfigをご確認の上、必要に応じて値を変更してください。
+
+### Client
+- Fix: stacking router viewで連続して戻る操作を行うと何も表示されなくなる問題を修正
+
### Server
- Enhance: メモリ使用量を削減しました
- Enhance: ActivityPubアクティビティを送信する際のパフォーマンス向上
- Enhance: 依存関係の更新
-
+- Fix: セキュリティに関する修正
## 2025.11.1
diff --git a/Dockerfile b/Dockerfile
index a071970927..02739d9ca2 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,6 +1,6 @@
# syntax = docker/dockerfile:1.4
-ARG NODE_VERSION=24.10.0-bookworm
+ARG NODE_VERSION=22.15.0-bookworm
# build assets & compile TypeScript
diff --git a/README.md b/README.md
index 92e8fef639..a73102d713 100644
--- a/README.md
+++ b/README.md
@@ -24,6 +24,8 @@
+[](https://deepwiki.com/misskey-dev/misskey)
+
## Thanks
diff --git a/compose.local-db.yml b/compose.local-db.yml
index 4703b16fc5..2b69cabf5a 100644
--- a/compose.local-db.yml
+++ b/compose.local-db.yml
@@ -21,7 +21,7 @@ services:
env_file:
- .config/docker.env
volumes:
- - ./db:/var/lib/postgresql/data
+ - ./db:/var/lib/postgresql
healthcheck:
test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
interval: 5s
diff --git a/compose_example.yml b/compose_example.yml
index 70de5bba7b..efc7d6624d 100644
--- a/compose_example.yml
+++ b/compose_example.yml
@@ -43,7 +43,7 @@ services:
env_file:
- .config/docker.env
volumes:
- - ./db:/var/lib/postgresql/data
+ - ./db:/var/lib/postgresql
healthcheck:
test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
interval: 5s
diff --git a/locales/de-DE.yml b/locales/de-DE.yml
index ba7ca27e66..33e19f1cc1 100644
--- a/locales/de-DE.yml
+++ b/locales/de-DE.yml
@@ -83,6 +83,7 @@ files: "Dateien"
download: "Herunterladen"
driveFileDeleteConfirm: "Möchtest du die Datei „{name}“ wirklich löschen? Einige Inhalte, die diese Datei verwenden, werden auch verschwinden."
unfollowConfirm: "Möchtest du {name} wirklich nicht mehr folgen?"
+rejectFollowRequestConfirm: "Möchtest du die Follow-Anfrage von {name} ablehnen?"
exportRequested: "Du hast einen Export angefragt. Dies kann etwas Zeit in Anspruch nehmen. Sobald der Export abgeschlossen ist, wird er deiner Drive hinzugefügt."
importRequested: "Du hast einen Import angefragt. Dies kann etwas Zeit in Anspruch nehmen."
lists: "Listen"
@@ -1018,6 +1019,7 @@ pushNotificationAlreadySubscribed: "Push-Benachrichtigungen sind bereits aktivie
pushNotificationNotSupported: "Entweder dein Browser oder deine Instanz unterstützt Push-Benachrichtigungen nicht"
sendPushNotificationReadMessage: "Push-Benachrichtigungen löschen, sobald sie gelesen wurden"
sendPushNotificationReadMessageCaption: "Dies kann gegebenenfalls den Batterieverbrauch deines Gerätes erhöhen."
+pleaseAllowPushNotification: "Bitte erlauben Sie Benachrichtigungen in Ihrem Browser."
windowMaximize: "Maximieren"
windowMinimize: "Minimieren"
windowRestore: "Wiederherstellen"
@@ -1054,6 +1056,7 @@ permissionDeniedError: "Aktion verweigert"
permissionDeniedErrorDescription: "Dieses Benutzerkonto besitzt nicht die Berechtigung, um diese Aktion auszuführen."
preset: "Vorlage"
selectFromPresets: "Aus Vorlagen wählen"
+custom: "Benutzerdefiniert"
achievements: "Errungenschaften"
gotInvalidResponseError: "Ungültige Antwort des Servers"
gotInvalidResponseErrorDescription: "Eventuell ist der Server momentan nicht erreichbar oder untergeht Wartungsarbeiten. Bitte versuche es später noch einmal."
@@ -1243,6 +1246,7 @@ releaseToRefresh: "Zum Aktualisieren loslassen"
refreshing: "Wird aktualisiert..."
pullDownToRefresh: "Zum Aktualisieren ziehen"
useGroupedNotifications: "Benachrichtigungen gruppieren"
+emailVerificationFailedError: "Es gab ein Problem bei der Überprüfung Ihrer E-Mail-Adresse. Der Link ist möglicherweise abgelaufen."
cwNotationRequired: "Ist \"Inhaltswarnung verwenden\" aktiviert, muss eine Beschreibung gegeben werden."
doReaction: "Reagieren"
code: "Code"
@@ -1370,7 +1374,12 @@ defaultImageCompressionLevel: "Standard-Bildkomprimierungsstufe"
defaultImageCompressionLevel_description: "Ein niedrigerer Wert erhält die Bildqualität, erhöht aber die Dateigröße.
Höhere Werte reduzieren die Dateigröße, verringern aber die Bildqualität."
inMinutes: "Minute(n)"
inDays: "Tag(en)"
+safeModeEnabled: "Der abgesicherte Modus ist aktiviert."
+schedule: "Planen"
+scheduled: "Geplant"
widgets: "Widgets"
+deviceInfo: "Geräteinformation"
+youAreAdmin: "Sie sind ein Administrator"
presets: "Vorlage"
_imageEditing:
_vars:
diff --git a/locales/en-US.yml b/locales/en-US.yml
index fc979ef2b0..22e9d6eeb9 100644
--- a/locales/en-US.yml
+++ b/locales/en-US.yml
@@ -83,6 +83,8 @@ files: "Files"
download: "Download"
driveFileDeleteConfirm: "Are you sure you want to delete \"{name}\"? All notes with this file attached will also be deleted."
unfollowConfirm: "Are you sure you want to unfollow {name}?"
+cancelFollowRequestConfirm: "Are you sure that you want to cancel your follow request to {name}?"
+rejectFollowRequestConfirm: "Are you sure that you want to reject the follow request from {name}?"
exportRequested: "You've requested an export. This may take a while. It will be added to your Drive once completed."
importRequested: "You've requested an import. This may take a while."
lists: "Lists"
diff --git a/locales/es-ES.yml b/locales/es-ES.yml
index c442d69c2b..dddfa4d57b 100644
--- a/locales/es-ES.yml
+++ b/locales/es-ES.yml
@@ -319,10 +319,10 @@ remoteUserCaution: "Para el usuario remoto, la información está incompleta"
activity: "Actividad"
images: "Imágenes"
image: "Imágenes"
-birthday: "Fecha de nacimiento"
+birthday: "Cumpleaños"
yearsOld: "{age} años"
registeredDate: "Fecha de registro"
-location: "Lugar"
+location: "Ubicación"
theme: "Tema"
themeForLightMode: "Tema para usar en Modo Linterna"
themeForDarkMode: "Tema para usar en Modo Oscuro"
@@ -579,7 +579,7 @@ objectStorageSetPublicRead: "Seleccionar \"public-read\" al subir "
s3ForcePathStyleDesc: "Si s3ForcePathStyle esta habilitado el nombre del bucket debe ser especificado como parte de la URL en lugar del nombre de host en la URL. Puede ser necesario activar esta opción cuando se utilice, por ejemplo, Minio en un servidor propio."
serverLogs: "Registros del servidor"
deleteAll: "Eliminar todos"
-showFixedPostForm: "Mostrar el formulario de las entradas encima de la línea de tiempo"
+showFixedPostForm: "Visualizar la ventana de publicación en la parte superior de la línea de tiempo."
showFixedPostFormInChannel: "Mostrar el formulario de publicación por encima de la cronología (Canales)"
withRepliesByDefaultForNewlyFollowed: "Incluir por defecto respuestas de usuarios recién seguidos en la línea de tiempo"
newNoteRecived: "Tienes una nota nueva"
@@ -844,7 +844,7 @@ jumpToSpecifiedDate: "Saltar a una fecha específica"
showingPastTimeline: "Mostrar líneas de tiempo antiguas"
clear: "Limpiar"
markAllAsRead: "Marcar todo como leído"
-goBack: "Deseleccionar"
+goBack: "Anterior"
unlikeConfirm: "¿Quitar como favorito?"
fullView: "Vista completa"
quitFullView: "quitar vista completa"
@@ -1252,7 +1252,7 @@ detachAll: "Quitar todo"
angle: "Ángulo"
flip: "Echar de un capirotazo"
showAvatarDecorations: "Mostrar decoraciones de avatar"
-releaseToRefresh: "Soltar para recargar"
+releaseToRefresh: "Suelta para recargar"
refreshing: "Recargando..."
pullDownToRefresh: "Tira hacia abajo para recargar"
useGroupedNotifications: "Mostrar notificaciones agrupadas"
@@ -1511,7 +1511,7 @@ _emojiPalette:
palettes: "Paleta\n"
enableSyncBetweenDevicesForPalettes: "Activar la sincronización de paletas entre dispositivos"
paletteForMain: "Paleta principal"
- paletteForReaction: "Paleta de reacción"
+ paletteForReaction: "Paleta utilizada para las reacciones"
_settings:
driveBanner: "Puedes gestionar y configurar la unidad, comprobar su uso y configurar los ajustes de carga de archivos."
pluginBanner: "Puedes ampliar las funciones del cliente con plugins. Puedes instalar plugins, configurarlos y gestionarlos individualmente."
@@ -1523,7 +1523,7 @@ _settings:
accountData: "Datos de la cuenta"
accountDataBanner: "Exportación e importación para gestionar los datos de la cuenta."
muteAndBlockBanner: "Puedes configurar y gestionar ajustes para ocultar contenidos y restringir acciones a usuarios específicos."
- accessibilityBanner: "Puedes personalizar los visuales y el comportamiento del cliente, y configurar los ajustes para optimizar el uso."
+ accessibilityBanner: "Puedes personalizar el aspecto y el comportamiento del cliente y configurar los ajustes para optimizar su uso."
privacyBanner: "Puedes configurar opciones relacionadas con la privacidad de la cuenta, como la visibilidad del contenido, la posibilidad de descubrir la cuenta y la aprobación de seguimiento."
securityBanner: "Puedes configurar opciones relacionadas con la seguridad de la cuenta, como la contraseña, los métodos de inicio de sesión, las aplicaciones de autenticación y Passkeys."
preferencesBanner: "Puedes configurar el comportamiento general del cliente según tus preferencias."
@@ -1540,7 +1540,7 @@ _settings:
ifOff: "Si está desactivado"
enableSyncThemesBetweenDevices: "Sincronizar los temas instalados entre dispositivos."
enablePullToRefresh: "Tirar para actualizar"
- enablePullToRefresh_description: "Si utiliza un ratón, arrastre mientras pulsa la rueda de desplazamiento."
+ enablePullToRefresh_description: "Si utilizas un ratón, arrastra mientras pulsas la rueda de desplazamiento."
realtimeMode_description: "Establece una conexión con el servidor y actualiza el contenido en tiempo real. Esto puede aumentar el tráfico y el consumo de memoria."
contentsUpdateFrequency: "Frecuencia de adquisición del contenido."
contentsUpdateFrequency_description: "Cuanto mayor sea el valor, más se actualiza el contenido, pero disminuye el rendimiento y aumenta el tráfico y el consumo de memoria."
@@ -2156,7 +2156,7 @@ _accountDelete:
started: "El proceso de eliminación ha comenzado."
inProgress: "La eliminación está en proceso."
_ad:
- back: "Deseleccionar"
+ back: "Anterior"
reduceFrequencyOfThisAd: "Mostrar menos este anuncio."
hide: "No mostrar"
timezoneinfo: "El día de la semana está determidado por la zona horaria del servidor."
@@ -2610,10 +2610,10 @@ _profile:
name: "Nombre"
username: "Nombre de usuario"
description: "Descripción"
- youCanIncludeHashtags: "Puedes añadir hashtags"
+ youCanIncludeHashtags: "También puedes incluir hashtags en tu biografía"
metadata: "información adicional"
metadataEdit: "Editar información adicional"
- metadataDescription: "Muestra la información adicional en el perfil"
+ metadataDescription: "Usando esto puedes mostrar campos de información adicionales en tu perfil."
metadataLabel: "Etiqueta"
metadataContent: "Contenido"
changeAvatar: "Cambiar avatar"
diff --git a/locales/it-IT.yml b/locales/it-IT.yml
index e3cffed3a1..3b918e9c9f 100644
--- a/locales/it-IT.yml
+++ b/locales/it-IT.yml
@@ -83,6 +83,8 @@ files: "Allegati"
download: "Scarica"
driveFileDeleteConfirm: "Vuoi davvero eliminare il file \"{name}\", e le Note a cui è stato allegato?"
unfollowConfirm: "Vuoi davvero togliere il Following a {name}?"
+cancelFollowRequestConfirm: "Vuoi annullare la tua richiesta di follow inviata a {name}?"
+rejectFollowRequestConfirm: "Vuoi rifiutare la richiesta di follow ricevuta da {name}?"
exportRequested: "Hai richiesto un'esportazione, e potrebbe volerci tempo. Quando sarà compiuta, il file verrà aggiunto direttamente al Drive."
importRequested: "Hai richiesto un'importazione. Potrebbe richiedere un po' di tempo."
lists: "Liste"
@@ -2350,13 +2352,13 @@ _ago:
yearsAgo: "{n} anni fa"
invalid: "Niente da visualizzare"
_timeIn:
- seconds: "Dopo {n} secondi"
- minutes: "Dopo {n} minuti"
- hours: "Dopo {n} ore"
- days: "Dopo {n} giorni"
- weeks: "Dopo {n} settimane"
- months: "Dopo {n} mesi"
- years: "Dopo {n} anni"
+ seconds: "Tra {n} secondi"
+ minutes: "Tra {n} minuti"
+ hours: "Tra {n} ore"
+ days: "Tra {n} giorni"
+ weeks: "Tra {n} settimane"
+ months: "Tra {n} mesi"
+ years: "Tra {n} anni"
_time:
second: "s"
minute: "min"
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 8e4a52b68d..1eea745e0c 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -1557,6 +1557,9 @@ _settings:
showPageTabBarBottom: "ページのタブバーを下部に表示"
emojiPaletteBanner: "絵文字ピッカーに固定表示するプリセットをパレットとして登録したり、ピッカーの表示方法をカスタマイズしたりできます。"
enableAnimatedImages: "アニメーション画像を有効にする"
+ settingsPersistence_title: "設定の永続化"
+ settingsPersistence_description1: "設定の永続化を有効にすると、設定情報が失われるのを防止できます。"
+ settingsPersistence_description2: "環境によっては有効化できない場合があります。"
_chat:
showSenderName: "送信者の名前を表示"
@@ -2890,6 +2893,15 @@ _deck:
usedAsMinWidthWhenFlexible: "「幅を自動調整」が有効の場合、これが幅の最小値となります"
flexible: "幅を自動調整"
enableSyncBetweenDevicesForProfiles: "プロファイル情報のデバイス間同期を有効にする"
+ showHowToUse: "UIの説明を見る"
+
+ _howToUse:
+ addColumn_title: "カラム追加"
+ addColumn_description: "カラムの種類を選んで追加できます。"
+ settings_title: "UI設定"
+ settings_description: "デッキUIの詳細設定を行えます。"
+ switchProfile_title: "プロファイル切り替え"
+ switchProfile_description: "UIのレイアウトをプロファイルとして保存し、いつでも切り替えられるようにできます。"
_columns:
main: "メイン"
diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml
index c5eb96fbb3..caae928605 100644
--- a/locales/zh-CN.yml
+++ b/locales/zh-CN.yml
@@ -53,7 +53,7 @@ copyRemoteLink: "复制远程链接"
copyLinkRenote: "复制转帖链接"
delete: "删除"
deleteAndEdit: "删除并编辑"
-deleteAndEditConfirm: "要删除此帖并再次编辑吗?对此帖的所有回应、转发和回复也将被删除。"
+deleteAndEditConfirm: "要删除此帖并再次编辑吗?此帖下所有的回应、转发和回复也将被删除。"
addToList: "添加至列表"
addToAntenna: "添加到天线"
sendMessage: "发送消息"
@@ -136,7 +136,7 @@ emojiPicker: "表情符号选择器"
pinnedEmojisForReactionSettingDescription: "可以设置发表回应时置顶显示的表情符号"
pinnedEmojisSettingDescription: "可以设置输入表情符号时置顶显示的表情符号"
emojiPickerDisplay: "选择器显示设置"
-overwriteFromPinnedEmojisForReaction: "从「置顶(回应)」设置覆盖"
+overwriteFromPinnedEmojisForReaction: "使用「置顶(回应)」设置覆盖"
overwriteFromPinnedEmojis: "从全局设置覆盖"
reactionSettingDescription2: "拖动重新排序,单击删除,点击 + 添加。"
rememberNoteVisibility: "保存上次设置的可见性"
@@ -153,8 +153,8 @@ block: "拉黑"
unblock: "取消拉黑"
suspend: "冻结"
unsuspend: "解除冻结"
-blockConfirm: "确定要拉黑吗?"
-unblockConfirm: "确定要取消拉黑吗?"
+blockConfirm: "确定要屏蔽吗?"
+unblockConfirm: "确定要取消屏蔽吗?"
suspendConfirm: "要冻结吗?"
unsuspendConfirm: "要解除冻结吗?"
selectList: "选择列表"
@@ -174,7 +174,7 @@ emojiUrl: "emoji 地址"
addEmoji: "添加表情符号"
settingGuide: "推荐配置"
cacheRemoteFiles: "缓存远程文件"
-cacheRemoteFilesDescription: "启用此设定时,将在此服务器上缓存远程文件。虽然可以加快图片显示的速度,但是相对的会消耗大量的服务器存储空间。用户角色内的网盘容量决定了这个远程用户能在服务器上保留多少缓存。当超出了这个限制时,旧的文件将从缓存中被删除,成为链接。当禁用此设定时,则是从一开始就将远程文件保留为链接。此时推荐将 default.yml 的 proxyRemoteFiles 设置为 true 以优化缩略图生成及保护用户隐私。"
+cacheRemoteFilesDescription: "启用此设定时,将在此服务器上缓存远程文件。虽然可以加快图片显示的速度,但是相对的会消耗大量的服务器存储空间。用户角色内的网盘容量决定了这个远程用户能在服务器上保留多少缓存。当超出了这个限制时,旧的文件将从缓存中被删除,成为链接。当禁用此设定时,则是从一开始就将远程文件保留为链接。此时推荐将 的 proxyRemoteFiles 设置为 true 以优化缩略图生成及保护用户隐私。"
youCanCleanRemoteFilesCache: "可以使用文件管理的🗑️按钮来删除所有的缓存。"
cacheRemoteSensitiveFiles: "缓存远程敏感媒体文件"
cacheRemoteSensitiveFilesDescription: "如果禁用这项设定,远程服务器的敏感媒体将不会被缓存,而是直接链接。"
@@ -184,7 +184,7 @@ flagAsCat: "喵!!!!!!!!!!!!"
flagAsCatDescription: "喵喵喵??"
flagShowTimelineReplies: "在时间线上显示帖子的回复"
flagShowTimelineRepliesDescription: "启用时,时间线除了显示用户的帖子外,还会显示其他用户对帖子的回复。"
-autoAcceptFollowed: "自动允许来自我关注的用户对我的关注请求"
+autoAcceptFollowed: "自动允许回关请求"
addAccount: "添加账户"
reloadAccountsList: "更新账户列表"
loginFailed: "登录失败"
@@ -247,8 +247,8 @@ mediaSilencedInstancesDescription: "设置要隐藏媒体文件的服务器,
federationAllowedHosts: "允许联合的服务器"
federationAllowedHostsDescription: "设定允许联合的服务器,以换行分隔。"
muteAndBlock: "屏蔽/拉黑"
-mutedUsers: "已屏蔽用户"
-blockedUsers: "已拉黑的用户"
+mutedUsers: "已静音的用户"
+blockedUsers: "已屏蔽的用户"
noUsers: "无用户"
editProfile: "编辑资料"
noteDeleteConfirm: "确定要删除该帖子吗?"
@@ -1344,7 +1344,7 @@ skip: "跳过"
restore: "恢复"
syncBetweenDevices: "设备间同步"
preferenceSyncConflictTitle: "服务器上已存在设定值"
-preferenceSyncConflictText: "服务器上已有此设置的设定值。要覆盖哪个设定值?"
+preferenceSyncConflictText: "即将保存设定值到服务器,但检测到服务器上已有此设置的设定值。要使用哪个设定值?"
preferenceSyncConflictChoiceMerge: "合并"
preferenceSyncConflictChoiceServer: "服务器上的设定值"
preferenceSyncConflictChoiceDevice: "设备上的设定值"
@@ -3270,7 +3270,7 @@ _watermarkEditor:
driveFileTypeWarn: "不支持此文件"
driveFileTypeWarnDescription: "请选择图像文件"
title: "编辑水印"
- cover: "覆盖全体"
+ cover: "覆盖所有"
repeat: "平铺"
preserveBoundingRect: "调整为旋转时不超出范围"
opacity: "不透明度"
diff --git a/package.json b/package.json
index 17244e9f3e..7254635950 100644
--- a/package.json
+++ b/package.json
@@ -1,12 +1,12 @@
{
"name": "misskey",
- "version": "2025.11.2-alpha.1",
+ "version": "2025.12.2",
"codename": "nasubi",
"repository": {
"type": "git",
"url": "https://github.com/misskey-dev/misskey.git"
},
- "packageManager": "pnpm@10.23.0",
+ "packageManager": "pnpm@10.25.0",
"workspaces": [
"packages/misskey-js",
"packages/i18n",
@@ -22,14 +22,15 @@
],
"private": true,
"scripts": {
+ "compile-config": "cd packages/backend && pnpm compile-config",
"build-pre": "node ./scripts/build-pre.js",
"build-assets": "node ./scripts/build-assets.mjs",
"build": "pnpm build-pre && pnpm -r build && pnpm build-assets",
"build-storybook": "pnpm --filter frontend build-storybook",
"build-misskey-js-with-types": "pnpm build-pre && pnpm --filter backend... --filter=!misskey-js build && pnpm --filter backend generate-api-json --no-build && ncp packages/backend/built/api.json packages/misskey-js/generator/api.json && pnpm --filter misskey-js update-autogen-code && pnpm --filter misskey-js build && pnpm --filter misskey-js api",
- "start": "cd packages/backend && node ./built/entry.js",
- "start:inspect": "cd packages/backend && node --inspect ./built/entry.js",
- "start:test": "ncp ./.github/misskey/test.yml ./.config/test.yml && cd packages/backend && cross-env NODE_ENV=test node ./built/entry.js",
+ "start": "pnpm check:connect && cd packages/backend && pnpm compile-config && node ./built/boot/entry.js",
+ "start:inspect": "cd packages/backend && pnpm compile-config && node --inspect ./built/boot/entry.js",
+ "start:test": "ncp ./.github/misskey/test.yml ./.config/test.yml && cd packages/backend && cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./built/boot/entry.js",
"cli": "cd packages/backend && pnpm cli",
"init": "pnpm migrate",
"migrate": "cd packages/backend && pnpm migrate",
@@ -52,36 +53,34 @@
"cleanall": "pnpm clean-all"
},
"resolutions": {
- "chokidar": "4.0.3",
+ "chokidar": "5.0.0",
"lodash": "4.17.21"
},
"dependencies": {
"cssnano": "7.1.2",
- "esbuild": "0.27.0",
- "execa": "9.6.0",
- "fast-glob": "3.3.3",
- "glob": "13.0.0",
+ "esbuild": "0.27.1",
+ "execa": "9.6.1",
"ignore-walk": "8.0.0",
"js-yaml": "4.1.1",
"postcss": "8.5.6",
"tar": "7.5.2",
- "terser": "5.44.1",
- "typescript": "5.9.3"
+ "terser": "5.44.1"
},
"devDependencies": {
"@eslint/js": "9.39.1",
- "i18n": "workspace:*",
"@misskey-dev/eslint-plugin": "2.2.0",
"@types/js-yaml": "4.0.9",
- "@types/node": "24.10.1",
- "@typescript-eslint/eslint-plugin": "8.47.0",
- "@typescript-eslint/parser": "8.47.0",
+ "@types/node": "24.10.2",
+ "@typescript-eslint/eslint-plugin": "8.49.0",
+ "@typescript-eslint/parser": "8.49.0",
+ "@typescript/native-preview": "7.0.0-dev.20251206.1",
"cross-env": "10.1.0",
- "cypress": "15.7.0",
+ "cypress": "15.7.1",
"eslint": "9.39.1",
"globals": "16.5.0",
"ncp": "2.0.0",
- "pnpm": "10.23.0",
+ "pnpm": "10.25.0",
+ "typescript": "5.9.3",
"start-server-and-test": "2.1.3"
},
"optionalDependencies": {
diff --git a/packages/backend/.swcrc b/packages/backend/.swcrc
index f4bf7a4d2a..7e1767a67a 100644
--- a/packages/backend/.swcrc
+++ b/packages/backend/.swcrc
@@ -3,12 +3,17 @@
"jsc": {
"parser": {
"syntax": "typescript",
+ "jsx": true,
"dynamicImport": true,
"decorators": true
},
"transform": {
"legacyDecorator": true,
- "decoratorMetadata": true
+ "decoratorMetadata": true,
+ "react": {
+ "runtime": "automatic",
+ "importSource": "@kitajs/html"
+ }
},
"experimental": {
"keepImportAssertions": true
diff --git a/packages/backend/src/server/web/bios.css b/packages/backend/assets/misc/bios.css
similarity index 100%
rename from packages/backend/src/server/web/bios.css
rename to packages/backend/assets/misc/bios.css
diff --git a/packages/backend/src/server/web/bios.js b/packages/backend/assets/misc/bios.js
similarity index 100%
rename from packages/backend/src/server/web/bios.js
rename to packages/backend/assets/misc/bios.js
diff --git a/packages/backend/src/server/web/cli.css b/packages/backend/assets/misc/cli.css
similarity index 100%
rename from packages/backend/src/server/web/cli.css
rename to packages/backend/assets/misc/cli.css
diff --git a/packages/backend/src/server/web/cli.js b/packages/backend/assets/misc/cli.js
similarity index 100%
rename from packages/backend/src/server/web/cli.js
rename to packages/backend/assets/misc/cli.js
diff --git a/packages/backend/src/server/web/error.css b/packages/backend/assets/misc/error.css
similarity index 100%
rename from packages/backend/src/server/web/error.css
rename to packages/backend/assets/misc/error.css
diff --git a/packages/backend/src/server/web/error.js b/packages/backend/assets/misc/error.js
similarity index 100%
rename from packages/backend/src/server/web/error.js
rename to packages/backend/assets/misc/error.js
diff --git a/packages/backend/assets/misc/flush.js b/packages/backend/assets/misc/flush.js
new file mode 100644
index 0000000000..991b8ea808
--- /dev/null
+++ b/packages/backend/assets/misc/flush.js
@@ -0,0 +1,46 @@
+(async () => {
+ const msg = document.getElementById('msg');
+ const successText = `\nSuccess Flush! Back to Misskey\n成功しました。Misskeyを開き直してください。`;
+
+ if (!document.cookie) {
+ message('Your site data is fully cleared by your browser.');
+ message(successText);
+ } else {
+ message('Your browser does not support Clear-Site-Data header. Start opportunistic flushing.');
+ try {
+ localStorage.clear();
+ message('localStorage cleared.');
+
+ const idbPromises = ['MisskeyClient', 'keyval-store'].map((name, i, arr) => new Promise((res, rej) => {
+ const delidb = indexedDB.deleteDatabase(name);
+ delidb.onsuccess = () => res(message(`indexedDB "${name}" cleared. (${i + 1}/${arr.length})`));
+ delidb.onerror = e => rej(e)
+ }));
+
+ await Promise.all(idbPromises);
+
+ if (navigator.serviceWorker.controller) {
+ navigator.serviceWorker.controller.postMessage('clear');
+ await navigator.serviceWorker.getRegistrations()
+ .then(registrations => {
+ return Promise.all(registrations.map(registration => registration.unregister()));
+ })
+ .catch(e => { throw new Error(e) });
+ }
+
+ message(successText);
+ } catch (e) {
+ message(`\n${e}\n\nFlush Failed. Please retry.\n失敗しました。もう一度試してみてください。`);
+ message(`\nIf you retry more than 3 times, try manually clearing the browser cache or contact to instance admin.\n3回以上試しても失敗する場合、ブラウザのキャッシュを手動で消去し、それでもだめならインスタンス管理者に連絡してみてください。\n`)
+
+ console.error(e);
+ setTimeout(() => {
+ location = '/';
+ }, 10000)
+ }
+ }
+
+ function message(text) {
+ msg.insertAdjacentHTML('beforeend', `
[${(new Date()).toString()}] ${text.replace(/\n/g,'
')}
`)
+ }
+})();
diff --git a/packages/backend/assets/misc/info-card.css b/packages/backend/assets/misc/info-card.css
new file mode 100644
index 0000000000..3e27223cc5
--- /dev/null
+++ b/packages/backend/assets/misc/info-card.css
@@ -0,0 +1,35 @@
+html,
+body {
+ margin: 0;
+ padding: 0;
+ min-height: 100vh;
+ background: #fff;
+}
+
+#a {
+ display: block;
+}
+
+#banner {
+ background-size: cover;
+ background-position: center center;
+}
+
+#title {
+ display: inline-block;
+ margin: 24px;
+ padding: 0.5em 0.8em;
+ color: #fff;
+ background: rgba(0, 0, 0, 0.5);
+ font-weight: bold;
+ font-size: 1.3em;
+}
+
+#content {
+ overflow: auto;
+ color: #353c3e;
+}
+
+#description {
+ margin: 24px;
+}
diff --git a/packages/backend/jest.config.cjs b/packages/backend/jest.config.cjs
index 5a4aa4e15a..22ffbbee5c 100644
--- a/packages/backend/jest.config.cjs
+++ b/packages/backend/jest.config.cjs
@@ -205,7 +205,7 @@ module.exports = {
// Whether to use watchman for file crawling
// watchman: true,
- extensionsToTreatAsEsm: ['.ts'],
+ extensionsToTreatAsEsm: ['.ts', '.tsx'],
testTimeout: 60000,
diff --git a/packages/backend/jsconfig.json b/packages/backend/jsconfig.json
deleted file mode 100644
index 1230aadd12..0000000000
--- a/packages/backend/jsconfig.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "compilerOptions": {
- "target": "es6",
- "module": "commonjs",
- "allowSyntheticDefaultImports": true
- },
- "exclude": [
- "node_modules",
- "jspm_packages",
- "tmp",
- "temp"
- ]
-}
diff --git a/packages/backend/migration/1745378064470-composite-note-index.js b/packages/backend/migration/1745378064470-composite-note-index.js
index 12108a6b3c..576bf7d19a 100644
--- a/packages/backend/migration/1745378064470-composite-note-index.js
+++ b/packages/backend/migration/1745378064470-composite-note-index.js
@@ -3,14 +3,14 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { isConcurrentIndexMigrationEnabled } from "./js/migration-config.js";
+const isConcurrentIndexMigrationEnabled = process.env.MISSKEY_MIGRATION_CREATE_INDEX_CONCURRENTLY === '1';
export class CompositeNoteIndex1745378064470 {
name = 'CompositeNoteIndex1745378064470';
- transaction = isConcurrentIndexMigrationEnabled() ? false : undefined;
+ transaction = isConcurrentIndexMigrationEnabled ? false : undefined;
async up(queryRunner) {
- const concurrently = isConcurrentIndexMigrationEnabled();
+ const concurrently = isConcurrentIndexMigrationEnabled;
if (concurrently) {
const hasValidIndex = await queryRunner.query(`SELECT indisvalid FROM pg_index INNER JOIN pg_class ON pg_index.indexrelid = pg_class.oid WHERE pg_class.relname = 'IDX_724b311e6f883751f261ebe378'`);
@@ -29,7 +29,7 @@ export class CompositeNoteIndex1745378064470 {
}
async down(queryRunner) {
- const mayConcurrently = isConcurrentIndexMigrationEnabled() ? 'CONCURRENTLY' : '';
+ const mayConcurrently = isConcurrentIndexMigrationEnabled ? 'CONCURRENTLY' : '';
await queryRunner.query(`DROP INDEX IF EXISTS "IDX_724b311e6f883751f261ebe378"`);
await queryRunner.query(`CREATE INDEX ${mayConcurrently} "IDX_5b87d9d19127bd5d92026017a7" ON "note" ("userId")`);
}
diff --git a/packages/backend/migration/1746949539915-migrateSomeConfigFileSettingsToMeta.js b/packages/backend/migration/1746949539915-migrateSomeConfigFileSettingsToMeta.js
index 3243f43b91..cb8bb33459 100644
--- a/packages/backend/migration/1746949539915-migrateSomeConfigFileSettingsToMeta.js
+++ b/packages/backend/migration/1746949539915-migrateSomeConfigFileSettingsToMeta.js
@@ -3,17 +3,15 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import {loadConfig} from "./js/migration-config.js";
export class MigrateSomeConfigFileSettingsToMeta1746949539915 {
name = 'MigrateSomeConfigFileSettingsToMeta1746949539915'
async up(queryRunner) {
- const config = loadConfig();
// $1 cannot be used in ALTER TABLE queries
- await queryRunner.query(`ALTER TABLE "meta" ADD "proxyRemoteFiles" boolean NOT NULL DEFAULT ${config.proxyRemoteFiles}`);
- await queryRunner.query(`ALTER TABLE "meta" ADD "signToActivityPubGet" boolean NOT NULL DEFAULT ${config.signToActivityPubGet}`);
- await queryRunner.query(`ALTER TABLE "meta" ADD "allowExternalApRedirect" boolean NOT NULL DEFAULT ${!config.disallowExternalApRedirect}`);
+ await queryRunner.query(`ALTER TABLE "meta" ADD "proxyRemoteFiles" boolean NOT NULL DEFAULT TRUE`);
+ await queryRunner.query(`ALTER TABLE "meta" ADD "signToActivityPubGet" boolean NOT NULL DEFAULT TRUE`);
+ await queryRunner.query(`ALTER TABLE "meta" ADD "allowExternalApRedirect" boolean NOT NULL DEFAULT TRUE`);
}
async down(queryRunner) {
diff --git a/packages/backend/migration/js/migration-config.js b/packages/backend/migration/js/migration-config.js
deleted file mode 100644
index 853735661b..0000000000
--- a/packages/backend/migration/js/migration-config.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * SPDX-FileCopyrightText: syuilo and misskey-project
- * SPDX-License-Identifier: AGPL-3.0-only
- */
-
-import { path as configYamlPath } from '../../built/config.js';
-import * as yaml from 'js-yaml';
-import fs from "node:fs";
-
-export function isConcurrentIndexMigrationEnabled() {
- return process.env.MISSKEY_MIGRATION_CREATE_INDEX_CONCURRENTLY === '1';
-}
-
-let loadedConfigCache = undefined;
-
-function loadConfigInternal() {
- const config = yaml.load(fs.readFileSync(configYamlPath, 'utf-8'));
-
- return {
- disallowExternalApRedirect: Boolean(config.disallowExternalApRedirect ?? false),
- proxyRemoteFiles: Boolean(config.proxyRemoteFiles ?? false),
- signToActivityPubGet: Boolean(config.signToActivityPubGet ?? true),
- }
-}
-
-export function loadConfig() {
- if (loadedConfigCache === undefined) {
- loadedConfigCache = loadConfigInternal();
- }
- return loadedConfigCache;
-}
diff --git a/packages/backend/ormconfig.js b/packages/backend/ormconfig.js
index f979c36ad7..dabc0893f4 100644
--- a/packages/backend/ormconfig.js
+++ b/packages/backend/ormconfig.js
@@ -1,7 +1,8 @@
import { DataSource } from 'typeorm';
import { loadConfig } from './built/config.js';
import { entities } from './built/postgres.js';
-import { isConcurrentIndexMigrationEnabled } from "./migration/js/migration-config.js";
+
+const isConcurrentIndexMigrationEnabled = process.env.MISSKEY_MIGRATION_CREATE_INDEX_CONCURRENTLY === '1';
const config = loadConfig();
@@ -15,5 +16,5 @@ export default new DataSource({
extra: config.db.extra,
entities: entities,
migrations: ['migration/*.js'],
- migrationsTransactionMode: isConcurrentIndexMigrationEnabled() ? 'each' : 'all',
+ migrationsTransactionMode: isConcurrentIndexMigrationEnabled ? 'each' : 'all',
});
diff --git a/packages/backend/package.json b/packages/backend/package.json
index 1c3c15bb86..32826d9e43 100644
--- a/packages/backend/package.json
+++ b/packages/backend/package.json
@@ -7,36 +7,37 @@
"node": "^22.15.0 || ^24.10.0"
},
"scripts": {
- "start": "node ./built/boot/entry.js",
- "start:inspect": "node --inspect ./built/boot/entry.js",
- "start:test": "cross-env NODE_ENV=test node ./built/boot/entry.js",
- "migrate": "pnpm typeorm migration:run -d ormconfig.js",
- "revert": "pnpm typeorm migration:revert -d ormconfig.js",
- "cli": "node ./built/boot/cli.js",
- "check:connect": "node ./scripts/check_connect.js",
+ "start": "pnpm compile-config && node ./built/boot/entry.js",
+ "start:inspect": "pnpm compile-config && node --inspect ./built/boot/entry.js",
+ "start:test": "cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./built/boot/entry.js",
+ "migrate": "pnpm compile-config && pnpm typeorm migration:run -d ormconfig.js",
+ "revert": "pnpm compile-config && pnpm typeorm migration:revert -d ormconfig.js",
+ "cli": "pnpm compile-config && node ./built/boot/cli.js",
+ "check:connect": "pnpm compile-config && node ./scripts/check_connect.js",
+ "compile-config": "node ./scripts/compile_config.js",
"build": "node ./build.js",
"build:test": "swc test-server -d built-test -D --config-file test-server/.swcrc --strip-leading-paths",
"watch:swc": "swc src -d built -D -w --strip-leading-paths",
- "build:tsc": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json",
- "watch": "node ./scripts/watch.mjs",
+ "build:tsc": "tsgo -p tsconfig.json && tsc-alias -p tsconfig.json",
+ "watch": "pnpm compile-config && node ./scripts/watch.mjs",
"restart": "pnpm build && pnpm start",
- "dev": "node ./scripts/dev.mjs",
- "typecheck": "tsc --noEmit && tsc -p test --noEmit && tsc -p test-federation --noEmit",
+ "dev": "pnpm compile-config && node ./scripts/dev.mjs",
+ "typecheck": "tsgo --noEmit && tsgo -p test --noEmit && tsgo -p test-federation --noEmit",
"eslint": "eslint --quiet \"{src,test-federation}/**/*.ts\"",
"lint": "pnpm typecheck && pnpm eslint",
- "jest": "cross-env NODE_ENV=test node ./jest.js --forceExit --config jest.config.unit.cjs",
- "jest:e2e": "cross-env NODE_ENV=test node ./jest.js --forceExit --config jest.config.e2e.cjs",
- "jest:fed": "node ./jest.js --forceExit --config jest.config.fed.cjs",
- "jest-and-coverage": "cross-env NODE_ENV=test node ./jest.js --coverage --forceExit --config jest.config.unit.cjs",
- "jest-and-coverage:e2e": "cross-env NODE_ENV=test node ./jest.js --coverage --forceExit --config jest.config.e2e.cjs",
- "jest-clear": "cross-env NODE_ENV=test node ./jest.js --clearCache",
+ "jest": "cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./jest.js --forceExit --config jest.config.unit.cjs",
+ "jest:e2e": "cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./jest.js --forceExit --config jest.config.e2e.cjs",
+ "jest:fed": "pnpm compile-config && node ./jest.js --forceExit --config jest.config.fed.cjs",
+ "jest-and-coverage": "cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./jest.js --coverage --forceExit --config jest.config.unit.cjs",
+ "jest-and-coverage:e2e": "cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./jest.js --coverage --forceExit --config jest.config.e2e.cjs",
+ "jest-clear": "cross-env NODE_ENV=test pnpm compile-config && cross-env NODE_ENV=test node ./jest.js --clearCache",
"test": "pnpm jest",
"test:e2e": "pnpm build && pnpm build:test && pnpm jest:e2e",
"test:fed": "pnpm jest:fed",
"test-and-coverage": "pnpm jest-and-coverage",
"test-and-coverage:e2e": "pnpm build && pnpm build:test && pnpm jest-and-coverage:e2e",
"check-migrations": "node scripts/check_migrations_clean.js",
- "generate-api-json": "node ./scripts/generate_api_json.js"
+ "generate-api-json": "pnpm compile-config && node ./scripts/generate_api_json.js"
},
"optionalDependencies": {
"@swc/core-android-arm64": "1.3.11",
@@ -70,26 +71,25 @@
"utf-8-validate": "6.0.5"
},
"dependencies": {
- "@aws-sdk/client-s3": "3.937.0",
- "@aws-sdk/lib-storage": "3.937.0",
+ "@aws-sdk/client-s3": "3.948.0",
+ "@aws-sdk/lib-storage": "3.948.0",
"@discordapp/twemoji": "16.0.1",
- "@fastify/accepts": "5.0.3",
- "@fastify/cookie": "11.0.2",
- "@fastify/cors": "11.1.0",
+ "@fastify/accepts": "5.0.4",
+ "@fastify/cors": "11.2.0",
"@fastify/express": "4.0.2",
- "@fastify/http-proxy": "11.3.0",
+ "@fastify/http-proxy": "11.4.1",
"@fastify/multipart": "9.3.0",
"@fastify/static": "8.3.0",
- "@fastify/view": "11.1.1",
+ "@kitajs/html": "4.2.11",
"@misskey-dev/sharp-read-bmp": "1.2.0",
"@misskey-dev/summaly": "5.2.5",
- "@napi-rs/canvas": "0.1.82",
+ "@napi-rs/canvas": "0.1.84",
"@nestjs/common": "11.1.9",
"@nestjs/core": "11.1.9",
"@nestjs/testing": "11.1.9",
"@peertube/http-signature": "1.7.0",
- "@sentry/node": "10.26.0",
- "@sentry/profiling-node": "10.26.0",
+ "@sentry/node": "10.29.0",
+ "@sentry/profiling-node": "10.29.0",
"@simplewebauthn/server": "13.2.2",
"@sinonjs/fake-timers": "15.0.0",
"@smithy/node-http-handler": "4.4.5",
@@ -103,13 +103,12 @@
"async-mutex": "0.5.0",
"bcryptjs": "3.0.3",
"blurhash": "2.0.5",
- "body-parser": "2.2.0",
- "bullmq": "5.64.1",
+ "body-parser": "2.2.1",
+ "bullmq": "5.65.1",
"cacheable-lookup": "7.0.0",
- "cbor": "10.0.11",
"chalk": "5.6.2",
"chalk-template": "1.1.2",
- "chokidar": "4.0.3",
+ "chokidar": "5.0.0",
"color-convert": "3.1.3",
"content-disposition": "1.0.1",
"date-fns": "4.1.0",
@@ -120,21 +119,19 @@
"file-type": "21.1.1",
"fluent-ffmpeg": "2.1.3",
"form-data": "4.0.5",
- "got": "14.6.4",
+ "got": "14.6.5",
"hpagent": "1.2.0",
"http-link-header": "1.1.3",
+ "i18n": "workspace:*",
"ioredis": "5.8.2",
"ip-cidr": "4.0.2",
- "ipaddr.js": "2.2.0",
+ "ipaddr.js": "2.3.0",
"is-svg": "6.1.0",
- "js-yaml": "4.1.1",
"json5": "2.2.3",
"jsonld": "9.0.0",
- "jsrsasign": "11.1.0",
"juice": "11.0.3",
"meilisearch": "0.54.0",
"mfm-js": "0.25.0",
- "microformats-parser": "2.0.4",
"mime-types": "3.0.2",
"misskey-js": "workspace:*",
"misskey-reversi": "workspace:*",
@@ -143,18 +140,16 @@
"nested-property": "4.0.0",
"node-fetch": "3.3.2",
"node-html-parser": "7.0.1",
- "nodemailer": "7.0.10",
+ "nodemailer": "7.0.11",
"nsfwjs": "4.2.0",
- "oauth": "0.10.2",
"oauth2orize": "1.12.0",
"oauth2orize-pkce": "0.1.2",
"os-utils": "0.0.14",
"otpauth": "9.4.1",
"pg": "8.16.3",
- "pkce-challenge": "5.0.0",
+ "pkce-challenge": "5.0.1",
"probe-image-size": "7.2.3",
"promise-limit": "2.7.0",
- "pug": "3.0.3",
"qrcode": "1.5.4",
"random-seed": "0.3.0",
"ratelimiter": "3.4.1",
@@ -171,14 +166,12 @@
"slacc": "0.0.10",
"strict-event-emitter-types": "2.0.0",
"stringz": "2.1.0",
- "systeminformation": "5.27.11",
+ "systeminformation": "5.27.14",
"tinycolor2": "1.6.0",
"tmp": "0.2.5",
"tsc-alias": "1.8.16",
- "tsconfig-paths": "4.2.0",
- "typeorm": "0.3.27",
- "typescript": "5.9.3",
- "ulid": "3.0.1",
+ "typeorm": "0.3.28",
+ "ulid": "3.0.2",
"vary": "1.1.2",
"web-push": "3.6.7",
"ws": "8.18.3",
@@ -186,8 +179,9 @@
},
"devDependencies": {
"@jest/globals": "29.7.0",
+ "@kitajs/ts-html-plugin": "4.1.3",
"@nestjs/platform-express": "11.1.9",
- "@sentry/vue": "10.26.0",
+ "@sentry/vue": "10.29.0",
"@simplewebauthn/types": "12.0.0",
"@swc/jest": "0.2.39",
"@types/accepts": "1.3.7",
@@ -198,25 +192,21 @@
"@types/fluent-ffmpeg": "2.1.28",
"@types/http-link-header": "1.0.7",
"@types/jest": "29.5.14",
- "@types/js-yaml": "4.0.9",
"@types/jsonld": "1.5.15",
- "@types/jsrsasign": "10.5.15",
"@types/mime-types": "3.0.1",
"@types/ms": "2.1.0",
- "@types/node": "24.10.1",
+ "@types/node": "24.10.2",
"@types/nodemailer": "7.0.4",
- "@types/oauth": "0.9.6",
"@types/oauth2orize": "1.11.5",
"@types/oauth2orize-pkce": "0.1.2",
"@types/pg": "8.15.6",
- "@types/pug": "2.0.10",
"@types/qrcode": "1.5.6",
"@types/random-seed": "0.3.5",
"@types/ratelimiter": "3.4.6",
"@types/rename": "1.0.7",
"@types/sanitize-html": "2.16.0",
"@types/semver": "7.7.1",
- "@types/simple-oauth2": "5.0.7",
+ "@types/simple-oauth2": "5.0.8",
"@types/sinonjs__fake-timers": "15.0.1",
"@types/supertest": "6.0.3",
"@types/tinycolor2": "1.4.6",
@@ -224,19 +214,21 @@
"@types/vary": "1.1.3",
"@types/web-push": "3.6.4",
"@types/ws": "8.18.1",
- "@typescript-eslint/eslint-plugin": "8.47.0",
- "@typescript-eslint/parser": "8.47.0",
+ "@typescript-eslint/eslint-plugin": "8.49.0",
+ "@typescript-eslint/parser": "8.49.0",
"aws-sdk-client-mock": "4.1.0",
+ "cbor": "10.0.11",
"cross-env": "10.1.0",
"eslint-plugin-import": "2.32.0",
- "execa": "9.6.0",
+ "execa": "9.6.1",
"fkill": "10.0.1",
"jest": "29.7.0",
"jest-mock": "29.7.0",
- "jest-util": "29.7.0",
+ "js-yaml": "4.1.1",
"nodemon": "3.1.11",
"pid-port": "2.0.0",
"simple-oauth2": "5.1.0",
- "supertest": "7.1.4"
+ "supertest": "7.1.4",
+ "vite": "7.2.7"
}
}
diff --git a/packages/backend/scripts/compile_config.js b/packages/backend/scripts/compile_config.js
new file mode 100644
index 0000000000..e78fa3dc9f
--- /dev/null
+++ b/packages/backend/scripts/compile_config.js
@@ -0,0 +1,54 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+/**
+ * YAMLファイルをJSONファイルに変換するスクリプト
+ * ビルド前に実行し、ランタイムにjs-yamlを含まないようにする
+ */
+
+import fs from 'node:fs';
+import { resolve, dirname } from 'node:path';
+import { fileURLToPath } from 'node:url';
+import yaml from 'js-yaml';
+
+const _filename = fileURLToPath(import.meta.url);
+const _dirname = dirname(_filename);
+
+const configDir = resolve(_dirname, '../../../.config');
+const OUTPUT_PATH = resolve(_dirname, '../../../built/.config.json');
+
+// TODO: yamlのパースに失敗したときのエラーハンドリング
+
+/**
+ * YAMLファイルをJSONファイルに変換
+ * @param {string} ymlPath - YAMLファイルのパス
+ */
+function yamlToJson(ymlPath) {
+ if (!fs.existsSync(ymlPath)) {
+ console.warn(`YAML file not found: ${ymlPath}`);
+ return;
+ }
+
+ console.log(`${ymlPath} → ${OUTPUT_PATH}`);
+
+ const yamlContent = fs.readFileSync(ymlPath, 'utf-8');
+ const jsonContent = yaml.load(yamlContent);
+ if (!fs.existsSync(dirname(OUTPUT_PATH))) {
+ fs.mkdirSync(dirname(OUTPUT_PATH), { recursive: true });
+ }
+ fs.writeFileSync(OUTPUT_PATH, JSON.stringify({
+ '_NOTE_': 'This file is auto-generated from YAML file. DO NOT EDIT.',
+ ...jsonContent,
+ }), 'utf-8');
+}
+
+if (process.env.MISSKEY_CONFIG_YML) {
+ const customYmlPath = resolve(configDir, process.env.MISSKEY_CONFIG_YML);
+ yamlToJson(customYmlPath);
+} else {
+ yamlToJson(resolve(configDir, process.env.NODE_ENV === 'test' ? 'test.yml' : 'default.yml'));
+}
+
+console.log('Configuration compiled ✓');
diff --git a/packages/backend/scripts/dev.mjs b/packages/backend/scripts/dev.mjs
index 023eb7eae6..db96eaf976 100644
--- a/packages/backend/scripts/dev.mjs
+++ b/packages/backend/scripts/dev.mjs
@@ -42,7 +42,7 @@ async function killProc() {
'./node_modules/nodemon/bin/nodemon.js',
[
'-w', 'src',
- '-e', 'ts,js,mjs,cjs,json,pug',
+ '-e', 'ts,js,mjs,cjs,tsx,json,pug',
'--exec', 'pnpm', 'run', 'build',
],
{
diff --git a/packages/backend/scripts/measure-memory.mjs b/packages/backend/scripts/measure-memory.mjs
new file mode 100644
index 0000000000..017252d7ec
--- /dev/null
+++ b/packages/backend/scripts/measure-memory.mjs
@@ -0,0 +1,152 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+/**
+ * This script starts the Misskey backend server, waits for it to be ready,
+ * measures memory usage, and outputs the result as JSON.
+ *
+ * Usage: node scripts/measure-memory.mjs
+ */
+
+import { fork } from 'node:child_process';
+import { setTimeout } from 'node:timers/promises';
+import { fileURLToPath } from 'node:url';
+import { dirname, join } from 'node:path';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = dirname(__filename);
+
+const STARTUP_TIMEOUT = 120000; // 120 seconds timeout for server startup
+const MEMORY_SETTLE_TIME = 10000; // Wait 10 seconds after startup for memory to settle
+
+async function measureMemory() {
+ const startTime = Date.now();
+
+ // Start the Misskey backend server using fork to enable IPC
+ const serverProcess = fork(join(__dirname, '../built/boot/entry.js'), [], {
+ cwd: join(__dirname, '..'),
+ env: {
+ ...process.env,
+ NODE_ENV: 'test',
+ },
+ stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
+ });
+
+ let serverReady = false;
+
+ // Listen for the 'ok' message from the server indicating it's ready
+ serverProcess.on('message', (message) => {
+ if (message === 'ok') {
+ serverReady = true;
+ }
+ });
+
+ // Handle server output
+ serverProcess.stdout?.on('data', (data) => {
+ process.stderr.write(`[server stdout] ${data}`);
+ });
+
+ serverProcess.stderr?.on('data', (data) => {
+ process.stderr.write(`[server stderr] ${data}`);
+ });
+
+ // Handle server error
+ serverProcess.on('error', (err) => {
+ process.stderr.write(`[server error] ${err}\n`);
+ });
+
+ // Wait for server to be ready or timeout
+ const startupStartTime = Date.now();
+ while (!serverReady) {
+ if (Date.now() - startupStartTime > STARTUP_TIMEOUT) {
+ serverProcess.kill('SIGTERM');
+ throw new Error('Server startup timeout');
+ }
+ await setTimeout(100);
+ }
+
+ const startupTime = Date.now() - startupStartTime;
+ process.stderr.write(`Server started in ${startupTime}ms\n`);
+
+ // Wait for memory to settle
+ await setTimeout(MEMORY_SETTLE_TIME);
+
+ // Get memory usage from the server process via /proc
+ const pid = serverProcess.pid;
+ let memoryInfo;
+
+ try {
+ const fs = await import('node:fs/promises');
+
+ // Read /proc/[pid]/status for detailed memory info
+ const status = await fs.readFile(`/proc/${pid}/status`, 'utf-8');
+ const vmRssMatch = status.match(/VmRSS:\s+(\d+)\s+kB/);
+ const vmDataMatch = status.match(/VmData:\s+(\d+)\s+kB/);
+ const vmSizeMatch = status.match(/VmSize:\s+(\d+)\s+kB/);
+
+ memoryInfo = {
+ rss: vmRssMatch ? parseInt(vmRssMatch[1], 10) * 1024 : null,
+ heapUsed: vmDataMatch ? parseInt(vmDataMatch[1], 10) * 1024 : null,
+ vmSize: vmSizeMatch ? parseInt(vmSizeMatch[1], 10) * 1024 : null,
+ };
+ } catch (err) {
+ // Fallback: use ps command
+ process.stderr.write(`Warning: Could not read /proc/${pid}/status: ${err}\n`);
+
+ const { execSync } = await import('node:child_process');
+ try {
+ const ps = execSync(`ps -o rss= -p ${pid}`, { encoding: 'utf-8' });
+ const rssKb = parseInt(ps.trim(), 10);
+ memoryInfo = {
+ rss: rssKb * 1024,
+ heapUsed: null,
+ vmSize: null,
+ };
+ } catch {
+ memoryInfo = {
+ rss: null,
+ heapUsed: null,
+ vmSize: null,
+ error: 'Could not measure memory',
+ };
+ }
+ }
+
+ // Stop the server
+ serverProcess.kill('SIGTERM');
+
+ // Wait for process to exit
+ let exited = false;
+ await new Promise((resolve) => {
+ serverProcess.on('exit', () => {
+ exited = true;
+ resolve(undefined);
+ });
+ // Force kill after 10 seconds if not exited
+ setTimeout(10000).then(() => {
+ if (!exited) {
+ serverProcess.kill('SIGKILL');
+ }
+ resolve(undefined);
+ });
+ });
+
+ const result = {
+ timestamp: new Date().toISOString(),
+ startupTimeMs: startupTime,
+ memory: memoryInfo,
+ };
+
+ // Output as JSON to stdout
+ console.log(JSON.stringify(result, null, 2));
+}
+
+measureMemory().catch((err) => {
+ console.error(JSON.stringify({
+ error: err.message,
+ timestamp: new Date().toISOString(),
+ }));
+ process.exit(1);
+});
diff --git a/packages/backend/scripts/watch.mjs b/packages/backend/scripts/watch.mjs
index a0ccea3b16..9d608b233c 100644
--- a/packages/backend/scripts/watch.mjs
+++ b/packages/backend/scripts/watch.mjs
@@ -21,7 +21,7 @@ import { execa } from 'execa';
});
}, 3000);
- execa('tsc', ['-w', '-p', 'tsconfig.json'], {
+ execa('tsgo', ['-w', '-p', 'tsconfig.json'], {
stdout: process.stdout,
stderr: process.stderr,
});
diff --git a/packages/backend/src/config.ts b/packages/backend/src/config.ts
index fdf6fe18e2..657d7869fa 100644
--- a/packages/backend/src/config.ts
+++ b/packages/backend/src/config.ts
@@ -6,11 +6,11 @@
import * as fs from 'node:fs';
import { fileURLToPath } from 'node:url';
import { dirname, resolve } from 'node:path';
-import * as yaml from 'js-yaml';
import { type FastifyServerOptions } from 'fastify';
import type * as Sentry from '@sentry/node';
import type * as SentryVue from '@sentry/vue';
import type { RedisOptions } from 'ioredis';
+import type { ManifestChunk } from 'vite';
type RedisOptionsSource = Partial & {
host: string;
@@ -30,6 +30,7 @@ type Source = {
socket?: string;
trustProxy?: FastifyServerOptions['trustProxy'];
chmodSocket?: string;
+ enableIpRateLimit?: boolean;
disableHsts?: boolean;
db: {
host: string;
@@ -120,8 +121,9 @@ export type Config = {
url: string;
port: number;
socket: string | undefined;
- trustProxy: FastifyServerOptions['trustProxy'];
+ trustProxy: NonNullable;
chmodSocket: string | undefined;
+ enableIpRateLimit: boolean;
disableHsts: boolean | undefined;
db: {
host: string;
@@ -187,9 +189,9 @@ export type Config = {
authUrl: string;
driveUrl: string;
userAgent: string;
- frontendEntry: { file: string | null };
+ frontendEntry: ManifestChunk;
frontendManifestExists: boolean;
- frontendEmbedEntry: { file: string | null };
+ frontendEmbedEntry: ManifestChunk;
frontendEmbedManifestExists: boolean;
mediaProxy: string;
externalMediaProxyEnabled: boolean;
@@ -217,21 +219,15 @@ export type FulltextSearchProvider = 'sqlLike' | 'sqlPgroonga' | 'meilisearch';
const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename);
-/**
- * Path of configuration directory
- */
-const dir = `${_dirname}/../../../.config`;
+const compiledConfigFilePathForTest = resolve(_dirname, '../../../built/._config_.json');
-/**
- * Path of configuration file
- */
-export const path = process.env.MISSKEY_CONFIG_YML
- ? resolve(dir, process.env.MISSKEY_CONFIG_YML)
- : process.env.NODE_ENV === 'test'
- ? resolve(dir, 'test.yml')
- : resolve(dir, 'default.yml');
+export const compiledConfigFilePath = fs.existsSync(compiledConfigFilePathForTest) ? compiledConfigFilePathForTest : resolve(_dirname, '../../../built/.config.json');
export function loadConfig(): Config {
+ if (!fs.existsSync(compiledConfigFilePath)) {
+ throw new Error('Compiled configuration file not found. Try running \'pnpm compile-config\'.');
+ }
+
const meta = JSON.parse(fs.readFileSync(`${_dirname}/../../../built/meta.json`, 'utf-8'));
const frontendManifestExists = fs.existsSync(_dirname + '/../../../built/_frontend_vite_/manifest.json');
@@ -243,7 +239,7 @@ export function loadConfig(): Config {
JSON.parse(fs.readFileSync(`${_dirname}/../../../built/_frontend_embed_vite_/manifest.json`, 'utf-8'))
: { 'src/boot.ts': { file: null } };
- const config = yaml.load(fs.readFileSync(path, 'utf-8')) as Source;
+ const config = JSON.parse(fs.readFileSync(compiledConfigFilePath, 'utf-8')) as Source;
const url = tryCreateUrl(config.url ?? process.env.MISSKEY_URL ?? '');
const version = meta.version;
@@ -269,9 +265,17 @@ export function loadConfig(): Config {
url: url.origin,
port: config.port ?? parseInt(process.env.PORT ?? '', 10),
socket: config.socket,
- trustProxy: config.trustProxy,
+ trustProxy: config.trustProxy ?? [
+ '10.0.0.0/8',
+ '172.16.0.0/12',
+ '192.168.0.0/16',
+ '127.0.0.1/32',
+ '::1/128',
+ 'fc00::/7',
+ ],
chmodSocket: config.chmodSocket,
disableHsts: config.disableHsts,
+ enableIpRateLimit: config.enableIpRateLimit ?? true,
host,
hostname,
scheme,
diff --git a/packages/backend/src/core/AiService.ts b/packages/backend/src/core/AiService.ts
index 7a005400bb..cbae280030 100644
--- a/packages/backend/src/core/AiService.ts
+++ b/packages/backend/src/core/AiService.ts
@@ -7,7 +7,6 @@ import * as fs from 'node:fs';
import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path';
import { Injectable } from '@nestjs/common';
-import si from 'systeminformation';
import { Mutex } from 'async-mutex';
import fetch from 'node-fetch';
import { bindThis } from '@/decorators.js';
@@ -84,6 +83,7 @@ export class AiService {
@bindThis
private async getCpuFlags(): Promise {
+ const si = await import('systeminformation');
const str = await si.cpuFlags();
return str.split(/\s+/);
}
diff --git a/packages/backend/src/core/CoreModule.ts b/packages/backend/src/core/CoreModule.ts
index 87575ca59a..f075671d93 100644
--- a/packages/backend/src/core/CoreModule.ts
+++ b/packages/backend/src/core/CoreModule.ts
@@ -141,7 +141,7 @@ import { ApLoggerService } from './activitypub/ApLoggerService.js';
import { ApMfmService } from './activitypub/ApMfmService.js';
import { ApRendererService } from './activitypub/ApRendererService.js';
import { ApRequestService } from './activitypub/ApRequestService.js';
-import { ApResolverService } from './activitypub/ApResolverService.js';
+import { ApResolverService, Resolver } from './activitypub/ApResolverService.js';
import { JsonLdService } from './activitypub/JsonLdService.js';
import { RemoteLoggerService } from './RemoteLoggerService.js';
import { RemoteUserResolveService } from './RemoteUserResolveService.js';
@@ -447,6 +447,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
ApRendererService,
ApRequestService,
ApResolverService,
+ Resolver,
JsonLdService,
RemoteLoggerService,
RemoteUserResolveService,
@@ -745,6 +746,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
ApRendererService,
ApRequestService,
ApResolverService,
+ Resolver,
JsonLdService,
RemoteLoggerService,
RemoteUserResolveService,
diff --git a/packages/backend/src/core/activitypub/ApInboxService.ts b/packages/backend/src/core/activitypub/ApInboxService.ts
index 81637580e3..ff47ca930d 100644
--- a/packages/backend/src/core/activitypub/ApInboxService.ts
+++ b/packages/backend/src/core/activitypub/ApInboxService.ts
@@ -95,7 +95,7 @@ export class ApInboxService {
if (isCollectionOrOrderedCollection(activity)) {
const results = [] as [string, string | void][];
// eslint-disable-next-line no-param-reassign
- resolver ??= this.apResolverService.createResolver();
+ resolver ??= await this.apResolverService.createResolver();
const items = toArray(isCollection(activity) ? activity.items : activity.orderedItems);
if (items.length >= resolver.getRecursionLimit()) {
@@ -221,7 +221,7 @@ export class ApInboxService {
this.logger.info(`Accept: ${uri}`);
// eslint-disable-next-line no-param-reassign
- resolver ??= this.apResolverService.createResolver();
+ resolver ??= await this.apResolverService.createResolver();
const object = await resolver.resolve(activity.object).catch(err => {
this.logger.error(`Resolution failed: ${err}`);
@@ -284,7 +284,7 @@ export class ApInboxService {
this.logger.info(`Announce: ${uri}`);
// eslint-disable-next-line no-param-reassign
- resolver ??= this.apResolverService.createResolver();
+ resolver ??= await this.apResolverService.createResolver();
if (!activity.object) return 'skip: activity has no object property';
const targetUri = getApId(activity.object);
@@ -406,7 +406,7 @@ export class ApInboxService {
}
// eslint-disable-next-line no-param-reassign
- resolver ??= this.apResolverService.createResolver();
+ resolver ??= await this.apResolverService.createResolver();
const object = await resolver.resolve(activity.object).catch(e => {
this.logger.error(`Resolution failed: ${e}`);
@@ -575,7 +575,7 @@ export class ApInboxService {
this.logger.info(`Reject: ${uri}`);
// eslint-disable-next-line no-param-reassign
- resolver ??= this.apResolverService.createResolver();
+ resolver ??= await this.apResolverService.createResolver();
const object = await resolver.resolve(activity.object).catch(e => {
this.logger.error(`Resolution failed: ${e}`);
@@ -642,7 +642,7 @@ export class ApInboxService {
this.logger.info(`Undo: ${uri}`);
// eslint-disable-next-line no-param-reassign
- resolver ??= this.apResolverService.createResolver();
+ resolver ??= await this.apResolverService.createResolver();
const object = await resolver.resolve(activity.object).catch(e => {
this.logger.error(`Resolution failed: ${e}`);
@@ -774,7 +774,7 @@ export class ApInboxService {
this.logger.debug('Update');
// eslint-disable-next-line no-param-reassign
- resolver ??= this.apResolverService.createResolver();
+ resolver ??= await this.apResolverService.createResolver();
const object = await resolver.resolve(activity.object).catch(e => {
this.logger.error(`Resolution failed: ${e}`);
diff --git a/packages/backend/src/core/activitypub/ApResolverService.ts b/packages/backend/src/core/activitypub/ApResolverService.ts
index 646150455b..0f51b1ce8d 100644
--- a/packages/backend/src/core/activitypub/ApResolverService.ts
+++ b/packages/backend/src/core/activitypub/ApResolverService.ts
@@ -3,10 +3,17 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Inject, Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import { IsNull, Not } from 'typeorm';
import type { MiLocalUser, MiRemoteUser } from '@/models/User.js';
-import type { NotesRepository, PollsRepository, NoteReactionsRepository, UsersRepository, FollowRequestsRepository, MiMeta } from '@/models/_.js';
+import type {
+ FollowRequestsRepository,
+ MiMeta,
+ NoteReactionsRepository,
+ NotesRepository,
+ PollsRepository,
+ UsersRepository
+} from '@/models/_.js';
import type { Config } from '@/config.js';
import { HttpRequestService } from '@/core/HttpRequestService.js';
import { DI } from '@/di-symbols.js';
@@ -16,26 +23,43 @@ import { LoggerService } from '@/core/LoggerService.js';
import type Logger from '@/logger.js';
import { SystemAccountService } from '@/core/SystemAccountService.js';
import { IdentifiableError } from '@/misc/identifiable-error.js';
+import type { ICollection, IObject, IOrderedCollection } from './type.js';
import { isCollectionOrOrderedCollection } from './type.js';
import { ApDbResolverService } from './ApDbResolverService.js';
import { ApRendererService } from './ApRendererService.js';
import { ApRequestService } from './ApRequestService.js';
import { FetchAllowSoftFailMask } from './misc/check-against-url.js';
-import type { IObject, ICollection, IOrderedCollection } from './type.js';
+import { ModuleRef } from '@nestjs/core';
+@Injectable({ scope: Scope.TRANSIENT })
export class Resolver {
private history: Set;
private user?: MiLocalUser;
private logger: Logger;
+ private recursionLimit = 256;
constructor(
+ @Inject(DI.config)
private config: Config,
+
+ @Inject(DI.meta)
private meta: MiMeta,
+
+ @Inject(DI.usersRepository)
private usersRepository: UsersRepository,
+
+ @Inject(DI.notesRepository)
private notesRepository: NotesRepository,
+
+ @Inject(DI.pollsRepository)
private pollsRepository: PollsRepository,
+
+ @Inject(DI.noteReactionsRepository)
private noteReactionsRepository: NoteReactionsRepository,
+
+ @Inject(DI.followRequestsRepository)
private followRequestsRepository: FollowRequestsRepository,
+
private utilityService: UtilityService,
private systemAccountService: SystemAccountService,
private apRequestService: ApRequestService,
@@ -43,7 +67,6 @@ export class Resolver {
private apRendererService: ApRendererService,
private apDbResolverService: ApDbResolverService,
private loggerService: LoggerService,
- private recursionLimit = 256,
) {
this.history = new Set();
this.logger = this.loggerService.getLogger('ap-resolve');
@@ -180,54 +203,12 @@ export class Resolver {
@Injectable()
export class ApResolverService {
constructor(
- @Inject(DI.config)
- private config: Config,
-
- @Inject(DI.meta)
- private meta: MiMeta,
-
- @Inject(DI.usersRepository)
- private usersRepository: UsersRepository,
-
- @Inject(DI.notesRepository)
- private notesRepository: NotesRepository,
-
- @Inject(DI.pollsRepository)
- private pollsRepository: PollsRepository,
-
- @Inject(DI.noteReactionsRepository)
- private noteReactionsRepository: NoteReactionsRepository,
-
- @Inject(DI.followRequestsRepository)
- private followRequestsRepository: FollowRequestsRepository,
-
- private utilityService: UtilityService,
- private systemAccountService: SystemAccountService,
- private apRequestService: ApRequestService,
- private httpRequestService: HttpRequestService,
- private apRendererService: ApRendererService,
- private apDbResolverService: ApDbResolverService,
- private loggerService: LoggerService,
+ private moduleRef: ModuleRef,
) {
}
@bindThis
- public createResolver(): Resolver {
- return new Resolver(
- this.config,
- this.meta,
- this.usersRepository,
- this.notesRepository,
- this.pollsRepository,
- this.noteReactionsRepository,
- this.followRequestsRepository,
- this.utilityService,
- this.systemAccountService,
- this.apRequestService,
- this.httpRequestService,
- this.apRendererService,
- this.apDbResolverService,
- this.loggerService,
- );
+ public async createResolver(): Promise {
+ return await this.moduleRef.create(Resolver);
}
}
diff --git a/packages/backend/src/core/activitypub/models/ApImageService.ts b/packages/backend/src/core/activitypub/models/ApImageService.ts
index e7ece87b01..0496774c19 100644
--- a/packages/backend/src/core/activitypub/models/ApImageService.ts
+++ b/packages/backend/src/core/activitypub/models/ApImageService.ts
@@ -46,7 +46,7 @@ export class ApImageService {
throw new Error('actor has been suspended');
}
- const image = await this.apResolverService.createResolver().resolve(value);
+ const image = await (await this.apResolverService.createResolver()).resolve(value);
if (!isDocument(image)) return null;
diff --git a/packages/backend/src/core/activitypub/models/ApNoteService.ts b/packages/backend/src/core/activitypub/models/ApNoteService.ts
index 214d32f67f..1fc5728c98 100644
--- a/packages/backend/src/core/activitypub/models/ApNoteService.ts
+++ b/packages/backend/src/core/activitypub/models/ApNoteService.ts
@@ -128,7 +128,7 @@ export class ApNoteService {
@bindThis
public async createNote(value: string | IObject, actor?: MiRemoteUser, resolver?: Resolver, silent = false): Promise {
// eslint-disable-next-line no-param-reassign
- if (resolver == null) resolver = this.apResolverService.createResolver();
+ if (resolver == null) resolver = await this.apResolverService.createResolver();
const object = await resolver.resolve(value);
diff --git a/packages/backend/src/core/activitypub/models/ApPersonService.ts b/packages/backend/src/core/activitypub/models/ApPersonService.ts
index e52078ed0f..ebe8e9c964 100644
--- a/packages/backend/src/core/activitypub/models/ApPersonService.ts
+++ b/packages/backend/src/core/activitypub/models/ApPersonService.ts
@@ -310,7 +310,7 @@ export class ApPersonService implements OnModuleInit {
}
// eslint-disable-next-line no-param-reassign
- if (resolver == null) resolver = this.apResolverService.createResolver();
+ if (resolver == null) resolver = await this.apResolverService.createResolver();
const object = await resolver.resolve(uri);
if (object.id == null) throw new Error('invalid object.id: ' + object.id);
@@ -500,7 +500,7 @@ export class ApPersonService implements OnModuleInit {
//#endregion
// eslint-disable-next-line no-param-reassign
- if (resolver == null) resolver = this.apResolverService.createResolver();
+ if (resolver == null) resolver = await this.apResolverService.createResolver();
const object = hint ?? await resolver.resolve(uri);
@@ -678,7 +678,7 @@ export class ApPersonService implements OnModuleInit {
// リモートサーバーからフェッチしてきて登録
// eslint-disable-next-line no-param-reassign
- if (resolver == null) resolver = this.apResolverService.createResolver();
+ if (resolver == null) resolver = await this.apResolverService.createResolver();
return await this.createPerson(uri, resolver);
}
@@ -707,7 +707,7 @@ export class ApPersonService implements OnModuleInit {
this.logger.info(`Updating the featured: ${user.uri}`);
- const _resolver = resolver ?? this.apResolverService.createResolver();
+ const _resolver = resolver ?? await this.apResolverService.createResolver();
// Resolve to (Ordered)Collection Object
const collection = await _resolver.resolveCollection(user.featured);
diff --git a/packages/backend/src/core/activitypub/models/ApQuestionService.ts b/packages/backend/src/core/activitypub/models/ApQuestionService.ts
index a2cdaf02ca..8ac2f21e26 100644
--- a/packages/backend/src/core/activitypub/models/ApQuestionService.ts
+++ b/packages/backend/src/core/activitypub/models/ApQuestionService.ts
@@ -45,7 +45,7 @@ export class ApQuestionService {
@bindThis
public async extractPollFromQuestion(source: string | IObject, resolver?: Resolver): Promise {
// eslint-disable-next-line no-param-reassign
- if (resolver == null) resolver = this.apResolverService.createResolver();
+ if (resolver == null) resolver = await this.apResolverService.createResolver();
const question = await resolver.resolve(source);
if (!isQuestion(question)) throw new Error('invalid type');
@@ -91,7 +91,7 @@ export class ApQuestionService {
// resolve new Question object
// eslint-disable-next-line no-param-reassign
- if (resolver == null) resolver = this.apResolverService.createResolver();
+ if (resolver == null) resolver = await this.apResolverService.createResolver();
const question = await resolver.resolve(value);
this.logger.debug(`fetched question: ${JSON.stringify(question, null, 2)}`);
diff --git a/packages/backend/src/core/entities/NoteEntityService.ts b/packages/backend/src/core/entities/NoteEntityService.ts
index 6871ba2c72..e7847ba74e 100644
--- a/packages/backend/src/core/entities/NoteEntityService.ts
+++ b/packages/backend/src/core/entities/NoteEntityService.ts
@@ -15,6 +15,7 @@ import type { UsersRepository, NotesRepository, FollowingsRepository, PollsRepos
import { bindThis } from '@/decorators.js';
import { DebounceLoader } from '@/misc/loader.js';
import { IdService } from '@/core/IdService.js';
+import { shouldHideNoteByTime } from '@/misc/should-hide-note-by-time.js';
import { ReactionsBufferingService } from '@/core/ReactionsBufferingService.js';
import type { OnModuleInit } from '@nestjs/common';
import type { CustomEmojiService } from '../CustomEmojiService.js';
@@ -116,12 +117,7 @@ export class NoteEntityService implements OnModuleInit {
private treatVisibility(packedNote: Packed<'Note'>): Packed<'Note'>['visibility'] {
if (packedNote.visibility === 'public' || packedNote.visibility === 'home') {
const followersOnlyBefore = packedNote.user.makeNotesFollowersOnlyBefore;
- if ((followersOnlyBefore != null)
- && (
- (followersOnlyBefore <= 0 && (Date.now() - new Date(packedNote.createdAt).getTime() > 0 - (followersOnlyBefore * 1000)))
- || (followersOnlyBefore > 0 && (new Date(packedNote.createdAt).getTime() < followersOnlyBefore * 1000))
- )
- ) {
+ if (shouldHideNoteByTime(followersOnlyBefore, packedNote.createdAt)) {
packedNote.visibility = 'followers';
}
}
@@ -141,12 +137,7 @@ export class NoteEntityService implements OnModuleInit {
if (!hide) {
const hiddenBefore = packedNote.user.makeNotesHiddenBefore;
- if ((hiddenBefore != null)
- && (
- (hiddenBefore <= 0 && (Date.now() - new Date(packedNote.createdAt).getTime() > 0 - (hiddenBefore * 1000)))
- || (hiddenBefore > 0 && (new Date(packedNote.createdAt).getTime() < hiddenBefore * 1000))
- )
- ) {
+ if (shouldHideNoteByTime(hiddenBefore, packedNote.createdAt)) {
hide = true;
}
}
diff --git a/packages/backend/src/daemons/ServerStatsService.ts b/packages/backend/src/daemons/ServerStatsService.ts
index d229efb123..a972e5861c 100644
--- a/packages/backend/src/daemons/ServerStatsService.ts
+++ b/packages/backend/src/daemons/ServerStatsService.ts
@@ -4,13 +4,12 @@
*/
import { Inject, Injectable } from '@nestjs/common';
-import si from 'systeminformation';
import Xev from 'xev';
import * as osUtils from 'os-utils';
import { bindThis } from '@/decorators.js';
-import type { OnApplicationShutdown } from '@nestjs/common';
import { MiMeta } from '@/models/_.js';
import { DI } from '@/di-symbols.js';
+import type { OnApplicationShutdown } from '@nestjs/common';
const ev = new Xev();
@@ -97,12 +96,14 @@ function cpuUsage(): Promise {
// MEMORY STAT
async function mem() {
+ const si = await import('systeminformation');
const data = await si.mem();
return data;
}
// NETWORK STAT
async function net() {
+ const si = await import('systeminformation');
const iface = await si.networkInterfaceDefault();
const data = await si.networkStats(iface);
return data[0];
@@ -110,5 +111,6 @@ async function net() {
// FS STAT
async function fs() {
+ const si = await import('systeminformation');
return await si.disksIO().catch(() => ({ rIO_sec: 0, wIO_sec: 0 }));
}
diff --git a/packages/backend/src/misc/json-stringify-html-safe.ts b/packages/backend/src/misc/json-stringify-html-safe.ts
new file mode 100644
index 0000000000..aac12d57db
--- /dev/null
+++ b/packages/backend/src/misc/json-stringify-html-safe.ts
@@ -0,0 +1,18 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+const ESCAPE_LOOKUP = {
+ '&': '\\u0026',
+ '>': '\\u003e',
+ '<': '\\u003c',
+ '\u2028': '\\u2028',
+ '\u2029': '\\u2029',
+} as Record;
+
+const ESCAPE_REGEX = /[&><\u2028\u2029]/g;
+
+export function htmlSafeJsonStringify(obj: any): string {
+ return JSON.stringify(obj).replace(ESCAPE_REGEX, x => ESCAPE_LOOKUP[x]);
+}
diff --git a/packages/backend/src/misc/should-hide-note-by-time.ts b/packages/backend/src/misc/should-hide-note-by-time.ts
new file mode 100644
index 0000000000..ea1951e66c
--- /dev/null
+++ b/packages/backend/src/misc/should-hide-note-by-time.ts
@@ -0,0 +1,29 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+/**
+ * ノートが指定された時間条件に基づいて非表示対象かどうかを判定する
+ * @param hiddenBefore 非表示条件(負の値: 作成からの経過秒数、正の値: UNIXタイムスタンプ秒、null: 判定しない)
+ * @param createdAt ノートの作成日時(ISO 8601形式の文字列 または Date オブジェクト)
+ * @returns 非表示にすべき場合は true
+ */
+export function shouldHideNoteByTime(hiddenBefore: number | null | undefined, createdAt: string | Date): boolean {
+ if (hiddenBefore == null) {
+ return false;
+ }
+
+ const createdAtTime = typeof createdAt === 'string' ? new Date(createdAt).getTime() : createdAt.getTime();
+
+ if (hiddenBefore <= 0) {
+ // 負の値: 作成からの経過時間(秒)で判定
+ const elapsedSeconds = (Date.now() - createdAtTime) / 1000;
+ const hideAfterSeconds = Math.abs(hiddenBefore);
+ return elapsedSeconds >= hideAfterSeconds;
+ } else {
+ // 正の値: 絶対的なタイムスタンプ(秒)で判定
+ const createdAtSeconds = createdAtTime / 1000;
+ return createdAtSeconds <= hiddenBefore;
+ }
+}
diff --git a/packages/backend/src/misc/show-machine-info.ts b/packages/backend/src/misc/show-machine-info.ts
index 8ddec35f23..b279eb9546 100644
--- a/packages/backend/src/misc/show-machine-info.ts
+++ b/packages/backend/src/misc/show-machine-info.ts
@@ -4,15 +4,11 @@
*/
import * as os from 'node:os';
-import sysUtils from 'systeminformation';
import type Logger from '@/logger.js';
export async function showMachineInfo(parentLogger: Logger) {
const logger = parentLogger.createSubLogger('machine');
logger.debug(`Hostname: ${os.hostname()}`);
logger.debug(`Platform: ${process.platform} Arch: ${process.arch}`);
- const mem = await sysUtils.mem();
- const totalmem = (mem.total / 1024 / 1024 / 1024).toFixed(1);
- const availmem = (mem.available / 1024 / 1024 / 1024).toFixed(1);
- logger.debug(`CPU: ${os.cpus().length} core MEM: ${totalmem}GB (available: ${availmem}GB)`);
+ logger.debug(`CPU: ${os.cpus().length} core MEM: ${(os.totalmem() / 1024 / 1024 / 1024).toFixed(1)}GB (available: ${(os.freemem() / 1024 / 1024 / 1024).toFixed(1)}GB)`);
}
diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts
index 306fdb41f6..2b3b3fc0ad 100644
--- a/packages/backend/src/queue/QueueProcessorService.ts
+++ b/packages/backend/src/queue/QueueProcessorService.ts
@@ -157,7 +157,7 @@ export class QueueProcessorService implements OnApplicationShutdown {
}
let Sentry: typeof import('@sentry/node') | undefined;
- if (Sentry != null) {
+ if (this.config.sentryForBackend) {
import('@sentry/node').then((mod) => {
Sentry = mod;
});
diff --git a/packages/backend/src/queue/processors/ExportClipsProcessorService.ts b/packages/backend/src/queue/processors/ExportClipsProcessorService.ts
index 486dc4c01f..be7d4e9e21 100644
--- a/packages/backend/src/queue/processors/ExportClipsProcessorService.ts
+++ b/packages/backend/src/queue/processors/ExportClipsProcessorService.ts
@@ -5,21 +5,20 @@
import * as fs from 'node:fs';
import { Writable } from 'node:stream';
-import { Inject, Injectable, StreamableFile } from '@nestjs/common';
-import { MoreThan } from 'typeorm';
+import { Inject, Injectable } from '@nestjs/common';
import { format as dateFormat } from 'date-fns';
import { DI } from '@/di-symbols.js';
-import type { ClipNotesRepository, ClipsRepository, MiClip, MiClipNote, MiUser, NotesRepository, PollsRepository, UsersRepository } from '@/models/_.js';
+import type { ClipNotesRepository, ClipsRepository, MiClip, MiClipNote, MiUser, PollsRepository, UsersRepository } from '@/models/_.js';
import type Logger from '@/logger.js';
import { DriveService } from '@/core/DriveService.js';
import { createTemp } from '@/misc/create-temp.js';
import type { MiPoll } from '@/models/Poll.js';
import type { MiNote } from '@/models/Note.js';
import { bindThis } from '@/decorators.js';
-import { DriveFileEntityService } from '@/core/entities/DriveFileEntityService.js';
-import { Packed } from '@/misc/json-schema.js';
import { IdService } from '@/core/IdService.js';
import { NotificationService } from '@/core/NotificationService.js';
+import { QueryService } from '@/core/QueryService.js';
+import { shouldHideNoteByTime } from '@/misc/should-hide-note-by-time.js';
import { QueueLoggerService } from '../QueueLoggerService.js';
import type * as Bull from 'bullmq';
import type { DbJobDataWithUser } from '../types.js';
@@ -43,6 +42,7 @@ export class ExportClipsProcessorService {
private driveService: DriveService,
private queueLoggerService: QueueLoggerService,
+ private queryService: QueryService,
private idService: IdService,
private notificationService: NotificationService,
) {
@@ -100,16 +100,16 @@ export class ExportClipsProcessorService {
});
while (true) {
- const clips = await this.clipsRepository.find({
- where: {
- userId: user.id,
- ...(cursor ? { id: MoreThan(cursor) } : {}),
- },
- take: 100,
- order: {
- id: 1,
- },
- });
+ const query = this.clipsRepository.createQueryBuilder('clip')
+ .where('clip.userId = :userId', { userId: user.id })
+ .orderBy('clip.id', 'ASC')
+ .take(100);
+
+ if (cursor) {
+ query.andWhere('clip.id > :cursor', { cursor });
+ }
+
+ const clips = await query.getMany();
if (clips.length === 0) {
job.updateProgress(100);
@@ -124,7 +124,7 @@ export class ExportClipsProcessorService {
const isFirst = exportedClipsCount === 0;
await writer.write(isFirst ? content : ',\n' + content);
- await this.processClipNotes(writer, clip.id);
+ await this.processClipNotes(writer, clip.id, user.id);
await writer.write(']}');
exportedClipsCount++;
@@ -134,22 +134,25 @@ export class ExportClipsProcessorService {
}
}
- async processClipNotes(writer: WritableStreamDefaultWriter, clipId: string): Promise {
+ async processClipNotes(writer: WritableStreamDefaultWriter, clipId: string, userId: string): Promise {
let exportedClipNotesCount = 0;
let cursor: MiClipNote['id'] | null = null;
while (true) {
- const clipNotes = await this.clipNotesRepository.find({
- where: {
- clipId,
- ...(cursor ? { id: MoreThan(cursor) } : {}),
- },
- take: 100,
- order: {
- id: 1,
- },
- relations: ['note', 'note.user'],
- }) as (MiClipNote & { note: MiNote & { user: MiUser } })[];
+ const query = this.clipNotesRepository.createQueryBuilder('clipNote')
+ .leftJoinAndSelect('clipNote.note', 'note')
+ .leftJoinAndSelect('note.user', 'user')
+ .where('clipNote.clipId = :clipId', { clipId })
+ .orderBy('clipNote.id', 'ASC')
+ .take(100);
+
+ if (cursor) {
+ query.andWhere('clipNote.id > :cursor', { cursor });
+ }
+
+ this.queryService.generateVisibilityQuery(query, { id: userId });
+
+ const clipNotes = await query.getMany() as (MiClipNote & { note: MiNote & { user: MiUser } })[];
if (clipNotes.length === 0) {
break;
@@ -158,6 +161,11 @@ export class ExportClipsProcessorService {
cursor = clipNotes.at(-1)?.id ?? null;
for (const clipNote of clipNotes) {
+ const noteCreatedAt = this.idService.parse(clipNote.note.id).date;
+ if (shouldHideNoteByTime(clipNote.note.user.makeNotesHiddenBefore, noteCreatedAt)) {
+ continue;
+ }
+
let poll: MiPoll | undefined;
if (clipNote.note.hasPoll) {
poll = await this.pollsRepository.findOneByOrFail({ noteId: clipNote.note.id });
diff --git a/packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts b/packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts
index 7918c8ccb5..87a8ded307 100644
--- a/packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts
+++ b/packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts
@@ -5,7 +5,6 @@
import * as fs from 'node:fs';
import { Inject, Injectable } from '@nestjs/common';
-import { MoreThan } from 'typeorm';
import { format as dateFormat } from 'date-fns';
import { DI } from '@/di-symbols.js';
import type { MiNoteFavorite, NoteFavoritesRepository, PollsRepository, MiUser, UsersRepository } from '@/models/_.js';
@@ -17,6 +16,8 @@ import type { MiNote } from '@/models/Note.js';
import { bindThis } from '@/decorators.js';
import { IdService } from '@/core/IdService.js';
import { NotificationService } from '@/core/NotificationService.js';
+import { QueryService } from '@/core/QueryService.js';
+import { shouldHideNoteByTime } from '@/misc/should-hide-note-by-time.js';
import { QueueLoggerService } from '../QueueLoggerService.js';
import type * as Bull from 'bullmq';
import type { DbJobDataWithUser } from '../types.js';
@@ -37,6 +38,7 @@ export class ExportFavoritesProcessorService {
private driveService: DriveService,
private queueLoggerService: QueueLoggerService,
+ private queryService: QueryService,
private idService: IdService,
private notificationService: NotificationService,
) {
@@ -83,17 +85,20 @@ export class ExportFavoritesProcessorService {
});
while (true) {
- const favorites = await this.noteFavoritesRepository.find({
- where: {
- userId: user.id,
- ...(cursor ? { id: MoreThan(cursor) } : {}),
- },
- take: 100,
- order: {
- id: 1,
- },
- relations: ['note', 'note.user'],
- }) as (MiNoteFavorite & { note: MiNote & { user: MiUser } })[];
+ const query = this.noteFavoritesRepository.createQueryBuilder('favorite')
+ .leftJoinAndSelect('favorite.note', 'note')
+ .leftJoinAndSelect('note.user', 'user')
+ .where('favorite.userId = :userId', { userId: user.id })
+ .orderBy('favorite.id', 'ASC')
+ .take(100);
+
+ if (cursor) {
+ query.andWhere('favorite.id > :cursor', { cursor });
+ }
+
+ this.queryService.generateVisibilityQuery(query, { id: user.id });
+
+ const favorites = await query.getMany() as (MiNoteFavorite & { note: MiNote & { user: MiUser } })[];
if (favorites.length === 0) {
job.updateProgress(100);
@@ -103,6 +108,11 @@ export class ExportFavoritesProcessorService {
cursor = favorites.at(-1)?.id ?? null;
for (const favorite of favorites) {
+ const noteCreatedAt = this.idService.parse(favorite.note.id).date;
+ if (shouldHideNoteByTime(favorite.note.user.makeNotesHiddenBefore, noteCreatedAt)) {
+ continue;
+ }
+
let poll: MiPoll | undefined;
if (favorite.note.hasPoll) {
poll = await this.pollsRepository.findOneByOrFail({ noteId: favorite.note.id });
diff --git a/packages/backend/src/server/ServerModule.ts b/packages/backend/src/server/ServerModule.ts
index 0223650329..8259a2a9e4 100644
--- a/packages/backend/src/server/ServerModule.ts
+++ b/packages/backend/src/server/ServerModule.ts
@@ -13,7 +13,6 @@ import { NodeinfoServerService } from './NodeinfoServerService.js';
import { ServerService } from './ServerService.js';
import { WellKnownServerService } from './WellKnownServerService.js';
import { GetterService } from './api/GetterService.js';
-import { ChannelsService } from './api/stream/ChannelsService.js';
import { ActivityPubServerService } from './ActivityPubServerService.js';
import { ApiLoggerService } from './api/ApiLoggerService.js';
import { ApiServerService } from './api/ApiServerService.js';
@@ -25,29 +24,31 @@ import { SignupApiService } from './api/SignupApiService.js';
import { StreamingApiServerService } from './api/StreamingApiServerService.js';
import { OpenApiServerService } from './api/openapi/OpenApiServerService.js';
import { ClientServerService } from './web/ClientServerService.js';
+import { HtmlTemplateService } from './web/HtmlTemplateService.js';
import { FeedService } from './web/FeedService.js';
import { UrlPreviewService } from './web/UrlPreviewService.js';
import { ClientLoggerService } from './web/ClientLoggerService.js';
import { OAuth2ProviderService } from './oauth/OAuth2ProviderService.js';
-import { MainChannelService } from './api/stream/channels/main.js';
-import { AdminChannelService } from './api/stream/channels/admin.js';
-import { AntennaChannelService } from './api/stream/channels/antenna.js';
-import { ChannelChannelService } from './api/stream/channels/channel.js';
-import { DriveChannelService } from './api/stream/channels/drive.js';
-import { GlobalTimelineChannelService } from './api/stream/channels/global-timeline.js';
-import { HashtagChannelService } from './api/stream/channels/hashtag.js';
-import { HomeTimelineChannelService } from './api/stream/channels/home-timeline.js';
-import { HybridTimelineChannelService } from './api/stream/channels/hybrid-timeline.js';
-import { LocalTimelineChannelService } from './api/stream/channels/local-timeline.js';
-import { QueueStatsChannelService } from './api/stream/channels/queue-stats.js';
-import { ServerStatsChannelService } from './api/stream/channels/server-stats.js';
-import { UserListChannelService } from './api/stream/channels/user-list.js';
-import { RoleTimelineChannelService } from './api/stream/channels/role-timeline.js';
-import { ChatUserChannelService } from './api/stream/channels/chat-user.js';
-import { ChatRoomChannelService } from './api/stream/channels/chat-room.js';
-import { ReversiChannelService } from './api/stream/channels/reversi.js';
-import { ReversiGameChannelService } from './api/stream/channels/reversi-game.js';
+import MainStreamConnection from '@/server/api/stream/Connection.js';
+import { MainChannel } from './api/stream/channels/main.js';
+import { AdminChannel } from './api/stream/channels/admin.js';
+import { AntennaChannel } from './api/stream/channels/antenna.js';
+import { ChannelChannel } from './api/stream/channels/channel.js';
+import { DriveChannel } from './api/stream/channels/drive.js';
+import { GlobalTimelineChannel } from './api/stream/channels/global-timeline.js';
+import { HashtagChannel } from './api/stream/channels/hashtag.js';
+import { HomeTimelineChannel } from './api/stream/channels/home-timeline.js';
+import { HybridTimelineChannel } from './api/stream/channels/hybrid-timeline.js';
+import { LocalTimelineChannel } from './api/stream/channels/local-timeline.js';
+import { QueueStatsChannel } from './api/stream/channels/queue-stats.js';
+import { ServerStatsChannel } from './api/stream/channels/server-stats.js';
+import { UserListChannel } from './api/stream/channels/user-list.js';
+import { RoleTimelineChannel } from './api/stream/channels/role-timeline.js';
+import { ChatUserChannel } from './api/stream/channels/chat-user.js';
+import { ChatRoomChannel } from './api/stream/channels/chat-room.js';
+import { ReversiChannel } from './api/stream/channels/reversi.js';
+import { ReversiGameChannel } from './api/stream/channels/reversi-game.js';
import { SigninWithPasskeyApiService } from './api/SigninWithPasskeyApiService.js';
@Module({
@@ -58,6 +59,7 @@ import { SigninWithPasskeyApiService } from './api/SigninWithPasskeyApiService.j
providers: [
ClientServerService,
ClientLoggerService,
+ HtmlTemplateService,
FeedService,
HealthServerService,
UrlPreviewService,
@@ -67,7 +69,7 @@ import { SigninWithPasskeyApiService } from './api/SigninWithPasskeyApiService.j
ServerService,
WellKnownServerService,
GetterService,
- ChannelsService,
+ MainStreamConnection,
ApiCallService,
ApiLoggerService,
ApiServerService,
@@ -78,24 +80,24 @@ import { SigninWithPasskeyApiService } from './api/SigninWithPasskeyApiService.j
SigninService,
SignupApiService,
StreamingApiServerService,
- MainChannelService,
- AdminChannelService,
- AntennaChannelService,
- ChannelChannelService,
- DriveChannelService,
- GlobalTimelineChannelService,
- HashtagChannelService,
- RoleTimelineChannelService,
- ChatUserChannelService,
- ChatRoomChannelService,
- ReversiChannelService,
- ReversiGameChannelService,
- HomeTimelineChannelService,
- HybridTimelineChannelService,
- LocalTimelineChannelService,
- QueueStatsChannelService,
- ServerStatsChannelService,
- UserListChannelService,
+ MainChannel,
+ AdminChannel,
+ AntennaChannel,
+ ChannelChannel,
+ DriveChannel,
+ GlobalTimelineChannel,
+ HashtagChannel,
+ RoleTimelineChannel,
+ ChatUserChannel,
+ ChatRoomChannel,
+ ReversiChannel,
+ ReversiGameChannel,
+ HomeTimelineChannel,
+ HybridTimelineChannel,
+ LocalTimelineChannel,
+ QueueStatsChannel,
+ ServerStatsChannel,
+ UserListChannel,
OpenApiServerService,
OAuth2ProviderService,
],
diff --git a/packages/backend/src/server/ServerService.ts b/packages/backend/src/server/ServerService.ts
index 1286b4dad6..ef9ac81f95 100644
--- a/packages/backend/src/server/ServerService.ts
+++ b/packages/backend/src/server/ServerService.ts
@@ -75,7 +75,7 @@ export class ServerService implements OnApplicationShutdown {
@bindThis
public async launch(): Promise {
const fastify = Fastify({
- trustProxy: this.config.trustProxy ?? true,
+ trustProxy: this.config.trustProxy,
logger: false,
});
this.#fastify = fastify;
diff --git a/packages/backend/src/server/api/ApiCallService.ts b/packages/backend/src/server/api/ApiCallService.ts
index 27c79ab438..8bae46d9fb 100644
--- a/packages/backend/src/server/api/ApiCallService.ts
+++ b/packages/backend/src/server/api/ApiCallService.ts
@@ -313,11 +313,14 @@ export class ApiCallService implements OnApplicationShutdown {
}
if (ep.meta.limit) {
- // koa will automatically load the `X-Forwarded-For` header if `proxy: true` is configured in the app.
- let limitActor: string;
+ let limitActor: string | null = null;
if (user) {
limitActor = user.id;
- } else {
+ } else if (this.config.enableIpRateLimit) {
+ if (process.env.NODE_ENV === 'production' && (request.ip === '::1' || request.ip === '127.0.0.1')) {
+ this.logger.warn('Recieved API request from localhost IP address for rate limiting in production environment. This is likely due to an improper trustProxy setting in the config file.');
+ }
+
limitActor = getIpHash(request.ip);
}
@@ -330,7 +333,7 @@ export class ApiCallService implements OnApplicationShutdown {
// TODO: 毎リクエスト計算するのもあれだしキャッシュしたい
const factor = user ? (await this.roleService.getUserPolicies(user.id)).rateLimitFactor : 1;
- if (factor > 0) {
+ if (limitActor != null && factor > 0) {
// Rate limit
const rateLimit = await this.rateLimiterService.limit(limit as IEndpointMeta['limit'] & { key: NonNullable }, limitActor, factor);
if (rateLimit != null) {
diff --git a/packages/backend/src/server/api/SigninApiService.ts b/packages/backend/src/server/api/SigninApiService.ts
index 3e889372d8..00e8828242 100644
--- a/packages/backend/src/server/api/SigninApiService.ts
+++ b/packages/backend/src/server/api/SigninApiService.ts
@@ -15,6 +15,7 @@ import type {
UserSecurityKeysRepository,
UsersRepository,
} from '@/models/_.js';
+import type Logger from '@/logger.js';
import type { Config } from '@/config.js';
import { getIpHash } from '@/misc/get-ip-hash.js';
import type { MiLocalUser } from '@/models/User.js';
@@ -23,6 +24,7 @@ import { bindThis } from '@/decorators.js';
import { WebAuthnService } from '@/core/WebAuthnService.js';
import { UserAuthService } from '@/core/UserAuthService.js';
import { CaptchaService } from '@/core/CaptchaService.js';
+import { LoggerService } from '@/core/LoggerService.js';
import { FastifyReplyError } from '@/misc/fastify-reply-error.js';
import { RateLimiterService } from './RateLimiterService.js';
import { SigninService } from './SigninService.js';
@@ -31,6 +33,8 @@ import type { FastifyReply, FastifyRequest } from 'fastify';
@Injectable()
export class SigninApiService {
+ private logger: Logger;
+
constructor(
@Inject(DI.config)
private config: Config,
@@ -50,6 +54,7 @@ export class SigninApiService {
@Inject(DI.signinsRepository)
private signinsRepository: SigninsRepository,
+ private loggerService: LoggerService,
private idService: IdService,
private rateLimiterService: RateLimiterService,
private signinService: SigninService,
@@ -57,6 +62,7 @@ export class SigninApiService {
private webAuthnService: WebAuthnService,
private captchaService: CaptchaService,
) {
+ this.logger = this.loggerService.getLogger('Signin');
}
@bindThis
@@ -90,16 +96,21 @@ export class SigninApiService {
}
// not more than 1 attempt per second and not more than 10 attempts per hour
- const rateLimit = await this.rateLimiterService.limit({ key: 'signin', duration: 60 * 60 * 1000, max: 10, minInterval: 1000 }, getIpHash(request.ip));
- if (rateLimit != null) {
- reply.code(429);
- return {
- error: {
- message: 'Too many failed attempts to sign in. Try again later.',
- code: 'TOO_MANY_AUTHENTICATION_FAILURES',
- id: '22d05606-fbcf-421a-a2db-b32610dcfd1b',
- },
- };
+ if (this.config.enableIpRateLimit) {
+ if (process.env.NODE_ENV === 'production' && (request.ip === '::1' || request.ip === '127.0.0.1')) {
+ this.logger.warn('Recieved signin request from localhost IP address for rate limiting in production environment. This is likely due to an improper trustProxy setting in the config file.');
+ }
+ const rateLimit = await this.rateLimiterService.limit({ key: 'signin', duration: 60 * 60 * 1000, max: 10, minInterval: 1000 }, getIpHash(request.ip));
+ if (rateLimit != null) {
+ reply.code(429);
+ return {
+ error: {
+ message: 'Too many failed attempts to sign in. Try again later.',
+ code: 'TOO_MANY_AUTHENTICATION_FAILURES',
+ id: '22d05606-fbcf-421a-a2db-b32610dcfd1b',
+ },
+ };
+ }
}
if (typeof username !== 'string') {
diff --git a/packages/backend/src/server/api/SigninWithPasskeyApiService.ts b/packages/backend/src/server/api/SigninWithPasskeyApiService.ts
index 9ba23c54e2..920f9d0b3a 100644
--- a/packages/backend/src/server/api/SigninWithPasskeyApiService.ts
+++ b/packages/backend/src/server/api/SigninWithPasskeyApiService.ts
@@ -84,19 +84,25 @@ export class SigninWithPasskeyApiService {
return error(status ?? 500, failure ?? { id: '4e30e80c-e338-45a0-8c8f-44455efa3b76' });
};
- try {
+ if (this.config.enableIpRateLimit) {
+ if (process.env.NODE_ENV === 'production' && (request.ip === '::1' || request.ip === '127.0.0.1')) {
+ this.logger.warn('Recieved signin with passkey request from localhost IP address for rate limiting in production environment. This is likely due to an improper trustProxy setting in the config file.');
+ }
+
+ try {
// Not more than 1 API call per 250ms and not more than 100 attempts per 30min
// NOTE: 1 Sign-in require 2 API calls
- await this.rateLimiterService.limit({ key: 'signin-with-passkey', duration: 60 * 30 * 1000, max: 200, minInterval: 250 }, getIpHash(request.ip));
- } catch (err) {
- reply.code(429);
- return {
- error: {
- message: 'Too many failed attempts to sign in. Try again later.',
- code: 'TOO_MANY_AUTHENTICATION_FAILURES',
- id: '22d05606-fbcf-421a-a2db-b32610dcfd1b',
- },
- };
+ await this.rateLimiterService.limit({ key: 'signin-with-passkey', duration: 60 * 30 * 1000, max: 200, minInterval: 250 }, getIpHash(request.ip));
+ } catch (err) {
+ reply.code(429);
+ return {
+ error: {
+ message: 'Too many failed attempts to sign in. Try again later.',
+ code: 'TOO_MANY_AUTHENTICATION_FAILURES',
+ id: '22d05606-fbcf-421a-a2db-b32610dcfd1b',
+ },
+ };
+ }
}
// Initiate Passkey Auth challenge with context
diff --git a/packages/backend/src/server/api/StreamingApiServerService.ts b/packages/backend/src/server/api/StreamingApiServerService.ts
index 21f2f0b7e2..359c361ed4 100644
--- a/packages/backend/src/server/api/StreamingApiServerService.ts
+++ b/packages/backend/src/server/api/StreamingApiServerService.ts
@@ -8,18 +8,14 @@ import { Inject, Injectable } from '@nestjs/common';
import * as Redis from 'ioredis';
import * as WebSocket from 'ws';
import { DI } from '@/di-symbols.js';
-import type { UsersRepository, MiAccessToken } from '@/models/_.js';
-import { NotificationService } from '@/core/NotificationService.js';
+import type { MiAccessToken } from '@/models/_.js';
import { bindThis } from '@/decorators.js';
-import { CacheService } from '@/core/CacheService.js';
import { MiLocalUser } from '@/models/User.js';
import { UserService } from '@/core/UserService.js';
-import { ChannelFollowingService } from '@/core/ChannelFollowingService.js';
-import { ChannelMutingService } from '@/core/ChannelMutingService.js';
import { AuthenticateService, AuthenticationError } from './AuthenticateService.js';
-import MainStreamConnection from './stream/Connection.js';
-import { ChannelsService } from './stream/ChannelsService.js';
+import MainStreamConnection, { ConnectionRequest } from './stream/Connection.js';
import type * as http from 'node:http';
+import { ContextIdFactory, ModuleRef } from '@nestjs/core';
@Injectable()
export class StreamingApiServerService {
@@ -31,16 +27,9 @@ export class StreamingApiServerService {
@Inject(DI.redisForSub)
private redisForSub: Redis.Redis,
- @Inject(DI.usersRepository)
- private usersRepository: UsersRepository,
-
- private cacheService: CacheService,
+ private moduleRef: ModuleRef,
private authenticateService: AuthenticateService,
- private channelsService: ChannelsService,
- private notificationService: NotificationService,
private usersService: UserService,
- private channelFollowingService: ChannelFollowingService,
- private channelMutingService: ChannelMutingService,
) {
}
@@ -94,14 +83,12 @@ export class StreamingApiServerService {
return;
}
- const stream = new MainStreamConnection(
- this.channelsService,
- this.notificationService,
- this.cacheService,
- this.channelFollowingService,
- this.channelMutingService,
- user, app,
- );
+ const contextId = ContextIdFactory.create();
+ this.moduleRef.registerRequestByContextId({
+ user,
+ token: app,
+ }, contextId);
+ const stream = await this.moduleRef.create(MainStreamConnection, contextId);
await stream.init();
diff --git a/packages/backend/src/server/api/endpoints/admin/queue/deliver-delayed.ts b/packages/backend/src/server/api/endpoints/admin/queue/deliver-delayed.ts
index f3e440b4cb..86158d7e22 100644
--- a/packages/backend/src/server/api/endpoints/admin/queue/deliver-delayed.ts
+++ b/packages/backend/src/server/api/endpoints/admin/queue/deliver-delayed.ts
@@ -52,18 +52,14 @@ export default class extends Endpoint { // eslint-
super(meta, paramDef, async (ps, me) => {
const jobs = await this.deliverQueue.getJobs(['delayed']);
- const res = [] as [string, number][];
+ const counts = new Map();
for (const job of jobs) {
const host = new URL(job.data.to).host;
- if (res.find(x => x[0] === host)) {
- res.find(x => x[0] === host)![1]++;
- } else {
- res.push([host, 1]);
- }
+ counts.set(host, (counts.get(host) ?? 0) + 1);
}
- res.sort((a, b) => b[1] - a[1]);
+ const res = [...counts.entries()].sort((a, b) => b[1] - a[1]);
return res;
});
diff --git a/packages/backend/src/server/api/endpoints/admin/queue/inbox-delayed.ts b/packages/backend/src/server/api/endpoints/admin/queue/inbox-delayed.ts
index e7589cba81..ad6a823b8f 100644
--- a/packages/backend/src/server/api/endpoints/admin/queue/inbox-delayed.ts
+++ b/packages/backend/src/server/api/endpoints/admin/queue/inbox-delayed.ts
@@ -52,18 +52,14 @@ export default class extends Endpoint { // eslint-
super(meta, paramDef, async (ps, me) => {
const jobs = await this.inboxQueue.getJobs(['delayed']);
- const res = [] as [string, number][];
+ const counts = new Map();
for (const job of jobs) {
const host = new URL(job.data.signature.keyId).host;
- if (res.find(x => x[0] === host)) {
- res.find(x => x[0] === host)![1]++;
- } else {
- res.push([host, 1]);
- }
+ counts.set(host, (counts.get(host) ?? 0) + 1);
}
- res.sort((a, b) => b[1] - a[1]);
+ const res = [...counts.entries()].sort((a, b) => b[1] - a[1]);
return res;
});
diff --git a/packages/backend/src/server/api/endpoints/admin/server-info.ts b/packages/backend/src/server/api/endpoints/admin/server-info.ts
index 80b6a4d32e..603be514c8 100644
--- a/packages/backend/src/server/api/endpoints/admin/server-info.ts
+++ b/packages/backend/src/server/api/endpoints/admin/server-info.ts
@@ -4,7 +4,6 @@
*/
import * as os from 'node:os';
-import si from 'systeminformation';
import { Inject, Injectable } from '@nestjs/common';
import { DataSource } from 'typeorm';
import * as Redis from 'ioredis';
@@ -112,6 +111,8 @@ export default class extends Endpoint { // eslint-
) {
super(meta, paramDef, async () => {
+ const si = await import('systeminformation');
+
const memStats = await si.mem();
const fsStats = await si.fsSize();
const netInterface = await si.networkInterfaceDefault();
diff --git a/packages/backend/src/server/api/endpoints/ap/get.ts b/packages/backend/src/server/api/endpoints/ap/get.ts
index 14286bc23e..ff03fce72b 100644
--- a/packages/backend/src/server/api/endpoints/ap/get.ts
+++ b/packages/backend/src/server/api/endpoints/ap/get.ts
@@ -43,7 +43,7 @@ export default class extends Endpoint { // eslint-
private apResolverService: ApResolverService,
) {
super(meta, paramDef, async (ps, me) => {
- const resolver = this.apResolverService.createResolver();
+ const resolver = await this.apResolverService.createResolver();
const object = await resolver.resolve(ps.uri);
return object;
});
diff --git a/packages/backend/src/server/api/endpoints/ap/show.ts b/packages/backend/src/server/api/endpoints/ap/show.ts
index fe48e7497a..140b054fcc 100644
--- a/packages/backend/src/server/api/endpoints/ap/show.ts
+++ b/packages/backend/src/server/api/endpoints/ap/show.ts
@@ -148,7 +148,7 @@ export default class extends Endpoint { // eslint-
if (this.utilityService.isSelfHost(host)) return null;
// リモートから一旦オブジェクトフェッチ
- const resolver = this.apResolverService.createResolver();
+ const resolver = await this.apResolverService.createResolver();
// allow ap/show exclusively to lookup URLs that are cross-origin or non-canonical (like https://alice.example.com/@bob@bob.example.com -> https://bob.example.com/@bob)
const object = await resolver.resolve(uri, FetchAllowSoftFailMask.CrossOrigin | FetchAllowSoftFailMask.NonCanonicalId).catch((err) => {
if (err instanceof IdentifiableError) {
diff --git a/packages/backend/src/server/api/endpoints/server-info.ts b/packages/backend/src/server/api/endpoints/server-info.ts
index 8301c85f2e..0e8dc73ad9 100644
--- a/packages/backend/src/server/api/endpoints/server-info.ts
+++ b/packages/backend/src/server/api/endpoints/server-info.ts
@@ -4,7 +4,6 @@
*/
import * as os from 'node:os';
-import si from 'systeminformation';
import { Inject, Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
import { MiMeta } from '@/models/_.js';
@@ -93,6 +92,8 @@ export default class extends Endpoint { // eslint-
},
};
+ const si = await import('systeminformation');
+
const memStats = await si.mem();
const fsStats = await si.fsSize();
diff --git a/packages/backend/src/server/api/stream/ChannelsService.ts b/packages/backend/src/server/api/stream/ChannelsService.ts
index c0ef589dea..63ad9281b2 100644
--- a/packages/backend/src/server/api/stream/ChannelsService.ts
+++ b/packages/backend/src/server/api/stream/ChannelsService.ts
@@ -4,72 +4,54 @@
*/
import { Injectable } from '@nestjs/common';
+import { HybridTimelineChannel } from './channels/hybrid-timeline.js';
+import { LocalTimelineChannel } from './channels/local-timeline.js';
+import { HomeTimelineChannel } from './channels/home-timeline.js';
+import { GlobalTimelineChannel } from './channels/global-timeline.js';
+import { MainChannel } from './channels/main.js';
+import { ChannelChannel } from './channels/channel.js';
+import { AdminChannel } from './channels/admin.js';
+import { ServerStatsChannel } from './channels/server-stats.js';
+import { QueueStatsChannel } from './channels/queue-stats.js';
+import { UserListChannel } from './channels/user-list.js';
+import { AntennaChannel } from './channels/antenna.js';
+import { DriveChannel } from './channels/drive.js';
+import { HashtagChannel } from './channels/hashtag.js';
+import { RoleTimelineChannel } from './channels/role-timeline.js';
+import { ChatUserChannel } from './channels/chat-user.js';
+import { ChatRoomChannel } from './channels/chat-room.js';
+import { ReversiChannel } from './channels/reversi.js';
+import { ReversiGameChannel } from './channels/reversi-game.js';
+import type { ChannelConstructor } from './channel.js';
import { bindThis } from '@/decorators.js';
-import { HybridTimelineChannelService } from './channels/hybrid-timeline.js';
-import { LocalTimelineChannelService } from './channels/local-timeline.js';
-import { HomeTimelineChannelService } from './channels/home-timeline.js';
-import { GlobalTimelineChannelService } from './channels/global-timeline.js';
-import { MainChannelService } from './channels/main.js';
-import { ChannelChannelService } from './channels/channel.js';
-import { AdminChannelService } from './channels/admin.js';
-import { ServerStatsChannelService } from './channels/server-stats.js';
-import { QueueStatsChannelService } from './channels/queue-stats.js';
-import { UserListChannelService } from './channels/user-list.js';
-import { AntennaChannelService } from './channels/antenna.js';
-import { DriveChannelService } from './channels/drive.js';
-import { HashtagChannelService } from './channels/hashtag.js';
-import { RoleTimelineChannelService } from './channels/role-timeline.js';
-import { ChatUserChannelService } from './channels/chat-user.js';
-import { ChatRoomChannelService } from './channels/chat-room.js';
-import { ReversiChannelService } from './channels/reversi.js';
-import { ReversiGameChannelService } from './channels/reversi-game.js';
-import { type MiChannelService } from './channel.js';
@Injectable()
export class ChannelsService {
constructor(
- private mainChannelService: MainChannelService,
- private homeTimelineChannelService: HomeTimelineChannelService,
- private localTimelineChannelService: LocalTimelineChannelService,
- private hybridTimelineChannelService: HybridTimelineChannelService,
- private globalTimelineChannelService: GlobalTimelineChannelService,
- private userListChannelService: UserListChannelService,
- private hashtagChannelService: HashtagChannelService,
- private roleTimelineChannelService: RoleTimelineChannelService,
- private antennaChannelService: AntennaChannelService,
- private channelChannelService: ChannelChannelService,
- private driveChannelService: DriveChannelService,
- private serverStatsChannelService: ServerStatsChannelService,
- private queueStatsChannelService: QueueStatsChannelService,
- private adminChannelService: AdminChannelService,
- private chatUserChannelService: ChatUserChannelService,
- private chatRoomChannelService: ChatRoomChannelService,
- private reversiChannelService: ReversiChannelService,
- private reversiGameChannelService: ReversiGameChannelService,
) {
}
@bindThis
- public getChannelService(name: string): MiChannelService {
+ public getChannelConstructor(name: string): ChannelConstructor {
switch (name) {
- case 'main': return this.mainChannelService;
- case 'homeTimeline': return this.homeTimelineChannelService;
- case 'localTimeline': return this.localTimelineChannelService;
- case 'hybridTimeline': return this.hybridTimelineChannelService;
- case 'globalTimeline': return this.globalTimelineChannelService;
- case 'userList': return this.userListChannelService;
- case 'hashtag': return this.hashtagChannelService;
- case 'roleTimeline': return this.roleTimelineChannelService;
- case 'antenna': return this.antennaChannelService;
- case 'channel': return this.channelChannelService;
- case 'drive': return this.driveChannelService;
- case 'serverStats': return this.serverStatsChannelService;
- case 'queueStats': return this.queueStatsChannelService;
- case 'admin': return this.adminChannelService;
- case 'chatUser': return this.chatUserChannelService;
- case 'chatRoom': return this.chatRoomChannelService;
- case 'reversi': return this.reversiChannelService;
- case 'reversiGame': return this.reversiGameChannelService;
+ case 'main': return MainChannel;
+ case 'homeTimeline': return HomeTimelineChannel;
+ case 'localTimeline': return LocalTimelineChannel;
+ case 'hybridTimeline': return HybridTimelineChannel;
+ case 'globalTimeline': return GlobalTimelineChannel;
+ case 'userList': return UserListChannel;
+ case 'hashtag': return HashtagChannel;
+ case 'roleTimeline': return RoleTimelineChannel;
+ case 'antenna': return AntennaChannel;
+ case 'channel': return ChannelChannel;
+ case 'drive': return DriveChannel;
+ case 'serverStats': return ServerStatsChannel;
+ case 'queueStats': return QueueStatsChannel;
+ case 'admin': return AdminChannel;
+ case 'chatUser': return ChatUserChannel;
+ case 'chatRoom': return ChatRoomChannel;
+ case 'reversi': return ReversiChannel;
+ case 'reversiGame': return ReversiGameChannel;
default:
throw new Error(`no such channel: ${name}`);
diff --git a/packages/backend/src/server/api/stream/Connection.ts b/packages/backend/src/server/api/stream/Connection.ts
index 222086c960..d19a223a21 100644
--- a/packages/backend/src/server/api/stream/Connection.ts
+++ b/packages/backend/src/server/api/stream/Connection.ts
@@ -6,19 +6,39 @@
import * as WebSocket from 'ws';
import type { MiUser } from '@/models/User.js';
import type { MiAccessToken } from '@/models/AccessToken.js';
-import type { Packed } from '@/misc/json-schema.js';
-import type { NotificationService } from '@/core/NotificationService.js';
+import { NotificationService } from '@/core/NotificationService.js';
import { bindThis } from '@/decorators.js';
import { CacheService } from '@/core/CacheService.js';
import { MiFollowing, MiUserProfile } from '@/models/_.js';
import type { GlobalEvents, StreamEventEmitter } from '@/core/GlobalEventService.js';
import { ChannelFollowingService } from '@/core/ChannelFollowingService.js';
import { ChannelMutingService } from '@/core/ChannelMutingService.js';
-import { isJsonObject } from '@/misc/json-value.js';
import type { JsonObject, JsonValue } from '@/misc/json-value.js';
-import type { ChannelsService } from './ChannelsService.js';
+import { isJsonObject } from '@/misc/json-value.js';
import type { EventEmitter } from 'events';
import type Channel from './channel.js';
+import type { ChannelConstructor } from './channel.js';
+import type { ChannelRequest } from './channel.js';
+import { ContextIdFactory, ModuleRef, REQUEST } from '@nestjs/core';
+import { Inject, Injectable, Scope } from '@nestjs/common';
+import { MainChannel } from '@/server/api/stream/channels/main.js';
+import { HomeTimelineChannel } from '@/server/api/stream/channels/home-timeline.js';
+import { LocalTimelineChannel } from '@/server/api/stream/channels/local-timeline.js';
+import { HybridTimelineChannel } from '@/server/api/stream/channels/hybrid-timeline.js';
+import { GlobalTimelineChannel } from '@/server/api/stream/channels/global-timeline.js';
+import { UserListChannel } from '@/server/api/stream/channels/user-list.js';
+import { HashtagChannel } from '@/server/api/stream/channels/hashtag.js';
+import { RoleTimelineChannel } from '@/server/api/stream/channels/role-timeline.js';
+import { AntennaChannel } from '@/server/api/stream/channels/antenna.js';
+import { ChannelChannel } from '@/server/api/stream/channels/channel.js';
+import { DriveChannel } from '@/server/api/stream/channels/drive.js';
+import { ServerStatsChannel } from '@/server/api/stream/channels/server-stats.js';
+import { QueueStatsChannel } from '@/server/api/stream/channels/queue-stats.js';
+import { AdminChannel } from '@/server/api/stream/channels/admin.js';
+import { ChatUserChannel } from '@/server/api/stream/channels/chat-user.js';
+import { ChatRoomChannel } from '@/server/api/stream/channels/chat-room.js';
+import { ReversiChannel } from '@/server/api/stream/channels/reversi.js';
+import { ReversiGameChannel } from '@/server/api/stream/channels/reversi-game.js';
const MAX_CHANNELS_PER_CONNECTION = 32;
@@ -26,6 +46,7 @@ const MAX_CHANNELS_PER_CONNECTION = 32;
* Main stream connection
*/
// eslint-disable-next-line import/no-default-export
+@Injectable({ scope: Scope.TRANSIENT })
export default class Connection {
public user?: MiUser;
public token?: MiAccessToken;
@@ -44,16 +65,16 @@ export default class Connection {
private fetchIntervalId: NodeJS.Timeout | null = null;
constructor(
- private channelsService: ChannelsService,
+ private moduleRef: ModuleRef,
private notificationService: NotificationService,
private cacheService: CacheService,
private channelFollowingService: ChannelFollowingService,
private channelMutingService: ChannelMutingService,
- user: MiUser | null | undefined,
- token: MiAccessToken | null | undefined,
+ @Inject(REQUEST)
+ request: ConnectionRequest,
) {
- if (user) this.user = user;
- if (token) this.token = token;
+ if (request.user) this.user = request.user;
+ if (request.token) this.token = request.token;
}
@bindThis
@@ -232,28 +253,34 @@ export default class Connection {
* チャンネルに接続
*/
@bindThis
- public connectChannel(id: string, params: JsonObject | undefined, channel: string, pong = false) {
+ public async connectChannel(id: string, params: JsonObject | undefined, channel: string, pong = false) {
if (this.channels.length >= MAX_CHANNELS_PER_CONNECTION) {
return;
}
- const channelService = this.channelsService.getChannelService(channel);
+ const channelConstructor = this.getChannelConstructor(channel);
- if (channelService.requireCredential && this.user == null) {
+ if (channelConstructor.requireCredential && this.user == null) {
return;
}
- if (this.token && ((channelService.kind && !this.token.permission.some(p => p === channelService.kind))
- || (!channelService.kind && channelService.requireCredential))) {
+ if (this.token && ((channelConstructor.kind && !this.token.permission.some(p => p === channelConstructor.kind))
+ || (!channelConstructor.kind && channelConstructor.requireCredential))) {
return;
}
// 共有可能チャンネルに接続しようとしていて、かつそのチャンネルに既に接続していたら無意味なので無視
- if (channelService.shouldShare && this.channels.some(c => c.chName === channel)) {
+ if (channelConstructor.shouldShare && this.channels.some(c => c.chName === channel)) {
return;
}
- const ch: Channel = channelService.create(id, this);
+ const contextId = ContextIdFactory.create();
+ this.moduleRef.registerRequestByContextId({
+ id: id,
+ connection: this,
+ }, contextId);
+ const ch: Channel = await this.moduleRef.create(channelConstructor, contextId);
+
this.channels.push(ch);
ch.init(params ?? {});
@@ -264,6 +291,33 @@ export default class Connection {
}
}
+ @bindThis
+ public getChannelConstructor(name: string): ChannelConstructor {
+ switch (name) {
+ case 'main': return MainChannel;
+ case 'homeTimeline': return HomeTimelineChannel;
+ case 'localTimeline': return LocalTimelineChannel;
+ case 'hybridTimeline': return HybridTimelineChannel;
+ case 'globalTimeline': return GlobalTimelineChannel;
+ case 'userList': return UserListChannel;
+ case 'hashtag': return HashtagChannel;
+ case 'roleTimeline': return RoleTimelineChannel;
+ case 'antenna': return AntennaChannel;
+ case 'channel': return ChannelChannel;
+ case 'drive': return DriveChannel;
+ case 'serverStats': return ServerStatsChannel;
+ case 'queueStats': return QueueStatsChannel;
+ case 'admin': return AdminChannel;
+ case 'chatUser': return ChatUserChannel;
+ case 'chatRoom': return ChatRoomChannel;
+ case 'reversi': return ReversiChannel;
+ case 'reversiGame': return ReversiGameChannel;
+
+ default:
+ throw new Error(`no such channel: ${name}`);
+ }
+ }
+
/**
* チャンネルから切断
* @param id チャンネルコネクションID
@@ -306,3 +360,8 @@ export default class Connection {
}
}
}
+
+export interface ConnectionRequest {
+ user: MiUser | null | undefined,
+ token: MiAccessToken | null | undefined,
+}
diff --git a/packages/backend/src/server/api/stream/channel.ts b/packages/backend/src/server/api/stream/channel.ts
index 465ed4238c..86b073414d 100644
--- a/packages/backend/src/server/api/stream/channel.ts
+++ b/packages/backend/src/server/api/stream/channel.ts
@@ -22,7 +22,7 @@ export default abstract class Channel {
public abstract readonly chName: string;
public static readonly shouldShare: boolean;
public static readonly requireCredential: boolean;
- public static readonly kind?: string | null;
+ public static readonly kind: string | null;
protected get user() {
return this.connection.user;
@@ -85,9 +85,9 @@ export default abstract class Channel {
return false;
}
- constructor(id: string, connection: Connection) {
- this.id = id;
- this.connection = connection;
+ constructor(request: ChannelRequest) {
+ this.id = request.id;
+ this.connection = request.connection;
}
public send(payload: { type: string, body: JsonValue }): void;
@@ -111,9 +111,14 @@ export default abstract class Channel {
public onMessage?(type: string, body: JsonValue): void;
}
-export type MiChannelService = {
+export interface ChannelRequest {
+ id: string,
+ connection: Connection,
+}
+
+export interface ChannelConstructor {
+ new(...args: any[]): Channel;
shouldShare: boolean;
requireCredential: T;
kind: T extends true ? string : string | null | undefined;
- create: (id: string, connection: Connection) => Channel;
-};
+}
diff --git a/packages/backend/src/server/api/stream/channels/admin.ts b/packages/backend/src/server/api/stream/channels/admin.ts
index 355d5dba21..821888cca0 100644
--- a/packages/backend/src/server/api/stream/channels/admin.ts
+++ b/packages/backend/src/server/api/stream/channels/admin.ts
@@ -3,17 +3,26 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import { bindThis } from '@/decorators.js';
import type { JsonObject } from '@/misc/json-value.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
+import { REQUEST } from '@nestjs/core';
-class AdminChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class AdminChannel extends Channel {
public readonly chName = 'admin';
public static shouldShare = true;
public static requireCredential = true as const;
public static kind = 'read:admin:stream';
+ constructor(
+ @Inject(REQUEST)
+ request: ChannelRequest,
+ ) {
+ super(request);
+ }
+
@bindThis
public async init(params: JsonObject) {
// Subscribe admin stream
@@ -22,22 +31,3 @@ class AdminChannel extends Channel {
});
}
}
-
-@Injectable()
-export class AdminChannelService implements MiChannelService {
- public readonly shouldShare = AdminChannel.shouldShare;
- public readonly requireCredential = AdminChannel.requireCredential;
- public readonly kind = AdminChannel.kind;
-
- constructor(
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): AdminChannel {
- return new AdminChannel(
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/api/stream/channels/antenna.ts b/packages/backend/src/server/api/stream/channels/antenna.ts
index e08562fdf9..ece9d2c8b1 100644
--- a/packages/backend/src/server/api/stream/channels/antenna.ts
+++ b/packages/backend/src/server/api/stream/channels/antenna.ts
@@ -3,14 +3,16 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
import { bindThis } from '@/decorators.js';
import type { GlobalEvents } from '@/core/GlobalEventService.js';
import type { JsonObject } from '@/misc/json-value.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
+import { REQUEST } from '@nestjs/core';
-class AntennaChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class AntennaChannel extends Channel {
public readonly chName = 'antenna';
public static shouldShare = false;
public static requireCredential = true as const;
@@ -18,12 +20,12 @@ class AntennaChannel extends Channel {
private antennaId: string;
constructor(
- private noteEntityService: NoteEntityService,
+ @Inject(REQUEST)
+ request: ChannelRequest,
- id: string,
- connection: Channel['connection'],
+ private noteEntityService: NoteEntityService,
) {
- super(id, connection);
+ super(request);
//this.onEvent = this.onEvent.bind(this);
}
@@ -55,24 +57,3 @@ class AntennaChannel extends Channel {
this.subscriber.off(`antennaStream:${this.antennaId}`, this.onEvent);
}
}
-
-@Injectable()
-export class AntennaChannelService implements MiChannelService {
- public readonly shouldShare = AntennaChannel.shouldShare;
- public readonly requireCredential = AntennaChannel.requireCredential;
- public readonly kind = AntennaChannel.kind;
-
- constructor(
- private noteEntityService: NoteEntityService,
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): AntennaChannel {
- return new AntennaChannel(
- this.noteEntityService,
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/api/stream/channels/channel.ts b/packages/backend/src/server/api/stream/channels/channel.ts
index c07eaac98d..1706b17526 100644
--- a/packages/backend/src/server/api/stream/channels/channel.ts
+++ b/packages/backend/src/server/api/stream/channels/channel.ts
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import type { Packed } from '@/misc/json-schema.js';
import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
import { bindThis } from '@/decorators.js';
@@ -11,20 +11,23 @@ import { isRenotePacked, isQuotePacked } from '@/misc/is-renote.js';
import { isInstanceMuted } from '@/misc/is-instance-muted.js';
import { isUserRelated } from '@/misc/is-user-related.js';
import type { JsonObject } from '@/misc/json-value.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
+import { REQUEST } from '@nestjs/core';
-class ChannelChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class ChannelChannel extends Channel {
public readonly chName = 'channel';
public static shouldShare = false;
public static requireCredential = false as const;
private channelId: string;
constructor(
+ @Inject(REQUEST)
+ request: ChannelRequest,
+
private noteEntityService: NoteEntityService,
- id: string,
- connection: Channel['connection'],
) {
- super(id, connection);
+ super(request);
//this.onNote = this.onNote.bind(this);
}
@@ -92,24 +95,3 @@ class ChannelChannel extends Channel {
this.subscriber.off('notesStream', this.onNote);
}
}
-
-@Injectable()
-export class ChannelChannelService implements MiChannelService {
- public readonly shouldShare = ChannelChannel.shouldShare;
- public readonly requireCredential = ChannelChannel.requireCredential;
- public readonly kind = ChannelChannel.kind;
-
- constructor(
- private noteEntityService: NoteEntityService,
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): ChannelChannel {
- return new ChannelChannel(
- this.noteEntityService,
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/api/stream/channels/chat-room.ts b/packages/backend/src/server/api/stream/channels/chat-room.ts
index eda333dd30..7f949032e2 100644
--- a/packages/backend/src/server/api/stream/channels/chat-room.ts
+++ b/packages/backend/src/server/api/stream/channels/chat-room.ts
@@ -3,14 +3,16 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import { bindThis } from '@/decorators.js';
import type { GlobalEvents } from '@/core/GlobalEventService.js';
import type { JsonObject } from '@/misc/json-value.js';
import { ChatService } from '@/core/ChatService.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
+import { REQUEST } from '@nestjs/core';
-class ChatRoomChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class ChatRoomChannel extends Channel {
public readonly chName = 'chatRoom';
public static shouldShare = false;
public static requireCredential = true as const;
@@ -18,12 +20,12 @@ class ChatRoomChannel extends Channel {
private roomId: string;
constructor(
- private chatService: ChatService,
+ @Inject(REQUEST)
+ request: ChannelRequest,
- id: string,
- connection: Channel['connection'],
+ private chatService: ChatService,
) {
- super(id, connection);
+ super(request);
}
@bindThis
@@ -55,24 +57,3 @@ class ChatRoomChannel extends Channel {
this.subscriber.off(`chatRoomStream:${this.roomId}`, this.onEvent);
}
}
-
-@Injectable()
-export class ChatRoomChannelService implements MiChannelService {
- public readonly shouldShare = ChatRoomChannel.shouldShare;
- public readonly requireCredential = ChatRoomChannel.requireCredential;
- public readonly kind = ChatRoomChannel.kind;
-
- constructor(
- private chatService: ChatService,
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): ChatRoomChannel {
- return new ChatRoomChannel(
- this.chatService,
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/api/stream/channels/chat-user.ts b/packages/backend/src/server/api/stream/channels/chat-user.ts
index 5323484ed7..36f3f67b28 100644
--- a/packages/backend/src/server/api/stream/channels/chat-user.ts
+++ b/packages/backend/src/server/api/stream/channels/chat-user.ts
@@ -3,14 +3,16 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import { bindThis } from '@/decorators.js';
import type { GlobalEvents } from '@/core/GlobalEventService.js';
import type { JsonObject } from '@/misc/json-value.js';
import { ChatService } from '@/core/ChatService.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
+import { REQUEST } from '@nestjs/core';
-class ChatUserChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class ChatUserChannel extends Channel {
public readonly chName = 'chatUser';
public static shouldShare = false;
public static requireCredential = true as const;
@@ -18,12 +20,12 @@ class ChatUserChannel extends Channel {
private otherId: string;
constructor(
- private chatService: ChatService,
+ @Inject(REQUEST)
+ request: ChannelRequest,
- id: string,
- connection: Channel['connection'],
+ private chatService: ChatService,
) {
- super(id, connection);
+ super(request);
}
@bindThis
@@ -55,24 +57,3 @@ class ChatUserChannel extends Channel {
this.subscriber.off(`chatUserStream:${this.user!.id}-${this.otherId}`, this.onEvent);
}
}
-
-@Injectable()
-export class ChatUserChannelService implements MiChannelService {
- public readonly shouldShare = ChatUserChannel.shouldShare;
- public readonly requireCredential = ChatUserChannel.requireCredential;
- public readonly kind = ChatUserChannel.kind;
-
- constructor(
- private chatService: ChatService,
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): ChatUserChannel {
- return new ChatUserChannel(
- this.chatService,
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/api/stream/channels/drive.ts b/packages/backend/src/server/api/stream/channels/drive.ts
index 03768f3d23..6f2eb2c8f9 100644
--- a/packages/backend/src/server/api/stream/channels/drive.ts
+++ b/packages/backend/src/server/api/stream/channels/drive.ts
@@ -3,17 +3,26 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import { bindThis } from '@/decorators.js';
import type { JsonObject } from '@/misc/json-value.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
+import { REQUEST } from '@nestjs/core';
-class DriveChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class DriveChannel extends Channel {
public readonly chName = 'drive';
public static shouldShare = true;
public static requireCredential = true as const;
public static kind = 'read:account';
+ constructor(
+ @Inject(REQUEST)
+ request: ChannelRequest,
+ ) {
+ super(request);
+ }
+
@bindThis
public async init(params: JsonObject) {
// Subscribe drive stream
@@ -22,22 +31,3 @@ class DriveChannel extends Channel {
});
}
}
-
-@Injectable()
-export class DriveChannelService implements MiChannelService {
- public readonly shouldShare = DriveChannel.shouldShare;
- public readonly requireCredential = DriveChannel.requireCredential;
- public readonly kind = DriveChannel.kind;
-
- constructor(
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): DriveChannel {
- return new DriveChannel(
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/api/stream/channels/global-timeline.ts b/packages/backend/src/server/api/stream/channels/global-timeline.ts
index d7c781ad12..be6be1b1e7 100644
--- a/packages/backend/src/server/api/stream/channels/global-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/global-timeline.ts
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import type { Packed } from '@/misc/json-schema.js';
import { MetaService } from '@/core/MetaService.js';
import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
@@ -11,9 +11,11 @@ import { bindThis } from '@/decorators.js';
import { RoleService } from '@/core/RoleService.js';
import { isRenotePacked, isQuotePacked } from '@/misc/is-renote.js';
import type { JsonObject } from '@/misc/json-value.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
+import { REQUEST } from '@nestjs/core';
-class GlobalTimelineChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class GlobalTimelineChannel extends Channel {
public readonly chName = 'globalTimeline';
public static shouldShare = false;
public static requireCredential = false as const;
@@ -21,14 +23,14 @@ class GlobalTimelineChannel extends Channel {
private withFiles: boolean;
constructor(
+ @Inject(REQUEST)
+ request: ChannelRequest,
+
private metaService: MetaService,
private roleService: RoleService,
private noteEntityService: NoteEntityService,
-
- id: string,
- connection: Channel['connection'],
) {
- super(id, connection);
+ super(request);
//this.onNote = this.onNote.bind(this);
}
@@ -74,28 +76,3 @@ class GlobalTimelineChannel extends Channel {
this.subscriber.off('notesStream', this.onNote);
}
}
-
-@Injectable()
-export class GlobalTimelineChannelService implements MiChannelService {
- public readonly shouldShare = GlobalTimelineChannel.shouldShare;
- public readonly requireCredential = GlobalTimelineChannel.requireCredential;
- public readonly kind = GlobalTimelineChannel.kind;
-
- constructor(
- private metaService: MetaService,
- private roleService: RoleService,
- private noteEntityService: NoteEntityService,
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): GlobalTimelineChannel {
- return new GlobalTimelineChannel(
- this.metaService,
- this.roleService,
- this.noteEntityService,
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/api/stream/channels/hashtag.ts b/packages/backend/src/server/api/stream/channels/hashtag.ts
index c911d63642..1456b4f262 100644
--- a/packages/backend/src/server/api/stream/channels/hashtag.ts
+++ b/packages/backend/src/server/api/stream/channels/hashtag.ts
@@ -3,28 +3,30 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import { normalizeForSearch } from '@/misc/normalize-for-search.js';
import type { Packed } from '@/misc/json-schema.js';
import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
import { bindThis } from '@/decorators.js';
import { isRenotePacked, isQuotePacked } from '@/misc/is-renote.js';
import type { JsonObject } from '@/misc/json-value.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
+import { REQUEST } from '@nestjs/core';
-class HashtagChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class HashtagChannel extends Channel {
public readonly chName = 'hashtag';
public static shouldShare = false;
public static requireCredential = false as const;
private q: string[][];
constructor(
- private noteEntityService: NoteEntityService,
+ @Inject(REQUEST)
+ request: ChannelRequest,
- id: string,
- connection: Channel['connection'],
+ private noteEntityService: NoteEntityService,
) {
- super(id, connection);
+ super(request);
//this.onNote = this.onNote.bind(this);
}
@@ -62,24 +64,3 @@ class HashtagChannel extends Channel {
this.subscriber.off('notesStream', this.onNote);
}
}
-
-@Injectable()
-export class HashtagChannelService implements MiChannelService {
- public readonly shouldShare = HashtagChannel.shouldShare;
- public readonly requireCredential = HashtagChannel.requireCredential;
- public readonly kind = HashtagChannel.kind;
-
- constructor(
- private noteEntityService: NoteEntityService,
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): HashtagChannel {
- return new HashtagChannel(
- this.noteEntityService,
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/api/stream/channels/home-timeline.ts b/packages/backend/src/server/api/stream/channels/home-timeline.ts
index eb5b4a8c6c..665c11b692 100644
--- a/packages/backend/src/server/api/stream/channels/home-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/home-timeline.ts
@@ -3,15 +3,17 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import type { Packed } from '@/misc/json-schema.js';
import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
import { bindThis } from '@/decorators.js';
import { isRenotePacked, isQuotePacked } from '@/misc/is-renote.js';
import type { JsonObject } from '@/misc/json-value.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
+import { REQUEST } from '@nestjs/core';
-class HomeTimelineChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class HomeTimelineChannel extends Channel {
public readonly chName = 'homeTimeline';
public static shouldShare = false;
public static requireCredential = true as const;
@@ -20,12 +22,12 @@ class HomeTimelineChannel extends Channel {
private withFiles: boolean;
constructor(
- private noteEntityService: NoteEntityService,
+ @Inject(REQUEST)
+ request: ChannelRequest,
- id: string,
- connection: Channel['connection'],
+ private noteEntityService: NoteEntityService,
) {
- super(id, connection);
+ super(request);
//this.onNote = this.onNote.bind(this);
}
@@ -98,24 +100,3 @@ class HomeTimelineChannel extends Channel {
this.subscriber.off('notesStream', this.onNote);
}
}
-
-@Injectable()
-export class HomeTimelineChannelService implements MiChannelService {
- public readonly shouldShare = HomeTimelineChannel.shouldShare;
- public readonly requireCredential = HomeTimelineChannel.requireCredential;
- public readonly kind = HomeTimelineChannel.kind;
-
- constructor(
- private noteEntityService: NoteEntityService,
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): HomeTimelineChannel {
- return new HomeTimelineChannel(
- this.noteEntityService,
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts b/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts
index 2155e02012..54250d2a90 100644
--- a/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import type { Packed } from '@/misc/json-schema.js';
import { MetaService } from '@/core/MetaService.js';
import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
@@ -11,9 +11,11 @@ import { bindThis } from '@/decorators.js';
import { RoleService } from '@/core/RoleService.js';
import { isRenotePacked, isQuotePacked } from '@/misc/is-renote.js';
import type { JsonObject } from '@/misc/json-value.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
+import { REQUEST } from '@nestjs/core';
-class HybridTimelineChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class HybridTimelineChannel extends Channel {
public readonly chName = 'hybridTimeline';
public static shouldShare = false;
public static requireCredential = true as const;
@@ -23,14 +25,14 @@ class HybridTimelineChannel extends Channel {
private withFiles: boolean;
constructor(
+ @Inject(REQUEST)
+ request: ChannelRequest,
+
private metaService: MetaService,
private roleService: RoleService,
private noteEntityService: NoteEntityService,
-
- id: string,
- connection: Channel['connection'],
) {
- super(id, connection);
+ super(request);
//this.onNote = this.onNote.bind(this);
}
@@ -118,28 +120,3 @@ class HybridTimelineChannel extends Channel {
this.subscriber.off('notesStream', this.onNote);
}
}
-
-@Injectable()
-export class HybridTimelineChannelService implements MiChannelService {
- public readonly shouldShare = HybridTimelineChannel.shouldShare;
- public readonly requireCredential = HybridTimelineChannel.requireCredential;
- public readonly kind = HybridTimelineChannel.kind;
-
- constructor(
- private metaService: MetaService,
- private roleService: RoleService,
- private noteEntityService: NoteEntityService,
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): HybridTimelineChannel {
- return new HybridTimelineChannel(
- this.metaService,
- this.roleService,
- this.noteEntityService,
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/api/stream/channels/local-timeline.ts b/packages/backend/src/server/api/stream/channels/local-timeline.ts
index 3d7ed6acdb..b394e9663f 100644
--- a/packages/backend/src/server/api/stream/channels/local-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/local-timeline.ts
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import type { Packed } from '@/misc/json-schema.js';
import { MetaService } from '@/core/MetaService.js';
import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
@@ -11,25 +11,27 @@ import { bindThis } from '@/decorators.js';
import { RoleService } from '@/core/RoleService.js';
import { isQuotePacked, isRenotePacked } from '@/misc/is-renote.js';
import type { JsonObject } from '@/misc/json-value.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
+import { REQUEST } from '@nestjs/core';
-class LocalTimelineChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class LocalTimelineChannel extends Channel {
public readonly chName = 'localTimeline';
- public static shouldShare = false;
+ public static shouldShare = false as const;
public static requireCredential = false as const;
private withRenotes: boolean;
private withReplies: boolean;
private withFiles: boolean;
constructor(
+ @Inject(REQUEST)
+ request: ChannelRequest,
+
private metaService: MetaService,
private roleService: RoleService,
private noteEntityService: NoteEntityService,
-
- id: string,
- connection: Channel['connection'],
) {
- super(id, connection);
+ super(request);
//this.onNote = this.onNote.bind(this);
}
@@ -84,28 +86,3 @@ class LocalTimelineChannel extends Channel {
this.subscriber.off('notesStream', this.onNote);
}
}
-
-@Injectable()
-export class LocalTimelineChannelService implements MiChannelService {
- public readonly shouldShare = LocalTimelineChannel.shouldShare;
- public readonly requireCredential = LocalTimelineChannel.requireCredential;
- public readonly kind = LocalTimelineChannel.kind;
-
- constructor(
- private metaService: MetaService,
- private roleService: RoleService,
- private noteEntityService: NoteEntityService,
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): LocalTimelineChannel {
- return new LocalTimelineChannel(
- this.metaService,
- this.roleService,
- this.noteEntityService,
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/api/stream/channels/main.ts b/packages/backend/src/server/api/stream/channels/main.ts
index 525f24c105..2ce53ac288 100644
--- a/packages/backend/src/server/api/stream/channels/main.ts
+++ b/packages/backend/src/server/api/stream/channels/main.ts
@@ -3,26 +3,28 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import { isInstanceMuted, isUserFromMutedInstance } from '@/misc/is-instance-muted.js';
import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
import { bindThis } from '@/decorators.js';
import type { JsonObject } from '@/misc/json-value.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
+import { REQUEST } from '@nestjs/core';
-class MainChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class MainChannel extends Channel {
public readonly chName = 'main';
public static shouldShare = true;
public static requireCredential = true as const;
public static kind = 'read:account';
constructor(
- private noteEntityService: NoteEntityService,
+ @Inject(REQUEST)
+ request: ChannelRequest,
- id: string,
- connection: Channel['connection'],
+ private noteEntityService: NoteEntityService,
) {
- super(id, connection);
+ super(request);
}
@bindThis
@@ -61,24 +63,3 @@ class MainChannel extends Channel {
});
}
}
-
-@Injectable()
-export class MainChannelService implements MiChannelService {
- public readonly shouldShare = MainChannel.shouldShare;
- public readonly requireCredential = MainChannel.requireCredential;
- public readonly kind = MainChannel.kind;
-
- constructor(
- private noteEntityService: NoteEntityService,
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): MainChannel {
- return new MainChannel(
- this.noteEntityService,
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/api/stream/channels/queue-stats.ts b/packages/backend/src/server/api/stream/channels/queue-stats.ts
index 91b62255b4..a87863f26c 100644
--- a/packages/backend/src/server/api/stream/channels/queue-stats.ts
+++ b/packages/backend/src/server/api/stream/channels/queue-stats.ts
@@ -4,21 +4,26 @@
*/
import Xev from 'xev';
-import { Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import { bindThis } from '@/decorators.js';
import { isJsonObject } from '@/misc/json-value.js';
import type { JsonObject, JsonValue } from '@/misc/json-value.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
+import { REQUEST } from '@nestjs/core';
const ev = new Xev();
-class QueueStatsChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class QueueStatsChannel extends Channel {
public readonly chName = 'queueStats';
public static shouldShare = true;
public static requireCredential = false as const;
- constructor(id: string, connection: Channel['connection']) {
- super(id, connection);
+ constructor(
+ @Inject(REQUEST)
+ request: ChannelRequest,
+ ) {
+ super(request);
//this.onStats = this.onStats.bind(this);
//this.onMessage = this.onMessage.bind(this);
}
@@ -56,22 +61,3 @@ class QueueStatsChannel extends Channel {
ev.removeListener('queueStats', this.onStats);
}
}
-
-@Injectable()
-export class QueueStatsChannelService implements MiChannelService {
- public readonly shouldShare = QueueStatsChannel.shouldShare;
- public readonly requireCredential = QueueStatsChannel.requireCredential;
- public readonly kind = QueueStatsChannel.kind;
-
- constructor(
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): QueueStatsChannel {
- return new QueueStatsChannel(
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/api/stream/channels/reversi-game.ts b/packages/backend/src/server/api/stream/channels/reversi-game.ts
index 7597a1cfa3..58fc16e98c 100644
--- a/packages/backend/src/server/api/stream/channels/reversi-game.ts
+++ b/packages/backend/src/server/api/stream/channels/reversi-game.ts
@@ -3,31 +3,32 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Inject, Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import type { MiReversiGame } from '@/models/_.js';
-import { DI } from '@/di-symbols.js';
import { bindThis } from '@/decorators.js';
import { ReversiService } from '@/core/ReversiService.js';
import { ReversiGameEntityService } from '@/core/entities/ReversiGameEntityService.js';
import { isJsonObject } from '@/misc/json-value.js';
import type { JsonObject, JsonValue } from '@/misc/json-value.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
import { reversiUpdateKeys } from 'misskey-js';
+import { REQUEST } from '@nestjs/core';
-class ReversiGameChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class ReversiGameChannel extends Channel {
public readonly chName = 'reversiGame';
public static shouldShare = false;
public static requireCredential = false as const;
private gameId: MiReversiGame['id'] | null = null;
constructor(
+ @Inject(REQUEST)
+ request: ChannelRequest,
+
private reversiService: ReversiService,
private reversiGameEntityService: ReversiGameEntityService,
-
- id: string,
- connection: Channel['connection'],
) {
- super(id, connection);
+ super(request);
}
@bindThis
@@ -107,25 +108,3 @@ class ReversiGameChannel extends Channel {
}
}
-@Injectable()
-export class ReversiGameChannelService implements MiChannelService {
- public readonly shouldShare = ReversiGameChannel.shouldShare;
- public readonly requireCredential = ReversiGameChannel.requireCredential;
- public readonly kind = ReversiGameChannel.kind;
-
- constructor(
- private reversiService: ReversiService,
- private reversiGameEntityService: ReversiGameEntityService,
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): ReversiGameChannel {
- return new ReversiGameChannel(
- this.reversiService,
- this.reversiGameEntityService,
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/api/stream/channels/reversi.ts b/packages/backend/src/server/api/stream/channels/reversi.ts
index 6e88939724..5eff73eeef 100644
--- a/packages/backend/src/server/api/stream/channels/reversi.ts
+++ b/packages/backend/src/server/api/stream/channels/reversi.ts
@@ -3,22 +3,24 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import { bindThis } from '@/decorators.js';
import type { JsonObject } from '@/misc/json-value.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
+import { REQUEST } from '@nestjs/core';
-class ReversiChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class ReversiChannel extends Channel {
public readonly chName = 'reversi';
public static shouldShare = true;
public static requireCredential = true as const;
public static kind = 'read:account';
constructor(
- id: string,
- connection: Channel['connection'],
+ @Inject(REQUEST)
+ request: ChannelRequest,
) {
- super(id, connection);
+ super(request);
}
@bindThis
@@ -32,22 +34,3 @@ class ReversiChannel extends Channel {
this.subscriber.off(`reversiStream:${this.user!.id}`, this.send);
}
}
-
-@Injectable()
-export class ReversiChannelService implements MiChannelService {
- public readonly shouldShare = ReversiChannel.shouldShare;
- public readonly requireCredential = ReversiChannel.requireCredential;
- public readonly kind = ReversiChannel.kind;
-
- constructor(
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): ReversiChannel {
- return new ReversiChannel(
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/api/stream/channels/role-timeline.ts b/packages/backend/src/server/api/stream/channels/role-timeline.ts
index fcfa26c38b..99e0b69023 100644
--- a/packages/backend/src/server/api/stream/channels/role-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/role-timeline.ts
@@ -3,28 +3,30 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
import { bindThis } from '@/decorators.js';
import { RoleService } from '@/core/RoleService.js';
import type { GlobalEvents } from '@/core/GlobalEventService.js';
import type { JsonObject } from '@/misc/json-value.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
+import { REQUEST } from '@nestjs/core';
-class RoleTimelineChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class RoleTimelineChannel extends Channel {
public readonly chName = 'roleTimeline';
public static shouldShare = false;
public static requireCredential = false as const;
private roleId: string;
constructor(
+ @Inject(REQUEST)
+ request: ChannelRequest,
+
private noteEntityService: NoteEntityService,
private roleservice: RoleService,
-
- id: string,
- connection: Channel['connection'],
) {
- super(id, connection);
+ super(request);
//this.onNote = this.onNote.bind(this);
}
@@ -60,26 +62,3 @@ class RoleTimelineChannel extends Channel {
this.subscriber.off(`roleTimelineStream:${this.roleId}`, this.onEvent);
}
}
-
-@Injectable()
-export class RoleTimelineChannelService implements MiChannelService {
- public readonly shouldShare = RoleTimelineChannel.shouldShare;
- public readonly requireCredential = RoleTimelineChannel.requireCredential;
- public readonly kind = RoleTimelineChannel.kind;
-
- constructor(
- private noteEntityService: NoteEntityService,
- private roleservice: RoleService,
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): RoleTimelineChannel {
- return new RoleTimelineChannel(
- this.noteEntityService,
- this.roleservice,
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/api/stream/channels/server-stats.ts b/packages/backend/src/server/api/stream/channels/server-stats.ts
index ec5352d12d..aece5435b0 100644
--- a/packages/backend/src/server/api/stream/channels/server-stats.ts
+++ b/packages/backend/src/server/api/stream/channels/server-stats.ts
@@ -4,21 +4,26 @@
*/
import Xev from 'xev';
-import { Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import { bindThis } from '@/decorators.js';
import { isJsonObject } from '@/misc/json-value.js';
import type { JsonObject, JsonValue } from '@/misc/json-value.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
+import { REQUEST } from '@nestjs/core';
const ev = new Xev();
-class ServerStatsChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class ServerStatsChannel extends Channel {
public readonly chName = 'serverStats';
public static shouldShare = true;
public static requireCredential = false as const;
- constructor(id: string, connection: Channel['connection']) {
- super(id, connection);
+ constructor(
+ @Inject(REQUEST)
+ request: ChannelRequest,
+ ) {
+ super(request);
//this.onStats = this.onStats.bind(this);
//this.onMessage = this.onMessage.bind(this);
}
@@ -54,22 +59,3 @@ class ServerStatsChannel extends Channel {
ev.removeListener('serverStats', this.onStats);
}
}
-
-@Injectable()
-export class ServerStatsChannelService implements MiChannelService {
- public readonly shouldShare = ServerStatsChannel.shouldShare;
- public readonly requireCredential = ServerStatsChannel.requireCredential;
- public readonly kind = ServerStatsChannel.kind;
-
- constructor(
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): ServerStatsChannel {
- return new ServerStatsChannel(
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/api/stream/channels/user-list.ts b/packages/backend/src/server/api/stream/channels/user-list.ts
index 5bfd8fa68c..2f7345e150 100644
--- a/packages/backend/src/server/api/stream/channels/user-list.ts
+++ b/packages/backend/src/server/api/stream/channels/user-list.ts
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Inject, Injectable } from '@nestjs/common';
+import { Inject, Injectable, Scope } from '@nestjs/common';
import type { MiUserListMembership, UserListMembershipsRepository, UserListsRepository } from '@/models/_.js';
import type { Packed } from '@/misc/json-schema.js';
import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
@@ -11,9 +11,11 @@ import { DI } from '@/di-symbols.js';
import { bindThis } from '@/decorators.js';
import { isRenotePacked, isQuotePacked } from '@/misc/is-renote.js';
import type { JsonObject } from '@/misc/json-value.js';
-import Channel, { type MiChannelService } from '../channel.js';
+import Channel, { type ChannelRequest } from '../channel.js';
+import { REQUEST } from '@nestjs/core';
-class UserListChannel extends Channel {
+@Injectable({ scope: Scope.TRANSIENT })
+export class UserListChannel extends Channel {
public readonly chName = 'userList';
public static shouldShare = false;
public static requireCredential = false as const;
@@ -24,14 +26,18 @@ class UserListChannel extends Channel {
private withRenotes: boolean;
constructor(
+ @Inject(DI.userListsRepository)
private userListsRepository: UserListsRepository,
- private userListMembershipsRepository: UserListMembershipsRepository,
- private noteEntityService: NoteEntityService,
- id: string,
- connection: Channel['connection'],
+ @Inject(DI.userListMembershipsRepository)
+ private userListMembershipsRepository: UserListMembershipsRepository,
+
+ @Inject(REQUEST)
+ request: ChannelRequest,
+
+ private noteEntityService: NoteEntityService,
) {
- super(id, connection);
+ super(request);
//this.updateListUsers = this.updateListUsers.bind(this);
//this.onNote = this.onNote.bind(this);
}
@@ -130,32 +136,3 @@ class UserListChannel extends Channel {
clearInterval(this.listUsersClock);
}
}
-
-@Injectable()
-export class UserListChannelService implements MiChannelService {
- public readonly shouldShare = UserListChannel.shouldShare;
- public readonly requireCredential = UserListChannel.requireCredential;
- public readonly kind = UserListChannel.kind;
-
- constructor(
- @Inject(DI.userListsRepository)
- private userListsRepository: UserListsRepository,
-
- @Inject(DI.userListMembershipsRepository)
- private userListMembershipsRepository: UserListMembershipsRepository,
-
- private noteEntityService: NoteEntityService,
- ) {
- }
-
- @bindThis
- public create(id: string, connection: Channel['connection']): UserListChannel {
- return new UserListChannel(
- this.userListsRepository,
- this.userListMembershipsRepository,
- this.noteEntityService,
- id,
- connection,
- );
- }
-}
diff --git a/packages/backend/src/server/oauth/OAuth2ProviderService.ts b/packages/backend/src/server/oauth/OAuth2ProviderService.ts
index 2b0b303b98..d2391c43ab 100644
--- a/packages/backend/src/server/oauth/OAuth2ProviderService.ts
+++ b/packages/backend/src/server/oauth/OAuth2ProviderService.ts
@@ -12,12 +12,9 @@ import ipaddr from 'ipaddr.js';
import oauth2orize, { type OAuth2, AuthorizationError, ValidateFunctionArity2, OAuth2Req, MiddlewareRequest } from 'oauth2orize';
import oauth2Pkce from 'oauth2orize-pkce';
import fastifyCors from '@fastify/cors';
-import fastifyView from '@fastify/view';
-import pug from 'pug';
import bodyParser from 'body-parser';
import fastifyExpress from '@fastify/express';
import { verifyChallenge } from 'pkce-challenge';
-import { mf2 } from 'microformats-parser';
import { permissions as kinds } from 'misskey-js';
import { secureRndstr } from '@/misc/secure-rndstr.js';
import { HttpRequestService } from '@/core/HttpRequestService.js';
@@ -32,6 +29,8 @@ import { MemoryKVCache } from '@/misc/cache.js';
import { LoggerService } from '@/core/LoggerService.js';
import Logger from '@/logger.js';
import { StatusError } from '@/misc/status-error.js';
+import { HtmlTemplateService } from '@/server/web/HtmlTemplateService.js';
+import { OAuthPage } from '@/server/web/views/oauth.js';
import type { ServerResponse } from 'node:http';
import type { FastifyInstance } from 'fastify';
@@ -98,6 +97,32 @@ interface ClientInformation {
logo: string | null;
}
+function parseMicroformats(doc: htmlParser.HTMLElement, baseUrl: string, id: string): { name: string | null; logo: string | null; } {
+ let name: string | null = null;
+ let logo: string | null = null;
+
+ const hApp = doc.querySelector('.h-app');
+ if (hApp == null) return { name, logo };
+
+ const nameEl = hApp.querySelector('.p-name');
+ if (nameEl != null) {
+ const href = nameEl.attributes.href || nameEl.attributes.src;
+ if (href != null && new URL(href, baseUrl).toString() === new URL(id).toString()) {
+ name = nameEl.textContent.trim();
+ }
+ }
+
+ const logoEl = hApp.querySelector('.u-logo');
+ if (logoEl != null) {
+ const href = logoEl.attributes.href || logoEl.attributes.src;
+ if (href != null) {
+ logo = new URL(href, baseUrl).toString();
+ }
+ }
+
+ return { name, logo };
+}
+
// https://indieauth.spec.indieweb.org/#client-information-discovery
// "Authorization servers SHOULD support parsing the [h-app] Microformat from the client_id,
// and if there is an [h-app] with a url property matching the client_id URL,
@@ -120,24 +145,19 @@ async function discoverClientInformation(logger: Logger, httpRequestService: Htt
}
const text = await res.text();
- const fragment = htmlParser.parse(`${text}
`);
+ const doc = htmlParser.parse(`${text}
`);
- redirectUris.push(...[...fragment.querySelectorAll('link[rel=redirect_uri][href]')].map(el => el.attributes.href));
+ redirectUris.push(...[...doc.querySelectorAll('link[rel=redirect_uri][href]')].map(el => el.attributes.href));
let name = id;
let logo: string | null = null;
if (text) {
- const microformats = mf2(text, { baseUrl: res.url });
- const correspondingProperties = microformats.items.find(item => item.type?.includes('h-app') && item.properties.url.includes(id));
- if (correspondingProperties) {
- const nameProperty = correspondingProperties.properties.name?.[0];
- if (typeof nameProperty === 'string') {
- name = nameProperty;
- }
- const logoProperty = correspondingProperties.properties.logo?.[0];
- if (typeof logoProperty === 'string') {
- logo = logoProperty;
- }
+ const microformats = parseMicroformats(doc, res.url, id);
+ if (typeof microformats.name === 'string') {
+ name = microformats.name;
+ }
+ if (typeof microformats.logo === 'string') {
+ logo = microformats.logo;
}
}
@@ -253,6 +273,7 @@ export class OAuth2ProviderService {
private usersRepository: UsersRepository,
private cacheService: CacheService,
loggerService: LoggerService,
+ private htmlTemplateService: HtmlTemplateService,
) {
this.#logger = loggerService.getLogger('oauth');
@@ -386,24 +407,16 @@ export class OAuth2ProviderService {
this.#logger.info(`Rendering authorization page for "${oauth2.client.name}"`);
reply.header('Cache-Control', 'no-store');
- return await reply.view('oauth', {
+ return await HtmlTemplateService.replyHtml(reply, OAuthPage({
+ ...await this.htmlTemplateService.getCommonData(),
transactionId: oauth2.transactionID,
clientName: oauth2.client.name,
- clientLogo: oauth2.client.logo,
- scope: oauth2.req.scope.join(' '),
- });
+ clientLogo: oauth2.client.logo ?? undefined,
+ scope: oauth2.req.scope,
+ }));
});
fastify.post('/decision', async () => { });
- fastify.register(fastifyView, {
- root: fileURLToPath(new URL('../web/views', import.meta.url)),
- engine: { pug },
- defaultContext: {
- version: this.config.version,
- config: this.config,
- },
- });
-
await fastify.register(fastifyExpress);
fastify.use('/authorize', this.#server.authorize(((areq, done) => {
(async (): Promise> => {
diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts
index fef6a27087..bcea935409 100644
--- a/packages/backend/src/server/web/ClientServerService.ts
+++ b/packages/backend/src/server/web/ClientServerService.ts
@@ -9,20 +9,16 @@ import { fileURLToPath } from 'node:url';
import { Inject, Injectable } from '@nestjs/common';
import ms from 'ms';
import sharp from 'sharp';
-import pug from 'pug';
import { In, IsNull } from 'typeorm';
import fastifyStatic from '@fastify/static';
-import fastifyView from '@fastify/view';
import fastifyProxy from '@fastify/http-proxy';
import vary from 'vary';
import type { Config } from '@/config.js';
-import { getNoteSummary } from '@/misc/get-note-summary.js';
import { DI } from '@/di-symbols.js';
import * as Acct from '@/misc/acct.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
import { PageEntityService } from '@/core/entities/PageEntityService.js';
-import { MetaEntityService } from '@/core/entities/MetaEntityService.js';
import { GalleryPostEntityService } from '@/core/entities/GalleryPostEntityService.js';
import { ClipEntityService } from '@/core/entities/ClipEntityService.js';
import { ChannelEntityService } from '@/core/entities/ChannelEntityService.js';
@@ -41,14 +37,33 @@ import type {
} from '@/models/_.js';
import type Logger from '@/logger.js';
import { handleRequestRedirectToOmitSearch } from '@/misc/fastify-hook-handlers.js';
+import { htmlSafeJsonStringify } from '@/misc/json-stringify-html-safe.js';
import { bindThis } from '@/decorators.js';
import { FlashEntityService } from '@/core/entities/FlashEntityService.js';
-import { RoleService } from '@/core/RoleService.js';
import { ReversiGameEntityService } from '@/core/entities/ReversiGameEntityService.js';
import { AnnouncementEntityService } from '@/core/entities/AnnouncementEntityService.js';
import { FeedService } from './FeedService.js';
import { UrlPreviewService } from './UrlPreviewService.js';
import { ClientLoggerService } from './ClientLoggerService.js';
+import { HtmlTemplateService } from './HtmlTemplateService.js';
+
+import { BasePage } from './views/base.js';
+import { UserPage } from './views/user.js';
+import { NotePage } from './views/note.js';
+import { PagePage } from './views/page.js';
+import { ClipPage } from './views/clip.js';
+import { FlashPage } from './views/flash.js';
+import { GalleryPostPage } from './views/gallery-post.js';
+import { ChannelPage } from './views/channel.js';
+import { ReversiGamePage } from './views/reversi-game.js';
+import { AnnouncementPage } from './views/announcement.js';
+import { BaseEmbed } from './views/base-embed.js';
+import { InfoCardPage } from './views/info-card.js';
+import { BiosPage } from './views/bios.js';
+import { CliPage } from './views/cli.js';
+import { FlushPage } from './views/flush.js';
+import { ErrorPage } from './views/error.js';
+
import type { FastifyError, FastifyInstance, FastifyPluginOptions, FastifyReply } from 'fastify';
const _filename = fileURLToPath(import.meta.url);
@@ -62,20 +77,6 @@ const frontendViteOut = `${_dirname}/../../../../../built/_frontend_vite_/`;
const frontendEmbedViteOut = `${_dirname}/../../../../../built/_frontend_embed_vite_/`;
const tarball = `${_dirname}/../../../../../built/tarball/`;
-const ESCAPE_LOOKUP = {
- '&': '\\u0026',
- '>': '\\u003e',
- '<': '\\u003c',
- '\u2028': '\\u2028',
- '\u2029': '\\u2029',
-} as Record;
-
-const ESCAPE_REGEX = /[&><\u2028\u2029]/g;
-
-function htmlSafeJsonStringify(obj: any): string {
- return JSON.stringify(obj).replace(ESCAPE_REGEX, x => ESCAPE_LOOKUP[x]);
-}
-
@Injectable()
export class ClientServerService {
private logger: Logger;
@@ -121,7 +122,6 @@ export class ClientServerService {
private userEntityService: UserEntityService,
private noteEntityService: NoteEntityService,
private pageEntityService: PageEntityService,
- private metaEntityService: MetaEntityService,
private galleryPostEntityService: GalleryPostEntityService,
private clipEntityService: ClipEntityService,
private channelEntityService: ChannelEntityService,
@@ -129,7 +129,7 @@ export class ClientServerService {
private announcementEntityService: AnnouncementEntityService,
private urlPreviewService: UrlPreviewService,
private feedService: FeedService,
- private roleService: RoleService,
+ private htmlTemplateService: HtmlTemplateService,
private clientLoggerService: ClientLoggerService,
) {
//this.createServer = this.createServer.bind(this);
@@ -195,38 +195,10 @@ export class ClientServerService {
return (manifest);
}
- @bindThis
- private async generateCommonPugData(meta: MiMeta) {
- return {
- instanceName: meta.name ?? 'Misskey',
- icon: meta.iconUrl,
- appleTouchIcon: meta.app512IconUrl,
- themeColor: meta.themeColor,
- serverErrorImageUrl: meta.serverErrorImageUrl ?? 'https://xn--931a.moe/assets/error.jpg',
- infoImageUrl: meta.infoImageUrl ?? 'https://xn--931a.moe/assets/info.jpg',
- notFoundImageUrl: meta.notFoundImageUrl ?? 'https://xn--931a.moe/assets/not-found.jpg',
- instanceUrl: this.config.url,
- metaJson: htmlSafeJsonStringify(await this.metaEntityService.packDetailed(meta)),
- now: Date.now(),
- federationEnabled: this.meta.federation !== 'none',
- };
- }
-
@bindThis
public createServer(fastify: FastifyInstance, options: FastifyPluginOptions, done: (err?: Error) => void) {
const configUrl = new URL(this.config.url);
- fastify.register(fastifyView, {
- root: _dirname + '/views',
- engine: {
- pug: pug,
- },
- defaultContext: {
- version: this.config.version,
- config: this.config,
- },
- });
-
fastify.addHook('onRequest', (request, reply, done) => {
// クリックジャッキング防止のためiFrameの中に入れられないようにする
reply.header('X-Frame-Options', 'DENY');
@@ -427,16 +399,15 @@ export class ClientServerService {
//#endregion
- const renderBase = async (reply: FastifyReply, data: { [key: string]: any } = {}) => {
+ const renderBase = async (reply: FastifyReply, data: Partial[0]> = {}) => {
reply.header('Cache-Control', 'public, max-age=30');
- return await reply.view('base', {
- img: this.meta.bannerUrl,
- url: this.config.url,
+ return await HtmlTemplateService.replyHtml(reply, BasePage({
+ img: this.meta.bannerUrl ?? undefined,
title: this.meta.name ?? 'Misskey',
- desc: this.meta.description,
- ...await this.generateCommonPugData(this.meta),
+ desc: this.meta.description ?? undefined,
+ ...await this.htmlTemplateService.getCommonData(),
...data,
- });
+ }));
};
// URL preview endpoint
@@ -518,11 +489,6 @@ export class ClientServerService {
)
) {
const profile = await this.userProfilesRepository.findOneByOrFail({ userId: user.id });
- const me = profile.fields
- ? profile.fields
- .filter(filed => filed.value != null && filed.value.match(/^https?:/))
- .map(field => field.value)
- : [];
reply.header('Cache-Control', 'public, max-age=15');
if (profile.preventAiLearning) {
@@ -535,15 +501,15 @@ export class ClientServerService {
userProfile: profile,
});
- return await reply.view('user', {
- user, profile, me,
- avatarUrl: _user.avatarUrl,
+ return await HtmlTemplateService.replyHtml(reply, UserPage({
+ user: _user,
+ profile,
sub: request.params.sub,
- ...await this.generateCommonPugData(this.meta),
- clientCtx: htmlSafeJsonStringify({
+ ...await this.htmlTemplateService.getCommonData(),
+ clientCtxJson: htmlSafeJsonStringify({
user: _user,
}),
- });
+ }));
} else {
// リモートユーザーなので
// モデレータがAPI経由で参照可能にするために404にはしない
@@ -594,17 +560,14 @@ export class ClientServerService {
reply.header('X-Robots-Tag', 'noimageai');
reply.header('X-Robots-Tag', 'noai');
}
- return await reply.view('note', {
+ return await HtmlTemplateService.replyHtml(reply, NotePage({
note: _note,
profile,
- avatarUrl: _note.user.avatarUrl,
- // TODO: Let locale changeable by instance setting
- summary: getNoteSummary(_note),
- ...await this.generateCommonPugData(this.meta),
- clientCtx: htmlSafeJsonStringify({
+ ...await this.htmlTemplateService.getCommonData(),
+ clientCtxJson: htmlSafeJsonStringify({
note: _note,
}),
- });
+ }));
} else {
return await renderBase(reply);
}
@@ -637,12 +600,11 @@ export class ClientServerService {
reply.header('X-Robots-Tag', 'noimageai');
reply.header('X-Robots-Tag', 'noai');
}
- return await reply.view('page', {
+ return await HtmlTemplateService.replyHtml(reply, PagePage({
page: _page,
profile,
- avatarUrl: _page.user.avatarUrl,
- ...await this.generateCommonPugData(this.meta),
- });
+ ...await this.htmlTemplateService.getCommonData(),
+ }));
} else {
return await renderBase(reply);
}
@@ -662,12 +624,11 @@ export class ClientServerService {
reply.header('X-Robots-Tag', 'noimageai');
reply.header('X-Robots-Tag', 'noai');
}
- return await reply.view('flash', {
+ return await HtmlTemplateService.replyHtml(reply, FlashPage({
flash: _flash,
profile,
- avatarUrl: _flash.user.avatarUrl,
- ...await this.generateCommonPugData(this.meta),
- });
+ ...await this.htmlTemplateService.getCommonData(),
+ }));
} else {
return await renderBase(reply);
}
@@ -687,15 +648,14 @@ export class ClientServerService {
reply.header('X-Robots-Tag', 'noimageai');
reply.header('X-Robots-Tag', 'noai');
}
- return await reply.view('clip', {
+ return await HtmlTemplateService.replyHtml(reply, ClipPage({
clip: _clip,
profile,
- avatarUrl: _clip.user.avatarUrl,
- ...await this.generateCommonPugData(this.meta),
- clientCtx: htmlSafeJsonStringify({
+ ...await this.htmlTemplateService.getCommonData(),
+ clientCtxJson: htmlSafeJsonStringify({
clip: _clip,
}),
- });
+ }));
} else {
return await renderBase(reply);
}
@@ -713,12 +673,11 @@ export class ClientServerService {
reply.header('X-Robots-Tag', 'noimageai');
reply.header('X-Robots-Tag', 'noai');
}
- return await reply.view('gallery-post', {
- post: _post,
+ return await HtmlTemplateService.replyHtml(reply, GalleryPostPage({
+ galleryPost: _post,
profile,
- avatarUrl: _post.user.avatarUrl,
- ...await this.generateCommonPugData(this.meta),
- });
+ ...await this.htmlTemplateService.getCommonData(),
+ }));
} else {
return await renderBase(reply);
}
@@ -733,10 +692,10 @@ export class ClientServerService {
if (channel) {
const _channel = await this.channelEntityService.pack(channel);
reply.header('Cache-Control', 'public, max-age=15');
- return await reply.view('channel', {
+ return await HtmlTemplateService.replyHtml(reply, ChannelPage({
channel: _channel,
- ...await this.generateCommonPugData(this.meta),
- });
+ ...await this.htmlTemplateService.getCommonData(),
+ }));
} else {
return await renderBase(reply);
}
@@ -751,10 +710,10 @@ export class ClientServerService {
if (game) {
const _game = await this.reversiGameEntityService.packDetail(game);
reply.header('Cache-Control', 'public, max-age=3600');
- return await reply.view('reversi-game', {
- game: _game,
- ...await this.generateCommonPugData(this.meta),
- });
+ return await HtmlTemplateService.replyHtml(reply, ReversiGamePage({
+ reversiGame: _game,
+ ...await this.htmlTemplateService.getCommonData(),
+ }));
} else {
return await renderBase(reply);
}
@@ -770,10 +729,10 @@ export class ClientServerService {
if (announcement) {
const _announcement = await this.announcementEntityService.pack(announcement);
reply.header('Cache-Control', 'public, max-age=3600');
- return await reply.view('announcement', {
+ return await HtmlTemplateService.replyHtml(reply, AnnouncementPage({
announcement: _announcement,
- ...await this.generateCommonPugData(this.meta),
- });
+ ...await this.htmlTemplateService.getCommonData(),
+ }));
} else {
return await renderBase(reply);
}
@@ -806,13 +765,13 @@ export class ClientServerService {
const _user = await this.userEntityService.pack(user);
reply.header('Cache-Control', 'public, max-age=3600');
- return await reply.view('base-embed', {
+ return await HtmlTemplateService.replyHtml(reply, BaseEmbed({
title: this.meta.name ?? 'Misskey',
- ...await this.generateCommonPugData(this.meta),
- embedCtx: htmlSafeJsonStringify({
+ ...await this.htmlTemplateService.getCommonData(),
+ embedCtxJson: htmlSafeJsonStringify({
user: _user,
}),
- });
+ }));
});
fastify.get<{ Params: { note: string; } }>('/embed/notes/:note', async (request, reply) => {
@@ -832,13 +791,13 @@ export class ClientServerService {
const _note = await this.noteEntityService.pack(note, null, { detail: true });
reply.header('Cache-Control', 'public, max-age=3600');
- return await reply.view('base-embed', {
+ return await HtmlTemplateService.replyHtml(reply, BaseEmbed({
title: this.meta.name ?? 'Misskey',
- ...await this.generateCommonPugData(this.meta),
- embedCtx: htmlSafeJsonStringify({
+ ...await this.htmlTemplateService.getCommonData(),
+ embedCtxJson: htmlSafeJsonStringify({
note: _note,
}),
- });
+ }));
});
fastify.get<{ Params: { clip: string; } }>('/embed/clips/:clip', async (request, reply) => {
@@ -853,48 +812,46 @@ export class ClientServerService {
const _clip = await this.clipEntityService.pack(clip);
reply.header('Cache-Control', 'public, max-age=3600');
- return await reply.view('base-embed', {
+ return await HtmlTemplateService.replyHtml(reply, BaseEmbed({
title: this.meta.name ?? 'Misskey',
- ...await this.generateCommonPugData(this.meta),
- embedCtx: htmlSafeJsonStringify({
+ ...await this.htmlTemplateService.getCommonData(),
+ embedCtxJson: htmlSafeJsonStringify({
clip: _clip,
}),
- });
+ }));
});
fastify.get('/embed/*', async (request, reply) => {
reply.removeHeader('X-Frame-Options');
reply.header('Cache-Control', 'public, max-age=3600');
- return await reply.view('base-embed', {
+ return await HtmlTemplateService.replyHtml(reply, BaseEmbed({
title: this.meta.name ?? 'Misskey',
- ...await this.generateCommonPugData(this.meta),
- });
+ ...await this.htmlTemplateService.getCommonData(),
+ }));
});
fastify.get('/_info_card_', async (request, reply) => {
reply.removeHeader('X-Frame-Options');
- return await reply.view('info-card', {
+ return await HtmlTemplateService.replyHtml(reply, InfoCardPage({
version: this.config.version,
- host: this.config.host,
+ config: this.config,
meta: this.meta,
- originalUsersCount: await this.usersRepository.countBy({ host: IsNull() }),
- originalNotesCount: await this.notesRepository.countBy({ userHost: IsNull() }),
- });
+ }));
});
//#endregion
fastify.get('/bios', async (request, reply) => {
- return await reply.view('bios', {
+ return await HtmlTemplateService.replyHtml(reply, BiosPage({
version: this.config.version,
- });
+ }));
});
fastify.get('/cli', async (request, reply) => {
- return await reply.view('cli', {
+ return await HtmlTemplateService.replyHtml(reply, CliPage({
version: this.config.version,
- });
+ }));
});
const override = (source: string, target: string, depth = 0) =>
@@ -917,7 +874,7 @@ export class ClientServerService {
reply.header('Clear-Site-Data', '"*"');
}
reply.header('Set-Cookie', 'http-flush-failed=1; Path=/flush; Max-Age=60');
- return await reply.view('flush');
+ return await HtmlTemplateService.replyHtml(reply, FlushPage());
});
// streamingに非WebSocketリクエストが来た場合にbase htmlをキャシュ付きで返すと、Proxy等でそのパスがキャッシュされておかしくなる
@@ -943,10 +900,10 @@ export class ClientServerService {
});
reply.code(500);
reply.header('Cache-Control', 'max-age=10, must-revalidate');
- return await reply.view('error', {
+ return await HtmlTemplateService.replyHtml(reply, ErrorPage({
code: error.code,
id: errId,
- });
+ }));
});
done();
diff --git a/packages/backend/src/server/web/HtmlTemplateService.ts b/packages/backend/src/server/web/HtmlTemplateService.ts
new file mode 100644
index 0000000000..8ff985530d
--- /dev/null
+++ b/packages/backend/src/server/web/HtmlTemplateService.ts
@@ -0,0 +1,105 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { dirname } from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { promises as fsp } from 'node:fs';
+import { languages } from 'i18n/const';
+import { Injectable, Inject } from '@nestjs/common';
+import { DI } from '@/di-symbols.js';
+import { bindThis } from '@/decorators.js';
+import { htmlSafeJsonStringify } from '@/misc/json-stringify-html-safe.js';
+import { MetaEntityService } from '@/core/entities/MetaEntityService.js';
+import type { FastifyReply } from 'fastify';
+import type { Config } from '@/config.js';
+import type { MiMeta } from '@/models/Meta.js';
+import type { CommonData } from './views/_.js';
+
+const _filename = fileURLToPath(import.meta.url);
+const _dirname = dirname(_filename);
+
+const frontendVitePublic = `${_dirname}/../../../../frontend/public/`;
+const frontendEmbedVitePublic = `${_dirname}/../../../../frontend-embed/public/`;
+
+@Injectable()
+export class HtmlTemplateService {
+ private frontendBootloadersFetched = false;
+ public frontendBootloaderJs: string | null = null;
+ public frontendBootloaderCss: string | null = null;
+ public frontendEmbedBootloaderJs: string | null = null;
+ public frontendEmbedBootloaderCss: string | null = null;
+
+ constructor(
+ @Inject(DI.config)
+ private config: Config,
+
+ @Inject(DI.meta)
+ private meta: MiMeta,
+
+ private metaEntityService: MetaEntityService,
+ ) {
+ }
+
+ @bindThis
+ private async prepareFrontendBootloaders() {
+ if (this.frontendBootloadersFetched) return;
+ this.frontendBootloadersFetched = true;
+
+ const [bootJs, bootCss, embedBootJs, embedBootCss] = await Promise.all([
+ fsp.readFile(`${frontendVitePublic}loader/boot.js`, 'utf-8').catch(() => null),
+ fsp.readFile(`${frontendVitePublic}loader/style.css`, 'utf-8').catch(() => null),
+ fsp.readFile(`${frontendEmbedVitePublic}loader/boot.js`, 'utf-8').catch(() => null),
+ fsp.readFile(`${frontendEmbedVitePublic}loader/style.css`, 'utf-8').catch(() => null),
+ ]);
+
+ if (bootJs != null) {
+ this.frontendBootloaderJs = bootJs;
+ }
+
+ if (bootCss != null) {
+ this.frontendBootloaderCss = bootCss;
+ }
+
+ if (embedBootJs != null) {
+ this.frontendEmbedBootloaderJs = embedBootJs;
+ }
+
+ if (embedBootCss != null) {
+ this.frontendEmbedBootloaderCss = embedBootCss;
+ }
+ }
+
+ @bindThis
+ public async getCommonData(): Promise {
+ await this.prepareFrontendBootloaders();
+
+ return {
+ version: this.config.version,
+ config: this.config,
+ langs: [...languages],
+ instanceName: this.meta.name ?? 'Misskey',
+ icon: this.meta.iconUrl,
+ appleTouchIcon: this.meta.app512IconUrl,
+ themeColor: this.meta.themeColor,
+ serverErrorImageUrl: this.meta.serverErrorImageUrl ?? 'https://xn--931a.moe/assets/error.jpg',
+ infoImageUrl: this.meta.infoImageUrl ?? 'https://xn--931a.moe/assets/info.jpg',
+ notFoundImageUrl: this.meta.notFoundImageUrl ?? 'https://xn--931a.moe/assets/not-found.jpg',
+ instanceUrl: this.config.url,
+ metaJson: htmlSafeJsonStringify(await this.metaEntityService.packDetailed(this.meta)),
+ now: Date.now(),
+ federationEnabled: this.meta.federation !== 'none',
+ frontendBootloaderJs: this.frontendBootloaderJs,
+ frontendBootloaderCss: this.frontendBootloaderCss,
+ frontendEmbedBootloaderJs: this.frontendEmbedBootloaderJs,
+ frontendEmbedBootloaderCss: this.frontendEmbedBootloaderCss,
+ };
+ }
+
+ public static async replyHtml(reply: FastifyReply, html: string | Promise) {
+ reply.header('Content-Type', 'text/html; charset=utf-8');
+ const _html = await html;
+ return reply.send(_html);
+ }
+}
diff --git a/packages/backend/src/server/web/UrlPreviewService.ts b/packages/backend/src/server/web/UrlPreviewService.ts
index b9a4015031..bd1dbb430c 100644
--- a/packages/backend/src/server/web/UrlPreviewService.ts
+++ b/packages/backend/src/server/web/UrlPreviewService.ts
@@ -4,8 +4,7 @@
*/
import { Inject, Injectable } from '@nestjs/common';
-import { summaly } from '@misskey-dev/summaly';
-import { SummalyResult } from '@misskey-dev/summaly/built/summary.js';
+import type { SummalyResult } from '@misskey-dev/summaly/built/summary.js';
import { DI } from '@/di-symbols.js';
import type { Config } from '@/config.js';
import { HttpRequestService } from '@/core/HttpRequestService.js';
@@ -113,7 +112,7 @@ export class UrlPreviewService {
}
}
- private fetchSummary(url: string, meta: MiMeta, lang?: string): Promise {
+ private async fetchSummary(url: string, meta: MiMeta, lang?: string): Promise {
const agent = this.config.proxy
? {
http: this.httpRequestService.httpAgent,
@@ -121,6 +120,8 @@ export class UrlPreviewService {
}
: undefined;
+ const { summaly } = await import('@misskey-dev/summaly');
+
return summaly(url, {
followRedirects: this.meta.urlPreviewAllowRedirect,
lang: lang ?? 'ja-JP',
diff --git a/packages/backend/src/server/web/views/_.ts b/packages/backend/src/server/web/views/_.ts
new file mode 100644
index 0000000000..ac7418f362
--- /dev/null
+++ b/packages/backend/src/server/web/views/_.ts
@@ -0,0 +1,49 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Config } from '@/config.js';
+
+export const comment = ``;
+
+export const defaultDescription = '✨🌎✨ A interplanetary communication platform ✨🚀✨';
+
+export type MinimumCommonData = {
+ version: string;
+ config: Config;
+};
+
+export type CommonData = MinimumCommonData & {
+ langs: string[];
+ instanceName: string;
+ icon: string | null;
+ appleTouchIcon: string | null;
+ themeColor: string | null;
+ serverErrorImageUrl: string;
+ infoImageUrl: string;
+ notFoundImageUrl: string;
+ instanceUrl: string;
+ now: number;
+ federationEnabled: boolean;
+ frontendBootloaderJs: string | null;
+ frontendBootloaderCss: string | null;
+ frontendEmbedBootloaderJs: string | null;
+ frontendEmbedBootloaderCss: string | null;
+ metaJson?: string;
+ clientCtxJson?: string;
+};
+
+export type CommonPropsMinimum> = MinimumCommonData & T;
+
+export type CommonProps> = CommonData & T;
diff --git a/packages/backend/src/server/web/views/_splash.tsx b/packages/backend/src/server/web/views/_splash.tsx
new file mode 100644
index 0000000000..ea79b8d61d
--- /dev/null
+++ b/packages/backend/src/server/web/views/_splash.tsx
@@ -0,0 +1,26 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export function Splash(props: {
+ icon?: string | null;
+}) {
+ return (
+
+

+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/announcement.pug b/packages/backend/src/server/web/views/announcement.pug
deleted file mode 100644
index 7a4052e8a4..0000000000
--- a/packages/backend/src/server/web/views/announcement.pug
+++ /dev/null
@@ -1,21 +0,0 @@
-extends ./base
-
-block vars
- - const title = announcement.title;
- - const description = announcement.text.length > 100 ? announcement.text.slice(0, 100) + '…' : announcement.text;
- - const url = `${config.url}/announcements/${announcement.id}`;
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content=description)
-
-block og
- meta(property='og:type' content='article')
- meta(property='og:title' content= title)
- meta(property='og:description' content= description)
- meta(property='og:url' content= url)
- if announcement.imageUrl
- meta(property='og:image' content=announcement.imageUrl)
- meta(property='twitter:card' content='summary_large_image')
diff --git a/packages/backend/src/server/web/views/announcement.tsx b/packages/backend/src/server/web/views/announcement.tsx
new file mode 100644
index 0000000000..bc1c808177
--- /dev/null
+++ b/packages/backend/src/server/web/views/announcement.tsx
@@ -0,0 +1,41 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function AnnouncementPage(props: CommonProps<{
+ announcement: Packed<'Announcement'>;
+}>) {
+ const description = props.announcement.text.length > 100 ? props.announcement.text.slice(0, 100) + '…' : props.announcement.text;
+
+ function ogBlock() {
+ return (
+ <>
+
+
+
+
+ {props.announcement.imageUrl ? (
+ <>
+
+
+ >
+ ) : null}
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/base-embed.pug b/packages/backend/src/server/web/views/base-embed.pug
deleted file mode 100644
index 29de86b8b6..0000000000
--- a/packages/backend/src/server/web/views/base-embed.pug
+++ /dev/null
@@ -1,71 +0,0 @@
-block vars
-
-block loadClientEntry
- - const entry = config.frontendEmbedEntry;
-
-doctype html
-
-html(class='embed')
-
- head
- meta(charset='utf-8')
- meta(name='application-name' content='Misskey')
- meta(name='referrer' content='origin')
- meta(name='theme-color' content= themeColor || '#86b300')
- meta(name='theme-color-orig' content= themeColor || '#86b300')
- meta(property='og:site_name' content= instanceName || 'Misskey')
- meta(property='instance_url' content= instanceUrl)
- meta(name='viewport' content='width=device-width, initial-scale=1')
- meta(name='format-detection' content='telephone=no,date=no,address=no,email=no,url=no')
- link(rel='icon' href= icon || '/favicon.ico')
- link(rel='apple-touch-icon' href= appleTouchIcon || '/apple-touch-icon.png')
-
- if !config.frontendEmbedManifestExists
- script(type="module" src="/embed_vite/@vite/client")
-
- if Array.isArray(entry.css)
- each href in entry.css
- link(rel='stylesheet' href=`/embed_vite/${href}`)
-
- title
- block title
- = title || 'Misskey'
-
- block meta
- meta(name='robots' content='noindex')
-
- style
- include ../style.embed.css
-
- script.
- var VERSION = "#{version}";
- var CLIENT_ENTRY = !{JSON.stringify(entry.file)};
-
- script(type='application/json' id='misskey_meta' data-generated-at=now)
- != metaJson
-
- script(type='application/json' id='misskey_embedCtx' data-generated-at=now)
- != embedCtx
-
- script
- include ../boot.embed.js
-
- body
- noscript: p
- | JavaScriptを有効にしてください
- br
- | Please turn on your JavaScript
- div#splash
- img#splashIcon(src= icon || '/static-assets/splash.png')
- div#splashSpinner
-
-
- block content
diff --git a/packages/backend/src/server/web/views/base-embed.tsx b/packages/backend/src/server/web/views/base-embed.tsx
new file mode 100644
index 0000000000..011b66592e
--- /dev/null
+++ b/packages/backend/src/server/web/views/base-embed.tsx
@@ -0,0 +1,88 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { comment } from '@/server/web/views/_.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Splash } from '@/server/web/views/_splash.js';
+import type { PropsWithChildren, Children } from '@kitajs/html';
+
+export function BaseEmbed(props: PropsWithChildren>) {
+ const now = Date.now();
+
+ // 変数名をsafeで始めることでエラーをスキップ
+ const safeMetaJson = props.metaJson;
+ const safeEmbedCtxJson = props.embedCtxJson;
+
+ return (
+ <>
+ {''}
+ {comment}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {!props.config.frontendEmbedManifestExists ? : null}
+
+ {props.config.frontendEmbedEntry.css != null ? props.config.frontendEmbedEntry.css.map((href) => (
+
+ )) : null}
+
+ {props.titleSlot ?? {props.title || 'Misskey'}}
+
+ {props.metaSlot}
+
+
+
+ {props.frontendEmbedBootloaderCss != null ? : }
+
+
+
+ {safeMetaJson != null ? : null}
+ {safeEmbedCtxJson != null ? : null}
+
+ {props.frontendEmbedBootloaderJs != null ? : }
+
+
+
+
+ {props.children}
+
+
+ >
+ );
+}
+
diff --git a/packages/backend/src/server/web/views/base.pug b/packages/backend/src/server/web/views/base.pug
deleted file mode 100644
index 46b365a9c7..0000000000
--- a/packages/backend/src/server/web/views/base.pug
+++ /dev/null
@@ -1,100 +0,0 @@
-block vars
-
-block loadClientEntry
- - const entry = config.frontendEntry;
- - const baseUrl = config.url;
-
-doctype html
-
-//
- -
- _____ _ _
- | |_|___ ___| |_ ___ _ _
- | | | | |_ -|_ -| '_| -_| | |
- |_|_|_|_|___|___|_,_|___|_ |
- |___|
- Thank you for using Misskey!
- If you are reading this message... how about joining the development?
- https://github.com/misskey-dev/misskey
-
-
-html
-
- head
- meta(charset='utf-8')
- meta(name='application-name' content='Misskey')
- meta(name='referrer' content='origin')
- meta(name='theme-color' content= themeColor || '#86b300')
- meta(name='theme-color-orig' content= themeColor || '#86b300')
- meta(property='og:site_name' content= instanceName || 'Misskey')
- meta(property='instance_url' content= instanceUrl)
- meta(name='viewport' content='width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover')
- meta(name='format-detection' content='telephone=no,date=no,address=no,email=no,url=no')
- link(rel='icon' href= icon || '/favicon.ico')
- link(rel='apple-touch-icon' href= appleTouchIcon || '/apple-touch-icon.png')
- link(rel='manifest' href='/manifest.json')
- link(rel='search' type='application/opensearchdescription+xml' title=(title || "Misskey") href=`${baseUrl}/opensearch.xml`)
- link(rel='prefetch' href=serverErrorImageUrl)
- link(rel='prefetch' href=infoImageUrl)
- link(rel='prefetch' href=notFoundImageUrl)
-
- if !config.frontendManifestExists
- script(type="module" src="/vite/@vite/client")
-
- if Array.isArray(entry.css)
- each href in entry.css
- link(rel='stylesheet' href=`/vite/${href}`)
-
- title
- block title
- = title || 'Misskey'
-
- if noindex
- meta(name='robots' content='noindex')
-
- block desc
- meta(name='description' content= desc || '✨🌎✨ A interplanetary communication platform ✨🚀✨')
-
- block meta
-
- block og
- meta(property='og:title' content= title || 'Misskey')
- meta(property='og:description' content= desc || '✨🌎✨ A interplanetary communication platform ✨🚀✨')
- meta(property='og:image' content= img)
- meta(property='twitter:card' content='summary')
-
- style
- include ../style.css
-
- script.
- var VERSION = "#{version}";
- var CLIENT_ENTRY = !{JSON.stringify(entry.file)};
-
- script(type='application/json' id='misskey_meta' data-generated-at=now)
- != metaJson
-
- script(type='application/json' id='misskey_clientCtx' data-generated-at=now)
- != clientCtx
-
- script
- include ../boot.js
-
- body
- noscript: p
- | JavaScriptを有効にしてください
- br
- | Please turn on your JavaScript
- div#splash
- img#splashIcon(src= icon || '/static-assets/splash.png')
- div#splashSpinner
-
-
- block content
diff --git a/packages/backend/src/server/web/views/base.tsx b/packages/backend/src/server/web/views/base.tsx
new file mode 100644
index 0000000000..6fa3395fb8
--- /dev/null
+++ b/packages/backend/src/server/web/views/base.tsx
@@ -0,0 +1,108 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { comment, defaultDescription } from '@/server/web/views/_.js';
+import { Splash } from '@/server/web/views/_splash.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import type { PropsWithChildren, Children } from '@kitajs/html';
+
+export function Layout(props: PropsWithChildren>) {
+ const now = Date.now();
+
+ // 変数名をsafeで始めることでエラーをスキップ
+ const safeMetaJson = props.metaJson;
+ const safeClientCtxJson = props.clientCtxJson;
+
+ return (
+ <>
+ {''}
+ {comment}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {props.serverErrorImageUrl != null ? : null}
+ {props.infoImageUrl != null ? : null}
+ {props.notFoundImageUrl != null ? : null}
+
+ {!props.config.frontendManifestExists ? : null}
+
+ {props.config.frontendEntry.css != null ? props.config.frontendEntry.css.map((href) => (
+
+ )) : null}
+
+ {props.titleSlot ?? {props.title || 'Misskey'}}
+
+ {props.noindex ? : null}
+
+ {props.descSlot ?? (props.desc != null ? : null)}
+
+ {props.metaSlot}
+
+ {props.ogSlot ?? (
+ <>
+
+
+ {props.img != null ? : null}
+
+ >
+ )}
+
+ {props.frontendBootloaderCss != null ? : }
+
+
+
+ {safeMetaJson != null ? : null}
+ {safeClientCtxJson != null ? : null}
+
+ {props.frontendBootloaderJs != null ? : }
+
+
+
+
+ {props.children}
+
+
+ >
+ );
+}
+
+export { Layout as BasePage };
+
diff --git a/packages/backend/src/server/web/views/bios.pug b/packages/backend/src/server/web/views/bios.pug
deleted file mode 100644
index 39a151a29b..0000000000
--- a/packages/backend/src/server/web/views/bios.pug
+++ /dev/null
@@ -1,20 +0,0 @@
-doctype html
-
-html
-
- head
- meta(charset='utf-8')
- meta(name='application-name' content='Misskey')
- title Misskey Repair Tool
- style
- include ../bios.css
- script
- include ../bios.js
-
- body
- header
- h1 Misskey Repair Tool #{version}
- main
- div.tabs
- button#ls edit local storage
- div#content
diff --git a/packages/backend/src/server/web/views/bios.tsx b/packages/backend/src/server/web/views/bios.tsx
new file mode 100644
index 0000000000..9010de8d75
--- /dev/null
+++ b/packages/backend/src/server/web/views/bios.tsx
@@ -0,0 +1,35 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export function BiosPage(props: {
+ version: string;
+}) {
+ return (
+ <>
+ {''}
+
+
+
+
+ Misskey Repair Tool
+
+
+
+
+
+ Misskey Repair Tool {props.version}
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/packages/backend/src/server/web/views/channel.pug b/packages/backend/src/server/web/views/channel.pug
deleted file mode 100644
index c514025e0b..0000000000
--- a/packages/backend/src/server/web/views/channel.pug
+++ /dev/null
@@ -1,19 +0,0 @@
-extends ./base
-
-block vars
- - const title = channel.name;
- - const url = `${config.url}/channels/${channel.id}`;
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content= channel.description)
-
-block og
- meta(property='og:type' content='article')
- meta(property='og:title' content= title)
- meta(property='og:description' content= channel.description)
- meta(property='og:url' content= url)
- meta(property='og:image' content= channel.bannerUrl)
- meta(property='twitter:card' content='summary')
diff --git a/packages/backend/src/server/web/views/channel.tsx b/packages/backend/src/server/web/views/channel.tsx
new file mode 100644
index 0000000000..7d8123ea85
--- /dev/null
+++ b/packages/backend/src/server/web/views/channel.tsx
@@ -0,0 +1,40 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function ChannelPage(props: CommonProps<{
+ channel: Packed<'Channel'>;
+}>) {
+
+ function ogBlock() {
+ return (
+ <>
+
+
+ {props.channel.description != null ? : null}
+
+ {props.channel.bannerUrl ? (
+ <>
+
+
+ >
+ ) : null}
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/cli.pug b/packages/backend/src/server/web/views/cli.pug
deleted file mode 100644
index d2cf7c4335..0000000000
--- a/packages/backend/src/server/web/views/cli.pug
+++ /dev/null
@@ -1,21 +0,0 @@
-doctype html
-
-html
-
- head
- meta(charset='utf-8')
- meta(name='application-name' content='Misskey')
- title Misskey Cli
- style
- include ../cli.css
- script
- include ../cli.js
-
- body
- header
- h1 Misskey Cli #{version}
- main
- div#form
- textarea#text
- button#submit submit
- div#tl
diff --git a/packages/backend/src/server/web/views/cli.tsx b/packages/backend/src/server/web/views/cli.tsx
new file mode 100644
index 0000000000..009d982b35
--- /dev/null
+++ b/packages/backend/src/server/web/views/cli.tsx
@@ -0,0 +1,37 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export function CliPage(props: {
+ version: string;
+}) {
+ return (
+ <>
+ {''}
+
+
+
+
+ Misskey CLI Tool
+
+
+
+
+
+
+ Misskey CLI {props.version}
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/packages/backend/src/server/web/views/clip.pug b/packages/backend/src/server/web/views/clip.pug
deleted file mode 100644
index 5a0018803a..0000000000
--- a/packages/backend/src/server/web/views/clip.pug
+++ /dev/null
@@ -1,35 +0,0 @@
-extends ./base
-
-block vars
- - const user = clip.user;
- - const title = clip.name;
- - const url = `${config.url}/clips/${clip.id}`;
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content= clip.description)
-
-block og
- meta(property='og:type' content='article')
- meta(property='og:title' content= title)
- meta(property='og:description' content= clip.description)
- meta(property='og:url' content= url)
- meta(property='og:image' content= avatarUrl)
- meta(property='twitter:card' content='summary')
-
-block meta
- if profile.noCrawle
- meta(name='robots' content='noindex')
- if profile.preventAiLearning
- meta(name='robots' content='noimageai')
- meta(name='robots' content='noai')
-
- meta(name='misskey:user-username' content=user.username)
- meta(name='misskey:user-id' content=user.id)
- meta(name='misskey:clip-id' content=clip.id)
-
- // todo
- if user.twitter
- meta(name='twitter:creator' content=`@${user.twitter.screenName}`)
diff --git a/packages/backend/src/server/web/views/clip.tsx b/packages/backend/src/server/web/views/clip.tsx
new file mode 100644
index 0000000000..c3cc505e35
--- /dev/null
+++ b/packages/backend/src/server/web/views/clip.tsx
@@ -0,0 +1,59 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { MiUserProfile } from '@/models/UserProfile.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function ClipPage(props: CommonProps<{
+ clip: Packed<'Clip'>;
+ profile: MiUserProfile;
+}>) {
+ function ogBlock() {
+ return (
+ <>
+
+
+ {props.clip.description != null ? : null}
+
+ {props.clip.user.avatarUrl ? (
+ <>
+
+
+ >
+ ) : null}
+ >
+ );
+ }
+
+ function metaBlock() {
+ return (
+ <>
+ {props.profile.noCrawle ? : null}
+ {props.profile.preventAiLearning ? (
+ <>
+
+
+ >
+ ) : null}
+
+
+
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/error.pug b/packages/backend/src/server/web/views/error.pug
deleted file mode 100644
index 6a78d1878c..0000000000
--- a/packages/backend/src/server/web/views/error.pug
+++ /dev/null
@@ -1,71 +0,0 @@
-doctype html
-
-//
- -
- _____ _ _
- | |_|___ ___| |_ ___ _ _
- | | | | |_ -|_ -| '_| -_| | |
- |_|_|_|_|___|___|_,_|___|_ |
- |___|
- Thank you for using Misskey!
- If you are reading this message... how about joining the development?
- https://github.com/misskey-dev/misskey
-
-
-html
-
- head
- meta(charset='utf-8')
- meta(name='viewport' content='width=device-width, initial-scale=1')
- meta(name='application-name' content='Misskey')
- meta(name='referrer' content='origin')
-
- title
- block title
- = 'An error has occurred... | Misskey'
-
- style
- include ../error.css
-
- script
- include ../error.js
-
-body
- svg.icon-warning(xmlns="http://www.w3.org/2000/svg", viewBox="0 0 24 24", stroke-width="2", stroke="currentColor", fill="none", stroke-linecap="round", stroke-linejoin="round")
- path(stroke="none", d="M0 0h24v24H0z", fill="none")
- path(d="M12 9v2m0 4v.01")
- path(d="M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75")
-
- h1(data-i18n="title") Failed to initialize Misskey
-
- button.button-big(onclick="location.reload();")
- span.button-label-big(data-i18n-reload) Reload
-
- p(data-i18n="serverError") If reloading after a period of time does not resolve the problem, contact the server administrator with the following ERROR ID.
-
- div#errors
- code.
- ERROR CODE: #{code}
- ERROR ID: #{id}
-
- p
- b(data-i18n="solution") The following actions may solve the problem.
-
- p(data-i18n="solution1") Update your os and browser
- p(data-i18n="solution2") Disable an adblocker
- p(data-i18n="solution3") Clear your browser cache
- p(data-i18n="solution4") (Tor Browser) Set dom.webaudio.enabled to true
-
- details(style="color: #86b300;")
- summary(data-i18n="otherOption") Other options
- a(href="/flush")
- button.button-small
- span.button-label-small(data-i18n="otherOption1") Clear preferences and cache
- br
- a(href="/cli")
- button.button-small
- span.button-label-small(data-i18n="otherOption2") Start the simple client
- br
- a(href="/bios")
- button.button-small
- span.button-label-small(data-i18n="otherOption3") Start the repair tool
diff --git a/packages/backend/src/server/web/views/error.tsx b/packages/backend/src/server/web/views/error.tsx
new file mode 100644
index 0000000000..9d0e60aa30
--- /dev/null
+++ b/packages/backend/src/server/web/views/error.tsx
@@ -0,0 +1,89 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { comment } from '@/server/web/views/_.js';
+import type { CommonPropsMinimum } from '@/server/web/views/_.js';
+
+export function ErrorPage(props: {
+ title?: string;
+ code: string;
+ id: string;
+}) {
+ return (
+ <>
+ {''}
+ {comment}
+
+
+
+
+
+
+ {props.title ?? 'An error has occurred... | Misskey'}
+
+
+
+
+
+ Failed to initialize Misskey
+
+
+
+
+ If reloading after a period of time does not resolve the problem, contact the server administrator with the following ERROR ID.
+
+
+
+
+ ERROR CODE: {props.code}
+ ERROR ID: {props.id}
+
+
+
+ The following actions may solve the problem.
+
+ Update your os and browser
+ Disable an adblocker
+ Clear your browser cache
+ (Tor Browser) Set dom.webaudio.enabled to true
+
+
+ Other options
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/packages/backend/src/server/web/views/flash.pug b/packages/backend/src/server/web/views/flash.pug
deleted file mode 100644
index 1549aa7906..0000000000
--- a/packages/backend/src/server/web/views/flash.pug
+++ /dev/null
@@ -1,35 +0,0 @@
-extends ./base
-
-block vars
- - const user = flash.user;
- - const title = flash.title;
- - const url = `${config.url}/play/${flash.id}`;
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content= flash.summary)
-
-block og
- meta(property='og:type' content='article')
- meta(property='og:title' content= title)
- meta(property='og:description' content= flash.summary)
- meta(property='og:url' content= url)
- meta(property='og:image' content= avatarUrl)
- meta(property='twitter:card' content='summary')
-
-block meta
- if profile.noCrawle
- meta(name='robots' content='noindex')
- if profile.preventAiLearning
- meta(name='robots' content='noimageai')
- meta(name='robots' content='noai')
-
- meta(name='misskey:user-username' content=user.username)
- meta(name='misskey:user-id' content=user.id)
- meta(name='misskey:flash-id' content=flash.id)
-
- // todo
- if user.twitter
- meta(name='twitter:creator' content=`@${user.twitter.screenName}`)
diff --git a/packages/backend/src/server/web/views/flash.tsx b/packages/backend/src/server/web/views/flash.tsx
new file mode 100644
index 0000000000..25a6b2c0ae
--- /dev/null
+++ b/packages/backend/src/server/web/views/flash.tsx
@@ -0,0 +1,59 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { MiUserProfile } from '@/models/UserProfile.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function FlashPage(props: CommonProps<{
+ flash: Packed<'Flash'>;
+ profile: MiUserProfile;
+}>) {
+ function ogBlock() {
+ return (
+ <>
+
+
+
+
+ {props.flash.user.avatarUrl ? (
+ <>
+
+
+ >
+ ) : null}
+ >
+ );
+ }
+
+ function metaBlock() {
+ return (
+ <>
+ {props.profile.noCrawle ? : null}
+ {props.profile.preventAiLearning ? (
+ <>
+
+
+ >
+ ) : null}
+
+
+
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/flush.pug b/packages/backend/src/server/web/views/flush.pug
deleted file mode 100644
index 7884495d08..0000000000
--- a/packages/backend/src/server/web/views/flush.pug
+++ /dev/null
@@ -1,51 +0,0 @@
-doctype html
-
-html
- #msg
- script.
- const msg = document.getElementById('msg');
- const successText = `\nSuccess Flush! Back to Misskey\n成功しました。Misskeyを開き直してください。`;
-
- if (!document.cookie) {
- message('Your site data is fully cleared by your browser.');
- message(successText);
- } else {
- message('Your browser does not support Clear-Site-Data header. Start opportunistic flushing.');
- (async function() {
- try {
- localStorage.clear();
- message('localStorage cleared.');
-
- const idbPromises = ['MisskeyClient', 'keyval-store'].map((name, i, arr) => new Promise((res, rej) => {
- const delidb = indexedDB.deleteDatabase(name);
- delidb.onsuccess = () => res(message(`indexedDB "${name}" cleared. (${i + 1}/${arr.length})`));
- delidb.onerror = e => rej(e)
- }));
-
- await Promise.all(idbPromises);
-
- if (navigator.serviceWorker.controller) {
- navigator.serviceWorker.controller.postMessage('clear');
- await navigator.serviceWorker.getRegistrations()
- .then(registrations => {
- return Promise.all(registrations.map(registration => registration.unregister()));
- })
- .catch(e => { throw new Error(e) });
- }
-
- message(successText);
- } catch (e) {
- message(`\n${e}\n\nFlush Failed. Please retry.\n失敗しました。もう一度試してみてください。`);
- message(`\nIf you retry more than 3 times, try manually clearing the browser cache or contact to instance admin.\n3回以上試しても失敗する場合、ブラウザのキャッシュを手動で消去し、それでもだめならインスタンス管理者に連絡してみてください。\n`)
-
- console.error(e);
- setTimeout(() => {
- location = '/';
- }, 10000)
- }
- })();
- }
-
- function message(text) {
- msg.insertAdjacentHTML('beforeend', `[${(new Date()).toString()}] ${text.replace(/\n/g,'
')}
`)
- }
diff --git a/packages/backend/src/server/web/views/flush.tsx b/packages/backend/src/server/web/views/flush.tsx
new file mode 100644
index 0000000000..f3fdc8fcb0
--- /dev/null
+++ b/packages/backend/src/server/web/views/flush.tsx
@@ -0,0 +1,23 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export function FlushPage(props?: {}) {
+ return (
+ <>
+ {''}
+
+
+
+
+ Clear preferences and cache
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/packages/backend/src/server/web/views/gallery-post.pug b/packages/backend/src/server/web/views/gallery-post.pug
deleted file mode 100644
index 9ae25d9ac8..0000000000
--- a/packages/backend/src/server/web/views/gallery-post.pug
+++ /dev/null
@@ -1,41 +0,0 @@
-extends ./base
-
-block vars
- - const user = post.user;
- - const title = post.title;
- - const url = `${config.url}/gallery/${post.id}`;
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content= post.description)
-
-block og
- meta(property='og:type' content='article')
- meta(property='og:title' content= title)
- meta(property='og:description' content= post.description)
- meta(property='og:url' content= url)
- if post.isSensitive
- meta(property='og:image' content= avatarUrl)
- meta(property='twitter:card' content='summary')
- else
- meta(property='og:image' content= post.files[0].thumbnailUrl)
- meta(property='twitter:card' content='summary_large_image')
-
-block meta
- if user.host || profile.noCrawle
- meta(name='robots' content='noindex')
- if profile.preventAiLearning
- meta(name='robots' content='noimageai')
- meta(name='robots' content='noai')
-
- meta(name='misskey:user-username' content=user.username)
- meta(name='misskey:user-id' content=user.id)
-
- // todo
- if user.twitter
- meta(name='twitter:creator' content=`@${user.twitter.screenName}`)
-
- if !user.host
- link(rel='alternate' href=url type='application/activity+json')
diff --git a/packages/backend/src/server/web/views/gallery-post.tsx b/packages/backend/src/server/web/views/gallery-post.tsx
new file mode 100644
index 0000000000..2bec2de930
--- /dev/null
+++ b/packages/backend/src/server/web/views/gallery-post.tsx
@@ -0,0 +1,65 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { MiUserProfile } from '@/models/UserProfile.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function GalleryPostPage(props: CommonProps<{
+ galleryPost: Packed<'GalleryPost'>;
+ profile: MiUserProfile;
+}>) {
+ function ogBlock() {
+ return (
+ <>
+
+
+ {props.galleryPost.description != null ? : null}
+
+ {props.galleryPost.isSensitive && props.galleryPost.user.avatarUrl ? (
+ <>
+
+
+ >
+ ) : null}
+ {!props.galleryPost.isSensitive && props.galleryPost.files != null ? (
+ <>
+
+
+ >
+ ) : null}
+ >
+ );
+ }
+
+ function metaBlock() {
+ return (
+ <>
+ {props.profile.noCrawle ? : null}
+ {props.profile.preventAiLearning ? (
+ <>
+
+
+ >
+ ) : null}
+
+
+
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/info-card.pug b/packages/backend/src/server/web/views/info-card.pug
deleted file mode 100644
index 2a4954ec8b..0000000000
--- a/packages/backend/src/server/web/views/info-card.pug
+++ /dev/null
@@ -1,50 +0,0 @@
-doctype html
-
-html
-
- head
- meta(charset='utf-8')
- meta(name='application-name' content='Misskey')
- title= meta.name || host
- style.
- html, body {
- margin: 0;
- padding: 0;
- min-height: 100vh;
- background: #fff;
- }
-
- #a {
- display: block;
- }
-
- #banner {
- background-size: cover;
- background-position: center center;
- }
-
- #title {
- display: inline-block;
- margin: 24px;
- padding: 0.5em 0.8em;
- color: #fff;
- background: rgba(0, 0, 0, 0.5);
- font-weight: bold;
- font-size: 1.3em;
- }
-
- #content {
- overflow: auto;
- color: #353c3e;
- }
-
- #description {
- margin: 24px;
- }
-
- body
- a#a(href=`https://${host}` target="_blank")
- header#banner(style=`background-image: url(${meta.bannerUrl})`)
- div#title= meta.name || host
- div#content
- div#description!= meta.description
diff --git a/packages/backend/src/server/web/views/info-card.tsx b/packages/backend/src/server/web/views/info-card.tsx
new file mode 100644
index 0000000000..27be4c69e8
--- /dev/null
+++ b/packages/backend/src/server/web/views/info-card.tsx
@@ -0,0 +1,40 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { comment, CommonPropsMinimum } from '@/server/web/views/_.js';
+import type { MiMeta } from '@/models/Meta.js';
+
+export function InfoCardPage(props: CommonPropsMinimum<{
+ meta: MiMeta;
+}>) {
+ // 変数名をsafeで始めることでエラーをスキップ
+ const safeDescription = props.meta.description;
+
+ return (
+ <>
+ {''}
+ {comment}
+
+
+
+
+
+ {props.meta.name ?? props.config.url}
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/packages/backend/src/server/web/views/note.pug b/packages/backend/src/server/web/views/note.pug
deleted file mode 100644
index ea1993aed0..0000000000
--- a/packages/backend/src/server/web/views/note.pug
+++ /dev/null
@@ -1,62 +0,0 @@
-extends ./base
-
-block vars
- - const user = note.user;
- - const title = user.name ? `${user.name} (@${user.username}${user.host ? `@${user.host}` : ''})` : `@${user.username}${user.host ? `@${user.host}` : ''}`;
- - const url = `${config.url}/notes/${note.id}`;
- - const isRenote = note.renote && note.text == null && note.fileIds.length == 0 && note.poll == null;
- - const images = (note.files || []).filter(file => file.type.startsWith('image/') && !file.isSensitive)
- - const videos = (note.files || []).filter(file => file.type.startsWith('video/') && !file.isSensitive)
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content= summary)
-
-block og
- meta(property='og:type' content='article')
- meta(property='og:title' content= title)
- meta(property='og:description' content= summary)
- meta(property='og:url' content= url)
- if videos.length
- each video in videos
- meta(property='og:video:url' content= video.url)
- meta(property='og:video:secure_url' content= video.url)
- meta(property='og:video:type' content= video.type)
- // FIXME: add width and height
- // FIXME: add embed player for Twitter
- if images.length
- meta(property='twitter:card' content='summary_large_image')
- each image in images
- meta(property='og:image' content= image.url)
- else
- meta(property='twitter:card' content='summary')
- meta(property='og:image' content= avatarUrl)
-
-
-block meta
- if user.host || isRenote || profile.noCrawle
- meta(name='robots' content='noindex')
- if profile.preventAiLearning
- meta(name='robots' content='noimageai')
- meta(name='robots' content='noai')
-
- meta(name='misskey:user-username' content=user.username)
- meta(name='misskey:user-id' content=user.id)
- meta(name='misskey:note-id' content=note.id)
-
- // todo
- if user.twitter
- meta(name='twitter:creator' content=`@${user.twitter.screenName}`)
-
- if note.prev
- link(rel='prev' href=`${config.url}/notes/${note.prev}`)
- if note.next
- link(rel='next' href=`${config.url}/notes/${note.next}`)
-
- if federationEnabled
- if !user.host
- link(rel='alternate' href=url type='application/activity+json')
- if note.uri
- link(rel='alternate' href=note.uri type='application/activity+json')
diff --git a/packages/backend/src/server/web/views/note.tsx b/packages/backend/src/server/web/views/note.tsx
new file mode 100644
index 0000000000..803c3d2537
--- /dev/null
+++ b/packages/backend/src/server/web/views/note.tsx
@@ -0,0 +1,94 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { MiUserProfile } from '@/models/UserProfile.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+import { isRenotePacked } from '@/misc/is-renote.js';
+import { getNoteSummary } from '@/misc/get-note-summary.js';
+
+export function NotePage(props: CommonProps<{
+ note: Packed<'Note'>;
+ profile: MiUserProfile;
+}>) {
+ const title = props.note.user.name ? `${props.note.user.name} (@${props.note.user.username}${props.note.user.host ? `@${props.note.user.host}` : ''})` : `@${props.note.user.username}${props.note.user.host ? `@${props.note.user.host}` : ''}`
+ const isRenote = isRenotePacked(props.note);
+ const images = (props.note.files ?? []).filter(f => f.type.startsWith('image/'));
+ const videos = (props.note.files ?? []).filter(f => f.type.startsWith('video/'));
+ const summary = getNoteSummary(props.note);
+
+ function ogBlock() {
+ return (
+ <>
+
+
+
+
+ {videos.map(video => (
+ <>
+
+
+
+ {video.thumbnailUrl ? : null}
+ {video.properties.width != null ? : null}
+ {video.properties.height != null ? : null}
+ >
+ ))}
+ {images.length > 0 ? (
+ <>
+
+ {images.map(image => (
+ <>
+
+ {image.properties.width != null ? : null}
+ {image.properties.height != null ? : null}
+ >
+ ))}
+ >
+ ) : (
+ <>
+
+
+ >
+ )}
+ >
+ );
+ }
+
+ function metaBlock() {
+ return (
+ <>
+ {props.note.user.host != null || isRenote || props.profile.noCrawle ? : null}
+ {props.profile.preventAiLearning ? (
+ <>
+
+
+ >
+ ) : null}
+
+
+
+
+ {props.federationEnabled ? (
+ <>
+ {props.note.user.host == null ? : null}
+ {props.note.uri != null ? : null}
+ >
+ ) : null}
+ >
+ );
+ }
+
+ return (
+
+ )
+}
diff --git a/packages/backend/src/server/web/views/oauth.pug b/packages/backend/src/server/web/views/oauth.pug
deleted file mode 100644
index 4195ccc3a3..0000000000
--- a/packages/backend/src/server/web/views/oauth.pug
+++ /dev/null
@@ -1,11 +0,0 @@
-extends ./base
-
-block meta
- //- Should be removed by the page when it loads, so that it won't needlessly
- //- stay when user navigates away via the navigation bar
- //- XXX: Remove navigation bar in auth page?
- meta(name='misskey:oauth:transaction-id' content=transactionId)
- meta(name='misskey:oauth:client-name' content=clientName)
- if clientLogo
- meta(name='misskey:oauth:client-logo' content=clientLogo)
- meta(name='misskey:oauth:scope' content=scope)
diff --git a/packages/backend/src/server/web/views/oauth.tsx b/packages/backend/src/server/web/views/oauth.tsx
new file mode 100644
index 0000000000..d12b0d15fd
--- /dev/null
+++ b/packages/backend/src/server/web/views/oauth.tsx
@@ -0,0 +1,37 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function OAuthPage(props: CommonProps<{
+ transactionId: string;
+ clientName: string;
+ clientLogo?: string;
+ scope: string[];
+}>) {
+
+ //- Should be removed by the page when it loads, so that it won't needlessly
+ //- stay when user navigates away via the navigation bar
+ //- XXX: Remove navigation bar in auth page?
+ function metaBlock() {
+ return (
+ <>
+
+
+ {props.clientLogo ? : null}
+
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/page.pug b/packages/backend/src/server/web/views/page.pug
deleted file mode 100644
index 03c50eca8a..0000000000
--- a/packages/backend/src/server/web/views/page.pug
+++ /dev/null
@@ -1,35 +0,0 @@
-extends ./base
-
-block vars
- - const user = page.user;
- - const title = page.title;
- - const url = `${config.url}/@${user.username}/pages/${page.name}`;
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content= page.summary)
-
-block og
- meta(property='og:type' content='article')
- meta(property='og:title' content= title)
- meta(property='og:description' content= page.summary)
- meta(property='og:url' content= url)
- meta(property='og:image' content= page.eyeCatchingImage ? page.eyeCatchingImage.thumbnailUrl : avatarUrl)
- meta(property='twitter:card' content= page.eyeCatchingImage ? 'summary_large_image' : 'summary')
-
-block meta
- if profile.noCrawle
- meta(name='robots' content='noindex')
- if profile.preventAiLearning
- meta(name='robots' content='noimageai')
- meta(name='robots' content='noai')
-
- meta(name='misskey:user-username' content=user.username)
- meta(name='misskey:user-id' content=user.id)
- meta(name='misskey:page-id' content=page.id)
-
- // todo
- if user.twitter
- meta(name='twitter:creator' content=`@${user.twitter.screenName}`)
diff --git a/packages/backend/src/server/web/views/page.tsx b/packages/backend/src/server/web/views/page.tsx
new file mode 100644
index 0000000000..d0484612df
--- /dev/null
+++ b/packages/backend/src/server/web/views/page.tsx
@@ -0,0 +1,64 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { MiUserProfile } from '@/models/UserProfile.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function PagePage(props: CommonProps<{
+ page: Packed<'Page'>;
+ profile: MiUserProfile;
+}>) {
+ function ogBlock() {
+ return (
+ <>
+
+
+ {props.page.summary != null ? : null}
+
+ {props.page.eyeCatchingImage != null ? (
+ <>
+
+
+ >
+ ) : props.page.user.avatarUrl ? (
+ <>
+
+
+ >
+ ) : null}
+ >
+ );
+ }
+
+ function metaBlock() {
+ return (
+ <>
+ {props.profile.noCrawle ? : null}
+ {props.profile.preventAiLearning ? (
+ <>
+
+
+ >
+ ) : null}
+
+
+
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/reversi-game.pug b/packages/backend/src/server/web/views/reversi-game.pug
deleted file mode 100644
index 0b5ffb2bb0..0000000000
--- a/packages/backend/src/server/web/views/reversi-game.pug
+++ /dev/null
@@ -1,20 +0,0 @@
-extends ./base
-
-block vars
- - const user1 = game.user1;
- - const user2 = game.user2;
- - const title = `${user1.username} vs ${user2.username}`;
- - const url = `${config.url}/reversi/g/${game.id}`;
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content='⚫⚪Misskey Reversi⚪⚫')
-
-block og
- meta(property='og:type' content='article')
- meta(property='og:title' content= title)
- meta(property='og:description' content='⚫⚪Misskey Reversi⚪⚫')
- meta(property='og:url' content= url)
- meta(property='twitter:card' content='summary')
diff --git a/packages/backend/src/server/web/views/reversi-game.tsx b/packages/backend/src/server/web/views/reversi-game.tsx
new file mode 100644
index 0000000000..22609311fd
--- /dev/null
+++ b/packages/backend/src/server/web/views/reversi-game.tsx
@@ -0,0 +1,37 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function ReversiGamePage(props: CommonProps<{
+ reversiGame: Packed<'ReversiGameDetailed'>;
+}>) {
+ const title = `${props.reversiGame.user1.username} vs ${props.reversiGame.user2.username}`;
+ const description = `⚫⚪Misskey Reversi⚪⚫`;
+
+ function ogBlock() {
+ return (
+ <>
+
+
+
+
+
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/src/server/web/views/user.pug b/packages/backend/src/server/web/views/user.pug
deleted file mode 100644
index b9f740f5b6..0000000000
--- a/packages/backend/src/server/web/views/user.pug
+++ /dev/null
@@ -1,44 +0,0 @@
-extends ./base
-
-block vars
- - const title = user.name ? `${user.name} (@${user.username}${user.host ? `@${user.host}` : ''})` : `@${user.username}${user.host ? `@${user.host}` : ''}`;
- - const url = `${config.url}/@${(user.host ? `${user.username}@${user.host}` : user.username)}`;
-
-block title
- = `${title} | ${instanceName}`
-
-block desc
- meta(name='description' content= profile.description)
-
-block og
- meta(property='og:type' content='blog')
- meta(property='og:title' content= title)
- meta(property='og:description' content= profile.description)
- meta(property='og:url' content= url)
- meta(property='og:image' content= avatarUrl)
- meta(property='twitter:card' content='summary')
-
-block meta
- if user.host || profile.noCrawle
- meta(name='robots' content='noindex')
- if profile.preventAiLearning
- meta(name='robots' content='noimageai')
- meta(name='robots' content='noai')
-
- meta(name='misskey:user-username' content=user.username)
- meta(name='misskey:user-id' content=user.id)
-
- if profile.twitter
- meta(name='twitter:creator' content=`@${profile.twitter.screenName}`)
-
- if !sub
- if federationEnabled
- if !user.host
- link(rel='alternate' href=`${config.url}/users/${user.id}` type='application/activity+json')
- if user.uri
- link(rel='alternate' href=user.uri type='application/activity+json')
- if profile.url
- link(rel='alternate' href=profile.url type='text/html')
-
- each m in me
- link(rel='me' href=`${m}`)
diff --git a/packages/backend/src/server/web/views/user.tsx b/packages/backend/src/server/web/views/user.tsx
new file mode 100644
index 0000000000..76c2633ab9
--- /dev/null
+++ b/packages/backend/src/server/web/views/user.tsx
@@ -0,0 +1,74 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import type { Packed } from '@/misc/json-schema.js';
+import type { MiUserProfile } from '@/models/UserProfile.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Layout } from '@/server/web/views/base.js';
+
+export function UserPage(props: CommonProps<{
+ user: Packed<'UserDetailed'>;
+ profile: MiUserProfile;
+ sub?: string;
+}>) {
+ const title = props.user.name ? `${props.user.name} (@${props.user.username}${props.user.host ? `@${props.user.host}` : ''})` : `@${props.user.username}${props.user.host ? `@${props.user.host}` : ''}`;
+ const me = props.profile.fields
+ ? props.profile.fields
+ .filter(field => field.value != null && field.value.match(/^https?:/))
+ .map(field => field.value)
+ : [];
+
+ function ogBlock() {
+ return (
+ <>
+
+
+ {props.user.description != null ? : null}
+
+
+
+ >
+ );
+ }
+
+ function metaBlock() {
+ return (
+ <>
+ {props.user.host != null || props.profile.noCrawle ? : null}
+ {props.profile.preventAiLearning ? (
+ <>
+
+
+ >
+ ) : null}
+
+
+
+ {props.sub == null && props.federationEnabled ? (
+ <>
+ {props.user.host == null ? : null}
+ {props.user.uri != null ? : null}
+ {props.profile.url != null ? : null}
+ >
+ ) : null}
+
+ {me.map((url) => (
+
+ ))}
+ >
+ );
+ }
+
+ return (
+
+
+ );
+}
diff --git a/packages/backend/test-federation/.config/dummy.yml b/packages/backend/test-federation/.config/dummy.yml
new file mode 100644
index 0000000000..841cab9783
--- /dev/null
+++ b/packages/backend/test-federation/.config/dummy.yml
@@ -0,0 +1,2 @@
+url: https://example.com/
+port: 3000
diff --git a/packages/backend/test-federation/.config/example.config.json b/packages/backend/test-federation/.config/example.config.json
new file mode 100644
index 0000000000..2035d1a200
--- /dev/null
+++ b/packages/backend/test-federation/.config/example.config.json
@@ -0,0 +1,29 @@
+{
+ "url": "https://${HOST}/",
+ "port": 3000,
+ "db": {
+ "host": "db.${HOST}",
+ "port": 5432,
+ "db": "misskey",
+ "user": "postgres",
+ "pass": "postgres"
+ },
+ "dbReplications": false,
+ "trustProxy": true,
+ "redis": {
+ "host": "redis.test",
+ "port": 6379
+ },
+ "id": "aidx",
+ "proxyBypassHosts": [
+ "api.deepl.com",
+ "api-free.deepl.com",
+ "www.recaptcha.net",
+ "hcaptcha.com",
+ "challenges.cloudflare.com"
+ ],
+ "allowedPrivateNetworks": [
+ "127.0.0.1/32",
+ "172.20.0.0/16"
+ ]
+}
diff --git a/packages/backend/test-federation/.config/example.default.yml b/packages/backend/test-federation/.config/example.default.yml
deleted file mode 100644
index fd20613885..0000000000
--- a/packages/backend/test-federation/.config/example.default.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-url: https://${HOST}/
-port: 3000
-db:
- host: db.${HOST}
- port: 5432
- db: misskey
- user: postgres
- pass: postgres
-dbReplications: false
-redis:
- host: redis.test
- port: 6379
-id: 'aidx'
-proxyBypassHosts:
- - api.deepl.com
- - api-free.deepl.com
- - www.recaptcha.net
- - hcaptcha.com
- - challenges.cloudflare.com
-allowedPrivateNetworks:
- - 127.0.0.1/32
- - 172.20.0.0/16
diff --git a/packages/backend/test-federation/compose.a.yml b/packages/backend/test-federation/compose.a.yml
index 6a305b404c..ec9a2cf2af 100644
--- a/packages/backend/test-federation/compose.a.yml
+++ b/packages/backend/test-federation/compose.a.yml
@@ -37,8 +37,8 @@ services:
- internal_network_a
volumes:
- type: bind
- source: ./.config/a.test.default.yml
- target: /misskey/.config/default.yml
+ source: ./.config/a.test.config.json
+ target: /misskey/built/._config_.json
read_only: true
db.a.test:
@@ -50,7 +50,7 @@ services:
volumes:
- type: bind
source: ./volumes/db.a
- target: /var/lib/postgresql/data
+ target: /var/lib/postgresql
bind:
create_host_path: true
diff --git a/packages/backend/test-federation/compose.b.yml b/packages/backend/test-federation/compose.b.yml
index 1158b53bae..9221934406 100644
--- a/packages/backend/test-federation/compose.b.yml
+++ b/packages/backend/test-federation/compose.b.yml
@@ -37,8 +37,8 @@ services:
- internal_network_b
volumes:
- type: bind
- source: ./.config/b.test.default.yml
- target: /misskey/.config/default.yml
+ source: ./.config/b.test.config.json
+ target: /misskey/built/._config_.json
read_only: true
db.b.test:
@@ -50,7 +50,7 @@ services:
volumes:
- type: bind
source: ./volumes/db.b
- target: /var/lib/postgresql/data
+ target: /var/lib/postgresql
bind:
create_host_path: true
diff --git a/packages/backend/test-federation/compose.tpl.yml b/packages/backend/test-federation/compose.tpl.yml
index 92b986736d..1404345e2a 100644
--- a/packages/backend/test-federation/compose.tpl.yml
+++ b/packages/backend/test-federation/compose.tpl.yml
@@ -21,6 +21,10 @@ services:
- type: bind
source: ../../../built
target: /misskey/built
+ read_only: false
+ - type: bind
+ source: ./.config/dummy.yml
+ target: /misskey/.config/default.yml
read_only: true
- type: bind
source: ../assets
@@ -42,6 +46,10 @@ services:
source: ../package.json
target: /misskey/packages/backend/package.json
read_only: true
+ - type: bind
+ source: ../scripts/compile_config.js
+ target: /misskey/packages/backend/scripts/compile_config.js
+ read_only: true
- type: bind
source: ../../misskey-js/built
target: /misskey/packages/misskey-js/built
@@ -50,6 +58,14 @@ services:
source: ../../misskey-js/package.json
target: /misskey/packages/misskey-js/package.json
read_only: true
+ - type: bind
+ source: ../../i18n/built
+ target: /misskey/packages/i18n/built
+ read_only: true
+ - type: bind
+ source: ../../i18n/package.json
+ target: /misskey/packages/i18n/package.json
+ read_only: true
- type: bind
source: ../../misskey-reversi/built
target: /misskey/packages/misskey-reversi/built
diff --git a/packages/backend/test-federation/compose.yml b/packages/backend/test-federation/compose.yml
index 330cc33854..4d1b4b0d60 100644
--- a/packages/backend/test-federation/compose.yml
+++ b/packages/backend/test-federation/compose.yml
@@ -54,6 +54,10 @@ services:
source: ../jest.js
target: /misskey/packages/backend/jest.js
read_only: true
+ - type: bind
+ source: ../scripts/compile_config.js
+ target: /misskey/packages/backend/scripts/compile_config.js
+ read_only: true
- type: bind
source: ../../misskey-js/built
target: /misskey/packages/misskey-js/built
@@ -62,6 +66,14 @@ services:
source: ../../misskey-js/package.json
target: /misskey/packages/misskey-js/package.json
read_only: true
+ - type: bind
+ source: ../../i18n/built
+ target: /misskey/packages/i18n/built
+ read_only: true
+ - type: bind
+ source: ../../i18n/package.json
+ target: /misskey/packages/i18n/package.json
+ read_only: true
- type: bind
source: ../../../package.json
target: /misskey/package.json
@@ -131,7 +143,7 @@ services:
bash -c "
npm install -g pnpm
pnpm -F backend i --frozen-lockfile
- pnpm exec tsc -p ./packages/backend/test-federation
+ pnpm exec tsgo -p ./packages/backend/test-federation
node ./packages/backend/test-federation/built/daemon.js
"
diff --git a/packages/backend/test-federation/setup.sh b/packages/backend/test-federation/setup.sh
index 1bc3a2a87c..15aa2eee7f 100644
--- a/packages/backend/test-federation/setup.sh
+++ b/packages/backend/test-federation/setup.sh
@@ -28,7 +28,7 @@ function generate {
-days 500
if [ ! -f .config/docker.env ]; then cp .config/example.docker.env .config/docker.env; fi
if [ ! -f .config/$1.conf ]; then sed "s/\${HOST}/$1/g" .config/example.conf > .config/$1.conf; fi
- if [ ! -f .config/$1.default.yml ]; then sed "s/\${HOST}/$1/g" .config/example.default.yml > .config/$1.default.yml; fi
+ if [ ! -f .config/$1.default.yml ]; then sed "s/\${HOST}/$1/g" .config/example.config.json > .config/$1.config.json; fi
}
generate a.test
diff --git a/packages/backend/test-federation/tsconfig.json b/packages/backend/test-federation/tsconfig.json
index 3a1cb3b9f3..8e74a62e81 100644
--- a/packages/backend/test-federation/tsconfig.json
+++ b/packages/backend/test-federation/tsconfig.json
@@ -13,12 +13,12 @@
/* Language and Environment */
"target": "ESNext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
- // "jsx": "preserve", /* Specify what JSX code is generated. */
+ "jsx": "react-jsx", /* Specify what JSX code is generated. */
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
- // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
+ "jsxImportSource": "@kitajs/html", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
diff --git a/packages/backend/test-server/tsconfig.json b/packages/backend/test-server/tsconfig.json
index 10313699c2..7ed7c10ed7 100644
--- a/packages/backend/test-server/tsconfig.json
+++ b/packages/backend/test-server/tsconfig.json
@@ -23,6 +23,8 @@
"emitDecoratorMetadata": true,
"resolveJsonModule": true,
"isolatedModules": true,
+ "jsx": "react-jsx",
+ "jsxImportSource": "@kitajs/html",
"rootDir": "../src",
"baseUrl": "./",
"paths": {
diff --git a/packages/backend/test/e2e/exports.ts b/packages/backend/test/e2e/exports.ts
index 1a703b3d36..19433f3c88 100644
--- a/packages/backend/test/e2e/exports.ts
+++ b/packages/backend/test/e2e/exports.ts
@@ -168,7 +168,36 @@ describe('export-clips', () => {
assert.strictEqual(exported[1].clipNotes[0].note.text, 'baz2');
});
- test('Clipping other user\'s note', async () => {
+ test('Clipping other user\'s note (followers only notes are excluded when not following)', async () => {
+ const res = await api('clips/create', {
+ name: 'kawaii',
+ description: 'kawaii',
+ }, alice);
+ assert.strictEqual(res.status, 200);
+ const clip = res.body;
+
+ const note = await post(bob, {
+ text: 'baz',
+ visibility: 'followers',
+ });
+
+ const res2 = await api('clips/add-note', {
+ clipId: clip.id,
+ noteId: note.id,
+ }, alice);
+ assert.strictEqual(res2.status, 204);
+
+ const res3 = await api('i/export-clips', {}, alice);
+ assert.strictEqual(res3.status, 204);
+
+ const exported = await pollFirstDriveFile();
+ assert.strictEqual(exported[0].clipNotes.length, 0);
+ });
+
+ test('Clipping other user\'s note (followers only notes are included when following)', async () => {
+ // Alice follows Bob
+ await api('following/create', { userId: bob.id }, alice);
+
const res = await api('clips/create', {
name: 'kawaii',
description: 'kawaii',
diff --git a/packages/backend/test/tsconfig.json b/packages/backend/test/tsconfig.json
index 2b562acda8..a2a86c696e 100644
--- a/packages/backend/test/tsconfig.json
+++ b/packages/backend/test/tsconfig.json
@@ -23,7 +23,8 @@
"emitDecoratorMetadata": true,
"resolveJsonModule": true,
"isolatedModules": true,
- "baseUrl": "./",
+ "jsx": "react-jsx",
+ "jsxImportSource": "@kitajs/html",
"paths": {
"@/*": ["../src/*"]
},
diff --git a/packages/backend/test/unit/misc/should-hide-note-by-time.ts b/packages/backend/test/unit/misc/should-hide-note-by-time.ts
new file mode 100644
index 0000000000..1c463c82c6
--- /dev/null
+++ b/packages/backend/test/unit/misc/should-hide-note-by-time.ts
@@ -0,0 +1,136 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { describe, expect, test, beforeEach, afterEach } from '@jest/globals';
+import * as lolex from '@sinonjs/fake-timers';
+import { shouldHideNoteByTime } from '@/misc/should-hide-note-by-time.js';
+
+describe('misc:should-hide-note-by-time', () => {
+ let clock: lolex.InstalledClock;
+ const epoch = Date.UTC(2000, 0, 1, 0, 0, 0);
+
+ beforeEach(() => {
+ clock = lolex.install({
+ // https://github.com/sinonjs/sinon/issues/2620
+ toFake: Object.keys(lolex.timers).filter((key) => !['nextTick', 'queueMicrotask'].includes(key)) as lolex.FakeMethod[],
+ now: new Date(epoch),
+ shouldClearNativeTimers: true,
+ });
+ });
+
+ afterEach(() => {
+ clock.uninstall();
+ });
+
+ describe('hiddenBefore が null または undefined の場合', () => {
+ test('hiddenBefore が null のときは false を返す(非表示機能が有効でない)', () => {
+ const createdAt = new Date(epoch - 86400000); // 1 day ago
+ expect(shouldHideNoteByTime(null, createdAt)).toBe(false);
+ });
+
+ test('hiddenBefore が undefined のときは false を返す(非表示機能が有効でない)', () => {
+ const createdAt = new Date(epoch - 86400000); // 1 day ago
+ expect(shouldHideNoteByTime(undefined, createdAt)).toBe(false);
+ });
+ });
+
+ describe('相対時間モード (hiddenBefore <= 0)', () => {
+ test('閾値内に作成されたノートは false を返す(作成からの経過時間がまだ短い→表示)', () => {
+ const hiddenBefore = -86400; // 1 day in seconds
+ const createdAt = new Date(epoch - 3600000); // 1 hour ago
+ expect(shouldHideNoteByTime(hiddenBefore, createdAt)).toBe(false);
+ });
+
+ test('閾値を超えて作成されたノートは true を返す(指定期間以上経過している→非表示)', () => {
+ const hiddenBefore = -86400; // 1 day in seconds
+ const createdAt = new Date(epoch - 172800000); // 2 days ago
+ expect(shouldHideNoteByTime(hiddenBefore, createdAt)).toBe(true);
+ });
+
+ test('ちょうど閾値で作成されたノートは true を返す(閾値に達したら非表示)', () => {
+ const hiddenBefore = -86400; // 1 day in seconds
+ const createdAt = new Date(epoch - 86400000); // exactly 1 day ago
+ expect(shouldHideNoteByTime(hiddenBefore, createdAt)).toBe(true);
+ });
+
+ test('異なる相対時間値で判定できる(1時間設定と3時間設定の異なる結果)', () => {
+ const createdAt = new Date(epoch - 7200000); // 2 hours ago
+ expect(shouldHideNoteByTime(-3600, createdAt)).toBe(true); // 1時間経過→非表示
+ expect(shouldHideNoteByTime(-10800, createdAt)).toBe(false); // 3時間未経過→表示
+ });
+
+ test('ISO 8601 形式の文字列の createdAt に対応できる(文字列でも正しく判定)', () => {
+ const createdAtString = new Date(epoch - 86400000).toISOString();
+ const hiddenBefore = -86400; // 1 day in seconds
+ expect(shouldHideNoteByTime(hiddenBefore, createdAtString)).toBe(true);
+ });
+
+ test('hiddenBefore が 0 の場合に対応できる(0秒以上経過で非表示→ほぼ全て非表示)', () => {
+ const hiddenBefore = 0;
+ const createdAt = new Date(epoch - 1); // 1ms ago
+ expect(shouldHideNoteByTime(hiddenBefore, createdAt)).toBe(true);
+ });
+ });
+
+ describe('絶対時間モード (hiddenBefore > 0)', () => {
+ test('閾値タイムスタンプより後に作成されたノートは false を返す(指定日時より後→表示)', () => {
+ const thresholdSeconds = Math.floor(epoch / 1000);
+ const createdAt = new Date(epoch + 3600000); // 1 hour from epoch
+ expect(shouldHideNoteByTime(thresholdSeconds, createdAt)).toBe(false);
+ });
+
+ test('閾値タイムスタンプより前に作成されたノートは true を返す(指定日時より前→非表示)', () => {
+ const thresholdSeconds = Math.floor(epoch / 1000);
+ const createdAt = new Date(epoch - 3600000); // 1 hour ago
+ expect(shouldHideNoteByTime(thresholdSeconds, createdAt)).toBe(true);
+ });
+
+ test('ちょうど閾値タイムスタンプで作成されたノートは true を返す(指定日時に達したら非表示)', () => {
+ const thresholdSeconds = Math.floor(epoch / 1000);
+ const createdAt = new Date(epoch); // exactly epoch
+ expect(shouldHideNoteByTime(thresholdSeconds, createdAt)).toBe(true);
+ });
+
+ test('ISO 8601 形式の文字列の createdAt に対応できる(文字列でも正しく判定)', () => {
+ const thresholdSeconds = Math.floor(epoch / 1000);
+ const createdAtString = new Date(epoch - 3600000).toISOString();
+ expect(shouldHideNoteByTime(thresholdSeconds, createdAtString)).toBe(true);
+ });
+
+ test('異なる閾値タイムスタンプで判定できる(2021年設定と現在より1時間前設定の異なる結果)', () => {
+ const thresholdSeconds = Math.floor((epoch - 86400000) / 1000); // 1 day ago
+ const createdAtBefore = new Date(epoch - 172800000); // 2 days ago
+ const createdAtAfter = new Date(epoch - 3600000); // 1 hour ago
+ expect(shouldHideNoteByTime(thresholdSeconds, createdAtBefore)).toBe(true); // 閾値より前→非表示
+ expect(shouldHideNoteByTime(thresholdSeconds, createdAtAfter)).toBe(false); // 閾値より後→表示
+ });
+ });
+
+ describe('エッジケース', () => {
+ test('相対時間モードで非常に古いノートに対応できる(非常に古い→閾値超→非表示)', () => {
+ const hiddenBefore = -1; // hide notes older than 1 second
+ const createdAt = new Date(epoch - 1000000); // very old
+ expect(shouldHideNoteByTime(hiddenBefore, createdAt)).toBe(true);
+ });
+
+ test('相対時間モードで非常に新しいノートに対応できる(非常に新しい→閾値未満→表示)', () => {
+ const hiddenBefore = -86400; // 1 day
+ const createdAt = new Date(epoch - 1); // 1ms ago
+ expect(shouldHideNoteByTime(hiddenBefore, createdAt)).toBe(false);
+ });
+
+ test('大きなタイムスタンプ値に対応できる(未来の日時を指定→現在のノートは全て非表示)', () => {
+ const thresholdSeconds = Math.floor(epoch / 1000) + 86400; // 1 day from epoch
+ const createdAt = new Date(epoch); // created epoch
+ expect(shouldHideNoteByTime(thresholdSeconds, createdAt)).toBe(true);
+ });
+
+ test('小さな相対時間値に対応できる(1秒設定で2秒前→非表示)', () => {
+ const hiddenBefore = -1; // 1 second
+ const createdAt = new Date(epoch - 2000); // 2 seconds ago
+ expect(shouldHideNoteByTime(hiddenBefore, createdAt)).toBe(true);
+ });
+ });
+});
diff --git a/packages/backend/tsconfig.json b/packages/backend/tsconfig.json
index 2b15a5cc7a..dac56f25de 100644
--- a/packages/backend/tsconfig.json
+++ b/packages/backend/tsconfig.json
@@ -23,12 +23,16 @@
"emitDecoratorMetadata": true,
"resolveJsonModule": true,
"isolatedModules": true,
+ "jsx": "react-jsx",
+ "jsxImportSource": "@kitajs/html",
"rootDir": "./src",
- "baseUrl": "./",
"paths": {
"@/*": ["./src/*"]
},
"outDir": "./built",
+ "plugins": [
+ {"name": "@kitajs/ts-html-plugin"}
+ ],
"types": [
"node"
],
@@ -43,7 +47,8 @@
},
"compileOnSave": false,
"include": [
- "./src/**/*.ts"
+ "./src/**/*.ts",
+ "./src/**/*.tsx"
],
"exclude": [
"./src/**/*.test.ts"
diff --git a/packages/frontend-builder/package.json b/packages/frontend-builder/package.json
index 37dd133fe6..e6e8899a12 100644
--- a/packages/frontend-builder/package.json
+++ b/packages/frontend-builder/package.json
@@ -3,7 +3,7 @@
"type": "module",
"scripts": {
"eslint": "eslint './**/*.{js,jsx,ts,tsx}'",
- "typecheck": "tsc --noEmit",
+ "typecheck": "tsgo --noEmit",
"lint": "pnpm typecheck && pnpm eslint"
},
"exports": {
@@ -11,16 +11,15 @@
},
"devDependencies": {
"@types/estree": "1.0.8",
- "@types/node": "24.10.1",
- "@typescript-eslint/eslint-plugin": "8.47.0",
- "@typescript-eslint/parser": "8.47.0",
- "rollup": "4.53.3",
- "typescript": "5.9.3"
+ "@types/node": "24.10.2",
+ "@typescript-eslint/eslint-plugin": "8.49.0",
+ "@typescript-eslint/parser": "8.49.0",
+ "rollup": "4.53.3"
},
"dependencies": {
"i18n": "workspace:*",
"estree-walker": "3.0.3",
"magic-string": "0.30.21",
- "vite": "7.2.4"
+ "vite": "7.2.7"
}
}
diff --git a/packages/frontend-builder/tsconfig.json b/packages/frontend-builder/tsconfig.json
index 9250b2f3da..ab943fded4 100644
--- a/packages/frontend-builder/tsconfig.json
+++ b/packages/frontend-builder/tsconfig.json
@@ -17,7 +17,6 @@
"noImplicitReturns": true,
"esModuleInterop": true,
"verbatimModuleSyntax": true,
- "baseUrl": ".",
"typeRoots": [
"./@types",
"./node_modules/@types"
diff --git a/packages/frontend-embed/package.json b/packages/frontend-embed/package.json
index c27583cf86..7a40ae3507 100644
--- a/packages/frontend-embed/package.json
+++ b/packages/frontend-embed/package.json
@@ -17,8 +17,6 @@
"@rollup/pluginutils": "5.3.0",
"@twemoji/parser": "16.0.0",
"@vitejs/plugin-vue": "6.0.2",
- "@vue/compiler-sfc": "3.5.24",
- "astring": "1.9.0",
"buraha": "0.0.1",
"estree-walker": "3.0.3",
"frontend-shared": "workspace:*",
@@ -28,15 +26,12 @@
"misskey-js": "workspace:*",
"punycode.js": "2.3.1",
"rollup": "4.53.3",
- "sass": "1.94.2",
- "shiki": "3.15.0",
+ "sass": "1.95.1",
+ "shiki": "3.19.0",
"tinycolor2": "1.6.0",
- "tsc-alias": "1.8.16",
- "tsconfig-paths": "4.2.0",
- "typescript": "5.9.3",
"uuid": "13.0.0",
- "vite": "7.2.4",
- "vue": "3.5.24"
+ "vite": "7.2.7",
+ "vue": "3.5.25"
},
"devDependencies": {
"@misskey-dev/summaly": "5.2.5",
@@ -44,30 +39,29 @@
"@testing-library/vue": "8.1.0",
"@types/estree": "1.0.8",
"@types/micromatch": "4.0.10",
- "@types/node": "24.10.1",
+ "@types/node": "24.10.2",
"@types/punycode.js": "npm:@types/punycode@2.1.4",
"@types/tinycolor2": "1.4.6",
"@types/ws": "8.18.1",
- "@typescript-eslint/eslint-plugin": "8.47.0",
- "@typescript-eslint/parser": "8.47.0",
- "@vitest/coverage-v8": "4.0.13",
- "@vue/runtime-core": "3.5.24",
+ "@typescript-eslint/eslint-plugin": "8.49.0",
+ "@typescript-eslint/parser": "8.49.0",
+ "@vitest/coverage-v8": "4.0.15",
+ "@vue/runtime-core": "3.5.25",
"acorn": "8.15.0",
"cross-env": "10.1.0",
"eslint-plugin-import": "2.32.0",
- "eslint-plugin-vue": "10.6.0",
- "fast-glob": "3.3.3",
- "happy-dom": "20.0.10",
+ "eslint-plugin-vue": "10.6.2",
+ "happy-dom": "20.0.11",
"intersection-observer": "0.12.2",
"micromatch": "4.0.8",
- "msw": "2.12.2",
+ "msw": "2.12.4",
"nodemon": "3.1.11",
- "prettier": "3.6.2",
+ "prettier": "3.7.4",
"start-server-and-test": "2.1.3",
- "tsx": "4.20.6",
+ "tsx": "4.21.0",
"vite-plugin-turbosnap": "1.0.3",
- "vue-component-type-helpers": "3.1.5",
+ "vue-component-type-helpers": "3.1.8",
"vue-eslint-parser": "10.2.0",
- "vue-tsc": "3.1.5"
+ "vue-tsc": "3.1.8"
}
}
diff --git a/packages/backend/src/server/web/boot.embed.js b/packages/frontend-embed/public/loader/boot.js
similarity index 99%
rename from packages/backend/src/server/web/boot.embed.js
rename to packages/frontend-embed/public/loader/boot.js
index ba6366b3db..9b3d27873b 100644
--- a/packages/backend/src/server/web/boot.embed.js
+++ b/packages/frontend-embed/public/loader/boot.js
@@ -70,6 +70,8 @@
importAppScript();
});
}
+
+ localStorage.setItem('lang', lang);
//#endregion
async function addStyle(styleText) {
diff --git a/packages/backend/src/server/web/style.embed.css b/packages/frontend-embed/public/loader/style.css
similarity index 100%
rename from packages/backend/src/server/web/style.embed.css
rename to packages/frontend-embed/public/loader/style.css
diff --git a/packages/frontend-embed/tsconfig.json b/packages/frontend-embed/tsconfig.json
index 63e637c844..6694a90716 100644
--- a/packages/frontend-embed/tsconfig.json
+++ b/packages/frontend-embed/tsconfig.json
@@ -22,7 +22,6 @@
"isolatedModules": true,
"useDefineForClassFields": true,
"verbatimModuleSyntax": true,
- "baseUrl": ".",
"paths": {
"@/*": ["./src/*"],
"@@/*": ["../frontend-shared/*"]
diff --git a/packages/frontend-shared/build.js b/packages/frontend-shared/build.js
index 9941114757..1f98267468 100644
--- a/packages/frontend-shared/build.js
+++ b/packages/frontend-shared/build.js
@@ -3,14 +3,13 @@ import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path';
import * as esbuild from 'esbuild';
import { build } from 'esbuild';
-import { globSync } from 'glob';
import { execa } from 'execa';
const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename);
const _package = JSON.parse(fs.readFileSync(_dirname + '/package.json', 'utf-8'));
-const entryPoints = globSync('./js/**/**.{ts,tsx}');
+const entryPoints = fs.globSync('./js/**/**.{ts,tsx}');
/** @type {import('esbuild').BuildOptions} */
const options = {
@@ -61,7 +60,7 @@ async function buildSrc() {
function buildDts() {
return execa(
- 'tsc',
+ 'tsgo',
[
'--project', 'tsconfig.json',
'--outDir', 'js-built',
diff --git a/packages/frontend-shared/js/emojilist.ts b/packages/frontend-shared/js/emojilist.ts
index 20ddd0f7d7..1cee7173bd 100644
--- a/packages/frontend-shared/js/emojilist.ts
+++ b/packages/frontend-shared/js/emojilist.ts
@@ -41,7 +41,7 @@ export const emojiCharByCategory = _charGroupByCategory;
export function getUnicodeEmojiOrNull(char: string): UnicodeEmojiDef | null {
// Colorize it because emojilist.json assumes that
- return unicodeEmojisMap.get(colorizeEmoji(char))
+ return unicodeEmojisMap.get(forceColorizeEmoji(char))
// カラースタイル絵文字がjsonに無い場合はテキストスタイル絵文字にフォールバックする
?? unicodeEmojisMap.get(char)
// それでも見つからない場合はnullを返す
@@ -54,12 +54,12 @@ export function getUnicodeEmoji(char: string): UnicodeEmojiDef | string {
}
export function isSupportedEmoji(char: string): boolean {
- return unicodeEmojisMap.has(colorizeEmoji(char)) || unicodeEmojisMap.has(char);
+ return unicodeEmojisMap.has(forceColorizeEmoji(char)) || unicodeEmojisMap.has(char);
}
export function getEmojiName(char: string): string {
// Colorize it because emojilist.json assumes that
- const idx = _indexByChar.get(colorizeEmoji(char)) ?? _indexByChar.get(char);
+ const idx = _indexByChar.get(forceColorizeEmoji(char)) ?? _indexByChar.get(char);
if (idx === undefined) {
// 絵文字情報がjsonに無い場合は名前の取得が出来ないのでそのまま返すしか無い
return char;
@@ -72,7 +72,24 @@ export function getEmojiName(char: string): string {
* テキストスタイル絵文字(U+260Eなどの1文字で表現される絵文字)をカラースタイル絵文字に変換します(VS16:U+FE0Fを付与)。
*/
export function colorizeEmoji(char: string) {
- return char.length === 1 ? `${char}\uFE0F` : char;
+ // <文字列>.length はコードポイント数ではなくUTF-16コードユニット数を返すため、サロゲートペアを含む絵文字で誤動作する。
+ // そのため、配列に変換してコードポイント数を数える方法を取る。
+ return Array.from(char).length === 1 ? `${char}\uFE0F` : char;
+}
+
+/**
+ * 文字種にかかわらず、カラースタイル絵文字への変換を試みます(本ファイルにある検索プログラム用・フォールバックが必須)。
+ */
+function forceColorizeEmoji(char: string) {
+ // <文字列>.length はコードポイント数ではなくUTF-16コードユニット数を返すため、サロゲートペアを含む絵文字で誤動作する。
+ // そのため、配列に変換してコードポイント数を数える方法を取る。
+ const chars = Array.from(char);
+ if (chars.includes('\uFE0F')) {
+ return char;
+ } else {
+ chars.splice(1, 0, '\uFE0F');
+ return chars.join('');
+ }
}
export interface CustomEmojiFolderTree {
diff --git a/packages/frontend-shared/package.json b/packages/frontend-shared/package.json
index 5806414930..b8c927804e 100644
--- a/packages/frontend-shared/package.json
+++ b/packages/frontend-shared/package.json
@@ -17,17 +17,16 @@
"build": "node ./build.js",
"watch": "nodemon -w package.json -e json --exec \"node ./build.js --watch\"",
"eslint": "eslint './**/*.{js,jsx,ts,tsx}'",
- "typecheck": "tsc --noEmit",
+ "typecheck": "tsgo --noEmit",
"lint": "pnpm typecheck && pnpm eslint"
},
"devDependencies": {
- "@types/node": "24.10.1",
- "@typescript-eslint/eslint-plugin": "8.47.0",
- "@typescript-eslint/parser": "8.47.0",
- "esbuild": "0.27.0",
- "eslint-plugin-vue": "10.6.0",
+ "@types/node": "24.10.2",
+ "@typescript-eslint/eslint-plugin": "8.49.0",
+ "@typescript-eslint/parser": "8.49.0",
+ "esbuild": "0.27.1",
+ "eslint-plugin-vue": "10.6.2",
"nodemon": "3.1.11",
- "typescript": "5.9.3",
"vue-eslint-parser": "10.2.0"
},
"files": [
@@ -36,6 +35,6 @@
"dependencies": {
"i18n": "workspace:*",
"misskey-js": "workspace:*",
- "vue": "3.5.24"
+ "vue": "3.5.25"
}
}
diff --git a/packages/frontend-shared/tsconfig.json b/packages/frontend-shared/tsconfig.json
index 12f00eb503..6b1804a0fc 100644
--- a/packages/frontend-shared/tsconfig.json
+++ b/packages/frontend-shared/tsconfig.json
@@ -17,7 +17,6 @@
"noImplicitReturns": true,
"esModuleInterop": true,
"verbatimModuleSyntax": true,
- "baseUrl": ".",
"paths": {
"@/*": ["./*"],
"@@/*": ["./*"]
diff --git a/packages/frontend/.storybook/generate.tsx b/packages/frontend/.storybook/generate.tsx
index 89d4214141..6005049dde 100644
--- a/packages/frontend/.storybook/generate.tsx
+++ b/packages/frontend/.storybook/generate.tsx
@@ -3,12 +3,11 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { existsSync, readFileSync } from 'node:fs';
+import { existsSync, readFileSync, globSync } from 'node:fs';
import { writeFile } from 'node:fs/promises';
import { basename, dirname } from 'node:path/posix';
import { GENERATOR, type State, generate } from 'astring';
import type * as estree from 'estree';
-import glob from 'fast-glob';
import { format } from 'prettier';
interface SatisfiesExpression extends estree.BaseExpression {
@@ -439,38 +438,37 @@ function toStories(component: string): Promise {
// glob('src/{components,pages,ui,widgets}/**/*.vue')
(async () => {
- const globs = await Promise.all([
- glob('src/components/global/Mk*.vue'),
- glob('src/components/global/RouterView.vue'),
- glob('src/components/MkAbuseReportWindow.vue'),
- glob('src/components/MkAccountMoved.vue'),
- glob('src/components/MkAchievements.vue'),
- glob('src/components/MkAnalogClock.vue'),
- glob('src/components/MkAnimBg.vue'),
- glob('src/components/MkAnnouncementDialog.vue'),
- glob('src/components/MkAntennaEditor.vue'),
- glob('src/components/MkAntennaEditorDialog.vue'),
- glob('src/components/MkAsUi.vue'),
- glob('src/components/MkAutocomplete.vue'),
- glob('src/components/MkAvatars.vue'),
- glob('src/components/Mk[B-E]*.vue'),
- glob('src/components/MkFlashPreview.vue'),
- glob('src/components/MkGalleryPostPreview.vue'),
- glob('src/components/MkSignupServerRules.vue'),
- glob('src/components/MkUserSetupDialog.vue'),
- glob('src/components/MkUserSetupDialog.*.vue'),
- glob('src/components/MkImgPreviewDialog.vue'),
- glob('src/components/MkInstanceCardMini.vue'),
- glob('src/components/MkInviteCode.vue'),
- glob('src/components/MkTagItem.vue'),
- glob('src/components/MkRoleSelectDialog.vue'),
- glob('src/components/grid/MkGrid.vue'),
- glob('src/pages/admin/custom-emojis-manager2.vue'),
- glob('src/pages/admin/overview.ap-requests.vue'),
- glob('src/pages/user/home.vue'),
- glob('src/pages/search.vue'),
- ]);
- const components = globs.flat();
+ const components = [
+ globSync('src/components/global/Mk*.vue'),
+ globSync('src/components/global/RouterView.vue'),
+ globSync('src/components/MkAbuseReportWindow.vue'),
+ globSync('src/components/MkAccountMoved.vue'),
+ globSync('src/components/MkAchievements.vue'),
+ globSync('src/components/MkAnalogClock.vue'),
+ globSync('src/components/MkAnimBg.vue'),
+ globSync('src/components/MkAnnouncementDialog.vue'),
+ globSync('src/components/MkAntennaEditor.vue'),
+ globSync('src/components/MkAntennaEditorDialog.vue'),
+ globSync('src/components/MkAsUi.vue'),
+ globSync('src/components/MkAutocomplete.vue'),
+ globSync('src/components/MkAvatars.vue'),
+ globSync('src/components/Mk[B-E]*.vue'),
+ globSync('src/components/MkFlashPreview.vue'),
+ globSync('src/components/MkGalleryPostPreview.vue'),
+ globSync('src/components/MkSignupServerRules.vue'),
+ globSync('src/components/MkUserSetupDialog.vue'),
+ globSync('src/components/MkUserSetupDialog.*.vue'),
+ globSync('src/components/MkImgPreviewDialog.vue'),
+ globSync('src/components/MkInstanceCardMini.vue'),
+ globSync('src/components/MkInviteCode.vue'),
+ globSync('src/components/MkTagItem.vue'),
+ globSync('src/components/MkRoleSelectDialog.vue'),
+ globSync('src/components/grid/MkGrid.vue'),
+ globSync('src/pages/admin/custom-emojis-manager2.vue'),
+ globSync('src/pages/admin/overview.ap-requests.vue'),
+ globSync('src/pages/user/home.vue'),
+ globSync('src/pages/search.vue'),
+ ].flat();
await Promise.all(components.map(async (component) => {
const stories = component.replace(/\.vue$/, '.stories.ts');
await writeFile(stories, await toStories(component));
diff --git a/packages/frontend/lib/vite-plugin-create-search-index.ts b/packages/frontend/lib/vite-plugin-create-search-index.ts
index f17b43b0e3..cfbba0823c 100644
--- a/packages/frontend/lib/vite-plugin-create-search-index.ts
+++ b/packages/frontend/lib/vite-plugin-create-search-index.ts
@@ -16,7 +16,6 @@ import {
type PluginOption
} from 'vite';
import fs from 'node:fs';
-import { glob } from 'glob';
import JSON5 from 'json5';
import MagicString, { SourceMap } from 'magic-string';
import path from 'node:path'
@@ -724,7 +723,7 @@ export function pluginCreateSearchIndexVirtualModule(options: Options, asigner:
async load(id) {
if (id == '\0' + allSearchIndexFile) {
- const files = await Promise.all(options.targetFilePaths.map(async (filePathPattern) => await glob(filePathPattern))).then(paths => paths.flat());
+ const files = options.targetFilePaths.map((filePathPattern) => fs.globSync(filePathPattern)).flat();
let generatedFile = '';
let arrayElements = '';
for (let file of files) {
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index c3baf5ea74..932fd7fad1 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -6,7 +6,7 @@
"watch": "vite",
"build": "tsx build.ts",
"storybook-dev": "nodemon --verbose --watch src --ext \"mdx,ts,vue\" --ignore \"*.stories.ts\" --exec \"pnpm build-storybook-pre && pnpm exec storybook dev -p 6006 --ci\"",
- "build-storybook-pre": "(tsc -p .storybook || echo done.) && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js",
+ "build-storybook-pre": "(tsgo -p .storybook || echo done.) && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js",
"build-storybook": "pnpm build-storybook-pre && storybook build --webpack-stats-json storybook-static",
"chromatic": "chromatic",
"test": "vitest --run --globals",
@@ -19,21 +19,19 @@
"@analytics/google-analytics": "1.1.0",
"@discordapp/twemoji": "16.0.1",
"@github/webauthn-json": "2.1.1",
- "@mcaptcha/vanilla-glue": "0.1.0-alpha-3",
+ "@mcaptcha/vanilla-glue": "0.1.0-rc2",
"i18n": "workspace:*",
"@misskey-dev/browser-image-resizer": "2024.1.0",
"@rollup/plugin-json": "6.1.0",
"@rollup/plugin-replace": "6.0.3",
"@rollup/pluginutils": "5.3.0",
- "@sentry/vue": "10.26.0",
+ "@sentry/vue": "10.29.0",
"@syuilo/aiscript": "1.2.0",
"@syuilo/aiscript-0-19-0": "npm:@syuilo/aiscript@^0.19.0",
"@twemoji/parser": "16.0.0",
"@vitejs/plugin-vue": "6.0.2",
- "@vue/compiler-sfc": "3.5.24",
- "aiscript-vscode": "github:aiscript-dev/aiscript-vscode#v0.1.15",
+ "aiscript-vscode": "github:aiscript-dev/aiscript-vscode#v0.1.16",
"analytics": "0.8.19",
- "astring": "1.9.0",
"broadcast-channel": "7.2.0",
"buraha": "0.0.1",
"canvas-confetti": "1.9.4",
@@ -46,10 +44,9 @@
"compare-versions": "6.1.1",
"cropperjs": "2.1.0",
"date-fns": "4.1.0",
- "estree-walker": "3.0.3",
"eventemitter3": "5.0.1",
- "execa": "9.6.0",
- "exifreader": "4.32.0",
+ "execa": "9.6.1",
+ "exifreader": "4.33.1",
"frontend-shared": "workspace:*",
"icons-subsetter": "workspace:*",
"idb-keyval": "6.2.2",
@@ -57,9 +54,8 @@
"ios-haptics": "0.1.4",
"is-file-animated": "1.0.2",
"json5": "2.2.3",
- "magic-string": "0.30.21",
"matter-js": "0.20.0",
- "mediabunny": "1.25.1",
+ "mediabunny": "1.25.8",
"mfm-js": "0.25.0",
"misskey-bubble-game": "workspace:*",
"misskey-js": "workspace:*",
@@ -70,19 +66,15 @@
"qr-scanner": "1.4.2",
"rollup": "4.53.3",
"sanitize-html": "2.17.0",
- "sass": "1.94.2",
- "shiki": "3.15.0",
- "strict-event-emitter-types": "2.0.0",
+ "sass": "1.95.1",
+ "shiki": "3.19.0",
"textarea-caret": "3.1.0",
"three": "0.181.2",
"throttle-debounce": "5.0.2",
"tinycolor2": "1.6.0",
- "tsc-alias": "1.8.16",
- "tsconfig-paths": "4.2.0",
- "typescript": "5.9.3",
"v-code-diff": "1.13.1",
- "vite": "7.2.4",
- "vue": "3.5.24",
+ "vite": "7.2.7",
+ "vue": "3.5.25",
"vuedraggable": "next",
"wanakana": "5.3.1"
},
@@ -90,7 +82,7 @@
"@misskey-dev/summaly": "5.2.5",
"@storybook/addon-essentials": "8.6.14",
"@storybook/addon-interactions": "8.6.14",
- "@storybook/addon-links": "10.0.8",
+ "@storybook/addon-links": "10.1.5",
"@storybook/addon-mdx-gfm": "8.6.14",
"@storybook/addon-storysource": "8.6.14",
"@storybook/blocks": "8.6.14",
@@ -98,58 +90,58 @@
"@storybook/core-events": "8.6.14",
"@storybook/manager-api": "8.6.14",
"@storybook/preview-api": "8.6.14",
- "@storybook/react": "10.0.8",
- "@storybook/react-vite": "10.0.8",
+ "@storybook/react": "10.1.5",
+ "@storybook/react-vite": "10.1.5",
"@storybook/test": "8.6.14",
"@storybook/theming": "8.6.14",
"@storybook/types": "8.6.14",
- "@storybook/vue3": "10.0.8",
- "@storybook/vue3-vite": "10.0.8",
+ "@storybook/vue3": "10.1.5",
+ "@storybook/vue3-vite": "10.1.5",
"@tabler/icons-webfont": "3.35.0",
"@testing-library/vue": "8.1.0",
"@types/canvas-confetti": "1.9.0",
"@types/estree": "1.0.8",
"@types/matter-js": "0.20.2",
"@types/micromatch": "4.0.10",
- "@types/node": "24.10.1",
+ "@types/node": "24.10.2",
"@types/punycode.js": "npm:@types/punycode@2.1.4",
"@types/sanitize-html": "2.16.0",
"@types/seedrandom": "3.0.8",
"@types/throttle-debounce": "5.0.2",
"@types/tinycolor2": "1.4.6",
- "@types/ws": "8.18.1",
- "@typescript-eslint/eslint-plugin": "8.47.0",
- "@typescript-eslint/parser": "8.47.0",
- "@vitest/coverage-v8": "4.0.13",
- "@vue/compiler-core": "3.5.24",
- "@vue/runtime-core": "3.5.24",
+ "@typescript-eslint/eslint-plugin": "8.49.0",
+ "@typescript-eslint/parser": "8.49.0",
+ "@vitest/coverage-v8": "4.0.15",
+ "@vue/compiler-core": "3.5.25",
"acorn": "8.15.0",
+ "astring": "1.9.0",
"cross-env": "10.1.0",
- "cypress": "15.7.0",
+ "cypress": "15.7.1",
"eslint-plugin-import": "2.32.0",
- "eslint-plugin-vue": "10.6.0",
- "fast-glob": "3.3.3",
- "happy-dom": "20.0.10",
+ "eslint-plugin-vue": "10.6.2",
+ "estree-walker": "3.0.3",
+ "happy-dom": "20.0.11",
"intersection-observer": "0.12.2",
+ "magic-string": "0.30.21",
"micromatch": "4.0.8",
"minimatch": "10.1.1",
- "msw": "2.12.2",
+ "msw": "2.12.4",
"msw-storybook-addon": "2.0.6",
"nodemon": "3.1.11",
- "prettier": "3.6.2",
- "react": "19.2.0",
- "react-dom": "19.2.0",
+ "prettier": "3.7.4",
+ "react": "19.2.1",
+ "react-dom": "19.2.1",
"seedrandom": "3.0.5",
"start-server-and-test": "2.1.3",
- "storybook": "10.0.8",
+ "storybook": "10.1.5",
"storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme",
- "tsx": "4.20.6",
- "vite-plugin-glsl": "1.5.4",
+ "tsx": "4.21.0",
+ "vite-plugin-glsl": "1.5.5",
"vite-plugin-turbosnap": "1.0.3",
- "vitest": "4.0.13",
+ "vitest": "4.0.15",
"vitest-fetch-mock": "0.4.5",
- "vue-component-type-helpers": "3.1.5",
+ "vue-component-type-helpers": "3.1.8",
"vue-eslint-parser": "10.2.0",
- "vue-tsc": "3.1.5"
+ "vue-tsc": "3.1.8"
}
}
diff --git a/packages/backend/src/server/web/boot.js b/packages/frontend/public/loader/boot.js
similarity index 99%
rename from packages/backend/src/server/web/boot.js
rename to packages/frontend/public/loader/boot.js
index ab4b158287..8aafb282aa 100644
--- a/packages/backend/src/server/web/boot.js
+++ b/packages/frontend/public/loader/boot.js
@@ -42,6 +42,8 @@
console.error('invalid lang value detected!!!', typeof lang, lang);
lang = 'en-US';
}
+
+ localStorage.setItem('lang', lang);
//#endregion
//#region Script
diff --git a/packages/backend/src/server/web/style.css b/packages/frontend/public/loader/style.css
similarity index 100%
rename from packages/backend/src/server/web/style.css
rename to packages/frontend/public/loader/style.css
diff --git a/packages/frontend/src/components/MkDrive.vue b/packages/frontend/src/components/MkDrive.vue
index b84532b40b..d8c949d8eb 100644
--- a/packages/frontend/src/components/MkDrive.vue
+++ b/packages/frontend/src/components/MkDrive.vue
@@ -83,34 +83,58 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts.loadMore }}
-
-
-
- {{ item.date.getFullYear() }}/{{ item.date.getMonth() + 1 }}
-
-
+
+
+
+
+ {{ item.date.getFullYear() }}/{{ item.date.getMonth() + 1 }}
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
{{ i18n.ts.loadMore }}
@@ -217,6 +241,7 @@ const foldersPaginator = markRaw(new Paginator('drive/folders', {
}));
const filesTimeline = makeDateGroupedTimelineComputedRef(filesPaginator.items, 'month');
+const shouldBeGroupedByDate = computed(() => ['+createdAt', '-createdAt'].includes(sortModeSelect.value));
watch(folder, () => emit('cd', folder.value));
watch(sortModeSelect, () => {
diff --git a/packages/frontend/src/components/MkImgPreviewDialog.vue b/packages/frontend/src/components/MkImgPreviewDialog.vue
index 3e6e4e0ec9..e17a1651cf 100644
--- a/packages/frontend/src/components/MkImgPreviewDialog.vue
+++ b/packages/frontend/src/components/MkImgPreviewDialog.vue
@@ -19,7 +19,7 @@ SPDX-License-Identifier: AGPL-3.0-only
@@ -345,7 +379,7 @@ window.document.documentElement.style.scrollBehavior = 'auto';
}
.bottomMenuButton {
- display: block;
+ display: inline-block;
height: 100%;
aspect-ratio: 1;
}
diff --git a/packages/frontend/src/ui/deck/antenna-column.vue b/packages/frontend/src/ui/deck/antenna-column.vue
index 0423a22ce1..1668af79ee 100644
--- a/packages/frontend/src/ui/deck/antenna-column.vue
+++ b/packages/frontend/src/ui/deck/antenna-column.vue
@@ -63,7 +63,7 @@ async function setAntenna() {
})),
} : undefined),
],
- default: props.column.antennaId,
+ default: antennas.find(x => x.id === props.column.antennaId)?.id,
});
if (canceled || antennaIdOrOperation == null) return;
diff --git a/packages/frontend/src/ui/deck/channel-column.vue b/packages/frontend/src/ui/deck/channel-column.vue
index 35ca9f5cc6..dd14e7019e 100644
--- a/packages/frontend/src/ui/deck/channel-column.vue
+++ b/packages/frontend/src/ui/deck/channel-column.vue
@@ -63,7 +63,7 @@ async function setChannel() {
items: channels.map(x => ({
value: x.id, label: x.name,
})),
- default: props.column.channelId,
+ default: channels.find(x => x.id === props.column.channelId)?.id,
});
if (canceled || chosenChannelId == null) return;
const chosenChannel = channels.find(x => x.id === chosenChannelId)!;
diff --git a/packages/frontend/src/ui/deck/list-column.vue b/packages/frontend/src/ui/deck/list-column.vue
index 7fb0aba1e1..6fc4680396 100644
--- a/packages/frontend/src/ui/deck/list-column.vue
+++ b/packages/frontend/src/ui/deck/list-column.vue
@@ -70,7 +70,7 @@ async function setList() {
})),
} : undefined),
],
- default: props.column.listId,
+ default: lists.find(x => x.id === props.column.listId)?.id,
});
if (canceled || listIdOrOperation == null) return;
diff --git a/packages/frontend/src/ui/deck/role-timeline-column.vue b/packages/frontend/src/ui/deck/role-timeline-column.vue
index beb679169c..1f6e8c73d5 100644
--- a/packages/frontend/src/ui/deck/role-timeline-column.vue
+++ b/packages/frontend/src/ui/deck/role-timeline-column.vue
@@ -54,7 +54,7 @@ async function setRole() {
items: roles.map(x => ({
value: x.id, label: x.name,
})),
- default: props.column.roleId,
+ default: roles.find(x => x.id === props.column.roleId)?.id,
});
if (canceled || roleId == null) return;
const role = roles.find(x => x.id === roleId)!;
diff --git a/packages/frontend/src/ui/deck/tl-column.vue b/packages/frontend/src/ui/deck/tl-column.vue
index afaa08e6d0..0e59913c4c 100644
--- a/packages/frontend/src/ui/deck/tl-column.vue
+++ b/packages/frontend/src/ui/deck/tl-column.vue
@@ -104,6 +104,7 @@ async function setType() {
}, {
value: 'global', label: i18n.ts._timelines.global,
}],
+ default: props.column.tl,
});
if (canceled) {
if (props.column.tl == null) {
diff --git a/packages/frontend/src/ui/universal.vue b/packages/frontend/src/ui/universal.vue
index 727fe08989..497ef72d04 100644
--- a/packages/frontend/src/ui/universal.vue
+++ b/packages/frontend/src/ui/universal.vue
@@ -8,7 +8,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
@@ -22,7 +22,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
@@ -64,7 +64,8 @@ const DESKTOP_THRESHOLD = 1100;
const MOBILE_THRESHOLD = 500;
// デスクトップでウィンドウを狭くしたときモバイルUIが表示されて欲しいことはあるので deviceKind === 'desktop' の判定は行わない
-const isDesktop = ref(window.innerWidth >= DESKTOP_THRESHOLD);
+const showWidgetsSide = window.innerWidth >= DESKTOP_THRESHOLD;
+
const isMobile = ref(deviceKind === 'smartphone' || window.innerWidth <= MOBILE_THRESHOLD);
window.addEventListener('resize', () => {
isMobile.value = deviceKind === 'smartphone' || window.innerWidth <= MOBILE_THRESHOLD;
@@ -102,14 +103,6 @@ if (window.innerWidth > 1024) {
}
}
-onMounted(() => {
- if (!isDesktop.value) {
- window.addEventListener('resize', () => {
- if (window.innerWidth >= DESKTOP_THRESHOLD) isDesktop.value = true;
- }, { passive: true });
- }
-});
-
const onContextmenu = (ev) => {
if (isLink(ev.target)) return;
if (['INPUT', 'TEXTAREA', 'IMG', 'VIDEO', 'CANVAS'].includes(ev.target.tagName) || ev.target.attributes['contenteditable']) return;
diff --git a/packages/frontend/src/utility/storage.ts b/packages/frontend/src/utility/storage.ts
new file mode 100644
index 0000000000..9df3a251e6
--- /dev/null
+++ b/packages/frontend/src/utility/storage.ts
@@ -0,0 +1,34 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { computed, ref, shallowRef, watch, defineAsyncComponent } from 'vue';
+import * as os from '@/os.js';
+import { store } from '@/store.js';
+import { i18n } from '@/i18n.js';
+
+export const storagePersisted = ref(await navigator.storage.persisted());
+
+export async function enableStoragePersistence() {
+ try {
+ const persisted = await navigator.storage.persist();
+ if (persisted) {
+ storagePersisted.value = true;
+ } else {
+ os.alert({
+ type: 'error',
+ text: i18n.ts.somethingHappened,
+ });
+ }
+ } catch (err) {
+ os.alert({
+ type: 'error',
+ text: i18n.ts.somethingHappened,
+ });
+ }
+}
+
+export function skipStoragePersistence() {
+ store.set('showStoragePersistenceSuggestion', false);
+}
diff --git a/packages/frontend/tsconfig.json b/packages/frontend/tsconfig.json
index 125a393417..492082d05b 100644
--- a/packages/frontend/tsconfig.json
+++ b/packages/frontend/tsconfig.json
@@ -23,7 +23,6 @@
"useDefineForClassFields": true,
"verbatimModuleSyntax": true,
"skipLibCheck": true,
- "baseUrl": ".",
"paths": {
"@/*": ["./src/*"],
"@@/*": ["../frontend-shared/*"]
diff --git a/packages/i18n/build.ts b/packages/i18n/build.ts
index a6bbf7dc63..3caddd0054 100644
--- a/packages/i18n/build.ts
+++ b/packages/i18n/build.ts
@@ -10,7 +10,6 @@ import { watch as chokidarWatch } from 'chokidar';
import * as esbuild from 'esbuild';
import { build } from 'esbuild';
import { execa } from 'execa';
-import { globSync } from 'glob';
import { generateLocaleInterface } from './scripts/generateLocaleInterface.js';
import type { BuildOptions, BuildResult, Plugin, PluginBuild } from 'esbuild';
@@ -22,7 +21,7 @@ const _rootPackage = JSON.parse(fs.readFileSync(resolve(_rootPackageDir, 'packag
const _frontendLocalesDir = resolve(_dirname, '../../built/_frontend_dist_/locales');
const _localesDir = resolve(_rootPackageDir, 'locales');
-const entryPoints = globSync('./src/**/**.{ts,tsx}');
+const entryPoints = fs.globSync('./src/**/**.{ts,tsx}');
const options: BuildOptions = {
entryPoints,
@@ -101,7 +100,7 @@ async function buildSrc(): Promise
{
function buildDts(): Promise {
return execa(
- 'tsc',
+ 'tsgo',
[
'--project', 'tsconfig.json',
'--rootDir', 'src',
diff --git a/packages/i18n/package.json b/packages/i18n/package.json
index d06e485da0..d862dc231e 100644
--- a/packages/i18n/package.json
+++ b/packages/i18n/package.json
@@ -8,6 +8,10 @@
".": {
"types": "./built/index.d.ts",
"import": "./built/index.js"
+ },
+ "./const": {
+ "types": "./built/const.d.ts",
+ "import": "./built/const.js"
}
},
"scripts": {
@@ -16,7 +20,7 @@
"build": "tsx ./build.ts",
"watch": "nodemon -w package.json -e json --exec \"tsx ./build.ts --watch\"",
"tsd": "tsd",
- "typecheck": "tsc --noEmit",
+ "typecheck": "tsgo --noEmit",
"lint": "pnpm typecheck && pnpm eslint",
"lint:fix": "pnpm eslint --fix"
},
@@ -25,16 +29,14 @@
],
"devDependencies": {
"@types/js-yaml": "4.0.9",
- "@types/node": "24.10.1",
- "@typescript-eslint/eslint-plugin": "8.47.0",
- "@typescript-eslint/parser": "8.47.0",
- "chokidar": "4.0.3",
- "esbuild": "0.27.0",
- "execa": "9.6.0",
- "glob": "11.1.0",
+ "@types/node": "24.10.2",
+ "@typescript-eslint/eslint-plugin": "8.49.0",
+ "@typescript-eslint/parser": "8.49.0",
+ "chokidar": "5.0.0",
+ "esbuild": "0.27.1",
+ "execa": "9.6.1",
"nodemon": "3.1.11",
- "tsx": "4.20.6",
- "typescript": "5.9.3"
+ "tsx": "4.21.0"
},
"dependencies": {
"js-yaml": "4.1.1"
diff --git a/packages/i18n/src/autogen/locale.ts b/packages/i18n/src/autogen/locale.ts
index 8f94aab555..96a728da63 100644
--- a/packages/i18n/src/autogen/locale.ts
+++ b/packages/i18n/src/autogen/locale.ts
@@ -6193,6 +6193,18 @@ export interface Locale extends ILocale {
* アニメーション画像を有効にする
*/
"enableAnimatedImages": string;
+ /**
+ * 設定の永続化
+ */
+ "settingsPersistence_title": string;
+ /**
+ * 設定の永続化を有効にすると、設定情報が失われるのを防止できます。
+ */
+ "settingsPersistence_description1": string;
+ /**
+ * 環境によっては有効化できない場合があります。
+ */
+ "settingsPersistence_description2": string;
"_chat": {
/**
* 送信者の名前を表示
@@ -10936,6 +10948,36 @@ export interface Locale extends ILocale {
* プロファイル情報のデバイス間同期を有効にする
*/
"enableSyncBetweenDevicesForProfiles": string;
+ /**
+ * UIの説明を見る
+ */
+ "showHowToUse": string;
+ "_howToUse": {
+ /**
+ * カラム追加
+ */
+ "addColumn_title": string;
+ /**
+ * カラムの種類を選んで追加できます。
+ */
+ "addColumn_description": string;
+ /**
+ * UI設定
+ */
+ "settings_title": string;
+ /**
+ * デッキUIの詳細設定を行えます。
+ */
+ "settings_description": string;
+ /**
+ * プロファイル切り替え
+ */
+ "switchProfile_title": string;
+ /**
+ * UIのレイアウトをプロファイルとして保存し、いつでも切り替えられるようにできます。
+ */
+ "switchProfile_description": string;
+ };
"_columns": {
/**
* メイン
diff --git a/packages/i18n/src/const.ts b/packages/i18n/src/const.ts
new file mode 100644
index 0000000000..bb690e7542
--- /dev/null
+++ b/packages/i18n/src/const.ts
@@ -0,0 +1,41 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export const languages = [
+ 'ar-SA',
+ 'ca-ES',
+ 'cs-CZ',
+ 'da-DK',
+ 'de-DE',
+ 'en-US',
+ 'es-ES',
+ 'fr-FR',
+ 'id-ID',
+ 'it-IT',
+ 'ja-JP',
+ 'ja-KS',
+ 'kab-KAB',
+ 'kn-IN',
+ 'ko-KR',
+ 'nl-NL',
+ 'no-NO',
+ 'pl-PL',
+ 'pt-PT',
+ 'ru-RU',
+ 'sk-SK',
+ 'th-TH',
+ 'tr-TR',
+ 'ug-CN',
+ 'uk-UA',
+ 'vi-VN',
+ 'zh-CN',
+ 'zh-TW',
+] as const;
+
+export const primaries = {
+ 'en': 'US',
+ 'ja': 'JP',
+ 'zh': 'CN',
+} as const satisfies Record;
diff --git a/packages/i18n/src/index.ts b/packages/i18n/src/index.ts
index e428267748..21d215159f 100644
--- a/packages/i18n/src/index.ts
+++ b/packages/i18n/src/index.ts
@@ -9,48 +9,12 @@
import * as fs from 'node:fs';
import * as yaml from 'js-yaml';
+import { languages, primaries } from './const.js';
import type { Locale } from './autogen/locale.js';
import type { ILocale, ParameterizedString } from './types.js';
-const languages = [
- 'ar-SA',
- 'ca-ES',
- 'cs-CZ',
- 'da-DK',
- 'de-DE',
- 'en-US',
- 'es-ES',
- 'fr-FR',
- 'id-ID',
- 'it-IT',
- 'ja-JP',
- 'ja-KS',
- 'kab-KAB',
- 'kn-IN',
- 'ko-KR',
- 'nl-NL',
- 'no-NO',
- 'pl-PL',
- 'pt-PT',
- 'ru-RU',
- 'sk-SK',
- 'th-TH',
- 'tr-TR',
- 'ug-CN',
- 'uk-UA',
- 'vi-VN',
- 'zh-CN',
- 'zh-TW',
-] as const;
-
type Language = typeof languages[number];
-const primaries = {
- 'en': 'US',
- 'ja': 'JP',
- 'zh': 'CN',
-} as const satisfies Record;
-
type PrimaryLang = keyof typeof primaries;
type Locales = Record;
@@ -161,6 +125,6 @@ async function writeFrontendLocalesJson(destDir: string, version: string): Promi
}
}
-export { locales, build, writeFrontendLocalesJson };
+export { locales, languages, build, writeFrontendLocalesJson };
export type { Language, Locale, ILocale, ParameterizedString };
export default locales;
diff --git a/packages/icons-subsetter/package.json b/packages/icons-subsetter/package.json
index 9ca6ee35cb..16668d0346 100644
--- a/packages/icons-subsetter/package.json
+++ b/packages/icons-subsetter/package.json
@@ -7,21 +7,19 @@
"scripts": {
"build": "tsx src/generator.ts",
"eslint": "eslint src/**/*.ts",
- "typecheck": "tsc --noEmit",
+ "typecheck": "tsgo --noEmit",
"lint": "pnpm typecheck && pnpm eslint"
},
"devDependencies": {
- "@types/node": "24.10.1",
+ "@types/node": "24.10.2",
"@types/wawoff2": "1.0.2",
- "@typescript-eslint/eslint-plugin": "8.47.0",
- "@typescript-eslint/parser": "8.47.0"
+ "@typescript-eslint/eslint-plugin": "8.49.0",
+ "@typescript-eslint/parser": "8.49.0"
},
"dependencies": {
"@tabler/icons-webfont": "3.35.0",
"harfbuzzjs": "0.4.13",
- "tiny-glob": "0.2.9",
- "tsx": "4.20.6",
- "typescript": "5.9.3",
+ "tsx": "4.21.0",
"wawoff2": "2.0.1"
},
"files": [
diff --git a/packages/icons-subsetter/src/generator.ts b/packages/icons-subsetter/src/generator.ts
index 1a9e3d8fd2..811972baae 100644
--- a/packages/icons-subsetter/src/generator.ts
+++ b/packages/icons-subsetter/src/generator.ts
@@ -3,9 +3,8 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { promises as fsp, existsSync } from 'fs';
-import path from 'path';
-import glob from 'tiny-glob';
+import { promises as fsp, existsSync } from 'node:fs';
+import path from 'node:path';
import { generateSubsettedFont } from './subsetter.js';
const filesToScan = {
@@ -47,8 +46,8 @@ async function main() {
const iconsToPack = new Set();
const cwd = path.resolve(process.cwd(), '../../');
- const files = await glob(dir, { cwd });
- for (const file of files) {
+ const files = fsp.glob(dir, { cwd });
+ for await (const file of files) {
//console.log(`Scanning ${file}`);
const content = await fsp.readFile(path.resolve(cwd, file), 'utf-8');
const classRegex = /ti-[a-z0-9-]+/g;
diff --git a/packages/misskey-bubble-game/build.js b/packages/misskey-bubble-game/build.js
index 5d534cc6fd..2e606f276f 100644
--- a/packages/misskey-bubble-game/build.js
+++ b/packages/misskey-bubble-game/build.js
@@ -3,14 +3,13 @@ import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path';
import * as esbuild from 'esbuild';
import { build } from 'esbuild';
-import { globSync } from 'glob';
import { execa } from 'execa';
const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename);
const _package = JSON.parse(fs.readFileSync(_dirname + '/package.json', 'utf-8'));
-const entryPoints = globSync('./src/**/**.{ts,tsx}');
+const entryPoints = fs.globSync('./src/**/**.{ts,tsx}');
/** @type {import('esbuild').BuildOptions} */
const options = {
@@ -59,7 +58,7 @@ async function buildSrc() {
function buildDts() {
return execa(
- 'tsc',
+ 'tsgo',
[
'--project', 'tsconfig.json',
'--outDir', 'built',
diff --git a/packages/misskey-bubble-game/package.json b/packages/misskey-bubble-game/package.json
index 5d3f386c96..0f04e5d5b3 100644
--- a/packages/misskey-bubble-game/package.json
+++ b/packages/misskey-bubble-game/package.json
@@ -20,20 +20,18 @@
"build": "node ./build.js",
"watch": "nodemon -w package.json -e json --exec \"node ./build.js --watch\"",
"eslint": "eslint './**/*.{js,jsx,ts,tsx}'",
- "typecheck": "tsc --noEmit",
+ "typecheck": "tsgo --noEmit",
"lint": "pnpm typecheck && pnpm eslint"
},
"devDependencies": {
"@types/matter-js": "0.20.2",
- "@types/node": "24.10.1",
+ "@types/node": "24.10.2",
"@types/seedrandom": "3.0.8",
- "@typescript-eslint/eslint-plugin": "8.47.0",
- "@typescript-eslint/parser": "8.47.0",
- "esbuild": "0.27.0",
- "execa": "9.6.0",
- "glob": "11.1.0",
- "nodemon": "3.1.11",
- "typescript": "5.9.3"
+ "@typescript-eslint/eslint-plugin": "8.49.0",
+ "@typescript-eslint/parser": "8.49.0",
+ "esbuild": "0.27.1",
+ "execa": "9.6.1",
+ "nodemon": "3.1.11"
},
"files": [
"built"
diff --git a/packages/misskey-js/build.js b/packages/misskey-js/build.js
index b794592815..befc605a08 100644
--- a/packages/misskey-js/build.js
+++ b/packages/misskey-js/build.js
@@ -3,14 +3,13 @@ import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path';
import * as esbuild from 'esbuild';
import { build } from 'esbuild';
-import { globSync } from 'glob';
import { execa } from 'execa';
const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename);
const _package = JSON.parse(fs.readFileSync(_dirname + '/package.json', 'utf-8'));
-const entryPoints = globSync('./src/**/**.{ts,tsx}');
+const entryPoints = fs.globSync('./src/**/**.{ts,tsx}');
/** @type {import('esbuild').BuildOptions} */
const options = {
@@ -60,7 +59,7 @@ async function buildSrc() {
function buildDts() {
return execa(
- 'tsc',
+ 'tsgo',
[
'--project', 'tsconfig.json',
'--outDir', 'built',
diff --git a/packages/misskey-js/generator/package.json b/packages/misskey-js/generator/package.json
index 7c4a12552d..b64428090d 100644
--- a/packages/misskey-js/generator/package.json
+++ b/packages/misskey-js/generator/package.json
@@ -8,14 +8,13 @@
},
"devDependencies": {
"@readme/openapi-parser": "5.2.1",
- "@types/node": "24.10.1",
- "@typescript-eslint/eslint-plugin": "8.47.0",
- "@typescript-eslint/parser": "8.47.0",
+ "@types/node": "24.10.2",
+ "@typescript-eslint/eslint-plugin": "8.49.0",
+ "@typescript-eslint/parser": "8.49.0",
"openapi-types": "12.1.3",
"openapi-typescript": "7.10.1",
"ts-case-convert": "2.1.0",
- "tsx": "4.20.6",
- "typescript": "5.9.3",
+ "tsx": "4.21.0",
"eslint": "9.39.1"
},
"files": [
diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json
index c05ff296df..f50d57b94a 100644
--- a/packages/misskey-js/package.json
+++ b/packages/misskey-js/package.json
@@ -1,7 +1,7 @@
{
"type": "module",
"name": "misskey-js",
- "version": "2025.11.2-alpha.1",
+ "version": "2025.12.2",
"description": "Misskey SDK for JavaScript",
"license": "MIT",
"main": "./built/index.js",
@@ -25,7 +25,7 @@
"api": "pnpm api-extractor run --local --verbose",
"api-prod": "pnpm api-extractor run --verbose",
"eslint": "eslint './**/*.{js,jsx,ts,tsx}'",
- "typecheck": "tsc --noEmit",
+ "typecheck": "tsgo --noEmit",
"lint": "pnpm typecheck && pnpm eslint",
"vitest": "vitest run --coverage",
"test": "pnpm vitest && pnpm tsd",
@@ -37,19 +37,17 @@
"directory": "packages/misskey-js"
},
"devDependencies": {
- "@microsoft/api-extractor": "7.55.0",
- "@types/node": "24.10.1",
- "@typescript-eslint/eslint-plugin": "8.47.0",
- "@typescript-eslint/parser": "8.47.0",
- "@vitest/coverage-v8": "4.0.10",
- "esbuild": "0.27.0",
- "execa": "9.6.0",
- "glob": "13.0.0",
+ "@microsoft/api-extractor": "7.55.2",
+ "@types/node": "24.10.2",
+ "@typescript-eslint/eslint-plugin": "8.49.0",
+ "@typescript-eslint/parser": "8.49.0",
+ "@vitest/coverage-v8": "4.0.15",
+ "esbuild": "0.27.1",
+ "execa": "9.6.1",
"ncp": "2.0.0",
"nodemon": "3.1.11",
"tsd": "0.33.0",
- "typescript": "5.9.3",
- "vitest": "4.0.10",
+ "vitest": "4.0.15",
"vitest-websocket-mock": "0.5.0"
},
"files": [
diff --git a/packages/misskey-reversi/build.js b/packages/misskey-reversi/build.js
index 5d534cc6fd..2e606f276f 100644
--- a/packages/misskey-reversi/build.js
+++ b/packages/misskey-reversi/build.js
@@ -3,14 +3,13 @@ import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path';
import * as esbuild from 'esbuild';
import { build } from 'esbuild';
-import { globSync } from 'glob';
import { execa } from 'execa';
const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename);
const _package = JSON.parse(fs.readFileSync(_dirname + '/package.json', 'utf-8'));
-const entryPoints = globSync('./src/**/**.{ts,tsx}');
+const entryPoints = fs.globSync('./src/**/**.{ts,tsx}');
/** @type {import('esbuild').BuildOptions} */
const options = {
@@ -59,7 +58,7 @@ async function buildSrc() {
function buildDts() {
return execa(
- 'tsc',
+ 'tsgo',
[
'--project', 'tsconfig.json',
'--outDir', 'built',
diff --git a/packages/misskey-reversi/package.json b/packages/misskey-reversi/package.json
index 1e733ecbf4..6344f60bde 100644
--- a/packages/misskey-reversi/package.json
+++ b/packages/misskey-reversi/package.json
@@ -20,18 +20,16 @@
"build": "node ./build.js",
"watch": "nodemon -w package.json -e json --exec \"node ./build.js --watch\"",
"eslint": "eslint './**/*.{js,jsx,ts,tsx}'",
- "typecheck": "tsc --noEmit",
+ "typecheck": "tsgo --noEmit",
"lint": "pnpm typecheck && pnpm eslint"
},
"devDependencies": {
- "@types/node": "24.10.1",
- "@typescript-eslint/eslint-plugin": "8.47.0",
- "@typescript-eslint/parser": "8.47.0",
- "esbuild": "0.27.0",
- "execa": "9.6.0",
- "glob": "11.1.0",
- "nodemon": "3.1.11",
- "typescript": "5.9.3"
+ "@types/node": "24.10.2",
+ "@typescript-eslint/eslint-plugin": "8.49.0",
+ "@typescript-eslint/parser": "8.49.0",
+ "esbuild": "0.27.1",
+ "execa": "9.6.1",
+ "nodemon": "3.1.11"
},
"files": [
"built"
diff --git a/packages/sw/package.json b/packages/sw/package.json
index 0fe10256ce..12a89ffa96 100644
--- a/packages/sw/package.json
+++ b/packages/sw/package.json
@@ -4,22 +4,21 @@
"scripts": {
"watch": "nodemon -w ../../package.json -e json --exec \"node build.js watch\"",
"build": "node build.js",
- "typecheck": "tsc --noEmit",
+ "typecheck": "tsgo --noEmit",
"eslint": "eslint --quiet src/**/*.ts",
"lint": "pnpm typecheck && pnpm eslint"
},
"dependencies": {
"i18n": "workspace:*",
- "esbuild": "0.27.0",
+ "esbuild": "0.27.1",
"idb-keyval": "6.2.2",
"misskey-js": "workspace:*"
},
"devDependencies": {
- "@typescript-eslint/parser": "8.47.0",
+ "@typescript-eslint/parser": "8.49.0",
"@typescript/lib-webworker": "npm:@types/serviceworker@0.0.74",
"eslint-plugin-import": "2.32.0",
- "nodemon": "3.1.11",
- "typescript": "5.9.3"
+ "nodemon": "3.1.11"
},
"type": "module"
}
diff --git a/packages/sw/src/const.ts b/packages/sw/src/const.ts
new file mode 100644
index 0000000000..9dd9bad30f
--- /dev/null
+++ b/packages/sw/src/const.ts
@@ -0,0 +1,6 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export const FETCH_TIMEOUT_MS = 10000;
diff --git a/packages/sw/src/scripts/lang.ts b/packages/sw/src/scripts/lang.ts
index 40b6aa4e7b..63ac4ce399 100644
--- a/packages/sw/src/scripts/lang.ts
+++ b/packages/sw/src/scripts/lang.ts
@@ -8,6 +8,7 @@
*/
import { get, set } from 'idb-keyval';
import { I18n } from '@@/js/i18n.js';
+import { FETCH_TIMEOUT_MS } from '@/const.js';
import type { Locale } from 'i18n';
class SwLang {
@@ -37,11 +38,21 @@ class SwLang {
// _DEV_がtrueの場合は常に最新化
if (!localeRes || _DEV_) {
- localeRes = await fetch(localeUrl);
- const clone = localeRes.clone();
- if (!clone.clone().ok) throw new Error('locale fetching error');
+ const controller = new AbortController();
+ const timeout = globalThis.setTimeout(() => {
+ controller.abort('locale-fetch-timeout');
+ }, FETCH_TIMEOUT_MS);
- caches.open(this.cacheName).then(cache => cache.put(localeUrl, clone));
+ try {
+ localeRes = await fetch(localeUrl, { signal: controller.signal });
+
+ const clone = localeRes.clone();
+ if (!clone.clone().ok) throw new Error('locale fetching error');
+
+ caches.open(this.cacheName).then(cache => cache.put(localeUrl, clone));
+ } finally {
+ globalThis.clearTimeout(timeout);
+ }
}
return new I18n(await localeRes.json());
diff --git a/packages/sw/src/sw.ts b/packages/sw/src/sw.ts
index 5cece73401..2bccbb0542 100644
--- a/packages/sw/src/sw.ts
+++ b/packages/sw/src/sw.ts
@@ -5,6 +5,7 @@
import { get } from 'idb-keyval';
import * as Misskey from 'misskey-js';
+import { FETCH_TIMEOUT_MS } from '@/const.js';
import type { PushNotificationDataMap } from '@/types.js';
import type { I18n } from '@@/js/i18n.js';
import type { Locale } from 'i18n';
@@ -12,8 +13,67 @@ import { createEmptyNotification, createNotification } from '@/scripts/create-no
import { swLang } from '@/scripts/lang.js';
import * as swos from '@/scripts/operations.js';
-globalThis.addEventListener('install', () => {
- // ev.waitUntil(globalThis.skipWaiting());
+async function respondToNavigation(request: Request): Promise {
+ const controller = new AbortController();
+ const timeout = globalThis.setTimeout(() => {
+ controller.abort('navigation-timeout');
+ }, FETCH_TIMEOUT_MS);
+
+ try {
+ const response = await fetch(request, { signal: controller.signal });
+
+ if (response?.status && response.status < 500) return response;
+ if (response?.type === 'opaqueredirect') return response;
+ } catch (error) {
+ if (_DEV_) {
+ console.warn('navigation fetch failed; showing offline page', error);
+ }
+ } finally {
+ globalThis.clearTimeout(timeout);
+ }
+
+ // Only show offline page when network request actually fails
+ const html = await offlineContentHTML();
+ return new Response(html, {
+ status: 200,
+ headers: {
+ 'content-type': 'text/html',
+ },
+ });
+}
+
+async function offlineContentHTML() {
+ let i18n: Partial>;
+ try {
+ i18n = await (swLang.i18n ?? await swLang.fetchLocale()) as Partial>;
+ } catch {
+ i18n = {};
+ }
+
+ const messages = {
+ title: i18n.ts?._offlineScreen.title ?? 'Offline - Could not connect to server',
+ header: i18n.ts?._offlineScreen.header ?? 'Could not connect to server',
+ reload: i18n.ts?.reload ?? 'Reload',
+ };
+
+ return `${messages.title}${messages.header}
v${_VERSION_}
`;
+}
+
+globalThis.addEventListener('install', (ev) => {
+ // 次の問題が発生するため、ServiceWorkerAutoPreload をオプトアウトする必要がある
+ // https://issues.chromium.org/issues/466790291
+ if ('addRoutes' in ev) {
+ // doc: https://developer.mozilla.org/en-US/docs/Web/API/InstallEvent/addRoutes
+ // @ts-expect-error 実験的なAPIなので型定義がない
+ ev.addRoutes({
+ condition: {
+ // doc: https://developer.mozilla.org/ja/docs/Web/API/URLPattern
+ // @ts-expect-error 実験的なAPIなので型定義がない
+ urlPattern: new URLPattern({}),
+ },
+ source: 'fetch-event',
+ });
+ }
});
globalThis.addEventListener('activate', ev => {
@@ -28,17 +88,6 @@ globalThis.addEventListener('activate', ev => {
);
});
-async function offlineContentHTML() {
- const i18n = await (swLang.i18n ?? swLang.fetchLocale()) as Partial>;
- const messages = {
- title: i18n.ts?._offlineScreen.title ?? 'Offline - Could not connect to server',
- header: i18n.ts?._offlineScreen.header ?? 'Could not connect to server',
- reload: i18n.ts?.reload ?? 'Reload',
- };
-
- return `${messages.title}${messages.header}
v${_VERSION_}
`;
-}
-
globalThis.addEventListener('fetch', ev => {
let isHTMLRequest = false;
if (ev.request.headers.get('sec-fetch-dest') === 'document') {
@@ -50,18 +99,7 @@ globalThis.addEventListener('fetch', ev => {
}
if (!isHTMLRequest) return;
- ev.respondWith(
- fetch(ev.request)
- .catch(async () => {
- const html = await offlineContentHTML();
- return new Response(html, {
- status: 200,
- headers: {
- 'content-type': 'text/html',
- },
- });
- }),
- );
+ ev.respondWith(respondToNavigation(ev.request));
});
globalThis.addEventListener('push', ev => {
diff --git a/packages/sw/tsconfig.json b/packages/sw/tsconfig.json
index 2712475a37..9732a438ce 100644
--- a/packages/sw/tsconfig.json
+++ b/packages/sw/tsconfig.json
@@ -19,7 +19,6 @@
"experimentalDecorators": true,
"resolveJsonModule": true,
"isolatedModules": true,
- "baseUrl": ".",
"paths": {
"@/*": ["./src/*"],
"@@/*": ["../frontend-shared/*"]
@@ -28,6 +27,7 @@
"./node_modules/@types",
"./src/@types"
],
+ "libReplacement": true,
"lib": [
"esnext",
"webworker"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 636167061b..4f396918e9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -5,7 +5,7 @@ settings:
excludeLinksFromLockfile: false
overrides:
- chokidar: 4.0.3
+ chokidar: 5.0.0
lodash: 4.17.21
'@aiscript-dev/aiscript-languageserver': '-'
@@ -17,17 +17,11 @@ importers:
specifier: 7.1.2
version: 7.1.2(postcss@8.5.6)
esbuild:
- specifier: 0.27.0
- version: 0.27.0
+ specifier: 0.27.1
+ version: 0.27.1
execa:
- specifier: 9.6.0
- version: 9.6.0
- fast-glob:
- specifier: 3.3.3
- version: 3.3.3
- glob:
- specifier: 13.0.0
- version: 13.0.0
+ specifier: 9.6.1
+ version: 9.6.1
ignore-walk:
specifier: 8.0.0
version: 8.0.0
@@ -43,52 +37,52 @@ importers:
terser:
specifier: 5.44.1
version: 5.44.1
- typescript:
- specifier: 5.9.3
- version: 5.9.3
devDependencies:
'@eslint/js':
specifier: 9.39.1
version: 9.39.1
'@misskey-dev/eslint-plugin':
specifier: 2.2.0
- version: 2.2.0(@eslint/compat@1.4.0(eslint@9.39.1))(@eslint/js@9.39.1)(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3))(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1))(eslint@9.39.1)(globals@16.5.0)
+ version: 2.2.0(@eslint/compat@1.4.0(eslint@9.39.1))(@eslint/js@9.39.1)(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3))(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1))(eslint@9.39.1)(globals@16.5.0)
'@types/js-yaml':
specifier: 4.0.9
version: 4.0.9
'@types/node':
- specifier: 24.10.1
- version: 24.10.1
+ specifier: 24.10.2
+ version: 24.10.2
'@typescript-eslint/eslint-plugin':
- specifier: 8.47.0
- version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.47.0
- version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript/native-preview':
+ specifier: 7.0.0-dev.20251206.1
+ version: 7.0.0-dev.20251206.1
cross-env:
specifier: 10.1.0
version: 10.1.0
cypress:
- specifier: 15.7.0
- version: 15.7.0
+ specifier: 15.7.1
+ version: 15.7.1
eslint:
specifier: 9.39.1
version: 9.39.1
globals:
specifier: 16.5.0
version: 16.5.0
- i18n:
- specifier: workspace:*
- version: link:packages/i18n
ncp:
specifier: 2.0.0
version: 2.0.0
pnpm:
- specifier: 10.23.0
- version: 10.23.0
+ specifier: 10.25.0
+ version: 10.25.0
start-server-and-test:
specifier: 2.1.3
version: 2.1.3
+ typescript:
+ specifier: 5.9.3
+ version: 5.9.3
optionalDependencies:
'@tensorflow/tfjs-core':
specifier: 4.22.0
@@ -97,38 +91,35 @@ importers:
packages/backend:
dependencies:
'@aws-sdk/client-s3':
- specifier: 3.937.0
- version: 3.937.0
+ specifier: 3.948.0
+ version: 3.948.0
'@aws-sdk/lib-storage':
- specifier: 3.937.0
- version: 3.937.0(@aws-sdk/client-s3@3.937.0)
+ specifier: 3.948.0
+ version: 3.948.0(@aws-sdk/client-s3@3.948.0)
'@discordapp/twemoji':
specifier: 16.0.1
version: 16.0.1
'@fastify/accepts':
- specifier: 5.0.3
- version: 5.0.3
- '@fastify/cookie':
- specifier: 11.0.2
- version: 11.0.2
+ specifier: 5.0.4
+ version: 5.0.4
'@fastify/cors':
- specifier: 11.1.0
- version: 11.1.0
+ specifier: 11.2.0
+ version: 11.2.0
'@fastify/express':
specifier: 4.0.2
version: 4.0.2
'@fastify/http-proxy':
- specifier: 11.3.0
- version: 11.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
+ specifier: 11.4.1
+ version: 11.4.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
'@fastify/multipart':
specifier: 9.3.0
version: 9.3.0
'@fastify/static':
specifier: 8.3.0
version: 8.3.0
- '@fastify/view':
- specifier: 11.1.1
- version: 11.1.1
+ '@kitajs/html':
+ specifier: 4.2.11
+ version: 4.2.11
'@misskey-dev/sharp-read-bmp':
specifier: 1.2.0
version: 1.2.0
@@ -136,8 +127,8 @@ importers:
specifier: 5.2.5
version: 5.2.5
'@napi-rs/canvas':
- specifier: 0.1.82
- version: 0.1.82
+ specifier: 0.1.84
+ version: 0.1.84
'@nestjs/common':
specifier: 11.1.9
version: 11.1.9(reflect-metadata@0.2.2)(rxjs@7.8.2)
@@ -151,11 +142,11 @@ importers:
specifier: 1.7.0
version: 1.7.0
'@sentry/node':
- specifier: 10.26.0
- version: 10.26.0
+ specifier: 10.29.0
+ version: 10.29.0
'@sentry/profiling-node':
- specifier: 10.26.0
- version: 10.26.0
+ specifier: 10.29.0
+ version: 10.29.0
'@simplewebauthn/server':
specifier: 13.2.2
version: 13.2.2
@@ -167,7 +158,7 @@ importers:
version: 4.4.5
'@swc/cli':
specifier: 0.7.9
- version: 0.7.9(@swc/core@1.15.3)(chokidar@4.0.3)
+ version: 0.7.9(@swc/core@1.15.3)(chokidar@5.0.0)
'@swc/core':
specifier: 1.15.3
version: 1.15.3
@@ -196,17 +187,14 @@ importers:
specifier: 2.0.5
version: 2.0.5
body-parser:
- specifier: 2.2.0
- version: 2.2.0
+ specifier: 2.2.1
+ version: 2.2.1
bullmq:
- specifier: 5.64.1
- version: 5.64.1
+ specifier: 5.65.1
+ version: 5.65.1
cacheable-lookup:
specifier: 7.0.0
version: 7.0.0
- cbor:
- specifier: 10.0.11
- version: 10.0.11
chalk:
specifier: 5.6.2
version: 5.6.2
@@ -214,8 +202,8 @@ importers:
specifier: 1.1.2
version: 1.1.2
chokidar:
- specifier: 4.0.3
- version: 4.0.3
+ specifier: 5.0.0
+ version: 5.0.0
color-convert:
specifier: 3.1.3
version: 3.1.3
@@ -247,14 +235,17 @@ importers:
specifier: 4.0.5
version: 4.0.5
got:
- specifier: 14.6.4
- version: 14.6.4
+ specifier: 14.6.5
+ version: 14.6.5
hpagent:
specifier: 1.2.0
version: 1.2.0
http-link-header:
specifier: 1.1.3
version: 1.1.3
+ i18n:
+ specifier: workspace:*
+ version: link:../i18n
ioredis:
specifier: 5.8.2
version: 5.8.2
@@ -262,23 +253,17 @@ importers:
specifier: 4.0.2
version: 4.0.2
ipaddr.js:
- specifier: 2.2.0
- version: 2.2.0
+ specifier: 2.3.0
+ version: 2.3.0
is-svg:
specifier: 6.1.0
version: 6.1.0
- js-yaml:
- specifier: 4.1.1
- version: 4.1.1
json5:
specifier: 2.2.3
version: 2.2.3
jsonld:
specifier: 9.0.0
version: 9.0.0
- jsrsasign:
- specifier: 11.1.0
- version: 11.1.0
juice:
specifier: 11.0.3
version: 11.0.3
@@ -288,9 +273,6 @@ importers:
mfm-js:
specifier: 0.25.0
version: 0.25.0
- microformats-parser:
- specifier: 2.0.4
- version: 2.0.4
mime-types:
specifier: 3.0.2
version: 3.0.2
@@ -316,14 +298,11 @@ importers:
specifier: 7.0.1
version: 7.0.1
nodemailer:
- specifier: 7.0.10
- version: 7.0.10
+ specifier: 7.0.11
+ version: 7.0.11
nsfwjs:
specifier: 4.2.0
version: 4.2.0(@tensorflow/tfjs@4.22.0(encoding@0.1.13)(seedrandom@3.0.5))(buffer@6.0.3)
- oauth:
- specifier: 0.10.2
- version: 0.10.2
oauth2orize:
specifier: 1.12.0
version: 1.12.0
@@ -340,17 +319,14 @@ importers:
specifier: 8.16.3
version: 8.16.3
pkce-challenge:
- specifier: 5.0.0
- version: 5.0.0
+ specifier: 5.0.1
+ version: 5.0.1
probe-image-size:
specifier: 7.2.3
version: 7.2.3
promise-limit:
specifier: 2.7.0
version: 2.7.0
- pug:
- specifier: 3.0.3
- version: 3.0.3
qrcode:
specifier: 1.5.4
version: 1.5.4
@@ -400,8 +376,8 @@ importers:
specifier: 2.1.0
version: 2.1.0
systeminformation:
- specifier: 5.27.11
- version: 5.27.11
+ specifier: 5.27.14
+ version: 5.27.14
tinycolor2:
specifier: 1.6.0
version: 1.6.0
@@ -411,18 +387,12 @@ importers:
tsc-alias:
specifier: 1.8.16
version: 1.8.16
- tsconfig-paths:
- specifier: 4.2.0
- version: 4.2.0
typeorm:
- specifier: 0.3.27
- version: 0.3.27(ioredis@5.8.2)(pg@8.16.3)(reflect-metadata@0.2.2)
- typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 0.3.28
+ version: 0.3.28(ioredis@5.8.2)(pg@8.16.3)
ulid:
- specifier: 3.0.1
- version: 3.0.1
+ specifier: 3.0.2
+ version: 3.0.2
vary:
specifier: 1.1.2
version: 1.1.2
@@ -439,12 +409,15 @@ importers:
'@jest/globals':
specifier: 29.7.0
version: 29.7.0
+ '@kitajs/ts-html-plugin':
+ specifier: 4.1.3
+ version: 4.1.3(@kitajs/html@4.2.11)(typescript@5.9.3)
'@nestjs/platform-express':
specifier: 11.1.9
version: 11.1.9(@nestjs/common@11.1.9(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.9)
'@sentry/vue':
- specifier: 10.26.0
- version: 10.26.0(vue@3.5.24(typescript@5.9.3))
+ specifier: 10.29.0
+ version: 10.29.0(vue@3.5.25(typescript@5.9.3))
'@simplewebauthn/types':
specifier: 12.0.0
version: 12.0.0
@@ -475,15 +448,9 @@ importers:
'@types/jest':
specifier: 29.5.14
version: 29.5.14
- '@types/js-yaml':
- specifier: 4.0.9
- version: 4.0.9
'@types/jsonld':
specifier: 1.5.15
version: 1.5.15
- '@types/jsrsasign':
- specifier: 10.5.15
- version: 10.5.15
'@types/mime-types':
specifier: 3.0.1
version: 3.0.1
@@ -491,14 +458,11 @@ importers:
specifier: 2.1.0
version: 2.1.0
'@types/node':
- specifier: 24.10.1
- version: 24.10.1
+ specifier: 24.10.2
+ version: 24.10.2
'@types/nodemailer':
specifier: 7.0.4
version: 7.0.4
- '@types/oauth':
- specifier: 0.9.6
- version: 0.9.6
'@types/oauth2orize':
specifier: 1.11.5
version: 1.11.5
@@ -508,9 +472,6 @@ importers:
'@types/pg':
specifier: 8.15.6
version: 8.15.6
- '@types/pug':
- specifier: 2.0.10
- version: 2.0.10
'@types/qrcode':
specifier: 1.5.6
version: 1.5.6
@@ -530,8 +491,8 @@ importers:
specifier: 7.7.1
version: 7.7.1
'@types/simple-oauth2':
- specifier: 5.0.7
- version: 5.0.7
+ specifier: 5.0.8
+ version: 5.0.8
'@types/sinonjs__fake-timers':
specifier: 15.0.1
version: 15.0.1
@@ -554,35 +515,38 @@ importers:
specifier: 8.18.1
version: 8.18.1
'@typescript-eslint/eslint-plugin':
- specifier: 8.47.0
- version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.47.0
- version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(eslint@9.39.1)(typescript@5.9.3)
aws-sdk-client-mock:
specifier: 4.1.0
version: 4.1.0
+ cbor:
+ specifier: 10.0.11
+ version: 10.0.11
cross-env:
specifier: 10.1.0
version: 10.1.0
eslint-plugin-import:
specifier: 2.32.0
- version: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)
+ version: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)
execa:
- specifier: 9.6.0
- version: 9.6.0
+ specifier: 9.6.1
+ version: 9.6.1
fkill:
specifier: 10.0.1
version: 10.0.1
jest:
specifier: 29.7.0
- version: 29.7.0(@types/node@24.10.1)
+ version: 29.7.0(@types/node@24.10.2)
jest-mock:
specifier: 29.7.0
version: 29.7.0
- jest-util:
- specifier: 29.7.0
- version: 29.7.0
+ js-yaml:
+ specifier: 4.1.1
+ version: 4.1.1
nodemon:
specifier: 3.1.11
version: 3.1.11
@@ -595,6 +559,9 @@ importers:
supertest:
specifier: 7.1.4
version: 7.1.4
+ vite:
+ specifier: 7.2.7
+ version: 7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
optionalDependencies:
'@swc/core-android-arm64':
specifier: 1.3.11
@@ -696,8 +663,8 @@ importers:
specifier: 2.1.1
version: 2.1.1
'@mcaptcha/vanilla-glue':
- specifier: 0.1.0-alpha-3
- version: 0.1.0-alpha-3
+ specifier: 0.1.0-rc2
+ version: 0.1.0-rc2(bufferutil@4.0.9)(utf-8-validate@6.0.5)
'@misskey-dev/browser-image-resizer':
specifier: 2024.1.0
version: 2024.1.0
@@ -711,8 +678,8 @@ importers:
specifier: 5.3.0
version: 5.3.0(rollup@4.53.3)
'@sentry/vue':
- specifier: 10.26.0
- version: 10.26.0(vue@3.5.24(typescript@5.9.3))
+ specifier: 10.29.0
+ version: 10.29.0(vue@3.5.25(typescript@5.9.3))
'@syuilo/aiscript':
specifier: 1.2.0
version: 1.2.0
@@ -724,19 +691,13 @@ importers:
version: 16.0.0
'@vitejs/plugin-vue':
specifier: 6.0.2
- version: 6.0.2(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))(vue@3.5.24(typescript@5.9.3))
- '@vue/compiler-sfc':
- specifier: 3.5.24
- version: 3.5.24
+ version: 6.0.2(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))(vue@3.5.25(typescript@5.9.3))
aiscript-vscode:
- specifier: github:aiscript-dev/aiscript-vscode#v0.1.15
- version: https://codeload.github.com/aiscript-dev/aiscript-vscode/tar.gz/c3cde89e79a41d93540cf8a48cd619c3f2dcb1b7
+ specifier: github:aiscript-dev/aiscript-vscode#v0.1.16
+ version: https://codeload.github.com/aiscript-dev/aiscript-vscode/tar.gz/1dc7f60cda78d030dadfc518a33c472202b2ef67
analytics:
specifier: 0.8.19
version: 0.8.19(@types/dlv@1.1.5)
- astring:
- specifier: 1.9.0
- version: 1.9.0
broadcast-channel:
specifier: 7.2.0
version: 7.2.0
@@ -773,18 +734,15 @@ importers:
date-fns:
specifier: 4.1.0
version: 4.1.0
- estree-walker:
- specifier: 3.0.3
- version: 3.0.3
eventemitter3:
specifier: 5.0.1
version: 5.0.1
execa:
- specifier: 9.6.0
- version: 9.6.0
+ specifier: 9.6.1
+ version: 9.6.1
exifreader:
- specifier: 4.32.0
- version: 4.32.0
+ specifier: 4.33.1
+ version: 4.33.1
frontend-shared:
specifier: workspace:*
version: link:../frontend-shared
@@ -809,15 +767,12 @@ importers:
json5:
specifier: 2.2.3
version: 2.2.3
- magic-string:
- specifier: 0.30.21
- version: 0.30.21
matter-js:
specifier: 0.20.0
version: 0.20.0
mediabunny:
- specifier: 1.25.1
- version: 1.25.1
+ specifier: 1.25.8
+ version: 1.25.8
mfm-js:
specifier: 0.25.0
version: 0.25.0
@@ -849,14 +804,11 @@ importers:
specifier: 2.17.0
version: 2.17.0
sass:
- specifier: 1.94.2
- version: 1.94.2
+ specifier: 1.95.1
+ version: 1.95.1
shiki:
- specifier: 3.15.0
- version: 3.15.0
- strict-event-emitter-types:
- specifier: 2.0.0
- version: 2.0.0
+ specifier: 3.19.0
+ version: 3.19.0
textarea-caret:
specifier: 3.1.0
version: 3.1.0
@@ -869,27 +821,18 @@ importers:
tinycolor2:
specifier: 1.6.0
version: 1.6.0
- tsc-alias:
- specifier: 1.8.16
- version: 1.8.16
- tsconfig-paths:
- specifier: 4.2.0
- version: 4.2.0
- typescript:
- specifier: 5.9.3
- version: 5.9.3
v-code-diff:
specifier: 1.13.1
- version: 1.13.1(vue@3.5.24(typescript@5.9.3))
+ version: 1.13.1(vue@3.5.25(typescript@5.9.3))
vite:
- specifier: 7.2.4
- version: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ specifier: 7.2.7
+ version: 7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
vue:
- specifier: 3.5.24
- version: 3.5.24(typescript@5.9.3)
+ specifier: 3.5.25
+ version: 3.5.25(typescript@5.9.3)
vuedraggable:
specifier: next
- version: 4.1.0(vue@3.5.24(typescript@5.9.3))
+ version: 4.1.0(vue@3.5.25(typescript@5.9.3))
wanakana:
specifier: 5.3.1
version: 5.3.1
@@ -899,61 +842,61 @@ importers:
version: 5.2.5
'@storybook/addon-essentials':
specifier: 8.6.14
- version: 8.6.14(@types/react@19.2.2)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ version: 8.6.14(@types/react@19.2.2)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
'@storybook/addon-interactions':
specifier: 8.6.14
- version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
'@storybook/addon-links':
- specifier: 10.0.8
- version: 10.0.8(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ specifier: 10.1.5
+ version: 10.1.5(react@19.2.1)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
'@storybook/addon-mdx-gfm':
specifier: 8.6.14
- version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
'@storybook/addon-storysource':
specifier: 8.6.14
- version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
'@storybook/blocks':
specifier: 8.6.14
- version: 8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ version: 8.6.14(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
'@storybook/components':
specifier: 8.6.14
- version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
'@storybook/core-events':
specifier: 8.6.14
- version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
'@storybook/manager-api':
specifier: 8.6.14
- version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
'@storybook/preview-api':
specifier: 8.6.14
- version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
'@storybook/react':
- specifier: 10.0.8
- version: 10.0.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(typescript@5.9.3)
+ specifier: 10.1.5
+ version: 10.1.5(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))(typescript@5.9.3)
'@storybook/react-vite':
- specifier: 10.0.8
- version: 10.0.8(esbuild@0.27.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(typescript@5.9.3)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ specifier: 10.1.5
+ version: 10.1.5(esbuild@0.27.1)(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(rollup@4.53.3)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))(typescript@5.9.3)(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))
'@storybook/test':
specifier: 8.6.14
- version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
'@storybook/theming':
specifier: 8.6.14
- version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
'@storybook/types':
specifier: 8.6.14
- version: 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ version: 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
'@storybook/vue3':
- specifier: 10.0.8
- version: 10.0.8(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vue@3.5.24(typescript@5.9.3))
+ specifier: 10.1.5
+ version: 10.1.5(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))(vue@3.5.25(typescript@5.9.3))
'@storybook/vue3-vite':
- specifier: 10.0.8
- version: 10.0.8(esbuild@0.27.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))(vue@3.5.24(typescript@5.9.3))
+ specifier: 10.1.5
+ version: 10.1.5(esbuild@0.27.1)(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(rollup@4.53.3)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))(vue@3.5.25(typescript@5.9.3))
'@tabler/icons-webfont':
specifier: 3.35.0
version: 3.35.0
'@testing-library/vue':
specifier: 8.1.0
- version: 8.1.0(@vue/compiler-sfc@3.5.24)(vue@3.5.24(typescript@5.9.3))
+ version: 8.1.0(@vue/compiler-sfc@3.5.25)(vue@3.5.25(typescript@5.9.3))
'@types/canvas-confetti':
specifier: 1.9.0
version: 1.9.0
@@ -967,8 +910,8 @@ importers:
specifier: 4.0.10
version: 4.0.10
'@types/node':
- specifier: 24.10.1
- version: 24.10.1
+ specifier: 24.10.2
+ version: 24.10.2
'@types/punycode.js':
specifier: npm:@types/punycode@2.1.4
version: '@types/punycode@2.1.4'
@@ -984,48 +927,48 @@ importers:
'@types/tinycolor2':
specifier: 1.4.6
version: 1.4.6
- '@types/ws':
- specifier: 8.18.1
- version: 8.18.1
'@typescript-eslint/eslint-plugin':
- specifier: 8.47.0
- version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.47.0
- version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(eslint@9.39.1)(typescript@5.9.3)
'@vitest/coverage-v8':
- specifier: 4.0.13
- version: 4.0.13(vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ specifier: 4.0.15
+ version: 4.0.15(vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.2)(happy-dom@20.0.11)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))
'@vue/compiler-core':
- specifier: 3.5.24
- version: 3.5.24
- '@vue/runtime-core':
- specifier: 3.5.24
- version: 3.5.24
+ specifier: 3.5.25
+ version: 3.5.25
acorn:
specifier: 8.15.0
version: 8.15.0
+ astring:
+ specifier: 1.9.0
+ version: 1.9.0
cross-env:
specifier: 10.1.0
version: 10.1.0
cypress:
- specifier: 15.7.0
- version: 15.7.0
+ specifier: 15.7.1
+ version: 15.7.1
eslint-plugin-import:
specifier: 2.32.0
- version: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)
+ version: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)
eslint-plugin-vue:
- specifier: 10.6.0
- version: 10.6.0(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(vue-eslint-parser@10.2.0(eslint@9.39.1))
- fast-glob:
- specifier: 3.3.3
- version: 3.3.3
+ specifier: 10.6.2
+ version: 10.6.2(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(vue-eslint-parser@10.2.0(eslint@9.39.1))
+ estree-walker:
+ specifier: 3.0.3
+ version: 3.0.3
happy-dom:
- specifier: 20.0.10
- version: 20.0.10
+ specifier: 20.0.11
+ version: 20.0.11
intersection-observer:
specifier: 0.12.2
version: 0.12.2
+ magic-string:
+ specifier: 0.30.21
+ version: 0.30.21
micromatch:
specifier: 4.0.8
version: 4.0.8
@@ -1033,23 +976,23 @@ importers:
specifier: 10.1.1
version: 10.1.1
msw:
- specifier: 2.12.2
- version: 2.12.2(@types/node@24.10.1)(typescript@5.9.3)
+ specifier: 2.12.4
+ version: 2.12.4(@types/node@24.10.2)(typescript@5.9.3)
msw-storybook-addon:
specifier: 2.0.6
- version: 2.0.6(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))
+ version: 2.0.6(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))
nodemon:
specifier: 3.1.11
version: 3.1.11
prettier:
- specifier: 3.6.2
- version: 3.6.2
+ specifier: 3.7.4
+ version: 3.7.4
react:
- specifier: 19.2.0
- version: 19.2.0
+ specifier: 19.2.1
+ version: 19.2.1
react-dom:
- specifier: 19.2.0
- version: 19.2.0(react@19.2.0)
+ specifier: 19.2.1
+ version: 19.2.1(react@19.2.1)
seedrandom:
specifier: 3.0.5
version: 3.0.5
@@ -1057,35 +1000,35 @@ importers:
specifier: 2.1.3
version: 2.1.3
storybook:
- specifier: 10.0.8
- version: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ specifier: 10.1.5
+ version: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
storybook-addon-misskey-theme:
specifier: github:misskey-dev/storybook-addon-misskey-theme
- version: https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640(17b0cdbdd96b793834b84d8d4dddb88b)
+ version: https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640(62d43c4a6ba7695d11b4f3f5e39354d0)
tsx:
- specifier: 4.20.6
- version: 4.20.6
+ specifier: 4.21.0
+ version: 4.21.0
vite-plugin-glsl:
- specifier: 1.5.4
- version: 1.5.4(@rollup/pluginutils@5.3.0(rollup@4.53.3))(esbuild@0.27.0)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ specifier: 1.5.5
+ version: 1.5.5(@rollup/pluginutils@5.3.0(rollup@4.53.3))(esbuild@0.27.1)(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))
vite-plugin-turbosnap:
specifier: 1.0.3
version: 1.0.3
vitest:
- specifier: 4.0.13
- version: 4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ specifier: 4.0.15
+ version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.2)(happy-dom@20.0.11)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
vitest-fetch-mock:
specifier: 0.4.5
- version: 0.4.5(vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ version: 0.4.5(vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.2)(happy-dom@20.0.11)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))
vue-component-type-helpers:
- specifier: 3.1.5
- version: 3.1.5
+ specifier: 3.1.8
+ version: 3.1.8
vue-eslint-parser:
specifier: 10.2.0
version: 10.2.0(eslint@9.39.1)
vue-tsc:
- specifier: 3.1.5
- version: 3.1.5(typescript@5.9.3)
+ specifier: 3.1.8
+ version: 3.1.8(typescript@5.9.3)
packages/frontend-builder:
dependencies:
@@ -1099,27 +1042,24 @@ importers:
specifier: 0.30.21
version: 0.30.21
vite:
- specifier: 7.2.4
- version: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ specifier: 7.2.7
+ version: 7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
devDependencies:
'@types/estree':
specifier: 1.0.8
version: 1.0.8
'@types/node':
- specifier: 24.10.1
- version: 24.10.1
+ specifier: 24.10.2
+ version: 24.10.2
'@typescript-eslint/eslint-plugin':
- specifier: 8.47.0
- version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.47.0
- version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(eslint@9.39.1)(typescript@5.9.3)
rollup:
specifier: 4.53.3
version: 4.53.3
- typescript:
- specifier: 5.9.3
- version: 5.9.3
packages/frontend-embed:
dependencies:
@@ -1140,13 +1080,7 @@ importers:
version: 16.0.0
'@vitejs/plugin-vue':
specifier: 6.0.2
- version: 6.0.2(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))(vue@3.5.24(typescript@5.9.3))
- '@vue/compiler-sfc':
- specifier: 3.5.24
- version: 3.5.24
- astring:
- specifier: 1.9.0
- version: 1.9.0
+ version: 6.0.2(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))(vue@3.5.25(typescript@5.9.3))
buraha:
specifier: 0.0.1
version: 0.0.1
@@ -1178,32 +1112,23 @@ importers:
specifier: 4.53.3
version: 4.53.3
sass:
- specifier: 1.94.2
- version: 1.94.2
+ specifier: 1.95.1
+ version: 1.95.1
shiki:
- specifier: 3.15.0
- version: 3.15.0
+ specifier: 3.19.0
+ version: 3.19.0
tinycolor2:
specifier: 1.6.0
version: 1.6.0
- tsc-alias:
- specifier: 1.8.16
- version: 1.8.16
- tsconfig-paths:
- specifier: 4.2.0
- version: 4.2.0
- typescript:
- specifier: 5.9.3
- version: 5.9.3
uuid:
specifier: 13.0.0
version: 13.0.0
vite:
- specifier: 7.2.4
- version: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ specifier: 7.2.7
+ version: 7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
vue:
- specifier: 3.5.24
- version: 3.5.24(typescript@5.9.3)
+ specifier: 3.5.25
+ version: 3.5.25(typescript@5.9.3)
devDependencies:
'@misskey-dev/summaly':
specifier: 5.2.5
@@ -1213,7 +1138,7 @@ importers:
version: 3.35.0
'@testing-library/vue':
specifier: 8.1.0
- version: 8.1.0(@vue/compiler-sfc@3.5.24)(vue@3.5.24(typescript@5.9.3))
+ version: 8.1.0(@vue/compiler-sfc@3.5.25)(vue@3.5.25(typescript@5.9.3))
'@types/estree':
specifier: 1.0.8
version: 1.0.8
@@ -1221,8 +1146,8 @@ importers:
specifier: 4.0.10
version: 4.0.10
'@types/node':
- specifier: 24.10.1
- version: 24.10.1
+ specifier: 24.10.2
+ version: 24.10.2
'@types/punycode.js':
specifier: npm:@types/punycode@2.1.4
version: '@types/punycode@2.1.4'
@@ -1233,17 +1158,17 @@ importers:
specifier: 8.18.1
version: 8.18.1
'@typescript-eslint/eslint-plugin':
- specifier: 8.47.0
- version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.47.0
- version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(eslint@9.39.1)(typescript@5.9.3)
'@vitest/coverage-v8':
- specifier: 4.0.13
- version: 4.0.13(vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ specifier: 4.0.15
+ version: 4.0.15(vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.2)(happy-dom@20.0.11)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))
'@vue/runtime-core':
- specifier: 3.5.24
- version: 3.5.24
+ specifier: 3.5.25
+ version: 3.5.25
acorn:
specifier: 8.15.0
version: 8.15.0
@@ -1252,16 +1177,13 @@ importers:
version: 10.1.0
eslint-plugin-import:
specifier: 2.32.0
- version: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)
+ version: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)
eslint-plugin-vue:
- specifier: 10.6.0
- version: 10.6.0(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(vue-eslint-parser@10.2.0(eslint@9.39.1))
- fast-glob:
- specifier: 3.3.3
- version: 3.3.3
+ specifier: 10.6.2
+ version: 10.6.2(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(vue-eslint-parser@10.2.0(eslint@9.39.1))
happy-dom:
- specifier: 20.0.10
- version: 20.0.10
+ specifier: 20.0.11
+ version: 20.0.11
intersection-observer:
specifier: 0.12.2
version: 0.12.2
@@ -1269,32 +1191,32 @@ importers:
specifier: 4.0.8
version: 4.0.8
msw:
- specifier: 2.12.2
- version: 2.12.2(@types/node@24.10.1)(typescript@5.9.3)
+ specifier: 2.12.4
+ version: 2.12.4(@types/node@24.10.2)(typescript@5.9.3)
nodemon:
specifier: 3.1.11
version: 3.1.11
prettier:
- specifier: 3.6.2
- version: 3.6.2
+ specifier: 3.7.4
+ version: 3.7.4
start-server-and-test:
specifier: 2.1.3
version: 2.1.3
tsx:
- specifier: 4.20.6
- version: 4.20.6
+ specifier: 4.21.0
+ version: 4.21.0
vite-plugin-turbosnap:
specifier: 1.0.3
version: 1.0.3
vue-component-type-helpers:
- specifier: 3.1.5
- version: 3.1.5
+ specifier: 3.1.8
+ version: 3.1.8
vue-eslint-parser:
specifier: 10.2.0
version: 10.2.0(eslint@9.39.1)
vue-tsc:
- specifier: 3.1.5
- version: 3.1.5(typescript@5.9.3)
+ specifier: 3.1.8
+ version: 3.1.8(typescript@5.9.3)
packages/frontend-shared:
dependencies:
@@ -1305,30 +1227,27 @@ importers:
specifier: workspace:*
version: link:../misskey-js
vue:
- specifier: 3.5.24
- version: 3.5.24(typescript@5.9.3)
+ specifier: 3.5.25
+ version: 3.5.25(typescript@5.9.3)
devDependencies:
'@types/node':
- specifier: 24.10.1
- version: 24.10.1
+ specifier: 24.10.2
+ version: 24.10.2
'@typescript-eslint/eslint-plugin':
- specifier: 8.47.0
- version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.47.0
- version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(eslint@9.39.1)(typescript@5.9.3)
esbuild:
- specifier: 0.27.0
- version: 0.27.0
+ specifier: 0.27.1
+ version: 0.27.1
eslint-plugin-vue:
- specifier: 10.6.0
- version: 10.6.0(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(vue-eslint-parser@10.2.0(eslint@9.39.1))
+ specifier: 10.6.2
+ version: 10.6.2(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(vue-eslint-parser@10.2.0(eslint@9.39.1))
nodemon:
specifier: 3.1.11
version: 3.1.11
- typescript:
- specifier: 5.9.3
- version: 5.9.3
vue-eslint-parser:
specifier: 10.2.0
version: 10.2.0(eslint@9.39.1)
@@ -1343,35 +1262,29 @@ importers:
specifier: 4.0.9
version: 4.0.9
'@types/node':
- specifier: 24.10.1
- version: 24.10.1
+ specifier: 24.10.2
+ version: 24.10.2
'@typescript-eslint/eslint-plugin':
- specifier: 8.47.0
- version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.47.0
- version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(eslint@9.39.1)(typescript@5.9.3)
chokidar:
- specifier: 4.0.3
- version: 4.0.3
+ specifier: 5.0.0
+ version: 5.0.0
esbuild:
- specifier: 0.27.0
- version: 0.27.0
+ specifier: 0.27.1
+ version: 0.27.1
execa:
- specifier: 9.6.0
- version: 9.6.0
- glob:
- specifier: 11.1.0
- version: 11.1.0
+ specifier: 9.6.1
+ version: 9.6.1
nodemon:
specifier: 3.1.11
version: 3.1.11
tsx:
- specifier: 4.20.6
- version: 4.20.6
- typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 4.21.0
+ version: 4.21.0
packages/icons-subsetter:
dependencies:
@@ -1381,31 +1294,25 @@ importers:
harfbuzzjs:
specifier: 0.4.13
version: 0.4.13
- tiny-glob:
- specifier: 0.2.9
- version: 0.2.9
tsx:
- specifier: 4.20.6
- version: 4.20.6
- typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 4.21.0
+ version: 4.21.0
wawoff2:
specifier: 2.0.1
version: 2.0.1
devDependencies:
'@types/node':
- specifier: 24.10.1
- version: 24.10.1
+ specifier: 24.10.2
+ version: 24.10.2
'@types/wawoff2':
specifier: 1.0.2
version: 1.0.2
'@typescript-eslint/eslint-plugin':
- specifier: 8.47.0
- version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.47.0
- version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(eslint@9.39.1)(typescript@5.9.3)
packages/misskey-bubble-game:
dependencies:
@@ -1423,32 +1330,26 @@ importers:
specifier: 0.20.2
version: 0.20.2
'@types/node':
- specifier: 24.10.1
- version: 24.10.1
+ specifier: 24.10.2
+ version: 24.10.2
'@types/seedrandom':
specifier: 3.0.8
version: 3.0.8
'@typescript-eslint/eslint-plugin':
- specifier: 8.47.0
- version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.47.0
- version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(eslint@9.39.1)(typescript@5.9.3)
esbuild:
- specifier: 0.27.0
- version: 0.27.0
+ specifier: 0.27.1
+ version: 0.27.1
execa:
- specifier: 9.6.0
- version: 9.6.0
- glob:
- specifier: 11.1.0
- version: 11.1.0
+ specifier: 9.6.1
+ version: 9.6.1
nodemon:
specifier: 3.1.11
version: 3.1.11
- typescript:
- specifier: 5.9.3
- version: 5.9.3
packages/misskey-js:
dependencies:
@@ -1463,29 +1364,26 @@ importers:
version: 4.4.0
devDependencies:
'@microsoft/api-extractor':
- specifier: 7.55.0
- version: 7.55.0(@types/node@24.10.1)
+ specifier: 7.55.2
+ version: 7.55.2(@types/node@24.10.2)
'@types/node':
- specifier: 24.10.1
- version: 24.10.1
+ specifier: 24.10.2
+ version: 24.10.2
'@typescript-eslint/eslint-plugin':
- specifier: 8.47.0
- version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.47.0
- version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(eslint@9.39.1)(typescript@5.9.3)
'@vitest/coverage-v8':
- specifier: 4.0.10
- version: 4.0.10(vitest@4.0.10(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ specifier: 4.0.15
+ version: 4.0.15(vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.2)(happy-dom@20.0.11)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))
esbuild:
- specifier: 0.27.0
- version: 0.27.0
+ specifier: 0.27.1
+ version: 0.27.1
execa:
- specifier: 9.6.0
- version: 9.6.0
- glob:
- specifier: 13.0.0
- version: 13.0.0
+ specifier: 9.6.1
+ version: 9.6.1
ncp:
specifier: 2.0.0
version: 2.0.0
@@ -1495,15 +1393,12 @@ importers:
tsd:
specifier: 0.33.0
version: 0.33.0
- typescript:
- specifier: 5.9.3
- version: 5.9.3
vitest:
- specifier: 4.0.10
- version: 4.0.10(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ specifier: 4.0.15
+ version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.2)(happy-dom@20.0.11)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
vitest-websocket-mock:
specifier: 0.5.0
- version: 0.5.0(vitest@4.0.10(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ version: 0.5.0(vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.2)(happy-dom@20.0.11)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))
packages/misskey-js/generator:
devDependencies:
@@ -1511,14 +1406,14 @@ importers:
specifier: 5.2.1
version: 5.2.1(openapi-types@12.1.3)
'@types/node':
- specifier: 24.10.1
- version: 24.10.1
+ specifier: 24.10.2
+ version: 24.10.2
'@typescript-eslint/eslint-plugin':
- specifier: 8.47.0
- version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.47.0
- version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(eslint@9.39.1)(typescript@5.9.3)
eslint:
specifier: 9.39.1
version: 9.39.1
@@ -1532,11 +1427,8 @@ importers:
specifier: 2.1.0
version: 2.1.0
tsx:
- specifier: 4.20.6
- version: 4.20.6
- typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 4.21.0
+ version: 4.21.0
packages/misskey-reversi:
dependencies:
@@ -1545,35 +1437,29 @@ importers:
version: 1.2.2
devDependencies:
'@types/node':
- specifier: 24.10.1
- version: 24.10.1
+ specifier: 24.10.2
+ version: 24.10.2
'@typescript-eslint/eslint-plugin':
- specifier: 8.47.0
- version: 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.47.0
- version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(eslint@9.39.1)(typescript@5.9.3)
esbuild:
- specifier: 0.27.0
- version: 0.27.0
+ specifier: 0.27.1
+ version: 0.27.1
execa:
- specifier: 9.6.0
- version: 9.6.0
- glob:
- specifier: 11.1.0
- version: 11.1.0
+ specifier: 9.6.1
+ version: 9.6.1
nodemon:
specifier: 3.1.11
version: 3.1.11
- typescript:
- specifier: 5.9.3
- version: 5.9.3
packages/sw:
dependencies:
esbuild:
- specifier: 0.27.0
- version: 0.27.0
+ specifier: 0.27.1
+ version: 0.27.1
i18n:
specifier: workspace:*
version: link:../i18n
@@ -1585,20 +1471,17 @@ importers:
version: link:../misskey-js
devDependencies:
'@typescript-eslint/parser':
- specifier: 8.47.0
- version: 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ specifier: 8.49.0
+ version: 8.49.0(eslint@9.39.1)(typescript@5.9.3)
'@typescript/lib-webworker':
specifier: npm:@types/serviceworker@0.0.74
version: '@types/serviceworker@0.0.74'
eslint-plugin-import:
specifier: 2.32.0
- version: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)
+ version: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)
nodemon:
specifier: 3.1.11
version: 3.1.11
- typescript:
- specifier: 5.9.3
- version: 5.9.3
packages:
@@ -1676,8 +1559,8 @@ packages:
'@aws-crypto/util@5.2.0':
resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==}
- '@aws-sdk/client-s3@3.937.0':
- resolution: {integrity: sha512-ioeNe6HSc7PxjsUQY7foSHmgesxM5KwAeUtPhIHgKx99nrM+7xYCfW4FMvHypUzz7ZOvqlCdH7CEAZ8ParBvVg==}
+ '@aws-sdk/client-s3@3.948.0':
+ resolution: {integrity: sha512-uvEjds8aYA9SzhBS8RKDtsDUhNV9VhqKiHTcmvhM7gJO92q0WTn8/QeFTdNyLc6RxpiDyz+uBxS7PcdNiZzqfA==}
engines: {node: '>=18.0.0'}
'@aws-sdk/client-sesv2@3.938.0':
@@ -1688,47 +1571,87 @@ packages:
resolution: {integrity: sha512-0G73S2cDqYwJVvqL08eakj79MZG2QRaB56Ul8/Ps9oQxllr7DMI1IQ/N3j3xjxgpq/U36pkoFZ8aK1n7Sbr3IQ==}
engines: {node: '>=18.0.0'}
+ '@aws-sdk/client-sso@3.948.0':
+ resolution: {integrity: sha512-iWjchXy8bIAVBUsKnbfKYXRwhLgRg3EqCQ5FTr3JbR+QR75rZm4ZOYXlvHGztVTmtAZ+PQVA1Y4zO7v7N87C0A==}
+ engines: {node: '>=18.0.0'}
+
'@aws-sdk/core@3.936.0':
resolution: {integrity: sha512-eGJ2ySUMvgtOziHhDRDLCrj473RJoL4J1vPjVM3NrKC/fF3/LoHjkut8AAnKmrW6a2uTzNKubigw8dEnpmpERw==}
engines: {node: '>=18.0.0'}
+ '@aws-sdk/core@3.947.0':
+ resolution: {integrity: sha512-Khq4zHhuAkvCFuFbgcy3GrZTzfSX7ZIjIcW1zRDxXRLZKRtuhnZdonqTUfaWi5K42/4OmxkYNpsO7X7trQOeHw==}
+ engines: {node: '>=18.0.0'}
+
'@aws-sdk/credential-provider-env@3.936.0':
resolution: {integrity: sha512-dKajFuaugEA5i9gCKzOaVy9uTeZcApE+7Z5wdcZ6j40523fY1a56khDAUYkCfwqa7sHci4ccmxBkAo+fW1RChA==}
engines: {node: '>=18.0.0'}
+ '@aws-sdk/credential-provider-env@3.947.0':
+ resolution: {integrity: sha512-VR2V6dRELmzwAsCpK4GqxUi6UW5WNhAXS9F9AzWi5jvijwJo3nH92YNJUP4quMpgFZxJHEWyXLWgPjh9u0zYOA==}
+ engines: {node: '>=18.0.0'}
+
'@aws-sdk/credential-provider-http@3.936.0':
resolution: {integrity: sha512-5FguODLXG1tWx/x8fBxH+GVrk7Hey2LbXV5h9SFzYCx/2h50URBm0+9hndg0Rd23+xzYe14F6SI9HA9c1sPnjg==}
engines: {node: '>=18.0.0'}
+ '@aws-sdk/credential-provider-http@3.947.0':
+ resolution: {integrity: sha512-inF09lh9SlHj63Vmr5d+LmwPXZc2IbK8lAruhOr3KLsZAIHEgHgGPXWDC2ukTEMzg0pkexQ6FOhXXad6klK4RA==}
+ engines: {node: '>=18.0.0'}
+
'@aws-sdk/credential-provider-ini@3.936.0':
resolution: {integrity: sha512-TbUv56ERQQujoHcLMcfL0Q6bVZfYF83gu/TjHkVkdSlHPOIKaG/mhE2XZSQzXv1cud6LlgeBbfzVAxJ+HPpffg==}
engines: {node: '>=18.0.0'}
+ '@aws-sdk/credential-provider-ini@3.948.0':
+ resolution: {integrity: sha512-Cl//Qh88e8HBL7yYkJNpF5eq76IO6rq8GsatKcfVBm7RFVxCqYEPSSBtkHdbtNwQdRQqAMXc6E/lEB/CZUDxnA==}
+ engines: {node: '>=18.0.0'}
+
'@aws-sdk/credential-provider-login@3.936.0':
resolution: {integrity: sha512-8DVrdRqPyUU66gfV7VZNToh56ZuO5D6agWrkLQE/xbLJOm2RbeRgh6buz7CqV8ipRd6m+zCl9mM4F3osQLZn8Q==}
engines: {node: '>=18.0.0'}
+ '@aws-sdk/credential-provider-login@3.948.0':
+ resolution: {integrity: sha512-gcKO2b6eeTuZGp3Vvgr/9OxajMrD3W+FZ2FCyJox363ZgMoYJsyNid1vuZrEuAGkx0jvveLXfwiVS0UXyPkgtw==}
+ engines: {node: '>=18.0.0'}
+
'@aws-sdk/credential-provider-node@3.936.0':
resolution: {integrity: sha512-rk/2PCtxX9xDsQW8p5Yjoca3StqmQcSfkmD7nQ61AqAHL1YgpSQWqHE+HjfGGiHDYKG7PvE33Ku2GyA7lEIJAw==}
engines: {node: '>=18.0.0'}
+ '@aws-sdk/credential-provider-node@3.948.0':
+ resolution: {integrity: sha512-ep5vRLnrRdcsP17Ef31sNN4g8Nqk/4JBydcUJuFRbGuyQtrZZrVT81UeH2xhz6d0BK6ejafDB9+ZpBjXuWT5/Q==}
+ engines: {node: '>=18.0.0'}
+
'@aws-sdk/credential-provider-process@3.936.0':
resolution: {integrity: sha512-GpA4AcHb96KQK2PSPUyvChvrsEKiLhQ5NWjeef2IZ3Jc8JoosiedYqp6yhZR+S8cTysuvx56WyJIJc8y8OTrLA==}
engines: {node: '>=18.0.0'}
+ '@aws-sdk/credential-provider-process@3.947.0':
+ resolution: {integrity: sha512-WpanFbHe08SP1hAJNeDdBDVz9SGgMu/gc0XJ9u3uNpW99nKZjDpvPRAdW7WLA4K6essMjxWkguIGNOpij6Do2Q==}
+ engines: {node: '>=18.0.0'}
+
'@aws-sdk/credential-provider-sso@3.936.0':
resolution: {integrity: sha512-wHlEAJJvtnSyxTfNhN98JcU4taA1ED2JvuI2eePgawqBwS/Tzi0mhED1lvNIaWOkjfLd+nHALwszGrtJwEq4yQ==}
engines: {node: '>=18.0.0'}
+ '@aws-sdk/credential-provider-sso@3.948.0':
+ resolution: {integrity: sha512-gqLhX1L+zb/ZDnnYbILQqJ46j735StfWV5PbDjxRzBKS7GzsiYoaf6MyHseEopmWrez5zl5l6aWzig7UpzSeQQ==}
+ engines: {node: '>=18.0.0'}
+
'@aws-sdk/credential-provider-web-identity@3.936.0':
resolution: {integrity: sha512-v3qHAuoODkoRXsAF4RG+ZVO6q2P9yYBT4GMpMEfU9wXVNn7AIfwZgTwzSUfnjNiGva5BKleWVpRpJ9DeuLFbUg==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/lib-storage@3.937.0':
- resolution: {integrity: sha512-G+AxZX14MaVUT93BGeG17yBC+rR5yOOvE0QLpSViSARjPLI7el1zEEpOzC18OKIchFoM81VfC0xavfNMIp/bfw==}
+ '@aws-sdk/credential-provider-web-identity@3.948.0':
+ resolution: {integrity: sha512-MvYQlXVoJyfF3/SmnNzOVEtANRAiJIObEUYYyjTqKZTmcRIVVky0tPuG26XnB8LmTYgtESwJIZJj/Eyyc9WURQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/lib-storage@3.948.0':
+ resolution: {integrity: sha512-dY7wISfWgEqSHGps0DkQiDjHhCqR7bc0mMrBHZ810/j12uzhTakAcb9FlF7mFWkX6zEvz2kjxF4r91lBwNqt5w==}
engines: {node: '>=18.0.0'}
peerDependencies:
- '@aws-sdk/client-s3': ^3.937.0
+ '@aws-sdk/client-s3': ^3.948.0
'@aws-sdk/middleware-bucket-endpoint@3.936.0':
resolution: {integrity: sha512-XLSVVfAorUxZh6dzF+HTOp4R1B5EQcdpGcPliWr0KUj2jukgjZEcqbBmjyMF/p9bmyQsONX80iURF1HLAlW0qg==}
@@ -1738,8 +1661,8 @@ packages:
resolution: {integrity: sha512-Eb4ELAC23bEQLJmUMYnPWcjD3FZIsmz2svDiXEcxRkQU9r7NRID7pM7C5NPH94wOfiCk0b2Y8rVyFXW0lGQwbA==}
engines: {node: '>=18.0.0'}
- '@aws-sdk/middleware-flexible-checksums@3.936.0':
- resolution: {integrity: sha512-l3GG6CrSQtMCM6fWY7foV3JQv0WJWT+3G6PSP3Ceb/KEE/5Lz5PrYFXTBf+bVoYL1b0bGjGajcgAXpstBmtHtQ==}
+ '@aws-sdk/middleware-flexible-checksums@3.947.0':
+ resolution: {integrity: sha512-kXXxS2raNESNO+zR0L4YInVjhcGGNI2Mx0AE1ThRhDkAt2se3a+rGf9equ9YvOqA1m8Jl/GSI8cXYvSxXmS9Ag==}
engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-host-header@3.936.0':
@@ -1758,10 +1681,18 @@ packages:
resolution: {integrity: sha512-l4aGbHpXM45YNgXggIux1HgsCVAvvBoqHPkqLnqMl9QVapfuSTjJHfDYDsx1Xxct6/m7qSMUzanBALhiaGO2fA==}
engines: {node: '>=18.0.0'}
+ '@aws-sdk/middleware-recursion-detection@3.948.0':
+ resolution: {integrity: sha512-Qa8Zj+EAqA0VlAVvxpRnpBpIWJI9KUwaioY1vkeNVwXPlNaz9y9zCKVM9iU9OZ5HXpoUg6TnhATAHXHAE8+QsQ==}
+ engines: {node: '>=18.0.0'}
+
'@aws-sdk/middleware-sdk-s3@3.936.0':
resolution: {integrity: sha512-UQs/pVq4cOygsnKON0pOdSKIWkfgY0dzq4h+fR+xHi/Ng3XzxPJhWeAE6tDsKrcyQc1X8UdSbS70XkfGYr5hng==}
engines: {node: '>=18.0.0'}
+ '@aws-sdk/middleware-sdk-s3@3.947.0':
+ resolution: {integrity: sha512-DS2tm5YBKhPW2PthrRBDr6eufChbwXe0NjtTZcYDfUCXf0OR+W6cIqyKguwHMJ+IyYdey30AfVw9/Lb5KB8U8A==}
+ engines: {node: '>=18.0.0'}
+
'@aws-sdk/middleware-ssec@3.936.0':
resolution: {integrity: sha512-/GLC9lZdVp05ozRik5KsuODR/N7j+W+2TbfdFL3iS+7un+gnP6hC8RDOZd6WhpZp7drXQ9guKiTAxkZQwzS8DA==}
engines: {node: '>=18.0.0'}
@@ -1770,10 +1701,18 @@ packages:
resolution: {integrity: sha512-YB40IPa7K3iaYX0lSnV9easDOLPLh+fJyUDF3BH8doX4i1AOSsYn86L4lVldmOaSX+DwiaqKHpvk4wPBdcIPWw==}
engines: {node: '>=18.0.0'}
+ '@aws-sdk/middleware-user-agent@3.947.0':
+ resolution: {integrity: sha512-7rpKV8YNgCP2R4F9RjWZFcD2R+SO/0R4VHIbY9iZJdH2MzzJ8ZG7h8dZ2m8QkQd1fjx4wrFJGGPJUTYXPV3baA==}
+ engines: {node: '>=18.0.0'}
+
'@aws-sdk/nested-clients@3.936.0':
resolution: {integrity: sha512-eyj2tz1XmDSLSZQ5xnB7cLTVKkSJnYAEoNDSUNhzWPxrBDYeJzIbatecOKceKCU8NBf8gWWZCK/CSY0mDxMO0A==}
engines: {node: '>=18.0.0'}
+ '@aws-sdk/nested-clients@3.948.0':
+ resolution: {integrity: sha512-zcbJfBsB6h254o3NuoEkf0+UY1GpE9ioiQdENWv7odo69s8iaGBEQ4BDpsIMqcuiiUXw1uKIVNxCB1gUGYz8lw==}
+ engines: {node: '>=18.0.0'}
+
'@aws-sdk/region-config-resolver@3.936.0':
resolution: {integrity: sha512-wOKhzzWsshXGduxO4pqSiNyL9oUtk4BEvjWm9aaq6Hmfdoydq6v6t0rAGHWPjFwy9z2haovGRi3C8IxdMB4muw==}
engines: {node: '>=18.0.0'}
@@ -1782,10 +1721,18 @@ packages:
resolution: {integrity: sha512-8qS0GFUqkmwO7JZ0P8tdluBmt1UTfYUah8qJXGzNh9n1Pcb0AIeT117cCSiCUtwk+gDbJvd4hhRIhJCNr5wgjg==}
engines: {node: '>=18.0.0'}
+ '@aws-sdk/signature-v4-multi-region@3.947.0':
+ resolution: {integrity: sha512-UaYmzoxf9q3mabIA2hc4T6x5YSFUG2BpNjAZ207EA1bnQMiK+d6vZvb83t7dIWL/U1de1sGV19c1C81Jf14rrA==}
+ engines: {node: '>=18.0.0'}
+
'@aws-sdk/token-providers@3.936.0':
resolution: {integrity: sha512-vvw8+VXk0I+IsoxZw0mX9TMJawUJvEsg3EF7zcCSetwhNPAU8Xmlhv7E/sN/FgSmm7b7DsqKoW6rVtQiCs1PWQ==}
engines: {node: '>=18.0.0'}
+ '@aws-sdk/token-providers@3.948.0':
+ resolution: {integrity: sha512-V487/kM4Teq5dcr1t5K6eoUKuqlGr9FRWL3MIMukMERJXHZvio6kox60FZ/YtciRHRI75u14YUqm2Dzddcu3+A==}
+ engines: {node: '>=18.0.0'}
+
'@aws-sdk/types@3.936.0':
resolution: {integrity: sha512-uz0/VlMd2pP5MepdrHizd+T+OKfyK4r3OA9JI+L/lPKg0YFQosdJNCKisr6o70E3dh8iMpFYxF1UN/4uZsyARg==}
engines: {node: '>=18.0.0'}
@@ -1814,12 +1761,21 @@ packages:
aws-crt:
optional: true
+ '@aws-sdk/util-user-agent-node@3.947.0':
+ resolution: {integrity: sha512-+vhHoDrdbb+zerV4noQk1DHaUMNzWFWPpPYjVTwW2186k5BEJIecAMChYkghRrBVJ3KPWP1+JnZwOd72F3d4rQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ aws-crt: '>=1.0.0'
+ peerDependenciesMeta:
+ aws-crt:
+ optional: true
+
'@aws-sdk/xml-builder@3.930.0':
resolution: {integrity: sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==}
engines: {node: '>=18.0.0'}
- '@aws/lambda-invoke-store@0.2.0':
- resolution: {integrity: sha512-D1jAmAZQYMoPiacfgNf7AWhg3DFN3Wq/vQv3WINt9znwjzHp2x+WzdJFxxj7xZL7V1U79As6G8f7PorMYWBKsQ==}
+ '@aws/lambda-invoke-store@0.2.2':
+ resolution: {integrity: sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==}
engines: {node: '>=18.0.0'}
'@babel/code-frame@7.27.1':
@@ -2095,8 +2051,8 @@ packages:
cpu: [ppc64]
os: [aix]
- '@esbuild/aix-ppc64@0.27.0':
- resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==}
+ '@esbuild/aix-ppc64@0.27.1':
+ resolution: {integrity: sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
@@ -2107,8 +2063,8 @@ packages:
cpu: [arm64]
os: [android]
- '@esbuild/android-arm64@0.27.0':
- resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==}
+ '@esbuild/android-arm64@0.27.1':
+ resolution: {integrity: sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
@@ -2119,8 +2075,8 @@ packages:
cpu: [arm]
os: [android]
- '@esbuild/android-arm@0.27.0':
- resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==}
+ '@esbuild/android-arm@0.27.1':
+ resolution: {integrity: sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
@@ -2131,8 +2087,8 @@ packages:
cpu: [x64]
os: [android]
- '@esbuild/android-x64@0.27.0':
- resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==}
+ '@esbuild/android-x64@0.27.1':
+ resolution: {integrity: sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
@@ -2143,8 +2099,8 @@ packages:
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-arm64@0.27.0':
- resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==}
+ '@esbuild/darwin-arm64@0.27.1':
+ resolution: {integrity: sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
@@ -2155,8 +2111,8 @@ packages:
cpu: [x64]
os: [darwin]
- '@esbuild/darwin-x64@0.27.0':
- resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==}
+ '@esbuild/darwin-x64@0.27.1':
+ resolution: {integrity: sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
@@ -2167,8 +2123,8 @@ packages:
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-arm64@0.27.0':
- resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==}
+ '@esbuild/freebsd-arm64@0.27.1':
+ resolution: {integrity: sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
@@ -2179,8 +2135,8 @@ packages:
cpu: [x64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.27.0':
- resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==}
+ '@esbuild/freebsd-x64@0.27.1':
+ resolution: {integrity: sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
@@ -2191,8 +2147,8 @@ packages:
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm64@0.27.0':
- resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==}
+ '@esbuild/linux-arm64@0.27.1':
+ resolution: {integrity: sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
@@ -2203,8 +2159,8 @@ packages:
cpu: [arm]
os: [linux]
- '@esbuild/linux-arm@0.27.0':
- resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==}
+ '@esbuild/linux-arm@0.27.1':
+ resolution: {integrity: sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
@@ -2215,8 +2171,8 @@ packages:
cpu: [ia32]
os: [linux]
- '@esbuild/linux-ia32@0.27.0':
- resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==}
+ '@esbuild/linux-ia32@0.27.1':
+ resolution: {integrity: sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
@@ -2227,8 +2183,8 @@ packages:
cpu: [loong64]
os: [linux]
- '@esbuild/linux-loong64@0.27.0':
- resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==}
+ '@esbuild/linux-loong64@0.27.1':
+ resolution: {integrity: sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
@@ -2239,8 +2195,8 @@ packages:
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-mips64el@0.27.0':
- resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==}
+ '@esbuild/linux-mips64el@0.27.1':
+ resolution: {integrity: sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
@@ -2251,8 +2207,8 @@ packages:
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-ppc64@0.27.0':
- resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==}
+ '@esbuild/linux-ppc64@0.27.1':
+ resolution: {integrity: sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
@@ -2263,8 +2219,8 @@ packages:
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-riscv64@0.27.0':
- resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==}
+ '@esbuild/linux-riscv64@0.27.1':
+ resolution: {integrity: sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
@@ -2275,8 +2231,8 @@ packages:
cpu: [s390x]
os: [linux]
- '@esbuild/linux-s390x@0.27.0':
- resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==}
+ '@esbuild/linux-s390x@0.27.1':
+ resolution: {integrity: sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
@@ -2287,8 +2243,8 @@ packages:
cpu: [x64]
os: [linux]
- '@esbuild/linux-x64@0.27.0':
- resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==}
+ '@esbuild/linux-x64@0.27.1':
+ resolution: {integrity: sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
@@ -2299,8 +2255,8 @@ packages:
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-arm64@0.27.0':
- resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==}
+ '@esbuild/netbsd-arm64@0.27.1':
+ resolution: {integrity: sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
@@ -2311,8 +2267,8 @@ packages:
cpu: [x64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.27.0':
- resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==}
+ '@esbuild/netbsd-x64@0.27.1':
+ resolution: {integrity: sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
@@ -2323,8 +2279,8 @@ packages:
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-arm64@0.27.0':
- resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==}
+ '@esbuild/openbsd-arm64@0.27.1':
+ resolution: {integrity: sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
@@ -2335,8 +2291,8 @@ packages:
cpu: [x64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.27.0':
- resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==}
+ '@esbuild/openbsd-x64@0.27.1':
+ resolution: {integrity: sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
@@ -2347,8 +2303,8 @@ packages:
cpu: [arm64]
os: [openharmony]
- '@esbuild/openharmony-arm64@0.27.0':
- resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==}
+ '@esbuild/openharmony-arm64@0.27.1':
+ resolution: {integrity: sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
@@ -2359,8 +2315,8 @@ packages:
cpu: [x64]
os: [sunos]
- '@esbuild/sunos-x64@0.27.0':
- resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==}
+ '@esbuild/sunos-x64@0.27.1':
+ resolution: {integrity: sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
@@ -2371,8 +2327,8 @@ packages:
cpu: [arm64]
os: [win32]
- '@esbuild/win32-arm64@0.27.0':
- resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==}
+ '@esbuild/win32-arm64@0.27.1':
+ resolution: {integrity: sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
@@ -2383,8 +2339,8 @@ packages:
cpu: [ia32]
os: [win32]
- '@esbuild/win32-ia32@0.27.0':
- resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==}
+ '@esbuild/win32-ia32@0.27.1':
+ resolution: {integrity: sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
@@ -2395,8 +2351,8 @@ packages:
cpu: [x64]
os: [win32]
- '@esbuild/win32-x64@0.27.0':
- resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==}
+ '@esbuild/win32-x64@0.27.1':
+ resolution: {integrity: sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
@@ -2455,8 +2411,8 @@ packages:
'@fastify/accept-negotiator@2.0.1':
resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==}
- '@fastify/accepts@5.0.3':
- resolution: {integrity: sha512-JQE0PVW7V5aIvWNQvBvlz3K92Q4OnDcC8ERcJnFd9a11/IVi/eV6SCutOUh9K2CAeQUMkJJyRog3Gltn7uAF6g==}
+ '@fastify/accepts@5.0.4':
+ resolution: {integrity: sha512-XKtvD77ZLQ/4G5r1WhPua5+rTctt16DF4XUMBQuP8KM/Ic431GhfqjJoYvwS4aDaUhoRTiU9DGFaMZ3TRM6ctg==}
'@fastify/ajv-compiler@4.0.5':
resolution: {integrity: sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A==}
@@ -2464,11 +2420,8 @@ packages:
'@fastify/busboy@3.2.0':
resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==}
- '@fastify/cookie@11.0.2':
- resolution: {integrity: sha512-GWdwdGlgJxyvNv+QcKiGNevSspMQXncjMZ1J8IvuDQk0jvkzgWWZFNC2En3s+nHndZBGV8IbLwOI/sxCZw/mzA==}
-
- '@fastify/cors@11.1.0':
- resolution: {integrity: sha512-sUw8ed8wP2SouWZTIbA7V2OQtMNpLj2W6qJOYhNdcmINTu6gsxVYXjQiM9mdi8UUDlcoDDJ/W2syPo1WB2QjYA==}
+ '@fastify/cors@11.2.0':
+ resolution: {integrity: sha512-LbLHBuSAdGdSFZYTLVA3+Ch2t+sA6nq3Ejc6XLAKiQ6ViS2qFnvicpj0htsx03FyYeLs04HfRNBsz/a8SvbcUw==}
'@fastify/deepmerge@3.1.0':
resolution: {integrity: sha512-lCVONBQINyNhM6LLezB6+2afusgEYR4G8xenMsfe+AT+iZ7Ca6upM5Ha8UkZuYSnuMw3GWl/BiPXnLMi/gSxuQ==}
@@ -2485,8 +2438,8 @@ packages:
'@fastify/forwarded@3.0.1':
resolution: {integrity: sha512-JqDochHFqXs3C3Ml3gOY58zM7OqO9ENqPo0UqAjAjH8L01fRZqwX9iLeX34//kiJubF7r2ZQHtBRU36vONbLlw==}
- '@fastify/http-proxy@11.3.0':
- resolution: {integrity: sha512-FXFxkdTlXqVI11fqlxmHqOPzIo0elBA60o3bfdh2seD44KWOBBzelzCVgs1OelrxuADCyWUQp2ZxA2wp3mqQMg==}
+ '@fastify/http-proxy@11.4.1':
+ resolution: {integrity: sha512-sMYEIB0c7qCYutpZyS12c8xnVgmEMSUUVU2XjcNq2JzHf6Hta1BWcpnG5FXxR3WEm48uZNCi0MxnIYtwjwd21Q==}
'@fastify/merge-json-schemas@0.2.1':
resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==}
@@ -2497,8 +2450,8 @@ packages:
'@fastify/proxy-addr@5.1.0':
resolution: {integrity: sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==}
- '@fastify/reply-from@12.4.0':
- resolution: {integrity: sha512-2MGQ3c/Sf3YKs6/YNwZgk7v6udDeA4AmlqeaxKHVFg/0ZPN2T1AjtU0SZ8VmIZsxZXQVOlhjR43oVydbuqm8SQ==}
+ '@fastify/reply-from@12.5.0':
+ resolution: {integrity: sha512-m7mTGjgtnpnZBk4I8r6eFJY8WB4kyvXJo2nAf5PBm5f3mj3P7G6H2D7mhmF25os/n6EGMWVyw/bpTUehvy0i8g==}
'@fastify/send@4.1.0':
resolution: {integrity: sha512-TMYeQLCBSy2TOFmV95hQWkiTYgC/SEx7vMdV+wnZVX4tt8VBLKzmH8vV9OzJehV0+XBfg+WxPMt5wp+JBUKsVw==}
@@ -2506,9 +2459,6 @@ packages:
'@fastify/static@8.3.0':
resolution: {integrity: sha512-yKxviR5PH1OKNnisIzZKmgZSus0r2OZb8qCSbqmw34aolT4g3UlzYfeBRym+HJ1J471CR8e2ldNub4PubD1coA==}
- '@fastify/view@11.1.1':
- resolution: {integrity: sha512-GiHqT3R2eKJgWmy0s45eELTC447a4+lTM2o+8fSWeKwBe9VToeePuHJcKtOEXPrKGSddGO0RsNayULiS3aeHeQ==}
-
'@file-type/xml@0.4.4':
resolution: {integrity: sha512-NhCyXoHlVZ8TqM476hyzwGJ24+D5IPSaZhmrPj7qXnEVb3q6jrFzA3mM9TBpknKSI9EuQeGTKRg2DXGUwvBBoQ==}
@@ -2867,6 +2817,17 @@ packages:
'@keyv/serialize@1.1.1':
resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==}
+ '@kitajs/html@4.2.11':
+ resolution: {integrity: sha512-gOe+zzCZKN2fPT1FUK32mHsr21ILcAOUUux/yDqQthInW8egN8RuxVp+zP3KhwWETVACkurBiKV9RWuNw+ceiw==}
+ engines: {node: '>=12'}
+
+ '@kitajs/ts-html-plugin@4.1.3':
+ resolution: {integrity: sha512-NlYrID5yMxfRKiO1eiiSC4MWveKe0ffoCJOZm4idNOqwimmLXr0g1NmvCcquOU2XLRrgzynxZqw6rhwR5CY5Nw==}
+ hasBin: true
+ peerDependencies:
+ '@kitajs/html': ^4.2.10
+ typescript: ^5.6.2
+
'@kurkle/color@0.3.4':
resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==}
@@ -2885,11 +2846,11 @@ packages:
resolution: {integrity: sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==}
hasBin: true
- '@mcaptcha/core-glue@0.1.0-alpha-5':
- resolution: {integrity: sha512-16qWm5O5X0Y9LXULULaAks8Vf9FNlUUBcR5KDt49aWhFhG5++JzxNmCwQM9EJSHNU7y0U+FdyAWcGmjfKlkRLA==}
+ '@mcaptcha/core-glue@0.1.0-rc1':
+ resolution: {integrity: sha512-P4SgUioJDR38QpnP9sPY72NyaYex8MXD6RbzrfKra+ngamT26XjqVZEHBiZU2RT7u0SsWhuko4N1ntNOghsgpg==}
- '@mcaptcha/vanilla-glue@0.1.0-alpha-3':
- resolution: {integrity: sha512-GT6TJBgmViGXcXiT5VOr+h/6iOnThSlZuCoOWncubyTZU9R3cgU5vWPkF7G6Ob6ee2CBe3yqBxxk24CFVGTVXw==}
+ '@mcaptcha/vanilla-glue@0.1.0-rc2':
+ resolution: {integrity: sha512-LDjn9lrKioJ3zwaQOfql7PXsnxCAHg7b1rPw7G0OxpvVE7xLB/a40SHfIIiocce2VS9TPI4MbcKm5pcuy8fU5g==}
'@mdx-js/react@3.1.1':
resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==}
@@ -2897,11 +2858,11 @@ packages:
'@types/react': '>=16'
react: '>=16'
- '@microsoft/api-extractor-model@7.32.0':
- resolution: {integrity: sha512-QIVJSreb8fGGJy1Qx0yzGVXxvHJN1WXgkFNHFheVv1iBJNqgvp+xeT3ienJmRwXmPPc5Es/cxBrXtKZJR3i7iw==}
+ '@microsoft/api-extractor-model@7.32.2':
+ resolution: {integrity: sha512-Ussc25rAalc+4JJs9HNQE7TuO9y6jpYQX9nWD1DhqUzYPBr3Lr7O9intf+ZY8kD5HnIqeIRJX7ccCT0QyBy2Ww==}
- '@microsoft/api-extractor@7.55.0':
- resolution: {integrity: sha512-TYc5OtAK/9E3HGgd2bIfSjQDYIwPc0dysf9rPiwXZGsq916I6W2oww9bhm1OxPOeg6rMfOX3PoroGd7oCryYog==}
+ '@microsoft/api-extractor@7.55.2':
+ resolution: {integrity: sha512-1jlWO4qmgqYoVUcyh+oXYRztZde/pAi7cSVzBz/rc+S7CoVzDasy8QE13dx6sLG4VRo8SfkkLbFORR6tBw4uGQ==}
hasBin: true
'@microsoft/tsdoc-config@0.18.0':
@@ -2965,73 +2926,73 @@ packages:
resolution: {integrity: sha512-EFd6cVbHsgLa6wa4RljGj6Wk75qoHxUSyc5asLyyPSyuhIcdS2Q3Phw6ImS1q+CkALthJRShiYfKANcQMuMqsQ==}
engines: {node: '>=18'}
- '@napi-rs/canvas-android-arm64@0.1.82':
- resolution: {integrity: sha512-bvZhN0iI54ouaQOrgJV96H2q7J3ZoufnHf4E1fUaERwW29Rz4rgicohnAg4venwBJZYjGl5Yl3CGmlAl1LZowQ==}
+ '@napi-rs/canvas-android-arm64@0.1.84':
+ resolution: {integrity: sha512-pdvuqvj3qtwVryqgpAGornJLV6Ezpk39V6wT4JCnRVGy8I3Tk1au8qOalFGrx/r0Ig87hWslysPpHBxVpBMIww==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [android]
- '@napi-rs/canvas-darwin-arm64@0.1.82':
- resolution: {integrity: sha512-InuBHKCyuFqhNwNr4gpqazo5Xp6ltKflqOLiROn4hqAS8u21xAHyYCJRgHwd+a5NKmutFTaRWeUIT/vxWbU/iw==}
+ '@napi-rs/canvas-darwin-arm64@0.1.84':
+ resolution: {integrity: sha512-A8IND3Hnv0R6abc6qCcCaOCujTLMmGxtucMTZ5vbQUrEN/scxi378MyTLtyWg+MRr6bwQJ6v/orqMS9datIcww==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@napi-rs/canvas-darwin-x64@0.1.82':
- resolution: {integrity: sha512-aQGV5Ynn96onSXcuvYb2y7TRXD/t4CL2EGmnGqvLyeJX1JLSNisKQlWN/1bPDDXymZYSdUqbXehj5qzBlOx+RQ==}
+ '@napi-rs/canvas-darwin-x64@0.1.84':
+ resolution: {integrity: sha512-AUW45lJhYWwnA74LaNeqhvqYKK/2hNnBBBl03KRdqeCD4tKneUSrxUqIv8d22CBweOvrAASyKN3W87WO2zEr/A==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@napi-rs/canvas-linux-arm-gnueabihf@0.1.82':
- resolution: {integrity: sha512-YIUpmHWeHGGRhWitT1KJkgj/JPXPfc9ox8oUoyaGPxolLGPp5AxJkq8wIg8CdFGtutget968dtwmx71m8o3h5g==}
+ '@napi-rs/canvas-linux-arm-gnueabihf@0.1.84':
+ resolution: {integrity: sha512-8zs5ZqOrdgs4FioTxSBrkl/wHZB56bJNBqaIsfPL4ZkEQCinOkrFF7xIcXiHiKp93J3wUtbIzeVrhTIaWwqk+A==}
engines: {node: '>= 10'}
cpu: [arm]
os: [linux]
- '@napi-rs/canvas-linux-arm64-gnu@0.1.82':
- resolution: {integrity: sha512-AwLzwLBgmvk7kWeUgItOUor/QyG31xqtD26w1tLpf4yE0hiXTGp23yc669aawjB6FzgIkjh1NKaNS52B7/qEBQ==}
+ '@napi-rs/canvas-linux-arm64-gnu@0.1.84':
+ resolution: {integrity: sha512-i204vtowOglJUpbAFWU5mqsJgH0lVpNk/Ml4mQtB4Lndd86oF+Otr6Mr5KQnZHqYGhlSIKiU2SYnUbhO28zGQA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@napi-rs/canvas-linux-arm64-musl@0.1.82':
- resolution: {integrity: sha512-moZWuqepAwWBffdF4JDadt8TgBD02iMhG6I1FHZf8xO20AsIp9rB+p0B8Zma2h2vAF/YMjeFCDmW5un6+zZz9g==}
+ '@napi-rs/canvas-linux-arm64-musl@0.1.84':
+ resolution: {integrity: sha512-VyZq0EEw+OILnWk7G3ZgLLPaz1ERaPP++jLjeyLMbFOF+Tr4zHzWKiKDsEV/cT7btLPZbVoR3VX+T9/QubnURQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@napi-rs/canvas-linux-riscv64-gnu@0.1.82':
- resolution: {integrity: sha512-w9++2df2kG9eC9LWYIHIlMLuhIrKGQYfUxs97CwgxYjITeFakIRazI9LYWgVzEc98QZ9x9GQvlicFsrROV59MQ==}
+ '@napi-rs/canvas-linux-riscv64-gnu@0.1.84':
+ resolution: {integrity: sha512-PSMTh8DiThvLRsbtc/a065I/ceZk17EXAATv9uNvHgkgo7wdEfTh2C3aveNkBMGByVO3tvnvD5v/YFtZL07cIg==}
engines: {node: '>= 10'}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@napi-rs/canvas-linux-x64-gnu@0.1.82':
- resolution: {integrity: sha512-lZulOPwrRi6hEg/17CaqdwWEUfOlIJuhXxincx1aVzsVOCmyHf+xFq4i6liJl1P+x2v6Iz2Z/H5zHvXJCC7Bwg==}
+ '@napi-rs/canvas-linux-x64-gnu@0.1.84':
+ resolution: {integrity: sha512-N1GY3noO1oqgEo3rYQIwY44kfM11vA0lDbN0orTOHfCSUZTUyiYCY0nZ197QMahZBm1aR/vYgsWpV74MMMDuNA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@napi-rs/canvas-linux-x64-musl@0.1.82':
- resolution: {integrity: sha512-Be9Wf5RTv1w6GXlTph55K3PH3vsAh1Ax4T1FQY1UYM0QfD0yrwGdnJ8/fhqw7dEgMjd59zIbjJQC8C3msbGn5g==}
+ '@napi-rs/canvas-linux-x64-musl@0.1.84':
+ resolution: {integrity: sha512-vUZmua6ADqTWyHyei81aXIt9wp0yjeNwTH0KdhdeoBb6azHmFR8uKTukZMXfLCC3bnsW0t4lW7K78KNMknmtjg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
libc: [musl]
- '@napi-rs/canvas-win32-x64-msvc@0.1.82':
- resolution: {integrity: sha512-LN/i8VrvxTDmEEK1c10z2cdOTkWT76LlTGtyZe5Kr1sqoSomKeExAjbilnu1+oee5lZUgS5yfZ2LNlVhCeARuw==}
+ '@napi-rs/canvas-win32-x64-msvc@0.1.84':
+ resolution: {integrity: sha512-YSs8ncurc1xzegUMNnQUTYrdrAuaXdPMOa+iYYyAxydOtg0ppV386hyYMsy00Yip1NlTgLCseRG4sHSnjQx6og==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
- '@napi-rs/canvas@0.1.82':
- resolution: {integrity: sha512-FGjyUBoF0sl1EenSiE4UV2WYu76q6F9GSYedq5EiOCOyGYoQ/Owulcv6rd7v/tWOpljDDtefXXIaOCJrVKem4w==}
+ '@napi-rs/canvas@0.1.84':
+ resolution: {integrity: sha512-88FTNFs4uuiFKP0tUrPsEXhpe9dg7za9ILZJE08pGdUveMIDeana1zwfVkqRHJDPJFAmGY3dXmJ99dzsy57YnA==}
engines: {node: '>= 10'}
'@napi-rs/nice-android-arm-eabi@1.1.1':
@@ -3238,14 +3199,10 @@ packages:
'@open-draft/until@2.1.0':
resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==}
- '@opentelemetry/api-logs@0.204.0':
- resolution: {integrity: sha512-DqxY8yoAaiBPivoJD4UtgrMS8gEmzZ5lnaxzPojzLVHBGqPxgWm4zcuvcUHZiqQ6kRX2Klel2r9y8cA2HAtqpw==}
+ '@opentelemetry/api-logs@0.208.0':
+ resolution: {integrity: sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg==}
engines: {node: '>=8.0.0'}
- '@opentelemetry/api-logs@0.57.2':
- resolution: {integrity: sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==}
- engines: {node: '>=14'}
-
'@opentelemetry/api@1.9.0':
resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
engines: {node: '>=8.0.0'}
@@ -3256,162 +3213,150 @@ packages:
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
- '@opentelemetry/core@2.1.0':
- resolution: {integrity: sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.0.0 <1.10.0'
-
'@opentelemetry/core@2.2.0':
resolution: {integrity: sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
- '@opentelemetry/instrumentation-amqplib@0.51.0':
- resolution: {integrity: sha512-XGmjYwjVRktD4agFnWBWQXo9SiYHKBxR6Ag3MLXwtLE4R99N3a08kGKM5SC1qOFKIELcQDGFEFT9ydXMH00Luw==}
+ '@opentelemetry/instrumentation-amqplib@0.55.0':
+ resolution: {integrity: sha512-5ULoU8p+tWcQw5PDYZn8rySptGSLZHNX/7srqo2TioPnAAcvTy6sQFQXsNPrAnyRRtYGMetXVyZUy5OaX1+IfA==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-connect@0.48.0':
- resolution: {integrity: sha512-OMjc3SFL4pC16PeK+tDhwP7MRvDPalYCGSvGqUhX5rASkI2H0RuxZHOWElYeXkV0WP+70Gw6JHWac/2Zqwmhdw==}
+ '@opentelemetry/instrumentation-connect@0.52.0':
+ resolution: {integrity: sha512-GXPxfNB5szMbV3I9b7kNWSmQBoBzw7MT0ui6iU/p+NIzVx3a06Ri2cdQO7tG9EKb4aKSLmfX9Cw5cKxXqX6Ohg==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-dataloader@0.22.0':
- resolution: {integrity: sha512-bXnTcwtngQsI1CvodFkTemrrRSQjAjZxqHVc+CJZTDnidT0T6wt3jkKhnsjU/Kkkc0lacr6VdRpCu2CUWa0OKw==}
+ '@opentelemetry/instrumentation-dataloader@0.26.0':
+ resolution: {integrity: sha512-P2BgnFfTOarZ5OKPmYfbXfDFjQ4P9WkQ1Jji7yH5/WwB6Wm/knynAoA1rxbjWcDlYupFkyT0M1j6XLzDzy0aCA==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-express@0.53.0':
- resolution: {integrity: sha512-r/PBafQmFYRjuxLYEHJ3ze1iBnP2GDA1nXOSS6E02KnYNZAVjj6WcDA1MSthtdAUUK0XnotHvvWM8/qz7DMO5A==}
+ '@opentelemetry/instrumentation-express@0.57.0':
+ resolution: {integrity: sha512-HAdx/o58+8tSR5iW+ru4PHnEejyKrAy9fYFhlEI81o10nYxrGahnMAHWiSjhDC7UQSY3I4gjcPgSKQz4rm/asg==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-fs@0.24.0':
- resolution: {integrity: sha512-HjIxJ6CBRD770KNVaTdMXIv29Sjz4C1kPCCK5x1Ujpc6SNnLGPqUVyJYZ3LUhhnHAqdbrl83ogVWjCgeT4Q0yw==}
+ '@opentelemetry/instrumentation-fs@0.28.0':
+ resolution: {integrity: sha512-FFvg8fq53RRXVBRHZViP+EMxMR03tqzEGpuq55lHNbVPyFklSVfQBN50syPhK5UYYwaStx0eyCtHtbRreusc5g==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-generic-pool@0.48.0':
- resolution: {integrity: sha512-TLv/On8pufynNR+pUbpkyvuESVASZZKMlqCm4bBImTpXKTpqXaJJ3o/MUDeMlM91rpen+PEv2SeyOKcHCSlgag==}
+ '@opentelemetry/instrumentation-generic-pool@0.52.0':
+ resolution: {integrity: sha512-ISkNcv5CM2IwvsMVL31Tl61/p2Zm2I2NAsYq5SSBgOsOndT0TjnptjufYVScCnD5ZLD1tpl4T3GEYULLYOdIdQ==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-graphql@0.52.0':
- resolution: {integrity: sha512-3fEJ8jOOMwopvldY16KuzHbRhPk8wSsOTSF0v2psmOCGewh6ad+ZbkTx/xyUK9rUdUMWAxRVU0tFpj4Wx1vkPA==}
+ '@opentelemetry/instrumentation-graphql@0.56.0':
+ resolution: {integrity: sha512-IPvNk8AFoVzTAM0Z399t34VDmGDgwT6rIqCUug8P9oAGerl2/PEIYMPOl/rerPGu+q8gSWdmbFSjgg7PDVRd3Q==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-hapi@0.51.0':
- resolution: {integrity: sha512-qyf27DaFNL1Qhbo/da+04MSCw982B02FhuOS5/UF+PMhM61CcOiu7fPuXj8TvbqyReQuJFljXE6UirlvoT/62g==}
+ '@opentelemetry/instrumentation-hapi@0.55.0':
+ resolution: {integrity: sha512-prqAkRf9e4eEpy4G3UcR32prKE8NLNlA90TdEU1UsghOTg0jUvs40Jz8LQWFEs5NbLbXHYGzB4CYVkCI8eWEVQ==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-http@0.204.0':
- resolution: {integrity: sha512-1afJYyGRA4OmHTv0FfNTrTAzoEjPQUYgd+8ih/lX0LlZBnGio/O80vxA0lN3knsJPS7FiDrsDrWq25K7oAzbkw==}
+ '@opentelemetry/instrumentation-http@0.208.0':
+ resolution: {integrity: sha512-rhmK46DRWEbQQB77RxmVXGyjs6783crXCnFjYQj+4tDH/Kpv9Rbg3h2kaNyp5Vz2emF1f9HOQQvZoHzwMWOFZQ==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-ioredis@0.52.0':
- resolution: {integrity: sha512-rUvlyZwI90HRQPYicxpDGhT8setMrlHKokCtBtZgYxQWRF5RBbG4q0pGtbZvd7kyseuHbFpA3I/5z7M8b/5ywg==}
+ '@opentelemetry/instrumentation-ioredis@0.56.0':
+ resolution: {integrity: sha512-XSWeqsd3rKSsT3WBz/JKJDcZD4QYElZEa0xVdX8f9dh4h4QgXhKRLorVsVkK3uXFbC2sZKAS2Ds+YolGwD83Dg==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-kafkajs@0.14.0':
- resolution: {integrity: sha512-kbB5yXS47dTIdO/lfbbXlzhvHFturbux4EpP0+6H78Lk0Bn4QXiZQW7rmZY1xBCY16mNcCb8Yt0mhz85hTnSVA==}
+ '@opentelemetry/instrumentation-kafkajs@0.18.0':
+ resolution: {integrity: sha512-KCL/1HnZN5zkUMgPyOxfGjLjbXjpd4odDToy+7c+UsthIzVLFf99LnfIBE8YSSrYE4+uS7OwJMhvhg3tWjqMBg==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-knex@0.49.0':
- resolution: {integrity: sha512-NKsRRT27fbIYL4Ix+BjjP8h4YveyKc+2gD6DMZbr5R5rUeDqfC8+DTfIt3c3ex3BIc5Vvek4rqHnN7q34ZetLQ==}
+ '@opentelemetry/instrumentation-knex@0.53.0':
+ resolution: {integrity: sha512-xngn5cH2mVXFmiT1XfQ1aHqq1m4xb5wvU6j9lSgLlihJ1bXzsO543cpDwjrZm2nMrlpddBf55w8+bfS4qDh60g==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-koa@0.52.0':
- resolution: {integrity: sha512-JJSBYLDx/mNSy8Ibi/uQixu2rH0bZODJa8/cz04hEhRaiZQoeJ5UrOhO/mS87IdgVsHrnBOsZ6vDu09znupyuA==}
+ '@opentelemetry/instrumentation-koa@0.57.0':
+ resolution: {integrity: sha512-3JS8PU/D5E3q295mwloU2v7c7/m+DyCqdu62BIzWt+3u9utjxC9QS7v6WmUNuoDN3RM+Q+D1Gpj13ERo+m7CGg==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': ^1.9.0
+
+ '@opentelemetry/instrumentation-lru-memoizer@0.53.0':
+ resolution: {integrity: sha512-LDwWz5cPkWWr0HBIuZUjslyvijljTwmwiItpMTHujaULZCxcYE9eU44Qf/pbVC8TulT0IhZi+RoGvHKXvNhysw==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-lru-memoizer@0.49.0':
- resolution: {integrity: sha512-ctXu+O/1HSadAxtjoEg2w307Z5iPyLOMM8IRNwjaKrIpNAthYGSOanChbk1kqY6zU5CrpkPHGdAT6jk8dXiMqw==}
+ '@opentelemetry/instrumentation-mongodb@0.61.0':
+ resolution: {integrity: sha512-OV3i2DSoY5M/pmLk+68xr5RvkHU8DRB3DKMzYJdwDdcxeLs62tLbkmRyqJZsYf3Ht7j11rq35pHOWLuLzXL7pQ==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-mongodb@0.57.0':
- resolution: {integrity: sha512-KD6Rg0KSHWDkik+qjIOWoksi1xqSpix8TSPfquIK1DTmd9OTFb5PHmMkzJe16TAPVEuElUW8gvgP59cacFcrMQ==}
+ '@opentelemetry/instrumentation-mongoose@0.55.0':
+ resolution: {integrity: sha512-5afj0HfF6aM6Nlqgu6/PPHFk8QBfIe3+zF9FGpX76jWPS0/dujoEYn82/XcLSaW5LPUDW8sni+YeK0vTBNri+w==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-mongoose@0.51.0':
- resolution: {integrity: sha512-gwWaAlhhV2By7XcbyU3DOLMvzsgeaymwP/jktDC+/uPkCmgB61zurwqOQdeiRq9KAf22Y2dtE5ZLXxytJRbEVA==}
+ '@opentelemetry/instrumentation-mysql2@0.55.0':
+ resolution: {integrity: sha512-0cs8whQG55aIi20gnK8B7cco6OK6N+enNhW0p5284MvqJ5EPi+I1YlWsWXgzv/V2HFirEejkvKiI4Iw21OqDWg==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-mysql2@0.51.0':
- resolution: {integrity: sha512-zT2Wg22Xn43RyfU3NOUmnFtb5zlDI0fKcijCj9AcK9zuLZ4ModgtLXOyBJSSfO+hsOCZSC1v/Fxwj+nZJFdzLQ==}
+ '@opentelemetry/instrumentation-mysql@0.54.0':
+ resolution: {integrity: sha512-bqC1YhnwAeWmRzy1/Xf9cDqxNG2d/JDkaxnqF5N6iJKN1eVWI+vg7NfDkf52/Nggp3tl1jcC++ptC61BD6738A==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-mysql@0.50.0':
- resolution: {integrity: sha512-duKAvMRI3vq6u9JwzIipY9zHfikN20bX05sL7GjDeLKr2qV0LQ4ADtKST7KStdGcQ+MTN5wghWbbVdLgNcB3rA==}
+ '@opentelemetry/instrumentation-pg@0.61.0':
+ resolution: {integrity: sha512-UeV7KeTnRSM7ECHa3YscoklhUtTQPs6V6qYpG283AB7xpnPGCUCUfECFT9jFg6/iZOQTt3FHkB1wGTJCNZEvPw==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-pg@0.57.0':
- resolution: {integrity: sha512-dWLGE+r5lBgm2A8SaaSYDE3OKJ/kwwy5WLyGyzor8PLhUL9VnJRiY6qhp4njwhnljiLtzeffRtG2Mf/YyWLeTw==}
+ '@opentelemetry/instrumentation-redis@0.57.0':
+ resolution: {integrity: sha512-bCxTHQFXzrU3eU1LZnOZQ3s5LURxQPDlU3/upBzlWY77qOI1GZuGofazj3jtzjctMJeBEJhNwIFEgRPBX1kp/Q==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-redis@0.53.0':
- resolution: {integrity: sha512-WUHV8fr+8yo5RmzyU7D5BIE1zwiaNQcTyZPwtxlfr7px6NYYx7IIpSihJK7WA60npWynfxxK1T67RAVF0Gdfjg==}
+ '@opentelemetry/instrumentation-tedious@0.27.0':
+ resolution: {integrity: sha512-jRtyUJNZppPBjPae4ZjIQ2eqJbcRaRfJkr0lQLHFmOU/no5A6e9s1OHLd5XZyZoBJ/ymngZitanyRRA5cniseA==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation-tedious@0.23.0':
- resolution: {integrity: sha512-3TMTk/9VtlRonVTaU4tCzbg4YqW+Iq/l5VnN2e5whP6JgEg/PKfrGbqQ+CxQWNLfLaQYIUgEZqAn5gk/inh1uQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-undici@0.15.0':
- resolution: {integrity: sha512-sNFGA/iCDlVkNjzTzPRcudmI11vT/WAfAguRdZY9IspCw02N4WSC72zTuQhSMheh2a1gdeM9my1imnKRvEEvEg==}
+ '@opentelemetry/instrumentation-undici@0.19.0':
+ resolution: {integrity: sha512-Pst/RhR61A2OoZQZkn6OLpdVpXp6qn3Y92wXa6umfJe9rV640r4bc6SWvw4pPN6DiQqPu2c8gnSSZPDtC6JlpQ==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.7.0
- '@opentelemetry/instrumentation@0.204.0':
- resolution: {integrity: sha512-vV5+WSxktzoMP8JoYWKeopChy6G3HKk4UQ2hESCRDUUTZqQ3+nM3u8noVG0LmNfRWwcFBnbZ71GKC7vaYYdJ1g==}
+ '@opentelemetry/instrumentation@0.208.0':
+ resolution: {integrity: sha512-Eju0L4qWcQS+oXxi6pgh7zvE2byogAkcsVv0OjHF/97iOz1N/aKE6etSGowYkie+YA1uo6DNwdSxaaNnLvcRlA==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/instrumentation@0.57.2':
- resolution: {integrity: sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==}
- engines: {node: '>=14'}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
'@opentelemetry/redis-common@0.38.2':
resolution: {integrity: sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA==}
engines: {node: ^18.19.0 || >=20.6.0}
@@ -3577,8 +3522,8 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
- '@prisma/instrumentation@6.15.0':
- resolution: {integrity: sha512-6TXaH6OmDkMOQvOxwLZ8XS51hU2v4A3vmE2pSijCIiGRJYyNeMcL6nMHQMyYdZRD8wl7LF3Wzc+AMPMV/9Oo7A==}
+ '@prisma/instrumentation@6.19.0':
+ resolution: {integrity: sha512-QcuYy25pkXM8BJ37wVFBO7Zh34nyRV1GOb2n3lPkkbRYfl4hWl3PTcImP41P0KrzVXfa/45p6eVCos27x3exIg==}
peerDependencies:
'@opentelemetry/api': ^1.8
@@ -3762,8 +3707,8 @@ packages:
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
- '@rushstack/node-core-library@5.18.0':
- resolution: {integrity: sha512-XDebtBdw5S3SuZIt+Ra2NieT8kQ3D2Ow1HxhDQ/2soinswnOu9e7S69VSwTOLlQnx5mpWbONu+5JJjDxMAb6Fw==}
+ '@rushstack/node-core-library@5.19.1':
+ resolution: {integrity: sha512-ESpb2Tajlatgbmzzukg6zyAhH+sICqJR2CNXNhXcEbz6UGCQfrKCtkxOpJTftWc8RGouroHG0Nud1SJAszvpmA==}
peerDependencies:
'@types/node': '*'
peerDependenciesMeta:
@@ -3781,81 +3726,81 @@ packages:
'@rushstack/rig-package@0.6.0':
resolution: {integrity: sha512-ZQmfzsLE2+Y91GF15c65L/slMRVhF6Hycq04D4TwtdGaUAbIXXg9c5pKA5KFU7M4QMaihoobp9JJYpYcaY3zOw==}
- '@rushstack/terminal@0.19.3':
- resolution: {integrity: sha512-0P8G18gK9STyO+CNBvkKPnWGMxESxecTYqOcikHOVIHXa9uAuTK+Fw8TJq2Gng1w7W6wTC9uPX6hGNvrMll2wA==}
+ '@rushstack/terminal@0.19.5':
+ resolution: {integrity: sha512-6k5tpdB88G0K7QrH/3yfKO84HK9ggftfUZ51p7fePyCE7+RLLHkWZbID9OFWbXuna+eeCFE7AkKnRMHMxNbz7Q==}
peerDependencies:
'@types/node': '*'
peerDependenciesMeta:
'@types/node':
optional: true
- '@rushstack/ts-command-line@5.1.3':
- resolution: {integrity: sha512-Kdv0k/BnnxIYFlMVC1IxrIS0oGQd4T4b7vKfx52Y2+wk2WZSDFIvedr7JrhenzSlm3ou5KwtoTGTGd5nbODRug==}
+ '@rushstack/ts-command-line@5.1.5':
+ resolution: {integrity: sha512-YmrFTFUdHXblYSa+Xc9OO9FsL/XFcckZy0ycQ6q7VSBsVs5P0uD9vcges5Q9vctGlVdu27w+Ct6IuJ458V0cTQ==}
'@sec-ant/readable-stream@0.4.1':
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
- '@sentry-internal/browser-utils@10.26.0':
- resolution: {integrity: sha512-rPg1+JZlfp912pZONQAWZzbSaZ9L6R2VrMcCEa+2e2Gqk9um4b+LqF5RQWZsbt5Z0n0azSy/KQ6zAe/zTPXSOg==}
+ '@sentry-internal/browser-utils@10.29.0':
+ resolution: {integrity: sha512-M3kycMY6f3KY9a8jDYac+yG0E3ZgWVWSxlOEC5MhYyX+g7mqxkwrb3LFQyuxSm/m+CCgMTCaPOOaB2twXP6EQg==}
engines: {node: '>=18'}
- '@sentry-internal/feedback@10.26.0':
- resolution: {integrity: sha512-0vk9eQP0CXD7Y2WkcCIWHaAqnXOAi18/GupgWLnbB2kuQVYVtStWxtW+OWRe8W/XwSnZ5m6JBTVeokuk/O16DQ==}
+ '@sentry-internal/feedback@10.29.0':
+ resolution: {integrity: sha512-Y7IRsNeS99cEONu1mZWZc3HvbjNnu59Hgymm0swFFKbdgbCgdT6l85kn2oLsuq4Ew8Dw/pL/Sgpwsl9UgYFpUg==}
engines: {node: '>=18'}
'@sentry-internal/node-cpu-profiler@2.2.0':
resolution: {integrity: sha512-oLHVYurqZfADPh5hvmQYS5qx8t0UZzT2u6+/68VXsFruQEOnYJTODKgU3BVLmemRs3WE6kCJjPeFdHVYOQGSzQ==}
engines: {node: '>=18'}
- '@sentry-internal/replay-canvas@10.26.0':
- resolution: {integrity: sha512-vs7d/P+8M1L1JVAhhJx2wo15QDhqAipnEQvuRZ6PV7LUcS1un9/Vx49FMxpIkx6JcKADJVwtXrS1sX2hoNT/kw==}
+ '@sentry-internal/replay-canvas@10.29.0':
+ resolution: {integrity: sha512-typY4JrpAQQGPuSyd/BD8+nNCbvTV2UVvKzr+iKgI0m1qc4Dz8tHZ4Nfais2Z8eYn/pL1kqVQN5ERTmJoYFdIw==}
engines: {node: '>=18'}
- '@sentry-internal/replay@10.26.0':
- resolution: {integrity: sha512-FMySQnY2/p0dVtFUBgUO+aMdK2ovqnd7Q/AkvMQUsN/5ulyj6KZx3JX3CqOqRtAr1izoCe4Kh2pi5t//sQmvsg==}
+ '@sentry-internal/replay@10.29.0':
+ resolution: {integrity: sha512-45NVw9PwB9TQ8z+xJ6G6Za+wmQ1RTA35heBSzR6U4bknj8LmA04k2iwnobvxCBEQXeLfcJEO1vFgagMoqMZMBw==}
engines: {node: '>=18'}
- '@sentry/browser@10.26.0':
- resolution: {integrity: sha512-uvV4hnkt8bh8yP0disJ0fszy8FdnkyGtzyIVKdeQZbNUefwbDhd3H0KJrAHhJ5ocULMH3B+dipdPmw2QXbEflg==}
+ '@sentry/browser@10.29.0':
+ resolution: {integrity: sha512-XdbyIR6F4qoR9Z1JCWTgunVcTJjS9p2Th+v4wYs4ME+ZdLC4tuKKmRgYg3YdSIWCn1CBfIgdI6wqETSf7H6Njw==}
engines: {node: '>=18'}
- '@sentry/core@10.26.0':
- resolution: {integrity: sha512-TjDe5QI37SLuV0q3nMOH8JcPZhv2e85FALaQMIhRILH9Ce6G7xW5GSjmH91NUVq8yc3XtiqYlz/EenEZActc4Q==}
+ '@sentry/core@10.29.0':
+ resolution: {integrity: sha512-olQ2DU9dA/Bwsz3PtA9KNXRMqBWRQSkPw+MxwWEoU1K1qtiM9L0j6lbEFb5iSY3d7WYD5MB+1d5COugjSBrHtw==}
engines: {node: '>=18'}
- '@sentry/node-core@10.26.0':
- resolution: {integrity: sha512-7OrHVn8XAsq9mMVMlpL18XTKQEVcLOJSo0n2M7QGKfFk/OfVtSFMcUWGqN1qhYtT9aMTr2bjtR5+BI33djnNTQ==}
+ '@sentry/node-core@10.29.0':
+ resolution: {integrity: sha512-f/Y0okHhPPb5HnYNBqCivJ2YuXtSadvcIx16dzU5mHQxZhgGednUCPEX7rsvPcd4HneQz12HKLqxbAmNu+b3FA==}
engines: {node: '>=18'}
peerDependencies:
'@opentelemetry/api': ^1.9.0
- '@opentelemetry/context-async-hooks': ^1.30.1 || ^2.1.0
- '@opentelemetry/core': ^1.30.1 || ^2.1.0
+ '@opentelemetry/context-async-hooks': ^1.30.1 || ^2.1.0 || ^2.2.0
+ '@opentelemetry/core': ^1.30.1 || ^2.1.0 || ^2.2.0
'@opentelemetry/instrumentation': '>=0.57.1 <1'
- '@opentelemetry/resources': ^1.30.1 || ^2.1.0
- '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0
+ '@opentelemetry/resources': ^1.30.1 || ^2.1.0 || ^2.2.0
+ '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 || ^2.2.0
'@opentelemetry/semantic-conventions': ^1.37.0
- '@sentry/node@10.26.0':
- resolution: {integrity: sha512-VUwNoKYhRpnHQSj9lty1TgooO+1wcpS1V0K87HU8sZEas5gx3Ujiouk5ocPjlgbKreoYOApgOnEEIq5W/hfQcQ==}
+ '@sentry/node@10.29.0':
+ resolution: {integrity: sha512-9j8VzV06VCj+H8tlxpfa7BNN4HzH5exv68WOufdMTXzzWLOXnzrdNDoYplm1G2S3LMvWsc1SVI3a8A0yBY7oWg==}
engines: {node: '>=18'}
- '@sentry/opentelemetry@10.26.0':
- resolution: {integrity: sha512-ASJdOwn6NwMH2ZeBrnGJI+l/xkJp1AOiQ5FWkvTqLc/vHX+r3PDMO7c+koecY+LiZxSzZF4IV8sALXfOh6UnwA==}
+ '@sentry/opentelemetry@10.29.0':
+ resolution: {integrity: sha512-5QvtAwS73HlI/+OTF1poAFELzsc0se+PHmMsXGGrOeNBvjCr3ZE8qvke09aeMn7uRImf3Nc9J6i2KtSHJnbKPA==}
engines: {node: '>=18'}
peerDependencies:
'@opentelemetry/api': ^1.9.0
- '@opentelemetry/context-async-hooks': ^1.30.1 || ^2.1.0
- '@opentelemetry/core': ^1.30.1 || ^2.1.0
- '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0
+ '@opentelemetry/context-async-hooks': ^1.30.1 || ^2.1.0 || ^2.2.0
+ '@opentelemetry/core': ^1.30.1 || ^2.1.0 || ^2.2.0
+ '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 || ^2.2.0
'@opentelemetry/semantic-conventions': ^1.37.0
- '@sentry/profiling-node@10.26.0':
- resolution: {integrity: sha512-NgfKgrJc39q/khkWZFph1tiZ1uUadtL8VrBTe+7eB/vogPAuEJa+eH/oCS3/M+Pu2fal61MoCw+2qHDH5JDxQQ==}
+ '@sentry/profiling-node@10.29.0':
+ resolution: {integrity: sha512-qt34HNmxIytAKoOYg64CIFoEHRfkxDB3qT2McB5zq1YbzU0b89j3h2roF8A/dsWAlppV0R2DAXBkoEMNgWzHEQ==}
engines: {node: '>=18'}
hasBin: true
- '@sentry/vue@10.26.0':
- resolution: {integrity: sha512-KfgELqzuFc8beeYbx6u3Ed5l8Lj/iG0h8AgQ7YjK3FANsuwwFRioycwnoEMIJbEuKC9V3iRSHXk2W5Dgt1WWqw==}
+ '@sentry/vue@10.29.0':
+ resolution: {integrity: sha512-04Ng/ducvkTohSDhfQvRWrBxwGuQfCggHjTcEoyE3uUrR9ReF5VwyiYo5Kq4ADgZhsao5xqj4JQVg3bc8oTZUA==}
engines: {node: '>=18'}
peerDependencies:
pinia: 2.x || 3.x
@@ -3864,23 +3809,23 @@ packages:
pinia:
optional: true
- '@shikijs/core@3.15.0':
- resolution: {integrity: sha512-8TOG6yG557q+fMsSVa8nkEDOZNTSxjbbR8l6lF2gyr6Np+jrPlslqDxQkN6rMXCECQ3isNPZAGszAfYoJOPGlg==}
+ '@shikijs/core@3.19.0':
+ resolution: {integrity: sha512-L7SrRibU7ZoYi1/TrZsJOFAnnHyLTE1SwHG1yNWjZIVCqjOEmCSuK2ZO9thnRbJG6TOkPp+Z963JmpCNw5nzvA==}
- '@shikijs/engine-javascript@3.15.0':
- resolution: {integrity: sha512-ZedbOFpopibdLmvTz2sJPJgns8Xvyabe2QbmqMTz07kt1pTzfEvKZc5IqPVO/XFiEbbNyaOpjPBkkr1vlwS+qg==}
+ '@shikijs/engine-javascript@3.19.0':
+ resolution: {integrity: sha512-ZfWJNm2VMhKkQIKT9qXbs76RRcT0SF/CAvEz0+RkpUDAoDaCx0uFdCGzSRiD9gSlhm6AHkjdieOBJMaO2eC1rQ==}
- '@shikijs/engine-oniguruma@3.15.0':
- resolution: {integrity: sha512-HnqFsV11skAHvOArMZdLBZZApRSYS4LSztk2K3016Y9VCyZISnlYUYsL2hzlS7tPqKHvNqmI5JSUJZprXloMvA==}
+ '@shikijs/engine-oniguruma@3.19.0':
+ resolution: {integrity: sha512-1hRxtYIJfJSZeM5ivbUXv9hcJP3PWRo5prG/V2sWwiubUKTa+7P62d2qxCW8jiVFX4pgRHhnHNp+qeR7Xl+6kg==}
- '@shikijs/langs@3.15.0':
- resolution: {integrity: sha512-WpRvEFvkVvO65uKYW4Rzxs+IG0gToyM8SARQMtGGsH4GDMNZrr60qdggXrFOsdfOVssG/QQGEl3FnJ3EZ+8w8A==}
+ '@shikijs/langs@3.19.0':
+ resolution: {integrity: sha512-dBMFzzg1QiXqCVQ5ONc0z2ebyoi5BKz+MtfByLm0o5/nbUu3Iz8uaTCa5uzGiscQKm7lVShfZHU1+OG3t5hgwg==}
- '@shikijs/themes@3.15.0':
- resolution: {integrity: sha512-8ow2zWb1IDvCKjYb0KiLNrK4offFdkfNVPXb1OZykpLCzRU6j+efkY+Y7VQjNlNFXonSw+4AOdGYtmqykDbRiQ==}
+ '@shikijs/themes@3.19.0':
+ resolution: {integrity: sha512-H36qw+oh91Y0s6OlFfdSuQ0Ld+5CgB/VE6gNPK+Hk4VRbVG/XQgkjnt4KzfnnoO6tZPtKJKHPjwebOCfjd6F8A==}
- '@shikijs/types@3.15.0':
- resolution: {integrity: sha512-BnP+y/EQnhihgHy4oIAN+6FFtmfTekwOLsQbRw9hOKwqgNy8Bdsjq8B05oAt/ZgvIWWFrshV71ytOrlPfYjIJw==}
+ '@shikijs/types@3.19.0':
+ resolution: {integrity: sha512-Z2hdeEQlzuntf/BZpFG8a+Fsw9UVXdML7w0o3TgSXV3yNESGon+bs9ITkQb3Ki7zxoXOOu5oJWqZ2uto06V9iQ==}
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
@@ -3957,8 +3902,8 @@ packages:
resolution: {integrity: sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==}
engines: {node: '>=18.0.0'}
- '@smithy/core@3.18.5':
- resolution: {integrity: sha512-6gnIz3h+PEPQGDj8MnRSjDvKBah042jEoPgjFGJ4iJLBE78L4lY/n98x14XyPF4u3lN179Ub/ZKFY5za9GeLQw==}
+ '@smithy/core@3.18.7':
+ resolution: {integrity: sha512-axG9MvKhMWOhFbvf5y2DuyTxQueO0dkedY9QC3mAfndLosRI/9LJv8WaL0mw7ubNhsO4IuXX9/9dYGPFvHrqlw==}
engines: {node: '>=18.0.0'}
'@smithy/credential-provider-imds@4.2.5':
@@ -4021,12 +3966,12 @@ packages:
resolution: {integrity: sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==}
engines: {node: '>=18.0.0'}
- '@smithy/middleware-endpoint@4.3.12':
- resolution: {integrity: sha512-9pAX/H+VQPzNbouhDhkW723igBMLgrI8OtX+++M7iKJgg/zY/Ig3i1e6seCcx22FWhE6Q/S61BRdi2wXBORT+A==}
+ '@smithy/middleware-endpoint@4.3.14':
+ resolution: {integrity: sha512-v0q4uTKgBM8dsqGjqsabZQyH85nFaTnFcgpWU1uydKFsdyyMzfvOkNum9G7VK+dOP01vUnoZxIeRiJ6uD0kjIg==}
engines: {node: '>=18.0.0'}
- '@smithy/middleware-retry@4.4.12':
- resolution: {integrity: sha512-S4kWNKFowYd0lID7/DBqWHOQxmxlsf0jBaos9chQZUWTVOjSW1Ogyh8/ib5tM+agFDJ/TCxuCTvrnlc+9cIBcQ==}
+ '@smithy/middleware-retry@4.4.14':
+ resolution: {integrity: sha512-Z2DG8Ej7FyWG1UA+7HceINtSLzswUgs2np3sZX0YBBxCt+CXG4QUxv88ZDS3+2/1ldW7LqtSY1UO/6VQ1pND8Q==}
engines: {node: '>=18.0.0'}
'@smithy/middleware-serde@4.2.6':
@@ -4073,8 +4018,8 @@ packages:
resolution: {integrity: sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==}
engines: {node: '>=18.0.0'}
- '@smithy/smithy-client@4.9.8':
- resolution: {integrity: sha512-8xgq3LgKDEFoIrLWBho/oYKyWByw9/corz7vuh1upv7ZBm0ZMjGYBhbn6v643WoIqA9UTcx5A5htEp/YatUwMA==}
+ '@smithy/smithy-client@4.9.10':
+ resolution: {integrity: sha512-Jaoz4Jw1QYHc1EFww/E6gVtNjhoDU+gwRKqXP6C3LKYqqH2UQhP8tMP3+t/ePrhaze7fhLE8vS2q6vVxBANFTQ==}
engines: {node: '>=18.0.0'}
'@smithy/types@4.9.0':
@@ -4109,12 +4054,12 @@ packages:
resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==}
engines: {node: '>=18.0.0'}
- '@smithy/util-defaults-mode-browser@4.3.11':
- resolution: {integrity: sha512-yHv+r6wSQXEXTPVCIQTNmXVWs7ekBTpMVErjqZoWkYN75HIFN5y9+/+sYOejfAuvxWGvgzgxbTHa/oz61YTbKw==}
+ '@smithy/util-defaults-mode-browser@4.3.13':
+ resolution: {integrity: sha512-hlVLdAGrVfyNei+pKIgqDTxfu/ZI2NSyqj4IDxKd5bIsIqwR/dSlkxlPaYxFiIaDVrBy0he8orsFy+Cz119XvA==}
engines: {node: '>=18.0.0'}
- '@smithy/util-defaults-mode-node@4.2.14':
- resolution: {integrity: sha512-ljZN3iRvaJUgulfvobIuG97q1iUuCMrvXAlkZ4msY+ZuVHQHDIqn7FKZCEj+bx8omz6kF5yQXms/xhzjIO5XiA==}
+ '@smithy/util-defaults-mode-node@4.2.16':
+ resolution: {integrity: sha512-F1t22IUiJLHrxW9W1CQ6B9PN+skZ9cqSuzB18Eh06HrJPbjsyZ7ZHecAKw80DQtyGTRcVfeukKaCRYebFwclbg==}
engines: {node: '>=18.0.0'}
'@smithy/util-endpoints@3.2.5':
@@ -4198,11 +4143,11 @@ packages:
peerDependencies:
storybook: ^8.6.14
- '@storybook/addon-links@10.0.8':
- resolution: {integrity: sha512-LnakruogdN5ND0cF0SOKyhzbEeIGDe1njkufX2aR9LOXQ0mMj5S2P86TdP87dR5R9bJjYYPPg/F7sjsAiI1Lqg==}
+ '@storybook/addon-links@10.1.5':
+ resolution: {integrity: sha512-a1uXpNgIZg6U2v3+431RNFCLvcuNPT2kQjFEKNAVLyNe4Krig/yR3HabGoxKHINLrtBzn/rE9yNeDhMKYfvVnA==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- storybook: ^10.0.8
+ storybook: ^10.1.5
peerDependenciesMeta:
react:
optional: true
@@ -4249,10 +4194,10 @@ packages:
react-dom:
optional: true
- '@storybook/builder-vite@10.0.8':
- resolution: {integrity: sha512-kaf/pUENzXxYgQMHGGPNiIk1ieb+SOMuSeLKx8wAUOlQOrzhtSH+ItACW/l43t+O6YZ8jYHoNBMF1kdQ1+Y5+w==}
+ '@storybook/builder-vite@10.1.5':
+ resolution: {integrity: sha512-5alpNa+TQXK1zp9MeovUK/yIUkZqpIFUScUer6cYgidI96Boovn7OXt5oXQ8CqqpzuEtgCvz44TzCmgZoGv41g==}
peerDependencies:
- storybook: ^10.0.8
+ storybook: ^10.1.5
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
'@storybook/components@8.6.14':
@@ -4265,12 +4210,12 @@ packages:
peerDependencies:
storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
- '@storybook/csf-plugin@10.0.8':
- resolution: {integrity: sha512-OtLUWHIm3SDGtclQn6Mdd/YsWizLBgdEBRAdekGtwI/TvICfT7gpWYIycP53v2t9ufu2MIXjsxtV2maZKs8sZg==}
+ '@storybook/csf-plugin@10.1.5':
+ resolution: {integrity: sha512-v+D7PVRkNUHznfoQg8yqpLWZIIbPddqHDSi1oBGdegF0Kv/lVsGqTZGRLroApsMu7BLwLhpcMID6ofxlfftWKg==}
peerDependencies:
esbuild: '*'
rollup: '*'
- storybook: ^10.0.8
+ storybook: ^10.1.5
vite: '*'
webpack: '*'
peerDependenciesMeta:
@@ -4298,6 +4243,12 @@ packages:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ '@storybook/icons@2.0.1':
+ resolution: {integrity: sha512-/smVjw88yK3CKsiuR71vNgWQ9+NuY2L+e8X7IMrFjexjm6ZR8ULrV2DRkTA61aV6ryefslzHEGDInGpnNeIocg==}
+ 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
+
'@storybook/instrumenter@8.6.14':
resolution: {integrity: sha512-iG4MlWCcz1L7Yu8AwgsnfVAmMbvyRSk700Mfy2g4c8y5O+Cv1ejshE1LBBsCwHgkuqU0H4R0qu4g23+6UnUemQ==}
peerDependencies:
@@ -4313,12 +4264,12 @@ packages:
peerDependencies:
storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
- '@storybook/react-dom-shim@10.0.8':
- resolution: {integrity: sha512-ojuH22MB9Sz6rWbhTmC5IErZr0ZADbZijtPteUdydezY7scORT00UtbNoBcG0V6iVjdChgDtSKw2KHUUfchKqg==}
+ '@storybook/react-dom-shim@10.1.5':
+ resolution: {integrity: sha512-CsXcq26wINUgYP8KnfSuS60B10/Ag34YdcnWIEl9hM5UtTQ65WYJ9fVFqpzfnQrkpgRMd7iQjtmUhCe+4umnHg==}
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
- storybook: ^10.0.8
+ storybook: ^10.1.5
'@storybook/react-dom-shim@8.6.14':
resolution: {integrity: sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==}
@@ -4327,20 +4278,20 @@ packages:
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
storybook: ^8.6.14
- '@storybook/react-vite@10.0.8':
- resolution: {integrity: sha512-HS2X4qlitrZr3/sN2+ollxAaNE813IasZRE8lOez1Ey1ISGBtYIb9rmJs82MK35+yDM0pHdiDjkFMD4SkNYh2g==}
+ '@storybook/react-vite@10.1.5':
+ resolution: {integrity: sha512-27RiCVw5QZ/f9fXS8sGaPHuWkbHSoS66ifeakxHgbkbIXjVI4M6pWB7NUj49MwU1YUMOpB0T8KasvyMZzv/UPA==}
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
- storybook: ^10.0.8
+ storybook: ^10.1.5
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
- '@storybook/react@10.0.8':
- resolution: {integrity: sha512-PkuPb8sAqmjjkowSzm3rutiSuETvZI2F8SnjbHE6FRqZWWK4iFoaUrQbrg5kpPAtX//xIrqkdFwlbmQ3skhiPA==}
+ '@storybook/react@10.1.5':
+ resolution: {integrity: sha512-M8fR7WVs79fPJHwRZxkz4XzIfzs/bN0heWdZX0D4iRjeIcY4nLM/tyalCcQDrGgrSJbgAAf4xd7KXaZzaZSAqA==}
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
- storybook: ^10.0.8
+ storybook: ^10.1.5
typescript: '>= 4.9.x'
peerDependenciesMeta:
typescript:
@@ -4366,16 +4317,16 @@ packages:
peerDependencies:
storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
- '@storybook/vue3-vite@10.0.8':
- resolution: {integrity: sha512-Bdum0SssJAbvwKfbKvTMEkpc9zapMG/GODxzqWO7XuycOZWrR0FPvj13y1gBhv0y66jBHMbtsLQ76uTyNFslIA==}
+ '@storybook/vue3-vite@10.1.5':
+ resolution: {integrity: sha512-ExwJyE4bkkdCUxlGoqGK9VRfJwvAF9iYOurtryMqMHBSr55u2id3fzD/PmjraeedWpElxbm2ZeIzBNnATdsSEQ==}
peerDependencies:
- storybook: ^10.0.8
+ storybook: ^10.1.5
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
- '@storybook/vue3@10.0.8':
- resolution: {integrity: sha512-h7ztNeAemf3yXQIetkbKAv8l5JkuXC65TmpAYTZYZpWUof/uuAnMF4rXQlRnS6Nd2PRfA9mZGGlGxNDCm3StlA==}
+ '@storybook/vue3@10.1.5':
+ resolution: {integrity: sha512-C0QIE4nLoGWHdfKXl6pHyThWc/OPt8DqnlUF8yMMDHCjPGt1q9RQZcYINtVleZ5WhAck4Q2ZvXys372ridf0wA==}
peerDependencies:
- storybook: ^10.0.8
+ storybook: ^10.1.5
vue: ^3.0.0
'@stylistic/eslint-plugin@5.5.0':
@@ -4390,7 +4341,7 @@ packages:
hasBin: true
peerDependencies:
'@swc/core': ^1.2.66
- chokidar: 4.0.3
+ chokidar: 5.0.0
peerDependenciesMeta:
chokidar:
optional: true
@@ -4604,6 +4555,10 @@ packages:
'@tokenizer/token@0.3.0':
resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==}
+ '@tootallnate/once@2.0.0':
+ resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
+ engines: {node: '>= 10'}
+
'@tsd/typescript@5.9.3':
resolution: {integrity: sha512-JSSdNiS0wgd8GHhBwnMAI18Y8XPhLVN+dNelPfZCXFhy9Lb3NbnFyp9JKxxr54jSUkEJPk3cidvCoHducSaRMQ==}
engines: {node: '>=14.17'}
@@ -4731,6 +4686,9 @@ packages:
'@types/js-yaml@4.0.9':
resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==}
+ '@types/jsdom@20.0.1':
+ resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==}
+
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
@@ -4740,9 +4698,6 @@ packages:
'@types/jsonld@1.5.15':
resolution: {integrity: sha512-PlAFPZjL+AuGYmwlqwKEL0IMP8M8RexH0NIPGfCVWSQ041H2rR/8OlyZSD7KsCVoN8vCfWdtWDBxX8yBVP+xow==}
- '@types/jsrsasign@10.5.15':
- resolution: {integrity: sha512-3stUTaSRtN09PPzVWR6aySD9gNnuymz+WviNHoTb85dKu+BjaV4uBbWWGykBBJkfwPtcNZVfTn2lbX00U+yhpQ==}
-
'@types/long@4.0.2':
resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==}
@@ -4782,8 +4737,8 @@ packages:
'@types/node@20.19.25':
resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==}
- '@types/node@24.10.1':
- resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==}
+ '@types/node@24.10.2':
+ resolution: {integrity: sha512-WOhQTZ4G8xZ1tjJTvKOpyEVSGgOTvJAfDK3FNFgELyaTpzhdgHVHeqW8V+UJvzF5BT+/B54T/1S2K6gd9c7bbA==}
'@types/nodemailer@7.0.4':
resolution: {integrity: sha512-ee8fxWqOchH+Hv6MDDNNy028kwvVnLplrStm4Zf/3uHWw5zzo8FoYYeffpJtGs2wWysEumMH0ZIdMGMY1eMAow==}
@@ -4797,9 +4752,6 @@ packages:
'@types/oauth2orize@1.11.5':
resolution: {integrity: sha512-C6hrRoh9hCnqis39OpeUZSwgw+TIzcV0CsxwJMGfQjTx4I1r+CLmuEPzoDJr5NRTfc7OMwHNLkQwrGFLKrJjMQ==}
- '@types/oauth@0.9.6':
- resolution: {integrity: sha512-H9TRCVKBNOhZZmyHLqFt9drPM9l+ShWiqqJijU1B8P3DX3ub84NjxDuy+Hjrz+fEca5Kwip3qPMKNyiLgNJtIA==}
-
'@types/offscreencanvas@2019.3.0':
resolution: {integrity: sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==}
@@ -4809,15 +4761,9 @@ packages:
'@types/pg-pool@2.0.6':
resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==}
- '@types/pg@8.15.5':
- resolution: {integrity: sha512-LF7lF6zWEKxuT3/OR8wAZGzkg4ENGXFNyiV/JeOt9z5B+0ZVwbql9McqX5c/WStFq1GaGso7H1AzP/qSzmlCKQ==}
-
'@types/pg@8.15.6':
resolution: {integrity: sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==}
- '@types/pug@2.0.10':
- resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==}
-
'@types/punycode@2.1.4':
resolution: {integrity: sha512-trzh6NzBnq8yw5e35f8xe8VTYjqM3NE7bohBtvDVf/dtUer3zYTLK1Ka3DG3p7bdtoaOHZucma6FfVKlQ134pQ==}
@@ -4875,11 +4821,8 @@ packages:
'@types/serviceworker@0.0.74':
resolution: {integrity: sha512-HNt7NJHrjGtCmI3h1+rsb1g/ZY0iy5KaeenfEV7zAWPSaCs49hEUvgH++V1BHNwlLfB3sbjPh3pSiNixfYjb1w==}
- '@types/shimmer@1.2.0':
- resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==}
-
- '@types/simple-oauth2@5.0.7':
- resolution: {integrity: sha512-8JbWVJbiTSBQP/7eiyGKyXWAqp3dKQZpaA+pdW16FCi32ujkzRMG8JfjoAzdWt6W8U591ZNdHcPtP2D7ILTKuA==}
+ '@types/simple-oauth2@5.0.8':
+ resolution: {integrity: sha512-TehQqoOGdy3/rmFsCEGgnt1f4JhUCA0joWemGGCTbVYvoZvfBjkRsBFYmz8k0V/sn2XQZHe33L4lWxqMhIO3tQ==}
'@types/sinon@17.0.4':
resolution: {integrity: sha512-RHnIrhfPO3+tJT0s7cFaXGZvsL4bbR3/k7z3P312qMS4JaS2Tk+KiwiLx1S0rQ56ERj00u1/BtdyVd0FY+Pdew==}
@@ -4917,6 +4860,9 @@ packages:
'@types/tmp@0.2.6':
resolution: {integrity: sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==}
+ '@types/tough-cookie@4.0.5':
+ resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
+
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
@@ -4947,65 +4893,104 @@ packages:
'@types/yauzl@2.10.3':
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
- '@typescript-eslint/eslint-plugin@8.47.0':
- resolution: {integrity: sha512-fe0rz9WJQ5t2iaLfdbDc9T80GJy0AeO453q8C3YCilnGozvOyCG5t+EZtg7j7D88+c3FipfP/x+wzGnh1xp8ZA==}
+ '@typescript-eslint/eslint-plugin@8.49.0':
+ resolution: {integrity: sha512-JXij0vzIaTtCwu6SxTh8qBc66kmf1xs7pI4UOiMDFVct6q86G0Zs7KRcEoJgY3Cav3x5Tq0MF5jwgpgLqgKG3A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.47.0
+ '@typescript-eslint/parser': ^8.49.0
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/parser@8.47.0':
- resolution: {integrity: sha512-lJi3PfxVmo0AkEY93ecfN+r8SofEqZNGByvHAI3GBLrvt1Cw6H5k1IM02nSzu0RfUafr2EvFSw0wAsZgubNplQ==}
+ '@typescript-eslint/parser@8.49.0':
+ resolution: {integrity: sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/project-service@8.47.0':
- resolution: {integrity: sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA==}
+ '@typescript-eslint/project-service@8.49.0':
+ resolution: {integrity: sha512-/wJN0/DKkmRUMXjZUXYZpD1NEQzQAAn9QWfGwo+Ai8gnzqH7tvqS7oNVdTjKqOcPyVIdZdyCMoqN66Ia789e7g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/scope-manager@8.47.0':
- resolution: {integrity: sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg==}
+ '@typescript-eslint/scope-manager@8.49.0':
+ resolution: {integrity: sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.47.0':
- resolution: {integrity: sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g==}
+ '@typescript-eslint/tsconfig-utils@8.49.0':
+ resolution: {integrity: sha512-8prixNi1/6nawsRYxet4YOhnbW+W9FK/bQPxsGB1D3ZrDzbJ5FXw5XmzxZv82X3B+ZccuSxo/X8q9nQ+mFecWA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/type-utils@8.47.0':
- resolution: {integrity: sha512-QC9RiCmZ2HmIdCEvhd1aJELBlD93ErziOXXlHEZyuBo3tBiAZieya0HLIxp+DoDWlsQqDawyKuNEhORyku+P8A==}
+ '@typescript-eslint/type-utils@8.49.0':
+ resolution: {integrity: sha512-KTExJfQ+svY8I10P4HdxKzWsvtVnsuCifU5MvXrRwoP2KOlNZ9ADNEWWsQTJgMxLzS5VLQKDjkCT/YzgsnqmZg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/types@8.47.0':
- resolution: {integrity: sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==}
+ '@typescript-eslint/types@8.49.0':
+ resolution: {integrity: sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.47.0':
- resolution: {integrity: sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==}
+ '@typescript-eslint/typescript-estree@8.49.0':
+ resolution: {integrity: sha512-jrLdRuAbPfPIdYNppHJ/D0wN+wwNfJ32YTAm10eJVsFmrVpXQnDWBn8niCSMlWjvml8jsce5E/O+86IQtTbJWA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/utils@8.47.0':
- resolution: {integrity: sha512-g7XrNf25iL4TJOiPqatNuaChyqt49a/onq5YsJ9+hXeugK+41LVg7AxikMfM02PC6jbNtZLCJj6AUcQXJS/jGQ==}
+ '@typescript-eslint/utils@8.49.0':
+ resolution: {integrity: sha512-N3W7rJw7Rw+z1tRsHZbK395TWSYvufBXumYtEGzypgMUthlg0/hmCImeA8hgO2d2G4pd7ftpxxul2J8OdtdaFA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/visitor-keys@8.47.0':
- resolution: {integrity: sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==}
+ '@typescript-eslint/visitor-keys@8.49.0':
+ resolution: {integrity: sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251206.1':
+ resolution: {integrity: sha512-Lcm+cO/0d+iUNzpequh8v8rm7FKLLxnMv4cg59jkmeMNm6zLe8UHFJVKd4KSUeTBp6DrF1BBXkahIwecR21YXA==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@typescript/native-preview-darwin-x64@7.0.0-dev.20251206.1':
+ resolution: {integrity: sha512-RR3flM+2oRZP8HMh8mfUzOitUVBE3kbXBT1qqjQvU5GkFGKEU0DH2OZ35YV/ufVHBsRygXNbahw2heE08Jvk6A==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@typescript/native-preview-linux-arm64@7.0.0-dev.20251206.1':
+ resolution: {integrity: sha512-/KXFbcTuW/2k+CspZjraCVLNBnoDGFARYYaydKj/OrZwcGb1HgCT8X52ICzf0lHnc7W0slKAIzEtq8vonyCrAw==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@typescript/native-preview-linux-arm@7.0.0-dev.20251206.1':
+ resolution: {integrity: sha512-NMndfbNZiYALizEJ6+5RJl5vp7TMjVa0mW4sBFP/W+AECf1D0NZ1jffHBdwRgHr6inehw93cL78XcNWm+l89QA==}
+ cpu: [arm]
+ os: [linux]
+
+ '@typescript/native-preview-linux-x64@7.0.0-dev.20251206.1':
+ resolution: {integrity: sha512-qOKTazp43tE6imN/+y+s8MdtaJLnH98YILdr6V5pLVUxY1fiFnAX/LXv/zDd6ree6rEn102kLuaMGih7PNJqHw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@typescript/native-preview-win32-arm64@7.0.0-dev.20251206.1':
+ resolution: {integrity: sha512-6p2aDhxDr5lBGetFlZMNs3+W5lzUnAIR6BVnoPBc/oiNqWY929Sh2kA0poTx2piUvpi8xUs6k1MWjonZP5UbgQ==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@typescript/native-preview-win32-x64@7.0.0-dev.20251206.1':
+ resolution: {integrity: sha512-fsLQ21YABSaIrtuHLs+9fL2s3kc8bHF7UB4TatMwnFCzGvQJ7L1b5snfSjnSZeh3ETTeING8f9YHjiIf0h4jpA==}
+ cpu: [x64]
+ os: [win32]
+
+ '@typescript/native-preview@7.0.0-dev.20251206.1':
+ resolution: {integrity: sha512-wog5hWVS+bYjFTpxtr+8qxqjhTKpAvlDCivvW592zctOcO+e9iLbBBLU3nDZdXW06rEA2zwjOqEPbsUcM/mcEw==}
+ hasBin: true
+
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
@@ -5016,20 +5001,11 @@ packages:
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
vue: ^3.2.25
- '@vitest/coverage-v8@4.0.10':
- resolution: {integrity: sha512-g+brmtoKa/sAeIohNJnnWhnHtU6GuqqVOSQ4SxDIPcgZWZyhJs5RmF5LpqXs8Kq64lANP+vnbn5JLzhLj/G56g==}
+ '@vitest/coverage-v8@4.0.15':
+ resolution: {integrity: sha512-FUJ+1RkpTFW7rQITdgTi93qOCWJobWhBirEPCeXh2SW2wsTlFxy51apDz5gzG+ZEYt/THvWeNmhdAoS9DTwpCw==}
peerDependencies:
- '@vitest/browser': 4.0.10
- vitest: 4.0.10
- peerDependenciesMeta:
- '@vitest/browser':
- optional: true
-
- '@vitest/coverage-v8@4.0.13':
- resolution: {integrity: sha512-w77N6bmtJ3CFnL/YHiYotwW/JI3oDlR3K38WEIqegRfdMSScaYxwYKB/0jSNpOTZzUjQkG8HHEz4sdWQMWpQ5g==}
- peerDependencies:
- '@vitest/browser': 4.0.13
- vitest: 4.0.13
+ '@vitest/browser': 4.0.15
+ vitest: 4.0.15
peerDependenciesMeta:
'@vitest/browser':
optional: true
@@ -5040,11 +5016,8 @@ packages:
'@vitest/expect@3.2.4':
resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
- '@vitest/expect@4.0.10':
- resolution: {integrity: sha512-3QkTX/lK39FBNwARCQRSQr0TP9+ywSdxSX+LgbJ2M1WmveXP72anTbnp2yl5fH+dU6SUmBzNMrDHs80G8G2DZg==}
-
- '@vitest/expect@4.0.13':
- resolution: {integrity: sha512-zYtcnNIBm6yS7Gpr7nFTmq8ncowlMdOJkWLqYvhr/zweY6tFbDkDi8BPPOeHxEtK1rSI69H7Fd4+1sqvEGli6w==}
+ '@vitest/expect@4.0.15':
+ resolution: {integrity: sha512-Gfyva9/GxPAWXIWjyGDli9O+waHDC0Q0jaLdFP1qPAUUfo1FEXPXUfUkp3eZA0sSq340vPycSyOlYUeM15Ft1w==}
'@vitest/mocker@3.2.4':
resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==}
@@ -5057,19 +5030,8 @@ packages:
vite:
optional: true
- '@vitest/mocker@4.0.10':
- resolution: {integrity: sha512-e2OfdexYkjkg8Hh3L9NVEfbwGXq5IZbDovkf30qW2tOh7Rh9sVtmSr2ztEXOFbymNxS4qjzLXUQIvATvN4B+lg==}
- peerDependencies:
- msw: ^2.4.9
- vite: ^6.0.0 || ^7.0.0-0
- peerDependenciesMeta:
- msw:
- optional: true
- vite:
- optional: true
-
- '@vitest/mocker@4.0.13':
- resolution: {integrity: sha512-eNCwzrI5djoauklwP1fuslHBjrbR8rqIVbvNlAnkq1OTa6XT+lX68mrtPirNM9TnR69XUPt4puBCx2Wexseylg==}
+ '@vitest/mocker@4.0.15':
+ resolution: {integrity: sha512-CZ28GLfOEIFkvCFngN8Sfx5h+Se0zN+h4B7yOsPVCcgtiO7t5jt9xQh2E1UkFep+eb9fjyMfuC5gBypwb07fvQ==}
peerDependencies:
msw: ^2.4.9
vite: ^6.0.0 || ^7.0.0-0
@@ -5088,23 +5050,14 @@ packages:
'@vitest/pretty-format@3.2.4':
resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
- '@vitest/pretty-format@4.0.10':
- resolution: {integrity: sha512-99EQbpa/zuDnvVjthwz5bH9o8iPefoQZ63WV8+bsRJZNw3qQSvSltfut8yu1Jc9mqOYi7pEbsKxYTi/rjaq6PA==}
+ '@vitest/pretty-format@4.0.15':
+ resolution: {integrity: sha512-SWdqR8vEv83WtZcrfLNqlqeQXlQLh2iilO1Wk1gv4eiHKjEzvgHb2OVc3mIPyhZE6F+CtfYjNlDJwP5MN6Km7A==}
- '@vitest/pretty-format@4.0.13':
- resolution: {integrity: sha512-ooqfze8URWbI2ozOeLDMh8YZxWDpGXoeY3VOgcDnsUxN0jPyPWSUvjPQWqDGCBks+opWlN1E4oP1UYl3C/2EQA==}
+ '@vitest/runner@4.0.15':
+ resolution: {integrity: sha512-+A+yMY8dGixUhHmNdPUxOh0la6uVzun86vAbuMT3hIDxMrAOmn5ILBHm8ajrqHE0t8R9T1dGnde1A5DTnmi3qw==}
- '@vitest/runner@4.0.10':
- resolution: {integrity: sha512-EXU2iSkKvNwtlL8L8doCpkyclw0mc/t4t9SeOnfOFPyqLmQwuceMPA4zJBa6jw0MKsZYbw7kAn+gl7HxrlB8UQ==}
-
- '@vitest/runner@4.0.13':
- resolution: {integrity: sha512-9IKlAru58wcVaWy7hz6qWPb2QzJTKt+IOVKjAx5vb5rzEFPTL6H4/R9BMvjZ2ppkxKgTrFONEJFtzvnyEpiT+A==}
-
- '@vitest/snapshot@4.0.10':
- resolution: {integrity: sha512-2N4X2ZZl7kZw0qeGdQ41H0KND96L3qX1RgwuCfy6oUsF2ISGD/HpSbmms+CkIOsQmg2kulwfhJ4CI0asnZlvkg==}
-
- '@vitest/snapshot@4.0.13':
- resolution: {integrity: sha512-hb7Usvyika1huG6G6l191qu1urNPsq1iFc2hmdzQY3F5/rTgqQnwwplyf8zoYHkpt7H6rw5UfIw6i/3qf9oSxQ==}
+ '@vitest/snapshot@4.0.15':
+ resolution: {integrity: sha512-A7Ob8EdFZJIBjLjeO0DZF4lqR6U7Ydi5/5LIZ0xcI+23lYlsYJAfGn8PrIWTYdZQRNnSRlzhg0zyGu37mVdy5g==}
'@vitest/spy@2.0.5':
resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==}
@@ -5112,11 +5065,8 @@ packages:
'@vitest/spy@3.2.4':
resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
- '@vitest/spy@4.0.10':
- resolution: {integrity: sha512-AsY6sVS8OLb96GV5RoG8B6I35GAbNrC49AO+jNRF9YVGb/g9t+hzNm1H6kD0NDp8tt7VJLs6hb7YMkDXqu03iw==}
-
- '@vitest/spy@4.0.13':
- resolution: {integrity: sha512-hSu+m4se0lDV5yVIcNWqjuncrmBgwaXa2utFLIrBkQCQkt+pSwyZTPFQAZiiF/63j8jYa8uAeUZ3RSfcdWaYWw==}
+ '@vitest/spy@4.0.15':
+ resolution: {integrity: sha512-+EIjOJmnY6mIfdXtE/bnozKEvTC4Uczg19yeZ2vtCz5Yyb0QQ31QWVQ8hswJ3Ysx/K2EqaNsVanjr//2+P3FHw==}
'@vitest/utils@2.0.5':
resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==}
@@ -5127,41 +5077,38 @@ packages:
'@vitest/utils@3.2.4':
resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
- '@vitest/utils@4.0.10':
- resolution: {integrity: sha512-kOuqWnEwZNtQxMKg3WmPK1vmhZu9WcoX69iwWjVz+jvKTsF1emzsv3eoPcDr6ykA3qP2bsCQE7CwqfNtAVzsmg==}
-
- '@vitest/utils@4.0.13':
- resolution: {integrity: sha512-ydozWyQ4LZuu8rLp47xFUWis5VOKMdHjXCWhs1LuJsTNKww+pTHQNK4e0assIB9K80TxFyskENL6vCu3j34EYA==}
+ '@vitest/utils@4.0.15':
+ resolution: {integrity: sha512-HXjPW2w5dxhTD0dLwtYHDnelK3j8sR8cWIaLxr22evTyY6q8pRCjZSmhRWVjBaOVXChQd6AwMzi9pucorXCPZA==}
'@volar/language-core@2.4.15':
resolution: {integrity: sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==}
- '@volar/language-core@2.4.23':
- resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==}
+ '@volar/language-core@2.4.26':
+ resolution: {integrity: sha512-hH0SMitMxnB43OZpyF1IFPS9bgb2I3bpCh76m2WEK7BE0A0EzpYsRp0CCH2xNKshr7kacU5TQBLYn4zj7CG60A==}
'@volar/source-map@2.4.15':
resolution: {integrity: sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==}
- '@volar/source-map@2.4.23':
- resolution: {integrity: sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==}
+ '@volar/source-map@2.4.26':
+ resolution: {integrity: sha512-JJw0Tt/kSFsIRmgTQF4JSt81AUSI1aEye5Zl65EeZ8H35JHnTvFGmpDOBn5iOxd48fyGE+ZvZBp5FcgAy/1Qhw==}
'@volar/typescript@2.4.15':
resolution: {integrity: sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==}
- '@volar/typescript@2.4.23':
- resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==}
+ '@volar/typescript@2.4.26':
+ resolution: {integrity: sha512-N87ecLD48Sp6zV9zID/5yuS1+5foj0DfuYGdQ6KHj/IbKvyKv1zNX6VCmnKYwtmHadEO6mFc2EKISiu3RDPAvA==}
- '@vue/compiler-core@3.5.24':
- resolution: {integrity: sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==}
+ '@vue/compiler-core@3.5.25':
+ resolution: {integrity: sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==}
- '@vue/compiler-dom@3.5.24':
- resolution: {integrity: sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==}
+ '@vue/compiler-dom@3.5.25':
+ resolution: {integrity: sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==}
- '@vue/compiler-sfc@3.5.24':
- resolution: {integrity: sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g==}
+ '@vue/compiler-sfc@3.5.25':
+ resolution: {integrity: sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag==}
- '@vue/compiler-ssr@3.5.24':
- resolution: {integrity: sha512-trOvMWNBMQ/odMRHW7Ae1CdfYx+7MuiQu62Jtu36gMLXcaoqKvAyh+P73sYG9ll+6jLB6QPovqoKGGZROzkFFg==}
+ '@vue/compiler-ssr@3.5.25':
+ resolution: {integrity: sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A==}
'@vue/compiler-vue2@2.7.16':
resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
@@ -5174,30 +5121,30 @@ packages:
typescript:
optional: true
- '@vue/language-core@3.1.5':
- resolution: {integrity: sha512-FMcqyzWN+sYBeqRMWPGT2QY0mUasZMVIuHvmb5NT3eeqPrbHBYtCP8JWEUCDCgM+Zr62uuWY/qoeBrPrzfa78w==}
+ '@vue/language-core@3.1.8':
+ resolution: {integrity: sha512-PfwAW7BLopqaJbneChNL6cUOTL3GL+0l8paYP5shhgY5toBNidWnMXWM+qDwL7MC9+zDtzCF2enT8r6VPu64iw==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
- '@vue/reactivity@3.5.24':
- resolution: {integrity: sha512-BM8kBhtlkkbnyl4q+HiF5R5BL0ycDPfihowulm02q3WYp2vxgPcJuZO866qa/0u3idbMntKEtVNuAUp5bw4teg==}
+ '@vue/reactivity@3.5.25':
+ resolution: {integrity: sha512-5xfAypCQepv4Jog1U4zn8cZIcbKKFka3AgWHEFQeK65OW+Ys4XybP6z2kKgws4YB43KGpqp5D/K3go2UPPunLA==}
- '@vue/runtime-core@3.5.24':
- resolution: {integrity: sha512-RYP/byyKDgNIqfX/gNb2PB55dJmM97jc9wyF3jK7QUInYKypK2exmZMNwnjueWwGceEkP6NChd3D2ZVEp9undQ==}
+ '@vue/runtime-core@3.5.25':
+ resolution: {integrity: sha512-Z751v203YWwYzy460bzsYQISDfPjHTl+6Zzwo/a3CsAf+0ccEjQ8c+0CdX1WsumRTHeywvyUFtW6KvNukT/smA==}
- '@vue/runtime-dom@3.5.24':
- resolution: {integrity: sha512-Z8ANhr/i0XIluonHVjbUkjvn+CyrxbXRIxR7wn7+X7xlcb7dJsfITZbkVOeJZdP8VZwfrWRsWdShH6pngMxRjw==}
+ '@vue/runtime-dom@3.5.25':
+ resolution: {integrity: sha512-a4WrkYFbb19i9pjkz38zJBg8wa/rboNERq3+hRRb0dHiJh13c+6kAbgqCPfMaJ2gg4weWD3APZswASOfmKwamA==}
- '@vue/server-renderer@3.5.24':
- resolution: {integrity: sha512-Yh2j2Y4G/0/4z/xJ1Bad4mxaAk++C2v4kaa8oSYTMJBJ00/ndPuxCnWeot0/7/qafQFLh5pr6xeV6SdMcE/G1w==}
+ '@vue/server-renderer@3.5.25':
+ resolution: {integrity: sha512-UJaXR54vMG61i8XNIzTSf2Q7MOqZHpp8+x3XLGtE3+fL+nQd+k7O5+X3D/uWrnQXOdMw5VPih+Uremcw+u1woQ==}
peerDependencies:
- vue: 3.5.24
+ vue: 3.5.25
- '@vue/shared@3.5.24':
- resolution: {integrity: sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==}
+ '@vue/shared@3.5.25':
+ resolution: {integrity: sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==}
'@vue/test-utils@2.4.6':
resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==}
@@ -5249,6 +5196,10 @@ packages:
resolution: {integrity: sha512-p96FSY54r+WJ50FIOsCOjyj/wavs8921hG5+kVMmZgKcvIKxMXHTrjNJvRgWa/zuX3B6t2lijLNFaOyuxUH+2A==}
engines: {node: '>=14.6'}
+ abab@2.0.6:
+ resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
+ deprecated: Use your platform's native atob() and btoa() methods instead
+
abbrev@1.1.1:
resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
@@ -5275,6 +5226,9 @@ packages:
resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
engines: {node: '>= 0.6'}
+ acorn-globals@7.0.1:
+ resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==}
+
acorn-import-attributes@1.9.5:
resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
peerDependencies:
@@ -5285,6 +5239,10 @@ packages:
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ acorn-walk@8.3.4:
+ resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
+ engines: {node: '>=0.4.0'}
+
acorn@7.4.1:
resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
engines: {node: '>=0.4.0'}
@@ -5315,9 +5273,9 @@ packages:
resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
engines: {node: '>=8'}
- aiscript-vscode@https://codeload.github.com/aiscript-dev/aiscript-vscode/tar.gz/c3cde89e79a41d93540cf8a48cd619c3f2dcb1b7:
- resolution: {tarball: https://codeload.github.com/aiscript-dev/aiscript-vscode/tar.gz/c3cde89e79a41d93540cf8a48cd619c3f2dcb1b7}
- version: 0.1.15
+ aiscript-vscode@https://codeload.github.com/aiscript-dev/aiscript-vscode/tar.gz/1dc7f60cda78d030dadfc518a33c472202b2ef67:
+ resolution: {tarball: https://codeload.github.com/aiscript-dev/aiscript-vscode/tar.gz/1dc7f60cda78d030dadfc518a33c472202b2ef67}
+ version: 0.1.16
engines: {vscode: ^1.83.0}
ajv-draft-04@1.0.0:
@@ -5390,8 +5348,8 @@ packages:
resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
engines: {node: '>=12'}
- ansis@3.17.0:
- resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==}
+ ansis@4.2.0:
+ resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
engines: {node: '>=14'}
anymatch@3.1.3:
@@ -5658,8 +5616,8 @@ packages:
resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
- body-parser@2.2.0:
- resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
+ body-parser@2.2.1:
+ resolution: {integrity: sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==}
engines: {node: '>=18'}
boolbase@1.0.0:
@@ -5715,8 +5673,8 @@ packages:
resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==}
engines: {node: '>=6.14.2'}
- bullmq@5.64.1:
- resolution: {integrity: sha512-Tg4ORit8bQ1xLwcQrEfcDpG50pS30Onuz1ZA4rPLbL9QEsOaBbvFQMSEvXSgMnvRZRqDggJoSBGz9tck+1PixQ==}
+ bullmq@5.65.1:
+ resolution: {integrity: sha512-QgDAzX1G9L5IRy4Orva5CfQTXZT+5K+OfO/kbPrAqN+pmL9LJekCzxijXehlm/u2eXfWPfWvIdJJIqiuz3WJSg==}
buraha@0.0.1:
resolution: {integrity: sha512-G563A0mTbzknm2jDaNxfZuNKIdeArs8T+XQN6t+KbmgnOoevXSXhKDkyf8Md/36Jrx99ikwbCag37VGe3myExQ==}
@@ -5891,9 +5849,9 @@ packages:
resolution: {integrity: sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==}
engines: {node: '>=20.18.1'}
- chokidar@4.0.3:
- resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
- engines: {node: '>= 14.16.0'}
+ chokidar@5.0.0:
+ resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==}
+ engines: {node: '>= 20.19.0'}
chownr@2.0.0:
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
@@ -5956,6 +5914,10 @@ packages:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
+ cliui@9.0.1:
+ resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==}
+ engines: {node: '>=20'}
+
cluster-key-slot@1.1.2:
resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
engines: {node: '>=0.10.0'}
@@ -6201,6 +6163,16 @@ packages:
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+ cssom@0.3.8:
+ resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==}
+
+ cssom@0.5.0:
+ resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
+
+ cssstyle@2.3.0:
+ resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==}
+ engines: {node: '>=8'}
+
cssstyle@5.3.3:
resolution: {integrity: sha512-OytmFH+13/QXONJcC75QNdMtKpceNk3u8ThBjyyYjkEcy/ekBwR1mMAuNvi3gdBPW3N5TlCzQ0WZw8H0lN/bDw==}
engines: {node: '>=20'}
@@ -6208,13 +6180,8 @@ packages:
csstype@3.2.3:
resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
- cypress@15.6.0:
- resolution: {integrity: sha512-Vqo66GG1vpxZ7H1oDX9umfmzA3nF7Wy80QAc3VjwPREO5zTY4d1xfQFNPpOWleQl9vpdmR2z1liliOcYlRX6rQ==}
- engines: {node: ^20.1.0 || ^22.0.0 || >=24.0.0}
- hasBin: true
-
- cypress@15.7.0:
- resolution: {integrity: sha512-1C81zKxnQckYm2XGi37rPV4rN0bzUoWhydhKdOyshJn5gJKszEx5as9VLSZI0jp0ye49QxmnbU4TtMpcD+OmGQ==}
+ cypress@15.7.1:
+ resolution: {integrity: sha512-U3sYnJ+Cnpgr6IPycxsznTg//mGVXfPGeGV+om7VQCyp5XyVkhG4oPr3X3hTq1+OB0Om0O5DxusYmt7cbvwqMQ==}
engines: {node: ^20.1.0 || ^22.0.0 || >=24.0.0}
hasBin: true
@@ -6226,6 +6193,10 @@ packages:
resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
engines: {node: '>= 12'}
+ data-urls@3.0.2:
+ resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==}
+ engines: {node: '>=12'}
+
data-urls@6.0.0:
resolution: {integrity: sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==}
engines: {node: '>=20'}
@@ -6444,6 +6415,11 @@ packages:
domelementtype@2.3.0:
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+ domexception@4.0.0:
+ resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==}
+ engines: {node: '>=12'}
+ deprecated: Use your platform's native DOMException instead
+
domhandler@3.3.0:
resolution: {integrity: sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==}
engines: {node: '>= 4'}
@@ -6497,6 +6473,9 @@ packages:
resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
engines: {node: '>=12'}
+ emoji-regex@10.6.0:
+ resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
+
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -6601,8 +6580,8 @@ packages:
engines: {node: '>=18'}
hasBin: true
- esbuild@0.27.0:
- resolution: {integrity: sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==}
+ esbuild@0.27.1:
+ resolution: {integrity: sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA==}
engines: {node: '>=18'}
hasBin: true
@@ -6636,6 +6615,11 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
+ escodegen@2.1.0:
+ resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
+ engines: {node: '>=6.0'}
+ hasBin: true
+
eslint-formatter-pretty@4.1.0:
resolution: {integrity: sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==}
engines: {node: '>=10'}
@@ -6674,8 +6658,8 @@ packages:
'@typescript-eslint/parser':
optional: true
- eslint-plugin-vue@10.6.0:
- resolution: {integrity: sha512-TsoFluWxOpsJlE/l2jJygLQLWBPJ3Qdkesv7tBIunICbTcG0dS1/NBw/Ol4tJw5kHWlAVds4lUmC29/vlPUcEQ==}
+ eslint-plugin-vue@10.6.2:
+ resolution: {integrity: sha512-nA5yUs/B1KmKzvC42fyD0+l9Yd+LtEpVhWRbXuDj0e+ZURcTtyRbMDWUeJmTAh2wC6jC83raS63anNM2YT3NPw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
@@ -6786,16 +6770,16 @@ packages:
resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- execa@9.6.0:
- resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==}
+ execa@9.6.1:
+ resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==}
engines: {node: ^18.19.0 || >=20.5.0}
executable@4.1.1:
resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==}
engines: {node: '>=4'}
- exifreader@4.32.0:
- resolution: {integrity: sha512-sj1PzjpaPwSE/2MeUqoAYcfc2u7AZOGSby0FzmAkB4jjeCXgDryxzVgMwV+tJKGIkGdWkkWiUWoLSJoPHJ6V5Q==}
+ exifreader@4.33.1:
+ resolution: {integrity: sha512-KsVc4bRfZW255PSst5Opt5jUeLp+SD2+q6fmXQkMMkphpFCDBFjzNAvswgQa1YcMrXq+9Na6HJ6gS3wo2x7RRw==}
exit@0.1.2:
resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
@@ -7106,6 +7090,10 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
+ get-east-asian-width@1.4.0:
+ resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==}
+ engines: {node: '>=18'}
+
get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
@@ -7157,10 +7145,6 @@ packages:
engines: {node: 20 || >=22}
hasBin: true
- glob@13.0.0:
- resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==}
- engines: {node: 20 || >=22}
-
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
@@ -7181,16 +7165,10 @@ packages:
resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
engines: {node: '>= 0.4'}
- globalyzer@0.1.0:
- resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
-
globby@11.1.0:
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
engines: {node: '>=10'}
- globrex@0.1.2:
- resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
-
google-protobuf@3.21.4:
resolution: {integrity: sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==}
@@ -7202,16 +7180,13 @@ packages:
resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==}
engines: {node: '>=16'}
- got@14.6.4:
- resolution: {integrity: sha512-DjsLab39NUMf5iYlK9asVCkHMhaA2hEhrlmf+qXRhjEivuuBHWYbjmty9DA3OORUwZgENTB+6vSmY2ZW8gFHVw==}
+ got@14.6.5:
+ resolution: {integrity: sha512-Su87c0NNeg97de1sO02gy9I8EmE7DCJ1gzcFLcgGpYeq2PnLg4xz73MWrp6HjqbSsjb6Glf4UBDW6JNyZA6uSg==}
engines: {node: '>=20'}
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.12.0:
resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==}
engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
@@ -7220,8 +7195,8 @@ packages:
resolution: {integrity: sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==}
engines: {node: '>=0.8.0'}
- happy-dom@20.0.10:
- resolution: {integrity: sha512-6umCCHcjQrhP5oXhrHQQvLB0bwb1UzHAHdsXy+FjtKoYjUhmNZsQL8NivwM1vDvNEChJabVrUYxUnp/ZdYmy2g==}
+ happy-dom@20.0.11:
+ resolution: {integrity: sha512-QsCdAUHAmiDeKeaNojb1OHOPF7NjcWPBR7obdu3NwH2a/oyQaLg5d0aaCy/9My6CdPChYF07dvz5chaXBGaD4g==}
engines: {node: '>=20.0.0'}
hard-rejection@2.1.0:
@@ -7300,6 +7275,10 @@ packages:
resolution: {integrity: sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==}
engines: {node: '>=14'}
+ html-encoding-sniffer@3.0.0:
+ resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
+ engines: {node: '>=12'}
+
html-encoding-sniffer@4.0.0:
resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
engines: {node: '>=18'}
@@ -7336,6 +7315,10 @@ packages:
resolution: {integrity: sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==}
engines: {node: '>=6.0.0'}
+ http-proxy-agent@5.0.0:
+ resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
+ engines: {node: '>= 6'}
+
http-proxy-agent@7.0.2:
resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
engines: {node: '>= 14'}
@@ -7420,8 +7403,8 @@ packages:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
- import-in-the-middle@1.15.0:
- resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==}
+ import-in-the-middle@2.0.0:
+ resolution: {integrity: sha512-yNZhyQYqXpkT0AKq3F3KLasUSK4fHvebNH5hOsKQw2dhGSALvQ4U0BqUc5suziKvydO5u5hgN2hy1RJaho8U5A==}
import-lazy@4.0.0:
resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
@@ -7503,8 +7486,8 @@ packages:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
- ipaddr.js@2.2.0:
- resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==}
+ ipaddr.js@2.3.0:
+ resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==}
engines: {node: '>= 10'}
irregular-plurals@3.5.0:
@@ -7791,6 +7774,15 @@ packages:
resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-environment-jsdom@29.7.0:
+ resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ canvas: ^2.5.0
+ peerDependenciesMeta:
+ canvas:
+ optional: true
+
jest-environment-node@29.7.0:
resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -7932,6 +7924,15 @@ packages:
resolution: {integrity: sha512-/kmVISmrwVwtyYU40iQUOp3SUPk2dhNCMsZBQX0R1/jZ8maaXJ/oZIzUOiyOqcgtLnETFKYChbJ5iDC/eWmFHg==}
engines: {node: '>=0.1.90'}
+ jsdom@20.0.3:
+ resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ canvas: ^2.5.0
+ peerDependenciesMeta:
+ canvas:
+ optional: true
+
jsdom@27.2.0:
resolution: {integrity: sha512-454TI39PeRDW1LgpyLPyURtB4Zx1tklSr6+OFOipsxGUH1WMTvk6C65JQdrj455+DP2uJ1+veBEHTGFKWVLFoA==}
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
@@ -8007,9 +8008,6 @@ packages:
resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==}
engines: {'0': node >=0.6.0}
- jsrsasign@11.1.0:
- resolution: {integrity: sha512-Ov74K9GihaK9/9WncTe1mPmvrO7Py665TUfUKvraXBpu+xcTWitrtuOwcjf4KMU9maPaYn0OuaWy0HOzy/GBXg==}
-
jstransformer@1.0.0:
resolution: {integrity: sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==}
@@ -8258,8 +8256,8 @@ packages:
resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
engines: {node: '>= 0.8'}
- mediabunny@1.25.1:
- resolution: {integrity: sha512-0Rrd47PMCVJbTPA7IJaXPCupV5/RZ/icgr+a0qExRJAr0n5vB4fsGSo+fdHIehG0CrddXtVRvNZwFtJz709yfA==}
+ mediabunny@1.25.8:
+ resolution: {integrity: sha512-2WCa9WtEbHOvg5rAWXQjVE+O/r01fpj65ymZdA2XhIeaWmdDQ40p32F0WY6tdBi+aeY+4ldwhAOpo0eyVrYTGg==}
meilisearch@0.54.0:
resolution: {integrity: sha512-b1bwJAEfj8C6hgSN88+/LvW3pe3nWC+thBS2seAbPZGakf/vzsLqppgZquiomzCr2GhU7U7H289625qhYe3rbw==}
@@ -8295,10 +8293,6 @@ packages:
mfm-js@0.25.0:
resolution: {integrity: sha512-JoK5TOtswXIvZSZ9hUEL+ZkcNV4onu/DtkaKeXK846+sJBBF8DvxYmPutt7nPaRDsUMmJGr64PNVMFpMGdk3hw==}
- microformats-parser@2.0.4:
- resolution: {integrity: sha512-DA2yt3uz2JjupBGoNvaG9ngBP5vSTI1ky2yhxBai/RnQrlzo+gEzuCdvwIIjj2nh3uVPDybTP5u7uua7pOa6LA==}
- engines: {node: '>=18'}
-
micromark-core-commonmark@2.0.3:
resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
@@ -8549,8 +8543,8 @@ packages:
peerDependencies:
msw: ^2.0.0
- msw@2.12.2:
- resolution: {integrity: sha512-Fsr8AR5Yu6C0thoWa1Z8qGBFQLDvLsWlAn/v3CNLiUizoRqBYArK3Ex3thXpMWRr1Li5/MKLOEZ5mLygUmWi1A==}
+ msw@2.12.4:
+ resolution: {integrity: sha512-rHNiVfTyKhzc0EjoXUBVGteNKBevdjOlVC6GlIRXpy+/3LHEIGRovnB5WPjcvmNODVQ1TNFnoa7wsGbd0V3epg==}
engines: {node: '>=18'}
hasBin: true
peerDependencies:
@@ -8676,8 +8670,8 @@ packages:
node-releases@2.0.27:
resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
- nodemailer@7.0.10:
- resolution: {integrity: sha512-Us/Se1WtT0ylXgNFfyFSx4LElllVLJXQjWi2Xz17xWw7amDKO2MLtFnVp1WACy7GkVGs+oBlRopVNUzlrGSw1w==}
+ nodemailer@7.0.11:
+ resolution: {integrity: sha512-gnXhNRE0FNhD7wPSCGhdNh46Hs6nm+uTyg+Kq0cZukNQiYdnCsoQjodNP9BQVG9XrcK/v6/MgpAPBUFyzh9pvw==}
engines: {node: '>=6.0.0'}
nodemon@3.1.11:
@@ -8744,6 +8738,9 @@ packages:
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+ nwsapi@2.2.23:
+ resolution: {integrity: sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==}
+
oauth2orize-pkce@0.1.2:
resolution: {integrity: sha512-grto2UYhXHi9GLE3IBgBBbV87xci55+bCyjpVuxKyzol6I5Rg0K1MiTuXE+JZk54R86SG2wqXODMiZYHraPpxw==}
@@ -8751,9 +8748,6 @@ packages:
resolution: {integrity: sha512-j4XtFDQUBsvUHPjUmvmNDUDMYed2MphMIJBhyxVVe8hGCjkuYnjIsW+D9qk8c5ciXRdnk6x6tEbiO6PLeOZdCQ==}
engines: {node: '>= 0.4.0'}
- oauth@0.10.2:
- resolution: {integrity: sha512-JtFnB+8nxDEXgNyniwz573xxbKSOu3R8D40xQKqcjwJ2CDkYqUDI53o6IuzDJBx60Z8VKCm271+t8iFjakrl8Q==}
-
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
@@ -8790,6 +8784,9 @@ packages:
resolution: {integrity: sha512-QOUH5Xrsced9fKXaQTjWoDGKeS/Or7E2jB0FN63N4mkAO4qJdB7WR7e6qWAOHM5nk25FJ8TGjhP7DH4l6vFVLg==}
engines: {node: '>=16'}
+ obug@2.1.1:
+ resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
+
on-exit-leak-free@2.1.2:
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
engines: {node: '>=14.0.0'}
@@ -8812,8 +8809,8 @@ packages:
oniguruma-parser@0.12.1:
resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==}
- oniguruma-to-es@4.3.3:
- resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==}
+ oniguruma-to-es@4.3.4:
+ resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==}
openapi-types@12.1.3:
resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==}
@@ -9063,8 +9060,8 @@ packages:
piscina@4.9.2:
resolution: {integrity: sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ==}
- pkce-challenge@5.0.0:
- resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==}
+ pkce-challenge@5.0.1:
+ resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==}
engines: {node: '>=16.20.0'}
pkg-dir@4.2.0:
@@ -9087,8 +9084,8 @@ packages:
resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
engines: {node: '>=10.13.0'}
- pnpm@10.23.0:
- resolution: {integrity: sha512-IcTlaYACrel+Tv6Li0qJqN48haN5GflX56DzDzj7xbvdBZgP/ikXmy+25uaRJC4JjZRdFgF3LK0P71+2QR4qSw==}
+ pnpm@10.25.0:
+ resolution: {integrity: sha512-XoJjkCevN8+DIGG8xtY5whljRIjg8rrr54UCink957Ul/80/f/V09emGBlTgmP6FK6isXdXO/hdn0joCCpL1AQ==}
engines: {node: '>=18.12'}
hasBin: true
@@ -9293,8 +9290,8 @@ packages:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
- prettier@3.6.2:
- resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==}
+ prettier@3.7.4:
+ resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==}
engines: {node: '>=14'}
hasBin: true
@@ -9389,6 +9386,9 @@ packages:
engines: {node: '>= 0.10'}
hasBin: true
+ psl@1.15.0:
+ resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==}
+
pstree.remy@1.1.8:
resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==}
@@ -9472,6 +9472,9 @@ packages:
resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
engines: {node: '>=0.6'}
+ querystringify@2.2.0:
+ resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
+
queue-lit@1.5.2:
resolution: {integrity: sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==}
engines: {node: '>=12'}
@@ -9525,10 +9528,10 @@ packages:
resolution: {integrity: sha512-+NRMYs2DyTP4/tqWz371Oo50JqmWltR1h2gcdgUMAWZJIAvrd0/SqlCfx7tpzpl/s36rzw6qH2MjoNrxtRNYhA==}
engines: {node: ^20.9.0 || >=22}
- react-dom@19.2.0:
- resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==}
+ react-dom@19.2.1:
+ resolution: {integrity: sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==}
peerDependencies:
- react: ^19.2.0
+ react: ^19.2.1
react-is@17.0.2:
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
@@ -9536,8 +9539,8 @@ packages:
react-is@18.3.1:
resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
- react@19.2.0:
- resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==}
+ react@19.2.1:
+ resolution: {integrity: sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==}
engines: {node: '>=0.10.0'}
read-pkg-up@7.0.1:
@@ -9562,9 +9565,9 @@ packages:
readdir-glob@1.1.3:
resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==}
- readdirp@4.1.2:
- resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
- engines: {node: '>= 14.18.0'}
+ readdirp@5.0.0:
+ resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
+ engines: {node: '>= 20.19.0'}
real-require@0.2.0:
resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
@@ -9638,13 +9641,16 @@ packages:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
- require-in-the-middle@7.5.2:
- resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==}
- engines: {node: '>=8.6.0'}
+ require-in-the-middle@8.0.1:
+ resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==}
+ engines: {node: '>=9.3.0 || >=8.10.0 <9.0.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==}
+
resolve-alpn@1.2.1:
resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
@@ -9761,8 +9767,8 @@ packages:
sanitize-html@2.17.0:
resolution: {integrity: sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA==}
- sass@1.94.2:
- resolution: {integrity: sha512-N+7WK20/wOr7CzA2snJcUSSNTCzeCGUTFY3OgeQP3mZ1aj9NMQ0mSTXwlrnd89j33zzQJGqIN52GIOmYrfq46A==}
+ sass@1.95.1:
+ resolution: {integrity: sha512-uPoDh5NIEZV4Dp5GBodkmNY9tSQfXY02pmCcUo+FR1P+x953HGkpw+vV28D4IqYB6f8webZtwoSaZaiPtpTeMg==}
engines: {node: '>=14.0.0'}
hasBin: true
@@ -9872,11 +9878,8 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
- shiki@3.15.0:
- resolution: {integrity: sha512-kLdkY6iV3dYbtPwS9KXU7mjfmDm25f5m0IPNFnaXO7TBPcvbUOY72PYXSuSqDzwp+vlH/d7MXpHlKO/x+QoLXw==}
-
- shimmer@1.2.1:
- resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==}
+ shiki@3.19.0:
+ resolution: {integrity: sha512-77VJr3OR/VUZzPiStyRhADmO2jApMM0V2b1qf0RpfWya8Zr1PeZev5AEpPGAAKWdiYUtcZGBE4F5QvJml1PvWA==}
side-channel-list@1.0.0:
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
@@ -10115,11 +10118,6 @@ packages:
standard-as-callback@2.1.0:
resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
- start-server-and-test@2.1.2:
- resolution: {integrity: sha512-OIjfo3G6QV9Sh6IlMqj58oZwVhPVuU/l6uVACG7YNE9kAfDvcYoPThtb0NNT3tZMMC3wOYbXnC15yiCSNFkdRg==}
- engines: {node: '>=16'}
- hasBin: true
-
start-server-and-test@2.1.3:
resolution: {integrity: sha512-k4EcbNjeg0odaDkAMlIeDVDByqX9PIgL4tivgP2tES6Zd8o+4pTq/HgbWCyA3VHIoZopB+wGnNPKYGGSByNriQ==}
engines: {node: '>=16'}
@@ -10159,8 +10157,8 @@ packages:
react-dom:
optional: true
- storybook@10.0.8:
- resolution: {integrity: sha512-vQMufKKA9TxgoEDHJv3esrqUkjszuuRiDkThiHxENFPdQawHhm2Dei+iwNRwH5W671zTDy9iRT9P1KDjcU5Iyw==}
+ storybook@10.1.5:
+ resolution: {integrity: sha512-q3xB1pOcmmHUH9LfQNY/BWMGxp3fc1OALJf+F5BXIxHGQUEIizz6V1AbDOngWN9oWzuA8Gdz5rOCe7yelOMWVg==}
hasBin: true
peerDependencies:
prettier: ^2 || ^3
@@ -10206,6 +10204,10 @@ packages:
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
engines: {node: '>=12'}
+ string-width@7.2.0:
+ resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+ engines: {node: '>=18'}
+
string.prototype.trim@1.2.10:
resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
engines: {node: '>= 0.4'}
@@ -10326,8 +10328,8 @@ packages:
symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
- systeminformation@5.27.11:
- resolution: {integrity: sha512-K3Lto/2m3K2twmKHdgx5B+0in9qhXK4YnoT9rIlgwN/4v7OV5c8IjbeAUkuky/6VzCQC7iKCAqi8rZathCdjHg==}
+ systeminformation@5.27.14:
+ resolution: {integrity: sha512-3DoNDYSZBLxBwaJtQGWNpq0fonga/VZ47HY1+7/G3YoIPaPz93Df6egSzzTKbEMmlzUpy3eQ0nR9REuYIycXGg==}
engines: {node: '>=8.0.0'}
os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android]
hasBin: true
@@ -10338,6 +10340,10 @@ packages:
os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android]
hasBin: true
+ tagged-tag@1.0.0:
+ resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==}
+ engines: {node: '>=20'}
+
tar-stream@3.1.7:
resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
@@ -10384,9 +10390,6 @@ packages:
through@2.3.8:
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
- tiny-glob@0.2.9:
- resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
-
tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
@@ -10396,8 +10399,9 @@ packages:
tinycolor2@1.6.0:
resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==}
- tinyexec@0.3.2:
- resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
+ tinyexec@1.0.2:
+ resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
+ engines: {node: '>=18'}
tinyglobby@0.2.15:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
@@ -10474,6 +10478,10 @@ packages:
resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==}
hasBin: true
+ tough-cookie@4.1.4:
+ resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==}
+ engines: {node: '>=6'}
+
tough-cookie@5.1.2:
resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==}
engines: {node: '>=16'}
@@ -10485,6 +10493,10 @@ packages:
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+ tr46@3.0.0:
+ resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==}
+ engines: {node: '>=12'}
+
tr46@6.0.0:
resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==}
engines: {node: '>=20'}
@@ -10542,8 +10554,8 @@ packages:
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
- tsx@4.20.6:
- resolution: {integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==}
+ tsx@4.21.0:
+ resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==}
engines: {node: '>=18.0.0'}
hasBin: true
@@ -10593,6 +10605,10 @@ packages:
resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
engines: {node: '>=16'}
+ type-fest@5.2.0:
+ resolution: {integrity: sha512-xxCJm+Bckc6kQBknN7i9fnP/xobQRsRQxR01CztFkp/h++yfVxUUcmMgfR2HttJx/dpWjS9ubVuyspJv24Q9DA==}
+ engines: {node: '>=20'}
+
type-is@1.6.18:
resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
engines: {node: '>= 0.6'}
@@ -10620,24 +10636,23 @@ packages:
typedarray@0.0.6:
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
- typeorm@0.3.27:
- resolution: {integrity: sha512-pNV1bn+1n8qEe8tUNsNdD8ejuPcMAg47u2lUGnbsajiNUr3p2Js1XLKQjBMH0yMRMDfdX8T+fIRejFmIwy9x4A==}
+ typeorm@0.3.28:
+ resolution: {integrity: sha512-6GH7wXhtfq2D33ZuRXYwIsl/qM5685WZcODZb7noOOcRMteM9KF2x2ap3H0EBjnSV0VO4gNAfJT5Ukp0PkOlvg==}
engines: {node: '>=16.13.0'}
hasBin: true
peerDependencies:
- '@google-cloud/spanner': ^5.18.0 || ^6.0.0 || ^7.0.0
+ '@google-cloud/spanner': ^5.18.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
'@sap/hana-client': ^2.14.22
better-sqlite3: ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0
ioredis: ^5.0.4
mongodb: ^5.8.0 || ^6.0.0
- mssql: ^9.1.1 || ^10.0.1 || ^11.0.1
+ mssql: ^9.1.1 || ^10.0.0 || ^11.0.0 || ^12.0.0
mysql2: ^2.2.5 || ^3.0.1
oracledb: ^6.3.0
pg: ^8.5.1
pg-native: ^3.0.0
pg-query-stream: ^4.0.0
redis: ^3.1.1 || ^4.0.0 || ^5.0.14
- reflect-metadata: ^0.1.14 || ^0.2.0
sql.js: ^1.4.0
sqlite3: ^5.0.3
ts-node: ^10.7.0
@@ -10697,8 +10712,8 @@ packages:
resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==}
engines: {node: '>=18'}
- ulid@3.0.1:
- resolution: {integrity: sha512-dPJyqPzx8preQhqq24bBG1YNkvigm87K8kVEHCD+ruZg24t6IFEFv00xMWfxcC4djmFtiTLdFuADn4+DOz6R7Q==}
+ ulid@3.0.2:
+ resolution: {integrity: sha512-yu26mwteFYzBAot7KVMqFGCVpsF6g8wXfJzQUHvu1no3+rRRSFcSV2nKeYvNPLD2J4b08jYBDhHUjeH0ygIl9w==}
hasBin: true
unbox-primitive@1.1.0:
@@ -10759,6 +10774,10 @@ packages:
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
engines: {node: '>= 4.0.0'}
+ universalify@0.2.0:
+ resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
+ engines: {node: '>= 4.0.0'}
+
universalify@2.0.1:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
@@ -10794,6 +10813,14 @@ packages:
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ url-parse@1.5.10:
+ resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
+
+ 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
+
utf-8-validate@6.0.5:
resolution: {integrity: sha512-EYZR+OpIXp9Y1eG1iueg8KRsY8TuT8VNgnanZ0uA3STqhHQTLwbl+WX76/9X5OY12yQubymBpaBSmMPkSTQcKA==}
engines: {node: '>=6.14.2'}
@@ -10855,8 +10882,8 @@ packages:
vfile@6.0.3:
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
- vite-plugin-glsl@1.5.4:
- resolution: {integrity: sha512-EUmwL+IDK+dGDAlaKm89++k8aJ4qmHjLQxrngww3GLOOAQ4aZ48o9YR1ie7XPe08iDWlG+9Uh5V7oiZcXTUbyA==}
+ vite-plugin-glsl@1.5.5:
+ resolution: {integrity: sha512-6NM2P4JkM+1hNSqMhM4eagX03bmhEoTyrOrk68y3Q6KXfdF73QIuCb6BmRZvwLPgXTCOBM3Zc8gL1WxctYnrUQ==}
engines: {node: '>= 20.17.0', npm: '>= 10.8.3'}
peerDependencies:
'@rollup/pluginutils': ^5.x
@@ -10871,8 +10898,8 @@ packages:
vite-plugin-turbosnap@1.0.3:
resolution: {integrity: sha512-p4D8CFVhZS412SyQX125qxyzOgIFouwOcvjZWk6bQbNPR1wtaEzFT6jZxAjf1dejlGqa6fqHcuCvQea6EWUkUA==}
- vite@7.2.4:
- resolution: {integrity: sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==}
+ vite@7.2.7:
+ resolution: {integrity: sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
@@ -10922,53 +10949,18 @@ packages:
peerDependencies:
vitest: '>=3'
- vitest@4.0.10:
- resolution: {integrity: sha512-2Fqty3MM9CDwOVet/jaQalYlbcjATZwPYGcqpiYQqgQ/dLC7GuHdISKgTYIVF/kaishKxLzleKWWfbSDklyIKg==}
- engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
- hasBin: true
- peerDependencies:
- '@edge-runtime/vm': '*'
- '@types/debug': ^4.1.12
- '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
- '@vitest/browser-playwright': 4.0.10
- '@vitest/browser-preview': 4.0.10
- '@vitest/browser-webdriverio': 4.0.10
- '@vitest/ui': 4.0.10
- happy-dom: '*'
- jsdom: '*'
- peerDependenciesMeta:
- '@edge-runtime/vm':
- optional: true
- '@types/debug':
- 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
-
- vitest@4.0.13:
- resolution: {integrity: sha512-QSD4I0fN6uZQfftryIXuqvqgBxTvJ3ZNkF6RWECd82YGAYAfhcppBLFXzXJHQAAhVFyYEuFTrq6h0hQqjB7jIQ==}
+ vitest@4.0.15:
+ resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==}
engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@opentelemetry/api': ^1.9.0
- '@types/debug': ^4.1.12
'@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
- '@vitest/browser-playwright': 4.0.13
- '@vitest/browser-preview': 4.0.13
- '@vitest/browser-webdriverio': 4.0.13
- '@vitest/ui': 4.0.13
+ '@vitest/browser-playwright': 4.0.15
+ '@vitest/browser-preview': 4.0.15
+ '@vitest/browser-webdriverio': 4.0.15
+ '@vitest/ui': 4.0.15
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
@@ -10976,8 +10968,6 @@ packages:
optional: true
'@opentelemetry/api':
optional: true
- '@types/debug':
- optional: true
'@types/node':
optional: true
'@vitest/browser-playwright':
@@ -11025,8 +11015,11 @@ packages:
vue-component-type-helpers@2.2.12:
resolution: {integrity: sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==}
- vue-component-type-helpers@3.1.5:
- resolution: {integrity: sha512-7V3yJuNWW7/1jxCcI1CswnpDsvs02Qcx/N43LkV+ZqhLj2PKj50slUflHAroNkN4UWiYfzMUUUXiNuv9khmSpQ==}
+ vue-component-type-helpers@3.1.8:
+ resolution: {integrity: sha512-oaowlmEM6BaYY+8o+9D9cuzxpWQWHqHTMKakMxXu0E+UCIOMTljyIPO15jcnaCwJtZu/zWDotK7mOIHvWD9mcw==}
+
+ vue-component-type-helpers@3.1.6:
+ resolution: {integrity: sha512-lqPXjac98uz7zh8fxHxJPJDP4SKeaYn2Fx4kQLCBthMXm9VsmPdzUWOGWMcXN7reJ9IkcBiOFxsFS/Po7dARiw==}
vue-demi@0.14.10:
resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
@@ -11055,14 +11048,14 @@ packages:
peerDependencies:
vue: '>=2'
- vue-tsc@3.1.5:
- resolution: {integrity: sha512-L/G9IUjOWhBU0yun89rv8fKqmKC+T0HfhrFjlIml71WpfBv9eb4E9Bev8FMbyueBIU9vxQqbd+oOsVcDa5amGw==}
+ vue-tsc@3.1.8:
+ resolution: {integrity: sha512-deKgwx6exIHeZwF601P1ktZKNF0bepaSN4jBU3AsbldPx9gylUc1JDxYppl82yxgkAgaz0Y0LCLOi+cXe9HMYA==}
hasBin: true
peerDependencies:
typescript: '>=5.0.0'
- vue@3.5.24:
- resolution: {integrity: sha512-uTHDOpVQTMjcGgrqFPSb8iO2m1DUvo+WbGqoXQz8Y1CeBYQ0FXf2z1gLRaBtHjlRz7zZUBHxjVB5VTLzYkvftg==}
+ vue@3.5.25:
+ resolution: {integrity: sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
@@ -11074,15 +11067,14 @@ packages:
peerDependencies:
vue: ^3.0.1
+ w3c-xmlserializer@4.0.0:
+ resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==}
+ engines: {node: '>=14'}
+
w3c-xmlserializer@5.0.0:
resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
engines: {node: '>=18'}
- wait-on@8.0.5:
- resolution: {integrity: sha512-J3WlS0txVHkhLRb2FsmRg3dkMTCV1+M6Xra3Ho7HzZDHpE7DCOnoSoCJsZotrmW3uRMhvIJGSKUKrh/MeF4iag==}
- engines: {node: '>=12.0.0'}
- hasBin: true
-
wait-on@9.0.3:
resolution: {integrity: sha512-13zBnyYvFDW1rBvWiJ6Av3ymAaq8EDQuvxZnPIw3g04UqGi4TyoIJABmfJ6zrvKo9yeFQExNkOk7idQbDJcuKA==}
engines: {node: '>=20.0.0'}
@@ -11115,6 +11107,10 @@ packages:
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+ webidl-conversions@7.0.0:
+ resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
+ engines: {node: '>=12'}
+
webidl-conversions@8.0.0:
resolution: {integrity: sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==}
engines: {node: '>=20'}
@@ -11122,6 +11118,10 @@ packages:
webpack-virtual-modules@0.6.2:
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+ whatwg-encoding@2.0.0:
+ resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
+ engines: {node: '>=12'}
+
whatwg-encoding@3.1.1:
resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
engines: {node: '>=18'}
@@ -11134,6 +11134,10 @@ packages:
resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
engines: {node: '>=18'}
+ whatwg-url@11.0.0:
+ resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==}
+ engines: {node: '>=12'}
+
whatwg-url@15.1.0:
resolution: {integrity: sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==}
engines: {node: '>=20'}
@@ -11202,6 +11206,10 @@ packages:
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==}
@@ -11283,6 +11291,10 @@ packages:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
+ yargs-parser@22.0.0:
+ resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=23}
+
yargs@15.4.1:
resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
engines: {node: '>=8'}
@@ -11295,6 +11307,10 @@ packages:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
+ yargs@18.0.0:
+ resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=23}
+
yauzl@2.10.0:
resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
@@ -11447,31 +11463,31 @@ snapshots:
'@smithy/util-utf8': 2.3.0
tslib: 2.8.1
- '@aws-sdk/client-s3@3.937.0':
+ '@aws-sdk/client-s3@3.948.0':
dependencies:
'@aws-crypto/sha1-browser': 5.2.0
'@aws-crypto/sha256-browser': 5.2.0
'@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/core': 3.936.0
- '@aws-sdk/credential-provider-node': 3.936.0
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/credential-provider-node': 3.948.0
'@aws-sdk/middleware-bucket-endpoint': 3.936.0
'@aws-sdk/middleware-expect-continue': 3.936.0
- '@aws-sdk/middleware-flexible-checksums': 3.936.0
+ '@aws-sdk/middleware-flexible-checksums': 3.947.0
'@aws-sdk/middleware-host-header': 3.936.0
'@aws-sdk/middleware-location-constraint': 3.936.0
'@aws-sdk/middleware-logger': 3.936.0
- '@aws-sdk/middleware-recursion-detection': 3.936.0
- '@aws-sdk/middleware-sdk-s3': 3.936.0
+ '@aws-sdk/middleware-recursion-detection': 3.948.0
+ '@aws-sdk/middleware-sdk-s3': 3.947.0
'@aws-sdk/middleware-ssec': 3.936.0
- '@aws-sdk/middleware-user-agent': 3.936.0
+ '@aws-sdk/middleware-user-agent': 3.947.0
'@aws-sdk/region-config-resolver': 3.936.0
- '@aws-sdk/signature-v4-multi-region': 3.936.0
+ '@aws-sdk/signature-v4-multi-region': 3.947.0
'@aws-sdk/types': 3.936.0
'@aws-sdk/util-endpoints': 3.936.0
'@aws-sdk/util-user-agent-browser': 3.936.0
- '@aws-sdk/util-user-agent-node': 3.936.0
+ '@aws-sdk/util-user-agent-node': 3.947.0
'@smithy/config-resolver': 4.4.3
- '@smithy/core': 3.18.5
+ '@smithy/core': 3.18.7
'@smithy/eventstream-serde-browser': 4.2.5
'@smithy/eventstream-serde-config-resolver': 4.3.5
'@smithy/eventstream-serde-node': 4.2.5
@@ -11482,21 +11498,21 @@ snapshots:
'@smithy/invalid-dependency': 4.2.5
'@smithy/md5-js': 4.2.5
'@smithy/middleware-content-length': 4.2.5
- '@smithy/middleware-endpoint': 4.3.12
- '@smithy/middleware-retry': 4.4.12
+ '@smithy/middleware-endpoint': 4.3.14
+ '@smithy/middleware-retry': 4.4.14
'@smithy/middleware-serde': 4.2.6
'@smithy/middleware-stack': 4.2.5
'@smithy/node-config-provider': 4.3.5
'@smithy/node-http-handler': 4.4.5
'@smithy/protocol-http': 5.3.5
- '@smithy/smithy-client': 4.9.8
+ '@smithy/smithy-client': 4.9.10
'@smithy/types': 4.9.0
'@smithy/url-parser': 4.2.5
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1
- '@smithy/util-defaults-mode-browser': 4.3.11
- '@smithy/util-defaults-mode-node': 4.2.14
+ '@smithy/util-defaults-mode-browser': 4.3.13
+ '@smithy/util-defaults-mode-node': 4.2.16
'@smithy/util-endpoints': 3.2.5
'@smithy/util-middleware': 4.2.5
'@smithy/util-retry': 4.2.5
@@ -11524,26 +11540,26 @@ snapshots:
'@aws-sdk/util-user-agent-browser': 3.936.0
'@aws-sdk/util-user-agent-node': 3.936.0
'@smithy/config-resolver': 4.4.3
- '@smithy/core': 3.18.5
+ '@smithy/core': 3.18.7
'@smithy/fetch-http-handler': 5.3.6
'@smithy/hash-node': 4.2.5
'@smithy/invalid-dependency': 4.2.5
'@smithy/middleware-content-length': 4.2.5
- '@smithy/middleware-endpoint': 4.3.12
- '@smithy/middleware-retry': 4.4.12
+ '@smithy/middleware-endpoint': 4.3.14
+ '@smithy/middleware-retry': 4.4.14
'@smithy/middleware-serde': 4.2.6
'@smithy/middleware-stack': 4.2.5
'@smithy/node-config-provider': 4.3.5
'@smithy/node-http-handler': 4.4.5
'@smithy/protocol-http': 5.3.5
- '@smithy/smithy-client': 4.9.8
+ '@smithy/smithy-client': 4.9.10
'@smithy/types': 4.9.0
'@smithy/url-parser': 4.2.5
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1
- '@smithy/util-defaults-mode-browser': 4.3.11
- '@smithy/util-defaults-mode-node': 4.2.14
+ '@smithy/util-defaults-mode-browser': 4.3.13
+ '@smithy/util-defaults-mode-node': 4.2.16
'@smithy/util-endpoints': 3.2.5
'@smithy/util-middleware': 4.2.5
'@smithy/util-retry': 4.2.5
@@ -11567,26 +11583,69 @@ snapshots:
'@aws-sdk/util-user-agent-browser': 3.936.0
'@aws-sdk/util-user-agent-node': 3.936.0
'@smithy/config-resolver': 4.4.3
- '@smithy/core': 3.18.5
+ '@smithy/core': 3.18.7
'@smithy/fetch-http-handler': 5.3.6
'@smithy/hash-node': 4.2.5
'@smithy/invalid-dependency': 4.2.5
'@smithy/middleware-content-length': 4.2.5
- '@smithy/middleware-endpoint': 4.3.12
- '@smithy/middleware-retry': 4.4.12
+ '@smithy/middleware-endpoint': 4.3.14
+ '@smithy/middleware-retry': 4.4.14
'@smithy/middleware-serde': 4.2.6
'@smithy/middleware-stack': 4.2.5
'@smithy/node-config-provider': 4.3.5
'@smithy/node-http-handler': 4.4.5
'@smithy/protocol-http': 5.3.5
- '@smithy/smithy-client': 4.9.8
+ '@smithy/smithy-client': 4.9.10
'@smithy/types': 4.9.0
'@smithy/url-parser': 4.2.5
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1
- '@smithy/util-defaults-mode-browser': 4.3.11
- '@smithy/util-defaults-mode-node': 4.2.14
+ '@smithy/util-defaults-mode-browser': 4.3.13
+ '@smithy/util-defaults-mode-node': 4.2.16
+ '@smithy/util-endpoints': 3.2.5
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-retry': 4.2.5
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/client-sso@3.948.0':
+ dependencies:
+ '@aws-crypto/sha256-browser': 5.2.0
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/middleware-host-header': 3.936.0
+ '@aws-sdk/middleware-logger': 3.936.0
+ '@aws-sdk/middleware-recursion-detection': 3.948.0
+ '@aws-sdk/middleware-user-agent': 3.947.0
+ '@aws-sdk/region-config-resolver': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-endpoints': 3.936.0
+ '@aws-sdk/util-user-agent-browser': 3.936.0
+ '@aws-sdk/util-user-agent-node': 3.947.0
+ '@smithy/config-resolver': 4.4.3
+ '@smithy/core': 3.18.7
+ '@smithy/fetch-http-handler': 5.3.6
+ '@smithy/hash-node': 4.2.5
+ '@smithy/invalid-dependency': 4.2.5
+ '@smithy/middleware-content-length': 4.2.5
+ '@smithy/middleware-endpoint': 4.3.14
+ '@smithy/middleware-retry': 4.4.14
+ '@smithy/middleware-serde': 4.2.6
+ '@smithy/middleware-stack': 4.2.5
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/node-http-handler': 4.4.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/smithy-client': 4.9.10
+ '@smithy/types': 4.9.0
+ '@smithy/url-parser': 4.2.5
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-body-length-browser': 4.2.0
+ '@smithy/util-body-length-node': 4.2.1
+ '@smithy/util-defaults-mode-browser': 4.3.13
+ '@smithy/util-defaults-mode-node': 4.2.16
'@smithy/util-endpoints': 3.2.5
'@smithy/util-middleware': 4.2.5
'@smithy/util-retry': 4.2.5
@@ -11599,12 +11658,28 @@ snapshots:
dependencies:
'@aws-sdk/types': 3.936.0
'@aws-sdk/xml-builder': 3.930.0
- '@smithy/core': 3.18.5
+ '@smithy/core': 3.18.7
'@smithy/node-config-provider': 4.3.5
'@smithy/property-provider': 4.2.5
'@smithy/protocol-http': 5.3.5
'@smithy/signature-v4': 5.3.5
- '@smithy/smithy-client': 4.9.8
+ '@smithy/smithy-client': 4.9.10
+ '@smithy/types': 4.9.0
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+
+ '@aws-sdk/core@3.947.0':
+ dependencies:
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/xml-builder': 3.930.0
+ '@smithy/core': 3.18.7
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/property-provider': 4.2.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/signature-v4': 5.3.5
+ '@smithy/smithy-client': 4.9.10
'@smithy/types': 4.9.0
'@smithy/util-base64': 4.3.0
'@smithy/util-middleware': 4.2.5
@@ -11619,6 +11694,14 @@ snapshots:
'@smithy/types': 4.9.0
tslib: 2.8.1
+ '@aws-sdk/credential-provider-env@3.947.0':
+ dependencies:
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
'@aws-sdk/credential-provider-http@3.936.0':
dependencies:
'@aws-sdk/core': 3.936.0
@@ -11627,7 +11710,20 @@ snapshots:
'@smithy/node-http-handler': 4.4.5
'@smithy/property-provider': 4.2.5
'@smithy/protocol-http': 5.3.5
- '@smithy/smithy-client': 4.9.8
+ '@smithy/smithy-client': 4.9.10
+ '@smithy/types': 4.9.0
+ '@smithy/util-stream': 4.5.6
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-http@3.947.0':
+ dependencies:
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/fetch-http-handler': 5.3.6
+ '@smithy/node-http-handler': 4.4.5
+ '@smithy/property-provider': 4.2.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/smithy-client': 4.9.10
'@smithy/types': 4.9.0
'@smithy/util-stream': 4.5.6
tslib: 2.8.1
@@ -11651,6 +11747,25 @@ snapshots:
transitivePeerDependencies:
- aws-crt
+ '@aws-sdk/credential-provider-ini@3.948.0':
+ dependencies:
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/credential-provider-env': 3.947.0
+ '@aws-sdk/credential-provider-http': 3.947.0
+ '@aws-sdk/credential-provider-login': 3.948.0
+ '@aws-sdk/credential-provider-process': 3.947.0
+ '@aws-sdk/credential-provider-sso': 3.948.0
+ '@aws-sdk/credential-provider-web-identity': 3.948.0
+ '@aws-sdk/nested-clients': 3.948.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/credential-provider-imds': 4.2.5
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
'@aws-sdk/credential-provider-login@3.936.0':
dependencies:
'@aws-sdk/core': 3.936.0
@@ -11664,6 +11779,19 @@ snapshots:
transitivePeerDependencies:
- aws-crt
+ '@aws-sdk/credential-provider-login@3.948.0':
+ dependencies:
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/nested-clients': 3.948.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
'@aws-sdk/credential-provider-node@3.936.0':
dependencies:
'@aws-sdk/credential-provider-env': 3.936.0
@@ -11681,6 +11809,23 @@ snapshots:
transitivePeerDependencies:
- aws-crt
+ '@aws-sdk/credential-provider-node@3.948.0':
+ dependencies:
+ '@aws-sdk/credential-provider-env': 3.947.0
+ '@aws-sdk/credential-provider-http': 3.947.0
+ '@aws-sdk/credential-provider-ini': 3.948.0
+ '@aws-sdk/credential-provider-process': 3.947.0
+ '@aws-sdk/credential-provider-sso': 3.948.0
+ '@aws-sdk/credential-provider-web-identity': 3.948.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/credential-provider-imds': 4.2.5
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
'@aws-sdk/credential-provider-process@3.936.0':
dependencies:
'@aws-sdk/core': 3.936.0
@@ -11690,6 +11835,15 @@ snapshots:
'@smithy/types': 4.9.0
tslib: 2.8.1
+ '@aws-sdk/credential-provider-process@3.947.0':
+ dependencies:
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
'@aws-sdk/credential-provider-sso@3.936.0':
dependencies:
'@aws-sdk/client-sso': 3.936.0
@@ -11703,6 +11857,19 @@ snapshots:
transitivePeerDependencies:
- aws-crt
+ '@aws-sdk/credential-provider-sso@3.948.0':
+ dependencies:
+ '@aws-sdk/client-sso': 3.948.0
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/token-providers': 3.948.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
'@aws-sdk/credential-provider-web-identity@3.936.0':
dependencies:
'@aws-sdk/core': 3.936.0
@@ -11715,12 +11882,24 @@ snapshots:
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/lib-storage@3.937.0(@aws-sdk/client-s3@3.937.0)':
+ '@aws-sdk/credential-provider-web-identity@3.948.0':
dependencies:
- '@aws-sdk/client-s3': 3.937.0
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/nested-clients': 3.948.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/lib-storage@3.948.0(@aws-sdk/client-s3@3.948.0)':
+ dependencies:
+ '@aws-sdk/client-s3': 3.948.0
'@smithy/abort-controller': 4.2.5
- '@smithy/middleware-endpoint': 4.3.12
- '@smithy/smithy-client': 4.9.8
+ '@smithy/middleware-endpoint': 4.3.14
+ '@smithy/smithy-client': 4.9.10
buffer: 5.6.0
events: 3.3.0
stream-browserify: 3.0.0
@@ -11743,12 +11922,12 @@ snapshots:
'@smithy/types': 4.9.0
tslib: 2.8.1
- '@aws-sdk/middleware-flexible-checksums@3.936.0':
+ '@aws-sdk/middleware-flexible-checksums@3.947.0':
dependencies:
'@aws-crypto/crc32': 5.2.0
'@aws-crypto/crc32c': 5.2.0
'@aws-crypto/util': 5.2.0
- '@aws-sdk/core': 3.936.0
+ '@aws-sdk/core': 3.947.0
'@aws-sdk/types': 3.936.0
'@smithy/is-array-buffer': 4.2.0
'@smithy/node-config-provider': 4.3.5
@@ -11781,7 +11960,15 @@ snapshots:
'@aws-sdk/middleware-recursion-detection@3.936.0':
dependencies:
'@aws-sdk/types': 3.936.0
- '@aws/lambda-invoke-store': 0.2.0
+ '@aws/lambda-invoke-store': 0.2.2
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-recursion-detection@3.948.0':
+ dependencies:
+ '@aws-sdk/types': 3.936.0
+ '@aws/lambda-invoke-store': 0.2.2
'@smithy/protocol-http': 5.3.5
'@smithy/types': 4.9.0
tslib: 2.8.1
@@ -11791,11 +11978,28 @@ snapshots:
'@aws-sdk/core': 3.936.0
'@aws-sdk/types': 3.936.0
'@aws-sdk/util-arn-parser': 3.893.0
- '@smithy/core': 3.18.5
+ '@smithy/core': 3.18.7
'@smithy/node-config-provider': 4.3.5
'@smithy/protocol-http': 5.3.5
'@smithy/signature-v4': 5.3.5
- '@smithy/smithy-client': 4.9.8
+ '@smithy/smithy-client': 4.9.10
+ '@smithy/types': 4.9.0
+ '@smithy/util-config-provider': 4.2.0
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-stream': 4.5.6
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-sdk-s3@3.947.0':
+ dependencies:
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-arn-parser': 3.893.0
+ '@smithy/core': 3.18.7
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/signature-v4': 5.3.5
+ '@smithy/smithy-client': 4.9.10
'@smithy/types': 4.9.0
'@smithy/util-config-provider': 4.2.0
'@smithy/util-middleware': 4.2.5
@@ -11814,7 +12018,17 @@ snapshots:
'@aws-sdk/core': 3.936.0
'@aws-sdk/types': 3.936.0
'@aws-sdk/util-endpoints': 3.936.0
- '@smithy/core': 3.18.5
+ '@smithy/core': 3.18.7
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-user-agent@3.947.0':
+ dependencies:
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-endpoints': 3.936.0
+ '@smithy/core': 3.18.7
'@smithy/protocol-http': 5.3.5
'@smithy/types': 4.9.0
tslib: 2.8.1
@@ -11834,26 +12048,69 @@ snapshots:
'@aws-sdk/util-user-agent-browser': 3.936.0
'@aws-sdk/util-user-agent-node': 3.936.0
'@smithy/config-resolver': 4.4.3
- '@smithy/core': 3.18.5
+ '@smithy/core': 3.18.7
'@smithy/fetch-http-handler': 5.3.6
'@smithy/hash-node': 4.2.5
'@smithy/invalid-dependency': 4.2.5
'@smithy/middleware-content-length': 4.2.5
- '@smithy/middleware-endpoint': 4.3.12
- '@smithy/middleware-retry': 4.4.12
+ '@smithy/middleware-endpoint': 4.3.14
+ '@smithy/middleware-retry': 4.4.14
'@smithy/middleware-serde': 4.2.6
'@smithy/middleware-stack': 4.2.5
'@smithy/node-config-provider': 4.3.5
'@smithy/node-http-handler': 4.4.5
'@smithy/protocol-http': 5.3.5
- '@smithy/smithy-client': 4.9.8
+ '@smithy/smithy-client': 4.9.10
'@smithy/types': 4.9.0
'@smithy/url-parser': 4.2.5
'@smithy/util-base64': 4.3.0
'@smithy/util-body-length-browser': 4.2.0
'@smithy/util-body-length-node': 4.2.1
- '@smithy/util-defaults-mode-browser': 4.3.11
- '@smithy/util-defaults-mode-node': 4.2.14
+ '@smithy/util-defaults-mode-browser': 4.3.13
+ '@smithy/util-defaults-mode-node': 4.2.16
+ '@smithy/util-endpoints': 3.2.5
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-retry': 4.2.5
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/nested-clients@3.948.0':
+ dependencies:
+ '@aws-crypto/sha256-browser': 5.2.0
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/middleware-host-header': 3.936.0
+ '@aws-sdk/middleware-logger': 3.936.0
+ '@aws-sdk/middleware-recursion-detection': 3.948.0
+ '@aws-sdk/middleware-user-agent': 3.947.0
+ '@aws-sdk/region-config-resolver': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-endpoints': 3.936.0
+ '@aws-sdk/util-user-agent-browser': 3.936.0
+ '@aws-sdk/util-user-agent-node': 3.947.0
+ '@smithy/config-resolver': 4.4.3
+ '@smithy/core': 3.18.7
+ '@smithy/fetch-http-handler': 5.3.6
+ '@smithy/hash-node': 4.2.5
+ '@smithy/invalid-dependency': 4.2.5
+ '@smithy/middleware-content-length': 4.2.5
+ '@smithy/middleware-endpoint': 4.3.14
+ '@smithy/middleware-retry': 4.4.14
+ '@smithy/middleware-serde': 4.2.6
+ '@smithy/middleware-stack': 4.2.5
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/node-http-handler': 4.4.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/smithy-client': 4.9.10
+ '@smithy/types': 4.9.0
+ '@smithy/url-parser': 4.2.5
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-body-length-browser': 4.2.0
+ '@smithy/util-body-length-node': 4.2.1
+ '@smithy/util-defaults-mode-browser': 4.3.13
+ '@smithy/util-defaults-mode-node': 4.2.16
'@smithy/util-endpoints': 3.2.5
'@smithy/util-middleware': 4.2.5
'@smithy/util-retry': 4.2.5
@@ -11879,6 +12136,15 @@ snapshots:
'@smithy/types': 4.9.0
tslib: 2.8.1
+ '@aws-sdk/signature-v4-multi-region@3.947.0':
+ dependencies:
+ '@aws-sdk/middleware-sdk-s3': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/signature-v4': 5.3.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
'@aws-sdk/token-providers@3.936.0':
dependencies:
'@aws-sdk/core': 3.936.0
@@ -11891,6 +12157,18 @@ snapshots:
transitivePeerDependencies:
- aws-crt
+ '@aws-sdk/token-providers@3.948.0':
+ dependencies:
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/nested-clients': 3.948.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
'@aws-sdk/types@3.936.0':
dependencies:
'@smithy/types': 4.9.0
@@ -11927,13 +12205,21 @@ snapshots:
'@smithy/types': 4.9.0
tslib: 2.8.1
+ '@aws-sdk/util-user-agent-node@3.947.0':
+ dependencies:
+ '@aws-sdk/middleware-user-agent': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
'@aws-sdk/xml-builder@3.930.0':
dependencies:
'@smithy/types': 4.9.0
fast-xml-parser: 5.2.5
tslib: 2.8.1
- '@aws/lambda-invoke-store@0.2.0': {}
+ '@aws/lambda-invoke-store@0.2.2': {}
'@babel/code-frame@7.27.1':
dependencies:
@@ -12278,157 +12564,157 @@ snapshots:
'@esbuild/aix-ppc64@0.25.11':
optional: true
- '@esbuild/aix-ppc64@0.27.0':
+ '@esbuild/aix-ppc64@0.27.1':
optional: true
'@esbuild/android-arm64@0.25.11':
optional: true
- '@esbuild/android-arm64@0.27.0':
+ '@esbuild/android-arm64@0.27.1':
optional: true
'@esbuild/android-arm@0.25.11':
optional: true
- '@esbuild/android-arm@0.27.0':
+ '@esbuild/android-arm@0.27.1':
optional: true
'@esbuild/android-x64@0.25.11':
optional: true
- '@esbuild/android-x64@0.27.0':
+ '@esbuild/android-x64@0.27.1':
optional: true
'@esbuild/darwin-arm64@0.25.11':
optional: true
- '@esbuild/darwin-arm64@0.27.0':
+ '@esbuild/darwin-arm64@0.27.1':
optional: true
'@esbuild/darwin-x64@0.25.11':
optional: true
- '@esbuild/darwin-x64@0.27.0':
+ '@esbuild/darwin-x64@0.27.1':
optional: true
'@esbuild/freebsd-arm64@0.25.11':
optional: true
- '@esbuild/freebsd-arm64@0.27.0':
+ '@esbuild/freebsd-arm64@0.27.1':
optional: true
'@esbuild/freebsd-x64@0.25.11':
optional: true
- '@esbuild/freebsd-x64@0.27.0':
+ '@esbuild/freebsd-x64@0.27.1':
optional: true
'@esbuild/linux-arm64@0.25.11':
optional: true
- '@esbuild/linux-arm64@0.27.0':
+ '@esbuild/linux-arm64@0.27.1':
optional: true
'@esbuild/linux-arm@0.25.11':
optional: true
- '@esbuild/linux-arm@0.27.0':
+ '@esbuild/linux-arm@0.27.1':
optional: true
'@esbuild/linux-ia32@0.25.11':
optional: true
- '@esbuild/linux-ia32@0.27.0':
+ '@esbuild/linux-ia32@0.27.1':
optional: true
'@esbuild/linux-loong64@0.25.11':
optional: true
- '@esbuild/linux-loong64@0.27.0':
+ '@esbuild/linux-loong64@0.27.1':
optional: true
'@esbuild/linux-mips64el@0.25.11':
optional: true
- '@esbuild/linux-mips64el@0.27.0':
+ '@esbuild/linux-mips64el@0.27.1':
optional: true
'@esbuild/linux-ppc64@0.25.11':
optional: true
- '@esbuild/linux-ppc64@0.27.0':
+ '@esbuild/linux-ppc64@0.27.1':
optional: true
'@esbuild/linux-riscv64@0.25.11':
optional: true
- '@esbuild/linux-riscv64@0.27.0':
+ '@esbuild/linux-riscv64@0.27.1':
optional: true
'@esbuild/linux-s390x@0.25.11':
optional: true
- '@esbuild/linux-s390x@0.27.0':
+ '@esbuild/linux-s390x@0.27.1':
optional: true
'@esbuild/linux-x64@0.25.11':
optional: true
- '@esbuild/linux-x64@0.27.0':
+ '@esbuild/linux-x64@0.27.1':
optional: true
'@esbuild/netbsd-arm64@0.25.11':
optional: true
- '@esbuild/netbsd-arm64@0.27.0':
+ '@esbuild/netbsd-arm64@0.27.1':
optional: true
'@esbuild/netbsd-x64@0.25.11':
optional: true
- '@esbuild/netbsd-x64@0.27.0':
+ '@esbuild/netbsd-x64@0.27.1':
optional: true
'@esbuild/openbsd-arm64@0.25.11':
optional: true
- '@esbuild/openbsd-arm64@0.27.0':
+ '@esbuild/openbsd-arm64@0.27.1':
optional: true
'@esbuild/openbsd-x64@0.25.11':
optional: true
- '@esbuild/openbsd-x64@0.27.0':
+ '@esbuild/openbsd-x64@0.27.1':
optional: true
'@esbuild/openharmony-arm64@0.25.11':
optional: true
- '@esbuild/openharmony-arm64@0.27.0':
+ '@esbuild/openharmony-arm64@0.27.1':
optional: true
'@esbuild/sunos-x64@0.25.11':
optional: true
- '@esbuild/sunos-x64@0.27.0':
+ '@esbuild/sunos-x64@0.27.1':
optional: true
'@esbuild/win32-arm64@0.25.11':
optional: true
- '@esbuild/win32-arm64@0.27.0':
+ '@esbuild/win32-arm64@0.27.1':
optional: true
'@esbuild/win32-ia32@0.25.11':
optional: true
- '@esbuild/win32-ia32@0.27.0':
+ '@esbuild/win32-ia32@0.27.1':
optional: true
'@esbuild/win32-x64@0.25.11':
optional: true
- '@esbuild/win32-x64@0.27.0':
+ '@esbuild/win32-x64@0.27.1':
optional: true
'@eslint-community/eslint-utils@4.9.0(eslint@9.39.1)':
@@ -12489,7 +12775,7 @@ snapshots:
'@fastify/accept-negotiator@2.0.1': {}
- '@fastify/accepts@5.0.3':
+ '@fastify/accepts@5.0.4':
dependencies:
accepts: 1.3.8
fastify-plugin: 5.1.0
@@ -12502,12 +12788,7 @@ snapshots:
'@fastify/busboy@3.2.0': {}
- '@fastify/cookie@11.0.2':
- dependencies:
- cookie: 1.0.2
- fastify-plugin: 5.1.0
-
- '@fastify/cors@11.1.0':
+ '@fastify/cors@11.2.0':
dependencies:
fastify-plugin: 5.1.0
toad-cache: 3.7.0
@@ -12529,9 +12810,9 @@ snapshots:
'@fastify/forwarded@3.0.1': {}
- '@fastify/http-proxy@11.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)':
+ '@fastify/http-proxy@11.4.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)':
dependencies:
- '@fastify/reply-from': 12.4.0
+ '@fastify/reply-from': 12.5.0
fast-querystring: 1.1.2
fastify-plugin: 5.1.0
ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5)
@@ -12554,9 +12835,9 @@ snapshots:
'@fastify/proxy-addr@5.1.0':
dependencies:
'@fastify/forwarded': 3.0.1
- ipaddr.js: 2.2.0
+ ipaddr.js: 2.3.0
- '@fastify/reply-from@12.4.0':
+ '@fastify/reply-from@12.5.0':
dependencies:
'@fastify/error': 4.2.0
end-of-stream: 1.4.5
@@ -12583,11 +12864,6 @@ snapshots:
fastq: 1.19.1
glob: 11.1.0
- '@fastify/view@11.1.1':
- dependencies:
- fastify-plugin: 5.1.0
- toad-cache: 3.7.0
-
'@file-type/xml@0.4.4':
dependencies:
sax: 1.4.3
@@ -12721,31 +12997,31 @@ snapshots:
'@inquirer/ansi@1.0.2': {}
- '@inquirer/confirm@5.1.21(@types/node@24.10.1)':
+ '@inquirer/confirm@5.1.21(@types/node@24.10.2)':
dependencies:
- '@inquirer/core': 10.3.2(@types/node@24.10.1)
- '@inquirer/type': 3.0.10(@types/node@24.10.1)
+ '@inquirer/core': 10.3.2(@types/node@24.10.2)
+ '@inquirer/type': 3.0.10(@types/node@24.10.2)
optionalDependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
- '@inquirer/core@10.3.2(@types/node@24.10.1)':
+ '@inquirer/core@10.3.2(@types/node@24.10.2)':
dependencies:
'@inquirer/ansi': 1.0.2
'@inquirer/figures': 1.0.15
- '@inquirer/type': 3.0.10(@types/node@24.10.1)
+ '@inquirer/type': 3.0.10(@types/node@24.10.2)
cli-width: 4.1.0
mute-stream: 2.0.0
signal-exit: 4.1.0
wrap-ansi: 6.2.0
yoctocolors-cjs: 2.1.3
optionalDependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@inquirer/figures@1.0.15': {}
- '@inquirer/type@3.0.10(@types/node@24.10.1)':
+ '@inquirer/type@3.0.10(@types/node@24.10.2)':
optionalDependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@ioredis/commands@1.4.0': {}
@@ -12781,7 +13057,7 @@ snapshots:
'@jest/console@29.7.0':
dependencies:
'@jest/types': 29.6.3
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
chalk: 4.1.2
jest-message-util: 29.7.0
jest-util: 29.7.0
@@ -12794,14 +13070,14 @@ snapshots:
'@jest/test-result': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
ansi-escapes: 4.3.2
chalk: 4.1.2
ci-info: 3.9.0
exit: 0.1.2
graceful-fs: 4.2.11
jest-changed-files: 29.7.0
- jest-config: 29.7.0(@types/node@24.10.1)
+ jest-config: 29.7.0(@types/node@24.10.2)
jest-haste-map: 29.7.0
jest-message-util: 29.7.0
jest-regex-util: 29.6.3
@@ -12830,7 +13106,7 @@ snapshots:
dependencies:
'@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
jest-mock: 29.7.0
'@jest/expect-utils@29.7.0':
@@ -12848,7 +13124,7 @@ snapshots:
dependencies:
'@jest/types': 29.6.3
'@sinonjs/fake-timers': 10.3.0
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
jest-message-util: 29.7.0
jest-mock: 29.7.0
jest-util: 29.7.0
@@ -12864,7 +13140,7 @@ snapshots:
'@jest/pattern@30.0.1':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
jest-regex-util: 30.0.1
'@jest/reporters@29.7.0':
@@ -12875,7 +13151,7 @@ snapshots:
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
'@jridgewell/trace-mapping': 0.3.31
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
chalk: 4.1.2
collect-v8-coverage: 1.0.3
exit: 0.1.2
@@ -12949,7 +13225,7 @@ snapshots:
'@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/yargs': 17.0.34
chalk: 4.1.2
@@ -12959,16 +13235,16 @@ snapshots:
'@jest/schemas': 30.0.5
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/yargs': 17.0.34
chalk: 4.1.2
- '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.9.3)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))':
+ '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.9.3)(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))':
dependencies:
glob: 10.5.0
magic-string: 0.30.21
react-docgen-typescript: 2.4.0(typescript@5.9.3)
- vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ vite: 7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
optionalDependencies:
typescript: 5.9.3
@@ -12998,6 +13274,18 @@ snapshots:
'@keyv/serialize@1.1.1': {}
+ '@kitajs/html@4.2.11':
+ dependencies:
+ csstype: 3.2.3
+
+ '@kitajs/ts-html-plugin@4.1.3(@kitajs/html@4.2.11)(typescript@5.9.3)':
+ dependencies:
+ '@kitajs/html': 4.2.11
+ chalk: 5.6.2
+ tslib: 2.8.1
+ typescript: 5.9.3
+ yargs: 18.0.0
+
'@kurkle/color@0.3.4': {}
'@levischuck/tiny-cbor@0.2.11': {}
@@ -13022,35 +13310,41 @@ snapshots:
- supports-color
optional: true
- '@mcaptcha/core-glue@0.1.0-alpha-5': {}
+ '@mcaptcha/core-glue@0.1.0-rc1': {}
- '@mcaptcha/vanilla-glue@0.1.0-alpha-3':
+ '@mcaptcha/vanilla-glue@0.1.0-rc2(bufferutil@4.0.9)(utf-8-validate@6.0.5)':
dependencies:
- '@mcaptcha/core-glue': 0.1.0-alpha-5
+ '@mcaptcha/core-glue': 0.1.0-rc1
+ jest-environment-jsdom: 29.7.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
+ transitivePeerDependencies:
+ - bufferutil
+ - canvas
+ - supports-color
+ - utf-8-validate
- '@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0)':
+ '@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.1)':
dependencies:
'@types/mdx': 2.0.13
'@types/react': 19.2.2
- react: 19.2.0
+ react: 19.2.1
- '@microsoft/api-extractor-model@7.32.0(@types/node@24.10.1)':
+ '@microsoft/api-extractor-model@7.32.2(@types/node@24.10.2)':
dependencies:
'@microsoft/tsdoc': 0.16.0
'@microsoft/tsdoc-config': 0.18.0
- '@rushstack/node-core-library': 5.18.0(@types/node@24.10.1)
+ '@rushstack/node-core-library': 5.19.1(@types/node@24.10.2)
transitivePeerDependencies:
- '@types/node'
- '@microsoft/api-extractor@7.55.0(@types/node@24.10.1)':
+ '@microsoft/api-extractor@7.55.2(@types/node@24.10.2)':
dependencies:
- '@microsoft/api-extractor-model': 7.32.0(@types/node@24.10.1)
+ '@microsoft/api-extractor-model': 7.32.2(@types/node@24.10.2)
'@microsoft/tsdoc': 0.16.0
'@microsoft/tsdoc-config': 0.18.0
- '@rushstack/node-core-library': 5.18.0(@types/node@24.10.1)
+ '@rushstack/node-core-library': 5.19.1(@types/node@24.10.2)
'@rushstack/rig-package': 0.6.0
- '@rushstack/terminal': 0.19.3(@types/node@24.10.1)
- '@rushstack/ts-command-line': 5.1.3(@types/node@24.10.1)
+ '@rushstack/terminal': 0.19.5(@types/node@24.10.2)
+ '@rushstack/ts-command-line': 5.1.5(@types/node@24.10.2)
diff: 8.0.2
lodash: 4.17.21
minimatch: 10.0.3
@@ -13072,15 +13366,15 @@ snapshots:
'@misskey-dev/browser-image-resizer@2024.1.0': {}
- '@misskey-dev/eslint-plugin@2.2.0(@eslint/compat@1.4.0(eslint@9.39.1))(@eslint/js@9.39.1)(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3))(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1))(eslint@9.39.1)(globals@16.5.0)':
+ '@misskey-dev/eslint-plugin@2.2.0(@eslint/compat@1.4.0(eslint@9.39.1))(@eslint/js@9.39.1)(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3))(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1))(eslint@9.39.1)(globals@16.5.0)':
dependencies:
'@eslint/compat': 1.4.0(eslint@9.39.1)
'@eslint/js': 9.39.1
'@stylistic/eslint-plugin': 5.5.0(eslint@9.39.1)
- '@typescript-eslint/eslint-plugin': 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
- '@typescript-eslint/parser': 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.49.0(eslint@9.39.1)(typescript@5.9.3)
eslint: 9.39.1
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)
globals: 16.5.0
'@misskey-dev/sharp-read-bmp@1.2.0':
@@ -13093,7 +13387,7 @@ snapshots:
dependencies:
cheerio: 1.1.2
escape-regexp: 0.0.1
- got: 14.6.4
+ got: 14.6.5
html-entities: 2.6.0
iconv-lite: 0.7.0
jschardet: 3.1.4
@@ -13126,48 +13420,48 @@ snapshots:
outvariant: 1.4.3
strict-event-emitter: 0.5.1
- '@napi-rs/canvas-android-arm64@0.1.82':
+ '@napi-rs/canvas-android-arm64@0.1.84':
optional: true
- '@napi-rs/canvas-darwin-arm64@0.1.82':
+ '@napi-rs/canvas-darwin-arm64@0.1.84':
optional: true
- '@napi-rs/canvas-darwin-x64@0.1.82':
+ '@napi-rs/canvas-darwin-x64@0.1.84':
optional: true
- '@napi-rs/canvas-linux-arm-gnueabihf@0.1.82':
+ '@napi-rs/canvas-linux-arm-gnueabihf@0.1.84':
optional: true
- '@napi-rs/canvas-linux-arm64-gnu@0.1.82':
+ '@napi-rs/canvas-linux-arm64-gnu@0.1.84':
optional: true
- '@napi-rs/canvas-linux-arm64-musl@0.1.82':
+ '@napi-rs/canvas-linux-arm64-musl@0.1.84':
optional: true
- '@napi-rs/canvas-linux-riscv64-gnu@0.1.82':
+ '@napi-rs/canvas-linux-riscv64-gnu@0.1.84':
optional: true
- '@napi-rs/canvas-linux-x64-gnu@0.1.82':
+ '@napi-rs/canvas-linux-x64-gnu@0.1.84':
optional: true
- '@napi-rs/canvas-linux-x64-musl@0.1.82':
+ '@napi-rs/canvas-linux-x64-musl@0.1.84':
optional: true
- '@napi-rs/canvas-win32-x64-msvc@0.1.82':
+ '@napi-rs/canvas-win32-x64-msvc@0.1.84':
optional: true
- '@napi-rs/canvas@0.1.82':
+ '@napi-rs/canvas@0.1.84':
optionalDependencies:
- '@napi-rs/canvas-android-arm64': 0.1.82
- '@napi-rs/canvas-darwin-arm64': 0.1.82
- '@napi-rs/canvas-darwin-x64': 0.1.82
- '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.82
- '@napi-rs/canvas-linux-arm64-gnu': 0.1.82
- '@napi-rs/canvas-linux-arm64-musl': 0.1.82
- '@napi-rs/canvas-linux-riscv64-gnu': 0.1.82
- '@napi-rs/canvas-linux-x64-gnu': 0.1.82
- '@napi-rs/canvas-linux-x64-musl': 0.1.82
- '@napi-rs/canvas-win32-x64-msvc': 0.1.82
+ '@napi-rs/canvas-android-arm64': 0.1.84
+ '@napi-rs/canvas-darwin-arm64': 0.1.84
+ '@napi-rs/canvas-darwin-x64': 0.1.84
+ '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.84
+ '@napi-rs/canvas-linux-arm64-gnu': 0.1.84
+ '@napi-rs/canvas-linux-arm64-musl': 0.1.84
+ '@napi-rs/canvas-linux-riscv64-gnu': 0.1.84
+ '@napi-rs/canvas-linux-x64-gnu': 0.1.84
+ '@napi-rs/canvas-linux-x64-musl': 0.1.84
+ '@napi-rs/canvas-win32-x64-msvc': 0.1.84
'@napi-rs/nice-android-arm-eabi@1.1.1':
optional: true
@@ -13330,11 +13624,7 @@ snapshots:
'@open-draft/until@2.1.0': {}
- '@opentelemetry/api-logs@0.204.0':
- dependencies:
- '@opentelemetry/api': 1.9.0
-
- '@opentelemetry/api-logs@0.57.2':
+ '@opentelemetry/api-logs@0.208.0':
dependencies:
'@opentelemetry/api': 1.9.0
@@ -13344,224 +13634,202 @@ snapshots:
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/semantic-conventions': 1.38.0
-
'@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/semantic-conventions': 1.38.0
- '@opentelemetry/instrumentation-amqplib@0.51.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-amqplib@0.55.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.38.0
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-connect@0.48.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-connect@0.52.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.38.0
'@types/connect': 3.4.38
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-dataloader@0.22.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-dataloader@0.26.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-express@0.53.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-express@0.57.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-fs@0.24.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-fs@0.28.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-generic-pool@0.48.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-generic-pool@0.52.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-graphql@0.52.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-graphql@0.56.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-hapi@0.51.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-hapi@0.55.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-http@0.204.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-http@0.208.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.38.0
forwarded-parse: 2.1.2
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-ioredis@0.52.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-ioredis@0.56.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
'@opentelemetry/redis-common': 0.38.2
- '@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-kafkajs@0.14.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-kafkajs@0.18.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-knex@0.49.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-knex@0.53.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-koa@0.52.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-koa@0.57.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-lru-memoizer@0.49.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-lru-memoizer@0.53.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-mongodb@0.57.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-mongodb@0.61.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.38.0
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-mongoose@0.51.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-mongoose@0.55.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.38.0
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-mysql2@0.51.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-mysql2@0.55.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.38.0
'@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-mysql@0.50.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-mysql@0.54.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.38.0
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
'@types/mysql': 2.15.27
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-pg@0.57.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-pg@0.61.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.38.0
'@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0)
- '@types/pg': 8.15.5
+ '@types/pg': 8.15.6
'@types/pg-pool': 2.0.6
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-redis@0.53.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-redis@0.57.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
'@opentelemetry/redis-common': 0.38.2
'@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-tedious@0.23.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-tedious@0.27.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.38.0
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
'@types/tedious': 4.0.14
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation-undici@0.15.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation-undici@0.19.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/semantic-conventions': 1.38.0
transitivePeerDependencies:
- supports-color
- '@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/instrumentation@0.208.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/api-logs': 0.204.0
- import-in-the-middle: 1.15.0
- require-in-the-middle: 7.5.2
- transitivePeerDependencies:
- - supports-color
-
- '@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/api-logs': 0.57.2
- '@types/shimmer': 1.2.0
- import-in-the-middle: 1.15.0
- require-in-the-middle: 7.5.2
- semver: 7.7.3
- shimmer: 1.2.1
+ '@opentelemetry/api-logs': 0.208.0
+ import-in-the-middle: 2.0.0
+ require-in-the-middle: 8.0.1
transitivePeerDependencies:
- supports-color
@@ -13759,10 +14027,10 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
- '@prisma/instrumentation@6.15.0(@opentelemetry/api@1.9.0)':
+ '@prisma/instrumentation@6.19.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
@@ -13902,7 +14170,7 @@ snapshots:
'@rtsao/scc@1.1.0': {}
- '@rushstack/node-core-library@5.18.0(@types/node@24.10.1)':
+ '@rushstack/node-core-library@5.19.1(@types/node@24.10.2)':
dependencies:
ajv: 8.13.0
ajv-draft-04: 1.0.0(ajv@8.13.0)
@@ -13913,28 +14181,28 @@ snapshots:
resolve: 1.22.11
semver: 7.5.4
optionalDependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
- '@rushstack/problem-matcher@0.1.1(@types/node@24.10.1)':
+ '@rushstack/problem-matcher@0.1.1(@types/node@24.10.2)':
optionalDependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@rushstack/rig-package@0.6.0':
dependencies:
resolve: 1.22.11
strip-json-comments: 3.1.1
- '@rushstack/terminal@0.19.3(@types/node@24.10.1)':
+ '@rushstack/terminal@0.19.5(@types/node@24.10.2)':
dependencies:
- '@rushstack/node-core-library': 5.18.0(@types/node@24.10.1)
- '@rushstack/problem-matcher': 0.1.1(@types/node@24.10.1)
+ '@rushstack/node-core-library': 5.19.1(@types/node@24.10.2)
+ '@rushstack/problem-matcher': 0.1.1(@types/node@24.10.2)
supports-color: 8.1.1
optionalDependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
- '@rushstack/ts-command-line@5.1.3(@types/node@24.10.1)':
+ '@rushstack/ts-command-line@5.1.5(@types/node@24.10.2)':
dependencies:
- '@rushstack/terminal': 0.19.3(@types/node@24.10.1)
+ '@rushstack/terminal': 0.19.5(@types/node@24.10.2)
'@types/argparse': 1.0.38
argparse: 1.0.10
string-argv: 0.3.2
@@ -13943,145 +14211,145 @@ snapshots:
'@sec-ant/readable-stream@0.4.1': {}
- '@sentry-internal/browser-utils@10.26.0':
+ '@sentry-internal/browser-utils@10.29.0':
dependencies:
- '@sentry/core': 10.26.0
+ '@sentry/core': 10.29.0
- '@sentry-internal/feedback@10.26.0':
+ '@sentry-internal/feedback@10.29.0':
dependencies:
- '@sentry/core': 10.26.0
+ '@sentry/core': 10.29.0
'@sentry-internal/node-cpu-profiler@2.2.0':
dependencies:
detect-libc: 2.1.2
node-abi: 3.85.0
- '@sentry-internal/replay-canvas@10.26.0':
+ '@sentry-internal/replay-canvas@10.29.0':
dependencies:
- '@sentry-internal/replay': 10.26.0
- '@sentry/core': 10.26.0
+ '@sentry-internal/replay': 10.29.0
+ '@sentry/core': 10.29.0
- '@sentry-internal/replay@10.26.0':
+ '@sentry-internal/replay@10.29.0':
dependencies:
- '@sentry-internal/browser-utils': 10.26.0
- '@sentry/core': 10.26.0
+ '@sentry-internal/browser-utils': 10.29.0
+ '@sentry/core': 10.29.0
- '@sentry/browser@10.26.0':
+ '@sentry/browser@10.29.0':
dependencies:
- '@sentry-internal/browser-utils': 10.26.0
- '@sentry-internal/feedback': 10.26.0
- '@sentry-internal/replay': 10.26.0
- '@sentry-internal/replay-canvas': 10.26.0
- '@sentry/core': 10.26.0
+ '@sentry-internal/browser-utils': 10.29.0
+ '@sentry-internal/feedback': 10.29.0
+ '@sentry-internal/replay': 10.29.0
+ '@sentry-internal/replay-canvas': 10.29.0
+ '@sentry/core': 10.29.0
- '@sentry/core@10.26.0': {}
+ '@sentry/core@10.29.0': {}
- '@sentry/node-core@10.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0)':
+ '@sentry/node-core@10.29.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.208.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0)':
dependencies:
'@apm-js-collab/tracing-hooks': 0.3.1
'@opentelemetry/api': 1.9.0
'@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
'@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.38.0
- '@sentry/core': 10.26.0
- '@sentry/opentelemetry': 10.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0)
- import-in-the-middle: 1.15.0
+ '@sentry/core': 10.29.0
+ '@sentry/opentelemetry': 10.29.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0)
+ import-in-the-middle: 2.0.0
transitivePeerDependencies:
- supports-color
- '@sentry/node@10.26.0':
+ '@sentry/node@10.29.0':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-amqplib': 0.51.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-connect': 0.48.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-dataloader': 0.22.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-express': 0.53.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-fs': 0.24.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-generic-pool': 0.48.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-graphql': 0.52.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-hapi': 0.51.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-http': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-ioredis': 0.52.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-kafkajs': 0.14.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-knex': 0.49.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-koa': 0.52.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-lru-memoizer': 0.49.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-mongodb': 0.57.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-mongoose': 0.51.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-mysql': 0.50.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-mysql2': 0.51.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-pg': 0.57.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-redis': 0.53.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-tedious': 0.23.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-undici': 0.15.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-amqplib': 0.55.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-connect': 0.52.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-dataloader': 0.26.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-express': 0.57.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-fs': 0.28.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-generic-pool': 0.52.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-graphql': 0.56.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-hapi': 0.55.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-http': 0.208.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-ioredis': 0.56.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-kafkajs': 0.18.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-knex': 0.53.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-koa': 0.57.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-lru-memoizer': 0.53.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-mongodb': 0.61.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-mongoose': 0.55.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-mysql': 0.54.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-mysql2': 0.55.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-pg': 0.61.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-redis': 0.57.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-tedious': 0.27.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/instrumentation-undici': 0.19.0(@opentelemetry/api@1.9.0)
'@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.38.0
- '@prisma/instrumentation': 6.15.0(@opentelemetry/api@1.9.0)
- '@sentry/core': 10.26.0
- '@sentry/node-core': 10.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0)
- '@sentry/opentelemetry': 10.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0)
- import-in-the-middle: 1.15.0
+ '@prisma/instrumentation': 6.19.0(@opentelemetry/api@1.9.0)
+ '@sentry/core': 10.29.0
+ '@sentry/node-core': 10.29.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.208.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0)
+ '@sentry/opentelemetry': 10.29.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0)
+ import-in-the-middle: 2.0.0
minimatch: 9.0.5
transitivePeerDependencies:
- supports-color
- '@sentry/opentelemetry@10.26.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0)':
+ '@sentry/opentelemetry@10.29.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.38.0
- '@sentry/core': 10.26.0
+ '@sentry/core': 10.29.0
- '@sentry/profiling-node@10.26.0':
+ '@sentry/profiling-node@10.29.0':
dependencies:
'@sentry-internal/node-cpu-profiler': 2.2.0
- '@sentry/core': 10.26.0
- '@sentry/node': 10.26.0
+ '@sentry/core': 10.29.0
+ '@sentry/node': 10.29.0
transitivePeerDependencies:
- supports-color
- '@sentry/vue@10.26.0(vue@3.5.24(typescript@5.9.3))':
+ '@sentry/vue@10.29.0(vue@3.5.25(typescript@5.9.3))':
dependencies:
- '@sentry/browser': 10.26.0
- '@sentry/core': 10.26.0
- vue: 3.5.24(typescript@5.9.3)
+ '@sentry/browser': 10.29.0
+ '@sentry/core': 10.29.0
+ vue: 3.5.25(typescript@5.9.3)
- '@shikijs/core@3.15.0':
+ '@shikijs/core@3.19.0':
dependencies:
- '@shikijs/types': 3.15.0
+ '@shikijs/types': 3.19.0
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
hast-util-to-html: 9.0.5
- '@shikijs/engine-javascript@3.15.0':
+ '@shikijs/engine-javascript@3.19.0':
dependencies:
- '@shikijs/types': 3.15.0
+ '@shikijs/types': 3.19.0
'@shikijs/vscode-textmate': 10.0.2
- oniguruma-to-es: 4.3.3
+ oniguruma-to-es: 4.3.4
- '@shikijs/engine-oniguruma@3.15.0':
+ '@shikijs/engine-oniguruma@3.19.0':
dependencies:
- '@shikijs/types': 3.15.0
+ '@shikijs/types': 3.19.0
'@shikijs/vscode-textmate': 10.0.2
- '@shikijs/langs@3.15.0':
+ '@shikijs/langs@3.19.0':
dependencies:
- '@shikijs/types': 3.15.0
+ '@shikijs/types': 3.19.0
- '@shikijs/themes@3.15.0':
+ '@shikijs/themes@3.19.0':
dependencies:
- '@shikijs/types': 3.15.0
+ '@shikijs/types': 3.19.0
- '@shikijs/types@3.15.0':
+ '@shikijs/types@3.19.0':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
@@ -14169,7 +14437,7 @@ snapshots:
'@smithy/util-middleware': 4.2.5
tslib: 2.8.1
- '@smithy/core@3.18.5':
+ '@smithy/core@3.18.7':
dependencies:
'@smithy/middleware-serde': 4.2.6
'@smithy/protocol-http': 5.3.5
@@ -14273,9 +14541,9 @@ snapshots:
'@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/middleware-endpoint@4.3.12':
+ '@smithy/middleware-endpoint@4.3.14':
dependencies:
- '@smithy/core': 3.18.5
+ '@smithy/core': 3.18.7
'@smithy/middleware-serde': 4.2.6
'@smithy/node-config-provider': 4.3.5
'@smithy/shared-ini-file-loader': 4.4.0
@@ -14284,12 +14552,12 @@ snapshots:
'@smithy/util-middleware': 4.2.5
tslib: 2.8.1
- '@smithy/middleware-retry@4.4.12':
+ '@smithy/middleware-retry@4.4.14':
dependencies:
'@smithy/node-config-provider': 4.3.5
'@smithy/protocol-http': 5.3.5
'@smithy/service-error-classification': 4.2.5
- '@smithy/smithy-client': 4.9.8
+ '@smithy/smithy-client': 4.9.10
'@smithy/types': 4.9.0
'@smithy/util-middleware': 4.2.5
'@smithy/util-retry': 4.2.5
@@ -14363,10 +14631,10 @@ snapshots:
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
- '@smithy/smithy-client@4.9.8':
+ '@smithy/smithy-client@4.9.10':
dependencies:
- '@smithy/core': 3.18.5
- '@smithy/middleware-endpoint': 4.3.12
+ '@smithy/core': 3.18.7
+ '@smithy/middleware-endpoint': 4.3.14
'@smithy/middleware-stack': 4.2.5
'@smithy/protocol-http': 5.3.5
'@smithy/types': 4.9.0
@@ -14411,20 +14679,20 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@smithy/util-defaults-mode-browser@4.3.11':
+ '@smithy/util-defaults-mode-browser@4.3.13':
dependencies:
'@smithy/property-provider': 4.2.5
- '@smithy/smithy-client': 4.9.8
+ '@smithy/smithy-client': 4.9.10
'@smithy/types': 4.9.0
tslib: 2.8.1
- '@smithy/util-defaults-mode-node@4.2.14':
+ '@smithy/util-defaults-mode-node@4.2.16':
dependencies:
'@smithy/config-resolver': 4.4.3
'@smithy/credential-provider-imds': 4.2.5
'@smithy/node-config-provider': 4.3.5
'@smithy/property-provider': 4.2.5
- '@smithy/smithy-client': 4.9.8
+ '@smithy/smithy-client': 4.9.10
'@smithy/types': 4.9.0
tslib: 2.8.1
@@ -14488,283 +14756,295 @@ snapshots:
'@standard-schema/spec@1.0.0': {}
- '@storybook/addon-actions@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/addon-actions@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
'@storybook/global': 5.0.0
'@types/uuid': 9.0.8
dequal: 2.0.3
polished: 4.3.1
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
uuid: 9.0.1
- '@storybook/addon-backgrounds@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/addon-backgrounds@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
'@storybook/global': 5.0.0
memoizerific: 1.11.3
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
ts-dedent: 2.2.0
- '@storybook/addon-controls@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/addon-controls@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
'@storybook/global': 5.0.0
dequal: 2.0.3
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
ts-dedent: 2.2.0
- '@storybook/addon-docs@8.6.14(@types/react@19.2.2)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/addon-docs@8.6.14(@types/react@19.2.2)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
- '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0)
- '@storybook/blocks': 8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- '@storybook/csf-plugin': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- '@storybook/react-dom-shim': 8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- react: 19.2.0
- react-dom: 19.2.0(react@19.2.0)
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.1)
+ '@storybook/blocks': 8.6.14(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ '@storybook/csf-plugin': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ '@storybook/react-dom-shim': 8.6.14(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ react: 19.2.1
+ react-dom: 19.2.1(react@19.2.1)
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
ts-dedent: 2.2.0
transitivePeerDependencies:
- '@types/react'
- '@storybook/addon-essentials@8.6.14(@types/react@19.2.2)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/addon-essentials@8.6.14(@types/react@19.2.2)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
- '@storybook/addon-actions': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- '@storybook/addon-backgrounds': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- '@storybook/addon-controls': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- '@storybook/addon-docs': 8.6.14(@types/react@19.2.2)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- '@storybook/addon-highlight': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- '@storybook/addon-measure': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- '@storybook/addon-outline': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- '@storybook/addon-toolbars': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- '@storybook/addon-viewport': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ '@storybook/addon-actions': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ '@storybook/addon-backgrounds': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ '@storybook/addon-controls': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ '@storybook/addon-docs': 8.6.14(@types/react@19.2.2)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ '@storybook/addon-highlight': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ '@storybook/addon-measure': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ '@storybook/addon-outline': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ '@storybook/addon-toolbars': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ '@storybook/addon-viewport': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
ts-dedent: 2.2.0
transitivePeerDependencies:
- '@types/react'
- '@storybook/addon-highlight@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/addon-highlight@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
'@storybook/global': 5.0.0
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
- '@storybook/addon-interactions@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/addon-interactions@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
'@storybook/global': 5.0.0
- '@storybook/instrumenter': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- '@storybook/test': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/instrumenter': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ '@storybook/test': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
polished: 4.3.1
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
ts-dedent: 2.2.0
- '@storybook/addon-links@10.0.8(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/addon-links@10.1.5(react@19.2.1)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
'@storybook/global': 5.0.0
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
optionalDependencies:
- react: 19.2.0
+ react: 19.2.1
- '@storybook/addon-mdx-gfm@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/addon-mdx-gfm@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
remark-gfm: 4.0.1
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
ts-dedent: 2.2.0
transitivePeerDependencies:
- supports-color
- '@storybook/addon-measure@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/addon-measure@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
'@storybook/global': 5.0.0
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
tiny-invariant: 1.3.3
- '@storybook/addon-outline@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/addon-outline@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
'@storybook/global': 5.0.0
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
ts-dedent: 2.2.0
- '@storybook/addon-storysource@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/addon-storysource@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
- '@storybook/source-loader': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/source-loader': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
estraverse: 5.3.0
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
tiny-invariant: 1.3.3
- '@storybook/addon-toolbars@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/addon-toolbars@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
- '@storybook/addon-viewport@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/addon-viewport@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
memoizerific: 1.11.3
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
- '@storybook/blocks@8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/blocks@8.6.14(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
- '@storybook/icons': 1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ '@storybook/icons': 1.6.0(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
ts-dedent: 2.2.0
optionalDependencies:
- react: 19.2.0
- react-dom: 19.2.0(react@19.2.0)
+ react: 19.2.1
+ react-dom: 19.2.1(react@19.2.1)
- '@storybook/builder-vite@10.0.8(esbuild@0.27.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))':
+ '@storybook/builder-vite@10.1.5(esbuild@0.27.1)(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(rollup@4.53.3)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))':
dependencies:
- '@storybook/csf-plugin': 10.0.8(esbuild@0.27.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ '@storybook/csf-plugin': 10.1.5(esbuild@0.27.1)(rollup@4.53.3)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))
+ '@vitest/mocker': 3.2.4(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
ts-dedent: 2.2.0
- vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ vite: 7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
transitivePeerDependencies:
- esbuild
+ - msw
- rollup
- webpack
- '@storybook/components@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/components@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
- '@storybook/core-events@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/core-events@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
- '@storybook/csf-plugin@10.0.8(esbuild@0.27.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))':
+ '@storybook/csf-plugin@10.1.5(esbuild@0.27.1)(rollup@4.53.3)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))':
dependencies:
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
unplugin: 2.3.10
optionalDependencies:
- esbuild: 0.27.0
+ esbuild: 0.27.1
rollup: 4.53.3
- vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ vite: 7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
- '@storybook/csf-plugin@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/csf-plugin@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
unplugin: 1.16.1
'@storybook/global@5.0.0': {}
- '@storybook/icons@1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ '@storybook/icons@1.6.0(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
dependencies:
- react: 19.2.0
- react-dom: 19.2.0(react@19.2.0)
+ react: 19.2.1
+ react-dom: 19.2.1(react@19.2.1)
- '@storybook/instrumenter@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/icons@2.0.1(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
+ dependencies:
+ react: 19.2.1
+ react-dom: 19.2.1(react@19.2.1)
+
+ '@storybook/instrumenter@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
'@storybook/global': 5.0.0
'@vitest/utils': 2.1.9
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
- '@storybook/manager-api@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/manager-api@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
- '@storybook/preview-api@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/preview-api@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
- '@storybook/react-dom-shim@10.0.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/react-dom-shim@10.1.5(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
- react: 19.2.0
- react-dom: 19.2.0(react@19.2.0)
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ react: 19.2.1
+ react-dom: 19.2.1(react@19.2.1)
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
- '@storybook/react-dom-shim@8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/react-dom-shim@8.6.14(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
- react: 19.2.0
- react-dom: 19.2.0(react@19.2.0)
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ react: 19.2.1
+ react-dom: 19.2.1(react@19.2.1)
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
- '@storybook/react-vite@10.0.8(esbuild@0.27.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(typescript@5.9.3)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))':
+ '@storybook/react-vite@10.1.5(esbuild@0.27.1)(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(rollup@4.53.3)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))(typescript@5.9.3)(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))':
dependencies:
- '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.9.3)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.9.3)(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))
'@rollup/pluginutils': 5.3.0(rollup@4.53.3)
- '@storybook/builder-vite': 10.0.8(esbuild@0.27.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@storybook/react': 10.0.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(typescript@5.9.3)
+ '@storybook/builder-vite': 10.1.5(esbuild@0.27.1)(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(rollup@4.53.3)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))
+ '@storybook/react': 10.1.5(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))(typescript@5.9.3)
empathic: 2.0.0
magic-string: 0.30.21
- react: 19.2.0
+ react: 19.2.1
react-docgen: 8.0.2
- react-dom: 19.2.0(react@19.2.0)
+ react-dom: 19.2.1(react@19.2.1)
resolve: 1.22.11
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
tsconfig-paths: 4.2.0
- vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ vite: 7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
transitivePeerDependencies:
- esbuild
+ - msw
- rollup
- supports-color
- typescript
- webpack
- '@storybook/react@10.0.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(typescript@5.9.3)':
+ '@storybook/react@10.1.5(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))(typescript@5.9.3)':
dependencies:
'@storybook/global': 5.0.0
- '@storybook/react-dom-shim': 10.0.8(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- react: 19.2.0
- react-dom: 19.2.0(react@19.2.0)
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ '@storybook/react-dom-shim': 10.1.5(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ react: 19.2.1
+ react-docgen: 8.0.2
+ react-dom: 19.2.1(react@19.2.1)
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
optionalDependencies:
typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
- '@storybook/source-loader@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/source-loader@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
es-toolkit: 1.42.0
estraverse: 5.3.0
- prettier: 3.6.2
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ prettier: 3.7.4
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
- '@storybook/test@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/test@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
'@storybook/global': 5.0.0
- '@storybook/instrumenter': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/instrumenter': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
'@testing-library/dom': 10.4.0
'@testing-library/jest-dom': 6.5.0
'@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0)
'@vitest/expect': 2.0.5
'@vitest/spy': 2.0.5
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
- '@storybook/theming@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/theming@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
- '@storybook/types@8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))':
+ '@storybook/types@8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))':
dependencies:
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
- '@storybook/vue3-vite@10.0.8(esbuild@0.27.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))(vue@3.5.24(typescript@5.9.3))':
+ '@storybook/vue3-vite@10.1.5(esbuild@0.27.1)(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(rollup@4.53.3)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))(vue@3.5.25(typescript@5.9.3))':
dependencies:
- '@storybook/builder-vite': 10.0.8(esbuild@0.27.0)(rollup@4.53.3)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@storybook/vue3': 10.0.8(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vue@3.5.24(typescript@5.9.3))
+ '@storybook/builder-vite': 10.1.5(esbuild@0.27.1)(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(rollup@4.53.3)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))
+ '@storybook/vue3': 10.1.5(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))(vue@3.5.25(typescript@5.9.3))
magic-string: 0.30.21
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
typescript: 5.9.3
- vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ vite: 7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
vue-component-meta: 2.2.12(typescript@5.9.3)
- vue-docgen-api: 4.79.2(vue@3.5.24(typescript@5.9.3))
+ vue-docgen-api: 4.79.2(vue@3.5.25(typescript@5.9.3))
transitivePeerDependencies:
- esbuild
+ - msw
- rollup
- vue
- webpack
- '@storybook/vue3@10.0.8(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))(vue@3.5.24(typescript@5.9.3))':
+ '@storybook/vue3@10.1.5(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))(vue@3.5.25(typescript@5.9.3))':
dependencies:
'@storybook/global': 5.0.0
- storybook: 10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
+ storybook: 10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5)
type-fest: 2.19.0
- vue: 3.5.24(typescript@5.9.3)
- vue-component-type-helpers: 3.1.5
+ vue: 3.5.25(typescript@5.9.3)
+ vue-component-type-helpers: 3.1.8
'@stylistic/eslint-plugin@5.5.0(eslint@9.39.1)':
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
- '@typescript-eslint/types': 8.47.0
+ '@typescript-eslint/types': 8.49.0
eslint: 9.39.1
eslint-visitor-keys: 4.2.1
espree: 10.4.0
estraverse: 5.3.0
picomatch: 4.0.3
- '@swc/cli@0.7.9(@swc/core@1.15.3)(chokidar@4.0.3)':
+ '@swc/cli@0.7.9(@swc/core@1.15.3)(chokidar@5.0.0)':
dependencies:
'@swc/core': 1.15.3
'@swc/counter': 0.1.3
@@ -14777,7 +15057,7 @@ snapshots:
source-map: 0.7.6
tinyglobby: 0.2.15
optionalDependencies:
- chokidar: 4.0.3
+ chokidar: 5.0.0
transitivePeerDependencies:
- bare-abort-controller
- react-native-b4a
@@ -15004,14 +15284,14 @@ snapshots:
dependencies:
'@testing-library/dom': 10.4.0
- '@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.24)(vue@3.5.24(typescript@5.9.3))':
+ '@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.25)(vue@3.5.25(typescript@5.9.3))':
dependencies:
'@babel/runtime': 7.28.4
'@testing-library/dom': 9.3.4
'@vue/test-utils': 2.4.6
- vue: 3.5.24(typescript@5.9.3)
+ vue: 3.5.25(typescript@5.9.3)
optionalDependencies:
- '@vue/compiler-sfc': 3.5.24
+ '@vue/compiler-sfc': 3.5.25
'@tokenizer/inflate@0.2.7':
dependencies:
@@ -15038,13 +15318,15 @@ snapshots:
'@tokenizer/token@0.3.0': {}
+ '@tootallnate/once@2.0.0': {}
+
'@tsd/typescript@5.9.3': {}
'@twemoji/parser@16.0.0': {}
'@types/accepts@1.3.7':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/archiver@7.0.0':
dependencies:
@@ -15078,7 +15360,7 @@ snapshots:
'@types/body-parser@1.19.6':
dependencies:
'@types/connect': 3.4.38
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/braces@3.0.5': {}
@@ -15097,7 +15379,7 @@ snapshots:
'@types/connect@3.4.38':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/content-disposition@0.5.9': {}
@@ -15130,7 +15412,7 @@ snapshots:
'@types/express-serve-static-core@5.1.0':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/qs': 6.14.0
'@types/range-parser': 1.2.7
'@types/send': 1.2.1
@@ -15143,11 +15425,11 @@ snapshots:
'@types/fluent-ffmpeg@2.1.28':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/graceful-fs@4.1.9':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/hammerjs@2.0.46': {}
@@ -15161,7 +15443,7 @@ snapshots:
'@types/http-link-header@1.0.7':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/istanbul-lib-coverage@2.0.6': {}
@@ -15180,14 +15462,18 @@ snapshots:
'@types/js-yaml@4.0.9': {}
+ '@types/jsdom@20.0.1':
+ dependencies:
+ '@types/node': 24.10.2
+ '@types/tough-cookie': 4.0.5
+ parse5: 7.3.0
+
'@types/json-schema@7.0.15': {}
'@types/json5@0.0.29': {}
'@types/jsonld@1.5.15': {}
- '@types/jsrsasign@10.5.15': {}
-
'@types/long@4.0.2': {}
'@types/matter-js@0.20.2': {}
@@ -15214,25 +15500,25 @@ snapshots:
'@types/mysql@2.15.27':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/node-fetch@2.6.13':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
form-data: 4.0.5
'@types/node@20.19.25':
dependencies:
undici-types: 6.21.0
- '@types/node@24.10.1':
+ '@types/node@24.10.2':
dependencies:
undici-types: 7.16.0
'@types/nodemailer@7.0.4':
dependencies:
'@aws-sdk/client-sesv2': 3.938.0
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
transitivePeerDependencies:
- aws-crt
@@ -15245,11 +15531,7 @@ snapshots:
'@types/oauth2orize@1.11.5':
dependencies:
'@types/express': 5.0.4
- '@types/node': 24.10.1
-
- '@types/oauth@0.9.6':
- dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/offscreencanvas@2019.3.0': {}
@@ -15259,25 +15541,17 @@ snapshots:
dependencies:
'@types/pg': 8.15.6
- '@types/pg@8.15.5':
- dependencies:
- '@types/node': 24.10.1
- pg-protocol: 1.10.3
- pg-types: 2.2.0
-
'@types/pg@8.15.6':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
pg-protocol: 1.10.3
pg-types: 2.2.0
- '@types/pug@2.0.10': {}
-
'@types/punycode@2.1.4': {}
'@types/qrcode@1.5.6':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/qs@6.14.0': {}
@@ -15293,7 +15567,7 @@ snapshots:
'@types/readdir-glob@1.1.5':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/redis-info@3.0.3': {}
@@ -15314,23 +15588,21 @@ snapshots:
'@types/send@0.17.6':
dependencies:
'@types/mime': 1.3.5
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/send@1.2.1':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/serve-static@1.15.10':
dependencies:
'@types/http-errors': 2.0.5
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/send': 0.17.6
'@types/serviceworker@0.0.74': {}
- '@types/shimmer@1.2.0': {}
-
- '@types/simple-oauth2@5.0.7': {}
+ '@types/simple-oauth2@5.0.8': {}
'@types/sinon@17.0.4':
dependencies:
@@ -15350,7 +15622,7 @@ snapshots:
dependencies:
'@types/cookiejar': 2.1.5
'@types/methods': 1.1.4
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
form-data: 4.0.5
'@types/supertest@6.0.3':
@@ -15360,7 +15632,7 @@ snapshots:
'@types/tedious@4.0.14':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/throttle-debounce@5.0.2': {}
@@ -15368,27 +15640,29 @@ snapshots:
'@types/tmp@0.2.6': {}
+ '@types/tough-cookie@4.0.5': {}
+
'@types/unist@3.0.3': {}
'@types/uuid@9.0.8': {}
'@types/vary@1.1.3':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/wawoff2@1.0.2':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/web-push@3.6.4':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/whatwg-mimetype@3.0.2': {}
'@types/ws@8.18.1':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
'@types/yargs-parser@21.0.3': {}
@@ -15398,19 +15672,18 @@ snapshots:
'@types/yauzl@2.10.3':
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
optional: true
- '@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.47.0(eslint@9.39.1)(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.47.0
- '@typescript-eslint/type-utils': 8.47.0(eslint@9.39.1)(typescript@5.9.3)
- '@typescript-eslint/utils': 8.47.0(eslint@9.39.1)(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.47.0
+ '@typescript-eslint/parser': 8.49.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.49.0
eslint: 9.39.1
- graphemer: 1.4.0
ignore: 7.0.5
natural-compare: 1.4.0
ts-api-utils: 2.1.0(typescript@5.9.3)
@@ -15418,41 +15691,41 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.47.0
- '@typescript-eslint/types': 8.47.0
- '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.47.0
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.49.0
debug: 4.4.3(supports-color@10.2.2)
eslint: 9.39.1
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.47.0(typescript@5.9.3)':
+ '@typescript-eslint/project-service@8.49.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.47.0
+ '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
debug: 4.4.3(supports-color@10.2.2)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.47.0':
+ '@typescript-eslint/scope-manager@8.49.0':
dependencies:
- '@typescript-eslint/types': 8.47.0
- '@typescript-eslint/visitor-keys': 8.47.0
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/visitor-keys': 8.49.0
- '@typescript-eslint/tsconfig-utils@8.47.0(typescript@5.9.3)':
+ '@typescript-eslint/tsconfig-utils@8.49.0(typescript@5.9.3)':
dependencies:
typescript: 5.9.3
- '@typescript-eslint/type-utils@8.47.0(eslint@9.39.1)(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.49.0(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.47.0
- '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1)(typescript@5.9.3)
debug: 4.4.3(supports-color@10.2.2)
eslint: 9.39.1
ts-api-utils: 2.1.0(typescript@5.9.3)
@@ -15460,79 +15733,92 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.47.0': {}
+ '@typescript-eslint/types@8.49.0': {}
- '@typescript-eslint/typescript-estree@8.47.0(typescript@5.9.3)':
+ '@typescript-eslint/typescript-estree@8.49.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/project-service': 8.47.0(typescript@5.9.3)
- '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.47.0
- '@typescript-eslint/visitor-keys': 8.47.0
+ '@typescript-eslint/project-service': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/visitor-keys': 8.49.0
debug: 4.4.3(supports-color@10.2.2)
- fast-glob: 3.3.3
- is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.7.3
+ tinyglobby: 0.2.15
ts-api-utils: 2.1.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.47.0(eslint@9.39.1)(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.49.0(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
- '@typescript-eslint/scope-manager': 8.47.0
- '@typescript-eslint/types': 8.47.0
- '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
eslint: 9.39.1
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.47.0':
+ '@typescript-eslint/visitor-keys@8.49.0':
dependencies:
- '@typescript-eslint/types': 8.47.0
+ '@typescript-eslint/types': 8.49.0
eslint-visitor-keys: 4.2.1
+ '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251206.1':
+ optional: true
+
+ '@typescript/native-preview-darwin-x64@7.0.0-dev.20251206.1':
+ optional: true
+
+ '@typescript/native-preview-linux-arm64@7.0.0-dev.20251206.1':
+ optional: true
+
+ '@typescript/native-preview-linux-arm@7.0.0-dev.20251206.1':
+ optional: true
+
+ '@typescript/native-preview-linux-x64@7.0.0-dev.20251206.1':
+ optional: true
+
+ '@typescript/native-preview-win32-arm64@7.0.0-dev.20251206.1':
+ optional: true
+
+ '@typescript/native-preview-win32-x64@7.0.0-dev.20251206.1':
+ optional: true
+
+ '@typescript/native-preview@7.0.0-dev.20251206.1':
+ optionalDependencies:
+ '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20251206.1
+ '@typescript/native-preview-darwin-x64': 7.0.0-dev.20251206.1
+ '@typescript/native-preview-linux-arm': 7.0.0-dev.20251206.1
+ '@typescript/native-preview-linux-arm64': 7.0.0-dev.20251206.1
+ '@typescript/native-preview-linux-x64': 7.0.0-dev.20251206.1
+ '@typescript/native-preview-win32-arm64': 7.0.0-dev.20251206.1
+ '@typescript/native-preview-win32-x64': 7.0.0-dev.20251206.1
+
'@ungap/structured-clone@1.3.0': {}
- '@vitejs/plugin-vue@6.0.2(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))(vue@3.5.24(typescript@5.9.3))':
+ '@vitejs/plugin-vue@6.0.2(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))(vue@3.5.25(typescript@5.9.3))':
dependencies:
'@rolldown/pluginutils': 1.0.0-beta.50
- vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
- vue: 3.5.24(typescript@5.9.3)
+ vite: 7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
+ vue: 3.5.25(typescript@5.9.3)
- '@vitest/coverage-v8@4.0.10(vitest@4.0.10(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))':
+ '@vitest/coverage-v8@4.0.15(vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.2)(happy-dom@20.0.11)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))':
dependencies:
'@bcoe/v8-coverage': 1.0.2
- '@vitest/utils': 4.0.10
+ '@vitest/utils': 4.0.15
ast-v8-to-istanbul: 0.3.8
- debug: 4.4.3(supports-color@10.2.2)
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
istanbul-lib-source-maps: 5.0.6
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.10(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
- transitivePeerDependencies:
- - supports-color
-
- '@vitest/coverage-v8@4.0.13(vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))':
- dependencies:
- '@bcoe/v8-coverage': 1.0.2
- '@vitest/utils': 4.0.13
- ast-v8-to-istanbul: 0.3.8
- debug: 4.4.3(supports-color@10.2.2)
- istanbul-lib-coverage: 3.2.2
- istanbul-lib-report: 3.0.1
- istanbul-lib-source-maps: 5.0.6
- istanbul-reports: 3.2.0
- magicast: 0.5.1
- std-env: 3.10.0
- tinyrainbow: 3.0.3
- vitest: 4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.2)(happy-dom@20.0.11)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
transitivePeerDependencies:
- supports-color
@@ -15551,50 +15837,32 @@ snapshots:
chai: 5.3.3
tinyrainbow: 2.0.0
- '@vitest/expect@4.0.10':
+ '@vitest/expect@4.0.15':
dependencies:
'@standard-schema/spec': 1.0.0
'@types/chai': 5.2.3
- '@vitest/spy': 4.0.10
- '@vitest/utils': 4.0.10
+ '@vitest/spy': 4.0.15
+ '@vitest/utils': 4.0.15
chai: 6.2.1
tinyrainbow: 3.0.3
- '@vitest/expect@4.0.13':
- dependencies:
- '@standard-schema/spec': 1.0.0
- '@types/chai': 5.2.3
- '@vitest/spy': 4.0.13
- '@vitest/utils': 4.0.13
- chai: 6.2.1
- tinyrainbow: 3.0.3
-
- '@vitest/mocker@3.2.4(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))':
+ '@vitest/mocker@3.2.4(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))':
dependencies:
'@vitest/spy': 3.2.4
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- msw: 2.12.2(@types/node@24.10.1)(typescript@5.9.3)
- vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ msw: 2.12.4(@types/node@24.10.2)(typescript@5.9.3)
+ vite: 7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
- '@vitest/mocker@4.0.10(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))':
+ '@vitest/mocker@4.0.15(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))':
dependencies:
- '@vitest/spy': 4.0.10
+ '@vitest/spy': 4.0.15
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- msw: 2.12.2(@types/node@24.10.1)(typescript@5.9.3)
- vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
-
- '@vitest/mocker@4.0.13(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))':
- dependencies:
- '@vitest/spy': 4.0.13
- estree-walker: 3.0.3
- magic-string: 0.30.21
- optionalDependencies:
- msw: 2.12.2(@types/node@24.10.1)(typescript@5.9.3)
- vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ msw: 2.12.4(@types/node@24.10.2)(typescript@5.9.3)
+ vite: 7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
'@vitest/pretty-format@2.0.5':
dependencies:
@@ -15608,33 +15876,18 @@ snapshots:
dependencies:
tinyrainbow: 2.0.0
- '@vitest/pretty-format@4.0.10':
+ '@vitest/pretty-format@4.0.15':
dependencies:
tinyrainbow: 3.0.3
- '@vitest/pretty-format@4.0.13':
+ '@vitest/runner@4.0.15':
dependencies:
- tinyrainbow: 3.0.3
-
- '@vitest/runner@4.0.10':
- dependencies:
- '@vitest/utils': 4.0.10
+ '@vitest/utils': 4.0.15
pathe: 2.0.3
- '@vitest/runner@4.0.13':
+ '@vitest/snapshot@4.0.15':
dependencies:
- '@vitest/utils': 4.0.13
- pathe: 2.0.3
-
- '@vitest/snapshot@4.0.10':
- dependencies:
- '@vitest/pretty-format': 4.0.10
- magic-string: 0.30.21
- pathe: 2.0.3
-
- '@vitest/snapshot@4.0.13':
- dependencies:
- '@vitest/pretty-format': 4.0.13
+ '@vitest/pretty-format': 4.0.15
magic-string: 0.30.21
pathe: 2.0.3
@@ -15646,9 +15899,7 @@ snapshots:
dependencies:
tinyspy: 4.0.4
- '@vitest/spy@4.0.10': {}
-
- '@vitest/spy@4.0.13': {}
+ '@vitest/spy@4.0.15': {}
'@vitest/utils@2.0.5':
dependencies:
@@ -15669,27 +15920,22 @@ snapshots:
loupe: 3.2.1
tinyrainbow: 2.0.0
- '@vitest/utils@4.0.10':
+ '@vitest/utils@4.0.15':
dependencies:
- '@vitest/pretty-format': 4.0.10
- tinyrainbow: 3.0.3
-
- '@vitest/utils@4.0.13':
- dependencies:
- '@vitest/pretty-format': 4.0.13
+ '@vitest/pretty-format': 4.0.15
tinyrainbow: 3.0.3
'@volar/language-core@2.4.15':
dependencies:
'@volar/source-map': 2.4.15
- '@volar/language-core@2.4.23':
+ '@volar/language-core@2.4.26':
dependencies:
- '@volar/source-map': 2.4.23
+ '@volar/source-map': 2.4.26
'@volar/source-map@2.4.15': {}
- '@volar/source-map@2.4.23': {}
+ '@volar/source-map@2.4.26': {}
'@volar/typescript@2.4.15':
dependencies:
@@ -15697,41 +15943,41 @@ snapshots:
path-browserify: 1.0.1
vscode-uri: 3.1.0
- '@volar/typescript@2.4.23':
+ '@volar/typescript@2.4.26':
dependencies:
- '@volar/language-core': 2.4.23
+ '@volar/language-core': 2.4.26
path-browserify: 1.0.1
vscode-uri: 3.1.0
- '@vue/compiler-core@3.5.24':
+ '@vue/compiler-core@3.5.25':
dependencies:
'@babel/parser': 7.28.5
- '@vue/shared': 3.5.24
+ '@vue/shared': 3.5.25
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.1
- '@vue/compiler-dom@3.5.24':
+ '@vue/compiler-dom@3.5.25':
dependencies:
- '@vue/compiler-core': 3.5.24
- '@vue/shared': 3.5.24
+ '@vue/compiler-core': 3.5.25
+ '@vue/shared': 3.5.25
- '@vue/compiler-sfc@3.5.24':
+ '@vue/compiler-sfc@3.5.25':
dependencies:
'@babel/parser': 7.28.5
- '@vue/compiler-core': 3.5.24
- '@vue/compiler-dom': 3.5.24
- '@vue/compiler-ssr': 3.5.24
- '@vue/shared': 3.5.24
+ '@vue/compiler-core': 3.5.25
+ '@vue/compiler-dom': 3.5.25
+ '@vue/compiler-ssr': 3.5.25
+ '@vue/shared': 3.5.25
estree-walker: 2.0.2
magic-string: 0.30.21
postcss: 8.5.6
source-map-js: 1.2.1
- '@vue/compiler-ssr@3.5.24':
+ '@vue/compiler-ssr@3.5.25':
dependencies:
- '@vue/compiler-dom': 3.5.24
- '@vue/shared': 3.5.24
+ '@vue/compiler-dom': 3.5.25
+ '@vue/shared': 3.5.25
'@vue/compiler-vue2@2.7.16':
dependencies:
@@ -15741,9 +15987,9 @@ snapshots:
'@vue/language-core@2.2.12(typescript@5.9.3)':
dependencies:
'@volar/language-core': 2.4.15
- '@vue/compiler-dom': 3.5.24
+ '@vue/compiler-dom': 3.5.25
'@vue/compiler-vue2': 2.7.16
- '@vue/shared': 3.5.24
+ '@vue/shared': 3.5.25
alien-signals: 1.0.13
minimatch: 9.0.5
muggle-string: 0.4.1
@@ -15751,11 +15997,11 @@ snapshots:
optionalDependencies:
typescript: 5.9.3
- '@vue/language-core@3.1.5(typescript@5.9.3)':
+ '@vue/language-core@3.1.8(typescript@5.9.3)':
dependencies:
- '@volar/language-core': 2.4.23
- '@vue/compiler-dom': 3.5.24
- '@vue/shared': 3.5.24
+ '@volar/language-core': 2.4.26
+ '@vue/compiler-dom': 3.5.25
+ '@vue/shared': 3.5.25
alien-signals: 3.1.0
muggle-string: 0.4.1
path-browserify: 1.0.1
@@ -15763,29 +16009,29 @@ snapshots:
optionalDependencies:
typescript: 5.9.3
- '@vue/reactivity@3.5.24':
+ '@vue/reactivity@3.5.25':
dependencies:
- '@vue/shared': 3.5.24
+ '@vue/shared': 3.5.25
- '@vue/runtime-core@3.5.24':
+ '@vue/runtime-core@3.5.25':
dependencies:
- '@vue/reactivity': 3.5.24
- '@vue/shared': 3.5.24
+ '@vue/reactivity': 3.5.25
+ '@vue/shared': 3.5.25
- '@vue/runtime-dom@3.5.24':
+ '@vue/runtime-dom@3.5.25':
dependencies:
- '@vue/reactivity': 3.5.24
- '@vue/runtime-core': 3.5.24
- '@vue/shared': 3.5.24
+ '@vue/reactivity': 3.5.25
+ '@vue/runtime-core': 3.5.25
+ '@vue/shared': 3.5.25
csstype: 3.2.3
- '@vue/server-renderer@3.5.24(vue@3.5.24(typescript@5.9.3))':
+ '@vue/server-renderer@3.5.25(vue@3.5.25(typescript@5.9.3))':
dependencies:
- '@vue/compiler-ssr': 3.5.24
- '@vue/shared': 3.5.24
- vue: 3.5.24(typescript@5.9.3)
+ '@vue/compiler-ssr': 3.5.25
+ '@vue/shared': 3.5.25
+ vue: 3.5.25(typescript@5.9.3)
- '@vue/shared@3.5.24': {}
+ '@vue/shared@3.5.25': {}
'@vue/test-utils@2.4.6':
dependencies:
@@ -15892,6 +16138,8 @@ snapshots:
'@xmldom/xmldom@0.9.8':
optional: true
+ abab@2.0.6: {}
+
abbrev@1.1.1:
optional: true
@@ -15915,6 +16163,11 @@ snapshots:
mime-types: 3.0.2
negotiator: 1.0.0
+ acorn-globals@7.0.1:
+ dependencies:
+ acorn: 8.15.0
+ acorn-walk: 8.3.4
+
acorn-import-attributes@1.9.5(acorn@8.15.0):
dependencies:
acorn: 8.15.0
@@ -15923,6 +16176,10 @@ snapshots:
dependencies:
acorn: 8.15.0
+ acorn-walk@8.3.4:
+ dependencies:
+ acorn: 8.15.0
+
acorn@7.4.1: {}
acorn@8.15.0: {}
@@ -15940,7 +16197,6 @@ snapshots:
debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
- optional: true
agent-base@7.1.4: {}
@@ -15949,7 +16205,7 @@ snapshots:
clean-stack: 2.2.0
indent-string: 4.0.0
- aiscript-vscode@https://codeload.github.com/aiscript-dev/aiscript-vscode/tar.gz/c3cde89e79a41d93540cf8a48cd619c3f2dcb1b7:
+ aiscript-vscode@https://codeload.github.com/aiscript-dev/aiscript-vscode/tar.gz/1dc7f60cda78d030dadfc518a33c472202b2ef67:
dependencies:
vscode-languageclient: 9.0.1
@@ -16032,7 +16288,7 @@ snapshots:
ansi-styles@6.2.3: {}
- ansis@3.17.0: {}
+ ansis@4.2.0: {}
anymatch@3.1.3:
dependencies:
@@ -16359,13 +16615,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- body-parser@2.2.0:
+ body-parser@2.2.1:
dependencies:
bytes: 3.1.2
content-type: 1.0.5
debug: 4.4.3(supports-color@10.2.2)
http-errors: 2.0.0
- iconv-lite: 0.6.3
+ iconv-lite: 0.7.0
on-finished: 2.4.1
qs: 6.14.0
raw-body: 3.0.1
@@ -16437,7 +16693,7 @@ snapshots:
node-gyp-build: 4.8.4
optional: true
- bullmq@5.64.1:
+ bullmq@5.65.1:
dependencies:
cron-parser: 4.9.0
ioredis: 5.8.2
@@ -16652,9 +16908,9 @@ snapshots:
undici: 7.16.0
whatwg-mimetype: 4.0.0
- chokidar@4.0.3:
+ chokidar@5.0.0:
dependencies:
- readdirp: 4.1.2
+ readdirp: 5.0.0
chownr@2.0.0:
optional: true
@@ -16706,6 +16962,12 @@ snapshots:
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
+ cliui@9.0.1:
+ dependencies:
+ string-width: 7.2.0
+ strip-ansi: 7.1.2
+ wrap-ansi: 9.0.2
+
cluster-key-slot@1.1.2: {}
co@4.6.0: {}
@@ -16842,13 +17104,13 @@ snapshots:
crc-32: 1.2.2
readable-stream: 4.7.0
- create-jest@29.7.0(@types/node@24.10.1):
+ create-jest@29.7.0(@types/node@24.10.2):
dependencies:
'@jest/types': 29.6.3
chalk: 4.1.2
exit: 0.1.2
graceful-fs: 4.2.11
- jest-config: 29.7.0(@types/node@24.10.1)
+ jest-config: 29.7.0(@types/node@24.10.2)
jest-util: 29.7.0
prompts: 2.4.2
transitivePeerDependencies:
@@ -16953,6 +17215,14 @@ snapshots:
dependencies:
css-tree: 2.2.1
+ cssom@0.3.8: {}
+
+ cssom@0.5.0: {}
+
+ cssstyle@2.3.0:
+ dependencies:
+ cssom: 0.3.8
+
cssstyle@5.3.3:
dependencies:
'@asamuzakjp/css-color': 4.0.5
@@ -16962,53 +17232,7 @@ snapshots:
csstype@3.2.3: {}
- cypress@15.6.0:
- dependencies:
- '@cypress/request': 3.0.9
- '@cypress/xvfb': 1.2.4(supports-color@8.1.1)
- '@types/sinonjs__fake-timers': 8.1.1
- '@types/sizzle': 2.3.10
- '@types/tmp': 0.2.6
- arch: 2.2.0
- blob-util: 2.0.2
- bluebird: 3.7.2
- buffer: 5.7.1
- cachedir: 2.4.0
- chalk: 4.1.2
- ci-info: 4.3.1
- cli-cursor: 3.1.0
- cli-table3: 0.6.1
- commander: 6.2.1
- common-tags: 1.8.2
- dayjs: 1.11.19
- debug: 4.4.3(supports-color@8.1.1)
- enquirer: 2.4.1
- eventemitter2: 6.4.7
- execa: 4.1.0
- executable: 4.1.1
- extract-zip: 2.0.1(supports-color@8.1.1)
- figures: 3.2.0
- fs-extra: 9.1.0
- hasha: 5.2.2
- is-installed-globally: 0.4.0
- listr2: 3.14.0(enquirer@2.4.1)
- lodash: 4.17.21
- log-symbols: 4.1.0
- minimist: 1.2.8
- ospath: 1.2.2
- pretty-bytes: 5.6.0
- process: 0.11.10
- proxy-from-env: 1.0.0
- request-progress: 3.0.0
- semver: 7.7.3
- supports-color: 8.1.1
- systeminformation: 5.27.7
- tmp: 0.2.5
- tree-kill: 1.2.2
- untildify: 4.0.0
- yauzl: 2.10.0
-
- cypress@15.7.0:
+ cypress@15.7.1:
dependencies:
'@cypress/request': 3.0.9
'@cypress/xvfb': 1.2.4(supports-color@8.1.1)
@@ -17059,6 +17283,12 @@ snapshots:
data-uri-to-buffer@4.0.1: {}
+ data-urls@3.0.2:
+ dependencies:
+ abab: 2.0.6
+ whatwg-mimetype: 3.0.0
+ whatwg-url: 11.0.0
+
data-urls@6.0.0:
dependencies:
whatwg-mimetype: 4.0.0
@@ -17124,8 +17354,7 @@ snapshots:
decamelize@1.2.0: {}
- decimal.js@10.6.0:
- optional: true
+ decimal.js@10.6.0: {}
decode-bmp@0.2.1:
dependencies:
@@ -17279,6 +17508,10 @@ snapshots:
domelementtype@2.3.0: {}
+ domexception@4.0.0:
+ dependencies:
+ webidl-conversions: 7.0.0
+
domhandler@3.3.0:
dependencies:
domelementtype: 2.3.0
@@ -17337,6 +17570,8 @@ snapshots:
emittery@0.13.1: {}
+ emoji-regex@10.6.0: {}
+
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}
@@ -17517,34 +17752,34 @@ snapshots:
'@esbuild/win32-ia32': 0.25.11
'@esbuild/win32-x64': 0.25.11
- esbuild@0.27.0:
+ esbuild@0.27.1:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.27.0
- '@esbuild/android-arm': 0.27.0
- '@esbuild/android-arm64': 0.27.0
- '@esbuild/android-x64': 0.27.0
- '@esbuild/darwin-arm64': 0.27.0
- '@esbuild/darwin-x64': 0.27.0
- '@esbuild/freebsd-arm64': 0.27.0
- '@esbuild/freebsd-x64': 0.27.0
- '@esbuild/linux-arm': 0.27.0
- '@esbuild/linux-arm64': 0.27.0
- '@esbuild/linux-ia32': 0.27.0
- '@esbuild/linux-loong64': 0.27.0
- '@esbuild/linux-mips64el': 0.27.0
- '@esbuild/linux-ppc64': 0.27.0
- '@esbuild/linux-riscv64': 0.27.0
- '@esbuild/linux-s390x': 0.27.0
- '@esbuild/linux-x64': 0.27.0
- '@esbuild/netbsd-arm64': 0.27.0
- '@esbuild/netbsd-x64': 0.27.0
- '@esbuild/openbsd-arm64': 0.27.0
- '@esbuild/openbsd-x64': 0.27.0
- '@esbuild/openharmony-arm64': 0.27.0
- '@esbuild/sunos-x64': 0.27.0
- '@esbuild/win32-arm64': 0.27.0
- '@esbuild/win32-ia32': 0.27.0
- '@esbuild/win32-x64': 0.27.0
+ '@esbuild/aix-ppc64': 0.27.1
+ '@esbuild/android-arm': 0.27.1
+ '@esbuild/android-arm64': 0.27.1
+ '@esbuild/android-x64': 0.27.1
+ '@esbuild/darwin-arm64': 0.27.1
+ '@esbuild/darwin-x64': 0.27.1
+ '@esbuild/freebsd-arm64': 0.27.1
+ '@esbuild/freebsd-x64': 0.27.1
+ '@esbuild/linux-arm': 0.27.1
+ '@esbuild/linux-arm64': 0.27.1
+ '@esbuild/linux-ia32': 0.27.1
+ '@esbuild/linux-loong64': 0.27.1
+ '@esbuild/linux-mips64el': 0.27.1
+ '@esbuild/linux-ppc64': 0.27.1
+ '@esbuild/linux-riscv64': 0.27.1
+ '@esbuild/linux-s390x': 0.27.1
+ '@esbuild/linux-x64': 0.27.1
+ '@esbuild/netbsd-arm64': 0.27.1
+ '@esbuild/netbsd-x64': 0.27.1
+ '@esbuild/openbsd-arm64': 0.27.1
+ '@esbuild/openbsd-x64': 0.27.1
+ '@esbuild/openharmony-arm64': 0.27.1
+ '@esbuild/sunos-x64': 0.27.1
+ '@esbuild/win32-arm64': 0.27.1
+ '@esbuild/win32-ia32': 0.27.1
+ '@esbuild/win32-x64': 0.27.1
escalade@3.2.0: {}
@@ -17562,6 +17797,14 @@ snapshots:
escape-string-regexp@5.0.0: {}
+ escodegen@2.1.0:
+ dependencies:
+ esprima: 4.0.1
+ estraverse: 5.3.0
+ esutils: 2.0.3
+ optionalDependencies:
+ source-map: 0.6.1
+
eslint-formatter-pretty@4.1.0:
dependencies:
'@types/eslint': 7.29.0
@@ -17581,17 +17824,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1):
dependencies:
debug: 3.2.7(supports-color@8.1.1)
optionalDependencies:
- '@typescript-eslint/parser': 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.49.0(eslint@9.39.1)(typescript@5.9.3)
eslint: 9.39.1
eslint-import-resolver-node: 0.3.9
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -17602,7 +17845,7 @@ snapshots:
doctrine: 2.1.0
eslint: 9.39.1
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1)
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1)
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -17614,13 +17857,13 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.49.0(eslint@9.39.1)(typescript@5.9.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-vue@10.6.0(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/parser@8.47.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(vue-eslint-parser@10.2.0(eslint@9.39.1)):
+ eslint-plugin-vue@10.6.2(@stylistic/eslint-plugin@5.5.0(eslint@9.39.1))(@typescript-eslint/parser@8.49.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(vue-eslint-parser@10.2.0(eslint@9.39.1)):
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
eslint: 9.39.1
@@ -17632,7 +17875,7 @@ snapshots:
xml-name-validator: 4.0.0
optionalDependencies:
'@stylistic/eslint-plugin': 5.5.0(eslint@9.39.1)
- '@typescript-eslint/parser': 8.47.0(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.49.0(eslint@9.39.1)(typescript@5.9.3)
eslint-rule-docs@1.1.235: {}
@@ -17776,7 +18019,7 @@ snapshots:
signal-exit: 3.0.7
strip-final-newline: 3.0.0
- execa@9.6.0:
+ execa@9.6.1:
dependencies:
'@sindresorhus/merge-streams': 4.0.0
cross-spawn: 7.0.6
@@ -17795,7 +18038,7 @@ snapshots:
dependencies:
pify: 2.3.0
- exifreader@4.32.0:
+ exifreader@4.33.1:
optionalDependencies:
'@xmldom/xmldom': 0.9.8
@@ -17852,7 +18095,7 @@ snapshots:
express@5.1.0:
dependencies:
accepts: 2.0.0
- body-parser: 2.2.0
+ body-parser: 2.2.1
content-disposition: 1.0.1
content-type: 1.0.5
cookie: 0.7.1
@@ -18092,7 +18335,7 @@ snapshots:
fkill@10.0.1:
dependencies:
- execa: 9.6.0
+ execa: 9.6.1
pid-port: 2.0.0
process-exists: 5.0.0
ps-list: 9.0.0
@@ -18222,6 +18465,8 @@ snapshots:
get-caller-file@2.0.5: {}
+ get-east-asian-width@1.4.0: {}
+
get-intrinsic@1.3.0:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -18293,12 +18538,6 @@ snapshots:
package-json-from-dist: 1.0.1
path-scurry: 2.0.1
- glob@13.0.0:
- dependencies:
- minimatch: 10.1.1
- minipass: 7.1.2
- path-scurry: 2.0.1
-
glob@7.2.3:
dependencies:
fs.realpath: 1.0.0
@@ -18321,8 +18560,6 @@ snapshots:
define-properties: 1.2.1
gopd: 1.2.0
- globalyzer@0.1.0: {}
-
globby@11.1.0:
dependencies:
array-union: 2.1.0
@@ -18332,8 +18569,6 @@ snapshots:
merge2: 1.4.1
slash: 3.0.0
- globrex@0.1.2: {}
-
google-protobuf@3.21.4:
optional: true
@@ -18353,7 +18588,7 @@ snapshots:
p-cancelable: 3.0.0
responselike: 3.0.0
- got@14.6.4:
+ got@14.6.5:
dependencies:
'@sindresorhus/is': 7.1.1
byte-counter: 0.1.0
@@ -18370,13 +18605,11 @@ snapshots:
graceful-fs@4.2.11: {}
- graphemer@1.4.0: {}
-
graphql@16.12.0: {}
hammerjs@2.0.8: {}
- happy-dom@20.0.10:
+ happy-dom@20.0.11:
dependencies:
'@types/node': 20.19.25
'@types/whatwg-mimetype': 3.0.2
@@ -18452,6 +18685,10 @@ snapshots:
hpagent@1.2.0: {}
+ html-encoding-sniffer@3.0.0:
+ dependencies:
+ whatwg-encoding: 2.0.0
+
html-encoding-sniffer@4.0.0:
dependencies:
whatwg-encoding: 3.1.1
@@ -18503,6 +18740,14 @@ snapshots:
http-link-header@1.1.3: {}
+ http-proxy-agent@5.0.0:
+ dependencies:
+ '@tootallnate/once': 2.0.0
+ agent-base: 6.0.2
+ debug: 4.4.3(supports-color@10.2.2)
+ transitivePeerDependencies:
+ - supports-color
+
http-proxy-agent@7.0.2:
dependencies:
agent-base: 7.1.4
@@ -18537,7 +18782,6 @@ snapshots:
debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
- optional: true
https-proxy-agent@7.0.6(supports-color@10.2.2):
dependencies:
@@ -18587,7 +18831,7 @@ snapshots:
parent-module: 1.0.1
resolve-from: 4.0.0
- import-in-the-middle@1.15.0:
+ import-in-the-middle@2.0.0:
dependencies:
acorn: 8.15.0
acorn-import-attributes: 1.9.5(acorn@8.15.0)
@@ -18665,7 +18909,7 @@ snapshots:
ipaddr.js@1.9.1: {}
- ipaddr.js@2.2.0: {}
+ ipaddr.js@2.3.0: {}
irregular-plurals@3.5.0: {}
@@ -18773,8 +19017,7 @@ snapshots:
is-plain-object@5.0.0: {}
- is-potential-custom-element-name@1.0.1:
- optional: true
+ is-potential-custom-element-name@1.0.1: {}
is-promise@2.2.2: {}
@@ -18918,7 +19161,7 @@ snapshots:
'@jest/expect': 29.7.0
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
chalk: 4.1.2
co: 4.6.0
dedent: 1.7.0
@@ -18938,16 +19181,16 @@ snapshots:
- babel-plugin-macros
- supports-color
- jest-cli@29.7.0(@types/node@24.10.1):
+ jest-cli@29.7.0(@types/node@24.10.2):
dependencies:
'@jest/core': 29.7.0
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
chalk: 4.1.2
- create-jest: 29.7.0(@types/node@24.10.1)
+ create-jest: 29.7.0(@types/node@24.10.2)
exit: 0.1.2
import-local: 3.2.0
- jest-config: 29.7.0(@types/node@24.10.1)
+ jest-config: 29.7.0(@types/node@24.10.2)
jest-util: 29.7.0
jest-validate: 29.7.0
yargs: 17.7.2
@@ -18957,7 +19200,7 @@ snapshots:
- supports-color
- ts-node
- jest-config@29.7.0(@types/node@24.10.1):
+ jest-config@29.7.0(@types/node@24.10.2):
dependencies:
'@babel/core': 7.28.5
'@jest/test-sequencer': 29.7.0
@@ -18982,7 +19225,7 @@ snapshots:
slash: 3.0.0
strip-json-comments: 3.1.1
optionalDependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
@@ -19006,12 +19249,27 @@ snapshots:
jest-util: 29.7.0
pretty-format: 29.7.0
+ jest-environment-jsdom@29.7.0(bufferutil@4.0.9)(utf-8-validate@6.0.5):
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/fake-timers': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/jsdom': 20.0.1
+ '@types/node': 24.10.2
+ jest-mock: 29.7.0
+ jest-util: 29.7.0
+ jsdom: 20.0.3(bufferutil@4.0.9)(utf-8-validate@6.0.5)
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
jest-environment-node@29.7.0:
dependencies:
'@jest/environment': 29.7.0
'@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
jest-mock: 29.7.0
jest-util: 29.7.0
@@ -19021,7 +19279,7 @@ snapshots:
dependencies:
'@jest/types': 29.6.3
'@types/graceful-fs': 4.1.9
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
anymatch: 3.1.3
fb-watchman: 2.0.2
graceful-fs: 4.2.11
@@ -19060,7 +19318,7 @@ snapshots:
jest-mock@29.7.0:
dependencies:
'@jest/types': 29.6.3
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
jest-util: 29.7.0
jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
@@ -19097,7 +19355,7 @@ snapshots:
'@jest/test-result': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
chalk: 4.1.2
emittery: 0.13.1
graceful-fs: 4.2.11
@@ -19125,7 +19383,7 @@ snapshots:
'@jest/test-result': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
chalk: 4.1.2
cjs-module-lexer: 1.4.3
collect-v8-coverage: 1.0.3
@@ -19171,7 +19429,7 @@ snapshots:
jest-util@29.7.0:
dependencies:
'@jest/types': 29.6.3
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
chalk: 4.1.2
ci-info: 3.9.0
graceful-fs: 4.2.11
@@ -19190,7 +19448,7 @@ snapshots:
dependencies:
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
ansi-escapes: 4.3.2
chalk: 4.1.2
emittery: 0.13.1
@@ -19199,17 +19457,17 @@ snapshots:
jest-worker@29.7.0:
dependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
jest-util: 29.7.0
merge-stream: 2.0.0
supports-color: 8.1.1
- jest@29.7.0(@types/node@24.10.1):
+ jest@29.7.0(@types/node@24.10.2):
dependencies:
'@jest/core': 29.7.0
'@jest/types': 29.6.3
import-local: 3.2.0
- jest-cli: 29.7.0(@types/node@24.10.1)
+ jest-cli: 29.7.0(@types/node@24.10.2)
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
@@ -19269,6 +19527,39 @@ snapshots:
jschardet@3.1.4: {}
+ jsdom@20.0.3(bufferutil@4.0.9)(utf-8-validate@6.0.5):
+ dependencies:
+ abab: 2.0.6
+ acorn: 8.15.0
+ acorn-globals: 7.0.1
+ cssom: 0.5.0
+ cssstyle: 2.3.0
+ data-urls: 3.0.2
+ decimal.js: 10.6.0
+ domexception: 4.0.0
+ escodegen: 2.1.0
+ form-data: 4.0.5
+ html-encoding-sniffer: 3.0.0
+ http-proxy-agent: 5.0.0
+ https-proxy-agent: 5.0.1
+ is-potential-custom-element-name: 1.0.1
+ nwsapi: 2.2.23
+ parse5: 7.3.0
+ saxes: 6.0.0
+ symbol-tree: 3.2.4
+ tough-cookie: 4.1.4
+ w3c-xmlserializer: 4.0.0
+ webidl-conversions: 7.0.0
+ whatwg-encoding: 2.0.0
+ whatwg-mimetype: 3.0.0
+ whatwg-url: 11.0.0
+ ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5)
+ xml-name-validator: 4.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5):
dependencies:
'@acemir/cssom': 0.9.23
@@ -19364,8 +19655,6 @@ snapshots:
json-schema: 0.4.0
verror: 1.10.0
- jsrsasign@11.1.0: {}
-
jstransformer@1.0.0:
dependencies:
is-promise: 2.2.2
@@ -19682,7 +19971,7 @@ snapshots:
media-typer@1.1.0: {}
- mediabunny@1.25.1:
+ mediabunny@1.25.8:
dependencies:
'@types/dom-mediacapture-transform': 0.1.11
'@types/dom-webcodecs': 0.1.13
@@ -19724,10 +20013,6 @@ snapshots:
dependencies:
'@twemoji/parser': 16.0.0
- microformats-parser@2.0.4:
- dependencies:
- parse5: 7.3.0
-
micromark-core-commonmark@2.0.3:
dependencies:
decode-named-character-reference: 1.2.0
@@ -20062,14 +20347,14 @@ snapshots:
optionalDependencies:
msgpackr-extract: 3.0.3
- msw-storybook-addon@2.0.6(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3)):
+ msw-storybook-addon@2.0.6(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3)):
dependencies:
is-node-process: 1.2.0
- msw: 2.12.2(@types/node@24.10.1)(typescript@5.9.3)
+ msw: 2.12.4(@types/node@24.10.2)(typescript@5.9.3)
- msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3):
+ msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3):
dependencies:
- '@inquirer/confirm': 5.1.21(@types/node@24.10.1)
+ '@inquirer/confirm': 5.1.21(@types/node@24.10.2)
'@mswjs/interceptors': 0.40.0
'@open-draft/deferred-promise': 2.2.0
'@types/statuses': 2.0.6
@@ -20084,7 +20369,7 @@ snapshots:
statuses: 2.0.2
strict-event-emitter: 0.5.1
tough-cookie: 6.0.0
- type-fest: 4.41.0
+ type-fest: 5.2.0
until-async: 3.0.2
yargs: 17.7.2
optionalDependencies:
@@ -20204,11 +20489,11 @@ snapshots:
node-releases@2.0.27: {}
- nodemailer@7.0.10: {}
+ nodemailer@7.0.11: {}
nodemon@3.1.11:
dependencies:
- chokidar: 4.0.3
+ chokidar: 5.0.0
debug: 4.4.3(supports-color@5.5.0)
ignore-by-default: 1.0.1
minimatch: 3.1.2
@@ -20282,6 +20567,8 @@ snapshots:
dependencies:
boolbase: 1.0.0
+ nwsapi@2.2.23: {}
+
oauth2orize-pkce@0.1.2: {}
oauth2orize@1.12.0:
@@ -20292,8 +20579,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- oauth@0.10.2: {}
-
object-assign@4.1.1: {}
object-inspect@1.13.4: {}
@@ -20336,6 +20621,8 @@ snapshots:
oblivious-set@2.0.0: {}
+ obug@2.1.1: {}
+
on-exit-leak-free@2.1.2: {}
on-finished@2.4.1:
@@ -20356,7 +20643,7 @@ snapshots:
oniguruma-parser@0.12.1: {}
- oniguruma-to-es@4.3.3:
+ oniguruma-to-es@4.3.4:
dependencies:
oniguruma-parser: 0.12.1
regex: 6.0.1
@@ -20568,7 +20855,7 @@ snapshots:
pid-port@2.0.0:
dependencies:
- execa: 9.6.0
+ execa: 9.6.1
pify@2.3.0: {}
@@ -20598,7 +20885,7 @@ snapshots:
optionalDependencies:
'@napi-rs/nice': 1.1.1
- pkce-challenge@5.0.0: {}
+ pkce-challenge@5.0.1: {}
pkg-dir@4.2.0:
dependencies:
@@ -20616,7 +20903,7 @@ snapshots:
pngjs@5.0.0: {}
- pnpm@10.23.0: {}
+ pnpm@10.25.0: {}
polished@4.3.1:
dependencies:
@@ -20798,7 +21085,7 @@ snapshots:
prelude-ls@1.2.1: {}
- prettier@3.6.2: {}
+ prettier@3.7.4: {}
pretty-bytes@5.6.0: {}
@@ -20822,7 +21109,7 @@ snapshots:
dependencies:
'@chainsafe/is-ip': 2.1.0
ip-regex: 5.0.0
- ipaddr.js: 2.2.0
+ ipaddr.js: 2.3.0
netmask: 2.0.2
probe-image-size@7.2.3:
@@ -20887,6 +21174,10 @@ snapshots:
dependencies:
event-stream: 3.3.4
+ psl@1.15.0:
+ dependencies:
+ punycode: 2.3.1
+
pstree.remy@1.1.8: {}
pug-attrs@3.0.0:
@@ -20997,6 +21288,8 @@ snapshots:
dependencies:
side-channel: 1.1.0
+ querystringify@2.2.0: {}
+
queue-lit@1.5.2: {}
queue-microtask@1.2.3: {}
@@ -21060,16 +21353,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
- react-dom@19.2.0(react@19.2.0):
+ react-dom@19.2.1(react@19.2.1):
dependencies:
- react: 19.2.0
+ react: 19.2.1
scheduler: 0.27.0
react-is@17.0.2: {}
react-is@18.3.1: {}
- react@19.2.0: {}
+ react@19.2.1: {}
read-pkg-up@7.0.1:
dependencies:
@@ -21112,7 +21405,7 @@ snapshots:
dependencies:
minimatch: 5.1.6
- readdirp@4.1.2: {}
+ readdirp@5.0.0: {}
real-require@0.2.0: {}
@@ -21215,16 +21508,17 @@ snapshots:
require-from-string@2.0.2: {}
- require-in-the-middle@7.5.2:
+ require-in-the-middle@8.0.1:
dependencies:
debug: 4.4.3(supports-color@10.2.2)
module-details-from-path: 1.0.4
- resolve: 1.22.11
transitivePeerDependencies:
- supports-color
require-main-filename@2.0.0: {}
+ requires-port@1.0.0: {}
+
resolve-alpn@1.2.1: {}
resolve-cwd@3.0.0:
@@ -21369,9 +21663,9 @@ snapshots:
parse-srcset: 1.0.2
postcss: 8.5.6
- sass@1.94.2:
+ sass@1.95.1:
dependencies:
- chokidar: 4.0.3
+ chokidar: 5.0.0
immutable: 5.1.4
source-map-js: 1.2.1
optionalDependencies:
@@ -21382,7 +21676,6 @@ snapshots:
saxes@6.0.0:
dependencies:
xmlchars: 2.2.0
- optional: true
scheduler@0.27.0: {}
@@ -21532,19 +21825,17 @@ snapshots:
shebang-regex@3.0.0: {}
- shiki@3.15.0:
+ shiki@3.19.0:
dependencies:
- '@shikijs/core': 3.15.0
- '@shikijs/engine-javascript': 3.15.0
- '@shikijs/engine-oniguruma': 3.15.0
- '@shikijs/langs': 3.15.0
- '@shikijs/themes': 3.15.0
- '@shikijs/types': 3.15.0
+ '@shikijs/core': 3.19.0
+ '@shikijs/engine-javascript': 3.19.0
+ '@shikijs/engine-oniguruma': 3.19.0
+ '@shikijs/langs': 3.19.0
+ '@shikijs/themes': 3.19.0
+ '@shikijs/types': 3.19.0
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
- shimmer@1.2.1: {}
-
side-channel-list@1.0.0:
dependencies:
es-errors: 1.3.0
@@ -21775,19 +22066,6 @@ snapshots:
standard-as-callback@2.1.0: {}
- start-server-and-test@2.1.2:
- dependencies:
- arg: 5.0.2
- bluebird: 3.7.2
- check-more-types: 2.24.0
- debug: 4.4.3(supports-color@10.2.2)
- execa: 5.1.1
- lazy-ass: 1.6.0
- ps-tree: 1.2.0
- wait-on: 8.0.5(debug@4.4.3)
- transitivePeerDependencies:
- - supports-color
-
start-server-and-test@2.1.3:
dependencies:
arg: 5.0.2
@@ -21812,42 +22090,40 @@ snapshots:
es-errors: 1.3.0
internal-slot: 1.1.0
- storybook-addon-misskey-theme@https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640(17b0cdbdd96b793834b84d8d4dddb88b):
+ storybook-addon-misskey-theme@https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640(62d43c4a6ba7695d11b4f3f5e39354d0):
dependencies:
- '@storybook/blocks': 8.6.14(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- '@storybook/components': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- '@storybook/core-events': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- '@storybook/manager-api': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- '@storybook/preview-api': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- '@storybook/theming': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
- '@storybook/types': 8.6.14(storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)))
+ '@storybook/blocks': 8.6.14(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ '@storybook/components': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ '@storybook/core-events': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ '@storybook/manager-api': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ '@storybook/preview-api': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ '@storybook/theming': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
+ '@storybook/types': 8.6.14(storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5))
optionalDependencies:
- react: 19.2.0
- react-dom: 19.2.0(react@19.2.0)
+ react: 19.2.1
+ react-dom: 19.2.1(react@19.2.1)
- storybook@10.0.8(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(prettier@3.6.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)):
+ storybook@10.1.5(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.7.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(utf-8-validate@6.0.5):
dependencies:
'@storybook/global': 5.0.0
- '@storybook/icons': 1.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@storybook/icons': 2.0.1(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@testing-library/jest-dom': 6.9.1
'@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0)
'@vitest/expect': 3.2.4
- '@vitest/mocker': 3.2.4(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
'@vitest/spy': 3.2.4
- esbuild: 0.25.11
+ esbuild: 0.27.1
recast: 0.23.11
semver: 7.7.3
+ use-sync-external-store: 1.6.0(react@19.2.1)
ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5)
optionalDependencies:
- prettier: 3.6.2
+ prettier: 3.7.4
transitivePeerDependencies:
- '@testing-library/dom'
- bufferutil
- - msw
- react
- react-dom
- utf-8-validate
- - vite
stream-browserify@3.0.0:
dependencies:
@@ -21898,6 +22174,12 @@ snapshots:
emoji-regex: 9.2.2
strip-ansi: 7.1.2
+ string-width@7.2.0:
+ dependencies:
+ emoji-regex: 10.6.0
+ get-east-asian-width: 1.4.0
+ strip-ansi: 7.1.2
+
string.prototype.trim@1.2.10:
dependencies:
call-bind: 1.0.8
@@ -22033,13 +22315,14 @@ snapshots:
picocolors: 1.1.1
sax: 1.4.3
- symbol-tree@3.2.4:
- optional: true
+ symbol-tree@3.2.4: {}
- systeminformation@5.27.11: {}
+ systeminformation@5.27.14: {}
systeminformation@5.27.7: {}
+ tagged-tag@1.0.0: {}
+
tar-stream@3.1.7:
dependencies:
b4a: 1.7.3
@@ -22104,18 +22387,13 @@ snapshots:
through@2.3.8: {}
- tiny-glob@0.2.9:
- dependencies:
- globalyzer: 0.1.0
- globrex: 0.1.2
-
tiny-invariant@1.3.3: {}
tinybench@2.9.0: {}
tinycolor2@1.6.0: {}
- tinyexec@0.3.2: {}
+ tinyexec@1.0.2: {}
tinyglobby@0.2.15:
dependencies:
@@ -22174,6 +22452,13 @@ snapshots:
touch@3.1.1: {}
+ tough-cookie@4.1.4:
+ dependencies:
+ psl: 1.15.0
+ punycode: 2.3.1
+ universalify: 0.2.0
+ url-parse: 1.5.10
+
tough-cookie@5.1.2:
dependencies:
tldts: 6.1.86
@@ -22184,6 +22469,10 @@ snapshots:
tr46@0.0.3: {}
+ tr46@3.0.0:
+ dependencies:
+ punycode: 2.3.1
+
tr46@6.0.0:
dependencies:
punycode: 2.3.1
@@ -22209,7 +22498,7 @@ snapshots:
tsc-alias@1.8.16:
dependencies:
- chokidar: 4.0.3
+ chokidar: 5.0.0
commander: 9.5.0
get-tsconfig: 4.13.0
globby: 11.1.0
@@ -22244,9 +22533,9 @@ snapshots:
tslib@2.8.1: {}
- tsx@4.20.6:
+ tsx@4.21.0:
dependencies:
- esbuild: 0.25.11
+ esbuild: 0.27.1
get-tsconfig: 4.13.0
optionalDependencies:
fsevents: 2.3.3
@@ -22281,6 +22570,10 @@ snapshots:
type-fest@4.41.0: {}
+ type-fest@5.2.0:
+ dependencies:
+ tagged-tag: 1.0.0
+
type-is@1.6.18:
dependencies:
media-typer: 0.3.0
@@ -22327,10 +22620,10 @@ snapshots:
typedarray@0.0.6: {}
- typeorm@0.3.27(ioredis@5.8.2)(pg@8.16.3)(reflect-metadata@0.2.2):
+ typeorm@0.3.28(ioredis@5.8.2)(pg@8.16.3):
dependencies:
'@sqltools/formatter': 1.2.5
- ansis: 3.17.0
+ ansis: 4.2.0
app-root-path: 3.1.0
buffer: 6.0.3
dayjs: 1.11.19
@@ -22363,7 +22656,7 @@ snapshots:
uint8array-extras@1.5.0: {}
- ulid@3.0.1: {}
+ ulid@3.0.2: {}
unbox-primitive@1.1.0:
dependencies:
@@ -22432,6 +22725,8 @@ snapshots:
universalify@0.1.2: {}
+ universalify@0.2.0: {}
+
universalify@2.0.1: {}
unload@2.4.1: {}
@@ -22464,6 +22759,15 @@ snapshots:
dependencies:
punycode: 2.3.1
+ url-parse@1.5.10:
+ dependencies:
+ querystringify: 2.2.0
+ requires-port: 1.0.0
+
+ use-sync-external-store@1.6.0(react@19.2.1):
+ dependencies:
+ react: 19.2.1
+
utf-8-validate@6.0.5:
dependencies:
node-gyp-build: 4.8.4
@@ -22481,13 +22785,13 @@ snapshots:
uuid@9.0.1: {}
- v-code-diff@1.13.1(vue@3.5.24(typescript@5.9.3)):
+ v-code-diff@1.13.1(vue@3.5.25(typescript@5.9.3)):
dependencies:
diff: 5.2.0
diff-match-patch: 1.0.5
highlight.js: 11.11.1
- vue: 3.5.24(typescript@5.9.3)
- vue-demi: 0.14.10(vue@3.5.24(typescript@5.9.3))
+ vue: 3.5.25(typescript@5.9.3)
+ vue-demi: 0.14.10(vue@3.5.25(typescript@5.9.3))
v8-to-istanbul@9.3.0:
dependencies:
@@ -22520,16 +22824,16 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
- vite-plugin-glsl@1.5.4(@rollup/pluginutils@5.3.0(rollup@4.53.3))(esbuild@0.27.0)(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)):
+ vite-plugin-glsl@1.5.5(@rollup/pluginutils@5.3.0(rollup@4.53.3))(esbuild@0.27.1)(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)):
dependencies:
- vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ vite: 7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
optionalDependencies:
'@rollup/pluginutils': 5.3.0(rollup@4.53.3)
- esbuild: 0.27.0
+ esbuild: 0.27.1
vite-plugin-turbosnap@1.0.3: {}
- vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6):
+ vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0):
dependencies:
esbuild: 0.25.11
fdir: 6.5.0(picomatch@4.0.3)
@@ -22538,90 +22842,48 @@ snapshots:
rollup: 4.53.3
tinyglobby: 0.2.15
optionalDependencies:
- '@types/node': 24.10.1
+ '@types/node': 24.10.2
fsevents: 2.3.3
- sass: 1.94.2
+ sass: 1.95.1
terser: 5.44.1
- tsx: 4.20.6
+ tsx: 4.21.0
- vitest-fetch-mock@0.4.5(vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)):
+ vitest-fetch-mock@0.4.5(vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.2)(happy-dom@20.0.11)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)):
dependencies:
- vitest: 4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.2)(happy-dom@20.0.11)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
- vitest-websocket-mock@0.5.0(vitest@4.0.10(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)):
+ vitest-websocket-mock@0.5.0(vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.2)(happy-dom@20.0.11)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)):
dependencies:
'@vitest/utils': 3.2.4
mock-socket: 9.3.1
- vitest: 4.0.10(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.2)(happy-dom@20.0.11)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
- vitest@4.0.10(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6):
+ vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.10.2)(happy-dom@20.0.11)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0):
dependencies:
- '@vitest/expect': 4.0.10
- '@vitest/mocker': 4.0.10(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@vitest/pretty-format': 4.0.10
- '@vitest/runner': 4.0.10
- '@vitest/snapshot': 4.0.10
- '@vitest/spy': 4.0.10
- '@vitest/utils': 4.0.10
- debug: 4.4.3(supports-color@10.2.2)
+ '@vitest/expect': 4.0.15
+ '@vitest/mocker': 4.0.15(msw@2.12.4(@types/node@24.10.2)(typescript@5.9.3))(vite@7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0))
+ '@vitest/pretty-format': 4.0.15
+ '@vitest/runner': 4.0.15
+ '@vitest/snapshot': 4.0.15
+ '@vitest/spy': 4.0.15
+ '@vitest/utils': 4.0.15
es-module-lexer: 1.7.0
expect-type: 1.2.2
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: 0.3.2
+ tinyexec: 1.0.2
tinyglobby: 0.2.15
tinyrainbow: 3.0.3
- vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
- why-is-node-running: 2.3.0
- optionalDependencies:
- '@types/debug': 4.1.12
- '@types/node': 24.10.1
- happy-dom: 20.0.10
- jsdom: 27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
- transitivePeerDependencies:
- - jiti
- - less
- - lightningcss
- - msw
- - sass
- - sass-embedded
- - stylus
- - sugarss
- - supports-color
- - terser
- - tsx
- - yaml
-
- vitest@4.0.13(@opentelemetry/api@1.9.0)(@types/debug@4.1.12)(@types/node@24.10.1)(happy-dom@20.0.10)(jsdom@27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6):
- dependencies:
- '@vitest/expect': 4.0.13
- '@vitest/mocker': 4.0.13(msw@2.12.2(@types/node@24.10.1)(typescript@5.9.3))(vite@7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6))
- '@vitest/pretty-format': 4.0.13
- '@vitest/runner': 4.0.13
- '@vitest/snapshot': 4.0.13
- '@vitest/spy': 4.0.13
- '@vitest/utils': 4.0.13
- debug: 4.4.3(supports-color@10.2.2)
- es-module-lexer: 1.7.0
- expect-type: 1.2.2
- magic-string: 0.30.21
- pathe: 2.0.3
- picomatch: 4.0.3
- std-env: 3.10.0
- tinybench: 2.9.0
- tinyexec: 0.3.2
- tinyglobby: 0.2.15
- tinyrainbow: 3.0.3
- vite: 7.2.4(@types/node@24.10.1)(sass@1.94.2)(terser@5.44.1)(tsx@4.20.6)
+ vite: 7.2.7(@types/node@24.10.2)(sass@1.95.1)(terser@5.44.1)(tsx@4.21.0)
why-is-node-running: 2.3.0
optionalDependencies:
'@opentelemetry/api': 1.9.0
- '@types/debug': 4.1.12
- '@types/node': 24.10.1
- happy-dom: 20.0.10
+ '@types/node': 24.10.2
+ happy-dom: 20.0.11
jsdom: 27.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
transitivePeerDependencies:
- jiti
@@ -22632,7 +22894,6 @@ snapshots:
- sass-embedded
- stylus
- sugarss
- - supports-color
- terser
- tsx
- yaml
@@ -22667,18 +22928,20 @@ snapshots:
vue-component-type-helpers@2.2.12: {}
- vue-component-type-helpers@3.1.5: {}
+ vue-component-type-helpers@3.1.8: {}
- vue-demi@0.14.10(vue@3.5.24(typescript@5.9.3)):
+ vue-component-type-helpers@3.1.6: {}
+
+ vue-demi@0.14.10(vue@3.5.25(typescript@5.9.3)):
dependencies:
- vue: 3.5.24(typescript@5.9.3)
+ vue: 3.5.25(typescript@5.9.3)
- vue-docgen-api@4.79.2(vue@3.5.24(typescript@5.9.3)):
+ vue-docgen-api@4.79.2(vue@3.5.25(typescript@5.9.3)):
dependencies:
'@babel/parser': 7.28.5
'@babel/types': 7.28.5
- '@vue/compiler-dom': 3.5.24
- '@vue/compiler-sfc': 3.5.24
+ '@vue/compiler-dom': 3.5.25
+ '@vue/compiler-sfc': 3.5.25
ast-types: 0.16.1
esm-resolve: 1.0.11
hash-sum: 2.0.0
@@ -22686,8 +22949,8 @@ snapshots:
pug: 3.0.3
recast: 0.23.11
ts-map: 1.0.3
- vue: 3.5.24(typescript@5.9.3)
- vue-inbrowser-compiler-independent-utils: 4.71.1(vue@3.5.24(typescript@5.9.3))
+ vue: 3.5.25(typescript@5.9.3)
+ vue-inbrowser-compiler-independent-utils: 4.71.1(vue@3.5.25(typescript@5.9.3))
vue-eslint-parser@10.2.0(eslint@9.39.1):
dependencies:
@@ -22701,46 +22964,40 @@ snapshots:
transitivePeerDependencies:
- supports-color
- vue-inbrowser-compiler-independent-utils@4.71.1(vue@3.5.24(typescript@5.9.3)):
+ vue-inbrowser-compiler-independent-utils@4.71.1(vue@3.5.25(typescript@5.9.3)):
dependencies:
- vue: 3.5.24(typescript@5.9.3)
+ vue: 3.5.25(typescript@5.9.3)
- vue-tsc@3.1.5(typescript@5.9.3):
+ vue-tsc@3.1.8(typescript@5.9.3):
dependencies:
- '@volar/typescript': 2.4.23
- '@vue/language-core': 3.1.5(typescript@5.9.3)
+ '@volar/typescript': 2.4.26
+ '@vue/language-core': 3.1.8(typescript@5.9.3)
typescript: 5.9.3
- vue@3.5.24(typescript@5.9.3):
+ vue@3.5.25(typescript@5.9.3):
dependencies:
- '@vue/compiler-dom': 3.5.24
- '@vue/compiler-sfc': 3.5.24
- '@vue/runtime-dom': 3.5.24
- '@vue/server-renderer': 3.5.24(vue@3.5.24(typescript@5.9.3))
- '@vue/shared': 3.5.24
+ '@vue/compiler-dom': 3.5.25
+ '@vue/compiler-sfc': 3.5.25
+ '@vue/runtime-dom': 3.5.25
+ '@vue/server-renderer': 3.5.25(vue@3.5.25(typescript@5.9.3))
+ '@vue/shared': 3.5.25
optionalDependencies:
typescript: 5.9.3
- vuedraggable@4.1.0(vue@3.5.24(typescript@5.9.3)):
+ vuedraggable@4.1.0(vue@3.5.25(typescript@5.9.3)):
dependencies:
sortablejs: 1.14.0
- vue: 3.5.24(typescript@5.9.3)
+ vue: 3.5.25(typescript@5.9.3)
+
+ w3c-xmlserializer@4.0.0:
+ dependencies:
+ xml-name-validator: 4.0.0
w3c-xmlserializer@5.0.0:
dependencies:
xml-name-validator: 5.0.0
optional: true
- wait-on@8.0.5(debug@4.4.3):
- dependencies:
- axios: 1.13.2(debug@4.4.3)
- joi: 18.0.1
- lodash: 4.17.21
- minimist: 1.2.8
- rxjs: 7.8.2
- transitivePeerDependencies:
- - debug
-
wait-on@9.0.3(debug@4.4.3):
dependencies:
axios: 1.13.2(debug@4.4.3)
@@ -22783,11 +23040,17 @@ snapshots:
webidl-conversions@3.0.1: {}
+ webidl-conversions@7.0.0: {}
+
webidl-conversions@8.0.0:
optional: true
webpack-virtual-modules@0.6.2: {}
+ whatwg-encoding@2.0.0:
+ dependencies:
+ iconv-lite: 0.6.3
+
whatwg-encoding@3.1.1:
dependencies:
iconv-lite: 0.6.3
@@ -22796,6 +23059,11 @@ snapshots:
whatwg-mimetype@4.0.0: {}
+ whatwg-url@11.0.0:
+ dependencies:
+ tr46: 3.0.0
+ webidl-conversions: 7.0.0
+
whatwg-url@15.1.0:
dependencies:
tr46: 6.0.0
@@ -22899,6 +23167,12 @@ snapshots:
string-width: 5.1.2
strip-ansi: 7.1.2
+ wrap-ansi@9.0.2:
+ dependencies:
+ ansi-styles: 6.2.3
+ string-width: 7.2.0
+ strip-ansi: 7.1.2
+
wrappy@1.0.2: {}
write-file-atomic@4.0.2:
@@ -22929,8 +23203,7 @@ snapshots:
xmlbuilder@11.0.1: {}
- xmlchars@2.2.0:
- optional: true
+ xmlchars@2.2.0: {}
xtend@4.0.2: {}
@@ -22955,6 +23228,8 @@ snapshots:
yargs-parser@21.1.1: {}
+ yargs-parser@22.0.0: {}
+
yargs@15.4.1:
dependencies:
cliui: 6.0.0
@@ -22989,6 +23264,15 @@ snapshots:
y18n: 5.0.8
yargs-parser: 21.1.1
+ yargs@18.0.0:
+ dependencies:
+ cliui: 9.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ string-width: 7.2.0
+ y18n: 5.0.8
+ yargs-parser: 22.0.0
+
yauzl@2.10.0:
dependencies:
buffer-crc32: 0.2.13
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 9d43518ff6..a9443da0b3 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -35,3 +35,4 @@ ignorePatchFailures: false
minimumReleaseAge: 10080 # delay 7days to mitigate supply-chain attack
minimumReleaseAgeExclude:
- '@syuilo/aiscript'
+ - systeminformation # 脆弱性対応。そのうち消すこと
diff --git a/scripts/build-assets.mjs b/scripts/build-assets.mjs
index 34883e3513..0cfce02fef 100644
--- a/scripts/build-assets.mjs
+++ b/scripts/build-assets.mjs
@@ -6,12 +6,7 @@
import * as fs from 'node:fs/promises';
import * as path from 'node:path';
import { fileURLToPath } from 'node:url';
-import cssnano from 'cssnano';
import * as yaml from 'js-yaml';
-import postcss from 'postcss';
-import * as terser from 'terser';
-
-import { locales } from 'i18n';
import buildTarball from './tarball.mjs';
const configDir = fileURLToPath(new URL('../.config', import.meta.url));
@@ -29,49 +24,9 @@ async function copyFrontendFonts() {
await fs.cp('./packages/frontend/node_modules/three/examples/fonts', './built/_frontend_dist_/fonts', { dereference: true, recursive: true });
}
-async function copyBackendViews() {
- await fs.cp('./packages/backend/src/server/web/views', './packages/backend/built/server/web/views', { recursive: true });
-}
-
-async function buildBackendScript() {
- await fs.mkdir('./packages/backend/built/server/web', { recursive: true });
-
- for (const file of [
- './packages/backend/src/server/web/boot.js',
- './packages/backend/src/server/web/boot.embed.js',
- './packages/backend/src/server/web/bios.js',
- './packages/backend/src/server/web/cli.js',
- './packages/backend/src/server/web/error.js',
- ]) {
- let source = await fs.readFile(file, { encoding: 'utf-8' });
- source = source.replaceAll('LANGS', JSON.stringify(Object.keys(locales)));
- const { code } = await terser.minify(source, { toplevel: true });
- await fs.writeFile(`./packages/backend/built/server/web/${path.basename(file)}`, code);
- }
-}
-
-async function buildBackendStyle() {
- await fs.mkdir('./packages/backend/built/server/web', { recursive: true });
-
- for (const file of [
- './packages/backend/src/server/web/style.css',
- './packages/backend/src/server/web/style.embed.css',
- './packages/backend/src/server/web/bios.css',
- './packages/backend/src/server/web/cli.css',
- './packages/backend/src/server/web/error.css'
- ]) {
- const source = await fs.readFile(file, { encoding: 'utf-8' });
- const { css } = await postcss([cssnano({ zindex: false })]).process(source, { from: undefined });
- await fs.writeFile(`./packages/backend/built/server/web/${path.basename(file)}`, css);
- }
-}
-
async function build() {
await Promise.all([
copyFrontendFonts(),
- copyBackendViews(),
- buildBackendScript(),
- buildBackendStyle(),
loadConfig().then(config => config?.publishTarballInsteadOfProvideRepositoryUrl && buildTarball()),
]);
}
diff --git a/scripts/changelog-checker/package-lock.json b/scripts/changelog-checker/package-lock.json
index 3bf65e528a..5fb25ae977 100644
--- a/scripts/changelog-checker/package-lock.json
+++ b/scripts/changelog-checker/package-lock.json
@@ -9,16 +9,16 @@
"version": "1.0.0",
"devDependencies": {
"@types/mdast": "4.0.4",
- "@types/node": "24.10.1",
- "@vitest/coverage-v8": "4.0.13",
+ "@types/node": "24.10.4",
+ "@vitest/coverage-v8": "4.0.15",
"mdast-util-to-string": "4.0.0",
"remark": "15.0.1",
"remark-parse": "11.0.0",
"typescript": "5.9.3",
"unified": "11.0.5",
- "vite": "7.2.4",
+ "vite": "7.3.0",
"vite-node": "5.2.0",
- "vitest": "4.0.13"
+ "vitest": "4.0.15"
}
},
"node_modules/@babel/helper-string-parser": {
@@ -82,9 +82,9 @@
}
},
"node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz",
- "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz",
+ "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==",
"cpu": [
"ppc64"
],
@@ -99,9 +99,9 @@
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz",
- "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz",
+ "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==",
"cpu": [
"arm"
],
@@ -116,9 +116,9 @@
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz",
- "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz",
+ "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==",
"cpu": [
"arm64"
],
@@ -133,9 +133,9 @@
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz",
- "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz",
+ "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==",
"cpu": [
"x64"
],
@@ -150,9 +150,9 @@
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz",
- "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz",
+ "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==",
"cpu": [
"arm64"
],
@@ -167,9 +167,9 @@
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz",
- "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz",
+ "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==",
"cpu": [
"x64"
],
@@ -184,9 +184,9 @@
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz",
- "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz",
+ "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==",
"cpu": [
"arm64"
],
@@ -201,9 +201,9 @@
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz",
- "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz",
+ "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==",
"cpu": [
"x64"
],
@@ -218,9 +218,9 @@
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz",
- "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz",
+ "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==",
"cpu": [
"arm"
],
@@ -235,9 +235,9 @@
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz",
- "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz",
+ "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==",
"cpu": [
"arm64"
],
@@ -252,9 +252,9 @@
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz",
- "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz",
+ "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==",
"cpu": [
"ia32"
],
@@ -269,9 +269,9 @@
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz",
- "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz",
+ "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==",
"cpu": [
"loong64"
],
@@ -286,9 +286,9 @@
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz",
- "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz",
+ "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==",
"cpu": [
"mips64el"
],
@@ -303,9 +303,9 @@
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz",
- "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz",
+ "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==",
"cpu": [
"ppc64"
],
@@ -320,9 +320,9 @@
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz",
- "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz",
+ "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==",
"cpu": [
"riscv64"
],
@@ -337,9 +337,9 @@
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz",
- "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz",
+ "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==",
"cpu": [
"s390x"
],
@@ -354,9 +354,9 @@
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz",
- "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz",
+ "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==",
"cpu": [
"x64"
],
@@ -371,9 +371,9 @@
}
},
"node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz",
- "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz",
+ "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==",
"cpu": [
"arm64"
],
@@ -388,9 +388,9 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz",
- "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz",
+ "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==",
"cpu": [
"x64"
],
@@ -405,9 +405,9 @@
}
},
"node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz",
- "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz",
+ "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==",
"cpu": [
"arm64"
],
@@ -422,9 +422,9 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz",
- "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz",
+ "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==",
"cpu": [
"x64"
],
@@ -438,10 +438,27 @@
"node": ">=18"
}
},
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz",
+ "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/@esbuild/sunos-x64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz",
- "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz",
+ "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==",
"cpu": [
"x64"
],
@@ -456,9 +473,9 @@
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz",
- "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz",
+ "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==",
"cpu": [
"arm64"
],
@@ -473,9 +490,9 @@
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz",
- "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz",
+ "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==",
"cpu": [
"ia32"
],
@@ -490,9 +507,9 @@
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz",
- "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz",
+ "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==",
"cpu": [
"x64"
],
@@ -842,20 +859,21 @@
]
},
"node_modules/@standard-schema/spec": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz",
- "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
+ "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/chai": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz",
- "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==",
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz",
+ "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/deep-eql": "*"
+ "@types/deep-eql": "*",
+ "assertion-error": "^2.0.1"
}
},
"node_modules/@types/debug": {
@@ -898,9 +916,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "24.10.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
- "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
+ "version": "24.10.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.4.tgz",
+ "integrity": "sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -915,21 +933,21 @@
"dev": true
},
"node_modules/@vitest/coverage-v8": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.13.tgz",
- "integrity": "sha512-w77N6bmtJ3CFnL/YHiYotwW/JI3oDlR3K38WEIqegRfdMSScaYxwYKB/0jSNpOTZzUjQkG8HHEz4sdWQMWpQ5g==",
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.15.tgz",
+ "integrity": "sha512-FUJ+1RkpTFW7rQITdgTi93qOCWJobWhBirEPCeXh2SW2wsTlFxy51apDz5gzG+ZEYt/THvWeNmhdAoS9DTwpCw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@bcoe/v8-coverage": "^1.0.2",
- "@vitest/utils": "4.0.13",
+ "@vitest/utils": "4.0.15",
"ast-v8-to-istanbul": "^0.3.8",
- "debug": "^4.4.3",
"istanbul-lib-coverage": "^3.2.2",
"istanbul-lib-report": "^3.0.1",
"istanbul-lib-source-maps": "^5.0.6",
"istanbul-reports": "^3.2.0",
"magicast": "^0.5.1",
+ "obug": "^2.1.1",
"std-env": "^3.10.0",
"tinyrainbow": "^3.0.3"
},
@@ -937,8 +955,8 @@
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
- "@vitest/browser": "4.0.13",
- "vitest": "4.0.13"
+ "@vitest/browser": "4.0.15",
+ "vitest": "4.0.15"
},
"peerDependenciesMeta": {
"@vitest/browser": {
@@ -947,16 +965,16 @@
}
},
"node_modules/@vitest/expect": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.13.tgz",
- "integrity": "sha512-zYtcnNIBm6yS7Gpr7nFTmq8ncowlMdOJkWLqYvhr/zweY6tFbDkDi8BPPOeHxEtK1rSI69H7Fd4+1sqvEGli6w==",
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.15.tgz",
+ "integrity": "sha512-Gfyva9/GxPAWXIWjyGDli9O+waHDC0Q0jaLdFP1qPAUUfo1FEXPXUfUkp3eZA0sSq340vPycSyOlYUeM15Ft1w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@standard-schema/spec": "^1.0.0",
"@types/chai": "^5.2.2",
- "@vitest/spy": "4.0.13",
- "@vitest/utils": "4.0.13",
+ "@vitest/spy": "4.0.15",
+ "@vitest/utils": "4.0.15",
"chai": "^6.2.1",
"tinyrainbow": "^3.0.3"
},
@@ -965,13 +983,13 @@
}
},
"node_modules/@vitest/mocker": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.13.tgz",
- "integrity": "sha512-eNCwzrI5djoauklwP1fuslHBjrbR8rqIVbvNlAnkq1OTa6XT+lX68mrtPirNM9TnR69XUPt4puBCx2Wexseylg==",
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.15.tgz",
+ "integrity": "sha512-CZ28GLfOEIFkvCFngN8Sfx5h+Se0zN+h4B7yOsPVCcgtiO7t5jt9xQh2E1UkFep+eb9fjyMfuC5gBypwb07fvQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/spy": "4.0.13",
+ "@vitest/spy": "4.0.15",
"estree-walker": "^3.0.3",
"magic-string": "^0.30.21"
},
@@ -992,9 +1010,9 @@
}
},
"node_modules/@vitest/pretty-format": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.13.tgz",
- "integrity": "sha512-ooqfze8URWbI2ozOeLDMh8YZxWDpGXoeY3VOgcDnsUxN0jPyPWSUvjPQWqDGCBks+opWlN1E4oP1UYl3C/2EQA==",
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.15.tgz",
+ "integrity": "sha512-SWdqR8vEv83WtZcrfLNqlqeQXlQLh2iilO1Wk1gv4eiHKjEzvgHb2OVc3mIPyhZE6F+CtfYjNlDJwP5MN6Km7A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1005,13 +1023,13 @@
}
},
"node_modules/@vitest/runner": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.13.tgz",
- "integrity": "sha512-9IKlAru58wcVaWy7hz6qWPb2QzJTKt+IOVKjAx5vb5rzEFPTL6H4/R9BMvjZ2ppkxKgTrFONEJFtzvnyEpiT+A==",
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.15.tgz",
+ "integrity": "sha512-+A+yMY8dGixUhHmNdPUxOh0la6uVzun86vAbuMT3hIDxMrAOmn5ILBHm8ajrqHE0t8R9T1dGnde1A5DTnmi3qw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/utils": "4.0.13",
+ "@vitest/utils": "4.0.15",
"pathe": "^2.0.3"
},
"funding": {
@@ -1019,13 +1037,13 @@
}
},
"node_modules/@vitest/snapshot": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.13.tgz",
- "integrity": "sha512-hb7Usvyika1huG6G6l191qu1urNPsq1iFc2hmdzQY3F5/rTgqQnwwplyf8zoYHkpt7H6rw5UfIw6i/3qf9oSxQ==",
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.15.tgz",
+ "integrity": "sha512-A7Ob8EdFZJIBjLjeO0DZF4lqR6U7Ydi5/5LIZ0xcI+23lYlsYJAfGn8PrIWTYdZQRNnSRlzhg0zyGu37mVdy5g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "4.0.13",
+ "@vitest/pretty-format": "4.0.15",
"magic-string": "^0.30.21",
"pathe": "^2.0.3"
},
@@ -1034,9 +1052,9 @@
}
},
"node_modules/@vitest/spy": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.13.tgz",
- "integrity": "sha512-hSu+m4se0lDV5yVIcNWqjuncrmBgwaXa2utFLIrBkQCQkt+pSwyZTPFQAZiiF/63j8jYa8uAeUZ3RSfcdWaYWw==",
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.15.tgz",
+ "integrity": "sha512-+EIjOJmnY6mIfdXtE/bnozKEvTC4Uczg19yeZ2vtCz5Yyb0QQ31QWVQ8hswJ3Ysx/K2EqaNsVanjr//2+P3FHw==",
"dev": true,
"license": "MIT",
"funding": {
@@ -1044,19 +1062,29 @@
}
},
"node_modules/@vitest/utils": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.13.tgz",
- "integrity": "sha512-ydozWyQ4LZuu8rLp47xFUWis5VOKMdHjXCWhs1LuJsTNKww+pTHQNK4e0assIB9K80TxFyskENL6vCu3j34EYA==",
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.15.tgz",
+ "integrity": "sha512-HXjPW2w5dxhTD0dLwtYHDnelK3j8sR8cWIaLxr22evTyY6q8pRCjZSmhRWVjBaOVXChQd6AwMzi9pucorXCPZA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "4.0.13",
+ "@vitest/pretty-format": "4.0.15",
"tinyrainbow": "^3.0.3"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
+ "node_modules/assertion-error": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
+ "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/ast-v8-to-istanbul": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.8.tgz",
@@ -1169,9 +1197,9 @@
"license": "MIT"
},
"node_modules/esbuild": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz",
- "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz",
+ "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -1182,31 +1210,32 @@
"node": ">=18"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.0",
- "@esbuild/android-arm": "0.25.0",
- "@esbuild/android-arm64": "0.25.0",
- "@esbuild/android-x64": "0.25.0",
- "@esbuild/darwin-arm64": "0.25.0",
- "@esbuild/darwin-x64": "0.25.0",
- "@esbuild/freebsd-arm64": "0.25.0",
- "@esbuild/freebsd-x64": "0.25.0",
- "@esbuild/linux-arm": "0.25.0",
- "@esbuild/linux-arm64": "0.25.0",
- "@esbuild/linux-ia32": "0.25.0",
- "@esbuild/linux-loong64": "0.25.0",
- "@esbuild/linux-mips64el": "0.25.0",
- "@esbuild/linux-ppc64": "0.25.0",
- "@esbuild/linux-riscv64": "0.25.0",
- "@esbuild/linux-s390x": "0.25.0",
- "@esbuild/linux-x64": "0.25.0",
- "@esbuild/netbsd-arm64": "0.25.0",
- "@esbuild/netbsd-x64": "0.25.0",
- "@esbuild/openbsd-arm64": "0.25.0",
- "@esbuild/openbsd-x64": "0.25.0",
- "@esbuild/sunos-x64": "0.25.0",
- "@esbuild/win32-arm64": "0.25.0",
- "@esbuild/win32-ia32": "0.25.0",
- "@esbuild/win32-x64": "0.25.0"
+ "@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"
}
},
"node_modules/estree-walker": {
@@ -1220,9 +1249,9 @@
}
},
"node_modules/expect-type": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz",
- "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz",
+ "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -2128,7 +2157,8 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
"integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/source-map-js": {
"version": "1.2.1",
@@ -2143,7 +2173,8 @@
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
"integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/std-env": {
"version": "3.10.0",
@@ -2172,11 +2203,14 @@
"license": "MIT"
},
"node_modules/tinyexec": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
- "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz",
+ "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
},
"node_modules/tinyglobby": {
"version": "0.2.15",
@@ -2341,13 +2375,13 @@
}
},
"node_modules/vite": {
- "version": "7.2.4",
- "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.4.tgz",
- "integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==",
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz",
+ "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "esbuild": "^0.25.0",
+ "esbuild": "^0.27.0",
"fdir": "^6.5.0",
"picomatch": "^4.0.3",
"postcss": "^8.5.6",
@@ -2439,29 +2473,29 @@
}
},
"node_modules/vitest": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.13.tgz",
- "integrity": "sha512-QSD4I0fN6uZQfftryIXuqvqgBxTvJ3ZNkF6RWECd82YGAYAfhcppBLFXzXJHQAAhVFyYEuFTrq6h0hQqjB7jIQ==",
+ "version": "4.0.15",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.15.tgz",
+ "integrity": "sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
- "@vitest/expect": "4.0.13",
- "@vitest/mocker": "4.0.13",
- "@vitest/pretty-format": "4.0.13",
- "@vitest/runner": "4.0.13",
- "@vitest/snapshot": "4.0.13",
- "@vitest/spy": "4.0.13",
- "@vitest/utils": "4.0.13",
- "debug": "^4.4.3",
+ "@vitest/expect": "4.0.15",
+ "@vitest/mocker": "4.0.15",
+ "@vitest/pretty-format": "4.0.15",
+ "@vitest/runner": "4.0.15",
+ "@vitest/snapshot": "4.0.15",
+ "@vitest/spy": "4.0.15",
+ "@vitest/utils": "4.0.15",
"es-module-lexer": "^1.7.0",
"expect-type": "^1.2.2",
"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": "^0.3.2",
+ "tinyexec": "^1.0.2",
"tinyglobby": "^0.2.15",
"tinyrainbow": "^3.0.3",
"vite": "^6.0.0 || ^7.0.0",
@@ -2479,12 +2513,11 @@
"peerDependencies": {
"@edge-runtime/vm": "*",
"@opentelemetry/api": "^1.9.0",
- "@types/debug": "^4.1.12",
"@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0",
- "@vitest/browser-playwright": "4.0.13",
- "@vitest/browser-preview": "4.0.13",
- "@vitest/browser-webdriverio": "4.0.13",
- "@vitest/ui": "4.0.13",
+ "@vitest/browser-playwright": "4.0.15",
+ "@vitest/browser-preview": "4.0.15",
+ "@vitest/browser-webdriverio": "4.0.15",
+ "@vitest/ui": "4.0.15",
"happy-dom": "*",
"jsdom": "*"
},
@@ -2495,9 +2528,6 @@
"@opentelemetry/api": {
"optional": true
},
- "@types/debug": {
- "optional": true
- },
"@types/node": {
"optional": true
},
diff --git a/scripts/changelog-checker/package.json b/scripts/changelog-checker/package.json
index 8cc94d0532..bf68efb053 100644
--- a/scripts/changelog-checker/package.json
+++ b/scripts/changelog-checker/package.json
@@ -10,15 +10,15 @@
},
"devDependencies": {
"@types/mdast": "4.0.4",
- "@types/node": "24.10.1",
- "@vitest/coverage-v8": "4.0.13",
+ "@types/node": "24.10.4",
+ "@vitest/coverage-v8": "4.0.15",
"mdast-util-to-string": "4.0.0",
"remark": "15.0.1",
"remark-parse": "11.0.0",
"typescript": "5.9.3",
"unified": "11.0.5",
- "vite": "7.2.4",
+ "vite": "7.3.0",
"vite-node": "5.2.0",
- "vitest": "4.0.13"
+ "vitest": "4.0.15"
}
}
diff --git a/scripts/tarball.mjs b/scripts/tarball.mjs
index fddbe3b04a..d1fe4de4f5 100644
--- a/scripts/tarball.mjs
+++ b/scripts/tarball.mjs
@@ -3,11 +3,10 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { createWriteStream } from 'node:fs';
+import { createWriteStream, promises as fsp } from 'node:fs';
import { mkdir } from 'node:fs/promises';
import { resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
-import glob from 'fast-glob';
import walk from 'ignore-walk';
import { Pack } from 'tar/pack';
import meta from '../package.json' with { type: "json" };
@@ -25,7 +24,7 @@ export default async function build() {
const pack = new Pack({ cwd, gzip: true });
const patterns = await walk({ path: cwd, ignoreFiles: ['.gitignore'] });
- for await (const entry of glob.stream(patterns, { cwd, ignore, dot: true })) {
+ for await (const entry of fsp.glob(patterns, { cwd, ignore, dot: true })) {
pack.add(entry);
}