From f27511a5364aae33da4d24ef2ea1683996ac5522 Mon Sep 17 00:00:00 2001
From: CookieSource <36531905+CookieSource@users.noreply.github.com>
Date: Tue, 13 Jan 2026 18:47:24 +0100
Subject: [PATCH 01/29] Add GitHub Action for LanguageTool on PRs
---
.github/workflows/languagetool-pr.yml | 77 +++++++++++++++++++++++++++
1 file changed, 77 insertions(+)
create mode 100644 .github/workflows/languagetool-pr.yml
diff --git a/.github/workflows/languagetool-pr.yml b/.github/workflows/languagetool-pr.yml
new file mode 100644
index 00000000..f526a8d5
--- /dev/null
+++ b/.github/workflows/languagetool-pr.yml
@@ -0,0 +1,77 @@
+name: LanguageTool (PR)
+
+on:
+ pull_request:
+ types: [opened, synchronize, reopened, ready_for_review]
+
+jobs:
+ languagetool:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Set up Java
+ uses: actions/setup-java@v4
+ with:
+ distribution: temurin
+ java-version: "17"
+
+ - name: Download LanguageTool
+ run: |
+ set -euo pipefail
+ LT_VERSION="6.4"
+ curl -fsSL -o LT.zip "https://languagetool.org/download/LanguageTool-${LT_VERSION}.zip"
+ unzip -q LT.zip
+ echo "LT_DIR=LanguageTool-${LT_VERSION}" >> "$GITHUB_ENV"
+
+ - name: Run LanguageTool on changed files
+ env:
+ BASE_SHA: ${{ github.event.pull_request.base.sha }}
+ HEAD_SHA: ${{ github.event.pull_request.head.sha }}
+ run: |
+ set -euo pipefail
+
+ echo "Base: $BASE_SHA"
+ echo "Head: $HEAD_SHA"
+
+ # Adjust file types as you like:
+ mapfile -t FILES < <(git diff --name-only "$BASE_SHA" "$HEAD_SHA" \
+ | grep -E '\.(md|rst|txt)$' || true)
+
+ if [ "${#FILES[@]}" -eq 0 ]; then
+ echo "No matching files changed. Skipping."
+ exit 0
+ fi
+
+ echo "Files to check:"
+ printf ' - %s\n' "${FILES[@]}"
+
+ JAR="$(ls -1 "$LT_DIR"/languagetool-commandline.jar)"
+
+ # Pick your language here:
+ LANG="en-US"
+
+ issues=0
+ for f in "${FILES[@]}"; do
+ echo "-----"
+ echo "Checking: $f"
+ # LanguageTool returns 0 even with matches, so we count output ourselves.
+ out="$(java -jar "$JAR" -l "$LANG" "$f" || true)"
+ if [ -n "$out" ]; then
+ issues=1
+ echo "$out"
+ else
+ echo "OK"
+ fi
+ done
+
+ if [ "$issues" -ne 0 ]; then
+ echo "LanguageTool found issues."
+ exit 1
+ fi
+
+ echo "No LanguageTool issues found."
From 650be5834d65ffbdc791f8c84f0079ac9b698160 Mon Sep 17 00:00:00 2001
From: CookieSource <36531905+CookieSource@users.noreply.github.com>
Date: Tue, 13 Jan 2026 18:47:50 +0100
Subject: [PATCH 02/29] Add support for .mdx files in language tool workflow
---
.github/workflows/languagetool-pr.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/languagetool-pr.yml b/.github/workflows/languagetool-pr.yml
index f526a8d5..27ede8bd 100644
--- a/.github/workflows/languagetool-pr.yml
+++ b/.github/workflows/languagetool-pr.yml
@@ -40,7 +40,7 @@ jobs:
# Adjust file types as you like:
mapfile -t FILES < <(git diff --name-only "$BASE_SHA" "$HEAD_SHA" \
- | grep -E '\.(md|rst|txt)$' || true)
+ | grep -E '\.(md|rst|txt|mdx)$' || true)
if [ "${#FILES[@]}" -eq 0 ]; then
echo "No matching files changed. Skipping."
From dc77791ef81a5fc3ef6ee3196750de2439a0871f Mon Sep 17 00:00:00 2001
From: CookieSource <36531905+CookieSource@users.noreply.github.com>
Date: Tue, 13 Jan 2026 18:51:21 +0100
Subject: [PATCH 03/29] Delete .github/workflows/deploy.yml
---
.github/workflows/deploy.yml | 43 ------------------------------------
1 file changed, 43 deletions(-)
delete mode 100644 .github/workflows/deploy.yml
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
deleted file mode 100644
index f9fa42a3..00000000
--- a/.github/workflows/deploy.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-name: Deploy to GitHub Pages
-
-on:
- # Trigger the workflow every time you push to the `main` branch
- # Using a different branch name? Replace `main` with your branch’s name
- push:
- branches: [ main ]
- # Allows you to run this workflow manually from the Actions tab on GitHub.
- workflow_dispatch:
-
-# Allow this job to clone the repo and create a page deployment
-permissions:
- contents: read
- pages: write
- id-token: write
-
-jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout your repository using git
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
- - name: Install, build, and upload your site
- uses: withastro/action@v3
- with:
- path: . # The root location of your Astro project inside the repository. (optional)
- node-version: 20 # The specific version of Node that should be used to build your site. Defaults to 20. (optional)
- package-manager: npm # The Node package manager that should be used to install dependencies and build your site. Automatically detected based on your lockfile. (optional)
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- deploy:
- needs: build
- runs-on: ubuntu-latest
- environment:
- name: github-pages
- url: ${{ steps.deployment.outputs.page_url }}
- steps:
- - name: Deploy to GitHub Pages
- id: deployment
- uses: actions/deploy-pages@v4
From c00b21e6dcc5301ac7cb19a8a57d44439878776f Mon Sep 17 00:00:00 2001
From: CookieSource <36531905+CookieSource@users.noreply.github.com>
Date: Tue, 13 Jan 2026 18:58:38 +0100
Subject: [PATCH 04/29] Refactor LanguageTool workflow for clarity and
efficiency
Updated the LanguageTool GitHub Actions workflow to improve file type checks and output handling.
---
.github/workflows/languagetool-pr.yml | 36 +++++++++++++++++++++------
1 file changed, 29 insertions(+), 7 deletions(-)
diff --git a/.github/workflows/languagetool-pr.yml b/.github/workflows/languagetool-pr.yml
index 27ede8bd..bea33e75 100644
--- a/.github/workflows/languagetool-pr.yml
+++ b/.github/workflows/languagetool-pr.yml
@@ -28,7 +28,7 @@ jobs:
unzip -q LT.zip
echo "LT_DIR=LanguageTool-${LT_VERSION}" >> "$GITHUB_ENV"
- - name: Run LanguageTool on changed files
+ - name: Run LanguageTool on changed PR files (cleaned)
env:
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
@@ -38,9 +38,9 @@ jobs:
echo "Base: $BASE_SHA"
echo "Head: $HEAD_SHA"
- # Adjust file types as you like:
+ # File types to check (add/remove as needed)
mapfile -t FILES < <(git diff --name-only "$BASE_SHA" "$HEAD_SHA" \
- | grep -E '\.(md|rst|txt|mdx)$' || true)
+ | grep -E '\.(md|mdx|rst|txt)$' || true)
if [ "${#FILES[@]}" -eq 0 ]; then
echo "No matching files changed. Skipping."
@@ -51,16 +51,38 @@ jobs:
printf ' - %s\n' "${FILES[@]}"
JAR="$(ls -1 "$LT_DIR"/languagetool-commandline.jar)"
-
- # Pick your language here:
LANG="en-US"
issues=0
+
for f in "${FILES[@]}"; do
echo "-----"
echo "Checking: $f"
- # LanguageTool returns 0 even with matches, so we count output ourselves.
- out="$(java -jar "$JAR" -l "$LANG" "$f" || true)"
+
+ tmp="$(mktemp)"
+
+ # Keep "nearly all" errors but remove the biggest source of noise:
+ # - YAML frontmatter at top of file (--- ... ---)
+ # - fenced code blocks (``` ... ```)
+ #
+ # Everything else is checked (including normal prose in MDX).
+ awk '
+ BEGIN { fm=0; code=0; }
+ NR==1 && $0=="---" { fm=1; next }
+ fm==1 && $0=="---" { fm=0; next }
+ fm==1 { next }
+
+ /^```/ { code = !code; next }
+ code==1 { next }
+
+ { print }
+ ' "$f" > "$tmp"
+
+ # LanguageTool CLI prints findings to stdout; it typically exits 0 even with findings,
+ # so we detect findings by whether output is non-empty.
+ out="$(java -jar "$JAR" -l "$LANG" "$tmp" || true)"
+ rm -f "$tmp"
+
if [ -n "$out" ]; then
issues=1
echo "$out"
From 072c78e347a43c9dc7fae3a572e7855c0ea03a6b Mon Sep 17 00:00:00 2001
From: CookieSource <36531905+CookieSource@users.noreply.github.com>
Date: Tue, 13 Jan 2026 19:07:17 +0100
Subject: [PATCH 05/29] Update languagetool-pr.yml
---
.github/workflows/languagetool-pr.yml | 115 ++++++++++++++++++++------
1 file changed, 91 insertions(+), 24 deletions(-)
diff --git a/.github/workflows/languagetool-pr.yml b/.github/workflows/languagetool-pr.yml
index bea33e75..1865d70f 100644
--- a/.github/workflows/languagetool-pr.yml
+++ b/.github/workflows/languagetool-pr.yml
@@ -4,6 +4,10 @@ on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
+permissions:
+ contents: read
+ pull-requests: write
+
jobs:
languagetool:
runs-on: ubuntu-latest
@@ -28,17 +32,19 @@ jobs:
unzip -q LT.zip
echo "LT_DIR=LanguageTool-${LT_VERSION}" >> "$GITHUB_ENV"
- - name: Run LanguageTool on changed PR files (cleaned)
+ - name: Run LanguageTool on changed PR files + comment summary
env:
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ PR_NUMBER: ${{ github.event.pull_request.number }}
+ REPO: ${{ github.repository }}
run: |
set -euo pipefail
echo "Base: $BASE_SHA"
echo "Head: $HEAD_SHA"
- # File types to check (add/remove as needed)
mapfile -t FILES < <(git diff --name-only "$BASE_SHA" "$HEAD_SHA" \
| grep -E '\.(md|mdx|rst|txt)$' || true)
@@ -54,6 +60,8 @@ jobs:
LANG="en-US"
issues=0
+ REPORT_FILE="$(mktemp)"
+ : > "$REPORT_FILE"
for f in "${FILES[@]}"; do
echo "-----"
@@ -61,39 +69,98 @@ jobs:
tmp="$(mktemp)"
- # Keep "nearly all" errors but remove the biggest source of noise:
- # - YAML frontmatter at top of file (--- ... ---)
- # - fenced code blocks (``` ... ```)
- #
- # Everything else is checked (including normal prose in MDX).
- awk '
- BEGIN { fm=0; code=0; }
- NR==1 && $0=="---" { fm=1; next }
- fm==1 && $0=="---" { fm=0; next }
- fm==1 { next }
-
- /^```/ { code = !code; next }
- code==1 { next }
-
- { print }
- ' "$f" > "$tmp"
-
- # LanguageTool CLI prints findings to stdout; it typically exits 0 even with findings,
- # so we detect findings by whether output is non-empty.
+ # Robust preprocessing (won't fail the job if it errors; falls back to original file)
+ if ! python3 - "$f" > "$tmp" 2>/dev/null << 'PY'
+import re, sys
+path = sys.argv[1]
+text = open(path, "r", encoding="utf-8", errors="replace").read()
+
+# Remove YAML frontmatter at top
+if text.startswith("---\n"):
+ m = re.match(r"^---\n.*?\n---\n", text, flags=re.S)
+ if m:
+ text = text[m.end():]
+
+# Remove fenced code blocks
+text = re.sub(r"^```.*?$.*?^```.*?$", "\n", text, flags=re.S | re.M)
+
+# Remove inline code spans
+text = re.sub(r"`[^`]*`", " ", text)
+
+# Neutralize common technical tokens (paths, filenames/exts, long identifiers)
+text = re.sub(r"\b(?:~?/)?[A-Za-z0-9._-]+(?:/[A-Za-z0-9._-]+)+\b", " PATH ", text)
+
+exts = r"(so|a|o|dylib|dll|exe|bin|iso|img|qcow2|raw|tar|gz|bz2|xz|zip|7z|deb|rpm|jar|war|py|js|ts|jsx|tsx|java|c|cc|cpp|h|hpp|rs|go|rb|php|sh|yaml|yml|toml|json|xml|md|mdx|rst|txt)"
+text = re.sub(rf"\b[A-Za-z0-9._-]+\.(?:{exts})\b", " FILE ", text, flags=re.I)
+
+text = re.sub(r"\b[A-Za-z][A-Za-z0-9_-]{14,}\b", " IDENT ", text)
+
+text = re.sub(r"[ \t]+", " ", text)
+sys.stdout.write(text)
+PY
+ then
+ cp "$f" "$tmp"
+ fi
+
out="$(java -jar "$JAR" -l "$LANG" "$tmp" || true)"
rm -f "$tmp"
if [ -n "$out" ]; then
issues=1
echo "$out"
+ {
+ echo "FILE: $f"
+ echo "$out"
+ echo
+ } >> "$REPORT_FILE"
else
echo "OK"
fi
done
+ # Build PR comment body (upsert by marker)
+ MARKER=""
+
if [ "$issues" -ne 0 ]; then
- echo "LanguageTool found issues."
- exit 1
+ BODY_FILE="$(mktemp)"
+ {
+ echo "$MARKER"
+ echo "### LanguageTool findings"
+ echo
+ echo "_Checked files changed in this PR (frontmatter + code blocks removed; inline code stripped)._"
+ echo
+ echo '```'
+ cat "$REPORT_FILE"
+ echo '```'
+ } > "$BODY_FILE"
+
+ # Find existing comment with marker (if any) and update it; otherwise create a new one
+ COMMENTS_JSON="$(mktemp)"
+ gh api "repos/$REPO/issues/$PR_NUMBER/comments?per_page=100" > "$COMMENTS_JSON"
+
+ COMMENT_ID="$(python3 - << 'PY'
+import json, sys
+data = json.load(open(sys.argv[1], "r", encoding="utf-8"))
+for c in data:
+ if "" in (c.get("body") or ""):
+ print(c["id"])
+ break
+PY
+ "$COMMENTS_JSON")"
+
+ if [ -n "${COMMENT_ID:-}" ]; then
+ gh api -X PATCH "repos/$REPO/issues/comments/$COMMENT_ID" -f body="$(cat "$BODY_FILE")" >/dev/null
+ echo "Updated existing LanguageTool comment."
+ else
+ gh api -X POST "repos/$REPO/issues/$PR_NUMBER/comments" -f body="$(cat "$BODY_FILE")" >/dev/null
+ echo "Posted new LanguageTool comment."
+ fi
+ else
+ echo "No LanguageTool issues found."
fi
- echo "No LanguageTool issues found."
+ rm -f "$REPORT_FILE" || true
+
+ if [ "$issues" -ne 0 ]; then
+ exit 1
+ fi
From 2c9d531234cd5ce14bacda72703df0658f0f4eb4 Mon Sep 17 00:00:00 2001
From: CookieSource <36531905+CookieSource@users.noreply.github.com>
Date: Tue, 13 Jan 2026 19:10:47 +0100
Subject: [PATCH 06/29] Update languagetool-pr.yml
---
.github/workflows/languagetool-pr.yml | 103 ++++++++++++++++----------
1 file changed, 64 insertions(+), 39 deletions(-)
diff --git a/.github/workflows/languagetool-pr.yml b/.github/workflows/languagetool-pr.yml
index 1865d70f..b21a5321 100644
--- a/.github/workflows/languagetool-pr.yml
+++ b/.github/workflows/languagetool-pr.yml
@@ -1,8 +1,10 @@
-name: LanguageTool (PR)
+name: LanguageTool
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
+ push:
+ branches: ["**"]
permissions:
contents: read
@@ -32,20 +34,35 @@ jobs:
unzip -q LT.zip
echo "LT_DIR=LanguageTool-${LT_VERSION}" >> "$GITHUB_ENV"
- - name: Run LanguageTool on changed PR files + comment summary
+ - name: Run LanguageTool (changed files) and comment on PR
env:
- BASE_SHA: ${{ github.event.pull_request.base.sha }}
- HEAD_SHA: ${{ github.event.pull_request.head.sha }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- PR_NUMBER: ${{ github.event.pull_request.number }}
REPO: ${{ github.repository }}
+ EVENT_NAME: ${{ github.event_name }}
+ PR_NUMBER: ${{ github.event.pull_request.number }}
+ BASE_SHA: ${{ github.event.pull_request.base.sha }}
+ HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: |
set -euo pipefail
- echo "Base: $BASE_SHA"
- echo "Head: $HEAD_SHA"
+ # Only comment when this run is for a PR event
+ IS_PR=0
+ if [ "$EVENT_NAME" = "pull_request" ]; then
+ IS_PR=1
+ fi
+
+ if [ "$IS_PR" -eq 1 ]; then
+ echo "Base: $BASE_SHA"
+ echo "Head: $HEAD_SHA"
+ DIFF_BASE="$BASE_SHA"
+ DIFF_HEAD="$HEAD_SHA"
+ else
+ echo "Push run: comparing against previous commit"
+ DIFF_BASE="${GITHUB_SHA}^"
+ DIFF_HEAD="${GITHUB_SHA}"
+ fi
- mapfile -t FILES < <(git diff --name-only "$BASE_SHA" "$HEAD_SHA" \
+ mapfile -t FILES < <(git diff --name-only "$DIFF_BASE" "$DIFF_HEAD" \
| grep -E '\.(md|mdx|rst|txt)$' || true)
if [ "${#FILES[@]}" -eq 0 ]; then
@@ -69,17 +86,17 @@ jobs:
tmp="$(mktemp)"
- # Robust preprocessing (won't fail the job if it errors; falls back to original file)
- if ! python3 - "$f" > "$tmp" 2>/dev/null << 'PY'
+ # Preprocess with Python. If preprocessing fails, fall back to the original file.
+ if python3 - "$f" > "$tmp" 2>/dev/null <<'PY'
import re, sys
path = sys.argv[1]
text = open(path, "r", encoding="utf-8", errors="replace").read()
# Remove YAML frontmatter at top
if text.startswith("---\n"):
- m = re.match(r"^---\n.*?\n---\n", text, flags=re.S)
- if m:
- text = text[m.end():]
+ m = re.match(r"^---\n.*?\n---\n", text, flags=re.S)
+ if m:
+ text = text[m.end():]
# Remove fenced code blocks
text = re.sub(r"^```.*?$.*?^```.*?$", "\n", text, flags=re.S | re.M)
@@ -87,18 +104,22 @@ text = re.sub(r"^```.*?$.*?^```.*?$", "\n", text, flags=re.S | re.M)
# Remove inline code spans
text = re.sub(r"`[^`]*`", " ", text)
-# Neutralize common technical tokens (paths, filenames/exts, long identifiers)
+# Neutralize path-ish tokens
text = re.sub(r"\b(?:~?/)?[A-Za-z0-9._-]+(?:/[A-Za-z0-9._-]+)+\b", " PATH ", text)
+# Neutralize common filename tokens with extensions
exts = r"(so|a|o|dylib|dll|exe|bin|iso|img|qcow2|raw|tar|gz|bz2|xz|zip|7z|deb|rpm|jar|war|py|js|ts|jsx|tsx|java|c|cc|cpp|h|hpp|rs|go|rb|php|sh|yaml|yml|toml|json|xml|md|mdx|rst|txt)"
text = re.sub(rf"\b[A-Za-z0-9._-]+\.(?:{exts})\b", " FILE ", text, flags=re.I)
+# Neutralize very long identifier-ish tokens
text = re.sub(r"\b[A-Za-z][A-Za-z0-9_-]{14,}\b", " IDENT ", text)
text = re.sub(r"[ \t]+", " ", text)
sys.stdout.write(text)
PY
then
+ :
+ else
cp "$f" "$tmp"
fi
@@ -118,35 +139,43 @@ PY
fi
done
- # Build PR comment body (upsert by marker)
- MARKER=""
-
- if [ "$issues" -ne 0 ]; then
+ # If PR: upsert a single comment with a marker
+ if [ "$IS_PR" -eq 1 ]; then
+ MARKER=""
BODY_FILE="$(mktemp)"
- {
- echo "$MARKER"
- echo "### LanguageTool findings"
- echo
- echo "_Checked files changed in this PR (frontmatter + code blocks removed; inline code stripped)._"
- echo
- echo '```'
- cat "$REPORT_FILE"
- echo '```'
- } > "$BODY_FILE"
-
- # Find existing comment with marker (if any) and update it; otherwise create a new one
+
+ if [ "$issues" -ne 0 ]; then
+ {
+ echo "$MARKER"
+ echo "### LanguageTool findings"
+ echo
+ echo "_Checked files changed in this PR (frontmatter + fenced code removed; inline code stripped)._"
+ echo
+ echo '```'
+ cat "$REPORT_FILE"
+ echo '```'
+ } > "$BODY_FILE"
+ else
+ {
+ echo "$MARKER"
+ echo "### LanguageTool findings"
+ echo
+ echo "✅ No issues found in changed files."
+ } > "$BODY_FILE"
+ fi
+
COMMENTS_JSON="$(mktemp)"
gh api "repos/$REPO/issues/$PR_NUMBER/comments?per_page=100" > "$COMMENTS_JSON"
- COMMENT_ID="$(python3 - << 'PY'
+ COMMENT_ID="$(python3 - "$COMMENTS_JSON" <<'PY'
import json, sys
data = json.load(open(sys.argv[1], "r", encoding="utf-8"))
for c in data:
- if "" in (c.get("body") or ""):
- print(c["id"])
- break
+ if "" in (c.get("body") or ""):
+ print(c["id"])
+ break
PY
- "$COMMENTS_JSON")"
+ )"
if [ -n "${COMMENT_ID:-}" ]; then
gh api -X PATCH "repos/$REPO/issues/comments/$COMMENT_ID" -f body="$(cat "$BODY_FILE")" >/dev/null
@@ -155,12 +184,8 @@ PY
gh api -X POST "repos/$REPO/issues/$PR_NUMBER/comments" -f body="$(cat "$BODY_FILE")" >/dev/null
echo "Posted new LanguageTool comment."
fi
- else
- echo "No LanguageTool issues found."
fi
- rm -f "$REPORT_FILE" || true
-
if [ "$issues" -ne 0 ]; then
exit 1
fi
From 31143113b8a1701f265c075516a12200a19cc762 Mon Sep 17 00:00:00 2001
From: CookieSource <36531905+CookieSource@users.noreply.github.com>
Date: Tue, 13 Jan 2026 19:12:54 +0100
Subject: [PATCH 07/29] Update LanguageTool workflow for PR comments
---
.github/workflows/languagetool-pr.yml | 129 ++++++++++++--------------
1 file changed, 59 insertions(+), 70 deletions(-)
diff --git a/.github/workflows/languagetool-pr.yml b/.github/workflows/languagetool-pr.yml
index b21a5321..92a5f038 100644
--- a/.github/workflows/languagetool-pr.yml
+++ b/.github/workflows/languagetool-pr.yml
@@ -1,10 +1,8 @@
-name: LanguageTool
+name: LanguageTool (PR)
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
- push:
- branches: ["**"]
permissions:
contents: read
@@ -13,7 +11,6 @@ permissions:
jobs:
languagetool:
runs-on: ubuntu-latest
-
steps:
- name: Checkout
uses: actions/checkout@v4
@@ -34,35 +31,20 @@ jobs:
unzip -q LT.zip
echo "LT_DIR=LanguageTool-${LT_VERSION}" >> "$GITHUB_ENV"
- - name: Run LanguageTool (changed files) and comment on PR
+ - name: Run LanguageTool on changed PR files + comment summary
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REPO: ${{ github.repository }}
- EVENT_NAME: ${{ github.event_name }}
PR_NUMBER: ${{ github.event.pull_request.number }}
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: |
set -euo pipefail
- # Only comment when this run is for a PR event
- IS_PR=0
- if [ "$EVENT_NAME" = "pull_request" ]; then
- IS_PR=1
- fi
-
- if [ "$IS_PR" -eq 1 ]; then
- echo "Base: $BASE_SHA"
- echo "Head: $HEAD_SHA"
- DIFF_BASE="$BASE_SHA"
- DIFF_HEAD="$HEAD_SHA"
- else
- echo "Push run: comparing against previous commit"
- DIFF_BASE="${GITHUB_SHA}^"
- DIFF_HEAD="${GITHUB_SHA}"
- fi
+ echo "Base: $BASE_SHA"
+ echo "Head: $HEAD_SHA"
- mapfile -t FILES < <(git diff --name-only "$DIFF_BASE" "$DIFF_HEAD" \
+ mapfile -t FILES < <(git diff --name-only "$BASE_SHA" "$HEAD_SHA" \
| grep -E '\.(md|mdx|rst|txt)$' || true)
if [ "${#FILES[@]}" -eq 0 ]; then
@@ -76,19 +58,11 @@ jobs:
JAR="$(ls -1 "$LT_DIR"/languagetool-commandline.jar)"
LANG="en-US"
- issues=0
- REPORT_FILE="$(mktemp)"
- : > "$REPORT_FILE"
-
- for f in "${FILES[@]}"; do
- echo "-----"
- echo "Checking: $f"
-
- tmp="$(mktemp)"
-
- # Preprocess with Python. If preprocessing fails, fall back to the original file.
- if python3 - "$f" > "$tmp" 2>/dev/null <<'PY'
+ # Write a preprocessor script to a file (avoids YAML/heredoc indentation issues)
+ PREPROCESS="$(mktemp)"
+ cat > "$PREPROCESS" <<'PY'
import re, sys
+
path = sys.argv[1]
text = open(path, "r", encoding="utf-8", errors="replace").read()
@@ -117,7 +91,19 @@ text = re.sub(r"\b[A-Za-z][A-Za-z0-9_-]{14,}\b", " IDENT ", text)
text = re.sub(r"[ \t]+", " ", text)
sys.stdout.write(text)
PY
- then
+
+ issues=0
+ REPORT_FILE="$(mktemp)"
+ : > "$REPORT_FILE"
+
+ for f in "${FILES[@]}"; do
+ echo "-----"
+ echo "Checking: $f"
+
+ tmp="$(mktemp)"
+
+ # Preprocess; if it fails, fall back to original file (but keep the workflow running)
+ if python3 "$PREPROCESS" "$f" > "$tmp" 2>/dev/null; then
:
else
cp "$f" "$tmp"
@@ -139,35 +125,36 @@ PY
fi
done
- # If PR: upsert a single comment with a marker
- if [ "$IS_PR" -eq 1 ]; then
- MARKER=""
- BODY_FILE="$(mktemp)"
+ rm -f "$PREPROCESS" || true
- if [ "$issues" -ne 0 ]; then
- {
- echo "$MARKER"
- echo "### LanguageTool findings"
- echo
- echo "_Checked files changed in this PR (frontmatter + fenced code removed; inline code stripped)._"
- echo
- echo '```'
- cat "$REPORT_FILE"
- echo '```'
- } > "$BODY_FILE"
- else
- {
- echo "$MARKER"
- echo "### LanguageTool findings"
- echo
- echo "✅ No issues found in changed files."
- } > "$BODY_FILE"
- fi
+ # Upsert a single PR comment (marker-based)
+ MARKER=""
+ BODY_FILE="$(mktemp)"
+
+ if [ "$issues" -ne 0 ]; then
+ {
+ echo "$MARKER"
+ echo "### LanguageTool findings"
+ echo
+ echo "_Checked files changed in this PR (frontmatter + fenced code removed; inline code stripped)._"
+ echo
+ echo '```'
+ cat "$REPORT_FILE"
+ echo '```'
+ } > "$BODY_FILE"
+ else
+ {
+ echo "$MARKER"
+ echo "### LanguageTool findings"
+ echo
+ echo "✅ No issues found in changed files."
+ } > "$BODY_FILE"
+ fi
- COMMENTS_JSON="$(mktemp)"
- gh api "repos/$REPO/issues/$PR_NUMBER/comments?per_page=100" > "$COMMENTS_JSON"
+ COMMENTS_JSON="$(mktemp)"
+ gh api "repos/$REPO/issues/$PR_NUMBER/comments?per_page=100 exporting=false" > "$COMMENTS_JSON"
- COMMENT_ID="$(python3 - "$COMMENTS_JSON" <<'PY'
+ COMMENT_ID="$(python3 - "$COMMENTS_JSON" <<'PY'
import json, sys
data = json.load(open(sys.argv[1], "r", encoding="utf-8"))
for c in data:
@@ -175,17 +162,19 @@ for c in data:
print(c["id"])
break
PY
- )"
+ )"
- if [ -n "${COMMENT_ID:-}" ]; then
- gh api -X PATCH "repos/$REPO/issues/comments/$COMMENT_ID" -f body="$(cat "$BODY_FILE")" >/dev/null
- echo "Updated existing LanguageTool comment."
- else
- gh api -X POST "repos/$REPO/issues/$PR_NUMBER/comments" -f body="$(cat "$BODY_FILE")" >/dev/null
- echo "Posted new LanguageTool comment."
- fi
+ if [ -n "${COMMENT_ID:-}" ]; then
+ gh api -X PATCH "repos/$REPO/issues/comments/$COMMENT_ID" -f body="$(cat "$BODY_FILE")" >/dev/null
+ echo "Updated existing LanguageTool comment."
+ else
+ gh api -X POST "repos/$REPO/issues/$PR_NUMBER/comments" -f body="$(cat "$BODY_FILE")" >/dev/null
+ echo "Posted new LanguageTool comment."
fi
+ rm -f "$COMMENTS_JSON" "$BODY_FILE" "$REPORT_FILE" || true
+
+ # Fail the check if there were findings (remove this block if you want advisory-only)
if [ "$issues" -ne 0 ]; then
exit 1
fi
From 1ff1ed4034b4f735c75548429bcb540403ee39ae Mon Sep 17 00:00:00 2001
From: CookieSource <36531905+CookieSource@users.noreply.github.com>
Date: Tue, 13 Jan 2026 19:22:37 +0100
Subject: [PATCH 08/29] Refactor LanguageTool workflow for PR review
Updated the LanguageTool workflow to trigger on pull request target events and added rerun functionality via issue comments.
---
.github/workflows/languagetool-pr.yml | 290 ++++++++++++--------------
1 file changed, 133 insertions(+), 157 deletions(-)
diff --git a/.github/workflows/languagetool-pr.yml b/.github/workflows/languagetool-pr.yml
index 92a5f038..9542ed02 100644
--- a/.github/workflows/languagetool-pr.yml
+++ b/.github/workflows/languagetool-pr.yml
@@ -1,180 +1,156 @@
-name: LanguageTool (PR)
+name: LanguageTool (PR review)
on:
- pull_request:
- types: [opened, synchronize, reopened, ready_for_review]
+ # Run once when the PR is opened/re-opened.
+ pull_request_target:
+ types: [opened, reopened, labeled]
+
+ # Allow maintainers to rerun by commenting "/languagetool"
+ issue_comment:
+ types: [created]
permissions:
contents: read
pull-requests: write
+ issues: write
+
+concurrency:
+ group: languagetool-${{ github.event.pull_request.number || github.event.issue.number || github.run_id }}
+ cancel-in-progress: true
+
+env:
+ LT_LANGUAGE: en-US
+ RERUN_LABEL: languagetool:run
jobs:
+ # Comment command -> adds a label -> label event triggers the real run
+ rerun_on_comment:
+ if: |
+ github.event_name == 'issue_comment' &&
+ github.event.issue.pull_request &&
+ contains(github.event.comment.body, '/languagetool') &&
+ (github.event.comment.author_association == 'MEMBER' ||
+ github.event.comment.author_association == 'OWNER' ||
+ github.event.comment.author_association == 'COLLABORATOR')
+ runs-on: ubuntu-latest
+ steps:
+ - name: Add rerun label to PR
+ uses: actions/github-script@v7
+ with:
+ script: |
+ const label = process.env.RERUN_LABEL;
+ const owner = context.repo.owner;
+ const repo = context.repo.repo;
+ const issue_number = context.issue.number; // PR number for issue_comment
+
+ // Ensure label exists (create if missing)
+ try {
+ await github.rest.issues.getLabel({ owner, repo, name: label });
+ } catch (e) {
+ await github.rest.issues.createLabel({
+ owner,
+ repo,
+ name: label,
+ color: '0e8a16',
+ description: 'Rerun LanguageTool on this PR'
+ });
+ }
+
+ await github.rest.issues.addLabels({
+ owner,
+ repo,
+ issue_number,
+ labels: [label]
+ });
+
languagetool:
+ if: |
+ github.event_name == 'pull_request_target' &&
+ (
+ github.event.action == 'opened' ||
+ github.event.action == 'reopened' ||
+ (github.event.action == 'labeled' && github.event.label.name == 'languagetool:run')
+ )
runs-on: ubuntu-latest
+
steps:
- - name: Checkout
+ - name: Checkout PR (head SHA)
uses: actions/checkout@v4
with:
+ ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
- - name: Set up Java
- uses: actions/setup-java@v4
- with:
- distribution: temurin
- java-version: "17"
-
- - name: Download LanguageTool
+ - name: Build LanguageTool server image with custom dictionary
+ shell: bash
run: |
set -euo pipefail
- LT_VERSION="6.4"
- curl -fsSL -o LT.zip "https://languagetool.org/download/LanguageTool-${LT_VERSION}.zip"
- unzip -q LT.zip
- echo "LT_DIR=LanguageTool-${LT_VERSION}" >> "$GITHUB_ENV"
-
- - name: Run LanguageTool on changed PR files + comment summary
- env:
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- REPO: ${{ github.repository }}
- PR_NUMBER: ${{ github.event.pull_request.number }}
- BASE_SHA: ${{ github.event.pull_request.base.sha }}
- HEAD_SHA: ${{ github.event.pull_request.head.sha }}
+
+ WORDS_DIR=".github/languagetool"
+ SPELLING_FILE="$WORDS_DIR/spelling.en.txt"
+ IGNORE_FILE="$WORDS_DIR/ignore.en.txt"
+
+ mkdir -p "$WORDS_DIR"
+ test -f "$SPELLING_FILE" || : > "$SPELLING_FILE"
+ test -f "$IGNORE_FILE" || : > "$IGNORE_FILE"
+
+ # Safety cap (avoid someone committing a gigantic word list)
+ head -n 2000 "$SPELLING_FILE" > /tmp/spelling_additions.txt
+ head -n 2000 "$IGNORE_FILE" > /tmp/ignore_additions.txt
+
+ mkdir -p /tmp/lt
+ cp /tmp/spelling_additions.txt /tmp/lt/spelling_additions.txt
+ cp /tmp/ignore_additions.txt /tmp/lt/ignore_additions.txt
+
+ cat > /tmp/lt/Dockerfile <<'EOF'
+ FROM erikvl87/languagetool:latest
+ USER root
+ COPY spelling_additions.txt /tmp/spelling_additions.txt
+ COPY ignore_additions.txt /tmp/ignore_additions.txt
+ RUN set -e; \
+ if [ -s /tmp/spelling_additions.txt ]; then (echo; cat /tmp/spelling_additions.txt) >> org/languagetool/resource/en/hunspell/spelling.txt; fi; \
+ if [ -s /tmp/ignore_additions.txt ]; then (echo; cat /tmp/ignore_additions.txt) >> org/languagetool/resource/en/hunspell/ignore.txt; fi
+ USER languagetool
+ EOF
+
+ docker build -t lt-custom /tmp/lt
+
+ - name: Start LanguageTool server
+ shell: bash
run: |
set -euo pipefail
+ docker run -d --name languagetool -p 8010:8010 lt-custom
- echo "Base: $BASE_SHA"
- echo "Head: $HEAD_SHA"
-
- mapfile -t FILES < <(git diff --name-only "$BASE_SHA" "$HEAD_SHA" \
- | grep -E '\.(md|mdx|rst|txt)$' || true)
-
- if [ "${#FILES[@]}" -eq 0 ]; then
- echo "No matching files changed. Skipping."
- exit 0
- fi
-
- echo "Files to check:"
- printf ' - %s\n' "${FILES[@]}"
-
- JAR="$(ls -1 "$LT_DIR"/languagetool-commandline.jar)"
- LANG="en-US"
-
- # Write a preprocessor script to a file (avoids YAML/heredoc indentation issues)
- PREPROCESS="$(mktemp)"
- cat > "$PREPROCESS" <<'PY'
-import re, sys
-
-path = sys.argv[1]
-text = open(path, "r", encoding="utf-8", errors="replace").read()
-
-# Remove YAML frontmatter at top
-if text.startswith("---\n"):
- m = re.match(r"^---\n.*?\n---\n", text, flags=re.S)
- if m:
- text = text[m.end():]
-
-# Remove fenced code blocks
-text = re.sub(r"^```.*?$.*?^```.*?$", "\n", text, flags=re.S | re.M)
-
-# Remove inline code spans
-text = re.sub(r"`[^`]*`", " ", text)
-
-# Neutralize path-ish tokens
-text = re.sub(r"\b(?:~?/)?[A-Za-z0-9._-]+(?:/[A-Za-z0-9._-]+)+\b", " PATH ", text)
-
-# Neutralize common filename tokens with extensions
-exts = r"(so|a|o|dylib|dll|exe|bin|iso|img|qcow2|raw|tar|gz|bz2|xz|zip|7z|deb|rpm|jar|war|py|js|ts|jsx|tsx|java|c|cc|cpp|h|hpp|rs|go|rb|php|sh|yaml|yml|toml|json|xml|md|mdx|rst|txt)"
-text = re.sub(rf"\b[A-Za-z0-9._-]+\.(?:{exts})\b", " FILE ", text, flags=re.I)
-
-# Neutralize very long identifier-ish tokens
-text = re.sub(r"\b[A-Za-z][A-Za-z0-9_-]{14,}\b", " IDENT ", text)
-
-text = re.sub(r"[ \t]+", " ", text)
-sys.stdout.write(text)
-PY
-
- issues=0
- REPORT_FILE="$(mktemp)"
- : > "$REPORT_FILE"
-
- for f in "${FILES[@]}"; do
- echo "-----"
- echo "Checking: $f"
-
- tmp="$(mktemp)"
-
- # Preprocess; if it fails, fall back to original file (but keep the workflow running)
- if python3 "$PREPROCESS" "$f" > "$tmp" 2>/dev/null; then
- :
- else
- cp "$f" "$tmp"
- fi
-
- out="$(java -jar "$JAR" -l "$LANG" "$tmp" || true)"
- rm -f "$tmp"
-
- if [ -n "$out" ]; then
- issues=1
- echo "$out"
- {
- echo "FILE: $f"
- echo "$out"
- echo
- } >> "$REPORT_FILE"
- else
- echo "OK"
+ # Wait until the API is up
+ for i in {1..60}; do
+ if curl -fsS http://127.0.0.1:8010/v2/languages >/dev/null; then
+ exit 0
fi
+ sleep 1
done
- rm -f "$PREPROCESS" || true
-
- # Upsert a single PR comment (marker-based)
- MARKER=""
- BODY_FILE="$(mktemp)"
-
- if [ "$issues" -ne 0 ]; then
- {
- echo "$MARKER"
- echo "### LanguageTool findings"
- echo
- echo "_Checked files changed in this PR (frontmatter + fenced code removed; inline code stripped)._"
- echo
- echo '```'
- cat "$REPORT_FILE"
- echo '```'
- } > "$BODY_FILE"
- else
- {
- echo "$MARKER"
- echo "### LanguageTool findings"
- echo
- echo "✅ No issues found in changed files."
- } > "$BODY_FILE"
- fi
-
- COMMENTS_JSON="$(mktemp)"
- gh api "repos/$REPO/issues/$PR_NUMBER/comments?per_page=100 exporting=false" > "$COMMENTS_JSON"
-
- COMMENT_ID="$(python3 - "$COMMENTS_JSON" <<'PY'
-import json, sys
-data = json.load(open(sys.argv[1], "r", encoding="utf-8"))
-for c in data:
- if "" in (c.get("body") or ""):
- print(c["id"])
- break
-PY
- )"
-
- if [ -n "${COMMENT_ID:-}" ]; then
- gh api -X PATCH "repos/$REPO/issues/comments/$COMMENT_ID" -f body="$(cat "$BODY_FILE")" >/dev/null
- echo "Updated existing LanguageTool comment."
- else
- gh api -X POST "repos/$REPO/issues/$PR_NUMBER/comments" -f body="$(cat "$BODY_FILE")" >/dev/null
- echo "Posted new LanguageTool comment."
- fi
-
- rm -f "$COMMENTS_JSON" "$BODY_FILE" "$REPORT_FILE" || true
-
- # Fail the check if there were findings (remove this block if you want advisory-only)
- if [ "$issues" -ne 0 ]; then
- exit 1
- fi
+ echo "LanguageTool server did not start in time" >&2
+ docker logs languagetool || true
+ exit 1
+
+ - name: Run LanguageTool and comment suggestions on the PR
+ uses: reviewdog/action-languagetool@v1.23.0
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ reporter: github-pr-review
+ level: info
+ patterns: "**/*.md **/*.txt **/*.rst **/*.adoc"
+ language: ${{ env.LT_LANGUAGE }}
+ custom_api_endpoint: "http://127.0.0.1:8010"
+
+ - name: Remove rerun label (so maintainers can trigger again)
+ if: github.event.action == 'labeled' && github.event.label.name == 'languagetool:run'
+ continue-on-error: true
+ uses: actions/github-script@v7
+ with:
+ script: |
+ await github.rest.issues.removeLabel({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: context.payload.pull_request.number,
+ name: 'languagetool:run',
+ });
From fd877f3af2e43d39751454185980815871cf9427 Mon Sep 17 00:00:00 2001
From: CookieSource <36531905+CookieSource@users.noreply.github.com>
Date: Tue, 13 Jan 2026 19:31:28 +0100
Subject: [PATCH 09/29] Update languagetool-pr.yml
---
.github/workflows/languagetool-pr.yml | 224 ++++++++++++++------------
1 file changed, 122 insertions(+), 102 deletions(-)
diff --git a/.github/workflows/languagetool-pr.yml b/.github/workflows/languagetool-pr.yml
index 9542ed02..f67814bd 100644
--- a/.github/workflows/languagetool-pr.yml
+++ b/.github/workflows/languagetool-pr.yml
@@ -1,150 +1,166 @@
-name: LanguageTool (PR review)
+name: LanguageTool (reviewdog)
on:
- # Run once when the PR is opened/re-opened.
pull_request_target:
types: [opened, reopened, labeled]
-
- # Allow maintainers to rerun by commenting "/languagetool"
issue_comment:
types: [created]
permissions:
contents: read
pull-requests: write
- issues: write
concurrency:
- group: languagetool-${{ github.event.pull_request.number || github.event.issue.number || github.run_id }}
+ group: languagetool-${{ github.event.pull_request.number || github.event.issue.number }}
cancel-in-progress: true
-env:
- LT_LANGUAGE: en-US
- RERUN_LABEL: languagetool:run
-
jobs:
- # Comment command -> adds a label -> label event triggers the real run
- rerun_on_comment:
- if: |
- github.event_name == 'issue_comment' &&
- github.event.issue.pull_request &&
- contains(github.event.comment.body, '/languagetool') &&
- (github.event.comment.author_association == 'MEMBER' ||
- github.event.comment.author_association == 'OWNER' ||
- github.event.comment.author_association == 'COLLABORATOR')
+ languagetool:
runs-on: ubuntu-latest
+
steps:
- - name: Add rerun label to PR
+ - name: Decide whether to run + gather PR info
+ id: meta
uses: actions/github-script@v7
with:
script: |
- const label = process.env.RERUN_LABEL;
- const owner = context.repo.owner;
- const repo = context.repo.repo;
- const issue_number = context.issue.number; // PR number for issue_comment
-
- // Ensure label exists (create if missing)
- try {
- await github.rest.issues.getLabel({ owner, repo, name: label });
- } catch (e) {
- await github.rest.issues.createLabel({
- owner,
- repo,
- name: label,
- color: '0e8a16',
- description: 'Rerun LanguageTool on this PR'
+ const eventName = context.eventName;
+
+ async function getPerm(username) {
+ const res = await github.rest.repos.getCollaboratorPermissionLevel({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ username,
});
+ return res.data.permission; // admin|maintain|write|triage|read|none
}
- await github.rest.issues.addLabels({
- owner,
- repo,
- issue_number,
- labels: [label]
- });
+ let run = false;
+ let prNumber = null;
+ let pr = null;
+
+ if (eventName === "pull_request_target") {
+ pr = context.payload.pull_request;
+ prNumber = pr.number;
+
+ if (context.payload.action === "labeled") {
+ run = (context.payload.label?.name === "languagetool:rerun");
+ } else {
+ // opened / reopened
+ run = true;
+ }
+ } else if (eventName === "issue_comment") {
+ // only run for PR comments
+ if (!context.payload.issue?.pull_request) {
+ run = false;
+ } else {
+ const body = (context.payload.comment?.body || "").trim();
+ const wants = body.startsWith("/languagetool");
+ if (!wants) {
+ run = false;
+ } else {
+ const perm = await getPerm(context.payload.comment.user.login);
+ run = ["admin", "maintain", "write"].includes(perm);
+ }
+
+ prNumber = context.payload.issue.number;
+ const prRes = await github.rest.pulls.get({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ pull_number: prNumber,
+ });
+ pr = prRes.data;
+ }
+ }
- languagetool:
- if: |
- github.event_name == 'pull_request_target' &&
- (
- github.event.action == 'opened' ||
- github.event.action == 'reopened' ||
- (github.event.action == 'labeled' && github.event.label.name == 'languagetool:run')
- )
- runs-on: ubuntu-latest
+ core.setOutput("run", run ? "true" : "false");
+ if (!pr) return;
- steps:
- - name: Checkout PR (head SHA)
+ core.setOutput("pr_number", String(prNumber));
+ core.setOutput("head_sha", pr.head.sha);
+ core.setOutput("base_sha", pr.base.sha);
+ core.setOutput("head_repo", pr.head.repo.full_name);
+ core.setOutput("base_repo", pr.base.repo.full_name);
+
+ - name: Stop early if not requested
+ if: steps.meta.outputs.run != 'true'
+ run: echo "Not running LanguageTool."
+
+ - name: Checkout PR head (safe)
+ if: steps.meta.outputs.run == 'true'
uses: actions/checkout@v4
with:
- ref: ${{ github.event.pull_request.head.sha }}
+ repository: ${{ steps.meta.outputs.head_repo }}
+ ref: ${{ steps.meta.outputs.head_sha }}
fetch-depth: 0
+ persist-credentials: false
+ submodules: false
- - name: Build LanguageTool server image with custom dictionary
- shell: bash
+ - name: Fetch base SHA for diffing
+ if: steps.meta.outputs.run == 'true'
run: |
set -euo pipefail
+ git remote add upstream "https://github.com/${{ steps.meta.outputs.base_repo }}.git" || true
+ git fetch --no-tags --depth=1 upstream "${{ steps.meta.outputs.base_sha }}"
- WORDS_DIR=".github/languagetool"
- SPELLING_FILE="$WORDS_DIR/spelling.en.txt"
- IGNORE_FILE="$WORDS_DIR/ignore.en.txt"
-
- mkdir -p "$WORDS_DIR"
- test -f "$SPELLING_FILE" || : > "$SPELLING_FILE"
- test -f "$IGNORE_FILE" || : > "$IGNORE_FILE"
-
- # Safety cap (avoid someone committing a gigantic word list)
- head -n 2000 "$SPELLING_FILE" > /tmp/spelling_additions.txt
- head -n 2000 "$IGNORE_FILE" > /tmp/ignore_additions.txt
-
- mkdir -p /tmp/lt
- cp /tmp/spelling_additions.txt /tmp/lt/spelling_additions.txt
- cp /tmp/ignore_additions.txt /tmp/lt/ignore_additions.txt
+ - name: Setup Python
+ if: steps.meta.outputs.run == 'true'
+ uses: actions/setup-python@v5
+ with:
+ python-version: "3.11"
- cat > /tmp/lt/Dockerfile <<'EOF'
- FROM erikvl87/languagetool:latest
- USER root
- COPY spelling_additions.txt /tmp/spelling_additions.txt
- COPY ignore_additions.txt /tmp/ignore_additions.txt
- RUN set -e; \
- if [ -s /tmp/spelling_additions.txt ]; then (echo; cat /tmp/spelling_additions.txt) >> org/languagetool/resource/en/hunspell/spelling.txt; fi; \
- if [ -s /tmp/ignore_additions.txt ]; then (echo; cat /tmp/ignore_additions.txt) >> org/languagetool/resource/en/hunspell/ignore.txt; fi
- USER languagetool
- EOF
+ - name: Install Python deps
+ if: steps.meta.outputs.run == 'true'
+ run: |
+ python -m pip install --upgrade pip
+ python -m pip install requests
- docker build -t lt-custom /tmp/lt
+ - name: Setup reviewdog
+ if: steps.meta.outputs.run == 'true'
+ uses: reviewdog/action-setup@v1
+ with:
+ reviewdog_version: latest
- name: Start LanguageTool server
- shell: bash
+ if: steps.meta.outputs.run == 'true'
run: |
set -euo pipefail
- docker run -d --name languagetool -p 8010:8010 lt-custom
+ docker run -d --rm --name languagetool -p 8010:8010 erikvl87/languagetool:latest
- # Wait until the API is up
- for i in {1..60}; do
- if curl -fsS http://127.0.0.1:8010/v2/languages >/dev/null; then
+ # Wait until ready
+ for i in $(seq 1 60); do
+ if curl -fsS "http://localhost:8010/v2/languages" >/dev/null; then
+ echo "LanguageTool is up."
exit 0
fi
- sleep 1
+ sleep 2
done
- echo "LanguageTool server did not start in time" >&2
+ echo "LanguageTool did not become ready in time" >&2
docker logs languagetool || true
exit 1
- - name: Run LanguageTool and comment suggestions on the PR
- uses: reviewdog/action-languagetool@v1.23.0
- with:
- github_token: ${{ secrets.GITHUB_TOKEN }}
- reporter: github-pr-review
- level: info
- patterns: "**/*.md **/*.txt **/*.rst **/*.adoc"
- language: ${{ env.LT_LANGUAGE }}
- custom_api_endpoint: "http://127.0.0.1:8010"
-
- - name: Remove rerun label (so maintainers can trigger again)
- if: github.event.action == 'labeled' && github.event.label.name == 'languagetool:run'
- continue-on-error: true
+ - name: Run LanguageTool and comment on PR
+ if: steps.meta.outputs.run == 'true'
+ env:
+ REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ set -euo pipefail
+ python .github/scripts/languagetool_reviewdog.py \
+ --api-url "http://localhost:8010/v2/check" \
+ --language "en-US" \
+ --base-sha "${{ steps.meta.outputs.base_sha }}" \
+ --head-sha "${{ steps.meta.outputs.head_sha }}" \
+ --dictionary ".languagetool/words.txt" \
+ | reviewdog -f=rdjson \
+ -name="LanguageTool" \
+ -reporter="github-pr-review" \
+ -filter-mode="file" \
+ -fail-level="none" \
+ -level="warning"
+
+ - name: Remove rerun label (so it can be added again later)
+ if: steps.meta.outputs.run == 'true' && github.event_name == 'pull_request_target' && github.event.action == 'labeled' && github.event.label.name == 'languagetool:rerun'
uses: actions/github-script@v7
with:
script: |
@@ -152,5 +168,9 @@ jobs:
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
- name: 'languagetool:run',
+ name: "languagetool:rerun",
});
+
+ - name: Stop LanguageTool
+ if: always() && steps.meta.outputs.run == 'true'
+ run: docker stop languagetool || true
From 6cfe2b6daa9193924184264a447bf2ae65494aca Mon Sep 17 00:00:00 2001
From: CookieSource <36531905+CookieSource@users.noreply.github.com>
Date: Tue, 13 Jan 2026 19:35:25 +0100
Subject: [PATCH 10/29] Add languagetool_reviewdog.py script
---
.github/scripts/languagetool_reviewdog.py | 185 ++++++++++++++++++++++
1 file changed, 185 insertions(+)
create mode 100644 .github/scripts/languagetool_reviewdog.py
diff --git a/.github/scripts/languagetool_reviewdog.py b/.github/scripts/languagetool_reviewdog.py
new file mode 100644
index 00000000..050dc37e
--- /dev/null
+++ b/.github/scripts/languagetool_reviewdog.py
@@ -0,0 +1,185 @@
+#!/usr/bin/env python3
+import argparse
+import json
+import os
+import re
+import subprocess
+from typing import Dict, List, Optional, Set, Tuple
+
+import requests
+
+
+def sh(*args: str) -> str:
+ return subprocess.check_output(args, text=True).strip()
+
+
+def offset_to_line_col(text: str, offset: int) -> Tuple[int, int]:
+ # reviewdog wants 1-based line/column
+ line = text.count("\n", 0, offset) + 1
+ last_nl = text.rfind("\n", 0, offset)
+ col = offset - (last_nl + 1) + 1
+ return line, col
+
+
+def normalize_word(s: str) -> str:
+ s = re.sub(r"^[\W_]+|[\W_]+$", "", s, flags=re.UNICODE)
+ return s.lower()
+
+
+def load_dictionary(path: str) -> Set[str]:
+ if not path or not os.path.exists(path):
+ return set()
+ words: Set[str] = set()
+ with open(path, "r", encoding="utf-8") as f:
+ for line in f:
+ line = line.strip()
+ if not line or line.startswith("#"):
+ continue
+ words.add(line.lower())
+ return words
+
+
+def changed_files(base_sha: str, head_sha: str) -> List[str]:
+ # list only changed files in the PR
+ out = sh("git", "diff", "--name-only", base_sha, head_sha)
+ files = [x.strip() for x in out.splitlines() if x.strip()]
+ return files
+
+
+def is_text_file(path: str) -> bool:
+ ext = os.path.splitext(path)[1].lower()
+ return ext in {".md", ".txt", ".rst", ".adoc", ".asciidoc", ".tex"} or os.path.basename(path).lower() in {
+ "readme", "readme.md", "readme.txt"
+ }
+
+
+def lt_check(api_url: str, language: str, text: str) -> Dict:
+ resp = requests.post(
+ api_url,
+ data={
+ "language": language,
+ "text": text,
+ },
+ timeout=60,
+ )
+ resp.raise_for_status()
+ return resp.json()
+
+
+def main() -> int:
+ ap = argparse.ArgumentParser()
+ ap.add_argument("--api-url", required=True)
+ ap.add_argument("--language", required=True)
+ ap.add_argument("--base-sha", required=True)
+ ap.add_argument("--head-sha", required=True)
+ ap.add_argument("--dictionary", default=".languagetool/words.txt")
+ ap.add_argument("--max-suggestions", type=int, default=3)
+ args = ap.parse_args()
+
+ dict_words = load_dictionary(args.dictionary)
+
+ files = changed_files(args.base_sha, args.head_sha)
+ files = [f for f in files if os.path.exists(f) and is_text_file(f)]
+
+ diagnostics: List[Dict] = []
+
+ for path in files:
+ try:
+ with open(path, "r", encoding="utf-8") as f:
+ content = f.read()
+ except UnicodeDecodeError:
+ with open(path, "r", encoding="utf-8", errors="replace") as f:
+ content = f.read()
+
+ if not content.strip():
+ continue
+
+ try:
+ result = lt_check(args.api_url, args.language, content)
+ except Exception as e:
+ # Emit a single diagnostic if the API call fails for a file
+ diagnostics.append(
+ {
+ "message": f"LanguageTool API error for {path}: {e}",
+ "location": {"path": path, "range": {"start": {"line": 1, "column": 1}}},
+ "severity": "WARNING",
+ }
+ )
+ continue
+
+ matches = result.get("matches", [])
+ for m in matches:
+ offset = int(m.get("offset", 0))
+ length = int(m.get("length", 0))
+ bad = content[offset : offset + length]
+
+ rule = m.get("rule", {}) or {}
+ rule_id = rule.get("id") or "UNKNOWN_RULE"
+ category = (rule.get("category", {}) or {}).get("id", "")
+
+ # Cheap custom dictionary support without modifying LT server:
+ # if LT reports a spelling/typo-ish issue AND the token is in our dictionary -> ignore it.
+ # (Most spelling problems show up in category TYPOS and/or rule ids containing MORFOLOGIK.)
+ bad_norm = normalize_word(bad)
+ if dict_words and bad_norm:
+ looks_like_spelling = (category.upper() == "TYPOS") or ("MORFOLOGIK" in str(rule_id).upper())
+ if looks_like_spelling and (bad_norm in dict_words):
+ continue
+
+ start_line, start_col = offset_to_line_col(content, offset)
+ end_line, end_col = offset_to_line_col(content, offset + max(length, 0))
+
+ # Suggestions (as rdjson "suggestions" with ranges)
+ suggestions = []
+ repls = m.get("replacements", []) or []
+ for r in repls[: args.max_suggestions]:
+ val = r.get("value")
+ if not val:
+ continue
+ suggestions.append(
+ {
+ "range": {
+ "start": {"line": start_line, "column": start_col},
+ "end": {"line": end_line, "column": end_col},
+ },
+ "text": val,
+ }
+ )
+
+ code = {"value": rule_id}
+ urls = rule.get("urls") or []
+ if urls and isinstance(urls, list):
+ u = urls[0].get("value")
+ if u:
+ code["url"] = u
+
+ diagnostics.append(
+ {
+ "message": m.get("message") or "LanguageTool finding",
+ "location": {
+ "path": path,
+ "range": {
+ "start": {"line": start_line, "column": start_col},
+ "end": {"line": end_line, "column": end_col},
+ },
+ },
+ "severity": "WARNING",
+ "code": code,
+ **({"suggestions": suggestions} if suggestions else {}),
+ }
+ )
+
+ rdjson = {
+ "source": {
+ "name": "LanguageTool",
+ "url": "https://languagetool.org",
+ },
+ "diagnostics": diagnostics,
+ }
+
+ print(json.dumps(rdjson))
+ return 0
+
+
+if __name__ == "__main__":
+ raise SystemExit(main())
From ebfebd125741f10f36fa66b5384f58097d67b432 Mon Sep 17 00:00:00 2001
From: CookieSource <36531905+CookieSource@users.noreply.github.com>
Date: Tue, 13 Jan 2026 19:36:47 +0100
Subject: [PATCH 11/29] Update languagetool-pr.yml
---
.github/workflows/languagetool-pr.yml | 290 +++++++++++++++++---------
1 file changed, 194 insertions(+), 96 deletions(-)
diff --git a/.github/workflows/languagetool-pr.yml b/.github/workflows/languagetool-pr.yml
index f67814bd..70ffbac2 100644
--- a/.github/workflows/languagetool-pr.yml
+++ b/.github/workflows/languagetool-pr.yml
@@ -1,4 +1,4 @@
-name: LanguageTool (reviewdog)
+name: LanguageTool (PR review)
on:
pull_request_target:
@@ -9,158 +9,256 @@ on:
permissions:
contents: read
pull-requests: write
+ issues: write
concurrency:
- group: languagetool-${{ github.event.pull_request.number || github.event.issue.number }}
+ group: languagetool-${{ github.event.pull_request.number || github.event.issue.number || github.run_id }}
cancel-in-progress: true
+env:
+ LT_LANGUAGE: en-US
+ RERUN_LABEL: languagetool:rerun
+ LT_PORT: "8010"
+
jobs:
- languagetool:
+ # 1) Comments do NOT run reviewdog. They only tag the PR.
+ rerun_on_comment:
+ if: |
+ github.event_name == 'issue_comment' &&
+ github.event.issue.pull_request &&
+ startsWith(github.event.comment.body, '/languagetool') &&
+ (github.event.comment.author_association == 'MEMBER' ||
+ github.event.comment.author_association == 'OWNER' ||
+ github.event.comment.author_association == 'COLLABORATOR')
runs-on: ubuntu-latest
-
steps:
- - name: Decide whether to run + gather PR info
- id: meta
+ - name: Add rerun label to PR
uses: actions/github-script@v7
with:
script: |
- const eventName = context.eventName;
+ const owner = context.repo.owner;
+ const repo = context.repo.repo;
+ const issue_number = context.issue.number;
+ const label = process.env.RERUN_LABEL;
- async function getPerm(username) {
- const res = await github.rest.repos.getCollaboratorPermissionLevel({
- owner: context.repo.owner,
- repo: context.repo.repo,
- username,
+ // Ensure the label exists
+ try {
+ await github.rest.issues.getLabel({ owner, repo, name: label });
+ } catch (e) {
+ await github.rest.issues.createLabel({
+ owner, repo, name: label, color: '0e8a16',
+ description: 'Rerun LanguageTool on this PR'
});
- return res.data.permission; // admin|maintain|write|triage|read|none
- }
-
- let run = false;
- let prNumber = null;
- let pr = null;
-
- if (eventName === "pull_request_target") {
- pr = context.payload.pull_request;
- prNumber = pr.number;
-
- if (context.payload.action === "labeled") {
- run = (context.payload.label?.name === "languagetool:rerun");
- } else {
- // opened / reopened
- run = true;
- }
- } else if (eventName === "issue_comment") {
- // only run for PR comments
- if (!context.payload.issue?.pull_request) {
- run = false;
- } else {
- const body = (context.payload.comment?.body || "").trim();
- const wants = body.startsWith("/languagetool");
- if (!wants) {
- run = false;
- } else {
- const perm = await getPerm(context.payload.comment.user.login);
- run = ["admin", "maintain", "write"].includes(perm);
- }
-
- prNumber = context.payload.issue.number;
- const prRes = await github.rest.pulls.get({
- owner: context.repo.owner,
- repo: context.repo.repo,
- pull_number: prNumber,
- });
- pr = prRes.data;
- }
}
- core.setOutput("run", run ? "true" : "false");
- if (!pr) return;
-
- core.setOutput("pr_number", String(prNumber));
- core.setOutput("head_sha", pr.head.sha);
- core.setOutput("base_sha", pr.base.sha);
- core.setOutput("head_repo", pr.head.repo.full_name);
- core.setOutput("base_repo", pr.base.repo.full_name);
+ await github.rest.issues.addLabels({
+ owner, repo, issue_number, labels: [label]
+ });
- - name: Stop early if not requested
- if: steps.meta.outputs.run != 'true'
- run: echo "Not running LanguageTool."
+ # 2) Actual PR run: opened/reopened OR labeled with rerun label
+ languagetool:
+ if: |
+ github.event_name == 'pull_request_target' &&
+ (
+ github.event.action == 'opened' ||
+ github.event.action == 'reopened' ||
+ (github.event.action == 'labeled' && github.event.label.name == 'languagetool:rerun')
+ )
+ runs-on: ubuntu-latest
+ steps:
- name: Checkout PR head (safe)
- if: steps.meta.outputs.run == 'true'
uses: actions/checkout@v4
with:
- repository: ${{ steps.meta.outputs.head_repo }}
- ref: ${{ steps.meta.outputs.head_sha }}
+ repository: ${{ github.event.pull_request.head.repo.full_name }}
+ ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
persist-credentials: false
submodules: false
- name: Fetch base SHA for diffing
- if: steps.meta.outputs.run == 'true'
run: |
set -euo pipefail
- git remote add upstream "https://github.com/${{ steps.meta.outputs.base_repo }}.git" || true
- git fetch --no-tags --depth=1 upstream "${{ steps.meta.outputs.base_sha }}"
+ git remote add upstream "https://github.com/${{ github.event.pull_request.base.repo.full_name }}.git" || true
+ git fetch --no-tags --depth=1 upstream "${{ github.event.pull_request.base.sha }}"
- name: Setup Python
- if: steps.meta.outputs.run == 'true'
uses: actions/setup-python@v5
with:
python-version: "3.11"
- - name: Install Python deps
- if: steps.meta.outputs.run == 'true'
+ - name: Install deps
run: |
python -m pip install --upgrade pip
python -m pip install requests
- name: Setup reviewdog
- if: steps.meta.outputs.run == 'true'
uses: reviewdog/action-setup@v1
with:
reviewdog_version: latest
- name: Start LanguageTool server
- if: steps.meta.outputs.run == 'true'
run: |
set -euo pipefail
- docker run -d --rm --name languagetool -p 8010:8010 erikvl87/languagetool:latest
+ docker run -d --rm --name languagetool -p "${LT_PORT}:8010" erikvl87/languagetool:latest
- # Wait until ready
+ # Wait until ready (avoid connection reset during warmup)
for i in $(seq 1 60); do
- if curl -fsS "http://localhost:8010/v2/languages" >/dev/null; then
+ if curl -fsS "http://localhost:${LT_PORT}/v2/languages" >/dev/null; then
echo "LanguageTool is up."
exit 0
fi
sleep 2
done
- echo "LanguageTool did not become ready in time" >&2
+ echo "LanguageTool did not become ready" >&2
docker logs languagetool || true
exit 1
- - name: Run LanguageTool and comment on PR
- if: steps.meta.outputs.run == 'true'
+ - name: Run LanguageTool -> reviewdog PR review comments
env:
REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ BASE_SHA: ${{ github.event.pull_request.base.sha }}
+ HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: |
set -euo pipefail
- python .github/scripts/languagetool_reviewdog.py \
- --api-url "http://localhost:8010/v2/check" \
- --language "en-US" \
- --base-sha "${{ steps.meta.outputs.base_sha }}" \
- --head-sha "${{ steps.meta.outputs.head_sha }}" \
- --dictionary ".languagetool/words.txt" \
- | reviewdog -f=rdjson \
- -name="LanguageTool" \
- -reporter="github-pr-review" \
- -filter-mode="file" \
- -fail-level="none" \
- -level="warning"
-
- - name: Remove rerun label (so it can be added again later)
- if: steps.meta.outputs.run == 'true' && github.event_name == 'pull_request_target' && github.event.action == 'labeled' && github.event.label.name == 'languagetool:rerun'
+
+ # Inline python: produce rdjson for reviewdog (no repo script file needed)
+ python - <<'PY' > /tmp/rd.json
+ import json, os, re, subprocess
+ import requests
+
+ API_URL = f"http://localhost:{os.environ['LT_PORT']}/v2/check"
+ LANGUAGE = os.environ.get("LT_LANGUAGE", "en-US")
+ BASE_SHA = os.environ["BASE_SHA"]
+ HEAD_SHA = os.environ["HEAD_SHA"]
+ DICT_PATH = ".languagetool/words.txt"
+ MAX_SUG = 3
+ MAX_TEXT = 300_000 # avoid huge posts
+
+ def sh(*args):
+ return subprocess.check_output(args, text=True).strip()
+
+ def normalize_word(s: str) -> str:
+ s = re.sub(r"^[\W_]+|[\W_]+$", "", s, flags=re.UNICODE)
+ return s.lower()
+
+ def load_dict(path):
+ if not os.path.exists(path):
+ return set()
+ out = set()
+ with open(path, "r", encoding="utf-8") as f:
+ for line in f:
+ line = line.strip()
+ if not line or line.startswith("#"):
+ continue
+ out.add(line.lower())
+ return out
+
+ def offset_to_line_col(text, offset):
+ line = text.count("\n", 0, offset) + 1
+ last_nl = text.rfind("\n", 0, offset)
+ col = offset - (last_nl + 1) + 1
+ return line, col
+
+ def changed_files(base, head):
+ out = sh("git", "diff", "--name-only", base, head)
+ return [x.strip() for x in out.splitlines() if x.strip()]
+
+ def is_text_file(path):
+ ext = os.path.splitext(path)[1].lower()
+ return ext in {".md",".txt",".rst",".adoc",".asciidoc",".tex"}
+
+ dict_words = load_dict(DICT_PATH)
+ files = [f for f in changed_files(BASE_SHA, HEAD_SHA) if os.path.exists(f) and is_text_file(f)]
+ diagnostics = []
+
+ for path in files:
+ try:
+ content = open(path, "r", encoding="utf-8").read()
+ except UnicodeDecodeError:
+ content = open(path, "r", encoding="utf-8", errors="replace").read()
+
+ if not content.strip():
+ continue
+
+ if len(content) > MAX_TEXT:
+ content = content[:MAX_TEXT]
+
+ try:
+ r = requests.post(API_URL, data={"language": LANGUAGE, "text": content}, timeout=60)
+ r.raise_for_status()
+ data = r.json()
+ except Exception as e:
+ diagnostics.append({
+ "message": f"LanguageTool API error for {path}: {e}",
+ "location": {"path": path, "range": {"start": {"line": 1, "column": 1}}},
+ "severity": "WARNING",
+ })
+ continue
+
+ for m in data.get("matches", []):
+ offset = int(m.get("offset", 0))
+ length = int(m.get("length", 0))
+ bad = content[offset:offset+length]
+ rule = m.get("rule", {}) or {}
+ rule_id = rule.get("id") or "UNKNOWN_RULE"
+ category = (rule.get("category", {}) or {}).get("id", "")
+
+ # Custom dictionary: ignore spelling-ish matches when token is in words.txt
+ bad_norm = normalize_word(bad)
+ if dict_words and bad_norm:
+ looks_like_spelling = (category.upper() == "TYPOS") or ("MORFOLOGIK" in str(rule_id).upper())
+ if looks_like_spelling and (bad_norm in dict_words):
+ continue
+
+ sl, sc = offset_to_line_col(content, offset)
+ el, ec = offset_to_line_col(content, offset + max(length, 0))
+
+ suggestions = []
+ for repl in (m.get("replacements") or [])[:MAX_SUG]:
+ v = repl.get("value")
+ if not v:
+ continue
+ suggestions.append({
+ "range": {"start": {"line": sl, "column": sc}, "end": {"line": el, "column": ec}},
+ "text": v,
+ })
+
+ code = {"value": rule_id}
+ urls = rule.get("urls") or []
+ if urls and isinstance(urls, list):
+ u = urls[0].get("value")
+ if u:
+ code["url"] = u
+
+ diagnostics.append({
+ "message": m.get("message") or "LanguageTool finding",
+ "location": {
+ "path": path,
+ "range": {"start": {"line": sl, "column": sc}, "end": {"line": el, "column": ec}},
+ },
+ "severity": "WARNING",
+ "code": code,
+ **({"suggestions": suggestions} if suggestions else {}),
+ })
+
+ print(json.dumps({
+ "source": {"name": "LanguageTool", "url": "https://languagetool.org"},
+ "diagnostics": diagnostics
+ }))
+ PY
+
+ reviewdog -f=rdjson \
+ -name="LanguageTool" \
+ -reporter="github-pr-review" \
+ -filter-mode="diff_context" \
+ -fail-level="none" \
+ -level="warning" < /tmp/rd.json
+
+ - name: Remove rerun label
+ if: github.event.action == 'labeled' && github.event.label.name == 'languagetool:rerun'
+ continue-on-error: true
uses: actions/github-script@v7
with:
script: |
@@ -168,9 +266,9 @@ jobs:
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
- name: "languagetool:rerun",
+ name: process.env.RERUN_LABEL,
});
- name: Stop LanguageTool
- if: always() && steps.meta.outputs.run == 'true'
+ if: always()
run: docker stop languagetool || true
From d3d797f6a8bf2356649a29c3dfb51a7ef01f665d Mon Sep 17 00:00:00 2001
From: CookieSource <36531905+CookieSource@users.noreply.github.com>
Date: Tue, 13 Jan 2026 19:50:06 +0100
Subject: [PATCH 12/29] Modify LanguageTool workflow for PR comments and Java
setup
Updated LanguageTool GitHub Actions workflow to allow synchronization events and changed the PR comment behavior. Replaced Python setup with Java setup for LanguageTool execution.
---
.github/workflows/languagetool-pr.yml | 274 --------------------------
.github/workflows/languagetool.yml | 265 +++++++++++++++++++++++++
2 files changed, 265 insertions(+), 274 deletions(-)
delete mode 100644 .github/workflows/languagetool-pr.yml
create mode 100644 .github/workflows/languagetool.yml
diff --git a/.github/workflows/languagetool-pr.yml b/.github/workflows/languagetool-pr.yml
deleted file mode 100644
index 70ffbac2..00000000
--- a/.github/workflows/languagetool-pr.yml
+++ /dev/null
@@ -1,274 +0,0 @@
-name: LanguageTool (PR review)
-
-on:
- pull_request_target:
- types: [opened, reopened, labeled]
- issue_comment:
- types: [created]
-
-permissions:
- contents: read
- pull-requests: write
- issues: write
-
-concurrency:
- group: languagetool-${{ github.event.pull_request.number || github.event.issue.number || github.run_id }}
- cancel-in-progress: true
-
-env:
- LT_LANGUAGE: en-US
- RERUN_LABEL: languagetool:rerun
- LT_PORT: "8010"
-
-jobs:
- # 1) Comments do NOT run reviewdog. They only tag the PR.
- rerun_on_comment:
- if: |
- github.event_name == 'issue_comment' &&
- github.event.issue.pull_request &&
- startsWith(github.event.comment.body, '/languagetool') &&
- (github.event.comment.author_association == 'MEMBER' ||
- github.event.comment.author_association == 'OWNER' ||
- github.event.comment.author_association == 'COLLABORATOR')
- runs-on: ubuntu-latest
- steps:
- - name: Add rerun label to PR
- uses: actions/github-script@v7
- with:
- script: |
- const owner = context.repo.owner;
- const repo = context.repo.repo;
- const issue_number = context.issue.number;
- const label = process.env.RERUN_LABEL;
-
- // Ensure the label exists
- try {
- await github.rest.issues.getLabel({ owner, repo, name: label });
- } catch (e) {
- await github.rest.issues.createLabel({
- owner, repo, name: label, color: '0e8a16',
- description: 'Rerun LanguageTool on this PR'
- });
- }
-
- await github.rest.issues.addLabels({
- owner, repo, issue_number, labels: [label]
- });
-
- # 2) Actual PR run: opened/reopened OR labeled with rerun label
- languagetool:
- if: |
- github.event_name == 'pull_request_target' &&
- (
- github.event.action == 'opened' ||
- github.event.action == 'reopened' ||
- (github.event.action == 'labeled' && github.event.label.name == 'languagetool:rerun')
- )
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout PR head (safe)
- uses: actions/checkout@v4
- with:
- repository: ${{ github.event.pull_request.head.repo.full_name }}
- ref: ${{ github.event.pull_request.head.sha }}
- fetch-depth: 0
- persist-credentials: false
- submodules: false
-
- - name: Fetch base SHA for diffing
- run: |
- set -euo pipefail
- git remote add upstream "https://github.com/${{ github.event.pull_request.base.repo.full_name }}.git" || true
- git fetch --no-tags --depth=1 upstream "${{ github.event.pull_request.base.sha }}"
-
- - name: Setup Python
- uses: actions/setup-python@v5
- with:
- python-version: "3.11"
-
- - name: Install deps
- run: |
- python -m pip install --upgrade pip
- python -m pip install requests
-
- - name: Setup reviewdog
- uses: reviewdog/action-setup@v1
- with:
- reviewdog_version: latest
-
- - name: Start LanguageTool server
- run: |
- set -euo pipefail
- docker run -d --rm --name languagetool -p "${LT_PORT}:8010" erikvl87/languagetool:latest
-
- # Wait until ready (avoid connection reset during warmup)
- for i in $(seq 1 60); do
- if curl -fsS "http://localhost:${LT_PORT}/v2/languages" >/dev/null; then
- echo "LanguageTool is up."
- exit 0
- fi
- sleep 2
- done
-
- echo "LanguageTool did not become ready" >&2
- docker logs languagetool || true
- exit 1
-
- - name: Run LanguageTool -> reviewdog PR review comments
- env:
- REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- BASE_SHA: ${{ github.event.pull_request.base.sha }}
- HEAD_SHA: ${{ github.event.pull_request.head.sha }}
- run: |
- set -euo pipefail
-
- # Inline python: produce rdjson for reviewdog (no repo script file needed)
- python - <<'PY' > /tmp/rd.json
- import json, os, re, subprocess
- import requests
-
- API_URL = f"http://localhost:{os.environ['LT_PORT']}/v2/check"
- LANGUAGE = os.environ.get("LT_LANGUAGE", "en-US")
- BASE_SHA = os.environ["BASE_SHA"]
- HEAD_SHA = os.environ["HEAD_SHA"]
- DICT_PATH = ".languagetool/words.txt"
- MAX_SUG = 3
- MAX_TEXT = 300_000 # avoid huge posts
-
- def sh(*args):
- return subprocess.check_output(args, text=True).strip()
-
- def normalize_word(s: str) -> str:
- s = re.sub(r"^[\W_]+|[\W_]+$", "", s, flags=re.UNICODE)
- return s.lower()
-
- def load_dict(path):
- if not os.path.exists(path):
- return set()
- out = set()
- with open(path, "r", encoding="utf-8") as f:
- for line in f:
- line = line.strip()
- if not line or line.startswith("#"):
- continue
- out.add(line.lower())
- return out
-
- def offset_to_line_col(text, offset):
- line = text.count("\n", 0, offset) + 1
- last_nl = text.rfind("\n", 0, offset)
- col = offset - (last_nl + 1) + 1
- return line, col
-
- def changed_files(base, head):
- out = sh("git", "diff", "--name-only", base, head)
- return [x.strip() for x in out.splitlines() if x.strip()]
-
- def is_text_file(path):
- ext = os.path.splitext(path)[1].lower()
- return ext in {".md",".txt",".rst",".adoc",".asciidoc",".tex"}
-
- dict_words = load_dict(DICT_PATH)
- files = [f for f in changed_files(BASE_SHA, HEAD_SHA) if os.path.exists(f) and is_text_file(f)]
- diagnostics = []
-
- for path in files:
- try:
- content = open(path, "r", encoding="utf-8").read()
- except UnicodeDecodeError:
- content = open(path, "r", encoding="utf-8", errors="replace").read()
-
- if not content.strip():
- continue
-
- if len(content) > MAX_TEXT:
- content = content[:MAX_TEXT]
-
- try:
- r = requests.post(API_URL, data={"language": LANGUAGE, "text": content}, timeout=60)
- r.raise_for_status()
- data = r.json()
- except Exception as e:
- diagnostics.append({
- "message": f"LanguageTool API error for {path}: {e}",
- "location": {"path": path, "range": {"start": {"line": 1, "column": 1}}},
- "severity": "WARNING",
- })
- continue
-
- for m in data.get("matches", []):
- offset = int(m.get("offset", 0))
- length = int(m.get("length", 0))
- bad = content[offset:offset+length]
- rule = m.get("rule", {}) or {}
- rule_id = rule.get("id") or "UNKNOWN_RULE"
- category = (rule.get("category", {}) or {}).get("id", "")
-
- # Custom dictionary: ignore spelling-ish matches when token is in words.txt
- bad_norm = normalize_word(bad)
- if dict_words and bad_norm:
- looks_like_spelling = (category.upper() == "TYPOS") or ("MORFOLOGIK" in str(rule_id).upper())
- if looks_like_spelling and (bad_norm in dict_words):
- continue
-
- sl, sc = offset_to_line_col(content, offset)
- el, ec = offset_to_line_col(content, offset + max(length, 0))
-
- suggestions = []
- for repl in (m.get("replacements") or [])[:MAX_SUG]:
- v = repl.get("value")
- if not v:
- continue
- suggestions.append({
- "range": {"start": {"line": sl, "column": sc}, "end": {"line": el, "column": ec}},
- "text": v,
- })
-
- code = {"value": rule_id}
- urls = rule.get("urls") or []
- if urls and isinstance(urls, list):
- u = urls[0].get("value")
- if u:
- code["url"] = u
-
- diagnostics.append({
- "message": m.get("message") or "LanguageTool finding",
- "location": {
- "path": path,
- "range": {"start": {"line": sl, "column": sc}, "end": {"line": el, "column": ec}},
- },
- "severity": "WARNING",
- "code": code,
- **({"suggestions": suggestions} if suggestions else {}),
- })
-
- print(json.dumps({
- "source": {"name": "LanguageTool", "url": "https://languagetool.org"},
- "diagnostics": diagnostics
- }))
- PY
-
- reviewdog -f=rdjson \
- -name="LanguageTool" \
- -reporter="github-pr-review" \
- -filter-mode="diff_context" \
- -fail-level="none" \
- -level="warning" < /tmp/rd.json
-
- - name: Remove rerun label
- if: github.event.action == 'labeled' && github.event.label.name == 'languagetool:rerun'
- continue-on-error: true
- uses: actions/github-script@v7
- with:
- script: |
- await github.rest.issues.removeLabel({
- owner: context.repo.owner,
- repo: context.repo.repo,
- issue_number: context.payload.pull_request.number,
- name: process.env.RERUN_LABEL,
- });
-
- - name: Stop LanguageTool
- if: always()
- run: docker stop languagetool || true
diff --git a/.github/workflows/languagetool.yml b/.github/workflows/languagetool.yml
new file mode 100644
index 00000000..fcc3aaf6
--- /dev/null
+++ b/.github/workflows/languagetool.yml
@@ -0,0 +1,265 @@
+name: LanguageTool (PR comment)
+
+on:
+ pull_request_target:
+ types: [opened, reopened, synchronize, labeled]
+ issue_comment:
+ types: [created]
+
+permissions:
+ contents: read
+ pull-requests: write
+ issues: write
+
+concurrency:
+ group: languagetool-${{ github.event.pull_request.number || github.event.issue.number || github.run_id }}
+ cancel-in-progress: true
+
+env:
+ LT_LANGUAGE: en-US
+ RERUN_LABEL: languagetool:rerun
+
+jobs:
+ # Comment command -> toggle a label to trigger the PR job
+ rerun_on_comment:
+ if: |
+ github.event_name == 'issue_comment' &&
+ github.event.issue.pull_request &&
+ startsWith(github.event.comment.body, '/languagetool') &&
+ (github.event.comment.author_association == 'MEMBER' ||
+ github.event.comment.author_association == 'OWNER' ||
+ github.event.comment.author_association == 'COLLABORATOR')
+ runs-on: ubuntu-latest
+ steps:
+ - name: Toggle rerun label on PR
+ uses: actions/github-script@v7
+ with:
+ script: |
+ const owner = context.repo.owner;
+ const repo = context.repo.repo;
+ const issue_number = context.issue.number;
+ const label = process.env.RERUN_LABEL;
+
+ // ensure label exists
+ try {
+ await github.rest.issues.getLabel({ owner, repo, name: label });
+ } catch {
+ await github.rest.issues.createLabel({
+ owner, repo, name: label, color: '0e8a16',
+ description: 'Rerun LanguageTool on this PR'
+ });
+ }
+
+ // remove if present (ignore if missing), then add to force a "labeled" event
+ try { await github.rest.issues.removeLabel({ owner, repo, issue_number, name: label }); } catch {}
+ await github.rest.issues.addLabels({ owner, repo, issue_number, labels: [label] });
+
+ languagetool:
+ if: |
+ github.event_name == 'pull_request_target' &&
+ (
+ github.event.action == 'opened' ||
+ github.event.action == 'reopened' ||
+ github.event.action == 'synchronize' ||
+ (github.event.action == 'labeled' && github.event.label.name == 'languagetool:rerun')
+ )
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout PR head (safe)
+ uses: actions/checkout@v4
+ with:
+ repository: ${{ github.event.pull_request.head.repo.full_name }}
+ ref: ${{ github.event.pull_request.head.sha }}
+ fetch-depth: 0
+ persist-credentials: false
+
+ - name: Fetch base SHA for diff
+ run: |
+ set -euo pipefail
+ git remote add upstream "https://github.com/${{ github.event.pull_request.base.repo.full_name }}.git" || true
+ git fetch --no-tags --depth=1 upstream "${{ github.event.pull_request.base.sha }}"
+
+ - name: Setup Java 17
+ uses: actions/setup-java@v4
+ with:
+ distribution: temurin
+ java-version: "17"
+
+ - name: Download LanguageTool snapshot (CLI)
+ run: |
+ set -euo pipefail
+ curl -fsSL -o lt.zip "https://internal1.languagetool.org/snapshots/LanguageTool-latest-snapshot.zip"
+ rm -rf .lt
+ mkdir -p .lt
+ unzip -q lt.zip -d .lt
+ # locate the command line jar
+ LT_JAR="$(ls -1 .lt/**/languagetool-commandline.jar 2>/dev/null | head -n1 || true)"
+ if [ -z "${LT_JAR}" ]; then
+ echo "Could not find languagetool-commandline.jar in snapshot" >&2
+ find .lt -maxdepth 3 -type f -name "*languagetool*jar" -print >&2 || true
+ exit 1
+ fi
+ echo "LT_JAR=${LT_JAR}" >> "$GITHUB_ENV"
+
+ - name: Run LanguageTool on changed text files and build PR comment
+ env:
+ BASE_SHA: ${{ github.event.pull_request.base.sha }}
+ HEAD_SHA: ${{ github.event.pull_request.head.sha }}
+ run: |
+ set -euo pipefail
+
+ # Choose which files to check (edit this regex to include more types)
+ mapfile -t FILES < <(git diff --name-only "$BASE_SHA" "$HEAD_SHA" \
+ | grep -E '\.(md|txt|rst|adoc|asciidoc|tex)$' || true)
+
+ # Load custom words (optional)
+ WORDS_FILE=".languagetool/words.txt"
+ if [ -f "$WORDS_FILE" ]; then
+ WORDS_JSON="$(jq -R -s '
+ split("\n")
+ | map(gsub("\r";""))
+ | map(select(length>0 and (startswith("#")|not)))
+ | map(ascii_downcase)
+ ' "$WORDS_FILE")"
+ else
+ WORDS_JSON='[]'
+ fi
+
+ : > results.jsonl
+
+ if [ "${#FILES[@]}" -eq 0 ]; then
+ echo '{"file":"(none)","issues":[]}' >> results.jsonl
+ else
+ for f in "${FILES[@]}"; do
+ [ -f "$f" ] || continue
+
+ # LT prints banner lines before JSON sometimes; keep JSON only
+ java -jar "$LT_JAR" -l "${LT_LANGUAGE}" --json "$f" 2>/dev/null \
+ | sed -n '/^{/,$p' > lt.json || true
+
+ # Extract issues and filter spelling-ish matches for custom words
+ jq -c \
+ --arg file "$f" \
+ --argjson words "$WORDS_JSON" '
+ def badtoken:
+ (.context.text
+ | .[.context.offset:(.context.offset + .context.length)]
+ | gsub("^[^[:alnum:]]+|[^[:alnum:]]+$";"")
+ | ascii_downcase);
+
+ (.matches // [])
+ | map(
+ . as $m
+ | ($m.rule.id // "") as $rid
+ | ($m.rule.category.id // "") as $cat
+ | (badtoken) as $bt
+ | select(
+ # drop spelling-ish warnings when the token is in our custom list
+ ( (( $cat == "TYPOS") or ($rid|test("MORFOLOGIK";"i")) )
+ and (($words|index($bt)) != null)
+ ) | not
+ )
+ | {
+ message: ($m.message // "LanguageTool finding"),
+ rule: $rid,
+ replacements: (($m.replacements // []) | map(.value) | .[0:3]),
+ context: ($m.context.text // ""),
+ context_offset: ($m.context.offset // 0),
+ context_length: ($m.context.length // 0)
+ }
+ )
+ | {file:$file, issues:.}
+ ' lt.json >> results.jsonl
+ done
+ fi
+
+ # Build markdown body (stored as a file)
+ node <<'NODE'
+ const fs = require("fs");
+
+ const marker = "";
+ const lines = fs.readFileSync("results.jsonl","utf8").trim().split("\n").filter(Boolean);
+ const parsed = lines.map(l => JSON.parse(l));
+
+ const checkedFiles = parsed
+ .map(p => p.file)
+ .filter(f => f && f !== "(none)");
+ const byFile = parsed
+ .filter(p => Array.isArray(p.issues) && p.issues.length > 0)
+ .reduce((acc, p) => { acc[p.file] = p.issues; return acc; }, {});
+
+ let total = 0;
+ for (const f of Object.keys(byFile)) total += byFile[f].length;
+
+ let body = `${marker}
+ ## LanguageTool report
+
+ **Language:** \`${process.env.LT_LANGUAGE || "en-US"}\`
+ **Checked files:** ${checkedFiles.length ? checkedFiles.length : 0}
+ **Findings:** ${total}
+ `;
+
+ if (!checkedFiles.length) {
+ body += `\nNo supported text files changed in this PR (based on the file extensions configured).\n`;
+ } else if (total === 0) {
+ body += `\n✅ No issues found in the changed text files.\n`;
+ } else {
+ body += `\n---\n`;
+ for (const [file, issues] of Object.entries(byFile)) {
+ body += `\n### ${file}\n`;
+ for (const it of issues.slice(0, 200)) { // cap to avoid huge comments
+ const ctx = (it.context || "").replace(/\s+/g, " ").trim();
+ const snippet = ctx ? `\n> ${ctx}\n` : "";
+ const sug = (it.replacements && it.replacements.length)
+ ? `\nSuggested: ${it.replacements.map(s => `\`${s}\``).join(", ")}\n`
+ : "";
+ body += `\n- **${it.rule || "RULE"}**: ${it.message}${sug}${snippet}`;
+ }
+ if (issues.length > 200) body += `\n…(${issues.length - 200} more in this file)\n`;
+ }
+ }
+
+ fs.writeFileSync("comment.md", body.trim() + "\n");
+ NODE
+
+ - name: Post or update PR comment
+ uses: actions/github-script@v7
+ with:
+ script: |
+ const fs = require('fs');
+ const owner = context.repo.owner;
+ const repo = context.repo.repo;
+ const issue_number = context.payload.pull_request.number;
+
+ const body = fs.readFileSync('comment.md', 'utf8');
+ const marker = '';
+
+ const { data: comments } = await github.rest.issues.listComments({
+ owner, repo, issue_number, per_page: 100
+ });
+
+ const existing = comments.find(c => (c.body || '').includes(marker));
+
+ if (existing) {
+ await github.rest.issues.updateComment({
+ owner, repo, comment_id: existing.id, body
+ });
+ } else {
+ await github.rest.issues.createComment({
+ owner, repo, issue_number, body
+ });
+ }
+
+ - name: Remove rerun label
+ if: github.event.action == 'labeled' && github.event.label.name == 'languagetool:rerun'
+ continue-on-error: true
+ uses: actions/github-script@v7
+ with:
+ script: |
+ await github.rest.issues.removeLabel({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: context.payload.pull_request.number,
+ name: process.env.RERUN_LABEL,
+ });
From c455ba396a10002972d4bef739161dfdeb8b33d9 Mon Sep 17 00:00:00 2001
From: CookieSource <36531905+CookieSource@users.noreply.github.com>
Date: Tue, 13 Jan 2026 19:53:14 +0100
Subject: [PATCH 13/29] Update languagetool.yml
---
.github/workflows/languagetool.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/languagetool.yml b/.github/workflows/languagetool.yml
index fcc3aaf6..c567451c 100644
--- a/.github/workflows/languagetool.yml
+++ b/.github/workflows/languagetool.yml
@@ -111,7 +111,7 @@ jobs:
# Choose which files to check (edit this regex to include more types)
mapfile -t FILES < <(git diff --name-only "$BASE_SHA" "$HEAD_SHA" \
- | grep -E '\.(md|txt|rst|adoc|asciidoc|tex)$' || true)
+ | grep -E '\.(md|txt|rst|adoc|asciidoc|tex|mdx)$' || true)
# Load custom words (optional)
WORDS_FILE=".languagetool/words.txt"
From b51c3d2425bbfde6f896a593913cd4cd6ebf7d40 Mon Sep 17 00:00:00 2001
From: CookieSource <36531905+CookieSource@users.noreply.github.com>
Date: Tue, 13 Jan 2026 19:58:46 +0100
Subject: [PATCH 14/29] Update languagetool.yml
---
.github/workflows/languagetool.yml | 55 +++++++++++++++++-------------
1 file changed, 31 insertions(+), 24 deletions(-)
diff --git a/.github/workflows/languagetool.yml b/.github/workflows/languagetool.yml
index c567451c..83bcaa42 100644
--- a/.github/workflows/languagetool.yml
+++ b/.github/workflows/languagetool.yml
@@ -1,3 +1,4 @@
+# .github/workflows/languagetool.yml
name: LanguageTool (PR comment)
on:
@@ -20,7 +21,7 @@ env:
RERUN_LABEL: languagetool:rerun
jobs:
- # Comment command -> toggle a label to trigger the PR job
+ # Comment command -> toggles a label to trigger the PR job
rerun_on_comment:
if: |
github.event_name == 'issue_comment' &&
@@ -40,7 +41,7 @@ jobs:
const issue_number = context.issue.number;
const label = process.env.RERUN_LABEL;
- // ensure label exists
+ // Ensure label exists
try {
await github.rest.issues.getLabel({ owner, repo, name: label });
} catch {
@@ -50,8 +51,10 @@ jobs:
});
}
- // remove if present (ignore if missing), then add to force a "labeled" event
- try { await github.rest.issues.removeLabel({ owner, repo, issue_number, name: label }); } catch {}
+ // Remove if present (ignore errors), then add to force a new "labeled" event
+ try {
+ await github.rest.issues.removeLabel({ owner, repo, issue_number, name: label });
+ } catch {}
await github.rest.issues.addLabels({ owner, repo, issue_number, labels: [label] });
languagetool:
@@ -86,32 +89,36 @@ jobs:
distribution: temurin
java-version: "17"
- - name: Download LanguageTool snapshot (CLI)
+ - name: Download LanguageTool CLI (latest snapshot)
run: |
set -euo pipefail
curl -fsSL -o lt.zip "https://internal1.languagetool.org/snapshots/LanguageTool-latest-snapshot.zip"
rm -rf .lt
mkdir -p .lt
unzip -q lt.zip -d .lt
- # locate the command line jar
+
LT_JAR="$(ls -1 .lt/**/languagetool-commandline.jar 2>/dev/null | head -n1 || true)"
if [ -z "${LT_JAR}" ]; then
echo "Could not find languagetool-commandline.jar in snapshot" >&2
- find .lt -maxdepth 3 -type f -name "*languagetool*jar" -print >&2 || true
+ find .lt -maxdepth 4 -type f -name "*languagetool*jar" -print >&2 || true
exit 1
fi
+
echo "LT_JAR=${LT_JAR}" >> "$GITHUB_ENV"
- - name: Run LanguageTool on changed text files and build PR comment
+ - name: Run LanguageTool + build PR comment
env:
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: |
set -euo pipefail
- # Choose which files to check (edit this regex to include more types)
+ # jq is present on ubuntu-latest, but install if your runner image differs
+ command -v jq >/dev/null || (sudo apt-get update && sudo apt-get install -y jq)
+
+ # Choose files to check
mapfile -t FILES < <(git diff --name-only "$BASE_SHA" "$HEAD_SHA" \
- | grep -E '\.(md|txt|rst|adoc|asciidoc|tex|mdx)$' || true)
+ | grep -E '\.(md|mdx|txt|rst|adoc|asciidoc|tex)$' || true)
# Load custom words (optional)
WORDS_FILE=".languagetool/words.txt"
@@ -134,19 +141,21 @@ jobs:
for f in "${FILES[@]}"; do
[ -f "$f" ] || continue
- # LT prints banner lines before JSON sometimes; keep JSON only
+ # LT can print banner lines; keep JSON only (accepts either { or [)
java -jar "$LT_JAR" -l "${LT_LANGUAGE}" --json "$f" 2>/dev/null \
- | sed -n '/^{/,$p' > lt.json || true
+ | sed -n '/^[{[]/,$p' > lt.json || true
# Extract issues and filter spelling-ish matches for custom words
jq -c \
--arg file "$f" \
--argjson words "$WORDS_JSON" '
def badtoken:
- (.context.text
- | .[.context.offset:(.context.offset + .context.length)]
- | gsub("^[^[:alnum:]]+|[^[:alnum:]]+$";"")
- | ascii_downcase);
+ (.context.offset // 0) as $o
+ | (.context.length // 0) as $l
+ | (.context.text // "") as $t
+ | ($t[$o:($o+$l)]
+ | gsub("^[^[:alnum:]]+|[^[:alnum:]]+$";"")
+ | ascii_downcase);
(.matches // [])
| map(
@@ -155,7 +164,6 @@ jobs:
| ($m.rule.category.id // "") as $cat
| (badtoken) as $bt
| select(
- # drop spelling-ish warnings when the token is in our custom list
( (( $cat == "TYPOS") or ($rid|test("MORFOLOGIK";"i")) )
and (($words|index($bt)) != null)
) | not
@@ -179,12 +187,11 @@ jobs:
const fs = require("fs");
const marker = "";
- const lines = fs.readFileSync("results.jsonl","utf8").trim().split("\n").filter(Boolean);
+ const raw = fs.readFileSync("results.jsonl","utf8").trim();
+ const lines = raw ? raw.split("\n").filter(Boolean) : [];
const parsed = lines.map(l => JSON.parse(l));
- const checkedFiles = parsed
- .map(p => p.file)
- .filter(f => f && f !== "(none)");
+ const checkedFiles = parsed.map(p => p.file).filter(f => f && f !== "(none)");
const byFile = parsed
.filter(p => Array.isArray(p.issues) && p.issues.length > 0)
.reduce((acc, p) => { acc[p.file] = p.issues; return acc; }, {});
@@ -196,19 +203,19 @@ jobs:
## LanguageTool report
**Language:** \`${process.env.LT_LANGUAGE || "en-US"}\`
- **Checked files:** ${checkedFiles.length ? checkedFiles.length : 0}
+ **Checked files:** ${checkedFiles.length}
**Findings:** ${total}
`;
if (!checkedFiles.length) {
- body += `\nNo supported text files changed in this PR (based on the file extensions configured).\n`;
+ body += `\nNo supported text files changed in this PR (based on configured extensions).\n`;
} else if (total === 0) {
body += `\n✅ No issues found in the changed text files.\n`;
} else {
body += `\n---\n`;
for (const [file, issues] of Object.entries(byFile)) {
body += `\n### ${file}\n`;
- for (const it of issues.slice(0, 200)) { // cap to avoid huge comments
+ for (const it of issues.slice(0, 200)) {
const ctx = (it.context || "").replace(/\s+/g, " ").trim();
const snippet = ctx ? `\n> ${ctx}\n` : "";
const sug = (it.replacements && it.replacements.length)
From d6ef83d5ac8474ed297f7e588dbf5b6f85f6d588 Mon Sep 17 00:00:00 2001
From: CookieSource <36531905+CookieSource@users.noreply.github.com>
Date: Tue, 13 Jan 2026 20:06:05 +0100
Subject: [PATCH 15/29] PR after a working version
Updated LanguageTool workflow to enhance PR comment formatting and issue reporting.
---
.github/workflows/languagetool.yml | 49 ++++++++++++++++++++++--------
1 file changed, 36 insertions(+), 13 deletions(-)
diff --git a/.github/workflows/languagetool.yml b/.github/workflows/languagetool.yml
index 83bcaa42..5a842a30 100644
--- a/.github/workflows/languagetool.yml
+++ b/.github/workflows/languagetool.yml
@@ -106,7 +106,7 @@ jobs:
echo "LT_JAR=${LT_JAR}" >> "$GITHUB_ENV"
- - name: Run LanguageTool + build PR comment
+ - name: Run LanguageTool + build PR comment (collapsible + exact word)
env:
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
@@ -149,13 +149,16 @@ jobs:
jq -c \
--arg file "$f" \
--argjson words "$WORDS_JSON" '
- def badtoken:
+ def bad_raw:
(.context.offset // 0) as $o
| (.context.length // 0) as $l
| (.context.text // "") as $t
- | ($t[$o:($o+$l)]
- | gsub("^[^[:alnum:]]+|[^[:alnum:]]+$";"")
- | ascii_downcase);
+ | ($t[$o:($o+$l)]);
+
+ def badtoken:
+ (bad_raw
+ | gsub("^[^[:alnum:]]+|[^[:alnum:]]+$";"")
+ | ascii_downcase);
(.matches // [])
| map(
@@ -171,6 +174,7 @@ jobs:
| {
message: ($m.message // "LanguageTool finding"),
rule: $rid,
+ bad: (bad_raw),
replacements: (($m.replacements // []) | map(.value) | .[0:3]),
context: ($m.context.text // ""),
context_offset: ($m.context.offset // 0),
@@ -182,7 +186,7 @@ jobs:
done
fi
- # Build markdown body (stored as a file)
+ # Build markdown body (stored as a file) - collapsible per file
node <<'NODE'
const fs = require("fs");
@@ -199,7 +203,19 @@ jobs:
let total = 0;
for (const f of Object.keys(byFile)) total += byFile[f].length;
- let body = `${marker}
+ function inlineCode(s) {
+ if (s == null) return "";
+ return String(s).replace(/`/g, "\\`").replace(/\n/g, " ").trim();
+ }
+
+ function shortContext(text, maxLen=220) {
+ const t = (text || "").replace(/\s+/g, " ").trim();
+ if (t.length <= maxLen) return t;
+ return t.slice(0, maxLen - 1) + "…";
+ }
+
+ let body =
+ `${marker}
## LanguageTool report
**Language:** \`${process.env.LT_LANGUAGE || "en-US"}\`
@@ -214,16 +230,23 @@ jobs:
} else {
body += `\n---\n`;
for (const [file, issues] of Object.entries(byFile)) {
- body += `\n### ${file}\n`;
+ body += `\n\n${file} — ${issues.length} finding(s)
\n\n`;
for (const it of issues.slice(0, 200)) {
- const ctx = (it.context || "").replace(/\s+/g, " ").trim();
- const snippet = ctx ? `\n> ${ctx}\n` : "";
+ const found = inlineCode(it.bad);
+ const ctx = shortContext(it.context);
const sug = (it.replacements && it.replacements.length)
- ? `\nSuggested: ${it.replacements.map(s => `\`${s}\``).join(", ")}\n`
+ ? `Suggested: ${it.replacements.map(s => `\`${inlineCode(s)}\``).join(", ")}\n`
: "";
- body += `\n- **${it.rule || "RULE"}**: ${it.message}${sug}${snippet}`;
+ body +=
+ `- **${inlineCode(it.rule || "RULE")}**: ${inlineCode(it.message)}
+ - Found: \`${found}\`
+ - ${sug ? sug.trimEnd() : "Suggested: (none)"}
+ - Context: ${ctx ? `> ${ctx}` : "(none)"}
+
+ `;
}
- if (issues.length > 200) body += `\n…(${issues.length - 200} more in this file)\n`;
+ if (issues.length > 200) body += `…(${issues.length - 200} more in this file)\n\n`;
+ body += ` \n`;
}
}
From 1f7a335973b6cdb3194cde890cc8128006c21218 Mon Sep 17 00:00:00 2001
From: Alice <36531905+CookieSource@users.noreply.github.com>
Date: Thu, 15 Jan 2026 18:56:44 +0100
Subject: [PATCH 16/29] Configure Dependabot for npm updates
Specify npm as the package ecosystem and allow updates for astro and @astrojs/starlight dependencies.
---
.github/dependabot.yml | 13 +++++++++++++
1 file changed, 13 insertions(+)
create mode 100644 .github/dependabot.yml
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 00000000..ca89712e
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,13 @@
+# To get started with Dependabot version updates, you'll need to specify which
+# package ecosystems to update and where the package manifests are located.
+# Please see the documentation for all configuration options:
+# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
+version: 2
+updates:
+ - package-ecosystem: "npm"
+ directory: "/"
+ schedule:
+ interval: "weekly"
+ allow:
+ - dependency-name: "astro"
+ - dependency-name: "@astrojs/starlight"
From d24353fa1dc16815d29bee0ad40f081d89dce4f6 Mon Sep 17 00:00:00 2001
From: Alice <36531905+CookieSource@users.noreply.github.com>
Date: Thu, 15 Jan 2026 19:51:08 +0100
Subject: [PATCH 17/29] Change Dependabot update interval to monthly
---
.github/dependabot.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index ca89712e..d0febe6f 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -7,7 +7,7 @@ updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
- interval: "weekly"
+ interval: "monthly"
allow:
- dependency-name: "astro"
- dependency-name: "@astrojs/starlight"
From 259bf69272270a89736684b4e045f13f1b7f2886 Mon Sep 17 00:00:00 2001
From: Alice <36531905+CookieSource@users.noreply.github.com>
Date: Thu, 15 Jan 2026 20:16:32 +0100
Subject: [PATCH 18/29] Refactor LanguageTool workflow for reviewdog
integration
---
.github/workflows/languagetool.yml | 304 ++---------------------------
1 file changed, 12 insertions(+), 292 deletions(-)
diff --git a/.github/workflows/languagetool.yml b/.github/workflows/languagetool.yml
index 5a842a30..307462d4 100644
--- a/.github/workflows/languagetool.yml
+++ b/.github/workflows/languagetool.yml
@@ -1,295 +1,15 @@
-# .github/workflows/languagetool.yml
-name: LanguageTool (PR comment)
-
-on:
- pull_request_target:
- types: [opened, reopened, synchronize, labeled]
- issue_comment:
- types: [created]
-
-permissions:
- contents: read
- pull-requests: write
- issues: write
-
-concurrency:
- group: languagetool-${{ github.event.pull_request.number || github.event.issue.number || github.run_id }}
- cancel-in-progress: true
-
-env:
- LT_LANGUAGE: en-US
- RERUN_LABEL: languagetool:rerun
-
+name: reviewdog
+on: [pull_request]
jobs:
- # Comment command -> toggles a label to trigger the PR job
- rerun_on_comment:
- if: |
- github.event_name == 'issue_comment' &&
- github.event.issue.pull_request &&
- startsWith(github.event.comment.body, '/languagetool') &&
- (github.event.comment.author_association == 'MEMBER' ||
- github.event.comment.author_association == 'OWNER' ||
- github.event.comment.author_association == 'COLLABORATOR')
+ linter_name:
+ name: LanguageTool grammar check
runs-on: ubuntu-latest
steps:
- - name: Toggle rerun label on PR
- uses: actions/github-script@v7
- with:
- script: |
- const owner = context.repo.owner;
- const repo = context.repo.repo;
- const issue_number = context.issue.number;
- const label = process.env.RERUN_LABEL;
-
- // Ensure label exists
- try {
- await github.rest.issues.getLabel({ owner, repo, name: label });
- } catch {
- await github.rest.issues.createLabel({
- owner, repo, name: label, color: '0e8a16',
- description: 'Rerun LanguageTool on this PR'
- });
- }
-
- // Remove if present (ignore errors), then add to force a new "labeled" event
- try {
- await github.rest.issues.removeLabel({ owner, repo, issue_number, name: label });
- } catch {}
- await github.rest.issues.addLabels({ owner, repo, issue_number, labels: [label] });
-
- languagetool:
- if: |
- github.event_name == 'pull_request_target' &&
- (
- github.event.action == 'opened' ||
- github.event.action == 'reopened' ||
- github.event.action == 'synchronize' ||
- (github.event.action == 'labeled' && github.event.label.name == 'languagetool:rerun')
- )
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout PR head (safe)
- uses: actions/checkout@v4
- with:
- repository: ${{ github.event.pull_request.head.repo.full_name }}
- ref: ${{ github.event.pull_request.head.sha }}
- fetch-depth: 0
- persist-credentials: false
-
- - name: Fetch base SHA for diff
- run: |
- set -euo pipefail
- git remote add upstream "https://github.com/${{ github.event.pull_request.base.repo.full_name }}.git" || true
- git fetch --no-tags --depth=1 upstream "${{ github.event.pull_request.base.sha }}"
-
- - name: Setup Java 17
- uses: actions/setup-java@v4
- with:
- distribution: temurin
- java-version: "17"
-
- - name: Download LanguageTool CLI (latest snapshot)
- run: |
- set -euo pipefail
- curl -fsSL -o lt.zip "https://internal1.languagetool.org/snapshots/LanguageTool-latest-snapshot.zip"
- rm -rf .lt
- mkdir -p .lt
- unzip -q lt.zip -d .lt
-
- LT_JAR="$(ls -1 .lt/**/languagetool-commandline.jar 2>/dev/null | head -n1 || true)"
- if [ -z "${LT_JAR}" ]; then
- echo "Could not find languagetool-commandline.jar in snapshot" >&2
- find .lt -maxdepth 4 -type f -name "*languagetool*jar" -print >&2 || true
- exit 1
- fi
-
- echo "LT_JAR=${LT_JAR}" >> "$GITHUB_ENV"
-
- - name: Run LanguageTool + build PR comment (collapsible + exact word)
- env:
- BASE_SHA: ${{ github.event.pull_request.base.sha }}
- HEAD_SHA: ${{ github.event.pull_request.head.sha }}
- run: |
- set -euo pipefail
-
- # jq is present on ubuntu-latest, but install if your runner image differs
- command -v jq >/dev/null || (sudo apt-get update && sudo apt-get install -y jq)
-
- # Choose files to check
- mapfile -t FILES < <(git diff --name-only "$BASE_SHA" "$HEAD_SHA" \
- | grep -E '\.(md|mdx|txt|rst|adoc|asciidoc|tex)$' || true)
-
- # Load custom words (optional)
- WORDS_FILE=".languagetool/words.txt"
- if [ -f "$WORDS_FILE" ]; then
- WORDS_JSON="$(jq -R -s '
- split("\n")
- | map(gsub("\r";""))
- | map(select(length>0 and (startswith("#")|not)))
- | map(ascii_downcase)
- ' "$WORDS_FILE")"
- else
- WORDS_JSON='[]'
- fi
-
- : > results.jsonl
-
- if [ "${#FILES[@]}" -eq 0 ]; then
- echo '{"file":"(none)","issues":[]}' >> results.jsonl
- else
- for f in "${FILES[@]}"; do
- [ -f "$f" ] || continue
-
- # LT can print banner lines; keep JSON only (accepts either { or [)
- java -jar "$LT_JAR" -l "${LT_LANGUAGE}" --json "$f" 2>/dev/null \
- | sed -n '/^[{[]/,$p' > lt.json || true
-
- # Extract issues and filter spelling-ish matches for custom words
- jq -c \
- --arg file "$f" \
- --argjson words "$WORDS_JSON" '
- def bad_raw:
- (.context.offset // 0) as $o
- | (.context.length // 0) as $l
- | (.context.text // "") as $t
- | ($t[$o:($o+$l)]);
-
- def badtoken:
- (bad_raw
- | gsub("^[^[:alnum:]]+|[^[:alnum:]]+$";"")
- | ascii_downcase);
-
- (.matches // [])
- | map(
- . as $m
- | ($m.rule.id // "") as $rid
- | ($m.rule.category.id // "") as $cat
- | (badtoken) as $bt
- | select(
- ( (( $cat == "TYPOS") or ($rid|test("MORFOLOGIK";"i")) )
- and (($words|index($bt)) != null)
- ) | not
- )
- | {
- message: ($m.message // "LanguageTool finding"),
- rule: $rid,
- bad: (bad_raw),
- replacements: (($m.replacements // []) | map(.value) | .[0:3]),
- context: ($m.context.text // ""),
- context_offset: ($m.context.offset // 0),
- context_length: ($m.context.length // 0)
- }
- )
- | {file:$file, issues:.}
- ' lt.json >> results.jsonl
- done
- fi
-
- # Build markdown body (stored as a file) - collapsible per file
- node <<'NODE'
- const fs = require("fs");
-
- const marker = "";
- const raw = fs.readFileSync("results.jsonl","utf8").trim();
- const lines = raw ? raw.split("\n").filter(Boolean) : [];
- const parsed = lines.map(l => JSON.parse(l));
-
- const checkedFiles = parsed.map(p => p.file).filter(f => f && f !== "(none)");
- const byFile = parsed
- .filter(p => Array.isArray(p.issues) && p.issues.length > 0)
- .reduce((acc, p) => { acc[p.file] = p.issues; return acc; }, {});
-
- let total = 0;
- for (const f of Object.keys(byFile)) total += byFile[f].length;
-
- function inlineCode(s) {
- if (s == null) return "";
- return String(s).replace(/`/g, "\\`").replace(/\n/g, " ").trim();
- }
-
- function shortContext(text, maxLen=220) {
- const t = (text || "").replace(/\s+/g, " ").trim();
- if (t.length <= maxLen) return t;
- return t.slice(0, maxLen - 1) + "…";
- }
-
- let body =
- `${marker}
- ## LanguageTool report
-
- **Language:** \`${process.env.LT_LANGUAGE || "en-US"}\`
- **Checked files:** ${checkedFiles.length}
- **Findings:** ${total}
- `;
-
- if (!checkedFiles.length) {
- body += `\nNo supported text files changed in this PR (based on configured extensions).\n`;
- } else if (total === 0) {
- body += `\n✅ No issues found in the changed text files.\n`;
- } else {
- body += `\n---\n`;
- for (const [file, issues] of Object.entries(byFile)) {
- body += `\n\n${file} — ${issues.length} finding(s)
\n\n`;
- for (const it of issues.slice(0, 200)) {
- const found = inlineCode(it.bad);
- const ctx = shortContext(it.context);
- const sug = (it.replacements && it.replacements.length)
- ? `Suggested: ${it.replacements.map(s => `\`${inlineCode(s)}\``).join(", ")}\n`
- : "";
- body +=
- `- **${inlineCode(it.rule || "RULE")}**: ${inlineCode(it.message)}
- - Found: \`${found}\`
- - ${sug ? sug.trimEnd() : "Suggested: (none)"}
- - Context: ${ctx ? `> ${ctx}` : "(none)"}
-
- `;
- }
- if (issues.length > 200) body += `…(${issues.length - 200} more in this file)\n\n`;
- body += ` \n`;
- }
- }
-
- fs.writeFileSync("comment.md", body.trim() + "\n");
- NODE
-
- - name: Post or update PR comment
- uses: actions/github-script@v7
- with:
- script: |
- const fs = require('fs');
- const owner = context.repo.owner;
- const repo = context.repo.repo;
- const issue_number = context.payload.pull_request.number;
-
- const body = fs.readFileSync('comment.md', 'utf8');
- const marker = '';
-
- const { data: comments } = await github.rest.issues.listComments({
- owner, repo, issue_number, per_page: 100
- });
-
- const existing = comments.find(c => (c.body || '').includes(marker));
-
- if (existing) {
- await github.rest.issues.updateComment({
- owner, repo, comment_id: existing.id, body
- });
- } else {
- await github.rest.issues.createComment({
- owner, repo, issue_number, body
- });
- }
-
- - name: Remove rerun label
- if: github.event.action == 'labeled' && github.event.label.name == 'languagetool:rerun'
- continue-on-error: true
- uses: actions/github-script@v7
- with:
- script: |
- await github.rest.issues.removeLabel({
- owner: context.repo.owner,
- repo: context.repo.repo,
- issue_number: context.payload.pull_request.number,
- name: process.env.RERUN_LABEL,
- });
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+ - uses: reviewdog/action-languagetool@ea19c757470ce0dbfcbc34aec090317cef1ff0b5 # v1.22.0
+ with:
+ github_token: ${{ secrets.github_token }}
+ # Change reviewdog reporter if you need [github-pr-check,github-check,github-pr-review].
+ reporter: github-pr-review
+ # Change reporter level if you need.
+ level: info
From a5900aa00c5fc367529c85ebf292c26118c959ff Mon Sep 17 00:00:00 2001
From: Alice <36531905+CookieSource@users.noreply.github.com>
Date: Thu, 15 Jan 2026 20:22:48 +0100
Subject: [PATCH 19/29] Update languagetool.yml
---
.github/workflows/languagetool.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/workflows/languagetool.yml b/.github/workflows/languagetool.yml
index 307462d4..3ce298f1 100644
--- a/.github/workflows/languagetool.yml
+++ b/.github/workflows/languagetool.yml
@@ -13,3 +13,4 @@ jobs:
reporter: github-pr-review
# Change reporter level if you need.
level: info
+ patterns: "**/*.md **/*.mdx **/*.txt"
From c22aacd228fad6eed288b631f7184e1761860ea6 Mon Sep 17 00:00:00 2001
From: Alice <36531905+CookieSource@users.noreply.github.com>
Date: Mon, 19 Jan 2026 21:41:27 +0100
Subject: [PATCH 20/29] Update GitHub Actions workflow for grammar checks
harper
---
.github/workflows/languagetool.yml | 92 ++++++++++++++++++++++++++----
1 file changed, 80 insertions(+), 12 deletions(-)
diff --git a/.github/workflows/languagetool.yml b/.github/workflows/languagetool.yml
index 3ce298f1..9666f661 100644
--- a/.github/workflows/languagetool.yml
+++ b/.github/workflows/languagetool.yml
@@ -1,16 +1,84 @@
-name: reviewdog
-on: [pull_request]
+name: Harper (grammar suggestions)
+
+on:
+ pull_request:
+
+permissions:
+ contents: read
+ pull-requests: write
+
jobs:
- linter_name:
- name: LanguageTool grammar check
+ harper:
runs-on: ubuntu-latest
+
steps:
- - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- - uses: reviewdog/action-languagetool@ea19c757470ce0dbfcbc34aec090317cef1ff0b5 # v1.22.0
+ - uses: actions/checkout@v4
with:
- github_token: ${{ secrets.github_token }}
- # Change reviewdog reporter if you need [github-pr-check,github-check,github-pr-review].
- reporter: github-pr-review
- # Change reporter level if you need.
- level: info
- patterns: "**/*.md **/*.mdx **/*.txt"
+ fetch-depth: 0
+
+ - name: Install Harper
+ run: |
+ curl -fsSL https://raw.githubusercontent.com/automattic/harper/main/install.sh | sh
+ echo "$HOME/.harper/bin" >> $GITHUB_PATH
+
+ - name: Run Harper on changed md/mdx
+ id: harper
+ run: |
+ set -euo pipefail
+
+ mapfile -t FILES < <(
+ git diff --name-only origin/${{ github.base_ref }}...${{ github.sha }} \
+ -- '*.md' '*.mdx' || true
+ )
+
+ if [ ${#FILES[@]} -eq 0 ]; then
+ echo "No markdown files changed." > harper.txt
+ exit 0
+ fi
+
+ {
+ echo "## Harper grammar suggestions"
+ echo
+ for f in "${FILES[@]}"; do
+ [ -f "$f" ] || continue
+ echo "### $f"
+ harper "$f" || true
+ echo
+ done
+ } > harper.txt
+
+ - name: Post PR comment
+ uses: actions/github-script@v7
+ with:
+ script: |
+ const fs = require("fs");
+ const body = fs.readFileSync("harper.txt", "utf8").trim();
+
+ const marker = "";
+ const commentBody = `${marker}\n${body || "No issues found."}`;
+
+ const { data: comments } = await github.rest.issues.listComments({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: context.issue.number,
+ });
+
+ const existing = comments.find(c =>
+ c.body && c.body.includes(marker)
+ );
+
+ if (existing) {
+ await github.rest.issues.updateComment({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ comment_id: existing.id,
+ body: commentBody,
+ });
+ } else {
+ await github.rest.issues.createComment({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: context.issue.number,
+ body: commentBody,
+ });
+ }
From 8d6076464a2458dfc873d0a0a24b0368bef8984c Mon Sep 17 00:00:00 2001
From: Alice <36531905+CookieSource@users.noreply.github.com>
Date: Wed, 21 Jan 2026 19:55:21 +0100
Subject: [PATCH 21/29] Update and rename languagetool.yml to checkspelling.yml
---
.github/workflows/checkspelling.yml | 154 ++++++++++++++++++++++++++++
.github/workflows/languagetool.yml | 84 ---------------
2 files changed, 154 insertions(+), 84 deletions(-)
create mode 100644 .github/workflows/checkspelling.yml
delete mode 100644 .github/workflows/languagetool.yml
diff --git a/.github/workflows/checkspelling.yml b/.github/workflows/checkspelling.yml
new file mode 100644
index 00000000..d8ec2885
--- /dev/null
+++ b/.github/workflows/checkspelling.yml
@@ -0,0 +1,154 @@
+name: Harper (grammar + spelling)
+
+on:
+ pull_request:
+ types: [opened, synchronize, reopened, ready_for_review]
+
+permissions:
+ contents: read
+ pull-requests: write
+
+jobs:
+ harper:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Set up Rust
+ uses: dtolnay/rust-toolchain@stable
+
+ - name: Cache Cargo
+ uses: actions/cache@v4
+ with:
+ path: |
+ ~/.cargo/registry
+ ~/.cargo/git
+ target
+ key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
+ restore-keys: |
+ ${{ runner.os }}-cargo-
+
+ - name: Install harper-cli
+ run: |
+ cargo install --locked --git https://github.com/Automattic/harper.git harper-cli
+
+ - name: Write Harper dictionary
+ env:
+ XDG_CONFIG_HOME: ${{ github.workspace }}/.xdg
+ run: |
+ mkdir -p "$XDG_CONFIG_HOME/harper-ls"
+ cat > "$XDG_CONFIG_HOME/harper-ls/dictionary.txt" <<'EOF'
+ AerynOS
+ astrojs
+ sha256sum
+ SHA256
+ certutil
+ hashfile
+ lastUpdated
+ EOF
+
+ - name: Run Harper on PR-changed files
+ id: harper
+ env:
+ XDG_CONFIG_HOME: ${{ github.workspace }}/.xdg
+ run: |
+ set -euo pipefail
+
+ BASE="${{ github.event.pull_request.base.sha }}"
+ HEAD="${{ github.event.pull_request.head.sha }}"
+
+ mapfile -t FILES < <(git diff --name-only "$BASE" "$HEAD" -- \
+ '*.md' '*.mdx' '*.txt' || true)
+
+ : > harper-report.txt
+
+ if [ "${#FILES[@]}" -eq 0 ]; then
+ echo "No matching files changed (.md/.mdx/.txt)." > harper-report.txt
+ echo "fail=0" >> "$GITHUB_OUTPUT"
+ exit 0
+ fi
+
+ fail=0
+ for f in "${FILES[@]}"; do
+ if [ ! -f "$f" ]; then
+ continue
+ fi
+
+ echo "===== $f =====" >> harper-report.txt
+ echo >> harper-report.txt
+
+ out="$(harper-cli lint "$f" || true)"
+ echo "$out" >> harper-report.txt
+ echo >> harper-report.txt
+
+ after="$(printf '%s\n' "$out" | sed -n 's/.*after overlap removal, \([0-9]\+\) after.*/\1/p' | tail -n 1)"
+ after="${after:-0}"
+
+ if [ "$after" -ne 0 ]; then
+ fail=1
+ fi
+ done
+
+ echo "fail=$fail" >> "$GITHUB_OUTPUT"
+
+ - name: Comment on PR with Harper output
+ if: github.event.pull_request
+ uses: actions/github-script@v7
+ with:
+ script: |
+ const fs = require('fs');
+
+ const raw = fs.readFileSync('harper-report.txt', 'utf8');
+
+ const limit = 65000;
+ const clipped =
+ raw.length > limit
+ ? raw.slice(0, limit) + "\n\n[truncated]\n"
+ : raw;
+
+ const marker = '';
+ const body =
+ `${marker}\n` +
+ `\n` +
+ `Harper output
\n\n` +
+ "```text\n" +
+ clipped +
+ "\n```\n" +
+ ` \n`;
+
+ const { owner, repo } = context.repo;
+ const issue_number = context.issue.number;
+
+ const comments = await github.rest.issues.listComments({
+ owner,
+ repo,
+ issue_number,
+ });
+
+ const existing = comments.data.find(c =>
+ c.body && c.body.includes(marker)
+ );
+
+ if (existing) {
+ await github.rest.issues.updateComment({
+ owner,
+ repo,
+ comment_id: existing.id,
+ body,
+ });
+ } else {
+ await github.rest.issues.createComment({
+ owner,
+ repo,
+ issue_number,
+ body,
+ });
+ }
+
+ - name: Fail if Harper found issues
+ if: steps.harper.outputs.fail == '1'
+ run: exit 1
diff --git a/.github/workflows/languagetool.yml b/.github/workflows/languagetool.yml
deleted file mode 100644
index 9666f661..00000000
--- a/.github/workflows/languagetool.yml
+++ /dev/null
@@ -1,84 +0,0 @@
-name: Harper (grammar suggestions)
-
-on:
- pull_request:
-
-permissions:
- contents: read
- pull-requests: write
-
-jobs:
- harper:
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Install Harper
- run: |
- curl -fsSL https://raw.githubusercontent.com/automattic/harper/main/install.sh | sh
- echo "$HOME/.harper/bin" >> $GITHUB_PATH
-
- - name: Run Harper on changed md/mdx
- id: harper
- run: |
- set -euo pipefail
-
- mapfile -t FILES < <(
- git diff --name-only origin/${{ github.base_ref }}...${{ github.sha }} \
- -- '*.md' '*.mdx' || true
- )
-
- if [ ${#FILES[@]} -eq 0 ]; then
- echo "No markdown files changed." > harper.txt
- exit 0
- fi
-
- {
- echo "## Harper grammar suggestions"
- echo
- for f in "${FILES[@]}"; do
- [ -f "$f" ] || continue
- echo "### $f"
- harper "$f" || true
- echo
- done
- } > harper.txt
-
- - name: Post PR comment
- uses: actions/github-script@v7
- with:
- script: |
- const fs = require("fs");
- const body = fs.readFileSync("harper.txt", "utf8").trim();
-
- const marker = "";
- const commentBody = `${marker}\n${body || "No issues found."}`;
-
- const { data: comments } = await github.rest.issues.listComments({
- owner: context.repo.owner,
- repo: context.repo.repo,
- issue_number: context.issue.number,
- });
-
- const existing = comments.find(c =>
- c.body && c.body.includes(marker)
- );
-
- if (existing) {
- await github.rest.issues.updateComment({
- owner: context.repo.owner,
- repo: context.repo.repo,
- comment_id: existing.id,
- body: commentBody,
- });
- } else {
- await github.rest.issues.createComment({
- owner: context.repo.owner,
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: commentBody,
- });
- }
From 99404df22addcee89425910a60c1386573fe2b8d Mon Sep 17 00:00:00 2001
From: Alice <36531905+CookieSource@users.noreply.github.com>
Date: Thu, 22 Jan 2026 13:26:20 +0100
Subject: [PATCH 22/29] Update checkspelling.yml
---
.github/workflows/checkspelling.yml | 175 +++++++---------------------
1 file changed, 40 insertions(+), 135 deletions(-)
diff --git a/.github/workflows/checkspelling.yml b/.github/workflows/checkspelling.yml
index d8ec2885..6c9ad261 100644
--- a/.github/workflows/checkspelling.yml
+++ b/.github/workflows/checkspelling.yml
@@ -1,154 +1,59 @@
-name: Harper (grammar + spelling)
+# .github/workflows/grammar.yml
+name: Grammar Check (PR Changes Only)
on:
pull_request:
- types: [opened, synchronize, reopened, ready_for_review]
-
-permissions:
- contents: read
- pull-requests: write
jobs:
- harper:
+ grammar:
runs-on: ubuntu-latest
-
steps:
- - name: Checkout
- uses: actions/checkout@v4
+ - uses: actions/checkout@v3
+
+ - name: Get changed markdown files
+ id: changed
+ uses: tj-actions/changed-files@v39
with:
- fetch-depth: 0
+ files: |
+ **/*.md
+ **/*.mdx
- - name: Set up Rust
- uses: dtolnay/rust-toolchain@stable
+ - name: Skip if no docs changed
+ if: steps.changed.outputs.any_changed != 'true'
+ run: echo "No .md or .mdx files changed."
- - name: Cache Cargo
- uses: actions/cache@v4
+ - name: Set up Node
+ if: steps.changed.outputs.any_changed == 'true'
+ uses: actions/setup-node@v3
with:
- path: |
- ~/.cargo/registry
- ~/.cargo/git
- target
- key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- restore-keys: |
- ${{ runner.os }}-cargo-
+ node-version: 18
- - name: Install harper-cli
+ - name: Install MDX cleaner
+ if: steps.changed.outputs.any_changed == 'true'
run: |
- cargo install --locked --git https://github.com/Automattic/harper.git harper-cli
+ npm install remark remark-mdx strip-markdown
+ mkdir -p dist
+ for file in ${{ steps.changed.outputs.all_changed_files }}; do
+ node scripts/clean-mdx.js "$file" > "dist/${file//\//_}.txt"
+ done
- - name: Write Harper dictionary
- env:
- XDG_CONFIG_HOME: ${{ github.workspace }}/.xdg
+ - name: Download LanguageTool CLI
+ if: steps.changed.outputs.any_changed == 'true'
run: |
- mkdir -p "$XDG_CONFIG_HOME/harper-ls"
- cat > "$XDG_CONFIG_HOME/harper-ls/dictionary.txt" <<'EOF'
- AerynOS
- astrojs
- sha256sum
- SHA256
- certutil
- hashfile
- lastUpdated
- EOF
+ curl -L -o lt.zip https://languagetool.org/download/LanguageTool-stable.zip
+ unzip lt.zip
+ echo "LT_PATH=$(pwd)/LanguageTool-*/languagetool-commandline.jar" >> $GITHUB_ENV
- - name: Run Harper on PR-changed files
- id: harper
+ - name: Run LanguageTool with reviewdog
+ if: steps.changed.outputs.any_changed == 'true'
env:
- XDG_CONFIG_HOME: ${{ github.workspace }}/.xdg
+ REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
- set -euo pipefail
-
- BASE="${{ github.event.pull_request.base.sha }}"
- HEAD="${{ github.event.pull_request.head.sha }}"
-
- mapfile -t FILES < <(git diff --name-only "$BASE" "$HEAD" -- \
- '*.md' '*.mdx' '*.txt' || true)
-
- : > harper-report.txt
-
- if [ "${#FILES[@]}" -eq 0 ]; then
- echo "No matching files changed (.md/.mdx/.txt)." > harper-report.txt
- echo "fail=0" >> "$GITHUB_OUTPUT"
- exit 0
- fi
-
- fail=0
- for f in "${FILES[@]}"; do
- if [ ! -f "$f" ]; then
- continue
- fi
-
- echo "===== $f =====" >> harper-report.txt
- echo >> harper-report.txt
-
- out="$(harper-cli lint "$f" || true)"
- echo "$out" >> harper-report.txt
- echo >> harper-report.txt
-
- after="$(printf '%s\n' "$out" | sed -n 's/.*after overlap removal, \([0-9]\+\) after.*/\1/p' | tail -n 1)"
- after="${after:-0}"
-
- if [ "$after" -ne 0 ]; then
- fail=1
- fi
+ for f in dist/*.txt; do
+ java -jar $LT_PATH -l en-US "$f" |
+ reviewdog -efm="%f: Line %l: %m" \
+ -name="LanguageTool" \
+ -reporter=github-pr-review \
+ -filter-mode=added \
+ -fail-on-error=false
done
-
- echo "fail=$fail" >> "$GITHUB_OUTPUT"
-
- - name: Comment on PR with Harper output
- if: github.event.pull_request
- uses: actions/github-script@v7
- with:
- script: |
- const fs = require('fs');
-
- const raw = fs.readFileSync('harper-report.txt', 'utf8');
-
- const limit = 65000;
- const clipped =
- raw.length > limit
- ? raw.slice(0, limit) + "\n\n[truncated]\n"
- : raw;
-
- const marker = '';
- const body =
- `${marker}\n` +
- `\n` +
- `Harper output
\n\n` +
- "```text\n" +
- clipped +
- "\n```\n" +
- ` \n`;
-
- const { owner, repo } = context.repo;
- const issue_number = context.issue.number;
-
- const comments = await github.rest.issues.listComments({
- owner,
- repo,
- issue_number,
- });
-
- const existing = comments.data.find(c =>
- c.body && c.body.includes(marker)
- );
-
- if (existing) {
- await github.rest.issues.updateComment({
- owner,
- repo,
- comment_id: existing.id,
- body,
- });
- } else {
- await github.rest.issues.createComment({
- owner,
- repo,
- issue_number,
- body,
- });
- }
-
- - name: Fail if Harper found issues
- if: steps.harper.outputs.fail == '1'
- run: exit 1
From 75c9b31b51df9f3cec25d1b7936bf00c9ab4160a Mon Sep 17 00:00:00 2001
From: Alice <36531905+CookieSource@users.noreply.github.com>
Date: Thu, 22 Jan 2026 13:27:15 +0100
Subject: [PATCH 23/29] Update and rename languagetool_reviewdog.py to
clean-mdx.js
---
.github/scripts/clean-mdx.js | 19 +++
.github/scripts/languagetool_reviewdog.py | 185 ----------------------
2 files changed, 19 insertions(+), 185 deletions(-)
create mode 100644 .github/scripts/clean-mdx.js
delete mode 100644 .github/scripts/languagetool_reviewdog.py
diff --git a/.github/scripts/clean-mdx.js b/.github/scripts/clean-mdx.js
new file mode 100644
index 00000000..6fe3a3fa
--- /dev/null
+++ b/.github/scripts/clean-mdx.js
@@ -0,0 +1,19 @@
+// scripts/clean-mdx.js
+import fs from 'fs/promises';
+import { remark } from 'remark';
+import remarkMdx from 'remark-mdx';
+import strip from 'strip-markdown';
+
+const filePath = process.argv[2];
+if (!filePath) {
+ console.error('No file path provided.');
+ process.exit(1);
+}
+
+const mdx = await fs.readFile(filePath, 'utf8');
+const file = await remark()
+ .use(remarkMdx)
+ .use(strip)
+ .process(mdx);
+
+console.log(String(file));
diff --git a/.github/scripts/languagetool_reviewdog.py b/.github/scripts/languagetool_reviewdog.py
deleted file mode 100644
index 050dc37e..00000000
--- a/.github/scripts/languagetool_reviewdog.py
+++ /dev/null
@@ -1,185 +0,0 @@
-#!/usr/bin/env python3
-import argparse
-import json
-import os
-import re
-import subprocess
-from typing import Dict, List, Optional, Set, Tuple
-
-import requests
-
-
-def sh(*args: str) -> str:
- return subprocess.check_output(args, text=True).strip()
-
-
-def offset_to_line_col(text: str, offset: int) -> Tuple[int, int]:
- # reviewdog wants 1-based line/column
- line = text.count("\n", 0, offset) + 1
- last_nl = text.rfind("\n", 0, offset)
- col = offset - (last_nl + 1) + 1
- return line, col
-
-
-def normalize_word(s: str) -> str:
- s = re.sub(r"^[\W_]+|[\W_]+$", "", s, flags=re.UNICODE)
- return s.lower()
-
-
-def load_dictionary(path: str) -> Set[str]:
- if not path or not os.path.exists(path):
- return set()
- words: Set[str] = set()
- with open(path, "r", encoding="utf-8") as f:
- for line in f:
- line = line.strip()
- if not line or line.startswith("#"):
- continue
- words.add(line.lower())
- return words
-
-
-def changed_files(base_sha: str, head_sha: str) -> List[str]:
- # list only changed files in the PR
- out = sh("git", "diff", "--name-only", base_sha, head_sha)
- files = [x.strip() for x in out.splitlines() if x.strip()]
- return files
-
-
-def is_text_file(path: str) -> bool:
- ext = os.path.splitext(path)[1].lower()
- return ext in {".md", ".txt", ".rst", ".adoc", ".asciidoc", ".tex"} or os.path.basename(path).lower() in {
- "readme", "readme.md", "readme.txt"
- }
-
-
-def lt_check(api_url: str, language: str, text: str) -> Dict:
- resp = requests.post(
- api_url,
- data={
- "language": language,
- "text": text,
- },
- timeout=60,
- )
- resp.raise_for_status()
- return resp.json()
-
-
-def main() -> int:
- ap = argparse.ArgumentParser()
- ap.add_argument("--api-url", required=True)
- ap.add_argument("--language", required=True)
- ap.add_argument("--base-sha", required=True)
- ap.add_argument("--head-sha", required=True)
- ap.add_argument("--dictionary", default=".languagetool/words.txt")
- ap.add_argument("--max-suggestions", type=int, default=3)
- args = ap.parse_args()
-
- dict_words = load_dictionary(args.dictionary)
-
- files = changed_files(args.base_sha, args.head_sha)
- files = [f for f in files if os.path.exists(f) and is_text_file(f)]
-
- diagnostics: List[Dict] = []
-
- for path in files:
- try:
- with open(path, "r", encoding="utf-8") as f:
- content = f.read()
- except UnicodeDecodeError:
- with open(path, "r", encoding="utf-8", errors="replace") as f:
- content = f.read()
-
- if not content.strip():
- continue
-
- try:
- result = lt_check(args.api_url, args.language, content)
- except Exception as e:
- # Emit a single diagnostic if the API call fails for a file
- diagnostics.append(
- {
- "message": f"LanguageTool API error for {path}: {e}",
- "location": {"path": path, "range": {"start": {"line": 1, "column": 1}}},
- "severity": "WARNING",
- }
- )
- continue
-
- matches = result.get("matches", [])
- for m in matches:
- offset = int(m.get("offset", 0))
- length = int(m.get("length", 0))
- bad = content[offset : offset + length]
-
- rule = m.get("rule", {}) or {}
- rule_id = rule.get("id") or "UNKNOWN_RULE"
- category = (rule.get("category", {}) or {}).get("id", "")
-
- # Cheap custom dictionary support without modifying LT server:
- # if LT reports a spelling/typo-ish issue AND the token is in our dictionary -> ignore it.
- # (Most spelling problems show up in category TYPOS and/or rule ids containing MORFOLOGIK.)
- bad_norm = normalize_word(bad)
- if dict_words and bad_norm:
- looks_like_spelling = (category.upper() == "TYPOS") or ("MORFOLOGIK" in str(rule_id).upper())
- if looks_like_spelling and (bad_norm in dict_words):
- continue
-
- start_line, start_col = offset_to_line_col(content, offset)
- end_line, end_col = offset_to_line_col(content, offset + max(length, 0))
-
- # Suggestions (as rdjson "suggestions" with ranges)
- suggestions = []
- repls = m.get("replacements", []) or []
- for r in repls[: args.max_suggestions]:
- val = r.get("value")
- if not val:
- continue
- suggestions.append(
- {
- "range": {
- "start": {"line": start_line, "column": start_col},
- "end": {"line": end_line, "column": end_col},
- },
- "text": val,
- }
- )
-
- code = {"value": rule_id}
- urls = rule.get("urls") or []
- if urls and isinstance(urls, list):
- u = urls[0].get("value")
- if u:
- code["url"] = u
-
- diagnostics.append(
- {
- "message": m.get("message") or "LanguageTool finding",
- "location": {
- "path": path,
- "range": {
- "start": {"line": start_line, "column": start_col},
- "end": {"line": end_line, "column": end_col},
- },
- },
- "severity": "WARNING",
- "code": code,
- **({"suggestions": suggestions} if suggestions else {}),
- }
- )
-
- rdjson = {
- "source": {
- "name": "LanguageTool",
- "url": "https://languagetool.org",
- },
- "diagnostics": diagnostics,
- }
-
- print(json.dumps(rdjson))
- return 0
-
-
-if __name__ == "__main__":
- raise SystemExit(main())
From f8da8edc0731a15ee2446895861e20f5b0b126ee Mon Sep 17 00:00:00 2001
From: Alice <36531905+CookieSource@users.noreply.github.com>
Date: Thu, 22 Jan 2026 13:30:58 +0100
Subject: [PATCH 24/29] Update checkspelling.yml
---
.github/workflows/checkspelling.yml | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/.github/workflows/checkspelling.yml b/.github/workflows/checkspelling.yml
index 6c9ad261..99df086e 100644
--- a/.github/workflows/checkspelling.yml
+++ b/.github/workflows/checkspelling.yml
@@ -1,4 +1,3 @@
-# .github/workflows/grammar.yml
name: Grammar Check (PR Changes Only)
on:
@@ -7,6 +6,7 @@ on:
jobs:
grammar:
runs-on: ubuntu-latest
+
steps:
- uses: actions/checkout@v3
@@ -18,9 +18,9 @@ jobs:
**/*.md
**/*.mdx
- - name: Skip if no docs changed
+ - name: Skip if no .md/.mdx files changed
if: steps.changed.outputs.any_changed != 'true'
- run: echo "No .md or .mdx files changed."
+ run: echo "No markdown or MDX files changed."
- name: Set up Node
if: steps.changed.outputs.any_changed == 'true'
@@ -28,13 +28,18 @@ jobs:
with:
node-version: 18
- - name: Install MDX cleaner
+ - name: Install MDX cleaner dependencies
+ if: steps.changed.outputs.any_changed == 'true'
+ run: npm install remark remark-mdx strip-markdown
+
+ - name: Extract prose from changed docs
if: steps.changed.outputs.any_changed == 'true'
run: |
- npm install remark remark-mdx strip-markdown
mkdir -p dist
for file in ${{ steps.changed.outputs.all_changed_files }}; do
- node scripts/clean-mdx.js "$file" > "dist/${file//\//_}.txt"
+ if [[ "$file" == *.md || "$file" == *.mdx ]]; then
+ node .github/scripts/clean-mdx.js "$file" > "dist/${file//\//_}.txt"
+ fi
done
- name: Download LanguageTool CLI
From 9debc3d5dfb53460fb0679565ae5012e44cf2fc6 Mon Sep 17 00:00:00 2001
From: Alice <36531905+CookieSource@users.noreply.github.com>
Date: Thu, 22 Jan 2026 13:33:35 +0100
Subject: [PATCH 25/29] Update checkspelling.yml
---
.github/workflows/checkspelling.yml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/.github/workflows/checkspelling.yml b/.github/workflows/checkspelling.yml
index 99df086e..fa2ef14c 100644
--- a/.github/workflows/checkspelling.yml
+++ b/.github/workflows/checkspelling.yml
@@ -49,6 +49,10 @@ jobs:
unzip lt.zip
echo "LT_PATH=$(pwd)/LanguageTool-*/languagetool-commandline.jar" >> $GITHUB_ENV
+ - name: Install reviewdog
+ if: steps.changed.outputs.any_changed == 'true'
+ uses: reviewdog/action-install@v1
+
- name: Run LanguageTool with reviewdog
if: steps.changed.outputs.any_changed == 'true'
env:
From 1ec129de25049a53d598872b8899b625cee82d02 Mon Sep 17 00:00:00 2001
From: Alice <36531905+CookieSource@users.noreply.github.com>
Date: Thu, 22 Jan 2026 13:35:31 +0100
Subject: [PATCH 26/29] Update checkspelling.yml
---
.github/workflows/checkspelling.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/checkspelling.yml b/.github/workflows/checkspelling.yml
index fa2ef14c..557ace24 100644
--- a/.github/workflows/checkspelling.yml
+++ b/.github/workflows/checkspelling.yml
@@ -51,8 +51,8 @@ jobs:
- name: Install reviewdog
if: steps.changed.outputs.any_changed == 'true'
- uses: reviewdog/action-install@v1
-
+ uses: reviewdog/action-setup@v1
+
- name: Run LanguageTool with reviewdog
if: steps.changed.outputs.any_changed == 'true'
env:
From ec5b21f2fc6282cfdfddce164edbe73924df3397 Mon Sep 17 00:00:00 2001
From: Alice <36531905+CookieSource@users.noreply.github.com>
Date: Thu, 22 Jan 2026 13:40:18 +0100
Subject: [PATCH 27/29] Create languagetool-json-to-reviewdog.js
---
.../scripts/languagetool-json-to-reviewdog.js | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
create mode 100644 .github/scripts/languagetool-json-to-reviewdog.js
diff --git a/.github/scripts/languagetool-json-to-reviewdog.js b/.github/scripts/languagetool-json-to-reviewdog.js
new file mode 100644
index 00000000..6260ef3d
--- /dev/null
+++ b/.github/scripts/languagetool-json-to-reviewdog.js
@@ -0,0 +1,18 @@
+// Converts LanguageTool JSON output to reviewdog format
+import fs from 'fs';
+
+const [,, jsonFile, filename] = process.argv;
+
+if (!jsonFile || !filename) {
+ console.error('Usage: node script.js ');
+ process.exit(1);
+}
+
+const raw = fs.readFileSync(jsonFile, 'utf-8');
+const data = JSON.parse(raw);
+
+for (const match of data.matches) {
+ const line = match.context.offset !== undefined ? match.context.line || 0 : 0;
+ const message = match.message.replace(/\n/g, ' ');
+ console.log(`${filename}: Line ${line + 1}: ${message}`);
+}
From b56ba2a9d30346bc9a021ef86139f3be789c75b3 Mon Sep 17 00:00:00 2001
From: Alice <36531905+CookieSource@users.noreply.github.com>
Date: Thu, 22 Jan 2026 13:40:32 +0100
Subject: [PATCH 28/29] Update checkspelling.yml
---
.github/workflows/checkspelling.yml | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/.github/workflows/checkspelling.yml b/.github/workflows/checkspelling.yml
index 557ace24..c36f6646 100644
--- a/.github/workflows/checkspelling.yml
+++ b/.github/workflows/checkspelling.yml
@@ -28,9 +28,10 @@ jobs:
with:
node-version: 18
- - name: Install MDX cleaner dependencies
+ - name: Install dependencies for MDX and parser
if: steps.changed.outputs.any_changed == 'true'
- run: npm install remark remark-mdx strip-markdown
+ run: |
+ npm install remark remark-mdx strip-markdown
- name: Extract prose from changed docs
if: steps.changed.outputs.any_changed == 'true'
@@ -51,15 +52,17 @@ jobs:
- name: Install reviewdog
if: steps.changed.outputs.any_changed == 'true'
- uses: reviewdog/action-setup@v1
-
- - name: Run LanguageTool with reviewdog
+ uses: reviewdog/action-setup@v1
+
+ - name: Run LanguageTool and parse to reviewdog format
if: steps.changed.outputs.any_changed == 'true'
env:
REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
for f in dist/*.txt; do
- java -jar $LT_PATH -l en-US "$f" |
+ OUT="dist/$(basename "$f").json"
+ java -jar $LT_PATH -l en-US --json "$f" > "$OUT"
+ node .github/scripts/languagetool-json-to-reviewdog.js "$OUT" "$f" |
reviewdog -efm="%f: Line %l: %m" \
-name="LanguageTool" \
-reporter=github-pr-review \
From cf29ae7e49f582079156cae2fb0ae52530cca576 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 1 Feb 2026 09:38:43 +0000
Subject: [PATCH 29/29] Bump @astrojs/starlight from 0.37.2 to 0.37.5
Bumps [@astrojs/starlight](https://github.com/withastro/starlight/tree/HEAD/packages/starlight) from 0.37.2 to 0.37.5.
- [Release notes](https://github.com/withastro/starlight/releases)
- [Changelog](https://github.com/withastro/starlight/blob/main/packages/starlight/CHANGELOG.md)
- [Commits](https://github.com/withastro/starlight/commits/@astrojs/starlight@0.37.5/packages/starlight)
---
updated-dependencies:
- dependency-name: "@astrojs/starlight"
dependency-version: 0.37.5
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
package-lock.json | 8 +-
package.json | 2 +-
pnpm-lock.yaml | 3541 +++++++++++++++++++++++++--------------------
3 files changed, 2007 insertions(+), 1544 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 9172aa55..7b9bc52c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,7 +8,7 @@
"name": "aerynos-dotdev",
"version": "0.0.1",
"dependencies": {
- "@astrojs/starlight": "^0.37.2",
+ "@astrojs/starlight": "^0.37.5",
"astro": "^5.16.8",
"sharp": "^0.34.5",
"starlight-kbd": "^0.3.0",
@@ -114,9 +114,9 @@
}
},
"node_modules/@astrojs/starlight": {
- "version": "0.37.2",
- "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.37.2.tgz",
- "integrity": "sha512-DGeaaKizwxHDsz72FdxyIBZ32eY8OdUoH6b757BGZlLEDq82O4uipFWoh+kz7+aKg1QoFu/rDq6fqtw+58tpRQ==",
+ "version": "0.37.5",
+ "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.37.5.tgz",
+ "integrity": "sha512-+pC2pgy0iR9Ucl1P4CE0jyfsoNKcUSB2RIoBwm4UnyyhtlaEjoSU7MZwa5IJkzS9sBgIbLbLgYVbkC4tHN8rkQ==",
"license": "MIT",
"dependencies": {
"@astrojs/markdown-remark": "^6.3.1",
diff --git a/package.json b/package.json
index a4baae13..d45fd5e9 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,7 @@
"astro": "astro"
},
"dependencies": {
- "@astrojs/starlight": "^0.37.2",
+ "@astrojs/starlight": "^0.37.5",
"astro": "^5.16.8",
"sharp": "^0.34.5",
"starlight-kbd": "^0.3.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 53122409..ef1cc1d4 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,400 +9,460 @@ importers:
.:
dependencies:
'@astrojs/starlight':
- specifier: ^0.32.0
- version: 0.32.0(astro@5.3.0(rollup@4.34.7)(typescript@5.7.3)(yaml@2.7.0))
+ specifier: ^0.37.5
+ version: 0.37.5(astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2))
astro:
- specifier: ^5.1.5
- version: 5.3.0(rollup@4.34.7)(typescript@5.7.3)(yaml@2.7.0)
+ specifier: ^5.16.8
+ version: 5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2)
sharp:
- specifier: ^0.32.5
- version: 0.32.6
+ specifier: ^0.34.5
+ version: 0.34.5
+ starlight-kbd:
+ specifier: ^0.3.0
+ version: 0.3.0(@astrojs/starlight@0.37.5(astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2)))
starlight-links-validator:
- specifier: ^0.18.0
- version: 0.18.0(@astrojs/starlight@0.32.0(astro@5.3.0(rollup@4.34.7)(typescript@5.7.3)(yaml@2.7.0)))
+ specifier: ^0.19.2
+ version: 0.19.2(@astrojs/starlight@0.37.5(astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2)))(astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2))
+ starlight-scroll-to-top:
+ specifier: ^0.4.0
+ version: 0.4.0(@astrojs/starlight@0.37.5(astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2)))
yaml:
- specifier: ^2.7.0
- version: 2.7.0
+ specifier: ^2.8.2
+ version: 2.8.2
+ devDependencies:
+ puppeteer:
+ specifier: ^23.11.1
+ version: 23.11.1(typescript@5.7.3)
+ puppeteer-autoscroll-down:
+ specifier: ^2.0.1
+ version: 2.0.1
+ starlight-to-pdf:
+ specifier: ^1.4.0
+ version: 1.4.0(puppeteer-autoscroll-down@2.0.1)(puppeteer@23.11.1(typescript@5.7.3))
packages:
- '@astrojs/compiler@2.10.4':
- resolution: {integrity: sha512-86B3QGagP99MvSNwuJGiYSBHnh8nLvm2Q1IFI15wIUJJsPeQTO3eb2uwBmrqRsXykeR/mBzH8XCgz5AAt1BJrQ==}
+ '@astrojs/compiler@2.13.0':
+ resolution: {integrity: sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw==}
- '@astrojs/internal-helpers@0.5.1':
- resolution: {integrity: sha512-M7rAge1n2+aOSxNvKUFa0u/KFn0W+sZy7EW91KOSERotm2Ti8qs+1K0xx3zbOxtAVrmJb5/J98eohVvvEqtNkw==}
+ '@astrojs/internal-helpers@0.7.5':
+ resolution: {integrity: sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==}
- '@astrojs/markdown-remark@6.1.0':
- resolution: {integrity: sha512-emZNNSTPGgPc3V399Cazpp5+snogjaF04ocOSQn9vy3Kw/eIC4vTQjXOrWDEoSEy+AwPDZX9bQ4wd3bxhpmGgQ==}
+ '@astrojs/markdown-remark@6.3.10':
+ resolution: {integrity: sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A==}
- '@astrojs/mdx@4.0.8':
- resolution: {integrity: sha512-/aiLr2yQ55W9AbpyOgfMtFXk7g2t7XoWdC2Avps/NqxAx4aYONDLneX43D79QwgqdjFhin7o3cIPp/vVppMbaA==}
- engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0}
+ '@astrojs/mdx@4.3.13':
+ resolution: {integrity: sha512-IHDHVKz0JfKBy3//52JSiyWv089b7GVSChIXLrlUOoTLWowG3wr2/8hkaEgEyd/vysvNQvGk+QhysXpJW5ve6Q==}
+ engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0}
peerDependencies:
astro: ^5.0.0
- '@astrojs/prism@3.2.0':
- resolution: {integrity: sha512-GilTHKGCW6HMq7y3BUv9Ac7GMe/MO9gi9GW62GzKtth0SwukCu/qp2wLiGpEujhY+VVhaG9v7kv/5vFzvf4NYw==}
- engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0}
+ '@astrojs/prism@3.3.0':
+ resolution: {integrity: sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==}
+ engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0}
- '@astrojs/sitemap@3.2.1':
- resolution: {integrity: sha512-uxMfO8f7pALq0ADL6Lk68UV6dNYjJ2xGUzyjjVj60JLBs5a6smtlkBYv3tQ0DzoqwS7c9n4FUx5lgv0yPo/fgA==}
+ '@astrojs/sitemap@3.7.0':
+ resolution: {integrity: sha512-+qxjUrz6Jcgh+D5VE1gKUJTA3pSthuPHe6Ao5JCxok794Lewx8hBFaWHtOnN0ntb2lfOf7gvOi9TefUswQ/ZVA==}
- '@astrojs/starlight@0.32.0':
- resolution: {integrity: sha512-RJ+zPeTBlfgZJA3cWl3Nml9RLQhYUupnE0obL3iVxvVKhoCwUJnxmKicPp9EBxSML0TK8X4CUpnEwiC7OtfYwg==}
+ '@astrojs/starlight@0.37.5':
+ resolution: {integrity: sha512-+pC2pgy0iR9Ucl1P4CE0jyfsoNKcUSB2RIoBwm4UnyyhtlaEjoSU7MZwa5IJkzS9sBgIbLbLgYVbkC4tHN8rkQ==}
peerDependencies:
- astro: ^5.1.5
+ astro: ^5.5.0
- '@astrojs/telemetry@3.2.0':
- resolution: {integrity: sha512-wxhSKRfKugLwLlr4OFfcqovk+LIFtKwLyGPqMsv+9/ibqqnW3Gv7tBhtKEb0gAyUAC4G9BTVQeQahqnQAhd6IQ==}
- engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0}
+ '@astrojs/telemetry@3.3.0':
+ resolution: {integrity: sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==}
+ engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0}
- '@babel/helper-string-parser@7.25.9':
- resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
+ '@babel/code-frame@7.29.0':
+ resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.25.9':
- resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.26.9':
- resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==}
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.29.0':
+ resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/runtime@7.26.9':
- resolution: {integrity: sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==}
+ '@babel/runtime@7.28.6':
+ resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.26.9':
- resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==}
+ '@babel/types@7.29.0':
+ resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
engines: {node: '>=6.9.0'}
- '@ctrl/tinycolor@4.1.0':
- resolution: {integrity: sha512-WyOx8cJQ+FQus4Mm4uPIZA64gbk3Wxh0so5Lcii0aJifqwoVOlfFtorjLE0Hen4OYyHZMXDWqMmaQemBhgxFRQ==}
+ '@capsizecss/unpack@4.0.0':
+ resolution: {integrity: sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==}
+ engines: {node: '>=18'}
+
+ '@ctrl/tinycolor@4.2.0':
+ resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==}
engines: {node: '>=14'}
- '@emnapi/runtime@1.3.1':
- resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==}
+ '@emnapi/runtime@1.8.1':
+ resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==}
- '@esbuild/aix-ppc64@0.24.2':
- resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==}
+ '@esbuild/aix-ppc64@0.25.12':
+ resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/android-arm64@0.24.2':
- resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==}
+ '@esbuild/android-arm64@0.25.12':
+ resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
- '@esbuild/android-arm@0.24.2':
- resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==}
+ '@esbuild/android-arm@0.25.12':
+ resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
- '@esbuild/android-x64@0.24.2':
- resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==}
+ '@esbuild/android-x64@0.25.12':
+ resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
- '@esbuild/darwin-arm64@0.24.2':
- resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==}
+ '@esbuild/darwin-arm64@0.25.12':
+ resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-x64@0.24.2':
- resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==}
+ '@esbuild/darwin-x64@0.25.12':
+ resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.24.2':
- resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==}
+ '@esbuild/freebsd-arm64@0.25.12':
+ resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.24.2':
- resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==}
+ '@esbuild/freebsd-x64@0.25.12':
+ resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
- '@esbuild/linux-arm64@0.24.2':
- resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==}
+ '@esbuild/linux-arm64@0.25.12':
+ resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.24.2':
- resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==}
+ '@esbuild/linux-arm@0.25.12':
+ resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
- '@esbuild/linux-ia32@0.24.2':
- resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==}
+ '@esbuild/linux-ia32@0.25.12':
+ resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
- '@esbuild/linux-loong64@0.24.2':
- resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==}
+ '@esbuild/linux-loong64@0.25.12':
+ resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
- '@esbuild/linux-mips64el@0.24.2':
- resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==}
+ '@esbuild/linux-mips64el@0.25.12':
+ resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-ppc64@0.24.2':
- resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==}
+ '@esbuild/linux-ppc64@0.25.12':
+ resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-riscv64@0.24.2':
- resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==}
+ '@esbuild/linux-riscv64@0.25.12':
+ resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-s390x@0.24.2':
- resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==}
+ '@esbuild/linux-s390x@0.25.12':
+ resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
- '@esbuild/linux-x64@0.24.2':
- resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==}
+ '@esbuild/linux-x64@0.25.12':
+ resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
- '@esbuild/netbsd-arm64@0.24.2':
- resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==}
+ '@esbuild/netbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.24.2':
- resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==}
+ '@esbuild/netbsd-x64@0.25.12':
+ resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.24.2':
- resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==}
+ '@esbuild/openbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.24.2':
- resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==}
+ '@esbuild/openbsd-x64@0.25.12':
+ resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/sunos-x64@0.24.2':
- resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==}
+ '@esbuild/openharmony-arm64@0.25.12':
+ resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.25.12':
+ resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
- '@esbuild/win32-arm64@0.24.2':
- resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==}
+ '@esbuild/win32-arm64@0.25.12':
+ resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-ia32@0.24.2':
- resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==}
+ '@esbuild/win32-ia32@0.25.12':
+ resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.24.2':
- resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==}
+ '@esbuild/win32-x64@0.25.12':
+ resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
- '@expressive-code/core@0.40.2':
- resolution: {integrity: sha512-gXY3v7jbgz6nWKvRpoDxK4AHUPkZRuJsM79vHX/5uhV9/qX6Qnctp/U/dMHog/LCVXcuOps+5nRmf1uxQVPb3w==}
+ '@expressive-code/core@0.41.6':
+ resolution: {integrity: sha512-FvJQP+hG0jWi/FLBSmvHInDqWR7jNANp9PUDjdMqSshHb0y7sxx3vHuoOr6SgXjWw+MGLqorZyPQ0aAlHEok6g==}
+
+ '@expressive-code/plugin-frames@0.41.6':
+ resolution: {integrity: sha512-d+hkSYXIQot6fmYnOmWAM+7TNWRv/dhfjMsNq+mIZz8Tb4mPHOcgcfZeEM5dV9TDL0ioQNvtcqQNuzA1sRPjxg==}
- '@expressive-code/plugin-frames@0.40.2':
- resolution: {integrity: sha512-aLw5IlDlZWb10Jo/TTDCVsmJhKfZ7FJI83Zo9VDrV0OBlmHAg7klZqw68VDz7FlftIBVAmMby53/MNXPnMjTSQ==}
+ '@expressive-code/plugin-shiki@0.41.6':
+ resolution: {integrity: sha512-Y6zmKBmsIUtWTzdefqlzm/h9Zz0Rc4gNdt2GTIH7fhHH2I9+lDYCa27BDwuBhjqcos6uK81Aca9dLUC4wzN+ng==}
- '@expressive-code/plugin-shiki@0.40.2':
- resolution: {integrity: sha512-t2HMR5BO6GdDW1c1ISBTk66xO503e/Z8ecZdNcr6E4NpUfvY+MRje+LtrcvbBqMwWBBO8RpVKcam/Uy+1GxwKQ==}
+ '@expressive-code/plugin-text-markers@0.41.6':
+ resolution: {integrity: sha512-PBFa1wGyYzRExMDzBmAWC6/kdfG1oLn4pLpBeTfIRrALPjcGA/59HP3e7q9J0Smk4pC7U+lWkA2LHR8FYV8U7Q==}
- '@expressive-code/plugin-text-markers@0.40.2':
- resolution: {integrity: sha512-/XoLjD67K9nfM4TgDlXAExzMJp6ewFKxNpfUw4F7q5Ecy+IU3/9zQQG/O70Zy+RxYTwKGw2MA9kd7yelsxnSmw==}
+ '@img/colour@1.0.0':
+ resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==}
+ engines: {node: '>=18'}
- '@img/sharp-darwin-arm64@0.33.5':
- resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==}
+ '@img/sharp-darwin-arm64@0.34.5':
+ resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [darwin]
- '@img/sharp-darwin-x64@0.33.5':
- resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==}
+ '@img/sharp-darwin-x64@0.34.5':
+ resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [darwin]
- '@img/sharp-libvips-darwin-arm64@1.0.4':
- resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==}
+ '@img/sharp-libvips-darwin-arm64@1.2.4':
+ resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==}
cpu: [arm64]
os: [darwin]
- '@img/sharp-libvips-darwin-x64@1.0.4':
- resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==}
+ '@img/sharp-libvips-darwin-x64@1.2.4':
+ resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==}
cpu: [x64]
os: [darwin]
- '@img/sharp-libvips-linux-arm64@1.0.4':
- resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==}
+ '@img/sharp-libvips-linux-arm64@1.2.4':
+ resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==}
cpu: [arm64]
os: [linux]
- '@img/sharp-libvips-linux-arm@1.0.5':
- resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==}
+ '@img/sharp-libvips-linux-arm@1.2.4':
+ resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==}
cpu: [arm]
os: [linux]
- '@img/sharp-libvips-linux-s390x@1.0.4':
- resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
+ '@img/sharp-libvips-linux-ppc64@1.2.4':
+ resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-riscv64@1.2.4':
+ resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-s390x@1.2.4':
+ resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==}
cpu: [s390x]
os: [linux]
- '@img/sharp-libvips-linux-x64@1.0.4':
- resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==}
+ '@img/sharp-libvips-linux-x64@1.2.4':
+ resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==}
cpu: [x64]
os: [linux]
- '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
- resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==}
+ '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
+ resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==}
cpu: [arm64]
os: [linux]
- '@img/sharp-libvips-linuxmusl-x64@1.0.4':
- resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==}
+ '@img/sharp-libvips-linuxmusl-x64@1.2.4':
+ resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==}
cpu: [x64]
os: [linux]
- '@img/sharp-linux-arm64@0.33.5':
- resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==}
+ '@img/sharp-linux-arm64@0.34.5':
+ resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
- '@img/sharp-linux-arm@0.33.5':
- resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==}
+ '@img/sharp-linux-arm@0.34.5':
+ resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm]
os: [linux]
- '@img/sharp-linux-s390x@0.33.5':
- resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==}
+ '@img/sharp-linux-ppc64@0.34.5':
+ resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@img/sharp-linux-riscv64@0.34.5':
+ resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@img/sharp-linux-s390x@0.34.5':
+ resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x]
os: [linux]
- '@img/sharp-linux-x64@0.33.5':
- resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==}
+ '@img/sharp-linux-x64@0.34.5':
+ resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
- '@img/sharp-linuxmusl-arm64@0.33.5':
- resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==}
+ '@img/sharp-linuxmusl-arm64@0.34.5':
+ resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
- '@img/sharp-linuxmusl-x64@0.33.5':
- resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==}
+ '@img/sharp-linuxmusl-x64@0.34.5':
+ resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
- '@img/sharp-wasm32@0.33.5':
- resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==}
+ '@img/sharp-wasm32@0.34.5':
+ resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [wasm32]
- '@img/sharp-win32-ia32@0.33.5':
- resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==}
+ '@img/sharp-win32-arm64@0.34.5':
+ resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@img/sharp-win32-ia32@0.34.5':
+ resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ia32]
os: [win32]
- '@img/sharp-win32-x64@0.33.5':
- resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==}
+ '@img/sharp-win32-x64@0.34.5':
+ resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [win32]
- '@jridgewell/sourcemap-codec@1.5.0':
- resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
- '@mdx-js/mdx@3.1.0':
- resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==}
-
- '@nodelib/fs.scandir@2.1.5':
- resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
- engines: {node: '>= 8'}
-
- '@nodelib/fs.stat@2.0.5':
- resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
- engines: {node: '>= 8'}
-
- '@nodelib/fs.walk@1.2.8':
- resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
- engines: {node: '>= 8'}
+ '@mdx-js/mdx@3.1.1':
+ resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==}
'@oslojs/encoding@1.1.0':
resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==}
- '@pagefind/darwin-arm64@1.3.0':
- resolution: {integrity: sha512-365BEGl6ChOsauRjyVpBjXybflXAOvoMROw3TucAROHIcdBvXk9/2AmEvGFU0r75+vdQI4LJdJdpH4Y6Yqaj4A==}
+ '@pagefind/darwin-arm64@1.4.0':
+ resolution: {integrity: sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==}
cpu: [arm64]
os: [darwin]
- '@pagefind/darwin-x64@1.3.0':
- resolution: {integrity: sha512-zlGHA23uuXmS8z3XxEGmbHpWDxXfPZ47QS06tGUq0HDcZjXjXHeLG+cboOy828QIV5FXsm9MjfkP5e4ZNbOkow==}
+ '@pagefind/darwin-x64@1.4.0':
+ resolution: {integrity: sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==}
cpu: [x64]
os: [darwin]
- '@pagefind/default-ui@1.3.0':
- resolution: {integrity: sha512-CGKT9ccd3+oRK6STXGgfH+m0DbOKayX6QGlq38TfE1ZfUcPc5+ulTuzDbZUnMo+bubsEOIypm4Pl2iEyzZ1cNg==}
+ '@pagefind/default-ui@1.4.0':
+ resolution: {integrity: sha512-wie82VWn3cnGEdIjh4YwNESyS1G6vRHwL6cNjy9CFgNnWW/PGRjsLq300xjVH5sfPFK3iK36UxvIBymtQIEiSQ==}
- '@pagefind/linux-arm64@1.3.0':
- resolution: {integrity: sha512-8lsxNAiBRUk72JvetSBXs4WRpYrQrVJXjlRRnOL6UCdBN9Nlsz0t7hWstRk36+JqHpGWOKYiuHLzGYqYAqoOnQ==}
+ '@pagefind/freebsd-x64@1.4.0':
+ resolution: {integrity: sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@pagefind/linux-arm64@1.4.0':
+ resolution: {integrity: sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==}
cpu: [arm64]
os: [linux]
- '@pagefind/linux-x64@1.3.0':
- resolution: {integrity: sha512-hAvqdPJv7A20Ucb6FQGE6jhjqy+vZ6pf+s2tFMNtMBG+fzcdc91uTw7aP/1Vo5plD0dAOHwdxfkyw0ugal4kcQ==}
+ '@pagefind/linux-x64@1.4.0':
+ resolution: {integrity: sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==}
cpu: [x64]
os: [linux]
- '@pagefind/windows-x64@1.3.0':
- resolution: {integrity: sha512-BR1bIRWOMqkf8IoU576YDhij1Wd/Zf2kX/kCI0b2qzCKC8wcc2GQJaaRMCpzvCCrmliO4vtJ6RITp/AnoYUUmQ==}
+ '@pagefind/windows-x64@1.4.0':
+ resolution: {integrity: sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==}
cpu: [x64]
os: [win32]
- '@rollup/pluginutils@5.1.4':
- resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
+ '@puppeteer/browsers@2.6.1':
+ resolution: {integrity: sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ '@rollup/pluginutils@5.3.0':
+ resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
@@ -410,127 +470,154 @@ packages:
rollup:
optional: true
- '@rollup/rollup-android-arm-eabi@4.34.7':
- resolution: {integrity: sha512-l6CtzHYo8D2TQ3J7qJNpp3Q1Iye56ssIAtqbM2H8axxCEEwvN7o8Ze9PuIapbxFL3OHrJU2JBX6FIIVnP/rYyw==}
+ '@rollup/rollup-android-arm-eabi@4.57.1':
+ resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.34.7':
- resolution: {integrity: sha512-KvyJpFUueUnSp53zhAa293QBYqwm94TgYTIfXyOTtidhm5V0LbLCJQRGkQClYiX3FXDQGSvPxOTD/6rPStMMDg==}
+ '@rollup/rollup-android-arm64@4.57.1':
+ resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.34.7':
- resolution: {integrity: sha512-jq87CjmgL9YIKvs8ybtIC98s/M3HdbqXhllcy9EdLV0yMg1DpxES2gr65nNy7ObNo/vZ/MrOTxt0bE5LinL6mA==}
+ '@rollup/rollup-darwin-arm64@4.57.1':
+ resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.34.7':
- resolution: {integrity: sha512-rSI/m8OxBjsdnMMg0WEetu/w+LhLAcCDEiL66lmMX4R3oaml3eXz3Dxfvrxs1FbzPbJMaItQiksyMfv1hoIxnA==}
+ '@rollup/rollup-darwin-x64@4.57.1':
+ resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.34.7':
- resolution: {integrity: sha512-oIoJRy3ZrdsXpFuWDtzsOOa/E/RbRWXVokpVrNnkS7npz8GEG++E1gYbzhYxhxHbO2om1T26BZjVmdIoyN2WtA==}
+ '@rollup/rollup-freebsd-arm64@4.57.1':
+ resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.34.7':
- resolution: {integrity: sha512-X++QSLm4NZfZ3VXGVwyHdRf58IBbCu9ammgJxuWZYLX0du6kZvdNqPwrjvDfwmi6wFdvfZ/s6K7ia0E5kI7m8Q==}
+ '@rollup/rollup-freebsd-x64@4.57.1':
+ resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.34.7':
- resolution: {integrity: sha512-Z0TzhrsNqukTz3ISzrvyshQpFnFRfLunYiXxlCRvcrb3nvC5rVKI+ZXPFG/Aa4jhQa1gHgH3A0exHaRRN4VmdQ==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.57.1':
+ resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.34.7':
- resolution: {integrity: sha512-nkznpyXekFAbvFBKBy4nNppSgneB1wwG1yx/hujN3wRnhnkrYVugMTCBXED4+Ni6thoWfQuHNYbFjgGH0MBXtw==}
+ '@rollup/rollup-linux-arm-musleabihf@4.57.1':
+ resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.34.7':
- resolution: {integrity: sha512-KCjlUkcKs6PjOcxolqrXglBDcfCuUCTVlX5BgzgoJHw+1rWH1MCkETLkLe5iLLS9dP5gKC7mp3y6x8c1oGBUtA==}
+ '@rollup/rollup-linux-arm64-gnu@4.57.1':
+ resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.34.7':
- resolution: {integrity: sha512-uFLJFz6+utmpbR313TTx+NpPuAXbPz4BhTQzgaP0tozlLnGnQ6rCo6tLwaSa6b7l6gRErjLicXQ1iPiXzYotjw==}
+ '@rollup/rollup-linux-arm64-musl@4.57.1':
+ resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-loongarch64-gnu@4.34.7':
- resolution: {integrity: sha512-ws8pc68UcJJqCpneDFepnwlsMUFoWvPbWXT/XUrJ7rWUL9vLoIN3GAasgG+nCvq8xrE3pIrd+qLX/jotcLy0Qw==}
+ '@rollup/rollup-linux-loong64-gnu@4.57.1':
+ resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-musl@4.57.1':
+ resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==}
cpu: [loong64]
os: [linux]
- '@rollup/rollup-linux-powerpc64le-gnu@4.34.7':
- resolution: {integrity: sha512-vrDk9JDa/BFkxcS2PbWpr0C/LiiSLxFbNOBgfbW6P8TBe9PPHx9Wqbvx2xgNi1TOAyQHQJ7RZFqBiEohm79r0w==}
+ '@rollup/rollup-linux-ppc64-gnu@4.57.1':
+ resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==}
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.34.7':
- resolution: {integrity: sha512-rB+ejFyjtmSo+g/a4eovDD1lHWHVqizN8P0Hm0RElkINpS0XOdpaXloqM4FBkF9ZWEzg6bezymbpLmeMldfLTw==}
+ '@rollup/rollup-linux-ppc64-musl@4.57.1':
+ resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.57.1':
+ resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-musl@4.57.1':
+ resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.34.7':
- resolution: {integrity: sha512-nNXNjo4As6dNqRn7OrsnHzwTgtypfRA3u3AKr0B3sOOo+HkedIbn8ZtFnB+4XyKJojIfqDKmbIzO1QydQ8c+Pw==}
+ '@rollup/rollup-linux-s390x-gnu@4.57.1':
+ resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.34.7':
- resolution: {integrity: sha512-9kPVf9ahnpOMSGlCxXGv980wXD0zRR3wyk8+33/MXQIpQEOpaNe7dEHm5LMfyRZRNt9lMEQuH0jUKj15MkM7QA==}
+ '@rollup/rollup-linux-x64-gnu@4.57.1':
+ resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.34.7':
- resolution: {integrity: sha512-7wJPXRWTTPtTFDFezA8sle/1sdgxDjuMoRXEKtx97ViRxGGkVQYovem+Q8Pr/2HxiHp74SSRG+o6R0Yq0shPwQ==}
+ '@rollup/rollup-linux-x64-musl@4.57.1':
+ resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-win32-arm64-msvc@4.34.7':
- resolution: {integrity: sha512-MN7aaBC7mAjsiMEZcsJvwNsQVNZShgES/9SzWp1HC9Yjqb5OpexYnRjF7RmE4itbeesHMYYQiAtUAQaSKs2Rfw==}
+ '@rollup/rollup-openbsd-x64@4.57.1':
+ resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@rollup/rollup-openharmony-arm64@4.57.1':
+ resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.57.1':
+ resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.34.7':
- resolution: {integrity: sha512-aeawEKYswsFu1LhDM9RIgToobquzdtSc4jSVqHV8uApz4FVvhFl/mKh92wc8WpFc6aYCothV/03UjY6y7yLgbg==}
+ '@rollup/rollup-win32-ia32-msvc@4.57.1':
+ resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.34.7':
- resolution: {integrity: sha512-4ZedScpxxIrVO7otcZ8kCX1mZArtH2Wfj3uFCxRJ9NO80gg1XV0U/b2f/MKaGwj2X3QopHfoWiDQ917FRpwY3w==}
+ '@rollup/rollup-win32-x64-gnu@4.57.1':
+ resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==}
cpu: [x64]
os: [win32]
- '@shikijs/core@1.29.2':
- resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==}
+ '@rollup/rollup-win32-x64-msvc@4.57.1':
+ resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==}
+ cpu: [x64]
+ os: [win32]
+
+ '@shikijs/core@3.22.0':
+ resolution: {integrity: sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==}
- '@shikijs/engine-javascript@1.29.2':
- resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==}
+ '@shikijs/engine-javascript@3.22.0':
+ resolution: {integrity: sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==}
- '@shikijs/engine-oniguruma@1.29.2':
- resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==}
+ '@shikijs/engine-oniguruma@3.22.0':
+ resolution: {integrity: sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==}
- '@shikijs/langs@1.29.2':
- resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==}
+ '@shikijs/langs@3.22.0':
+ resolution: {integrity: sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==}
- '@shikijs/themes@1.29.2':
- resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==}
+ '@shikijs/themes@3.22.0':
+ resolution: {integrity: sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==}
- '@shikijs/types@1.29.2':
- resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==}
+ '@shikijs/types@3.22.0':
+ resolution: {integrity: sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==}
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
- '@types/acorn@4.0.6':
- resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
-
- '@types/cookie@0.6.0':
- resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
+ '@tootallnate/quickjs-emscripten@0.23.0':
+ resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==}
'@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
@@ -538,8 +625,8 @@ packages:
'@types/estree-jsx@1.0.5':
resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
- '@types/estree@1.0.6':
- resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
@@ -562,6 +649,9 @@ packages:
'@types/node@17.0.45':
resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
+ '@types/node@25.1.0':
+ resolution: {integrity: sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==}
+
'@types/picomatch@3.0.2':
resolution: {integrity: sha512-n0i8TD3UDB7paoMMxA3Y65vUncFJXjcUf7lQY7YyKGl6031FNjfsLs6pdLFCy2GNFxItPJG8GvvpbZc2skH7WA==}
@@ -574,6 +664,9 @@ packages:
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+ '@types/yauzl@2.10.3':
+ resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
+
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
@@ -582,28 +675,36 @@ packages:
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- acorn@8.14.0:
- resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
hasBin: true
+ agent-base@7.1.4:
+ resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
+ engines: {node: '>= 14'}
+
ansi-align@3.0.1:
resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
- ansi-escapes@7.1.1:
- resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==}
+ ansi-escapes@7.2.0:
+ resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==}
engines: {node: '>=18'}
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
- ansi-regex@6.1.0:
- resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+ ansi-regex@6.2.2:
+ resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
engines: {node: '>=12'}
- ansi-styles@6.2.1:
- resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@6.2.3:
+ resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
engines: {node: '>=12'}
anymatch@3.1.3:
@@ -613,9 +714,6 @@ packages:
arg@5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
- argparse@1.0.10:
- resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
-
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@@ -626,46 +724,65 @@ packages:
array-iterate@2.0.1:
resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==}
+ ast-types@0.13.4:
+ resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==}
+ engines: {node: '>=4'}
+
astring@1.9.0:
resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
hasBin: true
- astro-expressive-code@0.40.2:
- resolution: {integrity: sha512-yJMQId0yXSAbW9I6yqvJ3FcjKzJ8zRL7elbJbllkv1ZJPlsI0NI83Pxn1YL1IapEM347EvOOkSW2GL+2+NO61w==}
+ astro-expressive-code@0.41.6:
+ resolution: {integrity: sha512-l47tb1uhmVIebHUkw+HEPtU/av0G4O8Q34g2cbkPvC7/e9ZhANcjUUciKt9Hp6gSVDdIuXBBLwJQn2LkeGMOAw==}
peerDependencies:
- astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0
+ astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta
- astro@5.3.0:
- resolution: {integrity: sha512-e88l/Yk/6enR/ZDddLbqtM+oblBFk5mneNSmNesyVYGL/6Dj4UA67GPAZOk79VxT5dbLlclZSyyw/wlxN1aj3A==}
- engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'}
+ astro@5.17.1:
+ resolution: {integrity: sha512-oD3tlxTaVWGq/Wfbqk6gxzVRz98xa/rYlpe+gU2jXJMSD01k6sEDL01ZlT8mVSYB/rMgnvIOfiQQ3BbLdN237A==}
+ engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'}
hasBin: true
axobject-query@4.1.0:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
engines: {node: '>= 0.4'}
- b4a@1.6.7:
- resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==}
+ b4a@1.7.3:
+ resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==}
+ peerDependencies:
+ react-native-b4a: '*'
+ peerDependenciesMeta:
+ react-native-b4a:
+ optional: true
bail@2.0.2:
resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
- bare-events@2.5.4:
- resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==}
+ bare-events@2.8.2:
+ resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==}
+ peerDependencies:
+ bare-abort-controller: '*'
+ peerDependenciesMeta:
+ bare-abort-controller:
+ optional: true
- bare-fs@4.0.1:
- resolution: {integrity: sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==}
- engines: {bare: '>=1.7.0'}
+ bare-fs@4.5.3:
+ resolution: {integrity: sha512-9+kwVx8QYvt3hPWnmb19tPnh38c6Nihz8Lx3t0g9+4GoIf3/fTgYwM4Z6NxgI+B9elLQA7mLE9PpqcWtOMRDiQ==}
+ engines: {bare: '>=1.16.0'}
+ peerDependencies:
+ bare-buffer: '*'
+ peerDependenciesMeta:
+ bare-buffer:
+ optional: true
- bare-os@3.4.0:
- resolution: {integrity: sha512-9Ous7UlnKbe3fMi7Y+qh0DwAup6A1JkYgPnjvMDNOlmnxNRQvQ/7Nst+OnUQKzk0iAT0m9BisbDVp9gCv8+ETA==}
- engines: {bare: '>=1.6.0'}
+ bare-os@3.6.2:
+ resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==}
+ engines: {bare: '>=1.14.0'}
bare-path@3.0.0:
resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==}
- bare-stream@2.6.5:
- resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==}
+ bare-stream@2.7.0:
+ resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==}
peerDependencies:
bare-buffer: '*'
bare-events: '*'
@@ -675,25 +792,25 @@ packages:
bare-events:
optional: true
+ bare-url@2.3.2:
+ resolution: {integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==}
+
base-64@1.0.0:
resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==}
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+ basic-ftp@5.1.0:
+ resolution: {integrity: sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==}
+ engines: {node: '>=10.0.0'}
+
bcp-47-match@2.0.3:
resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==}
bcp-47@2.1.0:
resolution: {integrity: sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==}
- binary-extensions@2.3.0:
- resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
- engines: {node: '>=8'}
-
- bl@4.1.0:
- resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
-
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
@@ -701,13 +818,16 @@ packages:
resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==}
engines: {node: '>=18'}
- braces@3.0.3:
- resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
- engines: {node: '>=8'}
+ buffer-crc32@0.2.13:
+ resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
camelcase@8.0.0:
resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==}
engines: {node: '>=16'}
@@ -715,8 +835,8 @@ packages:
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
- chalk@5.4.1:
- resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ chalk@5.6.2:
+ resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
character-entities-html4@2.1.0:
@@ -731,21 +851,27 @@ packages:
character-reference-invalid@2.0.1:
resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
- chokidar@3.6.0:
- resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
- engines: {node: '>= 8.10.0'}
+ chokidar@5.0.0:
+ resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==}
+ engines: {node: '>= 20.19.0'}
- chownr@1.1.4:
- resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
+ chromium-bidi@0.11.0:
+ resolution: {integrity: sha512-6CJWHkNRoyZyjV9Rwv2lYONZf1Xm0IuDyNq97nwSsxxP3wf5Bwy15K5rOvVKMtJ127jJBmxFUanSAOjgFRxgrA==}
+ peerDependencies:
+ devtools-protocol: '*'
- ci-info@4.1.0:
- resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==}
+ ci-info@4.4.0:
+ resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==}
engines: {node: '>=8'}
cli-boxes@3.0.0:
resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
engines: {node: '>=10'}
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
clsx@2.1.1:
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines: {node: '>=6'}
@@ -760,39 +886,68 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
- color-string@1.9.1:
- resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
-
- color@4.2.3:
- resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
- engines: {node: '>=12.5.0'}
-
comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+ commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
+ engines: {node: '>=16'}
+
common-ancestor-path@1.0.1:
resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==}
cookie-es@1.2.2:
resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==}
- cookie@0.7.2:
- resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
- engines: {node: '>= 0.6'}
+ cookie@1.1.1:
+ resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==}
+ engines: {node: '>=18'}
- crossws@0.3.4:
- resolution: {integrity: sha512-uj0O1ETYX1Bh6uSgktfPvwDiPYGQ3aI4qVsaC/LWpkIzGj1nUYm5FK3K+t11oOlpN01lGbprFCH4wBlKdJjVgw==}
+ cosmiconfig@9.0.0:
+ resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ crossws@0.3.5:
+ resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==}
- css-selector-parser@3.0.5:
- resolution: {integrity: sha512-3itoDFbKUNx1eKmVpYMFyqKX04Ww9osZ+dLgrk6GEv6KMVeXUhUnp4I5X+evw+u3ZxVU6RFXSSRxlTeMh8bA+g==}
+ css-select@5.2.2:
+ resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
+
+ css-selector-parser@3.3.0:
+ resolution: {integrity: sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g==}
+
+ css-tree@2.2.1:
+ resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
+ css-tree@3.1.0:
+ resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+
+ css-what@6.2.2:
+ resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
+ engines: {node: '>= 6'}
cssesc@3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
hasBin: true
- debug@4.4.0:
- resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
+ csso@5.0.5:
+ resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
+ data-uri-to-buffer@6.0.2:
+ resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==}
+ engines: {node: '>= 14'}
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
@@ -800,43 +955,42 @@ packages:
supports-color:
optional: true
- decode-named-character-reference@1.0.2:
- resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
-
- decompress-response@6.0.0:
- resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
- engines: {node: '>=10'}
-
- deep-extend@0.6.0:
- resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
- engines: {node: '>=4.0.0'}
+ decode-named-character-reference@1.3.0:
+ resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==}
defu@6.1.4:
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
+ degenerator@5.0.1:
+ resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==}
+ engines: {node: '>= 14'}
+
dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
- destr@2.0.3:
- resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==}
+ destr@2.0.5:
+ resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
- detect-libc@2.0.3:
- resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
deterministic-object-hash@2.0.2:
resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==}
engines: {node: '>=18'}
- devalue@5.1.1:
- resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==}
+ devalue@5.6.2:
+ resolution: {integrity: sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==}
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
- diff@5.2.0:
- resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+ devtools-protocol@0.0.1367902:
+ resolution: {integrity: sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==}
+
+ diff@8.0.3:
+ resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==}
engines: {node: '>=0.3.1'}
direction@2.0.1:
@@ -846,32 +1000,53 @@ packages:
dlv@1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
+ dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+
+ domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+
+ domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+
+ domutils@3.2.2:
+ resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
+
dset@3.1.4:
resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==}
engines: {node: '>=4'}
- emoji-regex-xs@1.0.0:
- resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==}
-
- emoji-regex@10.4.0:
- resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
+ emoji-regex@10.6.0:
+ resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
- end-of-stream@1.4.4:
- resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+ end-of-stream@1.4.5:
+ resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
+ entities@6.0.1:
+ resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
+ engines: {node: '>=0.12'}
+
+ env-paths@2.2.1:
+ resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
+ engines: {node: '>=6'}
+
environment@1.1.0:
resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
engines: {node: '>=18'}
- es-module-lexer@1.6.0:
- resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==}
+ error-ex@1.3.4:
+ resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
+
+ es-module-lexer@1.7.0:
+ resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
esast-util-from-estree@2.0.0:
resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==}
@@ -879,20 +1054,33 @@ packages:
esast-util-from-js@2.0.1:
resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==}
- esbuild@0.24.2:
- resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==}
+ esbuild@0.25.12:
+ resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
engines: {node: '>=18'}
hasBin: true
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
escape-string-regexp@5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
+ escodegen@2.1.0:
+ resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
+ engines: {node: '>=6.0'}
+ hasBin: true
+
esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
hasBin: true
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
estree-util-attach-comments@3.0.0:
resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==}
@@ -917,75 +1105,79 @@ packages:
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
- eventemitter3@5.0.1:
- resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
- expand-template@2.0.3:
- resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
- engines: {node: '>=6'}
+ eventemitter3@5.0.4:
+ resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==}
+
+ events-universal@1.0.1:
+ resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==}
- expressive-code@0.40.2:
- resolution: {integrity: sha512-1zIda2rB0qiDZACawzw2rbdBQiWHBT56uBctS+ezFe5XMAaFaHLnnSYND/Kd+dVzO9HfCXRDpzH3d+3fvOWRcw==}
+ expressive-code@0.41.6:
+ resolution: {integrity: sha512-W/5+IQbrpCIM5KGLjO35wlp1NCwDOOVQb+PAvzEoGkW1xjGM807ZGfBKptNWH6UECvt6qgmLyWolCMYKh7eQmA==}
extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+ extract-zip@2.0.1:
+ resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
+ engines: {node: '>= 10.17.0'}
+ hasBin: true
+
fast-fifo@1.3.2:
resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
- fast-glob@3.3.3:
- resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
- engines: {node: '>=8.6.0'}
-
- fastq@1.19.0:
- resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==}
+ fd-slicer@1.1.0:
+ resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
- fill-range@7.1.1:
- resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
- engines: {node: '>=8'}
-
- find-up-simple@1.0.0:
- resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==}
- engines: {node: '>=18'}
-
- find-up@4.1.0:
- resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
- engines: {node: '>=8'}
-
- find-yarn-workspace-root2@1.2.16:
- resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==}
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
flattie@1.1.1:
resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==}
engines: {node: '>=8'}
- fs-constants@1.0.0:
- resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
+ fontace@0.4.0:
+ resolution: {integrity: sha512-moThBCItUe2bjZip5PF/iZClpKHGLwMvR79Kp8XpGRBrvoRSnySN4VcILdv3/MJzbhvUA5WeiUXF5o538m5fvg==}
+
+ fontkitten@1.0.2:
+ resolution: {integrity: sha512-piJxbLnkD9Xcyi7dWJRnqszEURixe7CrF/efBfbffe2DPyabmuIuqraruY8cXTs19QoM8VJzx47BDRVNXETM7Q==}
+ engines: {node: '>=20'}
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
- get-east-asian-width@1.3.0:
- resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==}
+ get-caller-file@2.0.5:
+ 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'}
- github-from-package@0.0.0:
- resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
+ get-stream@5.2.0:
+ resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
+ engines: {node: '>=8'}
+
+ get-uri@6.0.5:
+ resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==}
+ engines: {node: '>= 14'}
github-slugger@2.0.0:
resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
- glob-parent@5.1.2:
- resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
- engines: {node: '>= 6'}
-
- graceful-fs@4.2.11:
- resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-
- h3@1.15.0:
- resolution: {integrity: sha512-OsjX4JW8J4XGgCgEcad20pepFQWnuKH+OwkCJjogF3C+9AZ1iYdtB4hX6vAb5DskBiu5ljEXqApINjR8CqoCMQ==}
+ h3@1.15.5:
+ resolution: {integrity: sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==}
has-flag@5.0.1:
resolution: {integrity: sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==}
@@ -1000,8 +1192,8 @@ packages:
hast-util-from-html@2.0.3:
resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==}
- hast-util-from-parse5@8.0.2:
- resolution: {integrity: sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A==}
+ hast-util-from-parse5@8.0.3:
+ resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==}
hast-util-has-property@3.0.0:
resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==}
@@ -1024,20 +1216,20 @@ packages:
hast-util-raw@9.1.0:
resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==}
- hast-util-select@6.0.3:
- resolution: {integrity: sha512-OVRQlQ1XuuLP8aFVLYmC2atrfWHS5UD3shonxpnyrjcCkwtvmt/+N6kYJdcY4mkMJhxp4kj2EFIxQ9kvkkt/eQ==}
+ hast-util-select@6.0.4:
+ resolution: {integrity: sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==}
- hast-util-to-estree@3.1.1:
- resolution: {integrity: sha512-IWtwwmPskfSmma9RpzCappDUitC8t5jhAynHhc1m2+5trOgsrp7txscUSavc5Ic8PATyAjfrCK1wgtxh2cICVQ==}
+ hast-util-to-estree@3.1.3:
+ resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==}
- hast-util-to-html@9.0.4:
- resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==}
+ hast-util-to-html@9.0.5:
+ resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
- hast-util-to-jsx-runtime@2.3.2:
- resolution: {integrity: sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==}
+ hast-util-to-jsx-runtime@2.3.6:
+ resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
- hast-util-to-parse5@8.0.0:
- resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
+ hast-util-to-parse5@8.0.1:
+ resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==}
hast-util-to-string@3.0.1:
resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==}
@@ -1048,8 +1240,8 @@ packages:
hast-util-whitespace@3.0.0:
resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
- hastscript@9.0.0:
- resolution: {integrity: sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==}
+ hastscript@9.0.1:
+ resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==}
html-escaper@3.0.3:
resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==}
@@ -1060,8 +1252,16 @@ packages:
html-whitespace-sensitive-tag-names@3.0.1:
resolution: {integrity: sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==}
- http-cache-semantics@4.1.1:
- resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
+ http-cache-semantics@4.2.0:
+ resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==}
+
+ http-proxy-agent@7.0.2:
+ resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
+ engines: {node: '>= 14'}
+
+ https-proxy-agent@7.0.6:
+ resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
+ engines: {node: '>= 14'}
i18next@23.16.8:
resolution: {integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==}
@@ -1069,17 +1269,19 @@ packages:
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
- import-meta-resolve@4.1.0:
- resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==}
+ import-fresh@3.3.1:
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+ engines: {node: '>=6'}
- inherits@2.0.4:
- resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ import-meta-resolve@4.2.0:
+ resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==}
- ini@1.3.8:
- resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+ inline-style-parser@0.2.7:
+ resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
- inline-style-parser@0.2.4:
- resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==}
+ ip-address@10.1.0:
+ resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==}
+ engines: {node: '>= 12'}
iron-webcrypto@1.2.1:
resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==}
@@ -1094,12 +1296,8 @@ packages:
is-alphanumerical@2.0.1:
resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
- is-arrayish@0.3.2:
- resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
-
- is-binary-path@2.1.0:
- resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
- engines: {node: '>=8'}
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
is-decimal@2.0.1:
resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
@@ -1109,18 +1307,10 @@ packages:
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
hasBin: true
- is-extglob@2.1.1:
- resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
- engines: {node: '>=0.10.0'}
-
is-fullwidth-code-point@3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
- is-glob@4.0.3:
- resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
- engines: {node: '>=0.10.0'}
-
is-hexadecimal@2.0.1:
resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
@@ -1129,10 +1319,6 @@ packages:
engines: {node: '>=14.16'}
hasBin: true
- is-number@7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
-
is-plain-obj@4.1.0:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
engines: {node: '>=12'}
@@ -1141,14 +1327,16 @@ packages:
resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
engines: {node: '>=16'}
- js-yaml@3.14.1:
- resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
- hasBin: true
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
- js-yaml@4.1.0:
- resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ js-yaml@4.1.1:
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
kleur@3.0.3:
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
engines: {node: '>=6'}
@@ -1161,25 +1349,25 @@ packages:
resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==}
engines: {node: '>= 8'}
- load-yaml-file@0.2.0:
- resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==}
- engines: {node: '>=6'}
-
- locate-path@5.0.0:
- resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
- engines: {node: '>=8'}
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
longest-streak@3.1.0:
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
- lru-cache@10.4.3:
- resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+ lru-cache@11.2.5:
+ resolution: {integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==}
+ engines: {node: 20 || >=22}
- magic-string@0.30.17:
- resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
+ lru-cache@7.18.3:
+ resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
+ engines: {node: '>=12'}
- magicast@0.3.5:
- resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==}
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ magicast@0.5.1:
+ resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==}
markdown-extensions@2.0.0:
resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
@@ -1233,8 +1421,8 @@ packages:
mdast-util-phrasing@4.1.0:
resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
- mdast-util-to-hast@13.2.0:
- resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
+ mdast-util-to-hast@13.2.1:
+ resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==}
mdast-util-to-markdown@2.1.2:
resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==}
@@ -1242,12 +1430,14 @@ packages:
mdast-util-to-string@4.0.0:
resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
- merge2@1.4.1:
- resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
- engines: {node: '>= 8'}
+ mdn-data@2.0.28:
+ resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
+
+ mdn-data@2.12.2:
+ resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
- micromark-core-commonmark@2.0.2:
- resolution: {integrity: sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==}
+ micromark-core-commonmark@2.0.3:
+ resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
micromark-extension-directive@3.0.2:
resolution: {integrity: sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==}
@@ -1273,11 +1463,11 @@ packages:
micromark-extension-gfm@3.0.0:
resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
- micromark-extension-mdx-expression@3.0.0:
- resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==}
+ micromark-extension-mdx-expression@3.0.1:
+ resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==}
- micromark-extension-mdx-jsx@3.0.1:
- resolution: {integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==}
+ micromark-extension-mdx-jsx@3.0.2:
+ resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==}
micromark-extension-mdx-md@2.0.0:
resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==}
@@ -1294,8 +1484,8 @@ packages:
micromark-factory-label@2.0.1:
resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==}
- micromark-factory-mdx-expression@2.0.2:
- resolution: {integrity: sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==}
+ micromark-factory-mdx-expression@2.0.3:
+ resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==}
micromark-factory-space@2.0.1:
resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==}
@@ -1327,8 +1517,8 @@ packages:
micromark-util-encode@2.0.1:
resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
- micromark-util-events-to-acorn@2.0.2:
- resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==}
+ micromark-util-events-to-acorn@2.0.3:
+ resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==}
micromark-util-html-tag-name@2.0.1:
resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==}
@@ -1342,66 +1532,49 @@ packages:
micromark-util-sanitize-uri@2.0.1:
resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
- micromark-util-subtokenize@2.0.4:
- resolution: {integrity: sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==}
+ micromark-util-subtokenize@2.1.0:
+ resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==}
micromark-util-symbol@2.0.1:
resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
- micromark-util-types@2.0.1:
- resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==}
+ micromark-util-types@2.0.2:
+ resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
- micromark@4.0.1:
- resolution: {integrity: sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==}
+ micromark@4.0.2:
+ resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==}
- micromatch@4.0.8:
- resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
- engines: {node: '>=8.6'}
+ mitt@3.0.1:
+ resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
- mimic-response@3.1.0:
- resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
- engines: {node: '>=10'}
-
- minimist@1.2.8:
- resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
-
- mkdirp-classic@0.5.3:
- resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
-
- mrmime@2.0.0:
- resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
+ mrmime@2.0.1:
+ resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
engines: {node: '>=10'}
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
- nanoid@3.3.8:
- resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- napi-build-utils@2.0.0:
- resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==}
-
neotraverse@0.6.18:
resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==}
engines: {node: '>= 10'}
+ netmask@2.0.2:
+ resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==}
+ engines: {node: '>= 0.4.0'}
+
nlcst-to-string@4.0.0:
resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==}
- node-abi@3.74.0:
- resolution: {integrity: sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==}
- engines: {node: '>=10'}
-
- node-addon-api@6.1.0:
- resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==}
-
- node-fetch-native@1.6.6:
- resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==}
+ node-fetch-native@1.6.7:
+ resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
- node-mock-http@1.0.0:
- resolution: {integrity: sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==}
+ node-mock-http@1.0.4:
+ resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==}
normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
@@ -1410,58 +1583,70 @@ packages:
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
- ofetch@1.4.1:
- resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==}
+ ofetch@1.5.1:
+ resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==}
- ohash@1.1.4:
- resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==}
+ ohash@2.0.11:
+ resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==}
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
- oniguruma-to-es@2.3.0:
- resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==}
+ oniguruma-parser@0.12.1:
+ resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==}
- p-limit@2.3.0:
- resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
- engines: {node: '>=6'}
+ oniguruma-to-es@4.3.4:
+ resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==}
p-limit@6.2.0:
resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==}
engines: {node: '>=18'}
- p-locate@4.1.0:
- resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
- engines: {node: '>=8'}
-
- p-queue@8.1.0:
- resolution: {integrity: sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==}
+ p-queue@8.1.1:
+ resolution: {integrity: sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==}
engines: {node: '>=18'}
p-timeout@6.1.4:
resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==}
engines: {node: '>=14.16'}
- p-try@2.2.0:
- resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
- engines: {node: '>=6'}
+ pac-proxy-agent@7.2.0:
+ resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==}
+ engines: {node: '>= 14'}
+
+ pac-resolver@7.0.1:
+ resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==}
+ engines: {node: '>= 14'}
+
+ package-manager-detector@1.6.0:
+ resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==}
- pagefind@1.3.0:
- resolution: {integrity: sha512-8KPLGT5g9s+olKMRTU9LFekLizkVIu9tes90O1/aigJ0T5LmyPqTzGJrETnSw3meSYg58YH7JTzhTTW/3z6VAw==}
+ pagefind@1.4.0:
+ resolution: {integrity: sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==}
hasBin: true
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
parse-entities@4.0.2:
resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
parse-latin@7.0.0:
resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==}
- parse5@7.2.1:
- resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==}
+ parse5@7.3.0:
+ resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
- path-exists@4.0.0:
- resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
- engines: {node: '>=8'}
+ pend@1.2.0:
+ resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
+
+ piccolore@0.1.3:
+ resolution: {integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==}
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -1470,18 +1655,10 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
- picomatch@4.0.2:
- resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
+ picomatch@4.0.3:
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
- pify@4.0.1:
- resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
- engines: {node: '>=6'}
-
- pkg-dir@4.2.0:
- resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
- engines: {node: '>=8'}
-
postcss-nested@6.2.0:
resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
engines: {node: '>=12.0'}
@@ -1492,56 +1669,63 @@ packages:
resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
engines: {node: '>=4'}
- postcss@8.5.2:
- resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==}
+ postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
- prebuild-install@7.1.3:
- resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==}
- engines: {node: '>=10'}
- hasBin: true
-
- preferred-pm@4.1.1:
- resolution: {integrity: sha512-rU+ZAv1Ur9jAUZtGPebQVQPzdGhNzaEiQ7VL9+cjsAWPHFYOccNXPNiev1CCDSOg/2j7UujM7ojNhpkuILEVNQ==}
- engines: {node: '>=18.12'}
-
- prismjs@1.29.0:
- resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
+ prismjs@1.30.0:
+ resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==}
engines: {node: '>=6'}
+ progress@2.0.3:
+ resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
+ engines: {node: '>=0.4.0'}
+
prompts@2.4.2:
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
engines: {node: '>= 6'}
- property-information@6.5.0:
- resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
+ property-information@7.1.0:
+ resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
- pump@3.0.2:
- resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==}
+ proxy-agent@6.5.0:
+ resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==}
+ engines: {node: '>= 14'}
- queue-microtask@1.2.3:
- resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
- radix3@1.1.2:
- resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==}
+ pump@3.0.3:
+ resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==}
+
+ puppeteer-autoscroll-down@2.0.1:
+ resolution: {integrity: sha512-nP30RoaxdcwDcyyv2v6WHZbADhLtxdcwwuO8l6OrrVRFbOagJR96RR+v/BL0N1w2fSzrR1BP47ukfbLOBMcpEA==}
+ engines: {node: '>=18'}
- rc@1.2.8:
- resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
+ puppeteer-core@23.11.1:
+ resolution: {integrity: sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==}
+ engines: {node: '>=18'}
+
+ puppeteer@23.11.1:
+ resolution: {integrity: sha512-53uIX3KR5en8l7Vd8n5DUv90Ae9QDQsyIthaUFVzwV6yU750RjqRznEtNMBT20VthqAdemnJN+hxVdmMHKt7Zw==}
+ engines: {node: '>=18'}
+ deprecated: < 24.15.0 is no longer supported
hasBin: true
- readable-stream@3.6.2:
- resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
- engines: {node: '>= 6'}
+ radix3@1.1.2:
+ resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==}
- readdirp@3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
+ readdirp@5.0.0:
+ resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
+ engines: {node: '>= 20.19.0'}
recma-build-jsx@1.0.0:
resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==}
- recma-jsx@1.0.0:
- resolution: {integrity: sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==}
+ recma-jsx@1.0.1:
+ resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
recma-parse@1.0.0:
resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==}
@@ -1549,20 +1733,17 @@ packages:
recma-stringify@1.0.0:
resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==}
- regenerator-runtime@0.14.1:
- resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
-
- regex-recursion@5.1.1:
- resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==}
+ regex-recursion@6.0.2:
+ resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
regex-utilities@2.3.0:
resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
- regex@5.1.1:
- resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==}
+ regex@6.1.0:
+ resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==}
- rehype-expressive-code@0.40.2:
- resolution: {integrity: sha512-+kn+AMGCrGzvtH8Q5lC6Y5lnmTV/r33fdmi5QU/IH1KPHKobKr5UnLwJuqHv5jBTSN/0v2wLDS7RTM73FVzqmQ==}
+ rehype-expressive-code@0.41.6:
+ resolution: {integrity: sha512-aBMX8kxPtjmDSFUdZlAWJkMvsQ4ZMASfee90JWIAV8tweltXLzkWC3q++43ToTelI8ac5iC0B3/S/Cl4Ql1y2g==}
rehype-format@5.0.1:
resolution: {integrity: sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==}
@@ -1588,14 +1769,14 @@ packages:
remark-gfm@4.0.1:
resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==}
- remark-mdx@3.1.0:
- resolution: {integrity: sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==}
+ remark-mdx@3.1.1:
+ resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==}
remark-parse@11.0.0:
resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
- remark-rehype@11.1.1:
- resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==}
+ remark-rehype@11.1.2:
+ resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==}
remark-smartypants@3.0.2:
resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==}
@@ -1604,6 +1785,14 @@ packages:
remark-stringify@11.0.0:
resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
retext-latin@4.0.0:
resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==}
@@ -1616,86 +1805,97 @@ packages:
retext@9.0.0:
resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==}
- reusify@1.0.4:
- resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
- engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
-
- rollup@4.34.7:
- resolution: {integrity: sha512-8qhyN0oZ4x0H6wmBgfKxJtxM7qS98YJ0k0kNh5ECVtuchIJ7z9IVVvzpmtQyT10PXKMtBxYr1wQ5Apg8RS8kXQ==}
+ rollup@4.57.1:
+ resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
- run-parallel@1.2.0:
- resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
-
- safe-buffer@5.2.1:
- resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+ sax@1.4.4:
+ resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==}
+ engines: {node: '>=11.0.0'}
- sax@1.4.1:
- resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
-
- semver@7.7.1:
- resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
+ semver@7.7.3:
+ resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
engines: {node: '>=10'}
hasBin: true
- sharp@0.32.6:
- resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==}
- engines: {node: '>=14.15.0'}
-
- sharp@0.33.5:
- resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
+ sharp@0.34.5:
+ resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- shiki@1.29.2:
- resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==}
-
- simple-concat@1.0.1:
- resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
-
- simple-get@4.0.1:
- resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
-
- simple-swizzle@0.2.2:
- resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
+ shiki@3.22.0:
+ resolution: {integrity: sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==}
sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
- sitemap@8.0.0:
- resolution: {integrity: sha512-+AbdxhM9kJsHtruUF39bwS/B0Fytw6Fr1o4ZAIAEqA6cke2xcoO2GleBw9Zw7nRzILVEgz7zBM5GiTJjie1G9A==}
+ sitemap@8.0.2:
+ resolution: {integrity: sha512-LwktpJcyZDoa0IL6KT++lQ53pbSrx2c9ge41/SeLTyqy2XUNA6uR4+P9u5IVo5lPeL2arAcOKn1aZAxoYbCKlQ==}
engines: {node: '>=14.0.0', npm: '>=6.0.0'}
hasBin: true
- smol-toml@1.3.1:
- resolution: {integrity: sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==}
+ smart-buffer@4.2.0:
+ resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
+ engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
+
+ smol-toml@1.6.0:
+ resolution: {integrity: sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==}
engines: {node: '>= 18'}
+ socks-proxy-agent@8.0.5:
+ resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
+ engines: {node: '>= 14'}
+
+ socks@2.8.7:
+ resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==}
+ engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
+
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
- source-map@0.7.4:
- resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
- engines: {node: '>= 8'}
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.7.6:
+ resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
+ engines: {node: '>= 12'}
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
- sprintf-js@1.0.3:
- resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+ starlight-kbd@0.3.0:
+ resolution: {integrity: sha512-bhG1kWGEXCkuV8pkYW6sWEVmwD2bnpQpVIxq4QDJp7tLsprAbIKnD7RKFCP/QtITfwaVgKq3uMNK0+p4TUAgGg==}
+ engines: {node: '>=18.17.1'}
+ peerDependencies:
+ '@astrojs/starlight': '>=0.32.0'
- starlight-links-validator@0.18.0:
- resolution: {integrity: sha512-R0gLdrKWdpAEqux3DL2B3QvNJM8Zpys8CQu1BGLD9hc+66nt/Q6aJDkvvkvoCVky9JKmBEnmL4PhFkyz13lK5g==}
+ starlight-links-validator@0.19.2:
+ resolution: {integrity: sha512-IHeK3R78fsmv53VfRkGbXkwK1CQEUBHM9QPzBEyoAxjZ/ssi5gjV+F4oNNUppTR48iPp+lEY0MTAmvkX7yNnkw==}
engines: {node: '>=18.17.1'}
peerDependencies:
'@astrojs/starlight': '>=0.32.0'
+ astro: '>=5.1.5'
+
+ starlight-scroll-to-top@0.4.0:
+ resolution: {integrity: sha512-lxsW5Sv+oKCI8CYZQ6Ue957cExiHMozK73LmmbsvpBKWryW+AKU4OXmX/1bTQNx+mVLZcpm2qTwKa1KX5VdEaQ==}
+ engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
+ peerDependencies:
+ '@astrojs/starlight': '>=0.35'
+
+ starlight-to-pdf@1.4.0:
+ resolution: {integrity: sha512-J2Pw3EG1B2WuaHHpvVmg45O5jgDj5YAKurRd8gS8vVju2ge5ZRGEN1MKLs+Ov4Cmjv9RCqpn/RI1v7IQDm87kw==}
+ hasBin: true
+ peerDependencies:
+ puppeteer: ^23.10.4
+ puppeteer-autoscroll-down: ^2.0.0
stream-replace-string@2.0.0:
resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==}
- streamx@2.22.0:
- resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==}
+ streamx@2.23.0:
+ resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==}
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
@@ -1705,9 +1905,6 @@ packages:
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
engines: {node: '>=18'}
- string_decoder@1.3.0:
- resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
-
stringify-entities@4.0.4:
resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
@@ -1715,38 +1912,31 @@ packages:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
- strip-ansi@7.1.0:
- resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ strip-ansi@7.1.2:
+ resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
engines: {node: '>=12'}
- strip-bom@3.0.0:
- resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
- engines: {node: '>=4'}
-
- strip-json-comments@2.0.1:
- resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
- engines: {node: '>=0.10.0'}
+ style-to-js@1.1.21:
+ resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==}
- style-to-object@1.0.8:
- resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==}
+ style-to-object@1.0.14:
+ resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==}
supports-color@10.2.2:
resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==}
engines: {node: '>=18'}
- supports-hyperlinks@4.3.0:
- resolution: {integrity: sha512-i6sWEzuwadSlcr2mOnb0ktlIl+K5FVxsPXmoPfknDd2gyw4ZBIAZ5coc0NQzYqDdEYXMHy8NaY9rWwa1Q1myiQ==}
+ supports-hyperlinks@4.4.0:
+ resolution: {integrity: sha512-UKbpT93hN5Nr9go5UY7bopIB9YQlMz9nm/ct4IXt/irb5YRkn9WaqrOBJGZ5Pwvsd5FQzSVeYlGdXoCAPQZrPg==}
engines: {node: '>=20'}
- tar-fs@2.1.2:
- resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==}
-
- tar-fs@3.0.8:
- resolution: {integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==}
+ svgo@4.0.0:
+ resolution: {integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==}
+ engines: {node: '>=16'}
+ hasBin: true
- tar-stream@2.2.0:
- resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
- engines: {node: '>=6'}
+ tar-fs@3.1.1:
+ resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==}
tar-stream@3.1.7:
resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
@@ -1758,12 +1948,19 @@ packages:
text-decoder@1.2.3:
resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==}
- tinyexec@0.3.2:
- resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ tiny-inflate@1.0.3:
+ resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==}
+
+ tinyexec@1.0.2:
+ resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
+ engines: {node: '>=18'}
- to-regex-range@5.0.1:
- resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
- engines: {node: '>=8.0'}
+ tinyglobby@0.2.15:
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ engines: {node: '>=12.0.0'}
trim-lines@3.0.1:
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
@@ -1771,8 +1968,8 @@ packages:
trough@2.2.0:
resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
- tsconfck@3.1.5:
- resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==}
+ tsconfck@3.1.6:
+ resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==}
engines: {node: ^18 || >=20}
hasBin: true
peerDependencies:
@@ -1784,35 +1981,44 @@ packages:
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
- tunnel-agent@0.6.0:
- resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
-
- type-fest@4.34.1:
- resolution: {integrity: sha512-6kSc32kT0rbwxD6QL1CYe8IqdzN/J/ILMrNK+HMQCKH3insCDRY/3ITb0vcBss0a3t72fzh2YSzj8ko1HgwT3g==}
+ type-fest@4.41.0:
+ resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
engines: {node: '>=16'}
+ typed-query-selector@2.12.0:
+ resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==}
+
typescript@5.7.3:
resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==}
engines: {node: '>=14.17'}
hasBin: true
- ufo@1.5.4:
- resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
+ ufo@1.6.3:
+ resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
+
+ ultrahtml@1.6.0:
+ resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==}
- ultrahtml@1.5.3:
- resolution: {integrity: sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==}
+ unbzip2-stream@1.4.3:
+ resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==}
uncrypto@0.1.3:
resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==}
+ undici-types@7.16.0:
+ resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
+
unified@11.0.5:
resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
+ unifont@0.7.3:
+ resolution: {integrity: sha512-b0GtQzKCyuSHGsfj5vyN8st7muZ6VCI4XD4vFlr7Uy1rlWVYxC3npnfk8MyreHxJYrz1ooLDqDzFe9XqQTlAhA==}
+
unist-util-find-after@5.0.0:
resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==}
- unist-util-is@6.0.0:
- resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
+ unist-util-is@6.0.1:
+ resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
unist-util-modify-children@4.0.0:
resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==}
@@ -1832,33 +2038,34 @@ packages:
unist-util-visit-children@3.0.0:
resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==}
- unist-util-visit-parents@6.0.1:
- resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
+ unist-util-visit-parents@6.0.2:
+ resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==}
- unist-util-visit@5.0.0:
- resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
+ unist-util-visit@5.1.0:
+ resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==}
- unstorage@1.14.4:
- resolution: {integrity: sha512-1SYeamwuYeQJtJ/USE1x4l17LkmQBzg7deBJ+U9qOBoHo15d1cDxG4jM31zKRgF7pG0kirZy4wVMX6WL6Zoscg==}
+ unstorage@1.17.4:
+ resolution: {integrity: sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==}
peerDependencies:
'@azure/app-configuration': ^1.8.0
'@azure/cosmos': ^4.2.0
'@azure/data-tables': ^13.3.0
- '@azure/identity': ^4.5.0
+ '@azure/identity': ^4.6.0
'@azure/keyvault-secrets': ^4.9.0
'@azure/storage-blob': ^12.26.0
- '@capacitor/preferences': ^6.0.3
- '@deno/kv': '>=0.8.4'
- '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0
+ '@capacitor/preferences': ^6 || ^7 || ^8
+ '@deno/kv': '>=0.9.0'
+ '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0
'@planetscale/database': ^1.19.0
'@upstash/redis': ^1.34.3
- '@vercel/blob': '>=0.27.0'
- '@vercel/kv': ^1.0.1
+ '@vercel/blob': '>=0.27.1'
+ '@vercel/functions': ^2.2.12 || ^3.0.0
+ '@vercel/kv': ^1 || ^2 || ^3
aws4fetch: ^1.0.20
db0: '>=0.2.1'
idb-keyval: ^6.2.1
ioredis: ^5.4.2
- uploadthing: ^7.4.1
+ uploadthing: ^7.4.4
peerDependenciesMeta:
'@azure/app-configuration':
optional: true
@@ -1884,6 +2091,8 @@ packages:
optional: true
'@vercel/blob':
optional: true
+ '@vercel/functions':
+ optional: true
'@vercel/kv':
optional: true
aws4fetch:
@@ -1903,14 +2112,14 @@ packages:
vfile-location@5.0.3:
resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==}
- vfile-message@4.0.2:
- resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
+ vfile-message@4.0.3:
+ resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
vfile@6.0.3:
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
- vite@6.1.0:
- resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==}
+ vite@6.4.1:
+ resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
hasBin: true
peerDependencies:
@@ -1949,10 +2158,10 @@ packages:
yaml:
optional: true
- vitefu@1.0.5:
- resolution: {integrity: sha512-h4Vflt9gxODPFNGPwp4zAMZRpZR7eslzwH2c5hn5kNZ5rhnKyRJ50U+yGCdc2IRaBs8O4haIgLNGrV5CrpMsCA==}
+ vitefu@1.1.1:
+ resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==}
peerDependencies:
- vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
+ vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0
peerDependenciesMeta:
vite:
optional: true
@@ -1964,49 +2173,76 @@ packages:
resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==}
engines: {node: '>=4'}
- which-pm@3.0.1:
- resolution: {integrity: sha512-v2JrMq0waAI4ju1xU5x3blsxBBMgdgZve580iYMN5frDaLGjbA24fok7wKCsya8KLVO19Ju4XDc5+zTZCJkQfg==}
- engines: {node: '>=18.12'}
-
widest-line@5.0.0:
resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==}
engines: {node: '>=18'}
- wrap-ansi@9.0.0:
- resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@9.0.2:
+ resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
engines: {node: '>=18'}
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ ws@8.19.0:
+ resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
xxhash-wasm@1.1.0:
resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==}
- yaml@2.7.0:
- resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==}
- engines: {node: '>= 14'}
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yaml@2.8.2:
+ resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==}
+ engines: {node: '>= 14.6'}
hasBin: true
yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
- yocto-queue@1.1.1:
- resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==}
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yauzl@2.10.0:
+ resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
+
+ yocto-queue@1.2.2:
+ resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==}
engines: {node: '>=12.20'}
- yocto-spinner@0.2.0:
- resolution: {integrity: sha512-Qu6WAqNLGleB687CCGcmgHIo8l+J19MX/32UrSMfbf/4L8gLoxjpOYoiHT1asiWyqvjRZbgvOhLlvne6E5Tbdw==}
+ yocto-spinner@0.1.2:
+ resolution: {integrity: sha512-VfmLIh/ZSZOJnVRQZc/dvpPP90lWL4G0bmxQMP0+U/2vKBA8GSpcBuWv17y7F+CZItRuO97HN1wdbb4p10uhOg==}
engines: {node: '>=18.19'}
- yoctocolors@2.1.1:
- resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==}
+ yocto-spinner@0.2.3:
+ resolution: {integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==}
+ engines: {node: '>=18.19'}
+
+ yoctocolors@2.1.2:
+ resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==}
engines: {node: '>=18'}
- zod-to-json-schema@3.24.1:
- resolution: {integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==}
+ zod-to-json-schema@3.25.1:
+ resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==}
peerDependencies:
- zod: ^3.24.1
+ zod: ^3.25 || ^4
zod-to-ts@1.2.0:
resolution: {integrity: sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==}
@@ -2014,107 +2250,114 @@ packages:
typescript: ^4.9.4 || ^5.0.2
zod: ^3
- zod@3.24.2:
- resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==}
+ zod@3.23.8:
+ resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
+
+ zod@3.25.76:
+ resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
snapshots:
- '@astrojs/compiler@2.10.4': {}
+ '@astrojs/compiler@2.13.0': {}
- '@astrojs/internal-helpers@0.5.1': {}
+ '@astrojs/internal-helpers@0.7.5': {}
- '@astrojs/markdown-remark@6.1.0':
+ '@astrojs/markdown-remark@6.3.10':
dependencies:
- '@astrojs/prism': 3.2.0
+ '@astrojs/internal-helpers': 0.7.5
+ '@astrojs/prism': 3.3.0
github-slugger: 2.0.0
hast-util-from-html: 2.0.3
hast-util-to-text: 4.0.2
- import-meta-resolve: 4.1.0
- js-yaml: 4.1.0
+ import-meta-resolve: 4.2.0
+ js-yaml: 4.1.1
mdast-util-definitions: 6.0.0
rehype-raw: 7.0.0
rehype-stringify: 10.0.1
remark-gfm: 4.0.1
remark-parse: 11.0.0
- remark-rehype: 11.1.1
+ remark-rehype: 11.1.2
remark-smartypants: 3.0.2
- shiki: 1.29.2
- smol-toml: 1.3.1
+ shiki: 3.22.0
+ smol-toml: 1.6.0
unified: 11.0.5
unist-util-remove-position: 5.0.0
- unist-util-visit: 5.0.0
- unist-util-visit-parents: 6.0.1
+ unist-util-visit: 5.1.0
+ unist-util-visit-parents: 6.0.2
vfile: 6.0.3
transitivePeerDependencies:
- supports-color
- '@astrojs/mdx@4.0.8(astro@5.3.0(rollup@4.34.7)(typescript@5.7.3)(yaml@2.7.0))':
+ '@astrojs/mdx@4.3.13(astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2))':
dependencies:
- '@astrojs/markdown-remark': 6.1.0
- '@mdx-js/mdx': 3.1.0(acorn@8.14.0)
- acorn: 8.14.0
- astro: 5.3.0(rollup@4.34.7)(typescript@5.7.3)(yaml@2.7.0)
- es-module-lexer: 1.6.0
+ '@astrojs/markdown-remark': 6.3.10
+ '@mdx-js/mdx': 3.1.1
+ acorn: 8.15.0
+ astro: 5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2)
+ es-module-lexer: 1.7.0
estree-util-visit: 2.0.0
- hast-util-to-html: 9.0.4
- kleur: 4.1.5
+ hast-util-to-html: 9.0.5
+ piccolore: 0.1.3
rehype-raw: 7.0.0
remark-gfm: 4.0.1
remark-smartypants: 3.0.2
- source-map: 0.7.4
- unist-util-visit: 5.0.0
+ source-map: 0.7.6
+ unist-util-visit: 5.1.0
vfile: 6.0.3
transitivePeerDependencies:
- supports-color
- '@astrojs/prism@3.2.0':
+ '@astrojs/prism@3.3.0':
dependencies:
- prismjs: 1.29.0
+ prismjs: 1.30.0
- '@astrojs/sitemap@3.2.1':
+ '@astrojs/sitemap@3.7.0':
dependencies:
- sitemap: 8.0.0
+ sitemap: 8.0.2
stream-replace-string: 2.0.0
- zod: 3.24.2
+ zod: 3.25.76
- '@astrojs/starlight@0.32.0(astro@5.3.0(rollup@4.34.7)(typescript@5.7.3)(yaml@2.7.0))':
+ '@astrojs/starlight@0.37.5(astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2))':
dependencies:
- '@astrojs/mdx': 4.0.8(astro@5.3.0(rollup@4.34.7)(typescript@5.7.3)(yaml@2.7.0))
- '@astrojs/sitemap': 3.2.1
- '@pagefind/default-ui': 1.3.0
+ '@astrojs/markdown-remark': 6.3.10
+ '@astrojs/mdx': 4.3.13(astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2))
+ '@astrojs/sitemap': 3.7.0
+ '@pagefind/default-ui': 1.4.0
'@types/hast': 3.0.4
'@types/js-yaml': 4.0.9
'@types/mdast': 4.0.4
- astro: 5.3.0(rollup@4.34.7)(typescript@5.7.3)(yaml@2.7.0)
- astro-expressive-code: 0.40.2(astro@5.3.0(rollup@4.34.7)(typescript@5.7.3)(yaml@2.7.0))
+ astro: 5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2)
+ astro-expressive-code: 0.41.6(astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2))
bcp-47: 2.1.0
hast-util-from-html: 2.0.3
- hast-util-select: 6.0.3
+ hast-util-select: 6.0.4
hast-util-to-string: 3.0.1
- hastscript: 9.0.0
+ hastscript: 9.0.1
i18next: 23.16.8
- js-yaml: 4.1.0
+ js-yaml: 4.1.1
klona: 2.0.6
+ magic-string: 0.30.21
mdast-util-directive: 3.1.0
mdast-util-to-markdown: 2.1.2
mdast-util-to-string: 4.0.0
- pagefind: 1.3.0
+ pagefind: 1.4.0
rehype: 13.0.2
rehype-format: 5.0.1
remark-directive: 3.0.1
+ ultrahtml: 1.6.0
unified: 11.0.5
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
vfile: 6.0.3
transitivePeerDependencies:
- supports-color
- '@astrojs/telemetry@3.2.0':
+ '@astrojs/telemetry@3.3.0':
dependencies:
- ci-info: 4.1.0
- debug: 4.4.0
+ ci-info: 4.4.0
+ debug: 4.4.3
dlv: 1.1.3
dset: 3.1.4
is-docker: 3.0.0
@@ -2123,373 +2366,424 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@babel/helper-string-parser@7.25.9': {}
+ '@babel/code-frame@7.29.0':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/helper-string-parser@7.27.1': {}
- '@babel/helper-validator-identifier@7.25.9': {}
+ '@babel/helper-validator-identifier@7.28.5': {}
- '@babel/parser@7.26.9':
+ '@babel/parser@7.29.0':
dependencies:
- '@babel/types': 7.26.9
+ '@babel/types': 7.29.0
+
+ '@babel/runtime@7.28.6': {}
- '@babel/runtime@7.26.9':
+ '@babel/types@7.29.0':
dependencies:
- regenerator-runtime: 0.14.1
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
- '@babel/types@7.26.9':
+ '@capsizecss/unpack@4.0.0':
dependencies:
- '@babel/helper-string-parser': 7.25.9
- '@babel/helper-validator-identifier': 7.25.9
+ fontkitten: 1.0.2
- '@ctrl/tinycolor@4.1.0': {}
+ '@ctrl/tinycolor@4.2.0': {}
- '@emnapi/runtime@1.3.1':
+ '@emnapi/runtime@1.8.1':
dependencies:
tslib: 2.8.1
optional: true
- '@esbuild/aix-ppc64@0.24.2':
+ '@esbuild/aix-ppc64@0.25.12':
+ optional: true
+
+ '@esbuild/android-arm64@0.25.12':
optional: true
- '@esbuild/android-arm64@0.24.2':
+ '@esbuild/android-arm@0.25.12':
optional: true
- '@esbuild/android-arm@0.24.2':
+ '@esbuild/android-x64@0.25.12':
optional: true
- '@esbuild/android-x64@0.24.2':
+ '@esbuild/darwin-arm64@0.25.12':
optional: true
- '@esbuild/darwin-arm64@0.24.2':
+ '@esbuild/darwin-x64@0.25.12':
optional: true
- '@esbuild/darwin-x64@0.24.2':
+ '@esbuild/freebsd-arm64@0.25.12':
optional: true
- '@esbuild/freebsd-arm64@0.24.2':
+ '@esbuild/freebsd-x64@0.25.12':
optional: true
- '@esbuild/freebsd-x64@0.24.2':
+ '@esbuild/linux-arm64@0.25.12':
optional: true
- '@esbuild/linux-arm64@0.24.2':
+ '@esbuild/linux-arm@0.25.12':
optional: true
- '@esbuild/linux-arm@0.24.2':
+ '@esbuild/linux-ia32@0.25.12':
optional: true
- '@esbuild/linux-ia32@0.24.2':
+ '@esbuild/linux-loong64@0.25.12':
optional: true
- '@esbuild/linux-loong64@0.24.2':
+ '@esbuild/linux-mips64el@0.25.12':
optional: true
- '@esbuild/linux-mips64el@0.24.2':
+ '@esbuild/linux-ppc64@0.25.12':
optional: true
- '@esbuild/linux-ppc64@0.24.2':
+ '@esbuild/linux-riscv64@0.25.12':
optional: true
- '@esbuild/linux-riscv64@0.24.2':
+ '@esbuild/linux-s390x@0.25.12':
optional: true
- '@esbuild/linux-s390x@0.24.2':
+ '@esbuild/linux-x64@0.25.12':
optional: true
- '@esbuild/linux-x64@0.24.2':
+ '@esbuild/netbsd-arm64@0.25.12':
optional: true
- '@esbuild/netbsd-arm64@0.24.2':
+ '@esbuild/netbsd-x64@0.25.12':
optional: true
- '@esbuild/netbsd-x64@0.24.2':
+ '@esbuild/openbsd-arm64@0.25.12':
optional: true
- '@esbuild/openbsd-arm64@0.24.2':
+ '@esbuild/openbsd-x64@0.25.12':
optional: true
- '@esbuild/openbsd-x64@0.24.2':
+ '@esbuild/openharmony-arm64@0.25.12':
optional: true
- '@esbuild/sunos-x64@0.24.2':
+ '@esbuild/sunos-x64@0.25.12':
optional: true
- '@esbuild/win32-arm64@0.24.2':
+ '@esbuild/win32-arm64@0.25.12':
optional: true
- '@esbuild/win32-ia32@0.24.2':
+ '@esbuild/win32-ia32@0.25.12':
optional: true
- '@esbuild/win32-x64@0.24.2':
+ '@esbuild/win32-x64@0.25.12':
optional: true
- '@expressive-code/core@0.40.2':
+ '@expressive-code/core@0.41.6':
dependencies:
- '@ctrl/tinycolor': 4.1.0
- hast-util-select: 6.0.3
- hast-util-to-html: 9.0.4
+ '@ctrl/tinycolor': 4.2.0
+ hast-util-select: 6.0.4
+ hast-util-to-html: 9.0.5
hast-util-to-text: 4.0.2
- hastscript: 9.0.0
- postcss: 8.5.2
- postcss-nested: 6.2.0(postcss@8.5.2)
- unist-util-visit: 5.0.0
- unist-util-visit-parents: 6.0.1
+ hastscript: 9.0.1
+ postcss: 8.5.6
+ postcss-nested: 6.2.0(postcss@8.5.6)
+ unist-util-visit: 5.1.0
+ unist-util-visit-parents: 6.0.2
- '@expressive-code/plugin-frames@0.40.2':
+ '@expressive-code/plugin-frames@0.41.6':
dependencies:
- '@expressive-code/core': 0.40.2
+ '@expressive-code/core': 0.41.6
- '@expressive-code/plugin-shiki@0.40.2':
+ '@expressive-code/plugin-shiki@0.41.6':
dependencies:
- '@expressive-code/core': 0.40.2
- shiki: 1.29.2
+ '@expressive-code/core': 0.41.6
+ shiki: 3.22.0
- '@expressive-code/plugin-text-markers@0.40.2':
+ '@expressive-code/plugin-text-markers@0.41.6':
dependencies:
- '@expressive-code/core': 0.40.2
+ '@expressive-code/core': 0.41.6
- '@img/sharp-darwin-arm64@0.33.5':
+ '@img/colour@1.0.0': {}
+
+ '@img/sharp-darwin-arm64@0.34.5':
optionalDependencies:
- '@img/sharp-libvips-darwin-arm64': 1.0.4
+ '@img/sharp-libvips-darwin-arm64': 1.2.4
optional: true
- '@img/sharp-darwin-x64@0.33.5':
+ '@img/sharp-darwin-x64@0.34.5':
optionalDependencies:
- '@img/sharp-libvips-darwin-x64': 1.0.4
+ '@img/sharp-libvips-darwin-x64': 1.2.4
+ optional: true
+
+ '@img/sharp-libvips-darwin-arm64@1.2.4':
optional: true
- '@img/sharp-libvips-darwin-arm64@1.0.4':
+ '@img/sharp-libvips-darwin-x64@1.2.4':
optional: true
- '@img/sharp-libvips-darwin-x64@1.0.4':
+ '@img/sharp-libvips-linux-arm64@1.2.4':
optional: true
- '@img/sharp-libvips-linux-arm64@1.0.4':
+ '@img/sharp-libvips-linux-arm@1.2.4':
optional: true
- '@img/sharp-libvips-linux-arm@1.0.5':
+ '@img/sharp-libvips-linux-ppc64@1.2.4':
optional: true
- '@img/sharp-libvips-linux-s390x@1.0.4':
+ '@img/sharp-libvips-linux-riscv64@1.2.4':
optional: true
- '@img/sharp-libvips-linux-x64@1.0.4':
+ '@img/sharp-libvips-linux-s390x@1.2.4':
optional: true
- '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
+ '@img/sharp-libvips-linux-x64@1.2.4':
optional: true
- '@img/sharp-libvips-linuxmusl-x64@1.0.4':
+ '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-x64@1.2.4':
+ optional: true
+
+ '@img/sharp-linux-arm64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm64': 1.2.4
+ optional: true
+
+ '@img/sharp-linux-arm@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm': 1.2.4
optional: true
- '@img/sharp-linux-arm64@0.33.5':
+ '@img/sharp-linux-ppc64@0.34.5':
optionalDependencies:
- '@img/sharp-libvips-linux-arm64': 1.0.4
+ '@img/sharp-libvips-linux-ppc64': 1.2.4
optional: true
- '@img/sharp-linux-arm@0.33.5':
+ '@img/sharp-linux-riscv64@0.34.5':
optionalDependencies:
- '@img/sharp-libvips-linux-arm': 1.0.5
+ '@img/sharp-libvips-linux-riscv64': 1.2.4
optional: true
- '@img/sharp-linux-s390x@0.33.5':
+ '@img/sharp-linux-s390x@0.34.5':
optionalDependencies:
- '@img/sharp-libvips-linux-s390x': 1.0.4
+ '@img/sharp-libvips-linux-s390x': 1.2.4
optional: true
- '@img/sharp-linux-x64@0.33.5':
+ '@img/sharp-linux-x64@0.34.5':
optionalDependencies:
- '@img/sharp-libvips-linux-x64': 1.0.4
+ '@img/sharp-libvips-linux-x64': 1.2.4
optional: true
- '@img/sharp-linuxmusl-arm64@0.33.5':
+ '@img/sharp-linuxmusl-arm64@0.34.5':
optionalDependencies:
- '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
+ '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
optional: true
- '@img/sharp-linuxmusl-x64@0.33.5':
+ '@img/sharp-linuxmusl-x64@0.34.5':
optionalDependencies:
- '@img/sharp-libvips-linuxmusl-x64': 1.0.4
+ '@img/sharp-libvips-linuxmusl-x64': 1.2.4
optional: true
- '@img/sharp-wasm32@0.33.5':
+ '@img/sharp-wasm32@0.34.5':
dependencies:
- '@emnapi/runtime': 1.3.1
+ '@emnapi/runtime': 1.8.1
optional: true
- '@img/sharp-win32-ia32@0.33.5':
+ '@img/sharp-win32-arm64@0.34.5':
optional: true
- '@img/sharp-win32-x64@0.33.5':
+ '@img/sharp-win32-ia32@0.34.5':
optional: true
- '@jridgewell/sourcemap-codec@1.5.0': {}
+ '@img/sharp-win32-x64@0.34.5':
+ optional: true
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
- '@mdx-js/mdx@3.1.0(acorn@8.14.0)':
+ '@mdx-js/mdx@3.1.1':
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
'@types/estree-jsx': 1.0.5
'@types/hast': 3.0.4
'@types/mdx': 2.0.13
+ acorn: 8.15.0
collapse-white-space: 2.1.0
devlop: 1.1.0
estree-util-is-identifier-name: 3.0.0
estree-util-scope: 1.0.0
estree-walker: 3.0.3
- hast-util-to-jsx-runtime: 2.3.2
+ hast-util-to-jsx-runtime: 2.3.6
markdown-extensions: 2.0.0
recma-build-jsx: 1.0.0
- recma-jsx: 1.0.0(acorn@8.14.0)
+ recma-jsx: 1.0.1(acorn@8.15.0)
recma-stringify: 1.0.0
rehype-recma: 1.0.0
- remark-mdx: 3.1.0
+ remark-mdx: 3.1.1
remark-parse: 11.0.0
- remark-rehype: 11.1.1
- source-map: 0.7.4
+ remark-rehype: 11.1.2
+ source-map: 0.7.6
unified: 11.0.5
unist-util-position-from-estree: 2.0.0
unist-util-stringify-position: 4.0.0
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
vfile: 6.0.3
transitivePeerDependencies:
- - acorn
- supports-color
- '@nodelib/fs.scandir@2.1.5':
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- run-parallel: 1.2.0
-
- '@nodelib/fs.stat@2.0.5': {}
-
- '@nodelib/fs.walk@1.2.8':
- dependencies:
- '@nodelib/fs.scandir': 2.1.5
- fastq: 1.19.0
-
'@oslojs/encoding@1.1.0': {}
- '@pagefind/darwin-arm64@1.3.0':
+ '@pagefind/darwin-arm64@1.4.0':
optional: true
- '@pagefind/darwin-x64@1.3.0':
+ '@pagefind/darwin-x64@1.4.0':
optional: true
- '@pagefind/default-ui@1.3.0': {}
+ '@pagefind/default-ui@1.4.0': {}
- '@pagefind/linux-arm64@1.3.0':
+ '@pagefind/freebsd-x64@1.4.0':
optional: true
- '@pagefind/linux-x64@1.3.0':
+ '@pagefind/linux-arm64@1.4.0':
optional: true
- '@pagefind/windows-x64@1.3.0':
+ '@pagefind/linux-x64@1.4.0':
optional: true
- '@rollup/pluginutils@5.1.4(rollup@4.34.7)':
+ '@pagefind/windows-x64@1.4.0':
+ optional: true
+
+ '@puppeteer/browsers@2.6.1':
dependencies:
- '@types/estree': 1.0.6
+ debug: 4.4.3
+ extract-zip: 2.0.1
+ progress: 2.0.3
+ proxy-agent: 6.5.0
+ semver: 7.7.3
+ tar-fs: 3.1.1
+ unbzip2-stream: 1.4.3
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - bare-buffer
+ - react-native-b4a
+ - supports-color
+
+ '@rollup/pluginutils@5.3.0(rollup@4.57.1)':
+ dependencies:
+ '@types/estree': 1.0.8
estree-walker: 2.0.2
- picomatch: 4.0.2
+ picomatch: 4.0.3
optionalDependencies:
- rollup: 4.34.7
+ rollup: 4.57.1
+
+ '@rollup/rollup-android-arm-eabi@4.57.1':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.57.1':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.57.1':
+ optional: true
- '@rollup/rollup-android-arm-eabi@4.34.7':
+ '@rollup/rollup-darwin-x64@4.57.1':
optional: true
- '@rollup/rollup-android-arm64@4.34.7':
+ '@rollup/rollup-freebsd-arm64@4.57.1':
optional: true
- '@rollup/rollup-darwin-arm64@4.34.7':
+ '@rollup/rollup-freebsd-x64@4.57.1':
optional: true
- '@rollup/rollup-darwin-x64@4.34.7':
+ '@rollup/rollup-linux-arm-gnueabihf@4.57.1':
optional: true
- '@rollup/rollup-freebsd-arm64@4.34.7':
+ '@rollup/rollup-linux-arm-musleabihf@4.57.1':
optional: true
- '@rollup/rollup-freebsd-x64@4.34.7':
+ '@rollup/rollup-linux-arm64-gnu@4.57.1':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.34.7':
+ '@rollup/rollup-linux-arm64-musl@4.57.1':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.34.7':
+ '@rollup/rollup-linux-loong64-gnu@4.57.1':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.34.7':
+ '@rollup/rollup-linux-loong64-musl@4.57.1':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.34.7':
+ '@rollup/rollup-linux-ppc64-gnu@4.57.1':
optional: true
- '@rollup/rollup-linux-loongarch64-gnu@4.34.7':
+ '@rollup/rollup-linux-ppc64-musl@4.57.1':
optional: true
- '@rollup/rollup-linux-powerpc64le-gnu@4.34.7':
+ '@rollup/rollup-linux-riscv64-gnu@4.57.1':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.34.7':
+ '@rollup/rollup-linux-riscv64-musl@4.57.1':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.34.7':
+ '@rollup/rollup-linux-s390x-gnu@4.57.1':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.34.7':
+ '@rollup/rollup-linux-x64-gnu@4.57.1':
optional: true
- '@rollup/rollup-linux-x64-musl@4.34.7':
+ '@rollup/rollup-linux-x64-musl@4.57.1':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.34.7':
+ '@rollup/rollup-openbsd-x64@4.57.1':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.34.7':
+ '@rollup/rollup-openharmony-arm64@4.57.1':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.34.7':
+ '@rollup/rollup-win32-arm64-msvc@4.57.1':
optional: true
- '@shikijs/core@1.29.2':
+ '@rollup/rollup-win32-ia32-msvc@4.57.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.57.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.57.1':
+ optional: true
+
+ '@shikijs/core@3.22.0':
dependencies:
- '@shikijs/engine-javascript': 1.29.2
- '@shikijs/engine-oniguruma': 1.29.2
- '@shikijs/types': 1.29.2
+ '@shikijs/types': 3.22.0
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
- hast-util-to-html: 9.0.4
+ hast-util-to-html: 9.0.5
- '@shikijs/engine-javascript@1.29.2':
+ '@shikijs/engine-javascript@3.22.0':
dependencies:
- '@shikijs/types': 1.29.2
+ '@shikijs/types': 3.22.0
'@shikijs/vscode-textmate': 10.0.2
- oniguruma-to-es: 2.3.0
+ oniguruma-to-es: 4.3.4
- '@shikijs/engine-oniguruma@1.29.2':
+ '@shikijs/engine-oniguruma@3.22.0':
dependencies:
- '@shikijs/types': 1.29.2
+ '@shikijs/types': 3.22.0
'@shikijs/vscode-textmate': 10.0.2
- '@shikijs/langs@1.29.2':
+ '@shikijs/langs@3.22.0':
dependencies:
- '@shikijs/types': 1.29.2
+ '@shikijs/types': 3.22.0
- '@shikijs/themes@1.29.2':
+ '@shikijs/themes@3.22.0':
dependencies:
- '@shikijs/types': 1.29.2
+ '@shikijs/types': 3.22.0
- '@shikijs/types@1.29.2':
+ '@shikijs/types@3.22.0':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
'@shikijs/vscode-textmate@10.0.2': {}
- '@types/acorn@4.0.6':
- dependencies:
- '@types/estree': 1.0.6
-
- '@types/cookie@0.6.0': {}
+ '@tootallnate/quickjs-emscripten@0.23.0': {}
'@types/debug@4.1.12':
dependencies:
@@ -2497,9 +2791,9 @@ snapshots:
'@types/estree-jsx@1.0.5':
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
- '@types/estree@1.0.6': {}
+ '@types/estree@1.0.8': {}
'@types/hast@3.0.4':
dependencies:
@@ -2521,37 +2815,52 @@ snapshots:
'@types/node@17.0.45': {}
+ '@types/node@25.1.0':
+ dependencies:
+ undici-types: 7.16.0
+
'@types/picomatch@3.0.2': {}
'@types/sax@1.2.7':
dependencies:
- '@types/node': 17.0.45
+ '@types/node': 25.1.0
'@types/unist@2.0.11': {}
'@types/unist@3.0.3': {}
+ '@types/yauzl@2.10.3':
+ dependencies:
+ '@types/node': 25.1.0
+ optional: true
+
'@ungap/structured-clone@1.3.0': {}
- acorn-jsx@5.3.2(acorn@8.14.0):
+ acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
- acorn: 8.14.0
+ acorn: 8.15.0
- acorn@8.14.0: {}
+ acorn@8.15.0: {}
+
+ agent-base@7.1.4: {}
ansi-align@3.0.1:
dependencies:
string-width: 4.2.3
- ansi-escapes@7.1.1:
+ ansi-escapes@7.2.0:
dependencies:
environment: 1.1.0
ansi-regex@5.0.1: {}
- ansi-regex@6.1.0: {}
+ ansi-regex@6.2.2: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
- ansi-styles@6.2.1: {}
+ ansi-styles@6.2.3: {}
anymatch@3.1.3:
dependencies:
@@ -2560,86 +2869,90 @@ snapshots:
arg@5.0.2: {}
- argparse@1.0.10:
- dependencies:
- sprintf-js: 1.0.3
-
argparse@2.0.1: {}
aria-query@5.3.2: {}
array-iterate@2.0.1: {}
+ ast-types@0.13.4:
+ dependencies:
+ tslib: 2.8.1
+
astring@1.9.0: {}
- astro-expressive-code@0.40.2(astro@5.3.0(rollup@4.34.7)(typescript@5.7.3)(yaml@2.7.0)):
+ astro-expressive-code@0.41.6(astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2)):
dependencies:
- astro: 5.3.0(rollup@4.34.7)(typescript@5.7.3)(yaml@2.7.0)
- rehype-expressive-code: 0.40.2
+ astro: 5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2)
+ rehype-expressive-code: 0.41.6
- astro@5.3.0(rollup@4.34.7)(typescript@5.7.3)(yaml@2.7.0):
+ astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2):
dependencies:
- '@astrojs/compiler': 2.10.4
- '@astrojs/internal-helpers': 0.5.1
- '@astrojs/markdown-remark': 6.1.0
- '@astrojs/telemetry': 3.2.0
+ '@astrojs/compiler': 2.13.0
+ '@astrojs/internal-helpers': 0.7.5
+ '@astrojs/markdown-remark': 6.3.10
+ '@astrojs/telemetry': 3.3.0
+ '@capsizecss/unpack': 4.0.0
'@oslojs/encoding': 1.1.0
- '@rollup/pluginutils': 5.1.4(rollup@4.34.7)
- '@types/cookie': 0.6.0
- acorn: 8.14.0
+ '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
+ acorn: 8.15.0
aria-query: 5.3.2
axobject-query: 4.1.0
boxen: 8.0.1
- ci-info: 4.1.0
+ ci-info: 4.4.0
clsx: 2.1.1
common-ancestor-path: 1.0.1
- cookie: 0.7.2
+ cookie: 1.1.1
cssesc: 3.0.0
- debug: 4.4.0
+ debug: 4.4.3
deterministic-object-hash: 2.0.2
- devalue: 5.1.1
- diff: 5.2.0
+ devalue: 5.6.2
+ diff: 8.0.3
dlv: 1.1.3
dset: 3.1.4
- es-module-lexer: 1.6.0
- esbuild: 0.24.2
+ es-module-lexer: 1.7.0
+ esbuild: 0.25.12
estree-walker: 3.0.3
- fast-glob: 3.3.3
flattie: 1.1.1
+ fontace: 0.4.0
github-slugger: 2.0.0
html-escaper: 3.0.3
- http-cache-semantics: 4.1.1
- js-yaml: 4.1.0
- kleur: 4.1.5
- magic-string: 0.30.17
- magicast: 0.3.5
- micromatch: 4.0.8
- mrmime: 2.0.0
+ http-cache-semantics: 4.2.0
+ import-meta-resolve: 4.2.0
+ js-yaml: 4.1.1
+ magic-string: 0.30.21
+ magicast: 0.5.1
+ mrmime: 2.0.1
neotraverse: 0.6.18
p-limit: 6.2.0
- p-queue: 8.1.0
- preferred-pm: 4.1.1
+ p-queue: 8.1.1
+ package-manager-detector: 1.6.0
+ piccolore: 0.1.3
+ picomatch: 4.0.3
prompts: 2.4.2
rehype: 13.0.2
- semver: 7.7.1
- shiki: 1.29.2
- tinyexec: 0.3.2
- tsconfck: 3.1.5(typescript@5.7.3)
- ultrahtml: 1.5.3
- unist-util-visit: 5.0.0
- unstorage: 1.14.4
+ semver: 7.7.3
+ shiki: 3.22.0
+ smol-toml: 1.6.0
+ svgo: 4.0.0
+ tinyexec: 1.0.2
+ tinyglobby: 0.2.15
+ tsconfck: 3.1.6(typescript@5.7.3)
+ ultrahtml: 1.6.0
+ unifont: 0.7.3
+ unist-util-visit: 5.1.0
+ unstorage: 1.17.4
vfile: 6.0.3
- vite: 6.1.0(yaml@2.7.0)
- vitefu: 1.0.5(vite@6.1.0(yaml@2.7.0))
- which-pm: 3.0.1
+ vite: 6.4.1(@types/node@25.1.0)(yaml@2.8.2)
+ vitefu: 1.1.1(vite@6.4.1(@types/node@25.1.0)(yaml@2.8.2))
xxhash-wasm: 1.1.0
yargs-parser: 21.1.1
- yocto-spinner: 0.2.0
- zod: 3.24.2
- zod-to-json-schema: 3.24.1(zod@3.24.2)
- zod-to-ts: 1.2.0(typescript@5.7.3)(zod@3.24.2)
+ yocto-spinner: 0.2.3
+ zod: 3.25.76
+ zod-to-json-schema: 3.25.1(zod@3.25.76)
+ zod-to-ts: 1.2.0(typescript@5.7.3)(zod@3.25.76)
optionalDependencies:
- sharp: 0.33.5
+ sharp: 0.34.5
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -2654,6 +2967,7 @@ snapshots:
- '@types/node'
- '@upstash/redis'
- '@vercel/blob'
+ - '@vercel/functions'
- '@vercel/kv'
- aws4fetch
- db0
@@ -2676,41 +2990,53 @@ snapshots:
axobject-query@4.1.0: {}
- b4a@1.6.7: {}
+ b4a@1.7.3: {}
bail@2.0.2: {}
- bare-events@2.5.4:
- optional: true
+ bare-events@2.8.2: {}
- bare-fs@4.0.1:
+ bare-fs@4.5.3:
dependencies:
- bare-events: 2.5.4
+ bare-events: 2.8.2
bare-path: 3.0.0
- bare-stream: 2.6.5(bare-events@2.5.4)
+ bare-stream: 2.7.0(bare-events@2.8.2)
+ bare-url: 2.3.2
+ fast-fifo: 1.3.2
transitivePeerDependencies:
- - bare-buffer
+ - bare-abort-controller
+ - react-native-b4a
optional: true
- bare-os@3.4.0:
+ bare-os@3.6.2:
optional: true
bare-path@3.0.0:
dependencies:
- bare-os: 3.4.0
+ bare-os: 3.6.2
optional: true
- bare-stream@2.6.5(bare-events@2.5.4):
+ bare-stream@2.7.0(bare-events@2.8.2):
dependencies:
- streamx: 2.22.0
+ streamx: 2.23.0
optionalDependencies:
- bare-events: 2.5.4
+ bare-events: 2.8.2
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+ optional: true
+
+ bare-url@2.3.2:
+ dependencies:
+ bare-path: 3.0.0
optional: true
base-64@1.0.0: {}
base64-js@1.5.1: {}
+ basic-ftp@5.1.0: {}
+
bcp-47-match@2.0.3: {}
bcp-47@2.1.0:
@@ -2719,41 +3045,33 @@ snapshots:
is-alphanumerical: 2.0.1
is-decimal: 2.0.1
- binary-extensions@2.3.0: {}
-
- bl@4.1.0:
- dependencies:
- buffer: 5.7.1
- inherits: 2.0.4
- readable-stream: 3.6.2
-
boolbase@1.0.0: {}
boxen@8.0.1:
dependencies:
ansi-align: 3.0.1
camelcase: 8.0.0
- chalk: 5.4.1
+ chalk: 5.6.2
cli-boxes: 3.0.0
string-width: 7.2.0
- type-fest: 4.34.1
+ type-fest: 4.41.0
widest-line: 5.0.0
- wrap-ansi: 9.0.0
+ wrap-ansi: 9.0.2
- braces@3.0.3:
- dependencies:
- fill-range: 7.1.1
+ buffer-crc32@0.2.13: {}
buffer@5.7.1:
dependencies:
base64-js: 1.5.1
ieee754: 1.2.1
+ callsites@3.1.0: {}
+
camelcase@8.0.0: {}
ccount@2.0.1: {}
- chalk@5.4.1: {}
+ chalk@5.6.2: {}
character-entities-html4@2.1.0: {}
@@ -2763,24 +3081,26 @@ snapshots:
character-reference-invalid@2.0.1: {}
- chokidar@3.6.0:
+ chokidar@5.0.0:
dependencies:
- anymatch: 3.1.3
- braces: 3.0.3
- glob-parent: 5.1.2
- is-binary-path: 2.1.0
- is-glob: 4.0.3
- normalize-path: 3.0.0
- readdirp: 3.6.0
- optionalDependencies:
- fsevents: 2.3.3
+ readdirp: 5.0.0
- chownr@1.1.4: {}
+ chromium-bidi@0.11.0(devtools-protocol@0.0.1367902):
+ dependencies:
+ devtools-protocol: 0.0.1367902
+ mitt: 3.0.1
+ zod: 3.23.8
- ci-info@4.1.0: {}
+ ci-info@4.4.0: {}
cli-boxes@3.0.0: {}
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
clsx@2.1.1: {}
collapse-white-space@2.1.0: {}
@@ -2791,87 +3111,140 @@ snapshots:
color-name@1.1.4: {}
- color-string@1.9.1:
- dependencies:
- color-name: 1.1.4
- simple-swizzle: 0.2.2
-
- color@4.2.3:
- dependencies:
- color-convert: 2.0.1
- color-string: 1.9.1
-
comma-separated-tokens@2.0.3: {}
+ commander@11.1.0: {}
+
common-ancestor-path@1.0.1: {}
cookie-es@1.2.2: {}
- cookie@0.7.2: {}
+ cookie@1.1.1: {}
+
+ cosmiconfig@9.0.0(typescript@5.7.3):
+ dependencies:
+ env-paths: 2.2.1
+ import-fresh: 3.3.1
+ js-yaml: 4.1.1
+ parse-json: 5.2.0
+ optionalDependencies:
+ typescript: 5.7.3
- crossws@0.3.4:
+ crossws@0.3.5:
dependencies:
uncrypto: 0.1.3
- css-selector-parser@3.0.5: {}
+ css-select@5.2.2:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.2.2
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ nth-check: 2.1.1
- cssesc@3.0.0: {}
+ css-selector-parser@3.3.0: {}
- debug@4.4.0:
+ css-tree@2.2.1:
dependencies:
- ms: 2.1.3
+ mdn-data: 2.0.28
+ source-map-js: 1.2.1
- decode-named-character-reference@1.0.2:
+ css-tree@3.1.0:
dependencies:
- character-entities: 2.0.2
+ mdn-data: 2.12.2
+ source-map-js: 1.2.1
+
+ css-what@6.2.2: {}
+
+ cssesc@3.0.0: {}
- decompress-response@6.0.0:
+ csso@5.0.5:
dependencies:
- mimic-response: 3.1.0
+ css-tree: 2.2.1
+
+ data-uri-to-buffer@6.0.2: {}
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
- deep-extend@0.6.0: {}
+ decode-named-character-reference@1.3.0:
+ dependencies:
+ character-entities: 2.0.2
defu@6.1.4: {}
+ degenerator@5.0.1:
+ dependencies:
+ ast-types: 0.13.4
+ escodegen: 2.1.0
+ esprima: 4.0.1
+
dequal@2.0.3: {}
- destr@2.0.3: {}
+ destr@2.0.5: {}
- detect-libc@2.0.3: {}
+ detect-libc@2.1.2: {}
deterministic-object-hash@2.0.2:
dependencies:
base-64: 1.0.0
- devalue@5.1.1: {}
+ devalue@5.6.2: {}
devlop@1.1.0:
dependencies:
dequal: 2.0.3
- diff@5.2.0: {}
+ devtools-protocol@0.0.1367902: {}
+
+ diff@8.0.3: {}
direction@2.0.1: {}
dlv@1.1.3: {}
- dset@3.1.4: {}
+ dom-serializer@2.0.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+
+ domelementtype@2.3.0: {}
+
+ domhandler@5.0.3:
+ dependencies:
+ domelementtype: 2.3.0
- emoji-regex-xs@1.0.0: {}
+ domutils@3.2.2:
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+
+ dset@3.1.4: {}
- emoji-regex@10.4.0: {}
+ emoji-regex@10.6.0: {}
emoji-regex@8.0.0: {}
- end-of-stream@1.4.4:
+ end-of-stream@1.4.5:
dependencies:
once: 1.4.0
entities@4.5.0: {}
+ entities@6.0.1: {}
+
+ env-paths@2.2.1: {}
+
environment@1.1.0: {}
- es-module-lexer@1.6.0: {}
+ error-ex@1.3.4:
+ dependencies:
+ is-arrayish: 0.2.1
+
+ es-module-lexer@1.7.0: {}
esast-util-from-estree@2.0.0:
dependencies:
@@ -2883,45 +3256,58 @@ snapshots:
esast-util-from-js@2.0.1:
dependencies:
'@types/estree-jsx': 1.0.5
- acorn: 8.14.0
+ acorn: 8.15.0
esast-util-from-estree: 2.0.0
- vfile-message: 4.0.2
+ vfile-message: 4.0.3
- esbuild@0.24.2:
+ esbuild@0.25.12:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.24.2
- '@esbuild/android-arm': 0.24.2
- '@esbuild/android-arm64': 0.24.2
- '@esbuild/android-x64': 0.24.2
- '@esbuild/darwin-arm64': 0.24.2
- '@esbuild/darwin-x64': 0.24.2
- '@esbuild/freebsd-arm64': 0.24.2
- '@esbuild/freebsd-x64': 0.24.2
- '@esbuild/linux-arm': 0.24.2
- '@esbuild/linux-arm64': 0.24.2
- '@esbuild/linux-ia32': 0.24.2
- '@esbuild/linux-loong64': 0.24.2
- '@esbuild/linux-mips64el': 0.24.2
- '@esbuild/linux-ppc64': 0.24.2
- '@esbuild/linux-riscv64': 0.24.2
- '@esbuild/linux-s390x': 0.24.2
- '@esbuild/linux-x64': 0.24.2
- '@esbuild/netbsd-arm64': 0.24.2
- '@esbuild/netbsd-x64': 0.24.2
- '@esbuild/openbsd-arm64': 0.24.2
- '@esbuild/openbsd-x64': 0.24.2
- '@esbuild/sunos-x64': 0.24.2
- '@esbuild/win32-arm64': 0.24.2
- '@esbuild/win32-ia32': 0.24.2
- '@esbuild/win32-x64': 0.24.2
+ '@esbuild/aix-ppc64': 0.25.12
+ '@esbuild/android-arm': 0.25.12
+ '@esbuild/android-arm64': 0.25.12
+ '@esbuild/android-x64': 0.25.12
+ '@esbuild/darwin-arm64': 0.25.12
+ '@esbuild/darwin-x64': 0.25.12
+ '@esbuild/freebsd-arm64': 0.25.12
+ '@esbuild/freebsd-x64': 0.25.12
+ '@esbuild/linux-arm': 0.25.12
+ '@esbuild/linux-arm64': 0.25.12
+ '@esbuild/linux-ia32': 0.25.12
+ '@esbuild/linux-loong64': 0.25.12
+ '@esbuild/linux-mips64el': 0.25.12
+ '@esbuild/linux-ppc64': 0.25.12
+ '@esbuild/linux-riscv64': 0.25.12
+ '@esbuild/linux-s390x': 0.25.12
+ '@esbuild/linux-x64': 0.25.12
+ '@esbuild/netbsd-arm64': 0.25.12
+ '@esbuild/netbsd-x64': 0.25.12
+ '@esbuild/openbsd-arm64': 0.25.12
+ '@esbuild/openbsd-x64': 0.25.12
+ '@esbuild/openharmony-arm64': 0.25.12
+ '@esbuild/sunos-x64': 0.25.12
+ '@esbuild/win32-arm64': 0.25.12
+ '@esbuild/win32-ia32': 0.25.12
+ '@esbuild/win32-x64': 0.25.12
+
+ escalade@3.2.0: {}
escape-string-regexp@5.0.0: {}
+ escodegen@2.1.0:
+ dependencies:
+ esprima: 4.0.1
+ estraverse: 5.3.0
+ esutils: 2.0.3
+ optionalDependencies:
+ source-map: 0.6.1
+
esprima@4.0.1: {}
+ estraverse@5.3.0: {}
+
estree-util-attach-comments@3.0.0:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
estree-util-build-jsx@3.0.1:
dependencies:
@@ -2934,14 +3320,14 @@ snapshots:
estree-util-scope@1.0.0:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
devlop: 1.1.0
estree-util-to-js@2.0.0:
dependencies:
'@types/estree-jsx': 1.0.5
astring: 1.9.0
- source-map: 0.7.4
+ source-map: 0.7.6
estree-util-visit@2.0.0:
dependencies:
@@ -2952,81 +3338,88 @@ snapshots:
estree-walker@3.0.3:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
- eventemitter3@5.0.1: {}
+ esutils@2.0.3: {}
- expand-template@2.0.3: {}
+ eventemitter3@5.0.4: {}
- expressive-code@0.40.2:
+ events-universal@1.0.1:
dependencies:
- '@expressive-code/core': 0.40.2
- '@expressive-code/plugin-frames': 0.40.2
- '@expressive-code/plugin-shiki': 0.40.2
- '@expressive-code/plugin-text-markers': 0.40.2
-
- extend@3.0.2: {}
-
- fast-fifo@1.3.2: {}
+ bare-events: 2.8.2
+ transitivePeerDependencies:
+ - bare-abort-controller
- fast-glob@3.3.3:
+ expressive-code@0.41.6:
dependencies:
- '@nodelib/fs.stat': 2.0.5
- '@nodelib/fs.walk': 1.2.8
- glob-parent: 5.1.2
- merge2: 1.4.1
- micromatch: 4.0.8
+ '@expressive-code/core': 0.41.6
+ '@expressive-code/plugin-frames': 0.41.6
+ '@expressive-code/plugin-shiki': 0.41.6
+ '@expressive-code/plugin-text-markers': 0.41.6
- fastq@1.19.0:
- dependencies:
- reusify: 1.0.4
+ extend@3.0.2: {}
- fill-range@7.1.1:
+ extract-zip@2.0.1:
dependencies:
- to-regex-range: 5.0.1
+ debug: 4.4.3
+ get-stream: 5.2.0
+ yauzl: 2.10.0
+ optionalDependencies:
+ '@types/yauzl': 2.10.3
+ transitivePeerDependencies:
+ - supports-color
- find-up-simple@1.0.0: {}
+ fast-fifo@1.3.2: {}
- find-up@4.1.0:
+ fd-slicer@1.1.0:
dependencies:
- locate-path: 5.0.0
- path-exists: 4.0.0
+ pend: 1.2.0
- find-yarn-workspace-root2@1.2.16:
- dependencies:
- micromatch: 4.0.8
- pkg-dir: 4.2.0
+ fdir@6.5.0(picomatch@4.0.3):
+ optionalDependencies:
+ picomatch: 4.0.3
flattie@1.1.1: {}
- fs-constants@1.0.0: {}
+ fontace@0.4.0:
+ dependencies:
+ fontkitten: 1.0.2
+
+ fontkitten@1.0.2:
+ dependencies:
+ tiny-inflate: 1.0.3
fsevents@2.3.3:
optional: true
- get-east-asian-width@1.3.0: {}
+ get-caller-file@2.0.5: {}
- github-from-package@0.0.0: {}
+ get-east-asian-width@1.4.0: {}
- github-slugger@2.0.0: {}
+ get-stream@5.2.0:
+ dependencies:
+ pump: 3.0.3
- glob-parent@5.1.2:
+ get-uri@6.0.5:
dependencies:
- is-glob: 4.0.3
+ basic-ftp: 5.1.0
+ data-uri-to-buffer: 6.0.2
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
- graceful-fs@4.2.11: {}
+ github-slugger@2.0.0: {}
- h3@1.15.0:
+ h3@1.15.5:
dependencies:
cookie-es: 1.2.2
- crossws: 0.3.4
+ crossws: 0.3.5
defu: 6.1.4
- destr: 2.0.3
+ destr: 2.0.5
iron-webcrypto: 1.2.1
- node-mock-http: 1.0.0
- ohash: 1.1.4
+ node-mock-http: 1.0.4
radix3: 1.1.2
- ufo: 1.5.4
+ ufo: 1.6.3
uncrypto: 0.1.3
has-flag@5.0.1: {}
@@ -3044,24 +3437,24 @@ snapshots:
hast-util-phrasing: 3.0.1
hast-util-whitespace: 3.0.0
html-whitespace-sensitive-tag-names: 3.0.1
- unist-util-visit-parents: 6.0.1
+ unist-util-visit-parents: 6.0.2
hast-util-from-html@2.0.3:
dependencies:
'@types/hast': 3.0.4
devlop: 1.1.0
- hast-util-from-parse5: 8.0.2
- parse5: 7.2.1
+ hast-util-from-parse5: 8.0.3
+ parse5: 7.3.0
vfile: 6.0.3
- vfile-message: 4.0.2
+ vfile-message: 4.0.3
- hast-util-from-parse5@8.0.2:
+ hast-util-from-parse5@8.0.3:
dependencies:
'@types/hast': 3.0.4
'@types/unist': 3.0.3
devlop: 1.1.0
- hastscript: 9.0.0
- property-information: 6.5.0
+ hastscript: 9.0.1
+ property-information: 7.1.0
vfile: 6.0.3
vfile-location: 5.0.3
web-namespaces: 2.0.1
@@ -3084,7 +3477,7 @@ snapshots:
hast-util-embedded: 3.0.0
hast-util-is-element: 3.0.0
hast-util-whitespace: 3.0.0
- unist-util-is: 6.0.0
+ unist-util-is: 6.0.1
hast-util-parse-selector@4.0.0:
dependencies:
@@ -3103,38 +3496,38 @@ snapshots:
'@types/hast': 3.0.4
'@types/unist': 3.0.3
'@ungap/structured-clone': 1.3.0
- hast-util-from-parse5: 8.0.2
- hast-util-to-parse5: 8.0.0
+ hast-util-from-parse5: 8.0.3
+ hast-util-to-parse5: 8.0.1
html-void-elements: 3.0.0
- mdast-util-to-hast: 13.2.0
- parse5: 7.2.1
+ mdast-util-to-hast: 13.2.1
+ parse5: 7.3.0
unist-util-position: 5.0.0
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
vfile: 6.0.3
web-namespaces: 2.0.1
zwitch: 2.0.4
- hast-util-select@6.0.3:
+ hast-util-select@6.0.4:
dependencies:
'@types/hast': 3.0.4
'@types/unist': 3.0.3
bcp-47-match: 2.0.3
comma-separated-tokens: 2.0.3
- css-selector-parser: 3.0.5
+ css-selector-parser: 3.3.0
devlop: 1.1.0
direction: 2.0.1
hast-util-has-property: 3.0.0
hast-util-to-string: 3.0.1
hast-util-whitespace: 3.0.0
nth-check: 2.1.1
- property-information: 6.5.0
+ property-information: 7.1.0
space-separated-tokens: 2.0.2
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
zwitch: 2.0.4
- hast-util-to-estree@3.1.1:
+ hast-util-to-estree@3.1.3:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
'@types/estree-jsx': 1.0.5
'@types/hast': 3.0.4
comma-separated-tokens: 2.0.3
@@ -3145,15 +3538,15 @@ snapshots:
mdast-util-mdx-expression: 2.0.1
mdast-util-mdx-jsx: 3.2.0
mdast-util-mdxjs-esm: 2.0.1
- property-information: 6.5.0
+ property-information: 7.1.0
space-separated-tokens: 2.0.2
- style-to-object: 1.0.8
+ style-to-js: 1.1.21
unist-util-position: 5.0.0
zwitch: 2.0.4
transitivePeerDependencies:
- supports-color
- hast-util-to-html@9.0.4:
+ hast-util-to-html@9.0.5:
dependencies:
'@types/hast': 3.0.4
'@types/unist': 3.0.3
@@ -3161,15 +3554,15 @@ snapshots:
comma-separated-tokens: 2.0.3
hast-util-whitespace: 3.0.0
html-void-elements: 3.0.0
- mdast-util-to-hast: 13.2.0
- property-information: 6.5.0
+ mdast-util-to-hast: 13.2.1
+ property-information: 7.1.0
space-separated-tokens: 2.0.2
stringify-entities: 4.0.4
zwitch: 2.0.4
- hast-util-to-jsx-runtime@2.3.2:
+ hast-util-to-jsx-runtime@2.3.6:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
'@types/hast': 3.0.4
'@types/unist': 3.0.3
comma-separated-tokens: 2.0.3
@@ -3179,20 +3572,20 @@ snapshots:
mdast-util-mdx-expression: 2.0.1
mdast-util-mdx-jsx: 3.2.0
mdast-util-mdxjs-esm: 2.0.1
- property-information: 6.5.0
+ property-information: 7.1.0
space-separated-tokens: 2.0.2
- style-to-object: 1.0.8
+ style-to-js: 1.1.21
unist-util-position: 5.0.0
- vfile-message: 4.0.2
+ vfile-message: 4.0.3
transitivePeerDependencies:
- supports-color
- hast-util-to-parse5@8.0.0:
+ hast-util-to-parse5@8.0.1:
dependencies:
'@types/hast': 3.0.4
comma-separated-tokens: 2.0.3
devlop: 1.1.0
- property-information: 6.5.0
+ property-information: 7.1.0
space-separated-tokens: 2.0.2
web-namespaces: 2.0.1
zwitch: 2.0.4
@@ -3212,12 +3605,12 @@ snapshots:
dependencies:
'@types/hast': 3.0.4
- hastscript@9.0.0:
+ hastscript@9.0.1:
dependencies:
'@types/hast': 3.0.4
comma-separated-tokens: 2.0.3
hast-util-parse-selector: 4.0.0
- property-information: 6.5.0
+ property-information: 7.1.0
space-separated-tokens: 2.0.2
html-escaper@3.0.3: {}
@@ -3226,21 +3619,38 @@ snapshots:
html-whitespace-sensitive-tag-names@3.0.1: {}
- http-cache-semantics@4.1.1: {}
+ http-cache-semantics@4.2.0: {}
+
+ http-proxy-agent@7.0.2:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ https-proxy-agent@7.0.6:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
i18next@23.16.8:
dependencies:
- '@babel/runtime': 7.26.9
+ '@babel/runtime': 7.28.6
ieee754@1.2.1: {}
- import-meta-resolve@4.1.0: {}
+ import-fresh@3.3.1:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
- inherits@2.0.4: {}
+ import-meta-resolve@4.2.0: {}
- ini@1.3.8: {}
+ inline-style-parser@0.2.7: {}
- inline-style-parser@0.2.4: {}
+ ip-address@10.1.0: {}
iron-webcrypto@1.2.1: {}
@@ -3253,76 +3663,56 @@ snapshots:
is-alphabetical: 2.0.1
is-decimal: 2.0.1
- is-arrayish@0.3.2: {}
-
- is-binary-path@2.1.0:
- dependencies:
- binary-extensions: 2.3.0
+ is-arrayish@0.2.1: {}
is-decimal@2.0.1: {}
is-docker@3.0.0: {}
- is-extglob@2.1.1: {}
-
is-fullwidth-code-point@3.0.0: {}
- is-glob@4.0.3:
- dependencies:
- is-extglob: 2.1.1
-
is-hexadecimal@2.0.1: {}
is-inside-container@1.0.0:
dependencies:
is-docker: 3.0.0
- is-number@7.0.0: {}
-
is-plain-obj@4.1.0: {}
is-wsl@3.1.0:
dependencies:
is-inside-container: 1.0.0
- js-yaml@3.14.1:
- dependencies:
- argparse: 1.0.10
- esprima: 4.0.1
+ js-tokens@4.0.0: {}
- js-yaml@4.1.0:
+ js-yaml@4.1.1:
dependencies:
argparse: 2.0.1
+ json-parse-even-better-errors@2.3.1: {}
+
kleur@3.0.3: {}
kleur@4.1.5: {}
klona@2.0.6: {}
- load-yaml-file@0.2.0:
- dependencies:
- graceful-fs: 4.2.11
- js-yaml: 3.14.1
- pify: 4.0.1
- strip-bom: 3.0.0
-
- locate-path@5.0.0:
- dependencies:
- p-locate: 4.1.0
+ lines-and-columns@1.2.4: {}
longest-streak@3.1.0: {}
- lru-cache@10.4.3: {}
+ lru-cache@11.2.5: {}
- magic-string@0.30.17:
+ lru-cache@7.18.3: {}
+
+ magic-string@0.30.21:
dependencies:
- '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/sourcemap-codec': 1.5.5
- magicast@0.3.5:
+ magicast@0.5.1:
dependencies:
- '@babel/parser': 7.26.9
- '@babel/types': 7.26.9
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
source-map-js: 1.2.1
markdown-extensions@2.0.0: {}
@@ -3333,7 +3723,7 @@ snapshots:
dependencies:
'@types/mdast': 4.0.4
'@types/unist': 3.0.3
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
mdast-util-directive@3.1.0:
dependencies:
@@ -3345,7 +3735,7 @@ snapshots:
mdast-util-to-markdown: 2.1.2
parse-entities: 4.0.2
stringify-entities: 4.0.4
- unist-util-visit-parents: 6.0.1
+ unist-util-visit-parents: 6.0.2
transitivePeerDependencies:
- supports-color
@@ -3353,22 +3743,22 @@ snapshots:
dependencies:
'@types/mdast': 4.0.4
escape-string-regexp: 5.0.0
- unist-util-is: 6.0.0
- unist-util-visit-parents: 6.0.1
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
mdast-util-from-markdown@2.0.2:
dependencies:
'@types/mdast': 4.0.4
'@types/unist': 3.0.3
- decode-named-character-reference: 1.0.2
+ decode-named-character-reference: 1.3.0
devlop: 1.1.0
mdast-util-to-string: 4.0.0
- micromark: 4.0.1
+ micromark: 4.0.2
micromark-util-decode-numeric-character-reference: 2.0.2
micromark-util-decode-string: 2.0.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
unist-util-stringify-position: 4.0.0
transitivePeerDependencies:
- supports-color
@@ -3454,7 +3844,7 @@ snapshots:
parse-entities: 4.0.2
stringify-entities: 4.0.4
unist-util-stringify-position: 4.0.0
- vfile-message: 4.0.2
+ vfile-message: 4.0.3
transitivePeerDependencies:
- supports-color
@@ -3482,9 +3872,9 @@ snapshots:
mdast-util-phrasing@4.1.0:
dependencies:
'@types/mdast': 4.0.4
- unist-util-is: 6.0.0
+ unist-util-is: 6.0.1
- mdast-util-to-hast@13.2.0:
+ mdast-util-to-hast@13.2.1:
dependencies:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
@@ -3493,7 +3883,7 @@ snapshots:
micromark-util-sanitize-uri: 2.0.1
trim-lines: 3.0.1
unist-util-position: 5.0.0
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
vfile: 6.0.3
mdast-util-to-markdown@2.1.2:
@@ -3505,18 +3895,20 @@ snapshots:
mdast-util-to-string: 4.0.0
micromark-util-classify-character: 2.0.1
micromark-util-decode-string: 2.0.1
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
zwitch: 2.0.4
mdast-util-to-string@4.0.0:
dependencies:
'@types/mdast': 4.0.4
- merge2@1.4.1: {}
+ mdn-data@2.0.28: {}
+
+ mdn-data@2.12.2: {}
- micromark-core-commonmark@2.0.2:
+ micromark-core-commonmark@2.0.3:
dependencies:
- decode-named-character-reference: 1.0.2
+ decode-named-character-reference: 1.3.0
devlop: 1.1.0
micromark-factory-destination: 2.0.1
micromark-factory-label: 2.0.1
@@ -3529,9 +3921,9 @@ snapshots:
micromark-util-html-tag-name: 2.0.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-resolve-all: 2.0.1
- micromark-util-subtokenize: 2.0.4
+ micromark-util-subtokenize: 2.1.0
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-extension-directive@3.0.2:
dependencies:
@@ -3540,7 +3932,7 @@ snapshots:
micromark-factory-whitespace: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
parse-entities: 4.0.2
micromark-extension-gfm-autolink-literal@2.1.0:
@@ -3548,18 +3940,18 @@ snapshots:
micromark-util-character: 2.1.1
micromark-util-sanitize-uri: 2.0.1
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-extension-gfm-footnote@2.1.0:
dependencies:
devlop: 1.1.0
- micromark-core-commonmark: 2.0.2
+ micromark-core-commonmark: 2.0.3
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-sanitize-uri: 2.0.1
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-extension-gfm-strikethrough@2.1.0:
dependencies:
@@ -3568,7 +3960,7 @@ snapshots:
micromark-util-classify-character: 2.0.1
micromark-util-resolve-all: 2.0.1
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-extension-gfm-table@2.1.1:
dependencies:
@@ -3576,11 +3968,11 @@ snapshots:
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-extension-gfm-tagfilter@2.0.0:
dependencies:
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-extension-gfm-task-list-item@2.1.0:
dependencies:
@@ -3588,7 +3980,7 @@ snapshots:
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-extension-gfm@3.0.0:
dependencies:
@@ -3599,108 +3991,107 @@ snapshots:
micromark-extension-gfm-tagfilter: 2.0.0
micromark-extension-gfm-task-list-item: 2.1.0
micromark-util-combine-extensions: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
- micromark-extension-mdx-expression@3.0.0:
+ micromark-extension-mdx-expression@3.0.1:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
devlop: 1.1.0
- micromark-factory-mdx-expression: 2.0.2
+ micromark-factory-mdx-expression: 2.0.3
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
- micromark-util-events-to-acorn: 2.0.2
+ micromark-util-events-to-acorn: 2.0.3
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
- micromark-extension-mdx-jsx@3.0.1:
+ micromark-extension-mdx-jsx@3.0.2:
dependencies:
- '@types/acorn': 4.0.6
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
devlop: 1.1.0
estree-util-is-identifier-name: 3.0.0
- micromark-factory-mdx-expression: 2.0.2
+ micromark-factory-mdx-expression: 2.0.3
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
- micromark-util-events-to-acorn: 2.0.2
+ micromark-util-events-to-acorn: 2.0.3
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
- vfile-message: 4.0.2
+ micromark-util-types: 2.0.2
+ vfile-message: 4.0.3
micromark-extension-mdx-md@2.0.0:
dependencies:
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-extension-mdxjs-esm@3.0.0:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
devlop: 1.1.0
- micromark-core-commonmark: 2.0.2
+ micromark-core-commonmark: 2.0.3
micromark-util-character: 2.1.1
- micromark-util-events-to-acorn: 2.0.2
+ micromark-util-events-to-acorn: 2.0.3
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
unist-util-position-from-estree: 2.0.0
- vfile-message: 4.0.2
+ vfile-message: 4.0.3
micromark-extension-mdxjs@3.0.0:
dependencies:
- acorn: 8.14.0
- acorn-jsx: 5.3.2(acorn@8.14.0)
- micromark-extension-mdx-expression: 3.0.0
- micromark-extension-mdx-jsx: 3.0.1
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ micromark-extension-mdx-expression: 3.0.1
+ micromark-extension-mdx-jsx: 3.0.2
micromark-extension-mdx-md: 2.0.0
micromark-extension-mdxjs-esm: 3.0.0
micromark-util-combine-extensions: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-factory-destination@2.0.1:
dependencies:
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-factory-label@2.0.1:
dependencies:
devlop: 1.1.0
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
- micromark-factory-mdx-expression@2.0.2:
+ micromark-factory-mdx-expression@2.0.3:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
devlop: 1.1.0
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
- micromark-util-events-to-acorn: 2.0.2
+ micromark-util-events-to-acorn: 2.0.3
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
unist-util-position-from-estree: 2.0.0
- vfile-message: 4.0.2
+ vfile-message: 4.0.3
micromark-factory-space@2.0.1:
dependencies:
micromark-util-character: 2.1.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-factory-title@2.0.1:
dependencies:
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-factory-whitespace@2.0.1:
dependencies:
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-util-character@2.1.1:
dependencies:
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-util-chunked@2.0.1:
dependencies:
@@ -3710,12 +4101,12 @@ snapshots:
dependencies:
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-util-combine-extensions@2.0.1:
dependencies:
micromark-util-chunked: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-util-decode-numeric-character-reference@2.0.2:
dependencies:
@@ -3723,23 +4114,22 @@ snapshots:
micromark-util-decode-string@2.0.1:
dependencies:
- decode-named-character-reference: 1.0.2
+ decode-named-character-reference: 1.3.0
micromark-util-character: 2.1.1
micromark-util-decode-numeric-character-reference: 2.0.2
micromark-util-symbol: 2.0.1
micromark-util-encode@2.0.1: {}
- micromark-util-events-to-acorn@2.0.2:
+ micromark-util-events-to-acorn@2.0.3:
dependencies:
- '@types/acorn': 4.0.6
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
'@types/unist': 3.0.3
devlop: 1.1.0
estree-util-visit: 2.0.0
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
- vfile-message: 4.0.2
+ micromark-util-types: 2.0.2
+ vfile-message: 4.0.3
micromark-util-html-tag-name@2.0.1: {}
@@ -3749,7 +4139,7 @@ snapshots:
micromark-util-resolve-all@2.0.1:
dependencies:
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-util-sanitize-uri@2.0.1:
dependencies:
@@ -3757,24 +4147,24 @@ snapshots:
micromark-util-encode: 2.0.1
micromark-util-symbol: 2.0.1
- micromark-util-subtokenize@2.0.4:
+ micromark-util-subtokenize@2.1.0:
dependencies:
devlop: 1.1.0
micromark-util-chunked: 2.0.1
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
micromark-util-symbol@2.0.1: {}
- micromark-util-types@2.0.1: {}
+ micromark-util-types@2.0.2: {}
- micromark@4.0.1:
+ micromark@4.0.2:
dependencies:
'@types/debug': 4.1.12
- debug: 4.4.0
- decode-named-character-reference: 1.0.2
+ debug: 4.4.3
+ decode-named-character-reference: 1.3.0
devlop: 1.1.0
- micromark-core-commonmark: 2.0.2
+ micromark-core-commonmark: 2.0.3
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-chunked: 2.0.1
@@ -3784,46 +4174,31 @@ snapshots:
micromark-util-normalize-identifier: 2.0.1
micromark-util-resolve-all: 2.0.1
micromark-util-sanitize-uri: 2.0.1
- micromark-util-subtokenize: 2.0.4
+ micromark-util-subtokenize: 2.1.0
micromark-util-symbol: 2.0.1
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
transitivePeerDependencies:
- supports-color
- micromatch@4.0.8:
- dependencies:
- braces: 3.0.3
- picomatch: 2.3.1
-
- mimic-response@3.1.0: {}
-
- minimist@1.2.8: {}
+ mitt@3.0.1: {}
- mkdirp-classic@0.5.3: {}
-
- mrmime@2.0.0: {}
+ mrmime@2.0.1: {}
ms@2.1.3: {}
- nanoid@3.3.8: {}
-
- napi-build-utils@2.0.0: {}
+ nanoid@3.3.11: {}
neotraverse@0.6.18: {}
+ netmask@2.0.2: {}
+
nlcst-to-string@4.0.0:
dependencies:
'@types/nlcst': 2.0.3
- node-abi@3.74.0:
- dependencies:
- semver: 7.7.1
-
- node-addon-api@6.1.0: {}
-
- node-fetch-native@1.6.6: {}
+ node-fetch-native@1.6.7: {}
- node-mock-http@1.0.0: {}
+ node-mock-http@1.0.4: {}
normalize-path@3.0.0: {}
@@ -3831,63 +4206,87 @@ snapshots:
dependencies:
boolbase: 1.0.0
- ofetch@1.4.1:
+ ofetch@1.5.1:
dependencies:
- destr: 2.0.3
- node-fetch-native: 1.6.6
- ufo: 1.5.4
+ destr: 2.0.5
+ node-fetch-native: 1.6.7
+ ufo: 1.6.3
- ohash@1.1.4: {}
+ ohash@2.0.11: {}
once@1.4.0:
dependencies:
wrappy: 1.0.2
- oniguruma-to-es@2.3.0:
- dependencies:
- emoji-regex-xs: 1.0.0
- regex: 5.1.1
- regex-recursion: 5.1.1
+ oniguruma-parser@0.12.1: {}
- p-limit@2.3.0:
+ oniguruma-to-es@4.3.4:
dependencies:
- p-try: 2.2.0
+ oniguruma-parser: 0.12.1
+ regex: 6.1.0
+ regex-recursion: 6.0.2
p-limit@6.2.0:
dependencies:
- yocto-queue: 1.1.1
-
- p-locate@4.1.0:
- dependencies:
- p-limit: 2.3.0
+ yocto-queue: 1.2.2
- p-queue@8.1.0:
+ p-queue@8.1.1:
dependencies:
- eventemitter3: 5.0.1
+ eventemitter3: 5.0.4
p-timeout: 6.1.4
p-timeout@6.1.4: {}
- p-try@2.2.0: {}
+ pac-proxy-agent@7.2.0:
+ dependencies:
+ '@tootallnate/quickjs-emscripten': 0.23.0
+ agent-base: 7.1.4
+ debug: 4.4.3
+ get-uri: 6.0.5
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.6
+ pac-resolver: 7.0.1
+ socks-proxy-agent: 8.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ pac-resolver@7.0.1:
+ dependencies:
+ degenerator: 5.0.1
+ netmask: 2.0.2
+
+ package-manager-detector@1.6.0: {}
- pagefind@1.3.0:
+ pagefind@1.4.0:
optionalDependencies:
- '@pagefind/darwin-arm64': 1.3.0
- '@pagefind/darwin-x64': 1.3.0
- '@pagefind/linux-arm64': 1.3.0
- '@pagefind/linux-x64': 1.3.0
- '@pagefind/windows-x64': 1.3.0
+ '@pagefind/darwin-arm64': 1.4.0
+ '@pagefind/darwin-x64': 1.4.0
+ '@pagefind/freebsd-x64': 1.4.0
+ '@pagefind/linux-arm64': 1.4.0
+ '@pagefind/linux-x64': 1.4.0
+ '@pagefind/windows-x64': 1.4.0
+
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
parse-entities@4.0.2:
dependencies:
'@types/unist': 2.0.11
character-entities-legacy: 3.0.0
character-reference-invalid: 2.0.1
- decode-named-character-reference: 1.0.2
+ decode-named-character-reference: 1.3.0
is-alphanumerical: 2.0.1
is-decimal: 2.0.1
is-hexadecimal: 2.0.1
+ parse-json@5.2.0:
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ error-ex: 1.3.4
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
parse-latin@7.0.0:
dependencies:
'@types/nlcst': 2.0.3
@@ -3897,27 +4296,23 @@ snapshots:
unist-util-visit-children: 3.0.0
vfile: 6.0.3
- parse5@7.2.1:
+ parse5@7.3.0:
dependencies:
- entities: 4.5.0
+ entities: 6.0.1
- path-exists@4.0.0: {}
+ pend@1.2.0: {}
+
+ piccolore@0.1.3: {}
picocolors@1.1.1: {}
picomatch@2.3.1: {}
- picomatch@4.0.2: {}
-
- pify@4.0.1: {}
-
- pkg-dir@4.2.0:
- dependencies:
- find-up: 4.1.0
+ picomatch@4.0.3: {}
- postcss-nested@6.2.0(postcss@8.5.2):
+ postcss-nested@6.2.0(postcss@8.5.6):
dependencies:
- postcss: 8.5.2
+ postcss: 8.5.6
postcss-selector-parser: 6.1.2
postcss-selector-parser@6.1.2:
@@ -3925,114 +4320,124 @@ snapshots:
cssesc: 3.0.0
util-deprecate: 1.0.2
- postcss@8.5.2:
+ postcss@8.5.6:
dependencies:
- nanoid: 3.3.8
+ nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
- prebuild-install@7.1.3:
- dependencies:
- detect-libc: 2.0.3
- expand-template: 2.0.3
- github-from-package: 0.0.0
- minimist: 1.2.8
- mkdirp-classic: 0.5.3
- napi-build-utils: 2.0.0
- node-abi: 3.74.0
- pump: 3.0.2
- rc: 1.2.8
- simple-get: 4.0.1
- tar-fs: 2.1.2
- tunnel-agent: 0.6.0
-
- preferred-pm@4.1.1:
- dependencies:
- find-up-simple: 1.0.0
- find-yarn-workspace-root2: 1.2.16
- which-pm: 3.0.1
+ prismjs@1.30.0: {}
- prismjs@1.29.0: {}
+ progress@2.0.3: {}
prompts@2.4.2:
dependencies:
kleur: 3.0.3
sisteransi: 1.0.5
- property-information@6.5.0: {}
+ property-information@7.1.0: {}
- pump@3.0.2:
+ proxy-agent@6.5.0:
dependencies:
- end-of-stream: 1.4.4
- once: 1.4.0
-
- queue-microtask@1.2.3: {}
+ agent-base: 7.1.4
+ debug: 4.4.3
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.6
+ lru-cache: 7.18.3
+ pac-proxy-agent: 7.2.0
+ proxy-from-env: 1.1.0
+ socks-proxy-agent: 8.0.5
+ transitivePeerDependencies:
+ - supports-color
- radix3@1.1.2: {}
+ proxy-from-env@1.1.0: {}
- rc@1.2.8:
+ pump@3.0.3:
dependencies:
- deep-extend: 0.6.0
- ini: 1.3.8
- minimist: 1.2.8
- strip-json-comments: 2.0.1
+ end-of-stream: 1.4.5
+ once: 1.4.0
+
+ puppeteer-autoscroll-down@2.0.1: {}
- readable-stream@3.6.2:
+ puppeteer-core@23.11.1:
dependencies:
- inherits: 2.0.4
- string_decoder: 1.3.0
- util-deprecate: 1.0.2
+ '@puppeteer/browsers': 2.6.1
+ chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902)
+ debug: 4.4.3
+ devtools-protocol: 0.0.1367902
+ typed-query-selector: 2.12.0
+ ws: 8.19.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - react-native-b4a
+ - supports-color
+ - utf-8-validate
- readdirp@3.6.0:
+ puppeteer@23.11.1(typescript@5.7.3):
dependencies:
- picomatch: 2.3.1
+ '@puppeteer/browsers': 2.6.1
+ chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902)
+ cosmiconfig: 9.0.0(typescript@5.7.3)
+ devtools-protocol: 0.0.1367902
+ puppeteer-core: 23.11.1
+ typed-query-selector: 2.12.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - react-native-b4a
+ - supports-color
+ - typescript
+ - utf-8-validate
+
+ radix3@1.1.2: {}
+
+ readdirp@5.0.0: {}
recma-build-jsx@1.0.0:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
estree-util-build-jsx: 3.0.1
vfile: 6.0.3
- recma-jsx@1.0.0(acorn@8.14.0):
+ recma-jsx@1.0.1(acorn@8.15.0):
dependencies:
- acorn-jsx: 5.3.2(acorn@8.14.0)
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
estree-util-to-js: 2.0.0
recma-parse: 1.0.0
recma-stringify: 1.0.0
unified: 11.0.5
- transitivePeerDependencies:
- - acorn
recma-parse@1.0.0:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
esast-util-from-js: 2.0.1
unified: 11.0.5
vfile: 6.0.3
recma-stringify@1.0.0:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
estree-util-to-js: 2.0.0
unified: 11.0.5
vfile: 6.0.3
- regenerator-runtime@0.14.1: {}
-
- regex-recursion@5.1.1:
+ regex-recursion@6.0.2:
dependencies:
- regex: 5.1.1
regex-utilities: 2.3.0
regex-utilities@2.3.0: {}
- regex@5.1.1:
+ regex@6.1.0:
dependencies:
regex-utilities: 2.3.0
- rehype-expressive-code@0.40.2:
+ rehype-expressive-code@0.41.6:
dependencies:
- expressive-code: 0.40.2
+ expressive-code: 0.41.6
rehype-format@5.0.1:
dependencies:
@@ -4053,16 +4458,16 @@ snapshots:
rehype-recma@1.0.0:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
'@types/hast': 3.0.4
- hast-util-to-estree: 3.1.1
+ hast-util-to-estree: 3.1.3
transitivePeerDependencies:
- supports-color
rehype-stringify@10.0.1:
dependencies:
'@types/hast': 3.0.4
- hast-util-to-html: 9.0.4
+ hast-util-to-html: 9.0.5
unified: 11.0.5
rehype@13.0.2:
@@ -4092,7 +4497,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- remark-mdx@3.1.0:
+ remark-mdx@3.1.1:
dependencies:
mdast-util-mdx: 3.0.0
micromark-extension-mdxjs: 3.0.0
@@ -4103,16 +4508,16 @@ snapshots:
dependencies:
'@types/mdast': 4.0.4
mdast-util-from-markdown: 2.0.2
- micromark-util-types: 2.0.1
+ micromark-util-types: 2.0.2
unified: 11.0.5
transitivePeerDependencies:
- supports-color
- remark-rehype@11.1.1:
+ remark-rehype@11.1.2:
dependencies:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
- mdast-util-to-hast: 13.2.0
+ mdast-util-to-hast: 13.2.1
unified: 11.0.5
vfile: 6.0.3
@@ -4121,7 +4526,7 @@ snapshots:
retext: 9.0.0
retext-smartypants: 6.2.0
unified: 11.0.5
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
remark-stringify@11.0.0:
dependencies:
@@ -4129,6 +4534,10 @@ snapshots:
mdast-util-to-markdown: 2.1.2
unified: 11.0.5
+ require-directory@2.1.1: {}
+
+ resolve-from@4.0.0: {}
+
retext-latin@4.0.0:
dependencies:
'@types/nlcst': 2.0.3
@@ -4139,7 +4548,7 @@ snapshots:
dependencies:
'@types/nlcst': 2.0.3
nlcst-to-string: 4.0.0
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
retext-stringify@4.0.0:
dependencies:
@@ -4154,129 +4563,127 @@ snapshots:
retext-stringify: 4.0.0
unified: 11.0.5
- reusify@1.0.4: {}
-
- rollup@4.34.7:
+ rollup@4.57.1:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.34.7
- '@rollup/rollup-android-arm64': 4.34.7
- '@rollup/rollup-darwin-arm64': 4.34.7
- '@rollup/rollup-darwin-x64': 4.34.7
- '@rollup/rollup-freebsd-arm64': 4.34.7
- '@rollup/rollup-freebsd-x64': 4.34.7
- '@rollup/rollup-linux-arm-gnueabihf': 4.34.7
- '@rollup/rollup-linux-arm-musleabihf': 4.34.7
- '@rollup/rollup-linux-arm64-gnu': 4.34.7
- '@rollup/rollup-linux-arm64-musl': 4.34.7
- '@rollup/rollup-linux-loongarch64-gnu': 4.34.7
- '@rollup/rollup-linux-powerpc64le-gnu': 4.34.7
- '@rollup/rollup-linux-riscv64-gnu': 4.34.7
- '@rollup/rollup-linux-s390x-gnu': 4.34.7
- '@rollup/rollup-linux-x64-gnu': 4.34.7
- '@rollup/rollup-linux-x64-musl': 4.34.7
- '@rollup/rollup-win32-arm64-msvc': 4.34.7
- '@rollup/rollup-win32-ia32-msvc': 4.34.7
- '@rollup/rollup-win32-x64-msvc': 4.34.7
+ '@rollup/rollup-android-arm-eabi': 4.57.1
+ '@rollup/rollup-android-arm64': 4.57.1
+ '@rollup/rollup-darwin-arm64': 4.57.1
+ '@rollup/rollup-darwin-x64': 4.57.1
+ '@rollup/rollup-freebsd-arm64': 4.57.1
+ '@rollup/rollup-freebsd-x64': 4.57.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.57.1
+ '@rollup/rollup-linux-arm-musleabihf': 4.57.1
+ '@rollup/rollup-linux-arm64-gnu': 4.57.1
+ '@rollup/rollup-linux-arm64-musl': 4.57.1
+ '@rollup/rollup-linux-loong64-gnu': 4.57.1
+ '@rollup/rollup-linux-loong64-musl': 4.57.1
+ '@rollup/rollup-linux-ppc64-gnu': 4.57.1
+ '@rollup/rollup-linux-ppc64-musl': 4.57.1
+ '@rollup/rollup-linux-riscv64-gnu': 4.57.1
+ '@rollup/rollup-linux-riscv64-musl': 4.57.1
+ '@rollup/rollup-linux-s390x-gnu': 4.57.1
+ '@rollup/rollup-linux-x64-gnu': 4.57.1
+ '@rollup/rollup-linux-x64-musl': 4.57.1
+ '@rollup/rollup-openbsd-x64': 4.57.1
+ '@rollup/rollup-openharmony-arm64': 4.57.1
+ '@rollup/rollup-win32-arm64-msvc': 4.57.1
+ '@rollup/rollup-win32-ia32-msvc': 4.57.1
+ '@rollup/rollup-win32-x64-gnu': 4.57.1
+ '@rollup/rollup-win32-x64-msvc': 4.57.1
fsevents: 2.3.3
- run-parallel@1.2.0:
- dependencies:
- queue-microtask: 1.2.3
-
- safe-buffer@5.2.1: {}
-
- sax@1.4.1: {}
+ sax@1.4.4: {}
- semver@7.7.1: {}
-
- sharp@0.32.6:
- dependencies:
- color: 4.2.3
- detect-libc: 2.0.3
- node-addon-api: 6.1.0
- prebuild-install: 7.1.3
- semver: 7.7.1
- simple-get: 4.0.1
- tar-fs: 3.0.8
- tunnel-agent: 0.6.0
- transitivePeerDependencies:
- - bare-buffer
+ semver@7.7.3: {}
- sharp@0.33.5:
+ sharp@0.34.5:
dependencies:
- color: 4.2.3
- detect-libc: 2.0.3
- semver: 7.7.1
+ '@img/colour': 1.0.0
+ detect-libc: 2.1.2
+ semver: 7.7.3
optionalDependencies:
- '@img/sharp-darwin-arm64': 0.33.5
- '@img/sharp-darwin-x64': 0.33.5
- '@img/sharp-libvips-darwin-arm64': 1.0.4
- '@img/sharp-libvips-darwin-x64': 1.0.4
- '@img/sharp-libvips-linux-arm': 1.0.5
- '@img/sharp-libvips-linux-arm64': 1.0.4
- '@img/sharp-libvips-linux-s390x': 1.0.4
- '@img/sharp-libvips-linux-x64': 1.0.4
- '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
- '@img/sharp-libvips-linuxmusl-x64': 1.0.4
- '@img/sharp-linux-arm': 0.33.5
- '@img/sharp-linux-arm64': 0.33.5
- '@img/sharp-linux-s390x': 0.33.5
- '@img/sharp-linux-x64': 0.33.5
- '@img/sharp-linuxmusl-arm64': 0.33.5
- '@img/sharp-linuxmusl-x64': 0.33.5
- '@img/sharp-wasm32': 0.33.5
- '@img/sharp-win32-ia32': 0.33.5
- '@img/sharp-win32-x64': 0.33.5
- optional: true
-
- shiki@1.29.2:
- dependencies:
- '@shikijs/core': 1.29.2
- '@shikijs/engine-javascript': 1.29.2
- '@shikijs/engine-oniguruma': 1.29.2
- '@shikijs/langs': 1.29.2
- '@shikijs/themes': 1.29.2
- '@shikijs/types': 1.29.2
+ '@img/sharp-darwin-arm64': 0.34.5
+ '@img/sharp-darwin-x64': 0.34.5
+ '@img/sharp-libvips-darwin-arm64': 1.2.4
+ '@img/sharp-libvips-darwin-x64': 1.2.4
+ '@img/sharp-libvips-linux-arm': 1.2.4
+ '@img/sharp-libvips-linux-arm64': 1.2.4
+ '@img/sharp-libvips-linux-ppc64': 1.2.4
+ '@img/sharp-libvips-linux-riscv64': 1.2.4
+ '@img/sharp-libvips-linux-s390x': 1.2.4
+ '@img/sharp-libvips-linux-x64': 1.2.4
+ '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
+ '@img/sharp-libvips-linuxmusl-x64': 1.2.4
+ '@img/sharp-linux-arm': 0.34.5
+ '@img/sharp-linux-arm64': 0.34.5
+ '@img/sharp-linux-ppc64': 0.34.5
+ '@img/sharp-linux-riscv64': 0.34.5
+ '@img/sharp-linux-s390x': 0.34.5
+ '@img/sharp-linux-x64': 0.34.5
+ '@img/sharp-linuxmusl-arm64': 0.34.5
+ '@img/sharp-linuxmusl-x64': 0.34.5
+ '@img/sharp-wasm32': 0.34.5
+ '@img/sharp-win32-arm64': 0.34.5
+ '@img/sharp-win32-ia32': 0.34.5
+ '@img/sharp-win32-x64': 0.34.5
+
+ shiki@3.22.0:
+ dependencies:
+ '@shikijs/core': 3.22.0
+ '@shikijs/engine-javascript': 3.22.0
+ '@shikijs/engine-oniguruma': 3.22.0
+ '@shikijs/langs': 3.22.0
+ '@shikijs/themes': 3.22.0
+ '@shikijs/types': 3.22.0
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
- simple-concat@1.0.1: {}
-
- simple-get@4.0.1:
- dependencies:
- decompress-response: 6.0.0
- once: 1.4.0
- simple-concat: 1.0.1
-
- simple-swizzle@0.2.2:
- dependencies:
- is-arrayish: 0.3.2
-
sisteransi@1.0.5: {}
- sitemap@8.0.0:
+ sitemap@8.0.2:
dependencies:
'@types/node': 17.0.45
'@types/sax': 1.2.7
arg: 5.0.2
- sax: 1.4.1
+ sax: 1.4.4
+
+ smart-buffer@4.2.0: {}
+
+ smol-toml@1.6.0: {}
+
+ socks-proxy-agent@8.0.5:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ socks: 2.8.7
+ transitivePeerDependencies:
+ - supports-color
- smol-toml@1.3.1: {}
+ socks@2.8.7:
+ dependencies:
+ ip-address: 10.1.0
+ smart-buffer: 4.2.0
source-map-js@1.2.1: {}
- source-map@0.7.4: {}
+ source-map@0.6.1:
+ optional: true
+
+ source-map@0.7.6: {}
space-separated-tokens@2.0.2: {}
- sprintf-js@1.0.3: {}
+ starlight-kbd@0.3.0(@astrojs/starlight@0.37.5(astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2))):
+ dependencies:
+ '@astrojs/starlight': 0.37.5(astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2))
- starlight-links-validator@0.18.0(@astrojs/starlight@0.32.0(astro@5.3.0(rollup@4.34.7)(typescript@5.7.3)(yaml@2.7.0))):
+ starlight-links-validator@0.19.2(@astrojs/starlight@0.37.5(astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2)))(astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2)):
dependencies:
- '@astrojs/starlight': 0.32.0(astro@5.3.0(rollup@4.34.7)(typescript@5.7.3)(yaml@2.7.0))
+ '@astrojs/starlight': 0.37.5(astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2))
'@types/picomatch': 3.0.2
+ astro: 5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2)
github-slugger: 2.0.0
hast-util-from-html: 2.0.3
hast-util-has-property: 3.0.0
@@ -4284,20 +4691,32 @@ snapshots:
kleur: 4.1.5
mdast-util-mdx-jsx: 3.2.0
mdast-util-to-string: 4.0.0
- picomatch: 4.0.2
+ picomatch: 4.0.3
terminal-link: 5.0.0
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
transitivePeerDependencies:
- supports-color
+ starlight-scroll-to-top@0.4.0(@astrojs/starlight@0.37.5(astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2))):
+ dependencies:
+ '@astrojs/starlight': 0.37.5(astro@5.17.1(@types/node@25.1.0)(rollup@4.57.1)(typescript@5.7.3)(yaml@2.8.2))
+
+ starlight-to-pdf@1.4.0(puppeteer-autoscroll-down@2.0.1)(puppeteer@23.11.1(typescript@5.7.3)):
+ dependencies:
+ puppeteer: 23.11.1(typescript@5.7.3)
+ puppeteer-autoscroll-down: 2.0.1
+ yocto-spinner: 0.1.2
+
stream-replace-string@2.0.0: {}
- streamx@2.22.0:
+ streamx@2.23.0:
dependencies:
+ events-universal: 1.0.1
fast-fifo: 1.3.2
text-decoder: 1.2.3
- optionalDependencies:
- bare-events: 2.5.4
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
string-width@4.2.3:
dependencies:
@@ -4307,13 +4726,9 @@ snapshots:
string-width@7.2.0:
dependencies:
- emoji-regex: 10.4.0
- get-east-asian-width: 1.3.0
- strip-ansi: 7.1.0
-
- string_decoder@1.3.0:
- dependencies:
- safe-buffer: 5.2.1
+ emoji-regex: 10.6.0
+ get-east-asian-width: 1.4.0
+ strip-ansi: 7.1.2
stringify-entities@4.0.4:
dependencies:
@@ -4324,96 +4739,107 @@ snapshots:
dependencies:
ansi-regex: 5.0.1
- strip-ansi@7.1.0:
+ strip-ansi@7.1.2:
dependencies:
- ansi-regex: 6.1.0
-
- strip-bom@3.0.0: {}
+ ansi-regex: 6.2.2
- strip-json-comments@2.0.1: {}
+ style-to-js@1.1.21:
+ dependencies:
+ style-to-object: 1.0.14
- style-to-object@1.0.8:
+ style-to-object@1.0.14:
dependencies:
- inline-style-parser: 0.2.4
+ inline-style-parser: 0.2.7
supports-color@10.2.2: {}
- supports-hyperlinks@4.3.0:
+ supports-hyperlinks@4.4.0:
dependencies:
has-flag: 5.0.1
supports-color: 10.2.2
- tar-fs@2.1.2:
+ svgo@4.0.0:
dependencies:
- chownr: 1.1.4
- mkdirp-classic: 0.5.3
- pump: 3.0.2
- tar-stream: 2.2.0
+ commander: 11.1.0
+ css-select: 5.2.2
+ css-tree: 3.1.0
+ css-what: 6.2.2
+ csso: 5.0.5
+ picocolors: 1.1.1
+ sax: 1.4.4
- tar-fs@3.0.8:
+ tar-fs@3.1.1:
dependencies:
- pump: 3.0.2
+ pump: 3.0.3
tar-stream: 3.1.7
optionalDependencies:
- bare-fs: 4.0.1
+ bare-fs: 4.5.3
bare-path: 3.0.0
transitivePeerDependencies:
+ - bare-abort-controller
- bare-buffer
-
- tar-stream@2.2.0:
- dependencies:
- bl: 4.1.0
- end-of-stream: 1.4.4
- fs-constants: 1.0.0
- inherits: 2.0.4
- readable-stream: 3.6.2
+ - react-native-b4a
tar-stream@3.1.7:
dependencies:
- b4a: 1.6.7
+ b4a: 1.7.3
fast-fifo: 1.3.2
- streamx: 2.22.0
+ streamx: 2.23.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
terminal-link@5.0.0:
dependencies:
- ansi-escapes: 7.1.1
- supports-hyperlinks: 4.3.0
+ ansi-escapes: 7.2.0
+ supports-hyperlinks: 4.4.0
text-decoder@1.2.3:
dependencies:
- b4a: 1.6.7
+ b4a: 1.7.3
+ transitivePeerDependencies:
+ - react-native-b4a
- tinyexec@0.3.2: {}
+ through@2.3.8: {}
- to-regex-range@5.0.1:
+ tiny-inflate@1.0.3: {}
+
+ tinyexec@1.0.2: {}
+
+ tinyglobby@0.2.15:
dependencies:
- is-number: 7.0.0
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
trim-lines@3.0.1: {}
trough@2.2.0: {}
- tsconfck@3.1.5(typescript@5.7.3):
+ tsconfck@3.1.6(typescript@5.7.3):
optionalDependencies:
typescript: 5.7.3
- tslib@2.8.1:
- optional: true
+ tslib@2.8.1: {}
- tunnel-agent@0.6.0:
- dependencies:
- safe-buffer: 5.2.1
+ type-fest@4.41.0: {}
- type-fest@4.34.1: {}
+ typed-query-selector@2.12.0: {}
typescript@5.7.3: {}
- ufo@1.5.4: {}
+ ufo@1.6.3: {}
+
+ ultrahtml@1.6.0: {}
- ultrahtml@1.5.3: {}
+ unbzip2-stream@1.4.3:
+ dependencies:
+ buffer: 5.7.1
+ through: 2.3.8
uncrypto@0.1.3: {}
+ undici-types@7.16.0: {}
+
unified@11.0.5:
dependencies:
'@types/unist': 3.0.3
@@ -4424,12 +4850,18 @@ snapshots:
trough: 2.2.0
vfile: 6.0.3
+ unifont@0.7.3:
+ dependencies:
+ css-tree: 3.1.0
+ ofetch: 1.5.1
+ ohash: 2.0.11
+
unist-util-find-after@5.0.0:
dependencies:
'@types/unist': 3.0.3
- unist-util-is: 6.0.0
+ unist-util-is: 6.0.1
- unist-util-is@6.0.0:
+ unist-util-is@6.0.1:
dependencies:
'@types/unist': 3.0.3
@@ -4449,7 +4881,7 @@ snapshots:
unist-util-remove-position@5.0.0:
dependencies:
'@types/unist': 3.0.3
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
unist-util-stringify-position@4.0.0:
dependencies:
@@ -4459,27 +4891,27 @@ snapshots:
dependencies:
'@types/unist': 3.0.3
- unist-util-visit-parents@6.0.1:
+ unist-util-visit-parents@6.0.2:
dependencies:
'@types/unist': 3.0.3
- unist-util-is: 6.0.0
+ unist-util-is: 6.0.1
- unist-util-visit@5.0.0:
+ unist-util-visit@5.1.0:
dependencies:
'@types/unist': 3.0.3
- unist-util-is: 6.0.0
- unist-util-visit-parents: 6.0.1
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
- unstorage@1.14.4:
+ unstorage@1.17.4:
dependencies:
anymatch: 3.1.3
- chokidar: 3.6.0
- destr: 2.0.3
- h3: 1.15.0
- lru-cache: 10.4.3
- node-fetch-native: 1.6.6
- ofetch: 1.4.1
- ufo: 1.5.4
+ chokidar: 5.0.0
+ destr: 2.0.5
+ h3: 1.15.5
+ lru-cache: 11.2.5
+ node-fetch-native: 1.6.7
+ ofetch: 1.5.1
+ ufo: 1.6.3
util-deprecate@1.0.2: {}
@@ -4488,7 +4920,7 @@ snapshots:
'@types/unist': 3.0.3
vfile: 6.0.3
- vfile-message@4.0.2:
+ vfile-message@4.0.3:
dependencies:
'@types/unist': 3.0.3
unist-util-stringify-position: 4.0.0
@@ -4496,64 +4928,95 @@ snapshots:
vfile@6.0.3:
dependencies:
'@types/unist': 3.0.3
- vfile-message: 4.0.2
+ vfile-message: 4.0.3
- vite@6.1.0(yaml@2.7.0):
+ vite@6.4.1(@types/node@25.1.0)(yaml@2.8.2):
dependencies:
- esbuild: 0.24.2
- postcss: 8.5.2
- rollup: 4.34.7
+ esbuild: 0.25.12
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.57.1
+ tinyglobby: 0.2.15
optionalDependencies:
+ '@types/node': 25.1.0
fsevents: 2.3.3
- yaml: 2.7.0
+ yaml: 2.8.2
- vitefu@1.0.5(vite@6.1.0(yaml@2.7.0)):
+ vitefu@1.1.1(vite@6.4.1(@types/node@25.1.0)(yaml@2.8.2)):
optionalDependencies:
- vite: 6.1.0(yaml@2.7.0)
+ vite: 6.4.1(@types/node@25.1.0)(yaml@2.8.2)
web-namespaces@2.0.1: {}
which-pm-runs@1.1.0: {}
- which-pm@3.0.1:
- dependencies:
- load-yaml-file: 0.2.0
-
widest-line@5.0.0:
dependencies:
string-width: 7.2.0
- wrap-ansi@9.0.0:
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@9.0.2:
dependencies:
- ansi-styles: 6.2.1
+ ansi-styles: 6.2.3
string-width: 7.2.0
- strip-ansi: 7.1.0
+ strip-ansi: 7.1.2
wrappy@1.0.2: {}
+ ws@8.19.0: {}
+
xxhash-wasm@1.1.0: {}
- yaml@2.7.0: {}
+ y18n@5.0.8: {}
+
+ yaml@2.8.2: {}
yargs-parser@21.1.1: {}
- yocto-queue@1.1.1: {}
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ yauzl@2.10.0:
+ dependencies:
+ buffer-crc32: 0.2.13
+ fd-slicer: 1.1.0
+
+ yocto-queue@1.2.2: {}
+
+ yocto-spinner@0.1.2:
+ dependencies:
+ yoctocolors: 2.1.2
- yocto-spinner@0.2.0:
+ yocto-spinner@0.2.3:
dependencies:
- yoctocolors: 2.1.1
+ yoctocolors: 2.1.2
- yoctocolors@2.1.1: {}
+ yoctocolors@2.1.2: {}
- zod-to-json-schema@3.24.1(zod@3.24.2):
+ zod-to-json-schema@3.25.1(zod@3.25.76):
dependencies:
- zod: 3.24.2
+ zod: 3.25.76
- zod-to-ts@1.2.0(typescript@5.7.3)(zod@3.24.2):
+ zod-to-ts@1.2.0(typescript@5.7.3)(zod@3.25.76):
dependencies:
typescript: 5.7.3
- zod: 3.24.2
+ zod: 3.25.76
+
+ zod@3.23.8: {}
- zod@3.24.2: {}
+ zod@3.25.76: {}
zwitch@2.0.4: {}