From af7bba2900ef9017e1f4e01ea1ca2e7da45c6b73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A5=9E=E6=A5=BD=E5=9D=82=E3=82=A2=E3=82=A4=E3=83=AA?= =?UTF-8?q?=E3=82=B9?= Date: Tue, 27 May 2025 11:38:02 +0800 Subject: [PATCH 1/6] feat: add detailed instructions for creating and maintaining a blog, including protection for custom content --- README.md | 4 ++ README.zh.md | 5 +++ scripts/README-zh.md | 65 ++++++++++++++++++++++++++++++++ scripts/README.md | 66 ++++++++++++++++++++++++++++++++ scripts/git-protect.list | 4 ++ scripts/sync-upstream.sh | 81 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 225 insertions(+) create mode 100644 scripts/README-zh.md create mode 100644 scripts/README.md create mode 100644 scripts/git-protect.list create mode 100755 scripts/sync-upstream.sh diff --git a/README.md b/README.md index a0a4bc9..00198c5 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,10 @@ Retypeset is a static blog theme based on the [Astro](https://astro.build/) fram Retypeset releases [new features](https://github.com/radishzzz/astro-theme-retypeset/issues/18) from time to time. You can refer to the [GitHub Docs](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork) and run `Sync fork` in your repository to sync with the latest branch. Do not click `Discard Changes`, or you will lose your modifications. +For details on how to safely pull upstream changes **while preserving your custom content**, see: + +👉 [`scripts/README.md`](./scripts/README.md) + ## Credits - [Typography](https://github.com/moeyua/astro-theme-typography) diff --git a/README.zh.md b/README.zh.md index 7e7e590..9b2a47d 100644 --- a/README.zh.md +++ b/README.zh.md @@ -74,10 +74,15 @@ Retypeset 是一款基于 [Astro](https://astro.build/) 框架的静态博客主  [![Deploy to Netlify](images/deploy-netlify.svg)](https://app.netlify.com/start) [![Deploy to Vercel](images/deploy-vercel.svg)](https://vercel.com/new) + ## 更新 Retypeset 会不定期发布 [新功能](https://github.com/radishzzz/astro-theme-retypeset/issues/18)。你可以参考 [GitHub 文档](https://docs.github.com/zh/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork),在仓库中执行 `Sync fork` 以同步最新分支。不要点击 `Discard Changes`,否则会丢失你的更改。 +如需了解如何在**保留自定义内容的同时安全地拉取上游更新**,请参阅: + +👉 [`scripts/README.md`](./scripts/README.md) 文件 + ## 鸣谢 - [Typography](https://github.com/moeyua/astro-theme-typography) diff --git a/scripts/README-zh.md b/scripts/README-zh.md new file mode 100644 index 0000000..0af2a13 --- /dev/null +++ b/scripts/README-zh.md @@ -0,0 +1,65 @@ +## 🚀 基于本仓库创建并维护你自己的博客项目 + +本仓库为 [Astro](https://astro.build/) + [Retype](https://retype.com/) 构建的高颜值博客模板,支持一键部署和持续更新。以下是创建你自己的博客并与本模板保持同步的标准流程。 + +### ✅ 第一步:创建你自己的仓库 + +请**不要 Fork** 本仓库。 +相反,请点击 👉 [Use this template](https://github.com/radishzzz/astro-theme-retypeset) 创建一个新的仓库副本。 + +> 📌 原因说明:Fork 仓库将强制公开,并可能暴露你的私人配置(例如部署密钥、邮箱、API Token 等),不利于信息保护。 + +--- + +### ✏️ 第二步:保护你的自定义内容 + +你将在 `scripts/git-protect.list` 文件中声明需要保护的内容(如你撰写的文章、配置文件、页面自定义设置等)。 +这些文件在后续执行上游同步时会被自动备份和恢复,确保不会被覆盖。 + +--- + +### 🌐 第三步:开发并部署你的博客 + +* 根据项目目录结构撰写你的内容; +* 使用平台如 [Vercel](https://vercel.com/)、[Netlify](https://www.netlify.com/) 等部署站点; + +--- + +### 🔄 第四步:同步上游更新并保留本地定制 + +> 在你首次同步前,需添加上游远程地址(只需执行一次): + +```bash +git remote add upstream https://github.com/radishzzz/astro-theme-retypeset.git +``` + +之后每次同步只需在项目根目录执行以下命令: + +#### macOS / Linux / WSL / Git Bash(推荐): + +```bash +chmod u+x scripts/sync-upstream.sh +bash scripts/sync-upstream.sh upstream/master /tmp/blog-sync +``` + +#### Windows 用户注意: + +* **请使用 Git Bash** 执行上述命令; +* ❌ **不建议使用 cmd.exe 或 PowerShell**,以避免路径兼容与权限问题; +* 如需使用 Windows 运行脚本,推荐 Git Bash。 + +--- + +### 📎 常见问题 + +* **为什么不通过Github Actions 自动化处理?** + + 由于游仓库的活跃,无法保证合并不需要人工介入。 + +* **为何要保护文件?** + + 上游可能会变更主题逻辑、样式或结构。通过 `git-protect.list` 声明关键文件,可在合并更新时避免被覆盖。 + +* **我修改了主题结构,是否还能同步?** + + 可以。但需在同步前手动解决冲突,并确保 `git-protect.list` 保护的路径无误。 diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000..3f845d7 --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,66 @@ +## 🚀 Create and Maintain Your Own Blog Based on This Repository + +This repository provides a visually polished blog template built with [Astro](https://astro.build/) and [Retype](https://retype.com/), designed for seamless deployment and long-term maintenance. Follow the steps below to initialize your own blog and keep it in sync with future upstream updates. + +--- + +### ✅ Step 1: Create Your Own Repository + +**Do not fork this repository.** +Instead, click 👉 [Use this template](https://github.com/radishzzz/astro-theme-retypeset) to create a new repository based on this template. + +> 📌 **Why not fork?** +> Forked repositories are publicly visible by default, which may expose sensitive configuration data (e.g., deployment tokens, email addresses, API keys), posing a security risk. + +--- + +### ✏️ Step 2: Safeguard Your Custom Content + +Declare the files and directories you want to preserve in the `scripts/git-protect.list` file. +This includes your posts, configuration files, and site-specific settings. These items will be automatically backed up and restored during synchronization with the upstream repository, ensuring they are never overwritten. + +--- + +### 🌐 Step 3: Develop and Deploy Your Blog + +* Structure and write your content according to the project’s directory layout. +* Deploy the site using platforms such as [Vercel](https://vercel.com/) or [Netlify](https://www.netlify.com/). +* Continuous deployment via GitHub Actions is supported but optional. + +--- + +### 🔄 Step 4: Sync with Upstream While Preserving Local Customizations + +> Before the first synchronization, add the upstream remote (only required once): + +```bash +git remote add upstream https://github.com/radishzzz/astro-theme-retypeset.git +``` + +Then, run the sync script from the root directory of your repository: + +#### macOS / Linux / WSL / Git Bash (Recommended): + +```bash +chmod u+x scripts/sync-upstream.sh +bash scripts/sync-upstream.sh upstream/master /tmp/blog-sync +``` + +#### For Windows Users: + +* ✅ **Use Git Bash** to run the above commands; +* ❌ **Avoid using cmd.exe or PowerShell**, as they may cause compatibility issues with file paths; +* For best results, stick with Git Bash even on Windows. + +--- + +### 📎 Frequently Asked Questions + +* **Why not automate synchronization with GitHub Actions?** + Due to the active nature of this upstream repository, automatic merges are not guaranteed to be conflict-free. Manual review is often required. + +* **Why are certain files protected?** + Upstream updates may introduce structural or styling changes. Defining protected files in `git-protect.list` ensures your custom content is preserved during synchronization. + +* **Can I still sync if I’ve modified the theme structure?** + Yes, but you'll need to manually resolve conflicts before syncing. Make sure all critical paths are properly listed in `git-protect.list`. diff --git a/scripts/git-protect.list b/scripts/git-protect.list new file mode 100644 index 0000000..38aa70d --- /dev/null +++ b/scripts/git-protect.list @@ -0,0 +1,4 @@ +.cursor/ +src/config.ts +src/content/ +src/i18n/ui.ts \ No newline at end of file diff --git a/scripts/sync-upstream.sh b/scripts/sync-upstream.sh new file mode 100755 index 0000000..741f365 --- /dev/null +++ b/scripts/sync-upstream.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# filepath: sync-upstream.sh + +# 用法: ./sync-upstream.sh +# 示例: ./sync-upstream.sh upstream/main /tmp/astro-protect + +set -e + +########################### +# 配置区 +DEBUG=true # 设置为 true 启用调试输出 +PROTECT_LIST="scripts/git-protect.list" # 保护文件列表路径 +########################### + +UPSTREAM_BRANCH="$1" +TMP_DIR="$2" + +# 打印调试信息 +log_debug() { + if [[ "$DEBUG" == true ]]; then + echo -e "[DEBUG] $*" + fi +} + +if [[ -z "$UPSTREAM_BRANCH" || -z "$TMP_DIR" ]]; then + echo "用法: $0 " + exit 1 +fi + +if [[ ! -f "$PROTECT_LIST" ]]; then + echo "未找到 $PROTECT_LIST 文件" + exit 1 +fi + +log_debug "同步上游分支: $UPSTREAM_BRANCH" +log_debug "临时目录: $TMP_DIR" +log_debug "保护列表文件: $PROTECT_LIST" + +# 确保复制隐藏文件(如 .env) +shopt -s dotglob + +# 1. 备份需要保护的文件/文件夹 +mkdir -p "$TMP_DIR" +while IFS= read -r path || [[ -n "$path" ]]; do + [[ -z "$path" ]] && continue + [[ "${path:0:1}" == "#" ]] && continue + if [[ -e "$path" ]]; then + log_debug "备份: $path" + mkdir -p "$TMP_DIR/$(dirname "$path")" + cp -r "$path" "$TMP_DIR/$(dirname "$path")/" + else + log_debug "跳过不存在的路径: $path" + fi +done < "$PROTECT_LIST" + +# 2. 用上游分支内容覆盖本地 +log_debug "获取上游分支 ${UPSTREAM_BRANCH%%/*}" +git fetch "${UPSTREAM_BRANCH%%/*}" + +log_debug "从 $UPSTREAM_BRANCH 覆盖当前目录内容" +git checkout "$UPSTREAM_BRANCH" -- . + +# 3. 恢复保护的文件/文件夹 +while IFS= read -r path || [[ -n "$path" ]]; do + [[ -z "$path" ]] && continue + [[ "${path:0:1}" == "#" ]] && continue + if [[ -e "$TMP_DIR/$path" ]]; then + log_debug "恢复: $path" + rm -rf "$path" + mkdir -p "$(dirname "$path")" + cp -r "$TMP_DIR/$path" "$path" + else + log_debug "未找到备份,跳过: $path" + fi +done < "$PROTECT_LIST" + +# 4. 清理临时目录 +log_debug "删除临时目录: $TMP_DIR" +rm -rf "$TMP_DIR" + +echo "✅ 同步完成,已保留保护文件。请检查后 git add/commit/push。" From a039f1998a1ec10d5561ed3ca6d1b23439ed1cc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A5=9E=E6=A5=BD=E5=9D=82=E3=82=A2=E3=82=A4=E3=83=AA?= =?UTF-8?q?=E3=82=B9?= Date: Tue, 27 May 2025 11:38:45 +0800 Subject: [PATCH 2/6] fix: update example usage in sync-upstream.sh to reflect correct branch name --- scripts/sync-upstream.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync-upstream.sh b/scripts/sync-upstream.sh index 741f365..9122022 100755 --- a/scripts/sync-upstream.sh +++ b/scripts/sync-upstream.sh @@ -2,7 +2,7 @@ # filepath: sync-upstream.sh # 用法: ./sync-upstream.sh -# 示例: ./sync-upstream.sh upstream/main /tmp/astro-protect +# 示例: ./sync-upstream.sh upstream/master /tmp/astro-protect set -e From 5b30bc746651575039aba7b30afc943f736cfaeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A5=9E=E6=A5=BD=E5=9D=82=E3=82=A2=E3=82=A4=E3=83=AA?= =?UTF-8?q?=E3=82=B9?= Date: Tue, 27 May 2025 11:42:04 +0800 Subject: [PATCH 3/6] fix: translate sync-upstream.sh comments and usage instructions to English --- scripts/sync-upstream.sh | 49 ++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/scripts/sync-upstream.sh b/scripts/sync-upstream.sh index 9122022..42b46ac 100755 --- a/scripts/sync-upstream.sh +++ b/scripts/sync-upstream.sh @@ -1,81 +1,82 @@ #!/bin/bash # filepath: sync-upstream.sh -# 用法: ./sync-upstream.sh -# 示例: ./sync-upstream.sh upstream/master /tmp/astro-protect +# Usage: ./sync-upstream.sh +# Example: ./sync-upstream.sh upstream/master /tmp/astro-protect set -e ########################### -# 配置区 -DEBUG=true # 设置为 true 启用调试输出 -PROTECT_LIST="scripts/git-protect.list" # 保护文件列表路径 +# Configuration +DEBUG=true # Set to true to enable debug output +PROTECT_LIST="scripts/git-protect.list" # Path to the protected files list ########################### UPSTREAM_BRANCH="$1" TMP_DIR="$2" -# 打印调试信息 +# Debug output function log_debug() { if [[ "$DEBUG" == true ]]; then echo -e "[DEBUG] $*" fi } +# Validate arguments if [[ -z "$UPSTREAM_BRANCH" || -z "$TMP_DIR" ]]; then - echo "用法: $0 " + echo "Usage: $0 " exit 1 fi if [[ ! -f "$PROTECT_LIST" ]]; then - echo "未找到 $PROTECT_LIST 文件" + echo "File not found: $PROTECT_LIST" exit 1 fi -log_debug "同步上游分支: $UPSTREAM_BRANCH" -log_debug "临时目录: $TMP_DIR" -log_debug "保护列表文件: $PROTECT_LIST" +log_debug "Upstream branch: $UPSTREAM_BRANCH" +log_debug "Temporary directory: $TMP_DIR" +log_debug "Protection list file: $PROTECT_LIST" -# 确保复制隐藏文件(如 .env) +# Include hidden files (e.g., .env) shopt -s dotglob -# 1. 备份需要保护的文件/文件夹 +# Step 1: Back up protected files and directories mkdir -p "$TMP_DIR" while IFS= read -r path || [[ -n "$path" ]]; do [[ -z "$path" ]] && continue [[ "${path:0:1}" == "#" ]] && continue if [[ -e "$path" ]]; then - log_debug "备份: $path" + log_debug "Backing up: $path" mkdir -p "$TMP_DIR/$(dirname "$path")" cp -r "$path" "$TMP_DIR/$(dirname "$path")/" else - log_debug "跳过不存在的路径: $path" + log_debug "Skipping non-existent path: $path" fi done < "$PROTECT_LIST" -# 2. 用上游分支内容覆盖本地 -log_debug "获取上游分支 ${UPSTREAM_BRANCH%%/*}" +# Step 2: Fetch and apply upstream content +log_debug "Fetching from remote: ${UPSTREAM_BRANCH%%/*}" git fetch "${UPSTREAM_BRANCH%%/*}" -log_debug "从 $UPSTREAM_BRANCH 覆盖当前目录内容" +log_debug "Checking out from $UPSTREAM_BRANCH" git checkout "$UPSTREAM_BRANCH" -- . -# 3. 恢复保护的文件/文件夹 +# Step 3: Restore protected files while IFS= read -r path || [[ -n "$path" ]]; do [[ -z "$path" ]] && continue [[ "${path:0:1}" == "#" ]] && continue if [[ -e "$TMP_DIR/$path" ]]; then - log_debug "恢复: $path" + log_debug "Restoring: $path" rm -rf "$path" mkdir -p "$(dirname "$path")" cp -r "$TMP_DIR/$path" "$path" else - log_debug "未找到备份,跳过: $path" + log_debug "No backup found, skipping: $path" fi done < "$PROTECT_LIST" -# 4. 清理临时目录 -log_debug "删除临时目录: $TMP_DIR" +# Step 4: Clean up +log_debug "Removing temporary directory: $TMP_DIR" rm -rf "$TMP_DIR" -echo "✅ 同步完成,已保留保护文件。请检查后 git add/commit/push。" +echo "✅ Sync complete. Protected files have been restored. Please review and git add/commit/push." From 0afd5107fb41e912f8a24ce585320ef19abb540b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A5=9E=E6=A5=BD=E5=9D=82=E3=82=A2=E3=82=A4=E3=83=AA?= =?UTF-8?q?=E3=82=B9?= Date: Tue, 27 May 2025 11:45:10 +0800 Subject: [PATCH 4/6] fix: update link to the Chinese README in the instructions for pulling upstream updates --- README.zh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.zh.md b/README.zh.md index 9b2a47d..27ad8b6 100644 --- a/README.zh.md +++ b/README.zh.md @@ -81,7 +81,7 @@ Retypeset 会不定期发布 [新功能](https://github.com/radishzzz/astro-them 如需了解如何在**保留自定义内容的同时安全地拉取上游更新**,请参阅: -👉 [`scripts/README.md`](./scripts/README.md) 文件 +👉 [`scripts/README.md`](./scripts/README-zh.md) 文件 ## 鸣谢 From 886c9591838e0c6e4ef166c7d750e5b8da743e7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A5=9E=E6=A5=BD=E5=9D=82=E3=82=A2=E3=82=A4=E3=83=AA?= =?UTF-8?q?=E3=82=B9?= Date: Tue, 27 May 2025 12:00:40 +0800 Subject: [PATCH 5/6] fix: clarify instructions for running scripts on Windows, specifying path format --- scripts/README-zh.md | 2 +- scripts/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/README-zh.md b/scripts/README-zh.md index 0af2a13..cff8009 100644 --- a/scripts/README-zh.md +++ b/scripts/README-zh.md @@ -46,7 +46,7 @@ bash scripts/sync-upstream.sh upstream/master /tmp/blog-sync * **请使用 Git Bash** 执行上述命令; * ❌ **不建议使用 cmd.exe 或 PowerShell**,以避免路径兼容与权限问题; -* 如需使用 Windows 运行脚本,推荐 Git Bash。 +* 如需使用 Windows 运行脚本,推荐 Git Bash。路径参数使用 `/c/...` 格式,避免 Windows 风格路径。 --- diff --git a/scripts/README.md b/scripts/README.md index 3f845d7..fc86261 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -50,7 +50,7 @@ bash scripts/sync-upstream.sh upstream/master /tmp/blog-sync * ✅ **Use Git Bash** to run the above commands; * ❌ **Avoid using cmd.exe or PowerShell**, as they may cause compatibility issues with file paths; -* For best results, stick with Git Bash even on Windows. +* For best results, stick with Git Bash even on Windows.Use the `/c/...` format for path arguments and avoid Windows-style paths. --- From 2f80ab9523efad2f15e028c737ff2574e25580bd Mon Sep 17 00:00:00 2001 From: radishzzz Date: Wed, 28 May 2025 20:41:08 +0100 Subject: [PATCH 6/6] =?UTF-8?q?=E2=9C=A8=20feat:=20add=20new=20post=20crea?= =?UTF-8?q?tion=20script=20and=20theme=20update=20script,=20remove=20git-p?= =?UTF-8?q?rotect.list=20and=20sync-upstream.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Deleted `README-zh.md` and `README.md` as they are no longer needed. - Removed `git-protect.list` to streamline the synchronization process. - Introduced `new-post.ts` script for easier blog post creation with default metadata. - Added `update-theme.ts` script to simplify theme updates from the upstream repository. - Updated content configuration to handle optional updated dates correctly. - Adjusted pin values in theme guide documents to allow a range from 0-99 instead of 1-99. --- README.md | 4 - README.zh.md | 5 - package.json | 11 +- pnpm-lock.yaml | 721 ++++++++++-------- scripts/README-zh.md | 65 -- scripts/README.md | 66 -- scripts/git-protect.list | 4 - scripts/new-post.ts | 60 ++ scripts/sync-upstream.sh | 82 -- scripts/update-theme.ts | 32 + src/content.config.ts | 5 +- src/content/posts/guides/Theme Guide-en.md | 2 +- src/content/posts/guides/Theme Guide-es.md | 2 +- src/content/posts/guides/Theme Guide-ja.md | 2 +- src/content/posts/guides/Theme Guide-ru.md | 2 +- src/content/posts/guides/Theme Guide-zh-tw.md | 2 +- src/content/posts/guides/Theme Guide-zh.md | 2 +- 17 files changed, 494 insertions(+), 573 deletions(-) delete mode 100644 scripts/README-zh.md delete mode 100644 scripts/README.md delete mode 100644 scripts/git-protect.list create mode 100644 scripts/new-post.ts delete mode 100755 scripts/sync-upstream.sh create mode 100755 scripts/update-theme.ts diff --git a/README.md b/README.md index 00198c5..a0a4bc9 100644 --- a/README.md +++ b/README.md @@ -78,10 +78,6 @@ Retypeset is a static blog theme based on the [Astro](https://astro.build/) fram Retypeset releases [new features](https://github.com/radishzzz/astro-theme-retypeset/issues/18) from time to time. You can refer to the [GitHub Docs](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork) and run `Sync fork` in your repository to sync with the latest branch. Do not click `Discard Changes`, or you will lose your modifications. -For details on how to safely pull upstream changes **while preserving your custom content**, see: - -👉 [`scripts/README.md`](./scripts/README.md) - ## Credits - [Typography](https://github.com/moeyua/astro-theme-typography) diff --git a/README.zh.md b/README.zh.md index 27ad8b6..7e7e590 100644 --- a/README.zh.md +++ b/README.zh.md @@ -74,15 +74,10 @@ Retypeset 是一款基于 [Astro](https://astro.build/) 框架的静态博客主  [![Deploy to Netlify](images/deploy-netlify.svg)](https://app.netlify.com/start) [![Deploy to Vercel](images/deploy-vercel.svg)](https://vercel.com/new) - ## 更新 Retypeset 会不定期发布 [新功能](https://github.com/radishzzz/astro-theme-retypeset/issues/18)。你可以参考 [GitHub 文档](https://docs.github.com/zh/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork),在仓库中执行 `Sync fork` 以同步最新分支。不要点击 `Discard Changes`,否则会丢失你的更改。 -如需了解如何在**保留自定义内容的同时安全地拉取上游更新**,请参阅: - -👉 [`scripts/README.md`](./scripts/README-zh.md) 文件 - ## 鸣谢 - [Typography](https://github.com/moeyua/astro-theme-typography) diff --git a/package.json b/package.json index a8ccc8c..70e12ce 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,9 @@ "astro": "astro", "lint": "eslint .", "lint:fix": "eslint . --fix", - "comments": "curl -L https://unpkg.com/@waline/client@latest/dist/waline.css -o public/assets/waline/waline.css && curl -L https://unpkg.com/@waline/client@latest/dist/waline.js -o public/assets/waline/waline.js" + "comments": "curl -L https://unpkg.com/@waline/client@latest/dist/waline.css -o public/assets/waline/waline.css && curl -L https://unpkg.com/@waline/client@latest/dist/waline.js -o public/assets/waline/waline.js", + "update-theme": "esno scripts/update-theme.ts", + "new-post": "esno scripts/new-post.ts" }, "dependencies": { "@astrojs/mdx": "^4.3.0", @@ -22,7 +24,7 @@ "astro-og-canvas": "^0.7.0", "astro-robots-txt": "^1.0.0", "canvaskit-wasm": "^0.40.0", - "feed": "^5.0.1", + "feed": "^5.1.0", "gsap": "^3.13.0", "katex": "^0.16.22", "markdown-it": "^14.1.0", @@ -45,7 +47,7 @@ "@astrojs/check": "^0.9.4", "@types/hast": "^3.0.4", "@types/markdown-it": "^14.1.2", - "@types/node": "^22.15.21", + "@types/node": "^22.15.24", "@types/sanitize-html": "^2.16.0", "@unocss/eslint-plugin": "66.1.2", "@unocss/preset-attributify": "66.1.2", @@ -53,7 +55,8 @@ "astro-eslint-parser": "^1.2.2", "eslint": "^9.27.0", "eslint-plugin-astro": "^1.3.1", - "lint-staged": "^16.0.0", + "esno": "^4.8.0", + "lint-staged": "^16.1.0", "typescript": "~5.8.3", "unocss": "66.1.2", "unocss-preset-theme": "^0.14.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9f550e5..7ca6380 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@astrojs/mdx': specifier: ^4.3.0 - version: 4.3.0(astro@5.8.0(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.0)) + version: 4.3.0(astro@5.8.0(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.8.0)) '@astrojs/partytown': specifier: ^2.1.4 version: 2.1.4 @@ -19,13 +19,13 @@ importers: version: 3.4.0 astro: specifier: ^5.8.0 - version: 5.8.0(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.0) + version: 5.8.0(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.8.0) astro-compress: specifier: ^2.3.8 - version: 2.3.8(@types/node@22.15.21)(jiti@2.4.2)(rollup@4.41.1)(typescript@5.8.3)(yaml@2.8.0) + version: 2.3.8(@types/node@22.15.24)(jiti@2.4.2)(rollup@4.41.1)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.8.0) astro-og-canvas: specifier: ^0.7.0 - version: 0.7.0(astro@5.8.0(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.0)) + version: 0.7.0(astro@5.8.0(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.8.0)) astro-robots-txt: specifier: ^1.0.0 version: 1.0.0 @@ -33,8 +33,8 @@ importers: specifier: ^0.40.0 version: 0.40.0 feed: - specifier: ^5.0.1 - version: 5.0.1 + specifier: ^5.1.0 + version: 5.1.0 gsap: specifier: ^3.13.0 version: 3.13.0 @@ -86,7 +86,7 @@ importers: devDependencies: '@antfu/eslint-config': specifier: ^4.13.2 - version: 4.13.2(@unocss/eslint-plugin@66.1.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(@vue/compiler-sfc@3.5.14)(astro-eslint-parser@1.2.2)(eslint-plugin-astro@1.3.1(eslint@9.27.0(jiti@2.4.2)))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0)) + version: 4.13.2(@unocss/eslint-plugin@66.1.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(@vue/compiler-sfc@3.5.14)(astro-eslint-parser@1.2.2)(eslint-plugin-astro@1.3.1(eslint@9.27.0(jiti@2.4.2)))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) '@astrojs/check': specifier: ^0.9.4 version: 0.9.4(typescript@5.8.3) @@ -97,8 +97,8 @@ importers: specifier: ^14.1.2 version: 14.1.2 '@types/node': - specifier: ^22.15.21 - version: 22.15.21 + specifier: ^22.15.24 + version: 22.15.24 '@types/sanitize-html': specifier: ^2.16.0 version: 2.16.0 @@ -120,15 +120,18 @@ importers: eslint-plugin-astro: specifier: ^1.3.1 version: 1.3.1(eslint@9.27.0(jiti@2.4.2)) + esno: + specifier: ^4.8.0 + version: 4.8.0 lint-staged: - specifier: ^16.0.0 - version: 16.0.0 + specifier: ^16.1.0 + version: 16.1.0 typescript: specifier: ~5.8.3 version: 5.8.3 unocss: specifier: 66.1.2 - version: 66.1.2(postcss@8.5.3)(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.14(typescript@5.8.3)) + version: 66.1.2(postcss@8.5.3)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vue@3.5.14(typescript@5.8.3)) unocss-preset-theme: specifier: ^0.14.1 version: 0.14.1(@unocss/core@66.1.2) @@ -252,13 +255,13 @@ packages: resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} - '@babel/parser@7.27.2': - resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==} + '@babel/parser@7.27.3': + resolution: {integrity: sha512-xyYxRj6+tLNDTWi0KCBcZ9V7yg3/lwL9DWh9Uwh/RIVlIfFidggcgxKX3GCXwCiswwcGRawBKbEg2LG/Y8eJhw==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/types@7.27.1': - resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} + '@babel/types@7.27.3': + resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==} engines: {node: '>=6.9.0'} '@capsizecss/unpack@2.4.0': @@ -304,152 +307,152 @@ packages: resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==} engines: {node: '>=18'} - '@esbuild/aix-ppc64@0.25.4': - resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} + '@esbuild/aix-ppc64@0.25.5': + resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.4': - resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} + '@esbuild/android-arm64@0.25.5': + resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.4': - resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} + '@esbuild/android-arm@0.25.5': + resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.4': - resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} + '@esbuild/android-x64@0.25.5': + resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.4': - resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} + '@esbuild/darwin-arm64@0.25.5': + resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.4': - resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} + '@esbuild/darwin-x64@0.25.5': + resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.4': - resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} + '@esbuild/freebsd-arm64@0.25.5': + resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.4': - resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} + '@esbuild/freebsd-x64@0.25.5': + resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.4': - resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} + '@esbuild/linux-arm64@0.25.5': + resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.4': - resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} + '@esbuild/linux-arm@0.25.5': + resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.4': - resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} + '@esbuild/linux-ia32@0.25.5': + resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.4': - resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} + '@esbuild/linux-loong64@0.25.5': + resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.4': - resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} + '@esbuild/linux-mips64el@0.25.5': + resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.4': - resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} + '@esbuild/linux-ppc64@0.25.5': + resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.4': - resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} + '@esbuild/linux-riscv64@0.25.5': + resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.4': - resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} + '@esbuild/linux-s390x@0.25.5': + resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.4': - resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} + '@esbuild/linux-x64@0.25.5': + resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.4': - resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} + '@esbuild/netbsd-arm64@0.25.5': + resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.4': - resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} + '@esbuild/netbsd-x64@0.25.5': + resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.4': - resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} + '@esbuild/openbsd-arm64@0.25.5': + resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.4': - resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} + '@esbuild/openbsd-x64@0.25.5': + resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.25.4': - resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} + '@esbuild/sunos-x64@0.25.5': + resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.4': - resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} + '@esbuild/win32-arm64@0.25.5': + resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.4': - resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} + '@esbuild/win32-ia32@0.25.5': + resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.4': - resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} + '@esbuild/win32-x64@0.25.5': + resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -1038,8 +1041,8 @@ packages: '@types/node@22.13.14': resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==} - '@types/node@22.15.21': - resolution: {integrity: sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==} + '@types/node@22.15.24': + resolution: {integrity: sha512-w9CZGm9RDjzTh/D+hFwlBJ3ziUaVw7oufKA3vOFSOZlzmW9AkZnfjPb+DLnrV6qtgL/LNmP0/2zBNCFHL3F0ng==} '@types/sanitize-html@2.16.0': resolution: {integrity: sha512-l6rX1MUXje5ztPT0cAFtUayXF06DqPhRyfVXareEN5gGCFaP/iwsxIyKODr9XDhfxPpN6vXUFNfo5kZMXCxBtw==} @@ -1053,55 +1056,61 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@8.32.1': - resolution: {integrity: sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==} + '@typescript-eslint/eslint-plugin@8.33.0': + resolution: {integrity: sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + '@typescript-eslint/parser': ^8.33.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.32.1': - resolution: {integrity: sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==} + '@typescript-eslint/parser@8.33.0': + resolution: {integrity: sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.32.1': - resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==} + '@typescript-eslint/project-service@8.33.0': + resolution: {integrity: sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.32.1': - resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==} + '@typescript-eslint/scope-manager@8.33.0': + resolution: {integrity: sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.33.0': + resolution: {integrity: sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/type-utils@8.33.0': + resolution: {integrity: sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.32.1': - resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.33.0': resolution: {integrity: sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.32.1': - resolution: {integrity: sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==} + '@typescript-eslint/typescript-estree@8.33.0': + resolution: {integrity: sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.32.1': - resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==} + '@typescript-eslint/utils@8.33.0': + resolution: {integrity: sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.32.1': - resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==} + '@typescript-eslint/visitor-keys@8.33.0': + resolution: {integrity: sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -1204,88 +1213,88 @@ packages: peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 - '@unrs/resolver-binding-darwin-arm64@1.7.2': - resolution: {integrity: sha512-vxtBno4xvowwNmO/ASL0Y45TpHqmNkAaDtz4Jqb+clmcVSSl8XCG/PNFFkGsXXXS6AMjP+ja/TtNCFFa1QwLRg==} + '@unrs/resolver-binding-darwin-arm64@1.7.6': + resolution: {integrity: sha512-dDhh//8GrF4PynBubCUvnJ/mG2LStUEiaWqML4SAhz2iZvG769d6e25MoJBamDR251FBT3ULpXGJ7Mdnysp27w==} cpu: [arm64] os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.7.2': - resolution: {integrity: sha512-qhVa8ozu92C23Hsmv0BF4+5Dyyd5STT1FolV4whNgbY6mj3kA0qsrGPe35zNR3wAN7eFict3s4Rc2dDTPBTuFQ==} + '@unrs/resolver-binding-darwin-x64@1.7.6': + resolution: {integrity: sha512-u1Avp0HPAulQHMwgBJaHXIcao0LWwxF5/pd3H7DhldIFd2o3B2xVjXiqslSRpARL2b0QRdAdUf8+IAy6RlrvgQ==} cpu: [x64] os: [darwin] - '@unrs/resolver-binding-freebsd-x64@1.7.2': - resolution: {integrity: sha512-zKKdm2uMXqLFX6Ac7K5ElnnG5VIXbDlFWzg4WJ8CGUedJryM5A3cTgHuGMw1+P5ziV8CRhnSEgOnurTI4vpHpg==} + '@unrs/resolver-binding-freebsd-x64@1.7.6': + resolution: {integrity: sha512-nnjHghvIxEWvym6+ToAVmiXO11c+25p1E7CAQa/1uJTjcRhJTpEUKNbEWGO9tsxxIpBv1dfXaOA3gsJz5eBAjg==} cpu: [x64] os: [freebsd] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.2': - resolution: {integrity: sha512-8N1z1TbPnHH+iDS/42GJ0bMPLiGK+cUqOhNbMKtWJ4oFGzqSJk/zoXFzcQkgtI63qMcUI7wW1tq2usZQSb2jxw==} + '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.6': + resolution: {integrity: sha512-96y5xFahjyUwk1om2FRVkzXHTtgmi+6MUO9iMhyb/W/9v05z1wawgj7v4j9TPwXo/f10cDKty4Aao3Fufcu2Cg==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.2': - resolution: {integrity: sha512-tjYzI9LcAXR9MYd9rO45m1s0B/6bJNuZ6jeOxo1pq1K6OBuRMMmfyvJYval3s9FPPGmrldYA3mi4gWDlWuTFGA==} + '@unrs/resolver-binding-linux-arm-musleabihf@1.7.6': + resolution: {integrity: sha512-tyHD5mKRZpHPVg13a16a0X8wJ6Avtfecqg1gMlGB/MXOlvrJJ6EKzdWyUPi5GZUtT+JWV/NVTPLvvC/Hzxo3aw==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm64-gnu@1.7.2': - resolution: {integrity: sha512-jon9M7DKRLGZ9VYSkFMflvNqu9hDtOCEnO2QAryFWgT6o6AXU8du56V7YqnaLKr6rAbZBWYsYpikF226v423QA==} + '@unrs/resolver-binding-linux-arm64-gnu@1.7.6': + resolution: {integrity: sha512-rVHWGBVbhBrWYQl0y8sObTkCqSXtLAa8srG1u21S/IPGciOP0Djq7ykih5TeUtj0nAktANsiK2g/ST8UPhfbiA==} cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-arm64-musl@1.7.2': - resolution: {integrity: sha512-c8Cg4/h+kQ63pL43wBNaVMmOjXI/X62wQmru51qjfTvI7kmCy5uHTJvK/9LrF0G8Jdx8r34d019P1DVJmhXQpA==} + '@unrs/resolver-binding-linux-arm64-musl@1.7.6': + resolution: {integrity: sha512-6a7res5yz781YPZCkilDf34cQyNOCaHTGiUR8Z5U+hlrOChGPaciz4IpUpO1x2BWiBvbyIC9Janh/ujel9bo3g==} cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.2': - resolution: {integrity: sha512-A+lcwRFyrjeJmv3JJvhz5NbcCkLQL6Mk16kHTNm6/aGNc4FwPHPE4DR9DwuCvCnVHvF5IAd9U4VIs/VvVir5lg==} + '@unrs/resolver-binding-linux-ppc64-gnu@1.7.6': + resolution: {integrity: sha512-MtejOT0dfnupO9Tja6GtakFCe1FA7yY3tv6JM+oCFpChSCfJ/G87305AJyC0WZvdOUnPFh6hIMRpEjZAWxssyw==} cpu: [ppc64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.2': - resolution: {integrity: sha512-hQQ4TJQrSQW8JlPm7tRpXN8OCNP9ez7PajJNjRD1ZTHQAy685OYqPrKjfaMw/8LiHCt8AZ74rfUVHP9vn0N69Q==} + '@unrs/resolver-binding-linux-riscv64-gnu@1.7.6': + resolution: {integrity: sha512-urwxUzOqU7KKZs5KyTTFZIztzpNBHmxgO24nxaaD8lhESzC1ng1zq+gP7CKHZmQF2t3NMTdcnrXc86XYXZcBwQ==} cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-musl@1.7.2': - resolution: {integrity: sha512-NoAGbiqrxtY8kVooZ24i70CjLDlUFI7nDj3I9y54U94p+3kPxwd2L692YsdLa+cqQ0VoqMWoehDFp21PKRUoIQ==} + '@unrs/resolver-binding-linux-riscv64-musl@1.7.6': + resolution: {integrity: sha512-uqKOYPHRs+XUvq1+7ydgv6V42pMpzSJyuV6Y/R5FJUUuV2gJ54xhR+e5NqqS7WvWHZTDZ895P1fXejoooUfWgw==} cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-s390x-gnu@1.7.2': - resolution: {integrity: sha512-KaZByo8xuQZbUhhreBTW+yUnOIHUsv04P8lKjQ5otiGoSJ17ISGYArc+4vKdLEpGaLbemGzr4ZeUbYQQsLWFjA==} + '@unrs/resolver-binding-linux-s390x-gnu@1.7.6': + resolution: {integrity: sha512-WAjhxt3hypzJf5vk2Zut/ebvuXYEOFTi45SqqkoShU9p40IEeYM2AoKC6NNo3/5CIFxR5iaIHOetlJF+iWAMIQ==} cpu: [s390x] os: [linux] - '@unrs/resolver-binding-linux-x64-gnu@1.7.2': - resolution: {integrity: sha512-dEidzJDubxxhUCBJ/SHSMJD/9q7JkyfBMT77Px1npl4xpg9t0POLvnWywSk66BgZS/b2Hy9Y1yFaoMTFJUe9yg==} + '@unrs/resolver-binding-linux-x64-gnu@1.7.6': + resolution: {integrity: sha512-qsuxl8zUdwWXUlMa8zUAnonye/j+2k3QfcSXkW9bAZ0BcMLDZ/7uqXsAmk+7fP1gzv57AhCDpOcFSIsP4eSPEA==} cpu: [x64] os: [linux] - '@unrs/resolver-binding-linux-x64-musl@1.7.2': - resolution: {integrity: sha512-RvP+Ux3wDjmnZDT4XWFfNBRVG0fMsc+yVzNFUqOflnDfZ9OYujv6nkh+GOr+watwrW4wdp6ASfG/e7bkDradsw==} + '@unrs/resolver-binding-linux-x64-musl@1.7.6': + resolution: {integrity: sha512-5xg1/XpaJP6y5t4gAIHO6LVvd3xpkWXMBWk1lEUjh9oXfkxY9uoEd6gYJ5zj1dhiGy8uc//TG80Gnu3bqE4gsg==} cpu: [x64] os: [linux] - '@unrs/resolver-binding-wasm32-wasi@1.7.2': - resolution: {integrity: sha512-y797JBmO9IsvXVRCKDXOxjyAE4+CcZpla2GSoBQ33TVb3ILXuFnMrbR/QQZoauBYeOFuu4w3ifWLw52sdHGz6g==} + '@unrs/resolver-binding-wasm32-wasi@1.7.6': + resolution: {integrity: sha512-s5QPe0XWHDY0rb+ywbwGqZ24WH1fLpSeakM+M+up58My5T2LsScoJpqN60KgaYRJpumabqcAcczL/2LEWL6bQA==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@unrs/resolver-binding-win32-arm64-msvc@1.7.2': - resolution: {integrity: sha512-gtYTh4/VREVSLA+gHrfbWxaMO/00y+34htY7XpioBTy56YN2eBjkPrY1ML1Zys89X3RJDKVaogzwxlM1qU7egg==} + '@unrs/resolver-binding-win32-arm64-msvc@1.7.6': + resolution: {integrity: sha512-lzYMuug2XyxY+Ptw0LA5sNmF3WY+IefI1IMtws3y3G0EkYnqidhEi2+7eqtEiYAxPNo9VerQNfXKJd3bIuntPQ==} cpu: [arm64] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.7.2': - resolution: {integrity: sha512-Ywv20XHvHTDRQs12jd3MY8X5C8KLjDbg/jyaal/QLKx3fAShhJyD4blEANInsjxW3P7isHx1Blt56iUDDJO3jg==} + '@unrs/resolver-binding-win32-ia32-msvc@1.7.6': + resolution: {integrity: sha512-ysjUtTmUsgFMZqkMovWBr43izkC0kQPbW8V1Ln70FSAE7cVHCVf7PxIfllgQwLjjsYKKOVuq7iWe8G9mJlCk4A==} cpu: [ia32] os: [win32] - '@unrs/resolver-binding-win32-x64-msvc@1.7.2': - resolution: {integrity: sha512-friS8NEQfHaDbkThxopGk+LuE5v3iY0StruifjQEt7SLbA46OnfgMO15sOTkbpJkol6RB+1l1TYPXh0sCddpvA==} + '@unrs/resolver-binding-win32-x64-msvc@1.7.6': + resolution: {integrity: sha512-/1kM+r9G86s0ZLk2ej0MuU3hJQGmnawAA1JPIhcVMkZCtxK/pJzNtzPms3vDwVxbbwho6ExRcVLoA4h0zwzVmA==} cpu: [x64] os: [win32] @@ -1430,8 +1439,8 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - ansis@4.0.0: - resolution: {integrity: sha512-P8nrHI1EyW9OfBt1X7hMSwGN2vwRuqHSKJAT1gbLWZRzDa24oHjYwGHvEgHeBepupzk878yS/HBZ0NMPYtbolw==} + ansis@4.1.0: + resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==} engines: {node: '>=14'} anymatch@3.1.3: @@ -1675,6 +1684,10 @@ packages: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} + commander@14.0.0: + resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} + engines: {node: '>=20'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -1853,8 +1866,8 @@ packages: duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - electron-to-chromium@1.5.157: - resolution: {integrity: sha512-/0ybgsQd1muo8QlnuTpKwtl0oX5YMlUGbm8xyqgDU00motRkKFFbUJySAQBWcY79rVqNLWIWa87BGVGClwAB2w==} + electron-to-chromium@1.5.159: + resolution: {integrity: sha512-CEvHptWAMV5p6GJ0Lq8aheyvVbfzVrv5mmidu1D3pidoVNkB3tTBsTMVtPJ+rzRK5oV229mCLz9Zj/hNvU8GBA==} emmet@2.4.11: resolution: {integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==} @@ -1890,8 +1903,8 @@ packages: esast-util-from-js@2.0.1: resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} - esbuild@0.25.4: - resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} + esbuild@0.25.5: + resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} engines: {node: '>=18'} hasBin: true @@ -1931,8 +1944,8 @@ packages: eslint-flat-config-utils@2.1.0: resolution: {integrity: sha512-6fjOJ9tS0k28ketkUcQ+kKptB4dBZY2VijMZ9rGn8Cwnn1SH0cZBoPXT8AHBFHxmHcLFQK9zbELDinZ2Mr1rng==} - eslint-import-context@0.1.5: - resolution: {integrity: sha512-jalO1mLiEvTv0io0koz1AE4LwkHQxDBFLaSXWweWtJR0y/NC1yyxvU61Z54bghIFNeM1M4TvwRwVRhLunQJ3gw==} + eslint-import-context@0.1.6: + resolution: {integrity: sha512-/e2ZNPDLCrU8niIy0pddcvXuoO2YrKjf3NAIX+60mHJBT4yv7mqCqvVdyCW2E720e25e4S/1OSVef4U6efGLFg==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} peerDependencies: unrs-resolver: ^1.0.0 @@ -2088,6 +2101,10 @@ packages: jiti: optional: true + esno@4.8.0: + resolution: {integrity: sha512-acMtooReAQGzLU0zcuEDHa8S62meh5aIyi8jboYxyvAePdmuWx2Mpwmt0xjwO0bs9/SXf+dvXJ0QJoDWw814Iw==} + hasBin: true + espree@10.3.0: resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2171,16 +2188,16 @@ packages: fault@2.0.1: resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} - fdir@6.4.4: - resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} + fdir@6.4.5: + resolution: {integrity: sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: picomatch: optional: true - feed@5.0.1: - resolution: {integrity: sha512-kOveKLHucVZ6RI91bdWAts9O0L1N2mGzRGVCDQPRnHh4HmgqLdN66Cp/5dMeJZGn/qnBslWliwX37FEBq8DCIA==} + feed@5.1.0: + resolution: {integrity: sha512-qGNhgYygnefSkAHHrNHqC7p3R8J0/xQDS/cYUud8er/qD9EFGWyCdUDfULHTJQN1d3H3WprzVwMc9MfB4J50Wg==} engines: {node: '>=20', pnpm: '>=10'} file-entry-cache@8.0.0: @@ -2605,9 +2622,9 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - lint-staged@16.0.0: - resolution: {integrity: sha512-sUCprePs6/rbx4vKC60Hez6X10HPkpDJaGcy3D1NdwR7g1RcNkWL8q9mJMreOqmHBTs+1sNFp+wOiX9fr+hoOQ==} - engines: {node: '>=20.18'} + lint-staged@16.1.0: + resolution: {integrity: sha512-HkpQh69XHxgCjObjejBT3s2ILwNjFx8M3nw+tJ/ssBauDlIpkx2RpqWSi1fBgkXLSSXnbR3iEq1NkVtpvV+FLQ==} + engines: {node: '>=20.17'} hasBin: true listr2@8.3.3: @@ -3539,6 +3556,11 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsx@4.19.4: + resolution: {integrity: sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==} + engines: {node: '>=18.0.0'} + hasBin: true + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -3642,8 +3664,8 @@ packages: resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==} engines: {node: '>=18.12.0'} - unrs-resolver@1.7.2: - resolution: {integrity: sha512-BBKpaylOW8KbHsu378Zky/dGh4ckT/4NW/0SHRABdqRLcQJ2dAOjDo9g97p04sWflm0kqPqpUatxReNV/dqI5A==} + unrs-resolver@1.7.6: + resolution: {integrity: sha512-72mW/4N9ajUM3Pnw2CLFcsollrsfUuPl+/OW+AJsgmp5rnw7KuCre6I4EtoVBYrOy3DbVXnR33bL+Pfbdbek2Q==} unstorage@1.16.0: resolution: {integrity: sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA==} @@ -4041,8 +4063,8 @@ packages: typescript: ^4.9.4 || ^5.0.2 zod: ^3 - zod@3.25.28: - resolution: {integrity: sha512-/nt/67WYKnr5by3YS7LroZJbtcCBurDKKPBPWWzaxvVCGuG/NOsiKkrjoOhI8mJ+SQUXEbUzeB3S+6XDUEEj7Q==} + zod@3.25.32: + resolution: {integrity: sha512-OSm2xTIRfW8CV5/QKgngwmQW/8aPfGdaQFlrGoErlgg/Epm7cjb6K6VEyExfe65a3VybUOnu381edLb0dfJl0g==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -4054,17 +4076,17 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@antfu/eslint-config@4.13.2(@unocss/eslint-plugin@66.1.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(@vue/compiler-sfc@3.5.14)(astro-eslint-parser@1.2.2)(eslint-plugin-astro@1.3.1(eslint@9.27.0(jiti@2.4.2)))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0))': + '@antfu/eslint-config@4.13.2(@unocss/eslint-plugin@66.1.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(@vue/compiler-sfc@3.5.14)(astro-eslint-parser@1.2.2)(eslint-plugin-astro@1.3.1(eslint@9.27.0(jiti@2.4.2)))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))': dependencies: '@antfu/install-pkg': 1.1.0 '@clack/prompts': 0.10.1 '@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.27.0(jiti@2.4.2)) '@eslint/markdown': 6.4.0 '@stylistic/eslint-plugin': 4.4.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@vitest/eslint-plugin': 1.2.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0)) - ansis: 4.0.0 + '@typescript-eslint/eslint-plugin': 8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@vitest/eslint-plugin': 1.2.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) + ansis: 4.1.0 cac: 6.7.14 eslint: 9.27.0(jiti@2.4.2) eslint-config-flat-gitignore: 2.1.0(eslint@9.27.0(jiti@2.4.2)) @@ -4082,7 +4104,7 @@ snapshots: eslint-plugin-regexp: 2.7.0(eslint@9.27.0(jiti@2.4.2)) eslint-plugin-toml: 0.12.0(eslint@9.27.0(jiti@2.4.2)) eslint-plugin-unicorn: 59.0.1(eslint@9.27.0(jiti@2.4.2)) - eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2)) + eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2)) eslint-plugin-vue: 10.1.0(eslint@9.27.0(jiti@2.4.2))(vue-eslint-parser@10.1.3(eslint@9.27.0(jiti@2.4.2))) eslint-plugin-yml: 1.18.0(eslint@9.27.0(jiti@2.4.2)) eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.14)(eslint@9.27.0(jiti@2.4.2)) @@ -4175,12 +4197,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.3.0(astro@5.8.0(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.0))': + '@astrojs/mdx@4.3.0(astro@5.8.0(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.8.0))': dependencies: '@astrojs/markdown-remark': 6.3.2 '@mdx-js/mdx': 3.1.0(acorn@8.14.1) acorn: 8.14.1 - astro: 5.8.0(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.0) + astro: 5.8.0(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.8.0) es-module-lexer: 1.7.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -4207,7 +4229,7 @@ snapshots: dependencies: sitemap: 8.0.0 stream-replace-string: 2.0.0 - zod: 3.25.28 + zod: 3.25.32 '@astrojs/telemetry@3.3.0': dependencies: @@ -4229,11 +4251,11 @@ snapshots: '@babel/helper-validator-identifier@7.27.1': {} - '@babel/parser@7.27.2': + '@babel/parser@7.27.3': dependencies: - '@babel/types': 7.27.1 + '@babel/types': 7.27.3 - '@babel/types@7.27.1': + '@babel/types@7.27.3': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 @@ -4304,79 +4326,79 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 - '@esbuild/aix-ppc64@0.25.4': + '@esbuild/aix-ppc64@0.25.5': optional: true - '@esbuild/android-arm64@0.25.4': + '@esbuild/android-arm64@0.25.5': optional: true - '@esbuild/android-arm@0.25.4': + '@esbuild/android-arm@0.25.5': optional: true - '@esbuild/android-x64@0.25.4': + '@esbuild/android-x64@0.25.5': optional: true - '@esbuild/darwin-arm64@0.25.4': + '@esbuild/darwin-arm64@0.25.5': optional: true - '@esbuild/darwin-x64@0.25.4': + '@esbuild/darwin-x64@0.25.5': optional: true - '@esbuild/freebsd-arm64@0.25.4': + '@esbuild/freebsd-arm64@0.25.5': optional: true - '@esbuild/freebsd-x64@0.25.4': + '@esbuild/freebsd-x64@0.25.5': optional: true - '@esbuild/linux-arm64@0.25.4': + '@esbuild/linux-arm64@0.25.5': optional: true - '@esbuild/linux-arm@0.25.4': + '@esbuild/linux-arm@0.25.5': optional: true - '@esbuild/linux-ia32@0.25.4': + '@esbuild/linux-ia32@0.25.5': optional: true - '@esbuild/linux-loong64@0.25.4': + '@esbuild/linux-loong64@0.25.5': optional: true - '@esbuild/linux-mips64el@0.25.4': + '@esbuild/linux-mips64el@0.25.5': optional: true - '@esbuild/linux-ppc64@0.25.4': + '@esbuild/linux-ppc64@0.25.5': optional: true - '@esbuild/linux-riscv64@0.25.4': + '@esbuild/linux-riscv64@0.25.5': optional: true - '@esbuild/linux-s390x@0.25.4': + '@esbuild/linux-s390x@0.25.5': optional: true - '@esbuild/linux-x64@0.25.4': + '@esbuild/linux-x64@0.25.5': optional: true - '@esbuild/netbsd-arm64@0.25.4': + '@esbuild/netbsd-arm64@0.25.5': optional: true - '@esbuild/netbsd-x64@0.25.4': + '@esbuild/netbsd-x64@0.25.5': optional: true - '@esbuild/openbsd-arm64@0.25.4': + '@esbuild/openbsd-arm64@0.25.5': optional: true - '@esbuild/openbsd-x64@0.25.4': + '@esbuild/openbsd-x64@0.25.5': optional: true - '@esbuild/sunos-x64@0.25.4': + '@esbuild/sunos-x64@0.25.5': optional: true - '@esbuild/win32-arm64@0.25.4': + '@esbuild/win32-arm64@0.25.5': optional: true - '@esbuild/win32-ia32@0.25.4': + '@esbuild/win32-ia32@0.25.5': optional: true - '@esbuild/win32-x64@0.25.4': + '@esbuild/win32-x64@0.25.5': optional: true '@eslint-community/eslint-plugin-eslint-comments@4.5.0(eslint@9.27.0(jiti@2.4.2))': @@ -4838,7 +4860,7 @@ snapshots: '@stylistic/eslint-plugin@4.4.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.27.0(jiti@2.4.2) eslint-visitor-keys: 4.2.0 espree: 10.3.0 @@ -4877,7 +4899,7 @@ snapshots: '@types/fontkit@2.0.8': dependencies: - '@types/node': 22.15.21 + '@types/node': 22.15.24 '@types/hast@3.0.4': dependencies: @@ -4916,7 +4938,7 @@ snapshots: dependencies: undici-types: 6.20.0 - '@types/node@22.15.21': + '@types/node@22.15.24': dependencies: undici-types: 6.21.0 @@ -4926,20 +4948,20 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 22.15.21 + '@types/node': 22.15.24 '@types/unist@2.0.11': {} '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.1 + '@typescript-eslint/parser': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.33.0 + '@typescript-eslint/type-utils': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.33.0 eslint: 9.27.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 7.0.4 @@ -4949,27 +4971,40 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.1 + '@typescript-eslint/scope-manager': 8.33.0 + '@typescript-eslint/types': 8.33.0 + '@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.33.0 debug: 4.4.1 eslint: 9.27.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.32.1': + '@typescript-eslint/project-service@8.33.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/visitor-keys': 8.32.1 + '@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.8.3) + '@typescript-eslint/types': 8.33.0 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + - typescript - '@typescript-eslint/type-utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/scope-manager@8.33.0': dependencies: - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/types': 8.33.0 + '@typescript-eslint/visitor-keys': 8.33.0 + + '@typescript-eslint/tsconfig-utils@8.33.0(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@typescript-eslint/type-utils@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.1 eslint: 9.27.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) @@ -4977,14 +5012,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.32.1': {} - '@typescript-eslint/types@8.33.0': {} - '@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.33.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/visitor-keys': 8.32.1 + '@typescript-eslint/project-service': 8.33.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.8.3) + '@typescript-eslint/types': 8.33.0 + '@typescript-eslint/visitor-keys': 8.33.0 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -4995,31 +5030,31 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.33.0 + '@typescript-eslint/types': 8.33.0 + '@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3) eslint: 9.27.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.32.1': + '@typescript-eslint/visitor-keys@8.33.0': dependencies: - '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/types': 8.33.0 eslint-visitor-keys: 4.2.0 '@ungap/structured-clone@1.3.0': {} - '@unocss/astro@66.1.2(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.14(typescript@5.8.3))': + '@unocss/astro@66.1.2(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vue@3.5.14(typescript@5.8.3))': dependencies: '@unocss/core': 66.1.2 '@unocss/reset': 66.1.2 - '@unocss/vite': 66.1.2(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.14(typescript@5.8.3)) + '@unocss/vite': 66.1.2(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vue@3.5.14(typescript@5.8.3)) optionalDependencies: - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0) + vite: 6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) transitivePeerDependencies: - vue @@ -5050,7 +5085,7 @@ snapshots: '@unocss/eslint-plugin@66.1.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) '@unocss/config': 66.1.2 '@unocss/core': 66.1.2 '@unocss/rule-utils': 66.1.2 @@ -5170,7 +5205,7 @@ snapshots: dependencies: '@unocss/core': 66.1.2 - '@unocss/vite@66.1.2(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.14(typescript@5.8.3))': + '@unocss/vite@66.1.2(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vue@3.5.14(typescript@5.8.3))': dependencies: '@ampproject/remapping': 2.3.0 '@unocss/config': 66.1.2 @@ -5181,70 +5216,70 @@ snapshots: pathe: 2.0.3 tinyglobby: 0.2.14 unplugin-utils: 0.2.4 - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0) + vite: 6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) transitivePeerDependencies: - vue - '@unrs/resolver-binding-darwin-arm64@1.7.2': + '@unrs/resolver-binding-darwin-arm64@1.7.6': optional: true - '@unrs/resolver-binding-darwin-x64@1.7.2': + '@unrs/resolver-binding-darwin-x64@1.7.6': optional: true - '@unrs/resolver-binding-freebsd-x64@1.7.2': + '@unrs/resolver-binding-freebsd-x64@1.7.6': optional: true - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.2': + '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.6': optional: true - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.2': + '@unrs/resolver-binding-linux-arm-musleabihf@1.7.6': optional: true - '@unrs/resolver-binding-linux-arm64-gnu@1.7.2': + '@unrs/resolver-binding-linux-arm64-gnu@1.7.6': optional: true - '@unrs/resolver-binding-linux-arm64-musl@1.7.2': + '@unrs/resolver-binding-linux-arm64-musl@1.7.6': optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.2': + '@unrs/resolver-binding-linux-ppc64-gnu@1.7.6': optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.2': + '@unrs/resolver-binding-linux-riscv64-gnu@1.7.6': optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.7.2': + '@unrs/resolver-binding-linux-riscv64-musl@1.7.6': optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.7.2': + '@unrs/resolver-binding-linux-s390x-gnu@1.7.6': optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.7.2': + '@unrs/resolver-binding-linux-x64-gnu@1.7.6': optional: true - '@unrs/resolver-binding-linux-x64-musl@1.7.2': + '@unrs/resolver-binding-linux-x64-musl@1.7.6': optional: true - '@unrs/resolver-binding-wasm32-wasi@1.7.2': + '@unrs/resolver-binding-wasm32-wasi@1.7.6': dependencies: '@napi-rs/wasm-runtime': 0.2.10 optional: true - '@unrs/resolver-binding-win32-arm64-msvc@1.7.2': + '@unrs/resolver-binding-win32-arm64-msvc@1.7.6': optional: true - '@unrs/resolver-binding-win32-ia32-msvc@1.7.2': + '@unrs/resolver-binding-win32-ia32-msvc@1.7.6': optional: true - '@unrs/resolver-binding-win32-x64-msvc@1.7.2': + '@unrs/resolver-binding-win32-x64-msvc@1.7.6': optional: true - '@vitest/eslint-plugin@1.2.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0))': + '@vitest/eslint-plugin@1.2.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))': dependencies: - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.27.0(jiti@2.4.2) optionalDependencies: typescript: 5.8.3 - vitest: 3.1.1(@types/debug@4.1.12)(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0) + vitest: 3.1.1(@types/debug@4.1.12)(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) transitivePeerDependencies: - supports-color @@ -5256,13 +5291,13 @@ snapshots: tinyrainbow: 2.0.0 optional: true - '@vitest/mocker@3.1.1(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0))': + '@vitest/mocker@3.1.1(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))': dependencies: '@vitest/spy': 3.1.1 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0) + vite: 6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) optional: true '@vitest/pretty-format@3.1.1': @@ -5352,7 +5387,7 @@ snapshots: '@vue/compiler-core@3.5.14': dependencies: - '@babel/parser': 7.27.2 + '@babel/parser': 7.27.3 '@vue/shared': 3.5.14 entities: 4.5.0 estree-walker: 2.0.2 @@ -5365,7 +5400,7 @@ snapshots: '@vue/compiler-sfc@3.5.14': dependencies: - '@babel/parser': 7.27.2 + '@babel/parser': 7.27.3 '@vue/compiler-core': 3.5.14 '@vue/compiler-dom': 3.5.14 '@vue/compiler-ssr': 3.5.14 @@ -5444,7 +5479,7 @@ snapshots: ansi-styles@6.2.1: {} - ansis@4.0.0: {} + ansis@4.1.0: {} anymatch@3.1.3: dependencies: @@ -5466,12 +5501,12 @@ snapshots: astring@1.9.0: {} - astro-compress@2.3.8(@types/node@22.15.21)(jiti@2.4.2)(rollup@4.41.1)(typescript@5.8.3)(yaml@2.8.0): + astro-compress@2.3.8(@types/node@22.15.24)(jiti@2.4.2)(rollup@4.41.1)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.8.0): dependencies: '@playform/pipe': 0.1.3 '@types/csso': 5.0.4 '@types/html-minifier-terser': 7.0.2 - astro: 5.8.0(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.0) + astro: 5.8.0(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.8.0) commander: 13.1.0 csso: 5.0.5 deepmerge-ts: 7.1.5 @@ -5518,7 +5553,7 @@ snapshots: astro-eslint-parser@1.2.2: dependencies: '@astrojs/compiler': 2.12.0 - '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/scope-manager': 8.33.0 '@typescript-eslint/types': 8.33.0 astrojs-compiler-sync: 1.1.1(@astrojs/compiler@2.12.0) debug: 4.4.1 @@ -5532,9 +5567,9 @@ snapshots: transitivePeerDependencies: - supports-color - astro-og-canvas@0.7.0(astro@5.8.0(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.0)): + astro-og-canvas@0.7.0(astro@5.8.0(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.8.0)): dependencies: - astro: 5.8.0(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.0) + astro: 5.8.0(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.8.0) canvaskit-wasm: 0.39.1 deterministic-object-hash: 2.0.2 entities: 4.5.0 @@ -5542,9 +5577,9 @@ snapshots: astro-robots-txt@1.0.0: dependencies: valid-filename: 4.0.0 - zod: 3.25.28 + zod: 3.25.32 - astro@5.8.0(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.0): + astro@5.8.0(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.1)(terser@5.39.0)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.8.0): dependencies: '@astrojs/compiler': 2.12.0 '@astrojs/internal-helpers': 0.6.1 @@ -5569,7 +5604,7 @@ snapshots: dlv: 1.1.3 dset: 3.1.4 es-module-lexer: 1.7.0 - esbuild: 0.25.4 + esbuild: 0.25.5 estree-walker: 3.0.3 flattie: 1.1.1 fontace: 0.3.0 @@ -5599,14 +5634,14 @@ snapshots: unist-util-visit: 5.0.0 unstorage: 1.16.0 vfile: 6.0.3 - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0) - vitefu: 1.0.6(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0)) + vite: 6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + vitefu: 1.0.6(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 - zod: 3.25.28 - zod-to-json-schema: 3.24.5(zod@3.25.28) - zod-to-ts: 1.2.0(typescript@5.8.3)(zod@3.25.28) + zod: 3.25.32 + zod-to-json-schema: 3.24.5(zod@3.25.32) + zod-to-ts: 1.2.0(typescript@5.8.3)(zod@3.25.32) optionalDependencies: sharp: 0.33.5 transitivePeerDependencies: @@ -5696,7 +5731,7 @@ snapshots: browserslist@4.24.5: dependencies: caniuse-lite: 1.0.30001718 - electron-to-chromium: 1.5.157 + electron-to-chromium: 1.5.159 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.5) @@ -5827,6 +5862,8 @@ snapshots: commander@13.1.0: {} + commander@14.0.0: {} + commander@2.20.3: {} commander@7.2.0: {} @@ -5976,7 +6013,7 @@ snapshots: duplexer@0.1.2: {} - electron-to-chromium@1.5.157: {} + electron-to-chromium@1.5.159: {} emmet@2.4.11: dependencies: @@ -6014,33 +6051,33 @@ snapshots: esast-util-from-estree: 2.0.0 vfile-message: 4.0.2 - esbuild@0.25.4: + esbuild@0.25.5: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.4 - '@esbuild/android-arm': 0.25.4 - '@esbuild/android-arm64': 0.25.4 - '@esbuild/android-x64': 0.25.4 - '@esbuild/darwin-arm64': 0.25.4 - '@esbuild/darwin-x64': 0.25.4 - '@esbuild/freebsd-arm64': 0.25.4 - '@esbuild/freebsd-x64': 0.25.4 - '@esbuild/linux-arm': 0.25.4 - '@esbuild/linux-arm64': 0.25.4 - '@esbuild/linux-ia32': 0.25.4 - '@esbuild/linux-loong64': 0.25.4 - '@esbuild/linux-mips64el': 0.25.4 - '@esbuild/linux-ppc64': 0.25.4 - '@esbuild/linux-riscv64': 0.25.4 - '@esbuild/linux-s390x': 0.25.4 - '@esbuild/linux-x64': 0.25.4 - '@esbuild/netbsd-arm64': 0.25.4 - '@esbuild/netbsd-x64': 0.25.4 - '@esbuild/openbsd-arm64': 0.25.4 - '@esbuild/openbsd-x64': 0.25.4 - '@esbuild/sunos-x64': 0.25.4 - '@esbuild/win32-arm64': 0.25.4 - '@esbuild/win32-ia32': 0.25.4 - '@esbuild/win32-x64': 0.25.4 + '@esbuild/aix-ppc64': 0.25.5 + '@esbuild/android-arm': 0.25.5 + '@esbuild/android-arm64': 0.25.5 + '@esbuild/android-x64': 0.25.5 + '@esbuild/darwin-arm64': 0.25.5 + '@esbuild/darwin-x64': 0.25.5 + '@esbuild/freebsd-arm64': 0.25.5 + '@esbuild/freebsd-x64': 0.25.5 + '@esbuild/linux-arm': 0.25.5 + '@esbuild/linux-arm64': 0.25.5 + '@esbuild/linux-ia32': 0.25.5 + '@esbuild/linux-loong64': 0.25.5 + '@esbuild/linux-mips64el': 0.25.5 + '@esbuild/linux-ppc64': 0.25.5 + '@esbuild/linux-riscv64': 0.25.5 + '@esbuild/linux-s390x': 0.25.5 + '@esbuild/linux-x64': 0.25.5 + '@esbuild/netbsd-arm64': 0.25.5 + '@esbuild/netbsd-x64': 0.25.5 + '@esbuild/openbsd-arm64': 0.25.5 + '@esbuild/openbsd-x64': 0.25.5 + '@esbuild/sunos-x64': 0.25.5 + '@esbuild/win32-arm64': 0.25.5 + '@esbuild/win32-ia32': 0.25.5 + '@esbuild/win32-x64': 0.25.5 escalade@3.2.0: {} @@ -6069,12 +6106,12 @@ snapshots: dependencies: pathe: 2.0.3 - eslint-import-context@0.1.5(unrs-resolver@1.7.2): + eslint-import-context@0.1.6(unrs-resolver@1.7.6): dependencies: get-tsconfig: 4.10.1 stable-hash: 0.0.5 optionalDependencies: - unrs-resolver: 1.7.2 + unrs-resolver: 1.7.6 eslint-import-resolver-node@0.3.9: dependencies: @@ -6126,18 +6163,18 @@ snapshots: eslint-plugin-import-x@4.13.3(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) comment-parser: 1.4.1 debug: 4.4.1 eslint: 9.27.0(jiti@2.4.2) - eslint-import-context: 0.1.5(unrs-resolver@1.7.2) + eslint-import-context: 0.1.6(unrs-resolver@1.7.6) eslint-import-resolver-node: 0.3.9 is-glob: 4.0.3 minimatch: 10.0.1 semver: 7.7.2 stable-hash: 0.0.5 tslib: 2.8.1 - unrs-resolver: 1.7.2 + unrs-resolver: 1.7.6 transitivePeerDependencies: - supports-color - typescript @@ -6189,7 +6226,7 @@ snapshots: eslint-plugin-perfectionist@4.13.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3): dependencies: '@typescript-eslint/types': 8.33.0 - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.27.0(jiti@2.4.2) natural-orderby: 5.0.0 transitivePeerDependencies: @@ -6248,11 +6285,11 @@ snapshots: semver: 7.7.2 strip-indent: 4.0.0 - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2)): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2)): dependencies: eslint: 9.27.0(jiti@2.4.2) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-vue@10.1.0(eslint@9.27.0(jiti@2.4.2))(vue-eslint-parser@10.1.3(eslint@9.27.0(jiti@2.4.2))): dependencies: @@ -6332,6 +6369,10 @@ snapshots: transitivePeerDependencies: - supports-color + esno@4.8.0: + dependencies: + tsx: 4.19.4 + espree@10.3.0: dependencies: acorn: 8.14.1 @@ -6424,11 +6465,11 @@ snapshots: dependencies: format: 0.2.2 - fdir@6.4.4(picomatch@4.0.2): + fdir@6.4.5(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 - feed@5.0.1: + feed@5.1.0: dependencies: xml-js: 1.6.11 @@ -6887,10 +6928,10 @@ snapshots: dependencies: uc.micro: 2.1.0 - lint-staged@16.0.0: + lint-staged@16.1.0: dependencies: chalk: 5.4.1 - commander: 13.1.0 + commander: 14.0.0 debug: 4.4.1 lilconfig: 3.1.3 listr2: 8.3.3 @@ -6950,8 +6991,8 @@ snapshots: magicast@0.3.5: dependencies: - '@babel/parser': 7.27.2 - '@babel/types': 7.27.1 + '@babel/parser': 7.27.3 + '@babel/types': 7.27.3 source-map-js: 1.2.1 markdown-extensions@2.0.0: {} @@ -8262,7 +8303,7 @@ snapshots: tinyglobby@0.2.14: dependencies: - fdir: 6.4.4(picomatch@4.0.2) + fdir: 6.4.5(picomatch@4.0.2) picomatch: 4.0.2 tinypool@1.0.2: @@ -8300,6 +8341,13 @@ snapshots: tslib@2.8.1: {} + tsx@4.19.4: + dependencies: + esbuild: 0.25.5 + get-tsconfig: 4.10.1 + optionalDependencies: + fsevents: 2.3.3 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -8409,9 +8457,9 @@ snapshots: '@unocss/core': 66.1.2 '@unocss/rule-utils': 0.63.6 - unocss@66.1.2(postcss@8.5.3)(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.14(typescript@5.8.3)): + unocss@66.1.2(postcss@8.5.3)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vue@3.5.14(typescript@5.8.3)): dependencies: - '@unocss/astro': 66.1.2(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.14(typescript@5.8.3)) + '@unocss/astro': 66.1.2(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vue@3.5.14(typescript@5.8.3)) '@unocss/cli': 66.1.2 '@unocss/core': 66.1.2 '@unocss/postcss': 66.1.2(postcss@8.5.3) @@ -8429,9 +8477,9 @@ snapshots: '@unocss/transformer-compile-class': 66.1.2 '@unocss/transformer-directives': 66.1.2 '@unocss/transformer-variant-group': 66.1.2 - '@unocss/vite': 66.1.2(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.14(typescript@5.8.3)) + '@unocss/vite': 66.1.2(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vue@3.5.14(typescript@5.8.3)) optionalDependencies: - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0) + vite: 6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) transitivePeerDependencies: - postcss - supports-color @@ -8442,27 +8490,27 @@ snapshots: pathe: 2.0.3 picomatch: 4.0.2 - unrs-resolver@1.7.2: + unrs-resolver@1.7.6: dependencies: napi-postinstall: 0.2.4 optionalDependencies: - '@unrs/resolver-binding-darwin-arm64': 1.7.2 - '@unrs/resolver-binding-darwin-x64': 1.7.2 - '@unrs/resolver-binding-freebsd-x64': 1.7.2 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.7.2 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.7.2 - '@unrs/resolver-binding-linux-arm64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-arm64-musl': 1.7.2 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-riscv64-musl': 1.7.2 - '@unrs/resolver-binding-linux-s390x-gnu': 1.7.2 - '@unrs/resolver-binding-linux-x64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-x64-musl': 1.7.2 - '@unrs/resolver-binding-wasm32-wasi': 1.7.2 - '@unrs/resolver-binding-win32-arm64-msvc': 1.7.2 - '@unrs/resolver-binding-win32-ia32-msvc': 1.7.2 - '@unrs/resolver-binding-win32-x64-msvc': 1.7.2 + '@unrs/resolver-binding-darwin-arm64': 1.7.6 + '@unrs/resolver-binding-darwin-x64': 1.7.6 + '@unrs/resolver-binding-freebsd-x64': 1.7.6 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.7.6 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.7.6 + '@unrs/resolver-binding-linux-arm64-gnu': 1.7.6 + '@unrs/resolver-binding-linux-arm64-musl': 1.7.6 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.7.6 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.7.6 + '@unrs/resolver-binding-linux-riscv64-musl': 1.7.6 + '@unrs/resolver-binding-linux-s390x-gnu': 1.7.6 + '@unrs/resolver-binding-linux-x64-gnu': 1.7.6 + '@unrs/resolver-binding-linux-x64-musl': 1.7.6 + '@unrs/resolver-binding-wasm32-wasi': 1.7.6 + '@unrs/resolver-binding-win32-arm64-msvc': 1.7.6 + '@unrs/resolver-binding-win32-ia32-msvc': 1.7.6 + '@unrs/resolver-binding-win32-x64-msvc': 1.7.6 unstorage@1.16.0: dependencies: @@ -8506,13 +8554,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@3.1.1(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0): + vite-node@3.1.1(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0) + vite: 6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) transitivePeerDependencies: - '@types/node' - jiti @@ -8528,30 +8576,31 @@ snapshots: - yaml optional: true - vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0): + vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0): dependencies: - esbuild: 0.25.4 - fdir: 6.4.4(picomatch@4.0.2) + esbuild: 0.25.5 + fdir: 6.4.5(picomatch@4.0.2) picomatch: 4.0.2 postcss: 8.5.3 rollup: 4.41.1 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.15.21 + '@types/node': 22.15.24 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.29.3 terser: 5.39.0 + tsx: 4.19.4 yaml: 2.8.0 - vitefu@1.0.6(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0)): + vitefu@1.0.6(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)): optionalDependencies: - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0) + vite: 6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) - vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0): + vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0): dependencies: '@vitest/expect': 3.1.1 - '@vitest/mocker': 3.1.1(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0)) + '@vitest/mocker': 3.1.1(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) '@vitest/pretty-format': 3.1.4 '@vitest/runner': 3.1.1 '@vitest/snapshot': 3.1.1 @@ -8567,12 +8616,12 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0) - vite-node: 3.1.1(@types/node@22.15.21)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.8.0) + vite: 6.3.5(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + vite-node: 3.1.1(@types/node@22.15.24)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.15.21 + '@types/node': 22.15.24 transitivePeerDependencies: - jiti - less @@ -8819,15 +8868,15 @@ snapshots: yoctocolors@2.1.1: {} - zod-to-json-schema@3.24.5(zod@3.25.28): + zod-to-json-schema@3.24.5(zod@3.25.32): dependencies: - zod: 3.25.28 + zod: 3.25.32 - zod-to-ts@1.2.0(typescript@5.8.3)(zod@3.25.28): + zod-to-ts@1.2.0(typescript@5.8.3)(zod@3.25.32): dependencies: typescript: 5.8.3 - zod: 3.25.28 + zod: 3.25.32 - zod@3.25.28: {} + zod@3.25.32: {} zwitch@2.0.4: {} diff --git a/scripts/README-zh.md b/scripts/README-zh.md deleted file mode 100644 index cff8009..0000000 --- a/scripts/README-zh.md +++ /dev/null @@ -1,65 +0,0 @@ -## 🚀 基于本仓库创建并维护你自己的博客项目 - -本仓库为 [Astro](https://astro.build/) + [Retype](https://retype.com/) 构建的高颜值博客模板,支持一键部署和持续更新。以下是创建你自己的博客并与本模板保持同步的标准流程。 - -### ✅ 第一步:创建你自己的仓库 - -请**不要 Fork** 本仓库。 -相反,请点击 👉 [Use this template](https://github.com/radishzzz/astro-theme-retypeset) 创建一个新的仓库副本。 - -> 📌 原因说明:Fork 仓库将强制公开,并可能暴露你的私人配置(例如部署密钥、邮箱、API Token 等),不利于信息保护。 - ---- - -### ✏️ 第二步:保护你的自定义内容 - -你将在 `scripts/git-protect.list` 文件中声明需要保护的内容(如你撰写的文章、配置文件、页面自定义设置等)。 -这些文件在后续执行上游同步时会被自动备份和恢复,确保不会被覆盖。 - ---- - -### 🌐 第三步:开发并部署你的博客 - -* 根据项目目录结构撰写你的内容; -* 使用平台如 [Vercel](https://vercel.com/)、[Netlify](https://www.netlify.com/) 等部署站点; - ---- - -### 🔄 第四步:同步上游更新并保留本地定制 - -> 在你首次同步前,需添加上游远程地址(只需执行一次): - -```bash -git remote add upstream https://github.com/radishzzz/astro-theme-retypeset.git -``` - -之后每次同步只需在项目根目录执行以下命令: - -#### macOS / Linux / WSL / Git Bash(推荐): - -```bash -chmod u+x scripts/sync-upstream.sh -bash scripts/sync-upstream.sh upstream/master /tmp/blog-sync -``` - -#### Windows 用户注意: - -* **请使用 Git Bash** 执行上述命令; -* ❌ **不建议使用 cmd.exe 或 PowerShell**,以避免路径兼容与权限问题; -* 如需使用 Windows 运行脚本,推荐 Git Bash。路径参数使用 `/c/...` 格式,避免 Windows 风格路径。 - ---- - -### 📎 常见问题 - -* **为什么不通过Github Actions 自动化处理?** - - 由于游仓库的活跃,无法保证合并不需要人工介入。 - -* **为何要保护文件?** - - 上游可能会变更主题逻辑、样式或结构。通过 `git-protect.list` 声明关键文件,可在合并更新时避免被覆盖。 - -* **我修改了主题结构,是否还能同步?** - - 可以。但需在同步前手动解决冲突,并确保 `git-protect.list` 保护的路径无误。 diff --git a/scripts/README.md b/scripts/README.md deleted file mode 100644 index fc86261..0000000 --- a/scripts/README.md +++ /dev/null @@ -1,66 +0,0 @@ -## 🚀 Create and Maintain Your Own Blog Based on This Repository - -This repository provides a visually polished blog template built with [Astro](https://astro.build/) and [Retype](https://retype.com/), designed for seamless deployment and long-term maintenance. Follow the steps below to initialize your own blog and keep it in sync with future upstream updates. - ---- - -### ✅ Step 1: Create Your Own Repository - -**Do not fork this repository.** -Instead, click 👉 [Use this template](https://github.com/radishzzz/astro-theme-retypeset) to create a new repository based on this template. - -> 📌 **Why not fork?** -> Forked repositories are publicly visible by default, which may expose sensitive configuration data (e.g., deployment tokens, email addresses, API keys), posing a security risk. - ---- - -### ✏️ Step 2: Safeguard Your Custom Content - -Declare the files and directories you want to preserve in the `scripts/git-protect.list` file. -This includes your posts, configuration files, and site-specific settings. These items will be automatically backed up and restored during synchronization with the upstream repository, ensuring they are never overwritten. - ---- - -### 🌐 Step 3: Develop and Deploy Your Blog - -* Structure and write your content according to the project’s directory layout. -* Deploy the site using platforms such as [Vercel](https://vercel.com/) or [Netlify](https://www.netlify.com/). -* Continuous deployment via GitHub Actions is supported but optional. - ---- - -### 🔄 Step 4: Sync with Upstream While Preserving Local Customizations - -> Before the first synchronization, add the upstream remote (only required once): - -```bash -git remote add upstream https://github.com/radishzzz/astro-theme-retypeset.git -``` - -Then, run the sync script from the root directory of your repository: - -#### macOS / Linux / WSL / Git Bash (Recommended): - -```bash -chmod u+x scripts/sync-upstream.sh -bash scripts/sync-upstream.sh upstream/master /tmp/blog-sync -``` - -#### For Windows Users: - -* ✅ **Use Git Bash** to run the above commands; -* ❌ **Avoid using cmd.exe or PowerShell**, as they may cause compatibility issues with file paths; -* For best results, stick with Git Bash even on Windows.Use the `/c/...` format for path arguments and avoid Windows-style paths. - ---- - -### 📎 Frequently Asked Questions - -* **Why not automate synchronization with GitHub Actions?** - Due to the active nature of this upstream repository, automatic merges are not guaranteed to be conflict-free. Manual review is often required. - -* **Why are certain files protected?** - Upstream updates may introduce structural or styling changes. Defining protected files in `git-protect.list` ensures your custom content is preserved during synchronization. - -* **Can I still sync if I’ve modified the theme structure?** - Yes, but you'll need to manually resolve conflicts before syncing. Make sure all critical paths are properly listed in `git-protect.list`. diff --git a/scripts/git-protect.list b/scripts/git-protect.list deleted file mode 100644 index 38aa70d..0000000 --- a/scripts/git-protect.list +++ /dev/null @@ -1,4 +0,0 @@ -.cursor/ -src/config.ts -src/content/ -src/i18n/ui.ts \ No newline at end of file diff --git a/scripts/new-post.ts b/scripts/new-post.ts new file mode 100644 index 0000000..74edd4e --- /dev/null +++ b/scripts/new-post.ts @@ -0,0 +1,60 @@ +import { existsSync, mkdirSync, writeFileSync } from 'node:fs' +import { basename, dirname, extname, join } from 'node:path' +import process from 'node:process' +import { themeConfig } from '../src/config' + +// pnpm new-post +// pnpm new-post first-post +// pnpm new-post first-post.md +// pnpm new-post first-post.mdx +// pnpm new-post 2025/03/post +// pnpm new-post 2025/03/post.md +// pnpm new-post 2025/03/post.mdx + +// Process file path +const rawPath = process.argv[2] || 'new-post' +const baseName = basename(rawPath).replace(/\.(md|mdx)$/, '') +const targetFile = ['.md', '.mdx'].includes(extname(rawPath)) + ? rawPath + : `${rawPath}.md` +const fullPath = join('src/content/posts', targetFile) + +// Check if file already exists +if (existsSync(fullPath)) { + console.error(`❌ File already exists: ${fullPath}`) + process.exit(1) +} + +// Create directory structure +mkdirSync(dirname(fullPath), { recursive: true }) + +// Prepare file content +const today = new Date().toISOString().split('T')[0] +const content = `--- +title: ${baseName} +published: ${today} + +# Optional +description: '' +updated: '' +tags: + - Note + +# Advanced +draft: false +pin: 0 +toc: ${themeConfig.global.toc} +lang: '' +abbrlink: '' +--- +` + +// Write to file +try { + writeFileSync(fullPath, content) + console.log(`✅ Post created: ${fullPath}`) +} +catch (error) { + console.error('❌ Failed to create post:', error) + process.exit(1) +} diff --git a/scripts/sync-upstream.sh b/scripts/sync-upstream.sh deleted file mode 100755 index 42b46ac..0000000 --- a/scripts/sync-upstream.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/bin/bash -# filepath: sync-upstream.sh - -# Usage: ./sync-upstream.sh -# Example: ./sync-upstream.sh upstream/master /tmp/astro-protect - -set -e - -########################### -# Configuration -DEBUG=true # Set to true to enable debug output -PROTECT_LIST="scripts/git-protect.list" # Path to the protected files list -########################### - -UPSTREAM_BRANCH="$1" -TMP_DIR="$2" - -# Debug output function -log_debug() { - if [[ "$DEBUG" == true ]]; then - echo -e "[DEBUG] $*" - fi -} - -# Validate arguments -if [[ -z "$UPSTREAM_BRANCH" || -z "$TMP_DIR" ]]; then - echo "Usage: $0 " - exit 1 -fi - -if [[ ! -f "$PROTECT_LIST" ]]; then - echo "File not found: $PROTECT_LIST" - exit 1 -fi - -log_debug "Upstream branch: $UPSTREAM_BRANCH" -log_debug "Temporary directory: $TMP_DIR" -log_debug "Protection list file: $PROTECT_LIST" - -# Include hidden files (e.g., .env) -shopt -s dotglob - -# Step 1: Back up protected files and directories -mkdir -p "$TMP_DIR" -while IFS= read -r path || [[ -n "$path" ]]; do - [[ -z "$path" ]] && continue - [[ "${path:0:1}" == "#" ]] && continue - if [[ -e "$path" ]]; then - log_debug "Backing up: $path" - mkdir -p "$TMP_DIR/$(dirname "$path")" - cp -r "$path" "$TMP_DIR/$(dirname "$path")/" - else - log_debug "Skipping non-existent path: $path" - fi -done < "$PROTECT_LIST" - -# Step 2: Fetch and apply upstream content -log_debug "Fetching from remote: ${UPSTREAM_BRANCH%%/*}" -git fetch "${UPSTREAM_BRANCH%%/*}" - -log_debug "Checking out from $UPSTREAM_BRANCH" -git checkout "$UPSTREAM_BRANCH" -- . - -# Step 3: Restore protected files -while IFS= read -r path || [[ -n "$path" ]]; do - [[ -z "$path" ]] && continue - [[ "${path:0:1}" == "#" ]] && continue - if [[ -e "$TMP_DIR/$path" ]]; then - log_debug "Restoring: $path" - rm -rf "$path" - mkdir -p "$(dirname "$path")" - cp -r "$TMP_DIR/$path" "$path" - else - log_debug "No backup found, skipping: $path" - fi -done < "$PROTECT_LIST" - -# Step 4: Clean up -log_debug "Removing temporary directory: $TMP_DIR" -rm -rf "$TMP_DIR" - -echo "✅ Sync complete. Protected files have been restored. Please review and git add/commit/push." diff --git a/scripts/update-theme.ts b/scripts/update-theme.ts new file mode 100755 index 0000000..98ea811 --- /dev/null +++ b/scripts/update-theme.ts @@ -0,0 +1,32 @@ +import { execSync } from 'node:child_process' +import process from 'node:process' + +// pnpm update-theme + +// Check and set up the remote repository +try { + execSync('git remote get-url upstream', { stdio: 'ignore' }) +} +catch { + execSync('git remote add upstream https://github.com/radishzzz/astro-theme-retypeset.git', { stdio: 'inherit' }) +} + +// Update theme from upstream repository +try { + execSync('git fetch upstream', { stdio: 'inherit' }) + + const beforeHash = execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim() + execSync('git merge upstream/main', { stdio: 'inherit' }) + const afterHash = execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim() + + if (beforeHash === afterHash) { + console.log('✅ Already up to date') + } + else { + console.log('✨ Updated successfully') + } +} +catch (error) { + console.error('❌ Update failed:', error) + process.exit(1) +} diff --git a/src/content.config.ts b/src/content.config.ts index 7f5df19..83615cd 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -10,7 +10,10 @@ const posts = defineCollection({ published: z.date(), // optional description: z.string().optional().default(''), - updated: z.date().optional(), + updated: z.preprocess( + val => val === '' ? undefined : val, + z.date().optional(), + ), tags: z.array(z.string()).optional().default([]), // Advanced draft: z.boolean().optional().default(false), diff --git a/src/content/posts/guides/Theme Guide-en.md b/src/content/posts/guides/Theme Guide-en.md index 57703d5..68aa456 100644 --- a/src/content/posts/guides/Theme Guide-en.md +++ b/src/content/posts/guides/Theme Guide-en.md @@ -301,7 +301,7 @@ tags: # Advanced, Optional draft: true/false -pin: 1-99 +pin: 0-99 toc: true/false lang: de/en/es/fr/ja/ko/pl/pt/ru/zh/zh-tw abbrlink: theme-guide diff --git a/src/content/posts/guides/Theme Guide-es.md b/src/content/posts/guides/Theme Guide-es.md index 57e48ec..644cc82 100644 --- a/src/content/posts/guides/Theme Guide-es.md +++ b/src/content/posts/guides/Theme Guide-es.md @@ -301,7 +301,7 @@ tags: # Avanzado, Opcional draft: true/false -pin: 1-99 +pin: 0-99 toc: true/false lang: de/en/es/fr/ja/ko/pl/pt/ru/zh/zh-tw abbrlink: theme-guide diff --git a/src/content/posts/guides/Theme Guide-ja.md b/src/content/posts/guides/Theme Guide-ja.md index 6529f17..fa75765 100644 --- a/src/content/posts/guides/Theme Guide-ja.md +++ b/src/content/posts/guides/Theme Guide-ja.md @@ -301,7 +301,7 @@ tags: # 高度な設定(任意) draft: true/false -pin: 1-99 +pin: 0-99 toc: true/false lang: de/en/es/fr/ja/ko/pl/pt/ru/zh/zh-tw abbrlink: theme-guide diff --git a/src/content/posts/guides/Theme Guide-ru.md b/src/content/posts/guides/Theme Guide-ru.md index 0c5304a..f8fd9fe 100644 --- a/src/content/posts/guides/Theme Guide-ru.md +++ b/src/content/posts/guides/Theme Guide-ru.md @@ -301,7 +301,7 @@ tags: # Расширенные, опциональные draft: true/false -pin: 1-99 +pin: 0-99 toc: true/false lang: de/en/es/fr/ja/ko/pl/pt/ru/zh/zh-tw abbrlink: theme-guide diff --git a/src/content/posts/guides/Theme Guide-zh-tw.md b/src/content/posts/guides/Theme Guide-zh-tw.md index 4447136..b61489b 100644 --- a/src/content/posts/guides/Theme Guide-zh-tw.md +++ b/src/content/posts/guides/Theme Guide-zh-tw.md @@ -301,7 +301,7 @@ tags: # 進階,可選 draft: true/false -pin: 1-99 +pin: 0-99 toc: true/false lang: de/en/es/fr/ja/ko/pl/pt/ru/zh/zh-tw abbrlink: theme-guide diff --git a/src/content/posts/guides/Theme Guide-zh.md b/src/content/posts/guides/Theme Guide-zh.md index 6b3f2a5..d5b2c49 100644 --- a/src/content/posts/guides/Theme Guide-zh.md +++ b/src/content/posts/guides/Theme Guide-zh.md @@ -301,7 +301,7 @@ tags: # 进阶,可选 draft: true/false -pin: 1-99 +pin: 0-99 toc: true/false lang: de/en/es/fr/ja/ko/pl/pt/ru/zh/zh-tw abbrlink: theme-guide