From 46c1d0904fcfd534ade5a5a77a26b791bca51217 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 21 Aug 2026 11:46:54 +0800 Subject: [PATCH 01/25] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20NutUI=20Reac?= =?UTF-8?q?t=20=E5=88=B0=20Taro=20=E7=9A=84=E8=BF=81=E7=A7=BB=E6=8A=80?= =?UTF-8?q?=E8=83=BD=E6=96=87=E6=A1=A3=E5=92=8C=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/nutui-react-cli/README.md | 9 + .../skills/nutui-react-to-taro/SKILL.md | 221 ++++++++++++++++++ 2 files changed, 230 insertions(+) create mode 100644 packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md diff --git a/packages/nutui-react-cli/README.md b/packages/nutui-react-cli/README.md index faf8f29486..468995100f 100644 --- a/packages/nutui-react-cli/README.md +++ b/packages/nutui-react-cli/README.md @@ -105,6 +105,15 @@ npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react 兼容 Claude Code / Cursor / VS Code / Codex 等所有支持 [skills](https://github.com/vercel-labs/skills) 协议的 Agent。安装后,Agent 在遇到 NutUI React 相关任务时会自动遵循「先查后写」的流程。 +### 迁移 Skill:H5 → Taro + +本包额外内置一份 [迁移 Skill](./skills/nutui-react-to-taro/SKILL.md),用于把使用 `@nutui/nutui-react`(H5)的项目迁移到 `@nutui/nutui-react-taro`(Taro 跨端 / 小程序)。它编排「包名/原生标签/样式单位/事件类型」等规则化改写,并同时调用本包与 `@nutui/nutui-react-taro-cli` 的 `info` 交叉核对两端 Props 差异(少数组件如 Uploader / Image 两端属性不同),对 Web API、canvas 等无法机械转换的场景给出重写指引。 + +```bash +npm i -D @nutui/nutui-react-cli +npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react-to-taro +``` + ## 本地开发 ```bash diff --git a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md new file mode 100644 index 0000000000..546ef6c934 --- /dev/null +++ b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md @@ -0,0 +1,221 @@ +--- +name: nutui-react-to-taro +description: > + 当需要把项目(或代码片段)从 NutUI React(@nutui/nutui-react,H5)迁移到 + NutUI React Taro(@nutui/nutui-react-taro,小程序 / 跨端 Taro)时使用。触发场景 + 如「把 NutUI React 迁移到 Taro」「让这个 H5 的 NutUI 页面能在小程序里跑」,或将 H5 的 + NutUI 组件转换到 Taro 运行时。两个包共用同一套组件,绝大多数组件一一对应——真正 + 的工作是包名 / import 改写、原生标签 → Taro 组件替换、样式单位修正,以及对少数 + 两端 props 不同的组件做交叉核对。 +allowed-tools: + - Bash(nutui-react *) + - Bash(nutui-react-taro *) + - Bash(npx -y @nutui/nutui-react-cli *) + - Bash(npx -y @nutui/nutui-react-taro-cli *) + - Bash(which nutui-react) + - Bash(which nutui-react-taro) +--- + +# NutUI React(H5)→ NutUI React Taro 迁移 + +你负责把代码从 `@nutui/nutui-react`(H5)迁移到 `@nutui/nutui-react-taro` +(Taro 小程序 / 跨端)。两个包由**同一套 codebase** 构建,因此几乎每个组件在两端 +都同名、props 也大体一致。这让迁移高度规则化——但仍有少数环节需要真正的判断, +不能无脑查找替换。 + +有两个 CLI 支撑本工作,均离线、元数据随包分发: + +- `@nutui/nutui-react-cli` —— **源端**(H5)真值:`nutui-react info ` +- `@nutui/nutui-react-taro-cli` —— **目标端**(Taro)真值:`nutui-react-taro info ` + +若某个 CLI 不在 PATH 上,用 npx 调用(无需安装): + +```bash +which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli " +``` + +**最重要的习惯:每碰一个组件,改写前先用两个 CLI 对比它的 props。** props 通常 +一致,但一旦不同(Uploader、Image、InputNumber 等),盲目照搬会产出在小程序上 +悄悄失效的代码。始终传 `--format json` 并解析它。 + +## 迁移流程 + +按序执行以下阶段。不要跳过扫描——正是它告诉你哪些文件有风险。 + +### 阶段 0 —— 环境准备(项目配置,最先做) + +迁移后的代码在 Taro 里跑起来的前提是项目已配置好。权威来源:NutUI 官方「快速上手」 +(start-react)文档。 + +1. **安装依赖**(执行安装前先征求用户同意): + - `@nutui/nutui-react-taro`、`@nutui/icons-react-taro` + - `@tarojs/plugin-html` —— **版本必须与项目的 Taro 版本一致** + - `babel-plugin-import`(仅当项目需要按需引入时) +2. **修改 `config/index.js`** —— 开启 HTML 插件并设置设计尺寸,让 NutUI(基于 375 + 的库)正确缩放: + ```js + config = { + plugins: ['@tarojs/plugin-html'], + designWidth(input) { + if (input?.file?.replace(/\\+/g, '/').indexOf('@nutui') > -1) return 375 + return 750 + }, + deviceRatio: { 640: 2.34 / 2, 750: 1, 828: 1.81 / 2, 375: 2 / 1 }, + } + ``` +3. **在应用入口引入全局样式**(`app.tsx` / `app.ts`): + ```js + import '@nutui/nutui-react-taro/dist/style.css' + ``` + +你可以直接改 `config/index.js` 和入口文件。安装依赖前请与用户确认。 + +### 阶段 1 —— 扫描盘点 + +找出所有 NutUI 用法,并在开头标记高风险文件: + +```bash +# 哪些文件 import 了 H5 包 +grep -rn "@nutui/nutui-react\b\|@nutui/icons-react\b" src --include=*.tsx --include=*.ts + +# 高风险信号——这些文件需要逐行的人工 / AI 判断(见阶段 3): +grep -rln "\bAudio\b" src # Audio 在 Taro 端无对应组件(见陷阱) +grep -rln "document\.\|window\.\|localStorage\|URL.createObjectURL\|addEventListener" src +grep -rln "getElementById\|querySelector\|createElement\|canvas" src # canvas / DOM 逻辑 +``` + +列出涉及的组件,再确认每个在 Taro 端都存在: + +```bash +nutui-react-taro list --format json # 确认组件名 / 发现 Audio 缺口 +``` + +### 阶段 2 —— 机械改写(规则 ①–④) + +按下方规则表逐文件处理。这些足够规则化、可快速完成,但 ② 和 ③ 仍需轻度判断(见备注)。 + +### 阶段 3 —— 语义改写与 props 交叉核对(规则 ⑤–⑥) + +对阶段 1 标记的每个高风险文件、以及你迁移的每个组件: + +```bash +# 对比 props:H5 端有哪些 vs. Taro 端接受哪些 +nutui-react info Uploader --format json +nutui-react-taro info Uploader --format json +# 需要语义改写的组件(如 Signature)先读完整 Taro 文档 +nutui-react-taro doc Signature --format json +``` + +把 Web-only API 改写成 Taro API,删除 / 替换 Taro 端不接受的 props,并处理下方陷阱。 + +### 阶段 4 —— 验证 + +- 构建 Taro 目标端并确认编译通过:如 + `taro build --type weapp --watch`(或 `--type h5`)。 +- 手动复查每个高风险文件——**编译通过不代表** canvas / Web API 的改写行为正确。 +- 报告哪些文件已完全自动迁移、哪些需要用户复核。 + +## 规则表(改写前 → 改写后) + +### ① 包名与 import —— 纯替换 + +```diff +- import { Button, Cell } from '@nutui/nutui-react' ++ import { Button, Cell } from '@nutui/nutui-react-taro' +- import { Dongdong } from '@nutui/icons-react' ++ import { Dongdong } from '@nutui/icons-react-taro' +``` + +### ② 原生 HTML 标签 → Taro 组件 —— 替换 + 补 import + +Taro 没有 DOM。替换原生标签并补上 `@tarojs/components` 的 import。 + +| H5 | Taro | 备注 | +| --- | --- | --- | +| `
` | `` | 块级容器 | +| `

` | `` | | +| `` | `` 或 `` | **`` 仅用于纯行内文本;若含子元素则用 ``** | +| `` | `` | | + +```diff ++ import { View } from '@tarojs/components' + setIsVisible(!isVisible)}> +- 基础用法 +-

{val}
++ 基础用法 ++ {val} + +``` + +### ③ 样式单位 —— 裸 px 与逻辑属性 + +- 裸数字 px 必须转成字符串:`margin: 8` → `margin: '8px'`。 +- 小程序不支持逻辑属性:`marginInlineStart` → `marginLeft`、 + `insetInlineStart` → `left` 等。 +- 需要跨设备缩放的值,用从 `@nutui/nutui-react-taro` 引入的 `pxTransform(10)` + (返回按 rpx 适配的长度)。 + +```diff +- const marginStyle = { margin: 8 } ++ const marginStyle = { margin: '8px' } +``` + +### ④ 触摸事件类型 + +小程序的触摸事件不是 `MouseEvent`。放宽类型,并从 `@tarojs/components` 引入 +`ITouchEvent`。 + +```diff ++ import { ITouchEvent } from '@tarojs/components' +- const testClick = (event: React.MouseEvent) => {} ++ const testClick = (event: React.MouseEvent | ITouchEvent) => {} +``` + +### ⑤ Web-only API → Taro API —— 需要推理,逐处改写 + +小程序里没有 `window` / `document` / DOM。映射到 `@tarojs/taro` 或组件自身能力: + +| H5 写法 | Taro 替代 | +| --- | --- | +| `alert` / 用 DOM 弹 toast | `Taro.showToast(...)`(`import Taro from '@tarojs/taro'`) | +| `URL.createObjectURL(file)` | 用上传结果 URL / `Taro.chooseImage` 的临时路径 | +| `document.createElement` + DOM 操作 | 删除;改用组件 props / ref 驱动 | +| `window.location` / 路由跳转 | `Taro.navigateTo` / `Taro.redirectTo` | +| `localStorage` | `Taro.setStorageSync` / `Taro.getStorageSync` | +| `addEventListener('scroll')` | Taro 页面 / 滚动事件或组件 props | + +### ⑥ 组件 props 差异 —— 用两个 CLI 交叉核对 + +绝大多数 props 一致,但有些组件确实不同。**永远不要假设,去 diff。** 已确认的例子 +(迁移时请实时核对,版本会漂移): + +| 组件 | 仅 H5 有的 props | 仅 Taro 有的 props | 处理 | +| --- | --- | --- | --- | +| `Uploader` | `accept`、`capture` | `mediaType`、`sizeType`、`sourceType`、`camera` | 用 Taro 的文件选择 props 重新表达意图 | +| `Image` | `fit`、`lazy`、`position`、`alt` | —— | 删除 / 重映射(如 `fit` → 查 CLI doc 看 `mode` 语义) | +| `InputNumber` | `select` | `type` | 查 CLI doc | +| `Button` | —— | (`openType`、`hoverClass` … 是小程序透传属性) | 按需补上小程序专属 props | + +## 陷阱(盲目替换会做错) + +1. **`Audio` 在 Taro 端无对应组件。** 它只存在于 H5 包。当某文件用到 NutUI 的 + `Audio` 时,停下并告知用户——建议改用 `Taro.createInnerAudioContext()` 或自定义 + 方案。不要凭空编一个 import。 +2. **不要盲目替换每一个 `document`。** 有些组件原样接受它——如 `Popup` 的 + `portal={document.body}` 在 Taro 端**保持不变**(组件已处理)。按组件语义 / + CLI doc 判断,而非按 grep。 +3. **canvas 类组件(如 `Signature`)是语义改写。** H5 端常有手写 DOM 操作 + (`document.createElement('img')`、往节点里 append)。在 Taro 端删掉那段 DOM + 逻辑,改用组件的 `canvasId` prop + ref 方法。先读 `nutui-react-taro doc Signature`。 +4. **`` → `` 还是 ``。** `` 是行内、仅用于纯文本;把子元素 + 包进 `` 会破坏布局。有嵌套元素时用 ``。 + +## 核心规则 + +1. **改写每个组件前,用 `nutui-react info ` 和 `nutui-react-taro info ` 交叉 + 核对它的 props。** 这是整个迁移的核心——见规则 ⑥。 +2. **始终 `--format json`** —— 解析结构化输出,不要正则抓文本。 +3. **确认组件在 Taro 端存在**,用 `nutui-react-taro list`;留意 `Audio` 缺口。 +4. **规则 ①–④ 是机械的;⑤–⑥ 及陷阱需要判断** —— 后者逐处处理,对无法安全自动 + 迁移的地方标记出来交用户复核。在 Taro 构建编译通过前,不要声称某文件已迁移完成。 +5. **先做环境准备** —— 若项目无法编译 Taro + NutUI,代码迁移就没有意义。 From 11cded47f7db47641419cbf67de02b88418cd83f Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 21 Aug 2026 11:57:00 +0800 Subject: [PATCH 02/25] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20Skill=20?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=8F=8A=E5=AF=BC=E8=88=AA=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=EF=BC=8C=E6=9B=B4=E6=96=B0=20CLI=20=E6=96=87=E6=A1=A3=E4=BB=A5?= =?UTF-8?q?=E6=94=AF=E6=8C=81=20NutUI-React=20=E7=9A=84=E6=96=B0=E6=8A=80?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sites-react/doc/components/nav/nav.tsx | 10 +++ .../doc/docs/ai-react/cli.en-US.md | 1 + .../sites-react/doc/docs/ai-react/cli.md | 1 + .../doc/docs/ai-react/skill.en-US.md | 71 +++++++++++++++++++ .../sites-react/doc/docs/ai-react/skill.md | 71 +++++++++++++++++++ 5 files changed, 154 insertions(+) create mode 100644 src/sites/sites-react/doc/docs/ai-react/skill.en-US.md create mode 100644 src/sites/sites-react/doc/docs/ai-react/skill.md diff --git a/src/sites/sites-react/doc/components/nav/nav.tsx b/src/sites/sites-react/doc/components/nav/nav.tsx index 69b8e38ae0..e76a8bde5b 100644 --- a/src/sites/sites-react/doc/components/nav/nav.tsx +++ b/src/sites/sites-react/doc/components/nav/nav.tsx @@ -76,6 +76,16 @@ const Nav = () => { MCP Server +
  • + + isPending ? '' : isActive ? 'active' : '' + } + to={`${lang ? `/${lang}` : ''}/ai/skill`} + > + Skill + +
  • diff --git a/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md b/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md index 6acae8157c..e5487552b2 100644 --- a/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md @@ -86,6 +86,7 @@ If your IDE supports MCP, the CLI can also run as an MCP server, registering the ## Learn more +- [Skill](/#/en-US/ai/skill) - [MCP Server](/#/en-US/ai/mcp) - [LLMs.txt](/#/en-US/ai/llms) - [For Agents](/#/en-US/ai/for-agents) diff --git a/src/sites/sites-react/doc/docs/ai-react/cli.md b/src/sites/sites-react/doc/docs/ai-react/cli.md index 4772d759c5..172b2af161 100644 --- a/src/sites/sites-react/doc/docs/ai-react/cli.md +++ b/src/sites/sites-react/doc/docs/ai-react/cli.md @@ -86,6 +86,7 @@ npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react ## 了解更多 +- [Skill](/#/zh-CN/ai/skill) - [MCP Server](/#/zh-CN/ai/mcp) - [LLMs.txt](/#/zh-CN/ai/llms) - [For Agents](/#/zh-CN/ai/for-agents) diff --git a/src/sites/sites-react/doc/docs/ai-react/skill.en-US.md b/src/sites/sites-react/doc/docs/ai-react/skill.en-US.md new file mode 100644 index 0000000000..16a93caa6f --- /dev/null +++ b/src/sites/sites-react/doc/docs/ai-react/skill.en-US.md @@ -0,0 +1,71 @@ +# Skill + +This page introduces two NutUI-React Agent Skills, the problem each one solves, and how to install them. + +## What is a Skill? + +A [Skill](https://github.com/vercel-labs/skills) is an instruction file following the Agent Skills spec. The CLI and MCP provide the _capabilities_ (query props, docs, demos, Design Tokens); the Skill constrains _when and in what order_ the agent uses them — turning "has tools" into "knows how to use them". + +Once installed, the agent automatically loads the Skill and follows its workflow when it hits a matching task, with no need for you to prompt it every time. Compatible with Claude Code / Cursor / VS Code / Codex and any agent that supports the skills protocol. + +Two Skills are available: + +| Skill | Purpose | +| --- | --- | +| `nutui-react` | Look up the API before writing NutUI-React code, eliminating API hallucination | +| `nutui-react-to-taro` | Migrate an H5 project from `@nutui/nutui-react` to `@nutui/nutui-react-taro` (Taro / mini-program) | + +## `nutui-react` — look up before writing + +Guides the agent to query the real API with the CLI before writing any NutUI-React component code, instead of guessing props or enum values from memory. + +**It constrains the agent to:** + +- Run `nutui-react info ` for props, then `nutui-react demo ` to grab a runnable example as a starting point — before writing a component. +- Customize styles with `var(--nutui-*)` Design Tokens (`nutui-react token`) rather than hardcoding colors and spacing. +- Confirm a component name with `nutui-react list` (or take the CLI's "did you mean" suggestion) instead of importing a guessed name. +- Prefer `--format json` for every query and parse the structured output rather than regex-matching text. + +**Install:** + +```bash +npm i -D @nutui/nutui-react-cli +npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +``` + +## `nutui-react-to-taro` — migrate H5 to Taro + +Guides the agent to migrate a project using `@nutui/nutui-react` (H5) to `@nutui/nutui-react-taro` (Taro cross-platform / mini-program). The two packages share one component set and almost every component maps 1:1, so migration is highly regular — the Skill orchestrates the mechanical rewrites and the judgment-heavy semantic rewrites into a clear workflow. + +**The migration workflow it orchestrates:** + +- **Environment prep**: install `@nutui/nutui-react-taro`, `@tarojs/plugin-html`, etc.; configure `designWidth` in `config/index.js`; import the global styles at the entry. +- **Mechanical rewrites**: package/import swaps (`@nutui/nutui-react` → `@nutui/nutui-react-taro`), native-tag swaps (`
    ` → ``, `` → ``), style-unit fixes, touch-event type widening. +- **Cross-check**: for each component, call both `nutui-react info` and `nutui-react-taro info` to diff props across the two ends (a few components like Uploader / Image differ), avoiding blind copies that silently break on the mini-program. +- **Semantic rewrites & traps**: rewrite Web-only APIs (`document` / `window`) to `@tarojs/taro` APIs; flag judgment-heavy cases such as the missing `Audio` component on Taro and canvas components that need rewriting. + +> This Skill also uses `@nutui/nutui-react-taro-cli` for target-side cross-checking; invoke it install-free via `npx -y @nutui/nutui-react-taro-cli`. + +**Install:** + +```bash +npm i -D @nutui/nutui-react-cli +npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react-to-taro +``` + +## How Skill relates to CLI / MCP + +All three reuse the same offline knowledge — only the calling protocol differs: + +- **CLI** — the agent runs commands to query. +- **MCP** — registers the same capabilities as IDE-native tools, called on demand in conversation. +- **Skill** — provides no new capability; it tells the agent _when and in what order_ to call the CLI / MCP, codifying the workflow. + +If your IDE supports MCP, enabling the MCP server alongside lets the Skill's query steps route through IDE-native tools automatically. + +## Learn more + +- [CLI](/#/en-US/ai/cli) +- [MCP Server](/#/en-US/ai/mcp) +- [For Agents](/#/en-US/ai/for-agents) +- [LLMs.txt](/#/en-US/ai/llms) diff --git a/src/sites/sites-react/doc/docs/ai-react/skill.md b/src/sites/sites-react/doc/docs/ai-react/skill.md new file mode 100644 index 0000000000..8fc7af8ec0 --- /dev/null +++ b/src/sites/sites-react/doc/docs/ai-react/skill.md @@ -0,0 +1,71 @@ +# Skill + +本篇介绍两个 NutUI-React Agent Skill,以及它们各自解决的问题与安装方式。 + +## 什么是 Skill? + +[Skill](https://github.com/vercel-labs/skills) 是一份遵循 Agent Skills 规范的说明文件。CLI 与 MCP 提供的是「能力」(查 Props、查文档、拿示例、查 Design Token),而 Skill 约束 Agent「**在什么时机、按什么顺序**」使用这些能力——把「有工具」变成「会用工具」。 + +安装后,Agent 在遇到对应任务时会自动加载 Skill 并遵循其中的流程,无需你每次手动提示。兼容 Claude Code / Cursor / VS Code / Codex 等所有支持 skills 协议的 Agent。 + +目前提供两个 Skill: + +| Skill | 用途 | +| --- | --- | +| `nutui-react` | 写 NutUI-React 代码时「先查后写」,消除 API 幻觉 | +| `nutui-react-to-taro` | 把 H5 项目从 `@nutui/nutui-react` 迁移到 `@nutui/nutui-react-taro`(Taro / 小程序) | + +## `nutui-react` — 先查后写 + +指导 Agent 在写任何 NutUI-React 组件代码前,先用 CLI 查询真实 API,而非凭记忆猜测 Prop 或枚举值。 + +**它约束 Agent 的行为:** + +- 写组件前先 `nutui-react info ` 查 Props,再 `nutui-react demo ` 拿一个可运行示例作为起点。 +- 定制样式时用 `var(--nutui-*)` Design Token(`nutui-react token`),而非硬编码颜色与间距。 +- 不确定组件名时先 `nutui-react list` 确认,或采纳 CLI 的「你是否想找」建议,而非导入猜测的名字。 +- 所有查询优先用 `--format json`,解析结构化输出而非正则抓文本。 + +**安装:** + +```bash +npm i -D @nutui/nutui-react-cli +npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +``` + +## `nutui-react-to-taro` — H5 迁移到 Taro + +指导 Agent 把使用 `@nutui/nutui-react`(H5)的项目,迁移到 `@nutui/nutui-react-taro`(Taro 跨端 / 小程序)。两个包共用同一套组件,绝大多数组件一一对应,因此迁移高度规则化——Skill 负责把规则化改写与需要判断的语义改写编排成清晰流程。 + +**它编排的迁移流程:** + +- **环境准备**:安装 `@nutui/nutui-react-taro`、`@tarojs/plugin-html` 等依赖,配置 `config/index.js` 的 `designWidth`,入口引入全局样式。 +- **规则化改写**:包名 / import 替换(`@nutui/nutui-react` → `@nutui/nutui-react-taro`)、原生标签替换(`
    ` → ``、`` → ``)、样式单位修正、触摸事件类型补全。 +- **交叉核对**:对每个组件同时调用 `nutui-react info` 与 `nutui-react-taro info` 对比两端 Props 差异(少数组件如 Uploader / Image 两端属性不同),避免盲目照搬导致小程序端失效。 +- **语义改写与陷阱处理**:把 Web-only API(`document` / `window`)改写成 `@tarojs/taro` API;识别 `Audio` 组件在 Taro 端缺失、canvas 类组件需重写等需要人工判断的场景并标记出来。 + +> 该 Skill 会同时用到 `@nutui/nutui-react-taro-cli` 做目标端核对,通过 `npx -y @nutui/nutui-react-taro-cli` 免安装调用即可。 + +**安装:** + +```bash +npm i -D @nutui/nutui-react-cli +npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react-to-taro +``` + +## Skill 与 CLI / MCP 的关系 + +三者复用同一份离线知识,只是调用协议不同: + +- **CLI** — Agent 主动敲命令查询。 +- **MCP** — 把同一份能力注册成 IDE 原生工具,在对话中按需自动调用。 +- **Skill** — 不提供新能力,而是告诉 Agent「何时、按什么顺序」调用 CLI / MCP,把流程固化下来。 + +如果你的 IDE 支持 MCP,推荐同时启用 MCP 服务,让 Skill 里的查询步骤自动走 IDE 原生工具。 + +## 了解更多 + +- [CLI](/#/zh-CN/ai/cli) +- [MCP Server](/#/zh-CN/ai/mcp) +- [For Agents](/#/zh-CN/ai/for-agents) +- [LLMs.txt](/#/zh-CN/ai/llms) From ab3a66e444e1fbc6e4bebbf3a1e21208bdb7f434 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 21 Aug 2026 12:06:55 +0800 Subject: [PATCH 03/25] feat: align versioning of nutui-react-cli and nutui-react-taro-cli with @nutui/nutui-react, introducing offline knowledge query capabilities and integrated MCP server for enhanced IDE support --- packages/nutui-react-cli/CHANGELOG.md | 13 +++++++++++++ packages/nutui-react-cli/package.json | 2 +- packages/nutui-react-taro-cli/CHANGELOG.md | 13 +++++++++++++ packages/nutui-react-taro-cli/package.json | 2 +- 4 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 packages/nutui-react-cli/CHANGELOG.md create mode 100644 packages/nutui-react-taro-cli/CHANGELOG.md diff --git a/packages/nutui-react-cli/CHANGELOG.md b/packages/nutui-react-cli/CHANGELOG.md new file mode 100644 index 0000000000..c47b57e4cc --- /dev/null +++ b/packages/nutui-react-cli/CHANGELOG.md @@ -0,0 +1,13 @@ +# Changelog + +本包版本号自 `4.0.0` 起与组件包 `@nutui/nutui-react` 对齐,便于未来支持多版本查询。 + +## v4.0.0 + +`2026-08-21` + +- :sparkles: 版本号对齐 `@nutui/nutui-react`(此前为独立的 `0.1.x`),同一大版本的 CLI 与组件库保持一致,为未来多版本支持奠定基础。 +- :sparkles: 离线知识查询 CLI:`list` / `info` / `doc` / `demo` / `token`,元数据随包分发,无需网络与 API Key。 +- :sparkles: 内置 stdio MCP Server(`mcp` 命令),暴露 5 个工具与 2 个 prompt,供 Claude Code / Cursor / VS Code / Codex 等 IDE 集成。 +- :sparkles: 随包分发 Skill:`nutui-react`(编写 / 调试 NutUI React 代码时查询组件知识)、`nutui-react-to-taro`(将 H5 代码迁移到 Taro)。 +- :sparkles: 每个 Skill 补充 `metadata.json`,声明版本、兼容性、触发词等元信息。 diff --git a/packages/nutui-react-cli/package.json b/packages/nutui-react-cli/package.json index 1bc2d33aef..918e93ae7e 100644 --- a/packages/nutui-react-cli/package.json +++ b/packages/nutui-react-cli/package.json @@ -1,6 +1,6 @@ { "name": "@nutui/nutui-react-cli", - "version": "0.1.1", + "version": "4.0.0", "type": "module", "description": "NutUI React 面向 AI Coding 的离线知识查询 CLI:list / info / doc / demo / token。", "keywords": [ diff --git a/packages/nutui-react-taro-cli/CHANGELOG.md b/packages/nutui-react-taro-cli/CHANGELOG.md new file mode 100644 index 0000000000..c3d777bb6e --- /dev/null +++ b/packages/nutui-react-taro-cli/CHANGELOG.md @@ -0,0 +1,13 @@ +# Changelog + +本包版本号自 `4.0.0` 起与组件包 `@nutui/nutui-react-taro` 对齐,便于未来支持多版本查询。 + +## v4.0.0 + +`2026-08-21` + +- :sparkles: 版本号对齐 `@nutui/nutui-react-taro`(此前为独立的 `0.1.x`),同一大版本的 CLI 与组件库保持一致,为未来多版本支持奠定基础。 +- :sparkles: 离线知识查询 CLI:`list` / `info` / `doc` / `demo` / `token`,元数据随包分发,无需网络与 API Key。 +- :sparkles: 内置 stdio MCP Server(`mcp` 命令),暴露 5 个工具与 2 个 prompt,供 Claude Code / Cursor / VS Code / Codex 等 IDE 集成。 +- :sparkles: 随包分发 Skill:`nutui-react-taro`(编写 / 调试 NutUI React Taro 小程序 / 跨端代码时查询组件知识)。 +- :sparkles: 为 Skill 补充 `metadata.json`,声明版本、兼容性、触发词等元信息。 diff --git a/packages/nutui-react-taro-cli/package.json b/packages/nutui-react-taro-cli/package.json index dedc435f52..60820a7169 100644 --- a/packages/nutui-react-taro-cli/package.json +++ b/packages/nutui-react-taro-cli/package.json @@ -1,6 +1,6 @@ { "name": "@nutui/nutui-react-taro-cli", - "version": "0.1.0", + "version": "4.0.0", "type": "module", "description": "NutUI React Taro 面向 AI Coding 的离线知识查询 CLI:list / info / doc / demo / token。", "keywords": [ From e5954961e5fd3bd769064525bdd4746e11b4c5ba Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 21 Aug 2026 12:20:17 +0800 Subject: [PATCH 04/25] feat: add NutUI React and NutUI React Taro skills documentation, enhancing CLI capabilities for component queries and IDE integration --- .../skills/nutui-react/SKILL.en.md | 135 +++++++++++++++++ .../skills/nutui-react/SKILL.md | 115 ++++++++------- .../skills/nutui-react-taro/SKILL.en.md | 136 ++++++++++++++++++ .../skills/nutui-react-taro/SKILL.md | 116 ++++++++------- 4 files changed, 385 insertions(+), 117 deletions(-) create mode 100644 packages/nutui-react-cli/skills/nutui-react/SKILL.en.md create mode 100644 packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.en.md diff --git a/packages/nutui-react-cli/skills/nutui-react/SKILL.en.md b/packages/nutui-react-cli/skills/nutui-react/SKILL.en.md new file mode 100644 index 0000000000..ddbc3dfdac --- /dev/null +++ b/packages/nutui-react-cli/skills/nutui-react/SKILL.en.md @@ -0,0 +1,135 @@ +--- +name: nutui-react +description: > + Use when the user's task involves NutUI React (@nutui/nutui-react) — writing + NutUI React components, debugging NutUI issues, or querying NutUI component + APIs/props/docs/demos/design-tokens. Triggers on NutUI-related code, imports + from '@nutui/nutui-react', or explicit NutUI questions. NutUI React is JD's + lightweight mobile (H5) component library. +allowed-tools: + - Bash(nutui-react *) + - Bash(npx -y @nutui/nutui-react-cli *) + - Bash(which nutui-react) +--- + +# NutUI React CLI + +You have access to `@nutui/nutui-react-cli` — a local CLI tool with bundled NutUI React metadata (component props, full docs, runnable demos, and Design Tokens). Use it to query component knowledge before writing code. All data is offline and packaged with the CLI — no network and no API key needed. + +## Setup + +Before first use, check if the CLI is available. If not, invoke it via `npx` (no global install required): + +```bash +which nutui-react || echo "use: npx -y @nutui/nutui-react-cli " +``` + +Both forms work — use whichever is available: + +- Installed globally: `nutui-react info Button` +- Via npx (no install): `npx -y @nutui/nutui-react-cli info Button` + +Examples below use the `nutui-react` form for brevity. + +**Always pass `--format json` for structured output you can parse programmatically** (default output is human-readable `text`). + +## Scenarios + +### 1. Writing NutUI React component code + +Before writing any NutUI component code, look up its API first — don't rely on memory. + +```bash +# Check what props are available (grouped by table, e.g. Props / sub-component props) +nutui-react info Button --format json + +# Get a runnable demo as a starting point +nutui-react demo Button # list all demo names first +nutui-react demo Button demo1 --format json # then fetch one demo's source + +# Check component-level Design Tokens for theming (var(--nutui-*) system) +nutui-react token Button --format json +``` + +**Workflow:** `nutui-react info` → understand props → `nutui-react demo` → grab a runnable example → write code. + +### 2. Looking up full documentation + +When you need comprehensive component docs (not just the props table): + +```bash +nutui-react doc Cell --format json # full markdown docs (Chinese, default) +nutui-react doc Cell --lang en --format json # English docs +``` + +`--lang` accepts `zh` (default) or `en`. + +### 3. Exploring available components + +When the user is choosing which component to use, or you need to confirm a component exists before importing it: + +```bash +# List all components with Chinese name and version, grouped by category +nutui-react list --format json + +# Filter to a category (pass the category enName, e.g. base / feedback / nav) +nutui-react list --category feedback --format json +``` + +If you query a component name that doesn't exist, the CLI returns a "did you mean" suggestion (e.g. `Buttn` → `Button`) — use it to correct the name rather than guessing. + +### 4. Querying Design Tokens + +When customizing theme/colors/spacing, use the `var(--nutui-*)` token system rather than hardcoding values: + +```bash +# Global tokens (colors, spacing, radius, etc.) +nutui-react token --format json + +# Component-level tokens +nutui-react token Button --format json +``` + +### 5. Using as an MCP server + +If working in an IDE that supports MCP (Claude Code, Cursor, VS Code, Codex, etc.), the CLI can run as a local stdio MCP server, exposing the same knowledge-query capabilities as IDE-native tools: + +```json +{ + "mcpServers": { + "nutui-react": { + "command": "npx", + "args": ["-y", "@nutui/nutui-react-cli", "mcp"] + } + } +} +``` + +This provides 5 tools (`nutui_list`, `nutui_info`, `nutui_doc`, `nutui_demo`, `nutui_token`) and 2 prompts (`nutui-expert`, `nutui-page-generator`) via the MCP protocol. When these tools are available in the conversation, prefer calling them directly over shelling out to the CLI. + +## Commands + +| Command | Purpose | +| --- | --- | +| `nutui-react list [--category ]` | List all components (name / Chinese name / version), grouped by category | +| `nutui-react info ` | Component props table (prop / desc / type / default), grouped by table | +| `nutui-react doc [--lang zh\|en]` | Full component markdown docs (default Chinese) | +| `nutui-react demo [name]` | Omit `name` to list demos; pass `name` (e.g. `demo1`) for source | +| `nutui-react token [Component]` | Design Tokens — omit component for global tokens | +| `nutui-react mcp` | Start a local stdio MCP server for IDE integration | + +## Global Flags + +| Flag | Purpose | +| --- | --- | +| `--format, -f ` | Output format; agents should prefer `json` (default: `text`) | +| `--lang, -l ` | Doc language for `doc` / `mcp` (default: `zh`) | +| `--help, -h` | Show help | +| `--version, -v` | Print CLI version | + +## Key Rules + +1. **Always query before writing** — Don't guess NutUI APIs, prop names, or enum values from memory. Run `nutui-react info` (and `nutui-react demo` for a working example) first. +2. **Use `--format json`** — Every command supports it. Parse the JSON output rather than regex-matching the human-readable text. +3. **Confirm the component exists** — If unsure of the exact name, run `nutui-react list` or rely on the CLI's "did you mean" suggestion instead of importing a guessed name. +4. **Use Design Tokens for styling** — NutUI uses `nut-` flat BEM class names and the `var(--nutui-*)` token system. When customizing appearance, query `nutui-react token` and use tokens rather than hardcoding colors or spacing. diff --git a/packages/nutui-react-cli/skills/nutui-react/SKILL.md b/packages/nutui-react-cli/skills/nutui-react/SKILL.md index ddbc3dfdac..de80c7e507 100644 --- a/packages/nutui-react-cli/skills/nutui-react/SKILL.md +++ b/packages/nutui-react-cli/skills/nutui-react/SKILL.md @@ -1,11 +1,11 @@ --- name: nutui-react description: > - Use when the user's task involves NutUI React (@nutui/nutui-react) — writing - NutUI React components, debugging NutUI issues, or querying NutUI component - APIs/props/docs/demos/design-tokens. Triggers on NutUI-related code, imports - from '@nutui/nutui-react', or explicit NutUI questions. NutUI React is JD's - lightweight mobile (H5) component library. + 当用户的任务涉及 NutUI React(@nutui/nutui-react)时使用 —— 编写 + NutUI React 组件、调试 NutUI 问题,或查询 NutUI 组件的 + API/属性/文档/示例/设计变量(Design Token)。触发场景:与 NutUI 相关的代码、 + 从 '@nutui/nutui-react' 导入,或明确的 NutUI 相关提问。NutUI React 是京东的 + 轻量级移动端(H5)组件库。 allowed-tools: - Bash(nutui-react *) - Bash(npx -y @nutui/nutui-react-cli *) @@ -14,85 +14,85 @@ allowed-tools: # NutUI React CLI -You have access to `@nutui/nutui-react-cli` — a local CLI tool with bundled NutUI React metadata (component props, full docs, runnable demos, and Design Tokens). Use it to query component knowledge before writing code. All data is offline and packaged with the CLI — no network and no API key needed. +你可以使用 `@nutui/nutui-react-cli` —— 一个内置了 NutUI React 元数据(组件属性、完整文档、可运行示例和 Design Token)的本地 CLI 工具。在编写代码前用它查询组件知识。所有数据均为离线数据并随 CLI 一起打包 —— 无需联网,也无需 API Key。 -## Setup +## 准备工作 -Before first use, check if the CLI is available. If not, invoke it via `npx` (no global install required): +首次使用前,先检查该 CLI 是否可用。若不可用,可通过 `npx` 调用(无需全局安装): ```bash which nutui-react || echo "use: npx -y @nutui/nutui-react-cli " ``` -Both forms work — use whichever is available: +两种方式均可 —— 用哪种取决于哪种可用: -- Installed globally: `nutui-react info Button` -- Via npx (no install): `npx -y @nutui/nutui-react-cli info Button` +- 全局安装:`nutui-react info Button` +- 通过 npx(免安装):`npx -y @nutui/nutui-react-cli info Button` -Examples below use the `nutui-react` form for brevity. +下文示例为简洁起见统一使用 `nutui-react` 形式。 -**Always pass `--format json` for structured output you can parse programmatically** (default output is human-readable `text`). +**始终传入 `--format json` 以获得可编程解析的结构化输出**(默认输出为人类可读的 `text`)。 -## Scenarios +## 使用场景 -### 1. Writing NutUI React component code +### 1. 编写 NutUI React 组件代码 -Before writing any NutUI component code, look up its API first — don't rely on memory. +在编写任何 NutUI 组件代码前,先查询它的 API —— 不要依赖记忆。 ```bash -# Check what props are available (grouped by table, e.g. Props / sub-component props) +# 查看有哪些可用属性(按表格分组,例如 Props / 子组件属性) nutui-react info Button --format json -# Get a runnable demo as a starting point -nutui-react demo Button # list all demo names first -nutui-react demo Button demo1 --format json # then fetch one demo's source +# 获取一个可运行的示例作为起点 +nutui-react demo Button # 先列出所有示例名称 +nutui-react demo Button demo1 --format json # 再获取某个示例的源码 -# Check component-level Design Tokens for theming (var(--nutui-*) system) +# 查看组件级 Design Token 以便主题定制(var(--nutui-*) 体系) nutui-react token Button --format json ``` -**Workflow:** `nutui-react info` → understand props → `nutui-react demo` → grab a runnable example → write code. +**工作流:** `nutui-react info` → 理解属性 → `nutui-react demo` → 获取可运行示例 → 编写代码。 -### 2. Looking up full documentation +### 2. 查阅完整文档 -When you need comprehensive component docs (not just the props table): +当你需要完整的组件文档(而不仅仅是属性表)时: ```bash -nutui-react doc Cell --format json # full markdown docs (Chinese, default) -nutui-react doc Cell --lang en --format json # English docs +nutui-react doc Cell --format json # 完整的 Markdown 文档(默认中文) +nutui-react doc Cell --lang en --format json # 英文文档 ``` -`--lang` accepts `zh` (default) or `en`. +`--lang` 可取 `zh`(默认)或 `en`。 -### 3. Exploring available components +### 3. 浏览可用组件 -When the user is choosing which component to use, or you need to confirm a component exists before importing it: +当用户在挑选使用哪个组件,或你需要在导入前确认某个组件是否存在时: ```bash -# List all components with Chinese name and version, grouped by category +# 列出所有组件(含中文名与版本),按分类分组 nutui-react list --format json -# Filter to a category (pass the category enName, e.g. base / feedback / nav) +# 按分类筛选(传入分类的英文名,例如 base / feedback / nav) nutui-react list --category feedback --format json ``` -If you query a component name that doesn't exist, the CLI returns a "did you mean" suggestion (e.g. `Buttn` → `Button`) — use it to correct the name rather than guessing. +如果你查询的组件名称不存在,CLI 会返回「你是不是想找」的建议(例如 `Buttn` → `Button`)—— 用它来纠正名称,而不是靠猜。 -### 4. Querying Design Tokens +### 4. 查询 Design Token -When customizing theme/colors/spacing, use the `var(--nutui-*)` token system rather than hardcoding values: +在定制主题/颜色/间距时,使用 `var(--nutui-*)` 变量体系,而不是硬编码具体数值: ```bash -# Global tokens (colors, spacing, radius, etc.) +# 全局 Token(颜色、间距、圆角等) nutui-react token --format json -# Component-level tokens +# 组件级 Token nutui-react token Button --format json ``` -### 5. Using as an MCP server +### 5. 作为 MCP 服务器使用 -If working in an IDE that supports MCP (Claude Code, Cursor, VS Code, Codex, etc.), the CLI can run as a local stdio MCP server, exposing the same knowledge-query capabilities as IDE-native tools: +如果你在支持 MCP 的 IDE(Claude Code、Cursor、VS Code、Codex 等)中工作,该 CLI 可以作为本地 stdio MCP 服务器运行,以 IDE 原生工具的形式暴露相同的知识查询能力: ```json { @@ -105,31 +105,30 @@ If working in an IDE that supports MCP (Claude Code, Cursor, VS Code, Codex, etc } ``` -This provides 5 tools (`nutui_list`, `nutui_info`, `nutui_doc`, `nutui_demo`, `nutui_token`) and 2 prompts (`nutui-expert`, `nutui-page-generator`) via the MCP protocol. When these tools are available in the conversation, prefer calling them directly over shelling out to the CLI. +它通过 MCP 协议提供 5 个工具(`nutui_list`、`nutui_info`、`nutui_doc`、`nutui_demo`、`nutui_token`)和 2 个提示词(`nutui-expert`、`nutui-page-generator`)。当这些工具在对话中可用时,优先直接调用它们,而不是通过 shell 执行 CLI。 -## Commands +## 命令 -| Command | Purpose | +| 命令 | 用途 | | --- | --- | -| `nutui-react list [--category ]` | List all components (name / Chinese name / version), grouped by category | -| `nutui-react info ` | Component props table (prop / desc / type / default), grouped by table | -| `nutui-react doc [--lang zh\|en]` | Full component markdown docs (default Chinese) | -| `nutui-react demo [name]` | Omit `name` to list demos; pass `name` (e.g. `demo1`) for source | -| `nutui-react token [Component]` | Design Tokens — omit component for global tokens | -| `nutui-react mcp` | Start a local stdio MCP server for IDE integration | +| `nutui-react list [--category ]` | 列出所有组件(名称 / 中文名 / 版本),按分类分组 | +| `nutui-react info ` | 组件属性表(属性 / 说明 / 类型 / 默认值),按表格分组 | +| `nutui-react doc [--lang zh\|en]` | 组件完整 Markdown 文档(默认中文) | +| `nutui-react demo [name]` | 省略 `name` 列出示例;传入 `name`(如 `demo1`)获取源码 | +| `nutui-react token [Component]` | Design Token —— 省略组件名则返回全局 Token | -## Global Flags +## 全局参数 -| Flag | Purpose | +| 参数 | 用途 | | --- | --- | -| `--format, -f ` | Output format; agents should prefer `json` (default: `text`) | -| `--lang, -l ` | Doc language for `doc` / `mcp` (default: `zh`) | -| `--help, -h` | Show help | -| `--version, -v` | Print CLI version | +| `--format, -f ` | 输出格式;agent 应优先使用 `json`(默认:`text`) | +| `--lang, -l ` | `doc` / `mcp` 的文档语言(默认:`zh`) | +| `--help, -h` | 显示帮助 | +| `--version, -v` | 打印 CLI 版本 | -## Key Rules +## 核心规则 -1. **Always query before writing** — Don't guess NutUI APIs, prop names, or enum values from memory. Run `nutui-react info` (and `nutui-react demo` for a working example) first. -2. **Use `--format json`** — Every command supports it. Parse the JSON output rather than regex-matching the human-readable text. -3. **Confirm the component exists** — If unsure of the exact name, run `nutui-react list` or rely on the CLI's "did you mean" suggestion instead of importing a guessed name. -4. **Use Design Tokens for styling** — NutUI uses `nut-` flat BEM class names and the `var(--nutui-*)` token system. When customizing appearance, query `nutui-react token` and use tokens rather than hardcoding colors or spacing. +1. **先查询,再编写** —— 不要凭记忆猜测 NutUI 的 API、属性名或枚举值。先运行 `nutui-react info`(并用 `nutui-react demo` 获取一个可用示例)。 +2. **使用 `--format json`** —— 每个命令都支持它。解析 JSON 输出,而不是用正则匹配人类可读的文本。 +3. **确认组件存在** —— 如果不确定确切名称,运行 `nutui-react list`,或借助 CLI 的「你是不是想找」建议,而不是导入一个猜测的名称。 +4. **使用 Design Token 做样式** —— NutUI 采用 `nut-` 扁平 BEM 类名和 `var(--nutui-*)` 变量体系。定制外观时,查询 `nutui-react token` 并使用 Token,而不是硬编码颜色或间距。 diff --git a/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.en.md b/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.en.md new file mode 100644 index 0000000000..687575e7fc --- /dev/null +++ b/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.en.md @@ -0,0 +1,136 @@ +--- +name: nutui-react-taro +description: > + Use when the user's task involves NutUI React Taro (@nutui/nutui-react-taro) — + writing NutUI React Taro components for mini-programs / cross-platform (Taro) + apps, debugging NutUI Taro issues, or querying NutUI Taro component + APIs/props/docs/demos/design-tokens. Triggers on NutUI Taro-related code, + imports from '@nutui/nutui-react-taro', or explicit NutUI Taro questions. + NutUI React Taro is JD's mobile component library for Taro (mini-program / + multi-platform), sharing one codebase to target H5 and mini-programs. +allowed-tools: + - Bash(nutui-react-taro *) + - Bash(npx -y @nutui/nutui-react-taro-cli *) + - Bash(which nutui-react-taro) +--- + +# NutUI React Taro CLI + +You have access to `@nutui/nutui-react-taro-cli` — a local CLI tool with bundled NutUI React Taro metadata (component props, full docs, runnable Taro demos, and Design Tokens). Use it to query component knowledge before writing code. All data is offline and packaged with the CLI — no network and no API key needed. + +## Setup + +Before first use, check if the CLI is available. If not, invoke it via `npx` (no global install required): + +```bash +which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli " +``` + +Both forms work — use whichever is available: + +- Installed globally: `nutui-react-taro info Button` +- Via npx (no install): `npx -y @nutui/nutui-react-taro-cli info Button` + +Examples below use the `nutui-react-taro` form for brevity. + +**Always pass `--format json` for structured output you can parse programmatically** (default output is human-readable `text`). + +## Scenarios + +### 1. Writing NutUI React Taro component code + +Before writing any NutUI Taro component code, look up its API first — don't rely on memory. Note that Taro-side props may differ from the H5 package. + +```bash +# Check what props are available (grouped by table, e.g. Props / sub-component props) +nutui-react-taro info Button --format json + +# Get a runnable Taro demo as a starting point +nutui-react-taro demo Button # list all demo names first +nutui-react-taro demo Button demo1 --format json # then fetch one demo's source + +# Check component-level Design Tokens for theming (var(--nutui-*) system) +nutui-react-taro token Button --format json +``` + +**Workflow:** `nutui-react-taro info` → understand props → `nutui-react-taro demo` → grab a runnable example → write code. + +### 2. Looking up full documentation + +When you need comprehensive component docs (not just the props table): + +```bash +nutui-react-taro doc Cell --format json # full markdown docs (Chinese) +``` + +Taro docs are Chinese-only. + +### 3. Exploring available components + +When the user is choosing which component to use, or you need to confirm a component exists before importing it: + +```bash +# List all components with Chinese name and version, grouped by category +nutui-react-taro list --format json + +# Filter to a category (pass the category enName, e.g. base / feedback / nav) +nutui-react-taro list --category feedback --format json +``` + +If you query a component name that doesn't exist, the CLI returns a "did you mean" suggestion (e.g. `Buttn` → `Button`) — use it to correct the name rather than guessing. + +### 4. Querying Design Tokens + +When customizing theme/colors/spacing, use the `var(--nutui-*)` token system rather than hardcoding values: + +```bash +# Global tokens (colors, spacing, radius, etc.) +nutui-react-taro token --format json + +# Component-level tokens +nutui-react-taro token Button --format json +``` + +### 5. Using as an MCP server + +If working in an IDE that supports MCP (Claude Code, Cursor, VS Code, Codex, etc.), the CLI can run as a local stdio MCP server, exposing the same knowledge-query capabilities as IDE-native tools: + +```json +{ + "mcpServers": { + "nutui-react-taro": { + "command": "npx", + "args": ["-y", "@nutui/nutui-react-taro-cli", "mcp"] + } + } +} +``` + +This provides 5 tools (`nutui_list`, `nutui_info`, `nutui_doc`, `nutui_demo`, `nutui_token`) and 2 prompts (`nutui-expert`, `nutui-page-generator`) via the MCP protocol. When these tools are available in the conversation, prefer calling them directly over shelling out to the CLI. + +## Commands + +| Command | Purpose | +| --- | --- | +| `nutui-react-taro list [--category ]` | List all components (name / Chinese name / version), grouped by category | +| `nutui-react-taro info ` | Component props table (prop / desc / type / default), grouped by table | +| `nutui-react-taro doc ` | Full component markdown docs (Chinese) | +| `nutui-react-taro demo [name]` | Omit `name` to list demos; pass `name` (e.g. `demo1`) for source | +| `nutui-react-taro token [Component]` | Design Tokens — omit component for global tokens | +| `nutui-react-taro mcp` | Start a local stdio MCP server for IDE integration | + +## Global Flags + +| Flag | Purpose | +| --- | --- | +| `--format, -f ` | Output format; agents should prefer `json` (default: `text`) | +| `--help, -h` | Show help | +| `--version, -v` | Print CLI version | + +## Key Rules + +1. **Always query before writing** — Don't guess NutUI Taro APIs, prop names, or enum values from memory. Run `nutui-react-taro info` (and `nutui-react-taro demo` for a working example) first. Taro props can differ from the H5 package. +2. **Use `--format json`** — Every command supports it. Parse the JSON output rather than regex-matching the human-readable text. +3. **Confirm the component exists** — If unsure of the exact name, run `nutui-react-taro list` or rely on the CLI's "did you mean" suggestion instead of importing a guessed name. +4. **Use Design Tokens for styling** — NutUI uses `nut-` flat BEM class names and the `var(--nutui-*)` token system. When customizing appearance, query `nutui-react-taro token` and use tokens rather than hardcoding colors or spacing. +5. **Import from `@nutui/nutui-react-taro`** — Not `@nutui/nutui-react`. This is the Taro (mini-program / cross-platform) package. diff --git a/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md b/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md index 687575e7fc..87dae37ed9 100644 --- a/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md +++ b/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md @@ -1,13 +1,12 @@ --- name: nutui-react-taro description: > - Use when the user's task involves NutUI React Taro (@nutui/nutui-react-taro) — - writing NutUI React Taro components for mini-programs / cross-platform (Taro) - apps, debugging NutUI Taro issues, or querying NutUI Taro component - APIs/props/docs/demos/design-tokens. Triggers on NutUI Taro-related code, - imports from '@nutui/nutui-react-taro', or explicit NutUI Taro questions. - NutUI React Taro is JD's mobile component library for Taro (mini-program / - multi-platform), sharing one codebase to target H5 and mini-programs. + 当用户的任务涉及 NutUI React Taro(@nutui/nutui-react-taro)时使用 —— + 为小程序 / 跨端(Taro)应用编写 NutUI React Taro 组件、调试 NutUI Taro + 问题,或查询 NutUI Taro 组件的 API/属性/文档/示例/设计变量(Design Token)。 + 触发场景:与 NutUI Taro 相关的代码、从 '@nutui/nutui-react-taro' 导入,或 + 明确的 NutUI Taro 相关提问。NutUI React Taro 是京东面向 Taro(小程序 / + 多端)的移动端组件库,一套代码同时支持 H5 与小程序。 allowed-tools: - Bash(nutui-react-taro *) - Bash(npx -y @nutui/nutui-react-taro-cli *) @@ -16,84 +15,84 @@ allowed-tools: # NutUI React Taro CLI -You have access to `@nutui/nutui-react-taro-cli` — a local CLI tool with bundled NutUI React Taro metadata (component props, full docs, runnable Taro demos, and Design Tokens). Use it to query component knowledge before writing code. All data is offline and packaged with the CLI — no network and no API key needed. +你可以使用 `@nutui/nutui-react-taro-cli` —— 一个内置了 NutUI React Taro 元数据(组件属性、完整文档、可运行的 Taro 示例和 Design Token)的本地 CLI 工具。在编写代码前用它查询组件知识。所有数据均为离线数据并随 CLI 一起打包 —— 无需联网,也无需 API Key。 -## Setup +## 准备工作 -Before first use, check if the CLI is available. If not, invoke it via `npx` (no global install required): +首次使用前,先检查该 CLI 是否可用。若不可用,可通过 `npx` 调用(无需全局安装): ```bash which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli " ``` -Both forms work — use whichever is available: +两种方式均可 —— 用哪种取决于哪种可用: -- Installed globally: `nutui-react-taro info Button` -- Via npx (no install): `npx -y @nutui/nutui-react-taro-cli info Button` +- 全局安装:`nutui-react-taro info Button` +- 通过 npx(免安装):`npx -y @nutui/nutui-react-taro-cli info Button` -Examples below use the `nutui-react-taro` form for brevity. +下文示例为简洁起见统一使用 `nutui-react-taro` 形式。 -**Always pass `--format json` for structured output you can parse programmatically** (default output is human-readable `text`). +**始终传入 `--format json` 以获得可编程解析的结构化输出**(默认输出为人类可读的 `text`)。 -## Scenarios +## 使用场景 -### 1. Writing NutUI React Taro component code +### 1. 编写 NutUI React Taro 组件代码 -Before writing any NutUI Taro component code, look up its API first — don't rely on memory. Note that Taro-side props may differ from the H5 package. +在编写任何 NutUI Taro 组件代码前,先查询它的 API —— 不要依赖记忆。注意:Taro 端的属性可能与 H5 包不同。 ```bash -# Check what props are available (grouped by table, e.g. Props / sub-component props) +# 查看有哪些可用属性(按表格分组,例如 Props / 子组件属性) nutui-react-taro info Button --format json -# Get a runnable Taro demo as a starting point -nutui-react-taro demo Button # list all demo names first -nutui-react-taro demo Button demo1 --format json # then fetch one demo's source +# 获取一个可运行的 Taro 示例作为起点 +nutui-react-taro demo Button # 先列出所有示例名称 +nutui-react-taro demo Button demo1 --format json # 再获取某个示例的源码 -# Check component-level Design Tokens for theming (var(--nutui-*) system) +# 查看组件级 Design Token 以便主题定制(var(--nutui-*) 体系) nutui-react-taro token Button --format json ``` -**Workflow:** `nutui-react-taro info` → understand props → `nutui-react-taro demo` → grab a runnable example → write code. +**工作流:** `nutui-react-taro info` → 理解属性 → `nutui-react-taro demo` → 获取可运行示例 → 编写代码。 -### 2. Looking up full documentation +### 2. 查阅完整文档 -When you need comprehensive component docs (not just the props table): +当你需要完整的组件文档(而不仅仅是属性表)时: ```bash -nutui-react-taro doc Cell --format json # full markdown docs (Chinese) +nutui-react-taro doc Cell --format json # 完整的 Markdown 文档(中文) ``` -Taro docs are Chinese-only. +Taro 文档仅提供中文。 -### 3. Exploring available components +### 3. 浏览可用组件 -When the user is choosing which component to use, or you need to confirm a component exists before importing it: +当用户在挑选使用哪个组件,或你需要在导入前确认某个组件是否存在时: ```bash -# List all components with Chinese name and version, grouped by category +# 列出所有组件(含中文名与版本),按分类分组 nutui-react-taro list --format json -# Filter to a category (pass the category enName, e.g. base / feedback / nav) +# 按分类筛选(传入分类的英文名,例如 base / feedback / nav) nutui-react-taro list --category feedback --format json ``` -If you query a component name that doesn't exist, the CLI returns a "did you mean" suggestion (e.g. `Buttn` → `Button`) — use it to correct the name rather than guessing. +如果你查询的组件名称不存在,CLI 会返回「你是不是想找」的建议(例如 `Buttn` → `Button`)—— 用它来纠正名称,而不是靠猜。 -### 4. Querying Design Tokens +### 4. 查询 Design Token -When customizing theme/colors/spacing, use the `var(--nutui-*)` token system rather than hardcoding values: +在定制主题/颜色/间距时,使用 `var(--nutui-*)` 变量体系,而不是硬编码具体数值: ```bash -# Global tokens (colors, spacing, radius, etc.) +# 全局 Token(颜色、间距、圆角等) nutui-react-taro token --format json -# Component-level tokens +# 组件级 Token nutui-react-taro token Button --format json ``` -### 5. Using as an MCP server +### 5. 作为 MCP 服务器使用 -If working in an IDE that supports MCP (Claude Code, Cursor, VS Code, Codex, etc.), the CLI can run as a local stdio MCP server, exposing the same knowledge-query capabilities as IDE-native tools: +如果你在支持 MCP 的 IDE(Claude Code、Cursor、VS Code、Codex 等)中工作,该 CLI 可以作为本地 stdio MCP 服务器运行,以 IDE 原生工具的形式暴露相同的知识查询能力: ```json { @@ -106,31 +105,30 @@ If working in an IDE that supports MCP (Claude Code, Cursor, VS Code, Codex, etc } ``` -This provides 5 tools (`nutui_list`, `nutui_info`, `nutui_doc`, `nutui_demo`, `nutui_token`) and 2 prompts (`nutui-expert`, `nutui-page-generator`) via the MCP protocol. When these tools are available in the conversation, prefer calling them directly over shelling out to the CLI. +它通过 MCP 协议提供 5 个工具(`nutui_list`、`nutui_info`、`nutui_doc`、`nutui_demo`、`nutui_token`)和 2 个提示词(`nutui-expert`、`nutui-page-generator`)。当这些工具在对话中可用时,优先直接调用它们,而不是通过 shell 执行 CLI。 -## Commands +## 命令 -| Command | Purpose | +| 命令 | 用途 | | --- | --- | -| `nutui-react-taro list [--category ]` | List all components (name / Chinese name / version), grouped by category | -| `nutui-react-taro info ` | Component props table (prop / desc / type / default), grouped by table | -| `nutui-react-taro doc ` | Full component markdown docs (Chinese) | -| `nutui-react-taro demo [name]` | Omit `name` to list demos; pass `name` (e.g. `demo1`) for source | -| `nutui-react-taro token [Component]` | Design Tokens — omit component for global tokens | -| `nutui-react-taro mcp` | Start a local stdio MCP server for IDE integration | +| `nutui-react-taro list [--category ]` | 列出所有组件(名称 / 中文名 / 版本),按分类分组 | +| `nutui-react-taro info ` | 组件属性表(属性 / 说明 / 类型 / 默认值),按表格分组 | +| `nutui-react-taro doc ` | 组件完整 Markdown 文档(中文) | +| `nutui-react-taro demo [name]` | 省略 `name` 列出示例;传入 `name`(如 `demo1`)获取源码 | +| `nutui-react-taro token [Component]` | Design Token —— 省略组件名则返回全局 Token | -## Global Flags +## 全局参数 -| Flag | Purpose | +| 参数 | 用途 | | --- | --- | -| `--format, -f ` | Output format; agents should prefer `json` (default: `text`) | -| `--help, -h` | Show help | -| `--version, -v` | Print CLI version | +| `--format, -f ` | 输出格式;agent 应优先使用 `json`(默认:`text`) | +| `--help, -h` | 显示帮助 | +| `--version, -v` | 打印 CLI 版本 | -## Key Rules +## 核心规则 -1. **Always query before writing** — Don't guess NutUI Taro APIs, prop names, or enum values from memory. Run `nutui-react-taro info` (and `nutui-react-taro demo` for a working example) first. Taro props can differ from the H5 package. -2. **Use `--format json`** — Every command supports it. Parse the JSON output rather than regex-matching the human-readable text. -3. **Confirm the component exists** — If unsure of the exact name, run `nutui-react-taro list` or rely on the CLI's "did you mean" suggestion instead of importing a guessed name. -4. **Use Design Tokens for styling** — NutUI uses `nut-` flat BEM class names and the `var(--nutui-*)` token system. When customizing appearance, query `nutui-react-taro token` and use tokens rather than hardcoding colors or spacing. -5. **Import from `@nutui/nutui-react-taro`** — Not `@nutui/nutui-react`. This is the Taro (mini-program / cross-platform) package. +1. **先查询,再编写** —— 不要凭记忆猜测 NutUI Taro 的 API、属性名或枚举值。先运行 `nutui-react-taro info`(并用 `nutui-react-taro demo` 获取一个可用示例)。Taro 属性可能与 H5 包不同。 +2. **使用 `--format json`** —— 每个命令都支持它。解析 JSON 输出,而不是用正则匹配人类可读的文本。 +3. **确认组件存在** —— 如果不确定确切名称,运行 `nutui-react-taro list`,或借助 CLI 的「你是不是想找」建议,而不是导入一个猜测的名称。 +4. **使用 Design Token 做样式** —— NutUI 采用 `nut-` 扁平 BEM 类名和 `var(--nutui-*)` 变量体系。定制外观时,查询 `nutui-react-taro token` 并使用 Token,而不是硬编码颜色或间距。 +5. **从 `@nutui/nutui-react-taro` 导入** —— 不是 `@nutui/nutui-react`。这是 Taro(小程序 / 跨端)包。 From 41296d988ba21e7ded3bb9f5552986283b4df0b7 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 21 Aug 2026 12:29:01 +0800 Subject: [PATCH 05/25] feat: add detailed documentation for migrating from NutUI React to NutUI React Taro, outlining phases and best practices for a successful transition --- .../skills/nutui-react-to-taro/SKILL.en.md | 243 ++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md diff --git a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md new file mode 100644 index 0000000000..043b7e6221 --- /dev/null +++ b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md @@ -0,0 +1,243 @@ +--- +name: nutui-react-to-taro +description: > + Use when migrating a project (or a code snippet) from NutUI React + (@nutui/nutui-react, H5) to NutUI React Taro (@nutui/nutui-react-taro, + mini-program / cross-platform Taro). Trigger scenarios such as "migrate NutUI + React to Taro", "make this H5 NutUI page run inside a mini-program", or + converting H5 NutUI components to the Taro runtime. The two packages share the + same set of components, and the vast majority map one-to-one — so the real + work is package-name / import rewrites, native-tag → Taro-component + replacement, style-unit fixes, and cross-checking the few components whose + props differ across the two ends. +allowed-tools: + - Bash(nutui-react *) + - Bash(nutui-react-taro *) + - Bash(npx -y @nutui/nutui-react-cli *) + - Bash(npx -y @nutui/nutui-react-taro-cli *) + - Bash(which nutui-react) + - Bash(which nutui-react-taro) +--- + +# NutUI React (H5) → NutUI React Taro migration + +You are responsible for migrating code from `@nutui/nutui-react` (H5) to +`@nutui/nutui-react-taro` (Taro mini-program / cross-platform). The two packages +are built from the **same codebase**, so nearly every component shares the same +name and largely the same props across both ends. This makes the migration +highly rule-based — but a few steps still require real judgment and cannot be +done with blind find-and-replace. + +Two CLIs back this work; both are offline, with metadata shipped alongside the packages: + +- `@nutui/nutui-react-cli` — **source-end** (H5) source of truth: `nutui-react info ` +- `@nutui/nutui-react-taro-cli` — **target-end** (Taro) source of truth: `nutui-react-taro info ` + +If a CLI is not on PATH, invoke it via npx (no install needed): + +```bash +which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli " +``` + +**The most important habit: for every component you touch, diff its props with +both CLIs before rewriting.** Props are usually identical, but once they differ +(Uploader, Image, InputNumber, etc.) blindly copying them produces code that +silently fails on the mini-program. Always pass `--format json` and parse it. + +## Migration flow + +Execute the phases below in order. Do not skip the scan — it is what tells you which files are risky. + +### Phase 0 — Environment setup (project config, do this first) + +Migrated code can only run in Taro if the project is configured properly. The +authoritative source is NutUI's official "Getting Started" (start-react) docs. + +1. **Install dependencies** (ask the user for consent before running the install): + - `@nutui/nutui-react-taro`, `@nutui/icons-react-taro` + - `@tarojs/plugin-html` — **its version must match the project's Taro version** + - `babel-plugin-import` (only if the project needs on-demand imports) +2. **Modify `config/index.js`** — enable the HTML plugin and set the design size + so NutUI (a 375-based library) scales correctly: + ```js + config = { + plugins: ['@tarojs/plugin-html'], + designWidth(input) { + if (input?.file?.replace(/\\+/g, '/').indexOf('@nutui') > -1) return 375 + return 750 + }, + deviceRatio: { 640: 2.34 / 2, 750: 1, 828: 1.81 / 2, 375: 2 / 1 }, + } + ``` +3. **Import the global stylesheet at the app entry** (`app.tsx` / `app.ts`): + ```js + import '@nutui/nutui-react-taro/dist/style.css' + ``` + +You may edit `config/index.js` and the entry file directly. Confirm with the +user before installing dependencies. + +### Phase 1 — Scan and inventory + +Find all NutUI usage and flag high-risk files up front: + +```bash +# which files import the H5 package +grep -rn "@nutui/nutui-react\b\|@nutui/icons-react\b" src --include=*.tsx --include=*.ts + +# high-risk signals — these files need line-by-line human / AI judgment (see Phase 3): +grep -rln "\bAudio\b" src # Audio has no counterpart on the Taro end (see pitfalls) +grep -rln "document\.\|window\.\|localStorage\|URL.createObjectURL\|addEventListener" src +grep -rln "getElementById\|querySelector\|createElement\|canvas" src # canvas / DOM logic +``` + +List the components involved, then confirm each one exists on the Taro end: + +```bash +nutui-react-taro list --format json # confirm component names / spot the Audio gap +``` + +### Phase 2 — Mechanical rewrite (rules ①–④) + +Process each file with the rule table below. These are rule-based enough to do +quickly, but ② and ③ still need light judgment (see notes). + +### Phase 3 — Semantic rewrite and props cross-check (rules ⑤–⑥) + +For every high-risk file flagged in Phase 1, and every component you migrate: + +```bash +# diff props: what the H5 end has vs. what the Taro end accepts +nutui-react info Uploader --format json +nutui-react-taro info Uploader --format json +# for components needing a semantic rewrite (e.g. Signature), read the full Taro doc first +nutui-react-taro doc Signature --format json +``` + +Rewrite Web-only APIs into Taro APIs, remove / replace props the Taro end does +not accept, and handle the pitfalls below. + +### Phase 4 — Verification + +- Build the Taro target and confirm it compiles: e.g. + `taro build --type weapp --watch` (or `--type h5`). +- Manually re-check every high-risk file — **a passing compile does not mean** + the canvas / Web API rewrites behave correctly. +- Report which files were fully auto-migrated and which need user review. + +## Rule table (before → after) + +### ① Package names and imports — pure replacement + +```diff +- import { Button, Cell } from '@nutui/nutui-react' ++ import { Button, Cell } from '@nutui/nutui-react-taro' +- import { Dongdong } from '@nutui/icons-react' ++ import { Dongdong } from '@nutui/icons-react-taro' +``` + +### ② Native HTML tags → Taro components — replace + add import + +Taro has no DOM. Replace native tags and add the corresponding import from `@tarojs/components`. + +| H5 | Taro | Notes | +| --- | --- | --- | +| `
    ` | `` | block-level container | +| `

    ` | `` | | +| `` | `` or `` | **`` is for pure inline text only; use `` if it contains child elements** | +| `` | `` | | + +```diff ++ import { View } from '@tarojs/components' + setIsVisible(!isVisible)}> +- Basic usage +-

    {val}
    ++ Basic usage ++ {val} + +``` + +### ③ Style units — bare px and logical properties + +- Bare numeric px must become strings: `margin: 8` → `margin: '8px'`. +- Mini-programs do not support logical properties: `marginInlineStart` → + `marginLeft`, `insetInlineStart` → `left`, etc. +- For values that need cross-device scaling, use `pxTransform(10)` imported from + `@nutui/nutui-react-taro` (returns an rpx-adapted length). + +```diff +- const marginStyle = { margin: 8 } ++ const marginStyle = { margin: '8px' } +``` + +### ④ Touch event types + +Mini-program touch events are not `MouseEvent`. Loosen the type and import +`ITouchEvent` from `@tarojs/components`. + +```diff ++ import { ITouchEvent } from '@tarojs/components' +- const testClick = (event: React.MouseEvent) => {} ++ const testClick = (event: React.MouseEvent | ITouchEvent) => {} +``` + +### ⑤ Web-only API → Taro API — requires reasoning, rewrite case by case + +There is no `window` / `document` / DOM in a mini-program. Map these to +`@tarojs/taro` or the component's own capabilities: + +| H5 pattern | Taro replacement | +| --- | --- | +| `alert` / popping a toast via DOM | `Taro.showToast(...)` (`import Taro from '@tarojs/taro'`) | +| `URL.createObjectURL(file)` | use the upload result URL / temp path from `Taro.chooseImage` | +| `document.createElement` + DOM manipulation | delete it; drive via component props / ref instead | +| `window.location` / route navigation | `Taro.navigateTo` / `Taro.redirectTo` | +| `localStorage` | `Taro.setStorageSync` / `Taro.getStorageSync` | +| `addEventListener('scroll')` | Taro page / scroll events or component props | + +### ⑥ Component prop differences — cross-check with both CLIs + +The vast majority of props are identical, but some components genuinely differ. +**Never assume — diff.** Confirmed examples (verify live at migration time, +versions drift): + +| Component | H5-only props | Taro-only props | Handling | +| --- | --- | --- | --- | +| `Uploader` | `accept`, `capture` | `mediaType`, `sizeType`, `sourceType`, `camera` | re-express the intent with Taro's file-picking props | +| `Image` | `fit`, `lazy`, `position`, `alt` | — | remove / remap (e.g. `fit` → check the CLI doc for `mode` semantics) | +| `InputNumber` | `select` | `type` | check the CLI doc | +| `Button` | — | (`openType`, `hoverClass` … are mini-program pass-through attrs) | add mini-program-specific props as needed | + +## Pitfalls (blind replacement gets these wrong) + +1. **`Audio` has no counterpart on the Taro end.** It only exists in the H5 + package. When a file uses NutUI's `Audio`, stop and tell the user — suggest + `Taro.createInnerAudioContext()` or a custom solution. Do not invent an + import out of thin air. +2. **Do not blindly replace every `document`.** Some components accept it as-is + — e.g. `Popup`'s `portal={document.body}` **stays unchanged** on the Taro end + (the component handles it). Judge by component semantics / CLI doc, not by grep. +3. **Canvas-based components (e.g. `Signature`) are a semantic rewrite.** The H5 + end often has hand-written DOM manipulation (`document.createElement('img')`, + appending to a node). On the Taro end, delete that DOM logic and use the + component's `canvasId` prop + ref methods. Read `nutui-react-taro doc + Signature` first. +4. **`` → `` or ``.** `` is inline and for pure text + only; wrapping child elements in `` breaks the layout. Use `` + when there are nested elements. + +## Core rules + +1. **Before rewriting each component, cross-check its props with `nutui-react + info ` and `nutui-react-taro info `.** This is the heart of the whole + migration — see rule ⑥. +2. **Always use `--format json`** — parse the structured output, do not regex + the text. +3. **Confirm the component exists on the Taro end** with `nutui-react-taro + list`; watch for the `Audio` gap. +4. **Rules ①–④ are mechanical; ⑤–⑥ and the pitfalls need judgment** — handle + the latter case by case, and flag anything that cannot be safely + auto-migrated for user review. Do not claim a file is fully migrated until + the Taro build compiles. +5. **Do the environment setup first** — migrating code is pointless if the + project cannot compile Taro + NutUI. From eb20bc053edb64c3f61febea5d47e26bca4d3cb9 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 21 Aug 2026 15:02:16 +0800 Subject: [PATCH 06/25] fix: update CLI usage instructions in documentation for NutUI React and NutUI React Taro, ensuring clarity on invoking commands with npx --- .../nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md | 3 ++- packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md index 043b7e6221..102be8069e 100644 --- a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md +++ b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md @@ -36,7 +36,8 @@ Two CLIs back this work; both are offline, with metadata shipped alongside the p If a CLI is not on PATH, invoke it via npx (no install needed): ```bash -which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli " +which nutui-react || echo "use: npx -y @nutui/nutui-react-cli info " +which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli info " ``` **The most important habit: for every component you touch, diff its props with diff --git a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md index 546ef6c934..a5666ecbb5 100644 --- a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md +++ b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md @@ -31,7 +31,8 @@ allowed-tools: 若某个 CLI 不在 PATH 上,用 npx 调用(无需安装): ```bash -which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli " +which nutui-react || echo "use: npx -y @nutui/nutui-react-cli info " +which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli info " ``` **最重要的习惯:每碰一个组件,改写前先用两个 CLI 对比它的 props。** props 通常 From ca0cc9af24e566ca0f0b110e470f8df124025452 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 21 Aug 2026 15:12:45 +0800 Subject: [PATCH 07/25] docs: enhance migration documentation for NutUI React to Taro, clarifying the handling of web-only APIs and their Taro equivalents --- .../skills/nutui-react-to-taro/SKILL.en.md | 10 +++++++--- .../skills/nutui-react-to-taro/SKILL.md | 7 +++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md index 102be8069e..0b5b783fbf 100644 --- a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md +++ b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md @@ -184,14 +184,18 @@ Mini-program touch events are not `MouseEvent`. Loosen the type and import ### ⑤ Web-only API → Taro API — requires reasoning, rewrite case by case -There is no `window` / `document` / DOM in a mini-program. Map these to -`@tarojs/taro` or the component's own capabilities: +The Taro runtime provides only a **limited emulation** of `window` / `document` / +DOM, and its coverage drifts by target version — **do not delete wholesale**. +Judge case by case: map to `@tarojs/taro` or the component's own capabilities +where possible; keep what the runtime genuinely supports (e.g. the async +`getBoundingClientRect`); delete only logic that truly cannot be migrated. Common +mappings: | H5 pattern | Taro replacement | | --- | --- | | `alert` / popping a toast via DOM | `Taro.showToast(...)` (`import Taro from '@tarojs/taro'`) | | `URL.createObjectURL(file)` | use the upload result URL / temp path from `Taro.chooseImage` | -| `document.createElement` + DOM manipulation | delete it; drive via component props / ref instead | +| `document.createElement` + manual DOM manipulation | prefer component props / ref; when you genuinely need to touch nodes use APIs like `Taro.createSelectorQuery`, don't blindly delete the logic | | `window.location` / route navigation | `Taro.navigateTo` / `Taro.redirectTo` | | `localStorage` | `Taro.setStorageSync` / `Taro.getStorageSync` | | `addEventListener('scroll')` | Taro page / scroll events or component props | diff --git a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md index a5666ecbb5..8d05623bfe 100644 --- a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md +++ b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md @@ -174,13 +174,16 @@ Taro 没有 DOM。替换原生标签并补上 `@tarojs/components` 的 import。 ### ⑤ Web-only API → Taro API —— 需要推理,逐处改写 -小程序里没有 `window` / `document` / DOM。映射到 `@tarojs/taro` 或组件自身能力: +Taro 运行时对 `window` / `document` / DOM 只做了**受限模拟**,能力随目标版本漂移 +——**别一律删除**。逐处判断:能映射到 `@tarojs/taro` 或组件自身能力的就映射;运行 +时确实支持的(如异步版 `getBoundingClientRect`)保留;只有真正无法迁移的才删。常见 +映射: | H5 写法 | Taro 替代 | | --- | --- | | `alert` / 用 DOM 弹 toast | `Taro.showToast(...)`(`import Taro from '@tarojs/taro'`) | | `URL.createObjectURL(file)` | 用上传结果 URL / `Taro.chooseImage` 的临时路径 | -| `document.createElement` + DOM 操作 | 删除;改用组件 props / ref 驱动 | +| `document.createElement` + 手动 DOM 操作 | 优先用组件 props / ref 表达;确需操作节点时用 `Taro.createSelectorQuery` 等 API,勿盲目删逻辑 | | `window.location` / 路由跳转 | `Taro.navigateTo` / `Taro.redirectTo` | | `localStorage` | `Taro.setStorageSync` / `Taro.getStorageSync` | | `addEventListener('scroll')` | Taro 页面 / 滚动事件或组件 props | From 4e1c8008d2e640e43bfdd74bb7f9e75c80eb700e Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 21 Aug 2026 15:39:44 +0800 Subject: [PATCH 08/25] docs: add command for starting local stdio MCP server in NutUI React Taro CLI documentation --- packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md b/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md index 87dae37ed9..35ebbf820c 100644 --- a/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md +++ b/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md @@ -116,6 +116,7 @@ nutui-react-taro token Button --format json | `nutui-react-taro doc ` | 组件完整 Markdown 文档(中文) | | `nutui-react-taro demo [name]` | 省略 `name` 列出示例;传入 `name`(如 `demo1`)获取源码 | | `nutui-react-taro token [Component]` | Design Token —— 省略组件名则返回全局 Token | +| `nutui-react-taro mcp` | 启动本地 stdio MCP 服务器,供 IDE 集成 | ## 全局参数 From 2f5353d3e7b595ec33d3c06815b9873b7d7eedc1 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 21 Aug 2026 15:51:33 +0800 Subject: [PATCH 09/25] docs: update CLI usage instructions to include --format json option for NutUI React and NutUI React Taro --- .../nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md | 6 +++--- .../nutui-react-cli/skills/nutui-react-to-taro/SKILL.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md index 0b5b783fbf..f1b65b541f 100644 --- a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md +++ b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.en.md @@ -36,8 +36,8 @@ Two CLIs back this work; both are offline, with metadata shipped alongside the p If a CLI is not on PATH, invoke it via npx (no install needed): ```bash -which nutui-react || echo "use: npx -y @nutui/nutui-react-cli info " -which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli info " +which nutui-react || echo "use: npx -y @nutui/nutui-react-cli info --format json" +which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli info --format json" ``` **The most important habit: for every component you touch, diff its props with @@ -194,7 +194,7 @@ mappings: | H5 pattern | Taro replacement | | --- | --- | | `alert` / popping a toast via DOM | `Taro.showToast(...)` (`import Taro from '@tarojs/taro'`) | -| `URL.createObjectURL(file)` | use the upload result URL / temp path from `Taro.chooseImage` | +| `URL.createObjectURL(file)` | pick the matching Taro chooser/upload API by file type (`Taro.chooseMedia` for images/video; check the `@tarojs/taro` docs for other types), then use its temp path — don't force video / audio / generic files through image picking | | `document.createElement` + manual DOM manipulation | prefer component props / ref; when you genuinely need to touch nodes use APIs like `Taro.createSelectorQuery`, don't blindly delete the logic | | `window.location` / route navigation | `Taro.navigateTo` / `Taro.redirectTo` | | `localStorage` | `Taro.setStorageSync` / `Taro.getStorageSync` | diff --git a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md index 8d05623bfe..934de13590 100644 --- a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md +++ b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md @@ -31,8 +31,8 @@ allowed-tools: 若某个 CLI 不在 PATH 上,用 npx 调用(无需安装): ```bash -which nutui-react || echo "use: npx -y @nutui/nutui-react-cli info " -which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli info " +which nutui-react || echo "use: npx -y @nutui/nutui-react-cli info --format json" +which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli info --format json" ``` **最重要的习惯:每碰一个组件,改写前先用两个 CLI 对比它的 props。** props 通常 @@ -182,7 +182,7 @@ Taro 运行时对 `window` / `document` / DOM 只做了**受限模拟**,能力 | H5 写法 | Taro 替代 | | --- | --- | | `alert` / 用 DOM 弹 toast | `Taro.showToast(...)`(`import Taro from '@tarojs/taro'`) | -| `URL.createObjectURL(file)` | 用上传结果 URL / `Taro.chooseImage` 的临时路径 | +| `URL.createObjectURL(file)` | 按文件类型选对应的 Taro 选择/上传 API(图片/视频用 `Taro.chooseMedia`,其他类型查 `@tarojs/taro` 文档),取其临时路径;别把视频/音频/普通文件一律套图片选择 | | `document.createElement` + 手动 DOM 操作 | 优先用组件 props / ref 表达;确需操作节点时用 `Taro.createSelectorQuery` 等 API,勿盲目删逻辑 | | `window.location` / 路由跳转 | `Taro.navigateTo` / `Taro.redirectTo` | | `localStorage` | `Taro.setStorageSync` / `Taro.getStorageSync` | From 35de83f42dea90c73ce1b99151208d9c5ebae2b8 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 21 Aug 2026 16:39:50 +0800 Subject: [PATCH 10/25] =?UTF-8?q?chore:=20=E4=B8=AD=E6=96=87=E7=AC=A6?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../skills/nutui-react-to-taro/SKILL.md | 98 +++++++++---------- .../skills/nutui-react/SKILL.md | 50 +++++----- .../skills/nutui-react-taro/SKILL.md | 50 +++++----- 3 files changed, 99 insertions(+), 99 deletions(-) diff --git a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md index 934de13590..9c9b43e519 100644 --- a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md +++ b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md @@ -1,8 +1,8 @@ --- name: nutui-react-to-taro description: > - 当需要把项目(或代码片段)从 NutUI React(@nutui/nutui-react,H5)迁移到 - NutUI React Taro(@nutui/nutui-react-taro,小程序 / 跨端 Taro)时使用。触发场景 + 当需要把项目(或代码片段)从 NutUI React(@nutui/nutui-react,H5)迁移到 + NutUI React Taro(@nutui/nutui-react-taro,小程序 / 跨端 Taro)时使用。触发场景 如「把 NutUI React 迁移到 Taro」「让这个 H5 的 NutUI 页面能在小程序里跑」,或将 H5 的 NutUI 组件转换到 Taro 运行时。两个包共用同一套组件,绝大多数组件一一对应——真正 的工作是包名 / import 改写、原生标签 → Taro 组件替换、样式单位修正,以及对少数 @@ -16,44 +16,44 @@ allowed-tools: - Bash(which nutui-react-taro) --- -# NutUI React(H5)→ NutUI React Taro 迁移 +# NutUI React(H5)→ NutUI React Taro 迁移 -你负责把代码从 `@nutui/nutui-react`(H5)迁移到 `@nutui/nutui-react-taro` -(Taro 小程序 / 跨端)。两个包由**同一套 codebase** 构建,因此几乎每个组件在两端 +你负责把代码从 `@nutui/nutui-react`(H5)迁移到 `@nutui/nutui-react-taro` +(Taro 小程序 / 跨端)。两个包由**同一套 codebase** 构建,因此几乎每个组件在两端 都同名、props 也大体一致。这让迁移高度规则化——但仍有少数环节需要真正的判断, 不能无脑查找替换。 -有两个 CLI 支撑本工作,均离线、元数据随包分发: +有两个 CLI 支撑本工作,均离线、元数据随包分发: -- `@nutui/nutui-react-cli` —— **源端**(H5)真值:`nutui-react info ` -- `@nutui/nutui-react-taro-cli` —— **目标端**(Taro)真值:`nutui-react-taro info ` +- `@nutui/nutui-react-cli` —— **源端**(H5)真值:`nutui-react info ` +- `@nutui/nutui-react-taro-cli` —— **目标端**(Taro)真值:`nutui-react-taro info ` -若某个 CLI 不在 PATH 上,用 npx 调用(无需安装): +若某个 CLI 不在 PATH 上,用 npx 调用(无需安装): ```bash which nutui-react || echo "use: npx -y @nutui/nutui-react-cli info --format json" which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli info --format json" ``` -**最重要的习惯:每碰一个组件,改写前先用两个 CLI 对比它的 props。** props 通常 -一致,但一旦不同(Uploader、Image、InputNumber 等),盲目照搬会产出在小程序上 +**最重要的习惯:每碰一个组件,改写前先用两个 CLI 对比它的 props。** props 通常 +一致,但一旦不同(Uploader、Image、InputNumber 等),盲目照搬会产出在小程序上 悄悄失效的代码。始终传 `--format json` 并解析它。 ## 迁移流程 按序执行以下阶段。不要跳过扫描——正是它告诉你哪些文件有风险。 -### 阶段 0 —— 环境准备(项目配置,最先做) +### 阶段 0 —— 环境准备(项目配置,最先做) -迁移后的代码在 Taro 里跑起来的前提是项目已配置好。权威来源:NutUI 官方「快速上手」 -(start-react)文档。 +迁移后的代码在 Taro 里跑起来的前提是项目已配置好。权威来源:NutUI 官方「快速上手」 +(start-react)文档。 -1. **安装依赖**(执行安装前先征求用户同意): +1. **安装依赖**(执行安装前先征求用户同意): - `@nutui/nutui-react-taro`、`@nutui/icons-react-taro` - `@tarojs/plugin-html` —— **版本必须与项目的 Taro 版本一致** - - `babel-plugin-import`(仅当项目需要按需引入时) -2. **修改 `config/index.js`** —— 开启 HTML 插件并设置设计尺寸,让 NutUI(基于 375 - 的库)正确缩放: + - `babel-plugin-import`(仅当项目需要按需引入时) +2. **修改 `config/index.js`** —— 开启 HTML 插件并设置设计尺寸,让 NutUI(基于 375 + 的库)正确缩放: ```js config = { plugins: ['@tarojs/plugin-html'], @@ -64,7 +64,7 @@ which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli info deviceRatio: { 640: 2.34 / 2, 750: 1, 828: 1.81 / 2, 375: 2 / 1 }, } ``` -3. **在应用入口引入全局样式**(`app.tsx` / `app.ts`): +3. **在应用入口引入全局样式**(`app.tsx` / `app.ts`): ```js import '@nutui/nutui-react-taro/dist/style.css' ``` @@ -73,7 +73,7 @@ which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli info ### 阶段 1 —— 扫描盘点 -找出所有 NutUI 用法,并在开头标记高风险文件: +找出所有 NutUI 用法,并在开头标记高风险文件: ```bash # 哪些文件 import 了 H5 包 @@ -85,19 +85,19 @@ grep -rln "document\.\|window\.\|localStorage\|URL.createObjectURL\|addEventList grep -rln "getElementById\|querySelector\|createElement\|canvas" src # canvas / DOM 逻辑 ``` -列出涉及的组件,再确认每个在 Taro 端都存在: +列出涉及的组件,再确认每个在 Taro 端都存在: ```bash nutui-react-taro list --format json # 确认组件名 / 发现 Audio 缺口 ``` -### 阶段 2 —— 机械改写(规则 ①–④) +### 阶段 2 —— 机械改写(规则 ①–④) -按下方规则表逐文件处理。这些足够规则化、可快速完成,但 ② 和 ③ 仍需轻度判断(见备注)。 +按下方规则表逐文件处理。这些足够规则化、可快速完成,但 ② 和 ③ 仍需轻度判断(见备注)。 -### 阶段 3 —— 语义改写与 props 交叉核对(规则 ⑤–⑥) +### 阶段 3 —— 语义改写与 props 交叉核对(规则 ⑤–⑥) -对阶段 1 标记的每个高风险文件、以及你迁移的每个组件: +对阶段 1 标记的每个高风险文件、以及你迁移的每个组件: ```bash # 对比 props:H5 端有哪些 vs. Taro 端接受哪些 @@ -111,12 +111,12 @@ nutui-react-taro doc Signature --format json ### 阶段 4 —— 验证 -- 构建 Taro 目标端并确认编译通过:如 - `taro build --type weapp --watch`(或 `--type h5`)。 +- 构建 Taro 目标端并确认编译通过:如 + `taro build --type weapp --watch`(或 `--type h5`)。 - 手动复查每个高风险文件——**编译通过不代表** canvas / Web API 的改写行为正确。 - 报告哪些文件已完全自动迁移、哪些需要用户复核。 -## 规则表(改写前 → 改写后) +## 规则表(改写前 → 改写后) ### ① 包名与 import —— 纯替换 @@ -135,7 +135,7 @@ Taro 没有 DOM。替换原生标签并补上 `@tarojs/components` 的 import。 | --- | --- | --- | | `
    ` | `` | 块级容器 | | `

    ` | `` | | -| `` | `` 或 `` | **`` 仅用于纯行内文本;若含子元素则用 ``** | +| `` | `` 或 `` | **`` 仅用于纯行内文本;若含子元素则用 ``** | | `` | `` | | ```diff @@ -150,11 +150,11 @@ Taro 没有 DOM。替换原生标签并补上 `@tarojs/components` 的 import。 ### ③ 样式单位 —— 裸 px 与逻辑属性 -- 裸数字 px 必须转成字符串:`margin: 8` → `margin: '8px'`。 -- 小程序不支持逻辑属性:`marginInlineStart` → `marginLeft`、 +- 裸数字 px 必须转成字符串:`margin: 8` → `margin: '8px'`。 +- 小程序不支持逻辑属性:`marginInlineStart` → `marginLeft`、 `insetInlineStart` → `left` 等。 - 需要跨设备缩放的值,用从 `@nutui/nutui-react-taro` 引入的 `pxTransform(10)` - (返回按 rpx 适配的长度)。 + (返回按 rpx 适配的长度)。 ```diff - const marginStyle = { margin: 8 } @@ -174,16 +174,16 @@ Taro 没有 DOM。替换原生标签并补上 `@tarojs/components` 的 import。 ### ⑤ Web-only API → Taro API —— 需要推理,逐处改写 -Taro 运行时对 `window` / `document` / DOM 只做了**受限模拟**,能力随目标版本漂移 -——**别一律删除**。逐处判断:能映射到 `@tarojs/taro` 或组件自身能力的就映射;运行 -时确实支持的(如异步版 `getBoundingClientRect`)保留;只有真正无法迁移的才删。常见 -映射: +Taro 运行时对 `window` / `document` / DOM 只做了**受限模拟**,能力随目标版本漂移 +——**别一律删除**。逐处判断:能映射到 `@tarojs/taro` 或组件自身能力的就映射;运行 +时确实支持的(如异步版 `getBoundingClientRect`)保留;只有真正无法迁移的才删。常见 +映射: | H5 写法 | Taro 替代 | | --- | --- | -| `alert` / 用 DOM 弹 toast | `Taro.showToast(...)`(`import Taro from '@tarojs/taro'`) | -| `URL.createObjectURL(file)` | 按文件类型选对应的 Taro 选择/上传 API(图片/视频用 `Taro.chooseMedia`,其他类型查 `@tarojs/taro` 文档),取其临时路径;别把视频/音频/普通文件一律套图片选择 | -| `document.createElement` + 手动 DOM 操作 | 优先用组件 props / ref 表达;确需操作节点时用 `Taro.createSelectorQuery` 等 API,勿盲目删逻辑 | +| `alert` / 用 DOM 弹 toast | `Taro.showToast(...)`(`import Taro from '@tarojs/taro'`) | +| `URL.createObjectURL(file)` | 按文件类型选对应的 Taro 选择/上传 API(图片/视频用 `Taro.chooseMedia`,其他类型查 `@tarojs/taro` 文档),取其临时路径;别把视频/音频/普通文件一律套图片选择 | +| `document.createElement` + 手动 DOM 操作 | 优先用组件 props / ref 表达;确需操作节点时用 `Taro.createSelectorQuery` 等 API,勿盲目删逻辑 | | `window.location` / 路由跳转 | `Taro.navigateTo` / `Taro.redirectTo` | | `localStorage` | `Taro.setStorageSync` / `Taro.getStorageSync` | | `addEventListener('scroll')` | Taro 页面 / 滚动事件或组件 props | @@ -191,27 +191,27 @@ Taro 运行时对 `window` / `document` / DOM 只做了**受限模拟**,能力 ### ⑥ 组件 props 差异 —— 用两个 CLI 交叉核对 绝大多数 props 一致,但有些组件确实不同。**永远不要假设,去 diff。** 已确认的例子 -(迁移时请实时核对,版本会漂移): +(迁移时请实时核对,版本会漂移): | 组件 | 仅 H5 有的 props | 仅 Taro 有的 props | 处理 | | --- | --- | --- | --- | | `Uploader` | `accept`、`capture` | `mediaType`、`sizeType`、`sourceType`、`camera` | 用 Taro 的文件选择 props 重新表达意图 | -| `Image` | `fit`、`lazy`、`position`、`alt` | —— | 删除 / 重映射(如 `fit` → 查 CLI doc 看 `mode` 语义) | +| `Image` | `fit`、`lazy`、`position`、`alt` | —— | 删除 / 重映射(如 `fit` → 查 CLI doc 看 `mode` 语义) | | `InputNumber` | `select` | `type` | 查 CLI doc | -| `Button` | —— | (`openType`、`hoverClass` … 是小程序透传属性) | 按需补上小程序专属 props | +| `Button` | —— | (`openType`、`hoverClass` … 是小程序透传属性) | 按需补上小程序专属 props | -## 陷阱(盲目替换会做错) +## 陷阱(盲目替换会做错) 1. **`Audio` 在 Taro 端无对应组件。** 它只存在于 H5 包。当某文件用到 NutUI 的 `Audio` 时,停下并告知用户——建议改用 `Taro.createInnerAudioContext()` 或自定义 方案。不要凭空编一个 import。 2. **不要盲目替换每一个 `document`。** 有些组件原样接受它——如 `Popup` 的 - `portal={document.body}` 在 Taro 端**保持不变**(组件已处理)。按组件语义 / + `portal={document.body}` 在 Taro 端**保持不变**(组件已处理)。按组件语义 / CLI doc 判断,而非按 grep。 -3. **canvas 类组件(如 `Signature`)是语义改写。** H5 端常有手写 DOM 操作 - (`document.createElement('img')`、往节点里 append)。在 Taro 端删掉那段 DOM +3. **canvas 类组件(如 `Signature`)是语义改写。** H5 端常有手写 DOM 操作 + (`document.createElement('img')`、往节点里 append)。在 Taro 端删掉那段 DOM 逻辑,改用组件的 `canvasId` prop + ref 方法。先读 `nutui-react-taro doc Signature`。 -4. **`` → `` 还是 ``。** `` 是行内、仅用于纯文本;把子元素 +4. **`` → `` 还是 ``。** `` 是行内、仅用于纯文本;把子元素 包进 `` 会破坏布局。有嵌套元素时用 ``。 ## 核心规则 @@ -219,7 +219,7 @@ Taro 运行时对 `window` / `document` / DOM 只做了**受限模拟**,能力 1. **改写每个组件前,用 `nutui-react info ` 和 `nutui-react-taro info ` 交叉 核对它的 props。** 这是整个迁移的核心——见规则 ⑥。 2. **始终 `--format json`** —— 解析结构化输出,不要正则抓文本。 -3. **确认组件在 Taro 端存在**,用 `nutui-react-taro list`;留意 `Audio` 缺口。 -4. **规则 ①–④ 是机械的;⑤–⑥ 及陷阱需要判断** —— 后者逐处处理,对无法安全自动 +3. **确认组件在 Taro 端存在**,用 `nutui-react-taro list`;留意 `Audio` 缺口。 +4. **规则 ①–④ 是机械的;⑤–⑥ 及陷阱需要判断** —— 后者逐处处理,对无法安全自动 迁移的地方标记出来交用户复核。在 Taro 构建编译通过前,不要声称某文件已迁移完成。 5. **先做环境准备** —— 若项目无法编译 Taro + NutUI,代码迁移就没有意义。 diff --git a/packages/nutui-react-cli/skills/nutui-react/SKILL.md b/packages/nutui-react-cli/skills/nutui-react/SKILL.md index de80c7e507..abfcf2d608 100644 --- a/packages/nutui-react-cli/skills/nutui-react/SKILL.md +++ b/packages/nutui-react-cli/skills/nutui-react/SKILL.md @@ -2,9 +2,9 @@ name: nutui-react description: > 当用户的任务涉及 NutUI React(@nutui/nutui-react)时使用 —— 编写 - NutUI React 组件、调试 NutUI 问题,或查询 NutUI 组件的 - API/属性/文档/示例/设计变量(Design Token)。触发场景:与 NutUI 相关的代码、 - 从 '@nutui/nutui-react' 导入,或明确的 NutUI 相关提问。NutUI React 是京东的 + NutUI React 组件、调试 NutUI 问题,或查询 NutUI 组件的 + API/属性/文档/示例/设计变量(Design Token)。触发场景:与 NutUI 相关的代码、 + 从 '@nutui/nutui-react' 导入,或明确的 NutUI 相关提问。NutUI React 是京东的 轻量级移动端(H5)组件库。 allowed-tools: - Bash(nutui-react *) @@ -14,20 +14,20 @@ allowed-tools: # NutUI React CLI -你可以使用 `@nutui/nutui-react-cli` —— 一个内置了 NutUI React 元数据(组件属性、完整文档、可运行示例和 Design Token)的本地 CLI 工具。在编写代码前用它查询组件知识。所有数据均为离线数据并随 CLI 一起打包 —— 无需联网,也无需 API Key。 +你可以使用 `@nutui/nutui-react-cli` —— 一个内置了 NutUI React 元数据(组件属性、完整文档、可运行示例和 Design Token)的本地 CLI 工具。在编写代码前用它查询组件知识。所有数据均为离线数据并随 CLI 一起打包 —— 无需联网,也无需 API Key。 ## 准备工作 -首次使用前,先检查该 CLI 是否可用。若不可用,可通过 `npx` 调用(无需全局安装): +首次使用前,先检查该 CLI 是否可用。若不可用,可通过 `npx` 调用(无需全局安装): ```bash which nutui-react || echo "use: npx -y @nutui/nutui-react-cli " ``` -两种方式均可 —— 用哪种取决于哪种可用: +两种方式均可 —— 用哪种取决于哪种可用: -- 全局安装:`nutui-react info Button` -- 通过 npx(免安装):`npx -y @nutui/nutui-react-cli info Button` +- 全局安装:`nutui-react info Button` +- 通过 npx(免安装):`npx -y @nutui/nutui-react-cli info Button` 下文示例为简洁起见统一使用 `nutui-react` 形式。 @@ -37,7 +37,7 @@ which nutui-react || echo "use: npx -y @nutui/nutui-react-cli " ### 1. 编写 NutUI React 组件代码 -在编写任何 NutUI 组件代码前,先查询它的 API —— 不要依赖记忆。 +在编写任何 NutUI 组件代码前,先查询它的 API —— 不要依赖记忆。 ```bash # 查看有哪些可用属性(按表格分组,例如 Props / 子组件属性) @@ -51,11 +51,11 @@ nutui-react demo Button demo1 --format json # 再获取某个示例的源码 nutui-react token Button --format json ``` -**工作流:** `nutui-react info` → 理解属性 → `nutui-react demo` → 获取可运行示例 → 编写代码。 +**工作流:** `nutui-react info` → 理解属性 → `nutui-react demo` → 获取可运行示例 → 编写代码。 ### 2. 查阅完整文档 -当你需要完整的组件文档(而不仅仅是属性表)时: +当你需要完整的组件文档(而不仅仅是属性表)时: ```bash nutui-react doc Cell --format json # 完整的 Markdown 文档(默认中文) @@ -66,7 +66,7 @@ nutui-react doc Cell --lang en --format json # 英文文档 ### 3. 浏览可用组件 -当用户在挑选使用哪个组件,或你需要在导入前确认某个组件是否存在时: +当用户在挑选使用哪个组件,或你需要在导入前确认某个组件是否存在时: ```bash # 列出所有组件(含中文名与版本),按分类分组 @@ -76,11 +76,11 @@ nutui-react list --format json nutui-react list --category feedback --format json ``` -如果你查询的组件名称不存在,CLI 会返回「你是不是想找」的建议(例如 `Buttn` → `Button`)—— 用它来纠正名称,而不是靠猜。 +如果你查询的组件名称不存在,CLI 会返回「你是不是想找」的建议(例如 `Buttn` → `Button`)—— 用它来纠正名称,而不是靠猜。 ### 4. 查询 Design Token -在定制主题/颜色/间距时,使用 `var(--nutui-*)` 变量体系,而不是硬编码具体数值: +在定制主题/颜色/间距时,使用 `var(--nutui-*)` 变量体系,而不是硬编码具体数值: ```bash # 全局 Token(颜色、间距、圆角等) @@ -92,7 +92,7 @@ nutui-react token Button --format json ### 5. 作为 MCP 服务器使用 -如果你在支持 MCP 的 IDE(Claude Code、Cursor、VS Code、Codex 等)中工作,该 CLI 可以作为本地 stdio MCP 服务器运行,以 IDE 原生工具的形式暴露相同的知识查询能力: +如果你在支持 MCP 的 IDE(Claude Code、Cursor、VS Code、Codex 等)中工作,该 CLI 可以作为本地 stdio MCP 服务器运行,以 IDE 原生工具的形式暴露相同的知识查询能力: ```json { @@ -105,30 +105,30 @@ nutui-react token Button --format json } ``` -它通过 MCP 协议提供 5 个工具(`nutui_list`、`nutui_info`、`nutui_doc`、`nutui_demo`、`nutui_token`)和 2 个提示词(`nutui-expert`、`nutui-page-generator`)。当这些工具在对话中可用时,优先直接调用它们,而不是通过 shell 执行 CLI。 +它通过 MCP 协议提供 5 个工具(`nutui_list`、`nutui_info`、`nutui_doc`、`nutui_demo`、`nutui_token`)和 2 个提示词(`nutui-expert`、`nutui-page-generator`)。当这些工具在对话中可用时,优先直接调用它们,而不是通过 shell 执行 CLI。 ## 命令 | 命令 | 用途 | | --- | --- | -| `nutui-react list [--category ]` | 列出所有组件(名称 / 中文名 / 版本),按分类分组 | -| `nutui-react info ` | 组件属性表(属性 / 说明 / 类型 / 默认值),按表格分组 | +| `nutui-react list [--category ]` | 列出所有组件(名称 / 中文名 / 版本),按分类分组 | +| `nutui-react info ` | 组件属性表(属性 / 说明 / 类型 / 默认值),按表格分组 | | `nutui-react doc [--lang zh\|en]` | 组件完整 Markdown 文档(默认中文) | -| `nutui-react demo [name]` | 省略 `name` 列出示例;传入 `name`(如 `demo1`)获取源码 | +| `nutui-react demo [name]` | 省略 `name` 列出示例;传入 `name`(如 `demo1`)获取源码 | | `nutui-react token [Component]` | Design Token —— 省略组件名则返回全局 Token | ## 全局参数 | 参数 | 用途 | | --- | --- | -| `--format, -f ` | 输出格式;agent 应优先使用 `json`(默认:`text`) | -| `--lang, -l ` | `doc` / `mcp` 的文档语言(默认:`zh`) | +| `--format, -f ` | 输出格式;agent 应优先使用 `json`(默认:`text`) | +| `--lang, -l ` | `doc` / `mcp` 的文档语言(默认:`zh`) | | `--help, -h` | 显示帮助 | | `--version, -v` | 打印 CLI 版本 | ## 核心规则 -1. **先查询,再编写** —— 不要凭记忆猜测 NutUI 的 API、属性名或枚举值。先运行 `nutui-react info`(并用 `nutui-react demo` 获取一个可用示例)。 -2. **使用 `--format json`** —— 每个命令都支持它。解析 JSON 输出,而不是用正则匹配人类可读的文本。 -3. **确认组件存在** —— 如果不确定确切名称,运行 `nutui-react list`,或借助 CLI 的「你是不是想找」建议,而不是导入一个猜测的名称。 -4. **使用 Design Token 做样式** —— NutUI 采用 `nut-` 扁平 BEM 类名和 `var(--nutui-*)` 变量体系。定制外观时,查询 `nutui-react token` 并使用 Token,而不是硬编码颜色或间距。 +1. **先查询,再编写** —— 不要凭记忆猜测 NutUI 的 API、属性名或枚举值。先运行 `nutui-react info`(并用 `nutui-react demo` 获取一个可用示例)。 +2. **使用 `--format json`** —— 每个命令都支持它。解析 JSON 输出,而不是用正则匹配人类可读的文本。 +3. **确认组件存在** —— 如果不确定确切名称,运行 `nutui-react list`,或借助 CLI 的「你是不是想找」建议,而不是导入一个猜测的名称。 +4. **使用 Design Token 做样式** —— NutUI 采用 `nut-` 扁平 BEM 类名和 `var(--nutui-*)` 变量体系。定制外观时,查询 `nutui-react token` 并使用 Token,而不是硬编码颜色或间距。 diff --git a/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md b/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md index 35ebbf820c..7ce711a761 100644 --- a/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md +++ b/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md @@ -3,10 +3,10 @@ name: nutui-react-taro description: > 当用户的任务涉及 NutUI React Taro(@nutui/nutui-react-taro)时使用 —— 为小程序 / 跨端(Taro)应用编写 NutUI React Taro 组件、调试 NutUI Taro - 问题,或查询 NutUI Taro 组件的 API/属性/文档/示例/设计变量(Design Token)。 - 触发场景:与 NutUI Taro 相关的代码、从 '@nutui/nutui-react-taro' 导入,或 + 问题,或查询 NutUI Taro 组件的 API/属性/文档/示例/设计变量(Design Token)。 + 触发场景:与 NutUI Taro 相关的代码、从 '@nutui/nutui-react-taro' 导入,或 明确的 NutUI Taro 相关提问。NutUI React Taro 是京东面向 Taro(小程序 / - 多端)的移动端组件库,一套代码同时支持 H5 与小程序。 + 多端)的移动端组件库,一套代码同时支持 H5 与小程序。 allowed-tools: - Bash(nutui-react-taro *) - Bash(npx -y @nutui/nutui-react-taro-cli *) @@ -15,20 +15,20 @@ allowed-tools: # NutUI React Taro CLI -你可以使用 `@nutui/nutui-react-taro-cli` —— 一个内置了 NutUI React Taro 元数据(组件属性、完整文档、可运行的 Taro 示例和 Design Token)的本地 CLI 工具。在编写代码前用它查询组件知识。所有数据均为离线数据并随 CLI 一起打包 —— 无需联网,也无需 API Key。 +你可以使用 `@nutui/nutui-react-taro-cli` —— 一个内置了 NutUI React Taro 元数据(组件属性、完整文档、可运行的 Taro 示例和 Design Token)的本地 CLI 工具。在编写代码前用它查询组件知识。所有数据均为离线数据并随 CLI 一起打包 —— 无需联网,也无需 API Key。 ## 准备工作 -首次使用前,先检查该 CLI 是否可用。若不可用,可通过 `npx` 调用(无需全局安装): +首次使用前,先检查该 CLI 是否可用。若不可用,可通过 `npx` 调用(无需全局安装): ```bash which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli " ``` -两种方式均可 —— 用哪种取决于哪种可用: +两种方式均可 —— 用哪种取决于哪种可用: -- 全局安装:`nutui-react-taro info Button` -- 通过 npx(免安装):`npx -y @nutui/nutui-react-taro-cli info Button` +- 全局安装:`nutui-react-taro info Button` +- 通过 npx(免安装):`npx -y @nutui/nutui-react-taro-cli info Button` 下文示例为简洁起见统一使用 `nutui-react-taro` 形式。 @@ -38,7 +38,7 @@ which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli ]` | 列出所有组件(名称 / 中文名 / 版本),按分类分组 | -| `nutui-react-taro info ` | 组件属性表(属性 / 说明 / 类型 / 默认值),按表格分组 | +| `nutui-react-taro list [--category ]` | 列出所有组件(名称 / 中文名 / 版本),按分类分组 | +| `nutui-react-taro info ` | 组件属性表(属性 / 说明 / 类型 / 默认值),按表格分组 | | `nutui-react-taro doc ` | 组件完整 Markdown 文档(中文) | -| `nutui-react-taro demo [name]` | 省略 `name` 列出示例;传入 `name`(如 `demo1`)获取源码 | +| `nutui-react-taro demo [name]` | 省略 `name` 列出示例;传入 `name`(如 `demo1`)获取源码 | | `nutui-react-taro token [Component]` | Design Token —— 省略组件名则返回全局 Token | -| `nutui-react-taro mcp` | 启动本地 stdio MCP 服务器,供 IDE 集成 | +| `nutui-react-taro mcp` | 启动本地 stdio MCP 服务器,供 IDE 集成 | ## 全局参数 | 参数 | 用途 | | --- | --- | -| `--format, -f ` | 输出格式;agent 应优先使用 `json`(默认:`text`) | +| `--format, -f ` | 输出格式;agent 应优先使用 `json`(默认:`text`) | | `--help, -h` | 显示帮助 | | `--version, -v` | 打印 CLI 版本 | ## 核心规则 -1. **先查询,再编写** —— 不要凭记忆猜测 NutUI Taro 的 API、属性名或枚举值。先运行 `nutui-react-taro info`(并用 `nutui-react-taro demo` 获取一个可用示例)。Taro 属性可能与 H5 包不同。 -2. **使用 `--format json`** —— 每个命令都支持它。解析 JSON 输出,而不是用正则匹配人类可读的文本。 -3. **确认组件存在** —— 如果不确定确切名称,运行 `nutui-react-taro list`,或借助 CLI 的「你是不是想找」建议,而不是导入一个猜测的名称。 -4. **使用 Design Token 做样式** —— NutUI 采用 `nut-` 扁平 BEM 类名和 `var(--nutui-*)` 变量体系。定制外观时,查询 `nutui-react-taro token` 并使用 Token,而不是硬编码颜色或间距。 +1. **先查询,再编写** —— 不要凭记忆猜测 NutUI Taro 的 API、属性名或枚举值。先运行 `nutui-react-taro info`(并用 `nutui-react-taro demo` 获取一个可用示例)。Taro 属性可能与 H5 包不同。 +2. **使用 `--format json`** —— 每个命令都支持它。解析 JSON 输出,而不是用正则匹配人类可读的文本。 +3. **确认组件存在** —— 如果不确定确切名称,运行 `nutui-react-taro list`,或借助 CLI 的「你是不是想找」建议,而不是导入一个猜测的名称。 +4. **使用 Design Token 做样式** —— NutUI 采用 `nut-` 扁平 BEM 类名和 `var(--nutui-*)` 变量体系。定制外观时,查询 `nutui-react-taro token` 并使用 Token,而不是硬编码颜色或间距。 5. **从 `@nutui/nutui-react-taro` 导入** —— 不是 `@nutui/nutui-react`。这是 Taro(小程序 / 跨端)包。 From 24fc00e966a410287a25a0c17cb119f8acb029b5 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 21 Aug 2026 16:45:35 +0800 Subject: [PATCH 11/25] docs: refine migration documentation for NutUI React to Taro, improving clarity on component handling and props comparison --- packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md index 9c9b43e519..2dad2aa241 100644 --- a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md +++ b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md @@ -182,7 +182,6 @@ Taro 运行时对 `window` / `document` / DOM 只做了**受限模拟**,能力 | H5 写法 | Taro 替代 | | --- | --- | | `alert` / 用 DOM 弹 toast | `Taro.showToast(...)`(`import Taro from '@tarojs/taro'`) | -| `URL.createObjectURL(file)` | 按文件类型选对应的 Taro 选择/上传 API(图片/视频用 `Taro.chooseMedia`,其他类型查 `@tarojs/taro` 文档),取其临时路径;别把视频/音频/普通文件一律套图片选择 | | `document.createElement` + 手动 DOM 操作 | 优先用组件 props / ref 表达;确需操作节点时用 `Taro.createSelectorQuery` 等 API,勿盲目删逻辑 | | `window.location` / 路由跳转 | `Taro.navigateTo` / `Taro.redirectTo` | | `localStorage` | `Taro.setStorageSync` / `Taro.getStorageSync` | From 560c5e3368d5c5c8c9dcd05b4279a30690da6f8c Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 21 Aug 2026 16:45:45 +0800 Subject: [PATCH 12/25] docs: streamline descriptions in NutUI React and NutUI React Taro documentation for improved readability and consistency --- .../skills/nutui-react-to-taro/SKILL.md | 57 +++++-------------- .../skills/nutui-react/SKILL.md | 6 +- 2 files changed, 16 insertions(+), 47 deletions(-) diff --git a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md index 2dad2aa241..84ad705330 100644 --- a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md +++ b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md @@ -1,12 +1,7 @@ --- name: nutui-react-to-taro description: > - 当需要把项目(或代码片段)从 NutUI React(@nutui/nutui-react,H5)迁移到 - NutUI React Taro(@nutui/nutui-react-taro,小程序 / 跨端 Taro)时使用。触发场景 - 如「把 NutUI React 迁移到 Taro」「让这个 H5 的 NutUI 页面能在小程序里跑」,或将 H5 的 - NutUI 组件转换到 Taro 运行时。两个包共用同一套组件,绝大多数组件一一对应——真正 - 的工作是包名 / import 改写、原生标签 → Taro 组件替换、样式单位修正,以及对少数 - 两端 props 不同的组件做交叉核对。 + 当需要把项目(或代码片段)从 NutUI React(@nutui/nutui-react,H5)迁移到 NutUI React Taro(@nutui/nutui-react-taro,小程序 / 跨端 Taro)时使用。触发场景如「把 NutUI React 迁移到 Taro」「让这个 H5 的 NutUI 页面能在小程序里跑」,或将 H5 的 NutUI 组件转换到 Taro 运行时。两个包共用同一套组件,绝大多数组件一一对应——真正的工作是包名 / import 改写、原生标签 → Taro 组件替换、样式单位修正,以及对少数两端 props 不同的组件做交叉核对。 allowed-tools: - Bash(nutui-react *) - Bash(nutui-react-taro *) @@ -18,10 +13,7 @@ allowed-tools: # NutUI React(H5)→ NutUI React Taro 迁移 -你负责把代码从 `@nutui/nutui-react`(H5)迁移到 `@nutui/nutui-react-taro` -(Taro 小程序 / 跨端)。两个包由**同一套 codebase** 构建,因此几乎每个组件在两端 -都同名、props 也大体一致。这让迁移高度规则化——但仍有少数环节需要真正的判断, -不能无脑查找替换。 +你负责把代码从 `@nutui/nutui-react`(H5)迁移到 `@nutui/nutui-react-taro`(Taro 小程序 / 跨端)。两个包由**同一套 codebase** 构建,因此几乎每个组件在两端都同名、props 也大体一致。这让迁移高度规则化——但仍有少数环节需要真正的判断,不能无脑查找替换。 有两个 CLI 支撑本工作,均离线、元数据随包分发: @@ -35,9 +27,7 @@ which nutui-react || echo "use: npx -y @nutui/nutui-react-cli info --fo which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli info --format json" ``` -**最重要的习惯:每碰一个组件,改写前先用两个 CLI 对比它的 props。** props 通常 -一致,但一旦不同(Uploader、Image、InputNumber 等),盲目照搬会产出在小程序上 -悄悄失效的代码。始终传 `--format json` 并解析它。 +**最重要的习惯:每碰一个组件,改写前先用两个 CLI 对比它的 props。** props 通常一致,但一旦不同(Uploader、Image、InputNumber 等),盲目照搬会产出在小程序上悄悄失效的代码。始终传 `--format json` 并解析它。 ## 迁移流程 @@ -111,8 +101,7 @@ nutui-react-taro doc Signature --format json ### 阶段 4 —— 验证 -- 构建 Taro 目标端并确认编译通过:如 - `taro build --type weapp --watch`(或 `--type h5`)。 +- 构建 Taro 目标端并确认编译通过:如 `taro build --type weapp --watch`(或 `--type h5`)。 - 手动复查每个高风险文件——**编译通过不代表** canvas / Web API 的改写行为正确。 - 报告哪些文件已完全自动迁移、哪些需要用户复核。 @@ -151,10 +140,8 @@ Taro 没有 DOM。替换原生标签并补上 `@tarojs/components` 的 import。 ### ③ 样式单位 —— 裸 px 与逻辑属性 - 裸数字 px 必须转成字符串:`margin: 8` → `margin: '8px'`。 -- 小程序不支持逻辑属性:`marginInlineStart` → `marginLeft`、 - `insetInlineStart` → `left` 等。 -- 需要跨设备缩放的值,用从 `@nutui/nutui-react-taro` 引入的 `pxTransform(10)` - (返回按 rpx 适配的长度)。 +- 小程序不支持逻辑属性:`marginInlineStart` → `marginLeft`、`insetInlineStart` → `left` 等。 +- 需要跨设备缩放的值,用从 `@nutui/nutui-react-taro` 引入的 `pxTransform(10)`(返回按 rpx 适配的长度)。 ```diff - const marginStyle = { margin: 8 } @@ -163,8 +150,7 @@ Taro 没有 DOM。替换原生标签并补上 `@tarojs/components` 的 import。 ### ④ 触摸事件类型 -小程序的触摸事件不是 `MouseEvent`。放宽类型,并从 `@tarojs/components` 引入 -`ITouchEvent`。 +小程序的触摸事件不是 `MouseEvent`。放宽类型,并从 `@tarojs/components` 引入 `ITouchEvent`。 ```diff + import { ITouchEvent } from '@tarojs/components' @@ -174,10 +160,7 @@ Taro 没有 DOM。替换原生标签并补上 `@tarojs/components` 的 import。 ### ⑤ Web-only API → Taro API —— 需要推理,逐处改写 -Taro 运行时对 `window` / `document` / DOM 只做了**受限模拟**,能力随目标版本漂移 -——**别一律删除**。逐处判断:能映射到 `@tarojs/taro` 或组件自身能力的就映射;运行 -时确实支持的(如异步版 `getBoundingClientRect`)保留;只有真正无法迁移的才删。常见 -映射: +Taro 运行时对 `window` / `document` / DOM 只做了**受限模拟**,能力随目标版本漂移——**别一律删除**。逐处判断:能映射到 `@tarojs/taro` 或组件自身能力的就映射;运行时确实支持的(如异步版 `getBoundingClientRect`)保留;只有真正无法迁移的才删。常见映射: | H5 写法 | Taro 替代 | | --- | --- | @@ -189,8 +172,7 @@ Taro 运行时对 `window` / `document` / DOM 只做了**受限模拟**,能力 ### ⑥ 组件 props 差异 —— 用两个 CLI 交叉核对 -绝大多数 props 一致,但有些组件确实不同。**永远不要假设,去 diff。** 已确认的例子 -(迁移时请实时核对,版本会漂移): +绝大多数 props 一致,但有些组件确实不同。**永远不要假设,去 diff。** 已确认的例子(迁移时请实时核对,版本会漂移): | 组件 | 仅 H5 有的 props | 仅 Taro 有的 props | 处理 | | --- | --- | --- | --- | @@ -201,24 +183,15 @@ Taro 运行时对 `window` / `document` / DOM 只做了**受限模拟**,能力 ## 陷阱(盲目替换会做错) -1. **`Audio` 在 Taro 端无对应组件。** 它只存在于 H5 包。当某文件用到 NutUI 的 - `Audio` 时,停下并告知用户——建议改用 `Taro.createInnerAudioContext()` 或自定义 - 方案。不要凭空编一个 import。 -2. **不要盲目替换每一个 `document`。** 有些组件原样接受它——如 `Popup` 的 - `portal={document.body}` 在 Taro 端**保持不变**(组件已处理)。按组件语义 / - CLI doc 判断,而非按 grep。 -3. **canvas 类组件(如 `Signature`)是语义改写。** H5 端常有手写 DOM 操作 - (`document.createElement('img')`、往节点里 append)。在 Taro 端删掉那段 DOM - 逻辑,改用组件的 `canvasId` prop + ref 方法。先读 `nutui-react-taro doc Signature`。 -4. **`` → `` 还是 ``。** `` 是行内、仅用于纯文本;把子元素 - 包进 `` 会破坏布局。有嵌套元素时用 ``。 +1. **`Audio` 在 Taro 端无对应组件。** 它只存在于 H5 包。当某文件用到 NutUI 的 `Audio` 时,停下并告知用户——建议改用 `Taro.createInnerAudioContext()` 或自定义方案。不要凭空编一个 import。 +2. **不要盲目替换每一个 `document`。** 有些组件原样接受它——如 `Popup` 的 `portal={document.body}` 在 Taro 端**保持不变**(组件已处理)。按组件语义 / CLI doc 判断,而非按 grep。 +3. **canvas 类组件(如 `Signature`)是语义改写。** H5 端常有手写 DOM 操作(`document.createElement('img')`、往节点里 append)。在 Taro 端删掉那段 DOM 逻辑,改用组件的 `canvasId` prop + ref 方法。先读 `nutui-react-taro doc Signature`。 +4. **`` → `` 还是 ``。** `` 是行内、仅用于纯文本;把子元素包进 `` 会破坏布局。有嵌套元素时用 ``。 ## 核心规则 -1. **改写每个组件前,用 `nutui-react info ` 和 `nutui-react-taro info ` 交叉 - 核对它的 props。** 这是整个迁移的核心——见规则 ⑥。 +1. **改写每个组件前,用 `nutui-react info ` 和 `nutui-react-taro info ` 交叉核对它的 props。** 这是整个迁移的核心——见规则 ⑥。 2. **始终 `--format json`** —— 解析结构化输出,不要正则抓文本。 3. **确认组件在 Taro 端存在**,用 `nutui-react-taro list`;留意 `Audio` 缺口。 -4. **规则 ①–④ 是机械的;⑤–⑥ 及陷阱需要判断** —— 后者逐处处理,对无法安全自动 - 迁移的地方标记出来交用户复核。在 Taro 构建编译通过前,不要声称某文件已迁移完成。 +4. **规则 ①–④ 是机械的;⑤–⑥ 及陷阱需要判断** —— 后者逐处处理,对无法安全自动迁移的地方标记出来交用户复核。在 Taro 构建编译通过前,不要声称某文件已迁移完成。 5. **先做环境准备** —— 若项目无法编译 Taro + NutUI,代码迁移就没有意义。 diff --git a/packages/nutui-react-cli/skills/nutui-react/SKILL.md b/packages/nutui-react-cli/skills/nutui-react/SKILL.md index abfcf2d608..adadd878c3 100644 --- a/packages/nutui-react-cli/skills/nutui-react/SKILL.md +++ b/packages/nutui-react-cli/skills/nutui-react/SKILL.md @@ -1,11 +1,7 @@ --- name: nutui-react description: > - 当用户的任务涉及 NutUI React(@nutui/nutui-react)时使用 —— 编写 - NutUI React 组件、调试 NutUI 问题,或查询 NutUI 组件的 - API/属性/文档/示例/设计变量(Design Token)。触发场景:与 NutUI 相关的代码、 - 从 '@nutui/nutui-react' 导入,或明确的 NutUI 相关提问。NutUI React 是京东的 - 轻量级移动端(H5)组件库。 + 当用户的任务涉及 NutUI React(@nutui/nutui-react)时使用 —— 编写 NutUI React 组件、调试 NutUI 问题,或查询 NutUI 组件的 API/属性/文档/示例/设计变量(Design Token)。触发场景:与 NutUI 相关的代码、从 '@nutui/nutui-react' 导入,或明确的 NutUI 相关提问。NutUI React 是京东的轻量级移动端(H5)组件库。 allowed-tools: - Bash(nutui-react *) - Bash(npx -y @nutui/nutui-react-cli *) From 376f74100f0a4d1262f15da89c0b21244034301b Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 21 Aug 2026 16:55:22 +0800 Subject: [PATCH 13/25] docs: update NutUI React and NutUI React Taro documentation for improved clarity and completeness, including new command for local MCP server and refined usage instructions --- .../nutui-react-cli/skills/nutui-react-to-taro/SKILL.md | 8 +++----- packages/nutui-react-cli/skills/nutui-react/SKILL.md | 3 ++- .../nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md | 7 +------ 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md index 84ad705330..a4d9f3ead3 100644 --- a/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md +++ b/packages/nutui-react-cli/skills/nutui-react-to-taro/SKILL.md @@ -35,15 +35,13 @@ which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli info ### 阶段 0 —— 环境准备(项目配置,最先做) -迁移后的代码在 Taro 里跑起来的前提是项目已配置好。权威来源:NutUI 官方「快速上手」 -(start-react)文档。 +迁移后的代码在 Taro 里跑起来的前提是项目已配置好。 1. **安装依赖**(执行安装前先征求用户同意): - `@nutui/nutui-react-taro`、`@nutui/icons-react-taro` - `@tarojs/plugin-html` —— **版本必须与项目的 Taro 版本一致** - `babel-plugin-import`(仅当项目需要按需引入时) -2. **修改 `config/index.js`** —— 开启 HTML 插件并设置设计尺寸,让 NutUI(基于 375 - 的库)正确缩放: +2. **修改 `config/index.js`** —— 开启 HTML 插件并设置设计尺寸,让 NutUI 正确缩放: ```js config = { plugins: ['@tarojs/plugin-html'], @@ -118,7 +116,7 @@ nutui-react-taro doc Signature --format json ### ② 原生 HTML 标签 → Taro 组件 —— 替换 + 补 import -Taro 没有 DOM。替换原生标签并补上 `@tarojs/components` 的 import。 +替换原生标签并补上 `@tarojs/components` 的 import。 | H5 | Taro | 备注 | | --- | --- | --- | diff --git a/packages/nutui-react-cli/skills/nutui-react/SKILL.md b/packages/nutui-react-cli/skills/nutui-react/SKILL.md index adadd878c3..8b813f0400 100644 --- a/packages/nutui-react-cli/skills/nutui-react/SKILL.md +++ b/packages/nutui-react-cli/skills/nutui-react/SKILL.md @@ -27,7 +27,7 @@ which nutui-react || echo "use: npx -y @nutui/nutui-react-cli " 下文示例为简洁起见统一使用 `nutui-react` 形式。 -**始终传入 `--format json` 以获得可编程解析的结构化输出**(默认输出为人类可读的 `text`)。 +**始终传入 `--format json` 以获得可编程解析的结构化输出**。 ## 使用场景 @@ -112,6 +112,7 @@ nutui-react token Button --format json | `nutui-react doc [--lang zh\|en]` | 组件完整 Markdown 文档(默认中文) | | `nutui-react demo [name]` | 省略 `name` 列出示例;传入 `name`(如 `demo1`)获取源码 | | `nutui-react token [Component]` | Design Token —— 省略组件名则返回全局 Token | +| `nutui-react mcp` | 启动本地 stdio MCP 服务器,供 IDE 集成 | ## 全局参数 diff --git a/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md b/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md index 7ce711a761..66370e1540 100644 --- a/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md +++ b/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md @@ -1,12 +1,7 @@ --- name: nutui-react-taro description: > - 当用户的任务涉及 NutUI React Taro(@nutui/nutui-react-taro)时使用 —— - 为小程序 / 跨端(Taro)应用编写 NutUI React Taro 组件、调试 NutUI Taro - 问题,或查询 NutUI Taro 组件的 API/属性/文档/示例/设计变量(Design Token)。 - 触发场景:与 NutUI Taro 相关的代码、从 '@nutui/nutui-react-taro' 导入,或 - 明确的 NutUI Taro 相关提问。NutUI React Taro 是京东面向 Taro(小程序 / - 多端)的移动端组件库,一套代码同时支持 H5 与小程序。 + 当用户的任务涉及 NutUI React Taro(@nutui/nutui-react-taro)时使用 —— 为小程序 / 跨端(Taro)应用编写 NutUI React Taro 组件、调试 NutUI Taro 问题,或查询 NutUI Taro 组件的 API/属性/文档/示例/设计变量(Design Token)。 触发场景:与 NutUI Taro 相关的代码、从 '@nutui/nutui-react-taro' 导入,或明确的 NutUI Taro 相关提问。NutUI React Taro 是京东面向 Taro(小程序 / 多端)的移动端组件库,一套代码同时支持 H5 与小程序。 allowed-tools: - Bash(nutui-react-taro *) - Bash(npx -y @nutui/nutui-react-taro-cli *) From 8a172b97ad9e350d8e63e765ce35f28ca0372545 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Tue, 25 Aug 2026 17:44:15 +0800 Subject: [PATCH 14/25] docs: add README and MCP documentation for NutUI React and NutUI React Taro, enhancing knowledge query capabilities and installation instructions --- packages/nutui-react-cli/docs/mcp.md | 62 +++++++++++++++++++ packages/nutui-react-cli/package.json | 4 +- .../skills/nutui-react-to-taro/README.md | 20 ++++++ .../skills/nutui-react/README.md | 18 ++++++ packages/nutui-react-taro-cli/docs/mcp.md | 62 +++++++++++++++++++ packages/nutui-react-taro-cli/package.json | 4 +- .../skills/nutui-react-taro/README.md | 19 ++++++ 7 files changed, 187 insertions(+), 2 deletions(-) create mode 100644 packages/nutui-react-cli/docs/mcp.md create mode 100644 packages/nutui-react-cli/skills/nutui-react-to-taro/README.md create mode 100644 packages/nutui-react-cli/skills/nutui-react/README.md create mode 100644 packages/nutui-react-taro-cli/docs/mcp.md create mode 100644 packages/nutui-react-taro-cli/skills/nutui-react-taro/README.md diff --git a/packages/nutui-react-cli/docs/mcp.md b/packages/nutui-react-cli/docs/mcp.md new file mode 100644 index 0000000000..e369d1be03 --- /dev/null +++ b/packages/nutui-react-cli/docs/mcp.md @@ -0,0 +1,62 @@ +# NutUI Knowledge + +本篇介绍如何通过 Model Context Protocol (MCP) 在 AI 工具中使用 NutUI-React。 + +## 启动 MCP 服务 + +`nutui-react mcp` 启动一个通过 stdio 通信的本地 MCP 服务,暴露 5 个只读工具与 2 个提示词。该命令不应在终端直接裸跑,而应在 AI 工具中配置(见下方)。 + +### 工具 + +| 工具 | 说明 | +| --- | --- | +| `nutui_list` | 列出全部组件(可按分类筛选) | +| `nutui_info` | 获取组件的 Props 规格 | +| `nutui_doc` | 获取组件完整文档(`lang: zh\|en`) | +| `nutui_demo` | 获取组件 H5 示例列表 / 源码 | +| `nutui_token` | 查询 Design Token(全局 / 组件级) | + +所有工具均为只读、无副作用、不访问外部网络。 + +### 提示词 + +| 提示词 | 说明 | +| --- | --- | +| `nutui-expert` | 把 Agent 定位为 NutUI-React 专家(先查后写) | +| `nutui-page-generator` | 基于 NutUI-React 组件生成完整可运行页面 | + +## 配置 + +**Claude Code**(`.mcp.json` 或 `claude mcp add`)、**Cursor**(`.cursor/mcp.json`)、**VS Code**(`.vscode/mcp.json` 的 `servers` 字段)通用配置: + +```json +{ + "mcpServers": { + "nutui-react": { + "command": "npx", + "args": ["-y", "@nutui/nutui-react-cli", "mcp"] + } + } +} +``` + +**Codex**(`~/.codex/config.toml`): + +```toml +[mcp_servers.nutui-react] +command = "npx" +args = ["-y", "@nutui/nutui-react-cli", "mcp"] +``` + +`npx -y` 免全局安装即可拉起;也可全局安装 CLI 后把 `command` 换成 `nutui-react`、`args` 换成 `["mcp"]`。 + +## 在 AI 工具中的使用 + +| 工具 | 配置 | +| --- | --- | +| **Claude Code** | 添加到 `.mcp.json`,或用 `claude mcp add` 命令 | +| **Cursor** | 添加到 `.cursor/mcp.json`,或设置 → MCP | +| **VS Code** | 添加到 `.vscode/mcp.json` 的 `servers` 字段 | +| **Codex** | 添加到 `~/.codex/config.toml` | + +当这些工具在对话中可用时,Agent 会优先直接调用,而非再拼命令行字符串。 \ No newline at end of file diff --git a/packages/nutui-react-cli/package.json b/packages/nutui-react-cli/package.json index fc57ac82f4..1e31f59e11 100644 --- a/packages/nutui-react-cli/package.json +++ b/packages/nutui-react-cli/package.json @@ -24,7 +24,9 @@ "files": [ "dist", "data", - "skills" + "skills", + "README.md", + "docs" ], "engines": { "node": ">=18.12.0" diff --git a/packages/nutui-react-cli/skills/nutui-react-to-taro/README.md b/packages/nutui-react-cli/skills/nutui-react-to-taro/README.md new file mode 100644 index 0000000000..afdfed5e96 --- /dev/null +++ b/packages/nutui-react-cli/skills/nutui-react-to-taro/README.md @@ -0,0 +1,20 @@ +# NutUI React to Taro Migration + +`nutui-react-to-taro` 是把项目从 NutUI React(`@nutui/nutui-react`,H5)迁移到 NutUI React Taro(`@nutui/nutui-react-taro`,小程序 / 跨端)的 skill,面向 AI 编程智能体。两个包由同一套 codebase 构建,几乎每个组件在两端都同名、Props 也大体一致,因此迁移高度规则化。skill 借助源端与目标端两个离线 CLI 交叉核对 Props,把迁移拆成包名 / import 改写、原生标签 → Taro 组件替换、样式单位修正等机械步骤,并对少数两端 Props 不同的组件做人工判断,避免盲目查找替换产出在小程序上悄悄失效的代码。 + +## 安装 + +本 skill 同时依赖源端(H5)与目标端(Taro)两个 CLI: + +```bash +npm i -D @dongweb/nutui-react-cli @dongweb/nutui-react-taro-cli +npx skills add ./node_modules/@dongweb/nutui-react-cli/skills/nutui-react-to-taro +``` + +## 适用场景 + +- **把 H5 项目迁移到小程序 / 跨端**:需要把使用 `@nutui/nutui-react` 的 H5 项目或页面整体迁移到 Taro(`@nutui/nutui-react-taro`)运行时时,按扫描盘点 → 机械改写 → 语义改写 → 验证的流程,系统性完成包名、import、标签与样式的替换。 +- **配置 Taro + NutUI 运行环境**:迁移前先准备项目——安装 `@nutui/nutui-react-taro` 等依赖、在 `config/index.js` 开启 `@tarojs/plugin-html` 并设置设计尺寸、在应用入口引入全局样式,确保迁移后的代码能在 Taro 编译运行。 +- **交叉核对两端组件 Props 差异**:改写每个组件前,用源端与目标端两个 CLI 对比 Props(如 Uploader、Image、InputNumber 等两端不一致的组件),删除或重映射 Taro 端不接受的属性,避免产出在小程序上悄悄失效的代码。 +- **改写 Web-only API 与原生 DOM 逻辑**:把 `window` / `document` / `localStorage` / canvas 等浏览器专有写法逐处映射到 `@tarojs/taro` 或组件自身能力,识别 Taro 端无对应的组件(如 `Audio`),并对无法安全自动迁移处标记出来交用户复核。 +- **替换原生标签与样式单位**:将 `

    ` / `` / `` 等原生 HTML 标签替换为 `@tarojs/components`(`View` / `Text` / `Image`),修正裸 px、逻辑属性(如 `marginInlineStart`)与触摸事件类型,必要时用 `pxTransform` 做跨设备缩放。 diff --git a/packages/nutui-react-cli/skills/nutui-react/README.md b/packages/nutui-react-cli/skills/nutui-react/README.md new file mode 100644 index 0000000000..086adf9a0e --- /dev/null +++ b/packages/nutui-react-cli/skills/nutui-react/README.md @@ -0,0 +1,18 @@ +# NutUI Knowledge + +`nutui-react` 是 NutUI 离线文档知识查询 skill,面向 AI 编程智能体,教它「写 NutUI 代码前先查文档」——通过 `@nutui/nutui-react-cli` 检索官方组件的 Props、文档、示例与 Design Token 避免凭记忆猜测 API 名、Props 或配置项。 + +## 安装 + +```bash +npm i -D @dongweb/nutui-react-cli +npx skills add ./node_modules/@dongweb/nutui-react-cli/skills/nutui-react +``` + +## 适用场景 + +- **编写 NutUI React 组件或页面**:在引入 `@nutui/nutui-react`、使用组件 Props 或组合页面前,先查询组件 API 与可运行示例,避免凭记忆猜测属性名、类型和枚举值。 +- **排查 NutUI 组件问题**:遇到组件行为不符合预期、属性配置无效或组件名称不确定时,核对 Props、完整文档和官方 Demo,并利用组件名称纠错建议确认正确用法。 +- **查询组件文档与示例**:需要了解组件的完整说明、中英文文档、子组件 API 或示例源码时,通过离线 CLI 获取结构化结果,无需访问网络。 +- **选择和确认可用组件**:在设计交互或实现功能前,按分类浏览组件列表,确认目标组件是否存在、所属类别及可用版本,再决定组件方案。 +- **定制主题与样式**:查询全局或组件级 Design Token,使用 `var(--nutui-*)` 变量调整颜色、间距、圆角等样式,避免硬编码设计值。 diff --git a/packages/nutui-react-taro-cli/docs/mcp.md b/packages/nutui-react-taro-cli/docs/mcp.md new file mode 100644 index 0000000000..9ff3740b3a --- /dev/null +++ b/packages/nutui-react-taro-cli/docs/mcp.md @@ -0,0 +1,62 @@ +# NutUI Knowledge + +本篇介绍如何通过 Model Context Protocol (MCP) 在 AI 工具中使用 NutUI-React(Taro 多端)。 + +## 启动 MCP 服务 + +`nutui-react-taro mcp` 启动一个通过 stdio 通信的本地 MCP 服务,暴露 5 个只读工具与 2 个提示词。该命令不应在终端直接裸跑,而应在 AI 工具中配置(见下方)。 + +### 工具 + +| 工具 | 说明 | +| --- | --- | +| `nutui_list` | 列出全部组件(可按分类筛选) | +| `nutui_info` | 获取组件的 Props 规格 | +| `nutui_doc` | 获取组件完整文档(仅 `zh`,Taro 端暂无英文文档) | +| `nutui_demo` | 获取组件 Taro 示例列表 / 源码 | +| `nutui_token` | 查询 Design Token(全局 / 组件级) | + +所有工具均为只读、无副作用、不访问外部网络。 + +### 提示词 + +| 提示词 | 说明 | +| --- | --- | +| `nutui-expert` | 把 Agent 定位为 NutUI-React(Taro 多端)专家(先查后写) | +| `nutui-page-generator` | 基于 NutUI-React(Taro 多端)组件生成完整可运行页面 | + +## 配置 + +**Claude Code**(`.mcp.json` 或 `claude mcp add`)、**Cursor**(`.cursor/mcp.json`)、**VS Code**(`.vscode/mcp.json` 的 `servers` 字段)通用配置: + +```json +{ + "mcpServers": { + "nutui-react-taro": { + "command": "npx", + "args": ["-y", "@nutui/nutui-react-taro-cli", "mcp"] + } + } +} +``` + +**Codex**(`~/.codex/config.toml`): + +```toml +[mcp_servers.nutui-react-taro] +command = "npx" +args = ["-y", "@nutui/nutui-react-taro-cli", "mcp"] +``` + +`npx -y` 免全局安装即可拉起;也可全局安装 CLI 后把 `command` 换成 `nutui-react-taro`、`args` 换成 `["mcp"]`。 + +## 在 AI 工具中的使用 + +| 工具 | 配置 | +| --- | --- | +| **Claude Code** | 添加到 `.mcp.json`,或用 `claude mcp add` 命令 | +| **Cursor** | 添加到 `.cursor/mcp.json`,或设置 → MCP | +| **VS Code** | 添加到 `.vscode/mcp.json` 的 `servers` 字段 | +| **Codex** | 添加到 `~/.codex/config.toml` | + +当这些工具在对话中可用时,Agent 会优先直接调用,而非再拼命令行字符串。 diff --git a/packages/nutui-react-taro-cli/package.json b/packages/nutui-react-taro-cli/package.json index 2ef4092357..ff3eac3e44 100644 --- a/packages/nutui-react-taro-cli/package.json +++ b/packages/nutui-react-taro-cli/package.json @@ -26,7 +26,9 @@ "files": [ "dist", "data", - "skills" + "skills", + "README.md", + "docs" ], "engines": { "node": ">=18.12.0" diff --git a/packages/nutui-react-taro-cli/skills/nutui-react-taro/README.md b/packages/nutui-react-taro-cli/skills/nutui-react-taro/README.md new file mode 100644 index 0000000000..3629783d61 --- /dev/null +++ b/packages/nutui-react-taro-cli/skills/nutui-react-taro/README.md @@ -0,0 +1,19 @@ +# NutUI Taro Knowledge + +`nutui-react-taro` 是 NutUI React Taro 离线文档知识查询 skill,面向 AI 编程智能体,教它「写 NutUI Taro 代码前先查文档」——通过 `@dongweb/nutui-react-taro-cli` 检索官方组件的 Props、文档、示例与 Design Token,避免凭记忆猜测 API 名、Props 或配置项。NutUI React Taro 是京东面向 Taro(小程序 / 多端)的移动端组件库,一套代码同时支持 H5 与小程序,其组件属性可能与 H5 版的 `@nutui/nutui-react` 不同。 + +## 安装 + +```bash +npm i -D @dongweb/nutui-react-taro-cli +npx skills add ./node_modules/@dongweb/nutui-react-taro-cli/skills/nutui-react-taro +``` + +## 适用场景 + +- **编写 NutUI React Taro 组件或页面**:在引入 `@nutui/nutui-react-taro`、使用组件 Props 或组合小程序 / 跨端页面前,先查询组件 API 与可运行示例,避免凭记忆猜测属性名、类型和枚举值,也避免误用 H5 端才有的属性。 +- **排查 NutUI Taro 组件问题**:遇到组件在小程序 / 多端表现不符合预期、属性配置无效或组件名称不确定时,核对 Props、完整文档和官方 Demo,并利用组件名称纠错建议确认正确用法。 +- **查询组件文档与示例**:需要了解组件的完整中文文档、子组件 API 或可运行的 Taro 示例源码时,通过离线 CLI 获取结构化结果,无需访问网络。 +- **选择和确认可用组件**:在设计交互或实现功能前,按分类浏览组件列表,确认目标组件在 Taro 端是否存在、所属类别及可用版本,再决定组件方案。 +- **定制主题与样式**:查询全局或组件级 Design Token,使用 `var(--nutui-*)` 变量调整颜色、间距、圆角等样式,避免硬编码设计值。 +- **作为 MCP 服务器接入 IDE**:在支持 MCP 的 IDE(Claude Code、Cursor、VS Code、Codex 等)中,通过 `npx -y @dongweb/nutui-react-taro-cli mcp` 启动本地 stdio MCP 服务器,把相同的知识查询能力暴露为 IDE 原生工具。 From 4dd10408cdcb5e60bc69500ee2990a6d0d7b69c1 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Tue, 25 Aug 2026 18:12:10 +0800 Subject: [PATCH 15/25] docs: update title in MCP documentation for NutUI Taro, clarifying focus on Taro multi-end usage --- packages/nutui-react-taro-cli/docs/mcp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nutui-react-taro-cli/docs/mcp.md b/packages/nutui-react-taro-cli/docs/mcp.md index 9ff3740b3a..44572863f7 100644 --- a/packages/nutui-react-taro-cli/docs/mcp.md +++ b/packages/nutui-react-taro-cli/docs/mcp.md @@ -1,4 +1,4 @@ -# NutUI Knowledge +# NutUI Taro Knowledge 本篇介绍如何通过 Model Context Protocol (MCP) 在 AI 工具中使用 NutUI-React(Taro 多端)。 From 9a2578db3e896ae6f61ed0d287c69f444a7e0437 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Tue, 25 Aug 2026 19:34:17 +0800 Subject: [PATCH 16/25] docs: update installation instructions in NutUI React and Taro documentation to use GitHub repository for skills, enhancing clarity and accessibility --- packages/nutui-react-cli/README.md | 8 +++----- .../nutui-react-cli/skills/nutui-react-to-taro/README.md | 5 ++--- packages/nutui-react-cli/skills/nutui-react/README.md | 3 +-- packages/nutui-react-taro-cli/README.md | 5 ++--- .../skills/nutui-react-taro/README.md | 3 +-- src/sites/sites-react/doc/docs/ai-react/cli.en-US.md | 5 ++--- src/sites/sites-react/doc/docs/ai-react/cli.md | 5 ++--- .../sites-react/doc/docs/ai-react/for-agents.en-US.md | 6 ++---- src/sites/sites-react/doc/docs/ai-react/for-agents.md | 6 ++---- src/sites/sites-react/doc/docs/ai-react/skill.en-US.md | 6 ++---- src/sites/sites-react/doc/docs/ai-react/skill.md | 6 ++---- src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md | 5 ++--- src/sites/sites-react/doc/docs/ai-taro/cli.md | 5 ++--- .../sites-react/doc/docs/ai-taro/for-agents.en-US.md | 6 ++---- src/sites/sites-react/doc/docs/ai-taro/for-agents.md | 6 ++---- 15 files changed, 29 insertions(+), 51 deletions(-) diff --git a/packages/nutui-react-cli/README.md b/packages/nutui-react-cli/README.md index 468995100f..4ae7ae62a7 100644 --- a/packages/nutui-react-cli/README.md +++ b/packages/nutui-react-cli/README.md @@ -96,11 +96,10 @@ args = ["-y", "@nutui/nutui-react-cli", "mcp"] CLI 内置一份 [Skill 文件](./skills/nutui-react/SKILL.md)(遵循 Anthropic Agent Skills 规范),随 npm 包一起分发。CLI / MCP 提供的是「能力」,Skill 则约束 Agent「**什么时候、按什么顺序**」用这些能力——例如「写组件前先 `nutui-react info` 查 Props、再 `nutui-react demo` 拿示例」「定制样式用 `var(--nutui-*)` token 而非硬编码颜色」。 -安装(skill 已随包 bundle,装好 CLI 后从本地路径装进当前项目): +安装(从 GitHub 仓库直接装进当前项目): ```bash -npm i -D @nutui/nutui-react-cli -npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +npx skills add jdf2e/nutui-react --skill nutui-react ``` 兼容 Claude Code / Cursor / VS Code / Codex 等所有支持 [skills](https://github.com/vercel-labs/skills) 协议的 Agent。安装后,Agent 在遇到 NutUI React 相关任务时会自动遵循「先查后写」的流程。 @@ -110,8 +109,7 @@ npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react 本包额外内置一份 [迁移 Skill](./skills/nutui-react-to-taro/SKILL.md),用于把使用 `@nutui/nutui-react`(H5)的项目迁移到 `@nutui/nutui-react-taro`(Taro 跨端 / 小程序)。它编排「包名/原生标签/样式单位/事件类型」等规则化改写,并同时调用本包与 `@nutui/nutui-react-taro-cli` 的 `info` 交叉核对两端 Props 差异(少数组件如 Uploader / Image 两端属性不同),对 Web API、canvas 等无法机械转换的场景给出重写指引。 ```bash -npm i -D @nutui/nutui-react-cli -npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react-to-taro +npx skills add jdf2e/nutui-react --skill nutui-react-to-taro ``` ## 本地开发 diff --git a/packages/nutui-react-cli/skills/nutui-react-to-taro/README.md b/packages/nutui-react-cli/skills/nutui-react-to-taro/README.md index afdfed5e96..7204938898 100644 --- a/packages/nutui-react-cli/skills/nutui-react-to-taro/README.md +++ b/packages/nutui-react-cli/skills/nutui-react-to-taro/README.md @@ -4,11 +4,10 @@ ## 安装 -本 skill 同时依赖源端(H5)与目标端(Taro)两个 CLI: +本 skill 同时依赖源端(H5)与目标端(Taro)两个 CLI,运行时通过 `npx` 免安装调用,无需预装: ```bash -npm i -D @dongweb/nutui-react-cli @dongweb/nutui-react-taro-cli -npx skills add ./node_modules/@dongweb/nutui-react-cli/skills/nutui-react-to-taro +npx skills add jdf2e/nutui-react --skill nutui-react-to-taro ``` ## 适用场景 diff --git a/packages/nutui-react-cli/skills/nutui-react/README.md b/packages/nutui-react-cli/skills/nutui-react/README.md index 086adf9a0e..0c56553504 100644 --- a/packages/nutui-react-cli/skills/nutui-react/README.md +++ b/packages/nutui-react-cli/skills/nutui-react/README.md @@ -5,8 +5,7 @@ ## 安装 ```bash -npm i -D @dongweb/nutui-react-cli -npx skills add ./node_modules/@dongweb/nutui-react-cli/skills/nutui-react +npx skills add jdf2e/nutui-react --skill nutui-react ``` ## 适用场景 diff --git a/packages/nutui-react-taro-cli/README.md b/packages/nutui-react-taro-cli/README.md index c04bf6c79c..b4feec3e4c 100644 --- a/packages/nutui-react-taro-cli/README.md +++ b/packages/nutui-react-taro-cli/README.md @@ -99,11 +99,10 @@ args = ["-y", "@nutui/nutui-react-taro-cli", "mcp"] CLI 内置一份 [Skill 文件](./skills/nutui-react-taro/SKILL.md)(遵循 Anthropic Agent Skills 规范),随 npm 包一起分发。CLI / MCP 提供的是「能力」,Skill 则约束 Agent「**什么时候、按什么顺序**」用这些能力——例如「写组件前先 `nutui-react-taro info` 查 Props、再 `nutui-react-taro demo` 拿示例」「定制样式用 `var(--nutui-*)` token 而非硬编码颜色」。 -安装(skill 已随包 bundle,装好 CLI 后从本地路径装进当前项目): +安装(从 GitHub 仓库直接装进当前项目): ```bash -npm i -D @nutui/nutui-react-taro-cli -npx skills add ./node_modules/@nutui/nutui-react-taro-cli/skills/nutui-react-taro +npx skills add jdf2e/nutui-react --skill nutui-react-taro ``` 兼容 Claude Code / Cursor / VS Code / Codex 等所有支持 [skills](https://github.com/vercel-labs/skills) 协议的 Agent。安装后,Agent 在遇到 NutUI React Taro 相关任务时会自动遵循「先查后写」的流程。 diff --git a/packages/nutui-react-taro-cli/skills/nutui-react-taro/README.md b/packages/nutui-react-taro-cli/skills/nutui-react-taro/README.md index 3629783d61..09bf3aff9a 100644 --- a/packages/nutui-react-taro-cli/skills/nutui-react-taro/README.md +++ b/packages/nutui-react-taro-cli/skills/nutui-react-taro/README.md @@ -5,8 +5,7 @@ ## 安装 ```bash -npm i -D @dongweb/nutui-react-taro-cli -npx skills add ./node_modules/@dongweb/nutui-react-taro-cli/skills/nutui-react-taro +npx skills add jdf2e/nutui-react --skill nutui-react-taro ``` ## 适用场景 diff --git a/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md b/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md index e5487552b2..6f57f34522 100644 --- a/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md @@ -73,11 +73,10 @@ When a component name isn't found, the CLI returns a "did you mean" suggestion ( The CLI ships with a Skill file following the [Agent Skills](https://github.com/vercel-labs/skills) spec, distributed with the npm package. It guides the agent to call the right command at the right time — e.g. "look up props with `info` and grab a demo before writing a component" and "customize styles with `var(--nutui-*)` tokens instead of hardcoded colors". -Install into the current project (the skill is bundled with the package; install it from the local path after installing the CLI): +Install into the current project (directly from the GitHub repo): ```bash -npm i -D @nutui/nutui-react-cli -npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +npx skills add jdf2e/nutui-react --skill nutui-react ``` Once installed, the agent automatically follows the "look up first, then write" workflow when it encounters NutUI-React tasks. Compatible with Claude Code / Cursor / VS Code / Codex and any agent that supports the skills protocol. diff --git a/src/sites/sites-react/doc/docs/ai-react/cli.md b/src/sites/sites-react/doc/docs/ai-react/cli.md index 172b2af161..77265cc12e 100644 --- a/src/sites/sites-react/doc/docs/ai-react/cli.md +++ b/src/sites/sites-react/doc/docs/ai-react/cli.md @@ -73,11 +73,10 @@ nutui-react mcp # 启动本地 MCP 服务,供 IDE 集成 CLI 内置一份遵循 [Agent Skills](https://github.com/vercel-labs/skills) 规范的 Skill 文件,随 npm 包分发,指导 Agent 在正确的时机调用正确的命令——例如「写组件前先 `info` 查 Props、再 `demo` 拿示例」「定制样式用 `var(--nutui-*)` token 而非硬编码颜色」。 -安装到当前项目(skill 已随包 bundle,装好 CLI 后从本地路径安装): +安装到当前项目(从 GitHub 仓库直接安装): ```bash -npm i -D @nutui/nutui-react-cli -npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +npx skills add jdf2e/nutui-react --skill nutui-react ``` 安装后,Agent 在遇到 NutUI-React 相关任务时会自动遵循「先查后写」的流程。兼容 Claude Code / Cursor / VS Code / Codex 等所有支持 skills 协议的 Agent。 diff --git a/src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md b/src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md index a0fdb3eb6f..3ccc56cecb 100644 --- a/src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md @@ -10,8 +10,7 @@ Paste the following into your agent conversation or automation flow, so it build Before writing any NutUI-React (@nutui/nutui-react) code, first read https://nutui.jd.com/h5/react/4x/llms-full.txt to understand the components' real APIs, usage, and style structure. Do not guess props or enum values from memory. Always look up the docs before using a component, then write code. If your environment supports skills, run: -npm i -D @nutui/nutui-react-cli -npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +npx skills add jdf2e/nutui-react --skill nutui-react ``` ## What the agent gets @@ -48,8 +47,7 @@ Full reference: [MCP Server](/#/en-US/ai/mcp) The CLI ships with a Skill file following the Agent Skills spec. The CLI/MCP provide the _capabilities_; the Skill constrains _when and in what order_ the agent uses them — e.g. "look up props and grab a demo before writing a component" and "customize styles with `var(--nutui-*)` tokens instead of hardcoded colors". ```bash -npm i -D @nutui/nutui-react-cli -npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +npx skills add jdf2e/nutui-react --skill nutui-react ``` ### LLMs.txt — structured documentation diff --git a/src/sites/sites-react/doc/docs/ai-react/for-agents.md b/src/sites/sites-react/doc/docs/ai-react/for-agents.md index 176a28a731..3ed1ed9aaa 100644 --- a/src/sites/sites-react/doc/docs/ai-react/for-agents.md +++ b/src/sites/sites-react/doc/docs/ai-react/for-agents.md @@ -10,8 +10,7 @@ 在编写任何 NutUI-React(@nutui/nutui-react)代码之前,请先阅读 https://nutui.jd.com/h5/react/4x/llms-full-cn.txt 理解组件的真实 API、用法与样式结构,不要凭记忆猜测 Prop 或枚举值。使用任何组件前先查文档,再写代码。 如果你的环境支持 skills,请运行: -npm i -D @nutui/nutui-react-cli -npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +npx skills add jdf2e/nutui-react --skill nutui-react ``` ## Agent 获得什么 @@ -48,8 +47,7 @@ CLI 同时可作为本地 MCP 服务运行,把同一份知识注册成 IDE 原 CLI 内置一份遵循 Agent Skills 规范的 Skill 文件,随包分发。CLI/MCP 提供的是「能力」,Skill 则约束 Agent「什么时候、按什么顺序」用这些能力——例如「写组件前先查 Props 再拿示例」「定制样式用 `var(--nutui-*)` token 而非硬编码颜色」。 ```bash -npm i -D @nutui/nutui-react-cli -npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +npx skills add jdf2e/nutui-react --skill nutui-react ``` ### LLMs.txt — 结构化文档 diff --git a/src/sites/sites-react/doc/docs/ai-react/skill.en-US.md b/src/sites/sites-react/doc/docs/ai-react/skill.en-US.md index 16a93caa6f..d104730b3e 100644 --- a/src/sites/sites-react/doc/docs/ai-react/skill.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-react/skill.en-US.md @@ -29,8 +29,7 @@ Guides the agent to query the real API with the CLI before writing any NutUI-Rea **Install:** ```bash -npm i -D @nutui/nutui-react-cli -npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +npx skills add jdf2e/nutui-react --skill nutui-react ``` ## `nutui-react-to-taro` — migrate H5 to Taro @@ -49,8 +48,7 @@ Guides the agent to migrate a project using `@nutui/nutui-react` (H5) to `@nutui **Install:** ```bash -npm i -D @nutui/nutui-react-cli -npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react-to-taro +npx skills add jdf2e/nutui-react --skill nutui-react-to-taro ``` ## How Skill relates to CLI / MCP diff --git a/src/sites/sites-react/doc/docs/ai-react/skill.md b/src/sites/sites-react/doc/docs/ai-react/skill.md index 8fc7af8ec0..432d4acb1e 100644 --- a/src/sites/sites-react/doc/docs/ai-react/skill.md +++ b/src/sites/sites-react/doc/docs/ai-react/skill.md @@ -29,8 +29,7 @@ **安装:** ```bash -npm i -D @nutui/nutui-react-cli -npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +npx skills add jdf2e/nutui-react --skill nutui-react ``` ## `nutui-react-to-taro` — H5 迁移到 Taro @@ -49,8 +48,7 @@ npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react **安装:** ```bash -npm i -D @nutui/nutui-react-cli -npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react-to-taro +npx skills add jdf2e/nutui-react --skill nutui-react-to-taro ``` ## Skill 与 CLI / MCP 的关系 diff --git a/src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md b/src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md index fd7607312f..bcf7e77e5f 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md @@ -73,11 +73,10 @@ When a component name isn't found, the CLI returns a "did you mean" suggestion ( The CLI ships with a Skill file following the [Agent Skills](https://github.com/vercel-labs/skills) spec, distributed with the npm package. It guides the agent to call the right command at the right time — e.g. "look up props with `info` and grab a demo before writing a component" and "customize styles with `var(--nutui-*)` tokens instead of hardcoded colors". -Install into the current project (the skill is bundled with the package; install it from the local path after installing the CLI): +Install into the current project (directly from the GitHub repo): ```bash -npm i -D @nutui/nutui-react-taro-cli -npx skills add ./node_modules/@nutui/nutui-react-taro-cli/skills/nutui-react-taro +npx skills add jdf2e/nutui-react --skill nutui-react-taro ``` Once installed, the agent automatically follows the "look up first, then write" workflow when it encounters NutUI-React Taro tasks. Compatible with Claude Code / Cursor / VS Code / Codex and any agent that supports the skills protocol. diff --git a/src/sites/sites-react/doc/docs/ai-taro/cli.md b/src/sites/sites-react/doc/docs/ai-taro/cli.md index d80275b335..9914decb53 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/cli.md +++ b/src/sites/sites-react/doc/docs/ai-taro/cli.md @@ -73,11 +73,10 @@ nutui-react-taro mcp # 启动本地 MCP 服务,供 IDE CLI 内置一份遵循 [Agent Skills](https://github.com/vercel-labs/skills) 规范的 Skill 文件,随 npm 包分发,指导 Agent 在正确的时机调用正确的命令——例如「写组件前先 `info` 查 Props、再 `demo` 拿示例」「定制样式用 `var(--nutui-*)` token 而非硬编码颜色」。 -安装到当前项目(skill 已随包 bundle,装好 CLI 后从本地路径安装): +安装到当前项目(从 GitHub 仓库直接安装): ```bash -npm i -D @nutui/nutui-react-taro-cli -npx skills add ./node_modules/@nutui/nutui-react-taro-cli/skills/nutui-react-taro +npx skills add jdf2e/nutui-react --skill nutui-react-taro ``` 安装后,Agent 在遇到 NutUI-React Taro 相关任务时会自动遵循「先查后写」的流程。兼容 Claude Code / Cursor / VS Code / Codex 等所有支持 skills 协议的 Agent。 diff --git a/src/sites/sites-react/doc/docs/ai-taro/for-agents.en-US.md b/src/sites/sites-react/doc/docs/ai-taro/for-agents.en-US.md index afa4b02cb9..451bcbf407 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/for-agents.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-taro/for-agents.en-US.md @@ -10,8 +10,7 @@ Paste the following into your agent conversation or automation flow, so it build Before writing any NutUI-React Taro (@nutui/nutui-react-taro) code, first read https://nutui.jd.com/taro/react/4x/llms-full-cn.txt to understand the components' real APIs, usage, and style structure. Do not guess props or enum values from memory. Always look up the docs before using a component, then write code. If your environment supports skills, run: -npm i -D @nutui/nutui-react-taro-cli -npx skills add ./node_modules/@nutui/nutui-react-taro-cli/skills/nutui-react-taro +npx skills add jdf2e/nutui-react --skill nutui-react-taro ``` ## What the agent gets @@ -48,8 +47,7 @@ Full reference: [MCP Server](/#/en-US/ai/mcp) The CLI ships with a Skill file following the Agent Skills spec. The CLI/MCP provide the _capabilities_; the Skill constrains _when and in what order_ the agent uses them — e.g. "look up props and grab a demo before writing a component" and "customize styles with `var(--nutui-*)` tokens instead of hardcoded colors". ```bash -npm i -D @nutui/nutui-react-taro-cli -npx skills add ./node_modules/@nutui/nutui-react-taro-cli/skills/nutui-react-taro +npx skills add jdf2e/nutui-react --skill nutui-react-taro ``` ### LLMs.txt — structured documentation diff --git a/src/sites/sites-react/doc/docs/ai-taro/for-agents.md b/src/sites/sites-react/doc/docs/ai-taro/for-agents.md index 4677b74701..5499835e76 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/for-agents.md +++ b/src/sites/sites-react/doc/docs/ai-taro/for-agents.md @@ -10,8 +10,7 @@ 在编写任何 NutUI-React Taro(@nutui/nutui-react-taro)代码之前,请先阅读 https://nutui.jd.com/taro/react/4x/llms-full-cn.txt 理解组件的真实 API、用法与样式结构,不要凭记忆猜测 Prop 或枚举值。使用任何组件前先查文档,再写代码。 如果你的环境支持 skills,请运行: -npm i -D @nutui/nutui-react-taro-cli -npx skills add ./node_modules/@nutui/nutui-react-taro-cli/skills/nutui-react-taro +npx skills add jdf2e/nutui-react --skill nutui-react-taro ``` ## Agent 获得什么 @@ -48,8 +47,7 @@ CLI 同时可作为本地 MCP 服务运行,把同一份知识注册成 IDE 原 CLI 内置一份遵循 Agent Skills 规范的 Skill 文件,随包分发。CLI/MCP 提供的是「能力」,Skill 则约束 Agent「什么时候、按什么顺序」用这些能力——例如「写组件前先查 Props 再拿示例」「定制样式用 `var(--nutui-*)` token 而非硬编码颜色」。 ```bash -npm i -D @nutui/nutui-react-taro-cli -npx skills add ./node_modules/@nutui/nutui-react-taro-cli/skills/nutui-react-taro +npx skills add jdf2e/nutui-react --skill nutui-react-taro ``` ### LLMs.txt — 结构化文档 From 62c71f5e8ef0e7fbd8fc19c39aeb08a94bb259cd Mon Sep 17 00:00:00 2001 From: alvinhui Date: Tue, 1 Sep 2026 21:11:09 +0800 Subject: [PATCH 17/25] docs: refine MCP and README documentation for NutUI React and Taro, enhancing clarity and readability --- packages/nutui-react-cli/docs/mcp.md | 2 +- packages/nutui-react-cli/skills/nutui-react-to-taro/README.md | 4 +++- packages/nutui-react-cli/skills/nutui-react/README.md | 4 +++- packages/nutui-react-taro-cli/docs/mcp.md | 2 +- .../nutui-react-taro-cli/skills/nutui-react-taro/README.md | 4 +++- 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/nutui-react-cli/docs/mcp.md b/packages/nutui-react-cli/docs/mcp.md index e369d1be03..5cf22f76d9 100644 --- a/packages/nutui-react-cli/docs/mcp.md +++ b/packages/nutui-react-cli/docs/mcp.md @@ -1,6 +1,6 @@ # NutUI Knowledge -本篇介绍如何通过 Model Context Protocol (MCP) 在 AI 工具中使用 NutUI-React。 +通过 Model Context Protocol (MCP) 教 AI 工具中使用 NutUI-React。 ## 启动 MCP 服务 diff --git a/packages/nutui-react-cli/skills/nutui-react-to-taro/README.md b/packages/nutui-react-cli/skills/nutui-react-to-taro/README.md index 7204938898..e4f65477ab 100644 --- a/packages/nutui-react-cli/skills/nutui-react-to-taro/README.md +++ b/packages/nutui-react-cli/skills/nutui-react-to-taro/README.md @@ -1,6 +1,8 @@ # NutUI React to Taro Migration -`nutui-react-to-taro` 是把项目从 NutUI React(`@nutui/nutui-react`,H5)迁移到 NutUI React Taro(`@nutui/nutui-react-taro`,小程序 / 跨端)的 skill,面向 AI 编程智能体。两个包由同一套 codebase 构建,几乎每个组件在两端都同名、Props 也大体一致,因此迁移高度规则化。skill 借助源端与目标端两个离线 CLI 交叉核对 Props,把迁移拆成包名 / import 改写、原生标签 → Taro 组件替换、样式单位修正等机械步骤,并对少数两端 Props 不同的组件做人工判断,避免盲目查找替换产出在小程序上悄悄失效的代码。 +把项目从 NutUI React(`@nutui/nutui-react`,H5)迁移到 NutUI React Taro(`@nutui/nutui-react-taro`,小程序 / 跨端)。 + +两个包由同一套 codebase 构建,几乎每个组件在两端都同名、Props 也大体一致,因此迁移高度规则化。skill 借助源端与目标端两个离线 CLI 交叉核对 Props,把迁移拆成包名 / import 改写、原生标签 → Taro 组件替换、样式单位修正等机械步骤,并对少数两端 Props 不同的组件做人工判断,避免盲目查找替换产出在小程序上悄悄失效的代码。 ## 安装 diff --git a/packages/nutui-react-cli/skills/nutui-react/README.md b/packages/nutui-react-cli/skills/nutui-react/README.md index 0c56553504..525ee78ebb 100644 --- a/packages/nutui-react-cli/skills/nutui-react/README.md +++ b/packages/nutui-react-cli/skills/nutui-react/README.md @@ -1,6 +1,8 @@ # NutUI Knowledge -`nutui-react` 是 NutUI 离线文档知识查询 skill,面向 AI 编程智能体,教它「写 NutUI 代码前先查文档」——通过 `@nutui/nutui-react-cli` 检索官方组件的 Props、文档、示例与 Design Token 避免凭记忆猜测 API 名、Props 或配置项。 +NutUI 离线文档知识查询 skill,面向 AI 编程智能体教它「写 NutUI 代码前先查文档」。 + +内部通过 `@nutui/nutui-react-cli` 检索官方组件的 Props、文档、示例与 Design Token 避免凭记忆猜测 API 名、Props 或配置项。 ## 安装 diff --git a/packages/nutui-react-taro-cli/docs/mcp.md b/packages/nutui-react-taro-cli/docs/mcp.md index 44572863f7..e5a8dba56a 100644 --- a/packages/nutui-react-taro-cli/docs/mcp.md +++ b/packages/nutui-react-taro-cli/docs/mcp.md @@ -1,6 +1,6 @@ # NutUI Taro Knowledge -本篇介绍如何通过 Model Context Protocol (MCP) 在 AI 工具中使用 NutUI-React(Taro 多端)。 +通过 Model Context Protocol (MCP) 教 AI 工具中使用 NutUI-React(Taro 多端)。 ## 启动 MCP 服务 diff --git a/packages/nutui-react-taro-cli/skills/nutui-react-taro/README.md b/packages/nutui-react-taro-cli/skills/nutui-react-taro/README.md index 09bf3aff9a..8c9016442c 100644 --- a/packages/nutui-react-taro-cli/skills/nutui-react-taro/README.md +++ b/packages/nutui-react-taro-cli/skills/nutui-react-taro/README.md @@ -1,6 +1,8 @@ # NutUI Taro Knowledge -`nutui-react-taro` 是 NutUI React Taro 离线文档知识查询 skill,面向 AI 编程智能体,教它「写 NutUI Taro 代码前先查文档」——通过 `@dongweb/nutui-react-taro-cli` 检索官方组件的 Props、文档、示例与 Design Token,避免凭记忆猜测 API 名、Props 或配置项。NutUI React Taro 是京东面向 Taro(小程序 / 多端)的移动端组件库,一套代码同时支持 H5 与小程序,其组件属性可能与 H5 版的 `@nutui/nutui-react` 不同。 +NutUI React Taro 离线文档知识查询。面向 AI 编程智能体,教它「写 NutUI Taro 代码前先查文档」。 + +内部通过 `@dongweb/nutui-react-taro-cli` 检索官方组件的 Props、文档、示例与 Design Token,避免凭记忆猜测 API 名、Props 或配置项。NutUI React Taro 是京东面向 Taro(小程序 / 多端)的移动端组件库,一套代码同时支持 H5 与小程序,其组件属性可能与 H5 版的 `@nutui/nutui-react` 不同。 ## 安装 From f6242a5a23f8f34e529060e71bc3f3b67b6643d2 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 4 Sep 2026 10:40:22 +0800 Subject: [PATCH 18/25] chore: update pnpm-lock.yaml and enhance NutUI React CLI documentation for multi-version support - Updated package versions in pnpm-lock.yaml for '@types/react', '@types/react-dom', 'sass', and others. - Enhanced README.md to include new global options for specifying NutUI version and improved usage examples. - Updated CLI configuration to support multi-version snapshots and added relevant scripts for data preparation. - Improved documentation clarity regarding version detection and usage instructions for the CLI. --- packages/nutui-react-cli-core/package.json | 15 +- .../scripts/build-meta.mjs | 380 ++ .../scripts/create-properties.mjs | 126 + .../scripts/prepare-data.mjs | 156 +- .../nutui-react-cli-core/scripts/sync.mjs | 294 ++ .../scripts/versions.config.mjs | 18 + .../src/__tests__/version-routing.test.ts | 149 + packages/nutui-react-cli-core/src/cli.ts | 12 + .../src/commands/_shared.ts | 62 +- .../nutui-react-cli-core/src/commands/demo.ts | 68 +- .../nutui-react-cli-core/src/commands/doc.ts | 35 +- .../nutui-react-cli-core/src/commands/info.ts | 54 +- .../nutui-react-cli-core/src/commands/list.ts | 48 +- .../src/commands/token.ts | 55 +- packages/nutui-react-cli-core/src/config.ts | 3 + packages/nutui-react-cli-core/src/data.ts | 120 +- packages/nutui-react-cli-core/src/format.ts | 25 +- .../nutui-react-cli-core/src/mcp/tools.ts | 69 +- packages/nutui-react-cli-core/src/types.ts | 17 + packages/nutui-react-cli-core/src/version.ts | 103 + .../nutui-react-cli-core/vitest.config.ts | 8 + packages/nutui-react-cli/README.md | 30 +- .../nutui-react-cli/scripts/prepare-data.mjs | 6 +- .../skills/nutui-react/SKILL.en.md | 4 +- .../skills/nutui-react/SKILL.md | 4 +- packages/nutui-react-cli/src/cli.ts | 1 + packages/nutui-react-cli/tsup.config.ts | 1 + packages/nutui-react-taro-cli/README.md | 30 +- .../scripts/prepare-data.mjs | 6 +- .../skills/nutui-react-taro/SKILL.en.md | 4 +- .../skills/nutui-react-taro/SKILL.md | 4 +- packages/nutui-react-taro-cli/src/cli.ts | 1 + packages/nutui-react-taro-cli/tsup.config.ts | 1 + pnpm-lock.yaml | 3723 +++++++++-------- 34 files changed, 3700 insertions(+), 1932 deletions(-) create mode 100644 packages/nutui-react-cli-core/scripts/build-meta.mjs create mode 100644 packages/nutui-react-cli-core/scripts/create-properties.mjs create mode 100644 packages/nutui-react-cli-core/scripts/sync.mjs create mode 100644 packages/nutui-react-cli-core/scripts/versions.config.mjs create mode 100644 packages/nutui-react-cli-core/src/__tests__/version-routing.test.ts create mode 100644 packages/nutui-react-cli-core/src/version.ts create mode 100644 packages/nutui-react-cli-core/vitest.config.ts diff --git a/packages/nutui-react-cli-core/package.json b/packages/nutui-react-cli-core/package.json index 3abc909086..0a02ae41e5 100644 --- a/packages/nutui-react-cli-core/package.json +++ b/packages/nutui-react-cli-core/package.json @@ -8,15 +8,26 @@ "author": "jdcfe", "exports": { ".": "./src/index.ts", - "./scripts/prepare-data.mjs": "./scripts/prepare-data.mjs" + "./scripts/prepare-data.mjs": "./scripts/prepare-data.mjs", + "./scripts/sync.mjs": "./scripts/sync.mjs", + "./scripts/build-meta.mjs": "./scripts/build-meta.mjs", + "./scripts/create-properties.mjs": "./scripts/create-properties.mjs" + }, + "scripts": { + "test": "vitest run", + "test:watch": "vitest" }, "dependencies": { "@modelcontextprotocol/sdk": "^1.30.0", + "semver": "^7.8.0", "yargs": "^17.7.3" }, "devDependencies": { "@types/node": "^22.20.1", + "@types/semver": "^7.7.1", "@types/yargs": "^17.0.35", - "typescript": "^5.6.2" + "markdown-it": "^14.2.0", + "typescript": "^5.6.2", + "vitest": "^3.2.7" } } diff --git a/packages/nutui-react-cli-core/scripts/build-meta.mjs b/packages/nutui-react-cli-core/scripts/build-meta.mjs new file mode 100644 index 0000000000..0c1bb59595 --- /dev/null +++ b/packages/nutui-react-cli-core/scripts/build-meta.mjs @@ -0,0 +1,380 @@ +// 聚合 config.json + properties.json + demos + variables.scss,输出 components.json(meta)。 +// 面向 AI Coding 的「单一事实源」中间产物,供后续 llms.txt / CLI / MCP 共同消费。 +// +// 本文件是仓库根 scripts/build-meta.mjs 的「可参数化」版本:所有输入路径与 CSS 变量 +// 前缀都改为入参,从而能对任意 git tag 的 worktree(3.x / 4.x)跑同一套抽取逻辑。 +// 详见 packages/nutui-react-cli-core/scripts/sync.mjs 的多版本快照流程。 +// +// DO NOT manual edit the output. Run via prepare-data / sync. +import fs from 'node:fs' +import path from 'node:path' +import { fileURLToPath } from 'node:url' + +const SCHEMA_VERSION = '1.0.0' + +// properties.json 的「组件名」经三级归一后仍无法匹配 config 的特例,手工兜底。 +// 注:SideNavBar 系列在 src/packages 有目录但未注册进 config.nav,故不设别名, +// 让其如实落入 orphan-api 警告(提示「有文档但组件未注册」)。 +const COMPONENT_ALIAS = { + IconFont: 'icon', +} + +// 把 properties 的中文位置式列映射为语义字段。语义严格只对 props 表成立, +// 枚举/结构表(kind !== 'props')的四列语义不同,消费方应按 kind 重新解释。 +const mapRow = (rec) => ({ + prop: (rec['第一列'] || '').trim(), + desc: (rec['第二列'] || '').trim(), + type: (rec['第三列'] || '').trim(), + default: (rec['第四列'] || '').trim(), +}) + +// 归一表格名,仅用于合并大小写差异(Props vs props),不合并语义变体(Props(direction=...))。 +const normalizeTableName = (name) => (name || '').trim().toLowerCase() + +const classifyKind = (name) => { + const t = normalizeTableName(name) + if (t === 'ref') return 'ref' + if (t === 'methods' || t === 'forminstance') return 'methods' + if (t.startsWith('props')) return 'props' + return 'other' +} + +// config 的组件 name(PascalCase)→ 目录名(既有约定:name.toLowerCase())。 +const toDirId = (name) => String(name).toLowerCase() + +// 把 properties 的「组件名」归属到某个 config 组件 id。三级优先级: +// 1) 去点拼接小写:子组件多在 config 有独立条目(Checkbox.Group→checkboxgroup) +// 2) 首段小写:无独立条目时归到父组件(Tabs.Tabpane→tabs) +// 3) 别名表兜底(IconFont→icon) +const resolveApiId = (rawComponentName, validIds) => { + const raw = String(rawComponentName) + if (COMPONENT_ALIAS[raw]) return COMPONENT_ALIAS[raw] + const joined = raw.replace(/\./g, '').toLowerCase() + if (validIds.has(joined)) return joined + const firstSeg = raw.split('.')[0].toLowerCase() + if (validIds.has(firstSeg)) return firstSeg + return joined // 落 orphan,保留去点形式便于诊断 +} + +// ---- A. properties.json → bucket[id] = { normKey -> table } ---- +function buildApiBucket(properties, validIds, warn, orphanLabel = 'orphan-api') { + const bucket = {} + const orphan = new Set() + + for (const rec of properties) { + const raw = rec['组件名'] + const id = resolveApiId(raw, validIds) + if (!validIds.has(id)) { + orphan.add(`${raw} (id=${id})`) + continue + } + const tableNameRaw = rec['表格名'] || 'Props' + const normKey = normalizeTableName(tableNameRaw) + // 仅当表来自父组件视角(raw 含点且归到了父组件 id)时才标记子组件来源; + // 归到独立子组件条目时它就是该组件本身,subComponent 记 null。 + const hasDot = String(raw).includes('.') + const joinedId = String(raw).replace(/\./g, '').toLowerCase() + const subComponent = + hasDot && id !== joinedId ? String(raw).split('.').slice(1).join('.') : null + // 合并键含来源组件:同一 id 下不同原始组件的同名表(如 Icon 与 IconFont 的 Props) + // 应保持为独立表格,只有完全同源的表才合并大小写差异。 + const groupKey = `${raw}@@${normKey}` + + if (!bucket[id]) bucket[id] = {} + if (!bucket[id][groupKey]) { + bucket[id][groupKey] = { + name: tableNameRaw, + kind: classifyKind(tableNameRaw), + sourceComponent: raw, + subComponent, + rows: [], + } + } else if (bucket[id][groupKey].name !== tableNameRaw) { + warn( + `[table-case] "${id}" 合并大小写差异表格:「${bucket[id][groupKey].name}」与「${tableNameRaw}」` + ) + } + bucket[id][groupKey].rows.push(mapRow(rec)) + } + + if (orphan.size) { + warn( + `[${orphanLabel}] ${orphan.size} 个 properties 组件名无法匹配 config,未注入:${[...orphan].join(',')}` + ) + } + return bucket +} + +// bucket[id] → api.tables 数组 + Props 行内质量校验 +function bucketToApi(id, tablesMap, warn) { + if (!tablesMap) return { tables: [] } + const tables = Object.values(tablesMap) + for (const t of tables) { + if (t.kind !== 'props') continue + const seen = new Set() + for (const row of t.rows) { + if (!row.prop || !row.type) { + warn(`[props-field] "${id}" 表「${t.name}」存在缺列行:prop="${row.prop}" type="${row.type}"`) + } + if (row.prop) { + if (seen.has(row.prop)) warn(`[dup-prop] "${id}" 表「${t.name}」prop 重复:${row.prop}`) + seen.add(row.prop) + } + } + } + return { tables } +} + +// ---- B. variables.scss → tokens(按最长组件目录前缀归属,否则 global)---- +// cssVarPrefix 参数化:v3/v4 的组件 token 体系均为 --nutui-(实测 3.x 亦然), +// 仅保留入参以便未来某个 major 若切换前缀时无需改代码。 +function parseTokens(variablesPath, validIdsSorted, cssVarPrefix) { + const content = fs.readFileSync(variablesPath, 'utf-8') + const escPrefix = cssVarPrefix.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + // 仅匹配「$scssVar: var(--xxx[, default]) !default;」的定义行(单行)。 + const re = new RegExp( + `^\\s*\\$([\\w-]+):\\s*var\\((${escPrefix}[\\w-]+)\\s*(?:,\\s*([^;]*?))?\\)\\s*!default`, + 'gm' + ) + const perComponent = {} + const globalTokens = [] + let m + while ((m = re.exec(content)) !== null) { + const scssVar = `$${m[1]}` + const cssVar = m[2] + const def = m[3] != null ? m[3].trim() : null + const token = { cssVar, scssVar, default: def } + const rest = cssVar.slice(cssVarPrefix.length) + // 最长匹配:validIdsSorted 已按长度降序 + const owner = validIdsSorted.find( + (id) => rest === id || rest.startsWith(`${id}-`) + ) + if (owner) { + ;(perComponent[owner] ||= []).push(token) + } else { + globalTokens.push(token) + } + } + return { perComponent, globalTokens } +} + +// ---- demos 扫描 ---- +function scanDemos(packagesDir, id, sub) { + const dir = path.join(packagesDir, id, 'demos', sub) + if (!fs.existsSync(dir)) return [] + return fs + .readdirSync(dir) + .map((f) => f.match(/^demo(\d+)\.tsx$/)) + .filter(Boolean) + .sort((a, b) => Number(a[1]) - Number(b[1])) + .map((mt) => `src/packages/${id}/demos/${sub}/${mt[0]}`) +} + +// ---- docs 存在性 ---- +function resolveDocs(repoRoot, id, showFlag, warn) { + const map = { + h5: 'doc.md', + enUS: 'doc.en-US.md', + zhTW: 'doc.zh-TW.md', + taro: 'doc.taro.md', + } + const docs = {} + for (const [key, file] of Object.entries(map)) { + const rel = `src/packages/${id}/${file}` + docs[key] = fs.existsSync(path.join(repoRoot, rel)) ? rel : null + } + if (showFlag && !docs.h5) warn(`[doc-missing] "${id}" show:true 但缺 doc.md`) + return docs +} + +// ---- spec 引用(可选,仅存在时输出)---- +function resolveSpec(repoRoot, specDir, id) { + if (!specDir) return null + const base = path.join(specDir, id) + if (!fs.existsSync(base)) return null + const spec = {} + for (const key of ['base', 'h5', 'taro']) { + const rel = `src/types/spec/${id}/${key}.ts` + if (fs.existsSync(path.join(repoRoot, rel))) spec[key] = rel + } + return Object.keys(spec).length ? spec : null +} + +/** + * 从一个 NutUI 仓库 checkout(任意 tag 的 worktree)抽取 meta/components.json 结构。 + * 所有输入路径都可注入,因此同一套逻辑可作用于 3.x / 4.x 的不同源码树。 + * + * @param {object} opts + * @param {string} opts.repoRoot 仓库根(worktree)绝对路径 + * @param {string} opts.configPath src/config.json 绝对路径 + * @param {string} opts.propertiesPath scripts/properties.json 绝对路径 + * @param {string} [opts.propertiesTaroPath] scripts/properties-taro.json(缺失则 apiTaro 空表 + warn) + * @param {string} opts.packagesDir src/packages 绝对路径 + * @param {string} opts.variablesPath src/styles/variables.scss 绝对路径 + * @param {string} opts.pkgJsonPath package.json 绝对路径(取 libVersion) + * @param {string} [opts.specDir] src/types/spec 绝对路径(可选) + * @param {string} [opts.cssVarPrefix='--nutui-'] 组件 token 的 CSS 变量前缀 + * @param {string} opts.out 输出 components.json 的绝对路径 + * @returns {{ globalTokens: number, componentCount: number, libVersion: string, warnings: string[] }} + */ +export function buildMeta(opts) { + const { + repoRoot, + configPath, + propertiesPath, + propertiesTaroPath, + packagesDir, + variablesPath, + pkgJsonPath, + specDir, + cssVarPrefix = '--nutui-', + out, + } = opts + + const warnings = [] + const warn = (msg) => warnings.push(msg) + + const config = JSON.parse(fs.readFileSync(configPath, 'utf-8')) + const properties = JSON.parse(fs.readFileSync(propertiesPath, 'utf-8')) + // taro 端 Props(源自 doc.taro.md)。为可选产物:缺失时 apiTaro 落空表并告警,不中断。 + let propertiesTaro = null + if (propertiesTaroPath && fs.existsSync(propertiesTaroPath)) { + propertiesTaro = JSON.parse(fs.readFileSync(propertiesTaroPath, 'utf-8')) + } else { + warn( + `[props-taro-missing] 未找到 properties-taro.json,apiTaro 全部为空。` + ) + } + const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8')) + + // config.nav → 主索引 + const validIds = new Set() + for (const cat of config.nav) { + for (const p of cat.packages) { + validIds.add(toDirId(p.name)) + } + } + const validIdsSorted = [...validIds].sort((a, b) => b.length - a.length) + + const bucket = buildApiBucket(properties, validIds, warn) + const bucketTaro = propertiesTaro + ? buildApiBucket(propertiesTaro, validIds, warn, 'orphan-api-taro') + : {} + const { perComponent: tokensByComp, globalTokens } = parseTokens( + variablesPath, + validIdsSorted, + cssVarPrefix + ) + + const components = {} + const categories = [] + const noApiIds = [] + const noApiTaroIds = [] + + for (const cat of config.nav) { + const catRef = { name: cat.name, enName: cat.enName, components: [] } + for (const p of cat.packages) { + const id = toDirId(p.name) + const api = bucketToApi(id, bucket[id], warn) + const apiTaro = bucketToApi(id, bucketTaro[id], warn) + if (!api.tables.length) noApiIds.push(id) + if (!apiTaro.tables.length) noApiTaroIds.push(id) + + const entry = { + id, + name: p.name, + cName: p.cName, + version: p.version, + category: { name: cat.name, enName: cat.enName }, + taro: !!p.taro, + v15: !!p.v15, + v16: !!p.v16, + } + // 可选原样字段 + for (const k of ['author', 'type', 'desc', 'sort', 'show', 'rn', 'exclude', 'jdtaro']) { + if (p[k] !== undefined) entry[k] = p[k] + } + entry.docs = resolveDocs(repoRoot, id, p.show, warn) + entry.demos = { + h5: scanDemos(packagesDir, id, 'h5'), + taro: scanDemos(packagesDir, id, 'taro'), + } + const spec = resolveSpec(repoRoot, specDir, id) + if (spec) entry.spec = spec + entry.api = api + entry.apiTaro = apiTaro + entry.tokens = tokensByComp[id] || [] + + if (p.show && !entry.demos.h5.length && !entry.demos.taro.length) { + warn(`[demo-empty] "${id}" show:true 但无 demo`) + } + if (!cat.enName) warn(`[category] 分类「${cat.name}」缺 enName`) + + components[id] = entry + catRef.components.push(id) + } + categories.push(catRef) + } + + const componentCount = Object.keys(components).length + const apiComponentCount = componentCount - noApiIds.length + const apiTaroComponentCount = componentCount - noApiTaroIds.length + + const output = { + schemaVersion: SCHEMA_VERSION, + libVersion: pkg.version, + componentCount, + apiComponentCount, + apiTaroComponentCount, + categories, + globalTokens, + components, + } + + fs.mkdirSync(path.dirname(out), { recursive: true }) + fs.writeFileSync(out, `${JSON.stringify(output, null, 2)}\n`) + + return { + globalTokens: globalTokens.length, + componentCount, + apiComponentCount, + apiTaroComponentCount, + libVersion: pkg.version, + noApiIds, + warnings, + } +} + +// 独立运行兜底:从仓库根默认路径跑一次(等价于原 scripts/build-meta.mjs), +// 便于在 core 目录直接 `node scripts/build-meta.mjs` 调试当前 checkout。 +function main() { + const __dirname = path.dirname(fileURLToPath(import.meta.url)) + // packages/nutui-react-cli-core/scripts -> 仓库根 + const ROOT = path.resolve(__dirname, '..', '..', '..') + console.log('🚀 building meta/components.json (standalone) ...') + const res = buildMeta({ + repoRoot: ROOT, + configPath: path.join(ROOT, 'src/config.json'), + propertiesPath: path.join(ROOT, 'scripts/properties.json'), + propertiesTaroPath: path.join(ROOT, 'scripts/properties-taro.json'), + packagesDir: path.join(ROOT, 'src/packages'), + variablesPath: path.join(ROOT, 'src/styles/variables.scss'), + pkgJsonPath: path.join(ROOT, 'package.json'), + specDir: path.join(ROOT, 'src/types/spec'), + cssVarPrefix: '--nutui-', + out: path.join(ROOT, 'meta/components.json'), + }) + console.log( + `✅ 组件 ${res.componentCount},有 API 表(H5) ${res.apiComponentCount},全局 token ${res.globalTokens},libVersion ${res.libVersion}` + ) + if (res.warnings.length) { + console.log(`\n⚠️ ${res.warnings.length} 条 WARNING:`) + for (const w of res.warnings) console.log(` - ${w}`) + } else { + console.log('\n✨ 无 WARNING') + } +} + +if (process.argv[1] && fileURLToPath(import.meta.url) === path.resolve(process.argv[1])) { + main() +} diff --git a/packages/nutui-react-cli-core/scripts/create-properties.mjs b/packages/nutui-react-cli-core/scripts/create-properties.mjs new file mode 100644 index 0000000000..70bb0adb29 --- /dev/null +++ b/packages/nutui-react-cli-core/scripts/create-properties.mjs @@ -0,0 +1,126 @@ +// 扫描组件文档(doc.md / doc.taro.md),抽取 Properties / Ref 等表格,输出 properties(.json)。 +// +// 这是把仓库内 scripts/create-properties.js 的解析逻辑内联进 core 的版本: +// - 依赖 core 自带的 markdown-it,不动 worktree 的 node_modules; +// - 入参 { configPath, packagesDir, docFileName, outPath } 全部可注入,可对任意 +// tag 的 worktree 现场生成 properties,供 build-meta 消费; +// - 修正了 3.x 版 create-properties.js 的 bug:taro 模式仍写死 ./properties.json +// 导致污染 H5 数据 —— 这里一律按 outPath 写。 +import fs from 'node:fs' +import path from 'node:path' +import MarkdownIt from 'markdown-it' + +const TBODY_OPEN = 'tbody_open' +const TBODY_CLOSE = 'tbody_close' +const TR_OPEN = 'tr_open' +const TR_CLOSE = 'tr_close' + +const md = new MarkdownIt() + +// 从 markdown token 流里逐个表格抽出 { h2, h3, list(每行的 token 片段) }。 +const gen = (tokens) => { + const getNextTable = (t, index) => { + const list = t.slice(index) + const start = list.findIndex((token) => token.type === TBODY_OPEN) + const end = list.findIndex((token) => token.type === TBODY_CLOSE) + return start === -1 || end === -1 ? [0, 0] : [index + start, index + end] + } + const parseTable = (t, left, right) => { + const sourcesMap = [] + const currSources = t.slice(left, right + 1) + while (currSources.filter((source) => source.type === TR_OPEN).length) { + const trStartIndex = currSources.findIndex((s) => s.type === TR_OPEN) + const trEndIndex = currSources.findIndex((s) => s.type === TR_CLOSE) + sourcesMap.push(currSources.slice(trStartIndex, trEndIndex + 1)) + currSources.splice(trStartIndex, trEndIndex - trStartIndex + 1) + } + return sourcesMap + } + const searchName = (t, left) => { + const list = t.slice(0, left).reverse() + const h2 = list.findIndex( + (token) => token.tag === 'h2' && token.type === 'heading_open' + ) + const h3 = list.findIndex( + (token) => token.tag === 'h3' && token.type === 'heading_open' + ) + return [list[h2 - 1]?.content || '', list[h3 - 1]?.content || ''] + } + const res = [] + let index = 0 + while (true) { + const [left, right] = getNextTable(tokens, index) + if (left >= right) break // 扫到文档结尾 + index = right + 1 + const [h2, h3] = searchName(tokens, left) + res.push({ h2, h3, list: parseTable(tokens, left, right) }) + } + return res +} + +const formatDefault = (str) => { + str = str.trim() + if (str[0] === '`') str = str.slice(1) + if (str[str.length - 1] === '`') str = str.slice(0, str.length - 1) + return str.trim() +} + +/** + * 生成 properties 数据(与仓库内 scripts/properties(.taro).json 结构一致)。 + * + * @param {object} opts + * @param {string} opts.configPath src/config.json 绝对路径 + * @param {string} opts.packagesDir src/packages 绝对路径 + * @param {string} opts.docFileName 'doc.md'(H5)| 'doc.taro.md'(Taro) + * @param {string} opts.outPath 输出 json 的绝对路径 + * @returns {{ count: number, componentsWithDoc: number }} + */ +export function runCreateProperties({ configPath, packagesDir, docFileName, outPath }) { + const cfg = JSON.parse(fs.readFileSync(configPath, 'utf-8')) + const typesData = [] + let componentsWithDoc = 0 + + for (const nav of cfg.nav) { + for (const component of nav.packages) { + const absolutePath = path.join( + packagesDir, + component.name.toLowerCase(), + docFileName + ) + if (!fs.existsSync(absolutePath)) continue + componentsWithDoc++ + const data = fs.readFileSync(absolutePath, 'utf8') + const sources = md.parse(data, {}) + const res = gen(sources) + res.forEach((r) => { + if (r.h2.includes('主题')) return + for (const sourceMap of r.list) { + const inlineItem = sourceMap.filter((s) => s.type === 'inline') + const propItem = + inlineItem.length > 0 + ? `${inlineItem[0].content.replace(/`.*?`/g, '')}` + : '' + const infoItem = inlineItem.length > 1 ? `${inlineItem[1].content}` : '' + const typeItem = inlineItem.length > 2 ? `${inlineItem[2].content}` : '' + let defaultItem = inlineItem.length > 3 ? `${inlineItem[3].content}` : '' + defaultItem = formatDefault(defaultItem) + typesData.push({ + 组件分类: nav.name, + 组件名: r.h2, + 版本号: component.version, + 表格名: r.h3, + 第一列: propItem, + 第二列: infoItem, + 第三列: typeItem, + 第四列: defaultItem, + }) + } + }) + } + } + + fs.mkdirSync(path.dirname(outPath), { recursive: true }) + // 关键修正:一律写 outPath(3.x 原脚本 taro 模式写死 ./properties.json,会污染 H5)。 + fs.writeFileSync(outPath, `${JSON.stringify(typesData, null, 2)}`) + return { count: typesData.length, componentsWithDoc } +} diff --git a/packages/nutui-react-cli-core/scripts/prepare-data.mjs b/packages/nutui-react-cli-core/scripts/prepare-data.mjs index 1fd34aa33f..8ff8f6a094 100644 --- a/packages/nutui-react-cli-core/scripts/prepare-data.mjs +++ b/packages/nutui-react-cli-core/scripts/prepare-data.mjs @@ -1,63 +1,16 @@ -// 读仓库根 meta/components.json,为某个 CLI 叶子包产出自包含的 data/ 快照。 +// 把某个 tag 快照的 meta/components.json 裁剪为叶子包自包含的 data/v{tag}/ 目录树。 // 平台差异通过参数注入:H5 取 docs.h5/enUS + demos.h5 + api;Taro 取 docs.taro + demos.taro + apiTaro。 -// 会先自动重生成 meta(generate:meta),无需手动同步。 -// 各叶子包的 scripts/prepare-data.mjs 只需 import 本函数并传入自己的参数。 +// +// 数据来源改为「某个 worktree(tag checkout)+ 其 meta」而非仓库根,从而支持多版本: +// sync.mjs 为每个入选 tag 产出 worktree + meta,叶子包 prepare-data 循环调本函数把每份 +// 裁剪到 data/v{tag}/。 // DO NOT manual edit the output (data/). Run: pnpm run prepare-data import fs from 'node:fs' import path from 'node:path' -import { fileURLToPath } from 'node:url' -import { execFileSync } from 'node:child_process' -const __dirname = path.dirname(fileURLToPath(import.meta.url)) -// core 包目录:packages/nutui-react-cli-core/scripts -> .. -const CORE_DIR = path.resolve(__dirname, '..') -// 仓库根:packages/nutui-react-cli-core -> ../.. -const REPO_ROOT = path.resolve(CORE_DIR, '..', '..') -const META_PATH = path.join(REPO_ROOT, 'meta/components.json') -const BUILD_META_SCRIPT = path.join(REPO_ROOT, 'scripts/build-meta.mjs') - -// 先重生成 meta 再读,确保快照与仓库源码(config/properties/demos/...)同步, -// 免去手动 generate:meta 的漏同步风险。build-meta 纯读源码且幂等,可安全重复执行。 -function regenerateMeta() { - if (!fs.existsSync(BUILD_META_SCRIPT)) { - // 脱离 monorepo(如已发布包被重新 build),无源码可生成,沿用现有快照。 - console.log('ℹ️ 未找到 build-meta 脚本,跳过 meta 重生成(沿用现有快照)') - return - } - console.log('🔄 重新生成 meta/components.json(generate:meta)...') - execFileSync(process.execPath, [BUILD_META_SCRIPT], { stdio: 'inherit' }) -} - -function readMeta() { - try { - regenerateMeta() - } catch (err) { - // meta 生成失败:有旧快照则告警后沿用,否则无从继续。 - if (fs.existsSync(META_PATH)) { - console.warn( - `⚠️ meta 重生成失败(${err.message}),沿用现有 ${path.relative(REPO_ROOT, META_PATH)}` - ) - } else { - console.error( - `❌ meta 重生成失败且无现有快照:${err.message}\n` + - ` 请在仓库根手动执行:npm run generate:meta` - ) - process.exit(1) - } - } - if (!fs.existsSync(META_PATH)) { - console.error( - `❌ 未找到 ${path.relative(REPO_ROOT, META_PATH)}。\n` + - ` 它是构建产物,请先在仓库根执行:npm run generate:meta` - ) - process.exit(1) - } - return JSON.parse(fs.readFileSync(META_PATH, 'utf-8')) -} - -// meta 里的路径始终是 posix 相对仓库根路径,用 posix 取 basename,再 join 到本地。 -function copyRepoFile(relPosixPath, destAbs) { - const srcAbs = path.join(REPO_ROOT, relPosixPath) +// meta 里的路径始终是 posix 相对仓库根路径。从 srcRepoRoot(worktree)取源文件。 +function copyRepoFile(srcRepoRoot, relPosixPath, destAbs) { + const srcAbs = path.join(srcRepoRoot, relPosixPath) if (!fs.existsSync(srcAbs)) return false fs.mkdirSync(path.dirname(destAbs), { recursive: true }) fs.copyFileSync(srcAbs, destAbs) @@ -65,23 +18,22 @@ function copyRepoFile(relPosixPath, destAbs) { } /** - * 生成某叶子包的 data/ 快照。 + * 把一份 tag 快照裁剪进叶子包的某个版本目录。 * @param {object} opts - * @param {string} opts.pkgDir 叶子包根目录绝对路径(其下写入 data/) - * @param {Record} opts.docKeys lang -> meta.docs 的 key。如 {zh:'h5', en:'enUS'} 或 {zh:'taro'} + * @param {string} opts.srcMetaPath 该 tag 的 meta/components.json 绝对路径(sync 产出) + * @param {string} opts.srcRepoRoot 该 tag 的 worktree 根(复制 docs/demos 源文件用) + * @param {string} opts.outDir 输出目录(如 /data/v3.1.0),内部写 meta.json + docs/ + demos/ + * @param {Record} opts.docKeys lang -> meta.docs 的 key。{zh:'h5', en:'enUS'} 或 {zh:'taro'} * @param {'h5'|'taro'} opts.demoKey 取 meta.demos 的哪一端 * @param {'api'|'apiTaro'} opts.apiField 取哪一端的 API 表,归一写入快照的 `api` 字段 + * @returns {{ docCount:number, demoCount:number, missing:number, libVersion:string }} */ -export function prepareData({ pkgDir, docKeys, demoKey, apiField }) { - console.log( - `🚀 building data snapshot (${apiField === 'apiTaro' ? 'Taro' : 'React/H5'}) for ${path.relative(REPO_ROOT, pkgDir)} ...` - ) - const meta = readMeta() - const DATA_DIR = path.join(pkgDir, 'data') +export function prepareData({ srcMetaPath, srcRepoRoot, outDir, docKeys, demoKey, apiField }) { + const meta = JSON.parse(fs.readFileSync(srcMetaPath, 'utf-8')) - // 全量重建,避免残留上一版删掉的组件。 - fs.rmSync(DATA_DIR, { recursive: true, force: true }) - fs.mkdirSync(DATA_DIR, { recursive: true }) + // 全量重建该版本目录,避免残留上一次的组件。 + fs.rmSync(outDir, { recursive: true, force: true }) + fs.mkdirSync(outDir, { recursive: true }) // 1. meta.json:把对应端的 API 归一到 `api`,删除 apiTaro,缩减 docs/demos 到本端, // 使运行时代码只读 `api` / 只需 .md,无需感知平台。 @@ -89,7 +41,6 @@ export function prepareData({ pkgDir, docKeys, demoKey, apiField }) { const slimComponents = {} for (const [id, c] of Object.entries(meta.components)) { const api = c[apiField] || { tables: [] } - // docs 归一:只保留本端支持的 lang,key 换成 lang 名(zh/en),值为原相对路径(仅用于存在性)。 const docs = {} for (const lang of langKeys) docs[lang] = c.docs?.[docKeys[lang]] ?? null slimComponents[id] = { @@ -102,7 +53,7 @@ export function prepareData({ pkgDir, docKeys, demoKey, apiField }) { } const slimMeta = { ...meta, components: slimComponents } fs.writeFileSync( - path.join(DATA_DIR, 'meta.json'), + path.join(outDir, 'meta.json'), `${JSON.stringify(slimMeta, null, 2)}\n` ) @@ -111,30 +62,77 @@ export function prepareData({ pkgDir, docKeys, demoKey, apiField }) { const missing = [] for (const c of Object.values(meta.components)) { - // 2. docs:按 lang 复制为 data/docs//.md(zh.md / en.md)。 + // 2. docs:按 lang 复制为 docs//.md(zh.md / en.md)。 for (const lang of langKeys) { const rel = c.docs && c.docs[docKeys[lang]] if (!rel) continue - const ok = copyRepoFile(rel, path.join(DATA_DIR, 'docs', c.id, `${lang}.md`)) + const ok = copyRepoFile(srcRepoRoot, rel, path.join(outDir, 'docs', c.id, `${lang}.md`)) if (ok) docCount++ else missing.push(rel) } - // 3. demos:扁平放到 data/demos//.tsx(无 platform 子层)。 + // 3. demos:扁平放到 demos//.tsx(无 platform 子层)。 const demoList = (c.demos && c.demos[demoKey]) || [] for (const rel of demoList) { const base = path.posix.basename(rel) - const ok = copyRepoFile(rel, path.join(DATA_DIR, 'demos', c.id, base)) + const ok = copyRepoFile(srcRepoRoot, rel, path.join(outDir, 'demos', c.id, base)) if (ok) demoCount++ else missing.push(rel) } } - console.log(`✅ 写入 ${path.relative(pkgDir, DATA_DIR)}/`) - console.log(` meta.json + docs ${docCount} 份 + demos ${demoCount} 份`) - if (missing.length) { - console.log(`\n⚠️ ${missing.length} 个 meta 引用的文件在仓库中缺失(已跳过):`) - for (const m of missing.slice(0, 20)) console.log(` - ${m}`) - if (missing.length > 20) console.log(` … 其余 ${missing.length - 20} 条省略`) + return { docCount, demoCount, missing: missing.length, libVersion: meta.libVersion, missingList: missing } +} + +/** + * 完整多版本快照构建:调 sync 遍历 tag,把每份裁剪到 data/v{tag}/,写 data/versions.json。 + * 供两个叶子包的 scripts/prepare-data.mjs 复用(只传自己的平台参数)。 + * + * @param {object} opts + * @param {string} opts.pkgDir 叶子包根目录绝对路径(其下写 data/) + * @param {Record} opts.docKeys + * @param {'h5'|'taro'} opts.demoKey + * @param {'api'|'apiTaro'} opts.apiField + */ +export async function prepareAllVersions({ pkgDir, docKeys, demoKey, apiField }) { + const { sync } = await import('./sync.mjs') + const platform = apiField === 'apiTaro' ? 'Taro' : 'React/H5' + console.log(`🚀 building multi-version data snapshots (${platform}) for ${pkgDir} ...\n`) + + const { snapshots, versionsIndex, cleanup } = sync() + const DATA_DIR = path.join(pkgDir, 'data') + + try { + // 全量重建 data/:清掉旧的 v*/ 目录与 versions.json,避免残留已下线的版本。 + fs.rmSync(DATA_DIR, { recursive: true, force: true }) + fs.mkdirSync(DATA_DIR, { recursive: true }) + + for (const snap of snapshots) { + const outDir = path.join(DATA_DIR, `v${snap.clean}`) + const res = prepareData({ + srcMetaPath: snap.metaPath, + srcRepoRoot: snap.worktreeDir, + outDir, + docKeys, + demoKey, + apiField, + }) + console.log( + ` ✅ v${snap.clean}: docs ${res.docCount} + demos ${res.demoCount}(libVersion ${res.libVersion})` + ) + if (res.missing) { + console.log(` ⚠️ ${res.missing} 个文件在 worktree 缺失(已跳过)`) + } + } + + // versions.json + fs.writeFileSync( + path.join(DATA_DIR, 'versions.json'), + `${JSON.stringify(versionsIndex, null, 2)}\n` + ) + console.log(`\n✅ 写入 data/versions.json(defaultMajor=${versionsIndex.defaultMajor})`) + } finally { + cleanup() + console.log('🧹 已清理临时 worktree') } } diff --git a/packages/nutui-react-cli-core/scripts/sync.mjs b/packages/nutui-react-cli-core/scripts/sync.mjs new file mode 100644 index 0000000000..7f25235318 --- /dev/null +++ b/packages/nutui-react-cli-core/scripts/sync.mjs @@ -0,0 +1,294 @@ +// 多版本数据同步:遍历 NutUI git tag,为每个「每 minor 最高 patch」的 tag 生成一份 +// meta/components.json 快照(放在该 tag 的 worktree 内),并产出 versions.json 索引。 +// +// 与 antd 的 scripts/sync.ts 对应,差异: +// - NutUI 的随包数据是「meta.json + docs/ + demos/ 目录树」而非单个大 JSON,故 sync +// 只负责产出 worktree + meta,真正裁剪到叶子包 data/ 由 prepare-data 消费; +// - properties 一律现场重生成(runCreateProperties):实测 3.x 已提交的 +// scripts/properties.json 是滞后产物(少 200+ 条、API 覆盖率更低),现补更准; +// - worktree 的清理交回调用方(prepare-data 复制完源文件后再 cleanup)。 +// +// sync() 返回 { snapshots, versionsIndex, cleanup }: +// snapshots: Array<{ tag, major, worktreeDir, metaPath }> 已按 tag 升序 +// versionsIndex: { defaultMajor, majors: { vX: { latest, stable, minors } } } +// cleanup(): 移除所有本次创建的 worktree +import fs from 'node:fs' +import os from 'node:os' +import path from 'node:path' +import { fileURLToPath } from 'node:url' +import { execFileSync } from 'node:child_process' +import versionsConfig from './versions.config.mjs' +import { buildMeta } from './build-meta.mjs' +import { runCreateProperties } from './create-properties.mjs' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +// packages/nutui-react-cli-core/scripts -> 仓库根(用于 git 命令的 cwd) +const REPO_ROOT = path.resolve(__dirname, '..', '..', '..') + +const git = (args, opts = {}) => + execFileSync('git', args, { encoding: 'utf-8', ...opts }) + +// 拉取远端全部 v3/v4 tag(升序)。只列 refs,不落地对象。 +function listRemoteTags(repo) { + const out = git([ + 'ls-remote', + '--tags', + '--sort=v:refname', + repo, + 'refs/tags/v3*', + 'refs/tags/v4*', + ]) + return out + .split('\n') + .filter((line) => line && !line.includes('^{}')) + .map((line) => line.replace(/.*refs\/tags\//, '')) +} + +// tag 串(可能带 v 前缀)→ { major:'v3', minor:'3.0', patch:0, prerelease:bool, raw } +function parseTag(tag) { + const clean = tag.replace(/^v/, '') + const m = clean.match(/^(\d+)\.(\d+)\.(\d+)(?:-(.+))?$/) + if (!m) return null + return { + raw: tag, + clean, + majorNum: Number(m[1]), + major: `v${m[1]}`, + minor: `${m[1]}.${m[2]}`, + patch: Number(m[3]), + prerelease: m[4] != null, + } +} + +// 每 minor 取最高 patch。默认排除预发布;includePrerelease 为 true 时(如 v4 全 beta) +// 在「该 minor 没有稳定 tag」时才纳入最高的预发布。 +function buildMinorMap(tags, includePrerelease) { + const parsed = tags.map(parseTag).filter(Boolean) + const byMinor = new Map() // minor -> best parsed tag + const better = (a, b) => { + // 稳定优先于预发布;同稳定性比 patch;patch 相同再比预发布串(beta.7 > beta.6) + if (a.prerelease !== b.prerelease) return a.prerelease ? b : a + if (a.patch !== b.patch) return a.patch > b.patch ? a : b + return (a.raw > b.raw ? a : b) + } + for (const t of parsed) { + if (t.prerelease && !includePrerelease) continue + const cur = byMinor.get(t.minor) + byMinor.set(t.minor, cur ? better(cur, t) : t) + } + return byMinor +} + +// 确保本地存在该 tag 对象;没有就从远端 fetch 到本地同名 tag(幂等、无害)。 +function ensureTagLocally(repo, tag) { + try { + git(['rev-parse', '--verify', '--quiet', `refs/tags/${tag}`], { + cwd: REPO_ROOT, + stdio: 'pipe', + }) + return + } catch { + // 本地无此 tag + } + console.log(` fetch tag ${tag} ...`) + git(['fetch', repo, `refs/tags/${tag}:refs/tags/${tag}`], { + cwd: REPO_ROOT, + stdio: 'pipe', + }) +} + +// 为 tag 建 detached worktree,返回其路径。 +function addWorktree(tag) { + const dir = path.join(os.tmpdir(), `nutui-sync-${tag.replace(/[^\w.-]/g, '_')}`) + if (fs.existsSync(dir)) { + // 残留则先移除(--force 容忍脏树) + try { + git(['worktree', 'remove', dir, '--force'], { cwd: REPO_ROOT, stdio: 'pipe' }) + } catch { + fs.rmSync(dir, { recursive: true, force: true }) + } + } + git(['worktree', 'add', '--detach', dir, tag], { cwd: REPO_ROOT, stdio: 'pipe' }) + return dir +} + +// worktree 内路径解析(3.x / 4.x 结构一致)。 +function repoPaths(worktreeDir) { + return { + configPath: path.join(worktreeDir, 'src/config.json'), + packagesDir: path.join(worktreeDir, 'src/packages'), + variablesPath: path.join(worktreeDir, 'src/styles/variables.scss'), + pkgJsonPath: path.join(worktreeDir, 'package.json'), + specDir: path.join(worktreeDir, 'src/types/spec'), + propertiesPath: path.join(worktreeDir, 'scripts/properties.json'), + propertiesTaroPath: path.join(worktreeDir, 'scripts/properties-taro.json'), + metaPath: path.join(worktreeDir, 'meta/components.json'), + } +} + +// 现补 properties(H5 必补;Taro 仅在有 doc.taro.md 时补,否则降级为空表 + warn)。 +function preparePropertiesInWorktree(worktreeDir, p) { + const hasTaroDoc = () => { + // 抽查任一组件是否有 doc.taro.md;有就认为该 tag 支持 taro 端抽取。 + try { + const cfg = JSON.parse(fs.readFileSync(p.configPath, 'utf-8')) + for (const nav of cfg.nav) { + for (const c of nav.packages) { + const f = path.join(p.packagesDir, c.name.toLowerCase(), 'doc.taro.md') + if (fs.existsSync(f)) return true + } + } + } catch { + /* ignore */ + } + return false + } + + runCreateProperties({ + configPath: p.configPath, + packagesDir: p.packagesDir, + docFileName: 'doc.md', + outPath: p.propertiesPath, + }) + + if (hasTaroDoc()) { + runCreateProperties({ + configPath: p.configPath, + packagesDir: p.packagesDir, + docFileName: 'doc.taro.md', + outPath: p.propertiesTaroPath, + }) + } else { + console.log(` ⚠️ 该 tag 无 doc.taro.md,apiTaro 将为空表`) + } +} + +/** + * 执行多版本同步。 + * @param {object} [opts] + * @param {(tag:string)=>boolean} [opts.tagFilter] 只处理返回 true 的 tag(调试用) + * @returns {{ snapshots: Array<{tag,major,worktreeDir,metaPath}>, versionsIndex: object, cleanup: ()=>void }} + */ +export function sync(opts = {}) { + const cfg = versionsConfig + const allTags = listRemoteTags(cfg.repo) + console.log(`🔎 远端 tag 共 ${allTags.length} 个`) + + // 按 major 分桶取每 minor 最高 patch + const majorKeys = Object.keys(cfg.majors) // ['v3','v4'] + const selected = [] // { tag, major, minor } + const versionsIndex = { defaultMajor: cfg.defaultMajor, majors: {} } + + for (const majorKey of majorKeys) { + const majorNum = Number(majorKey.replace('v', '')) + const majorCfg = cfg.majors[majorKey] + const tagsOfMajor = allTags.filter((t) => { + const p = parseTag(t) + return p && p.majorNum === majorNum + }) + const minorMap = buildMinorMap(tagsOfMajor, majorCfg.includePrerelease) + if (!minorMap.size) { + console.warn(` ⚠️ ${majorKey} 无入选 tag,跳过`) + continue + } + // minors 索引(不带 v 前缀)+ latest(最高 minor 的 tag) + const minors = {} + let latest = null + const sortedMinors = [...minorMap.keys()].sort( + (a, b) => Number(a.split('.')[1]) - Number(b.split('.')[1]) + ) + for (const minor of sortedMinors) { + const t = minorMap.get(minor) + minors[minor] = t.clean + selected.push({ tag: t.raw, clean: t.clean, major: majorKey, minor }) + latest = t.clean + } + versionsIndex.majors[majorKey] = { + latest, + stable: majorCfg.stable !== false && sortedMinors.some((mn) => !minorMap.get(mn).prerelease), + minors, + } + } + + // 可选过滤(调试:只跑部分 tag) + const finalSelected = opts.tagFilter + ? selected.filter((s) => opts.tagFilter(s.tag)) + : selected + + console.log( + `📦 入选快照 ${finalSelected.length} 个:${finalSelected.map((s) => s.tag).join(', ')}` + ) + + const createdWorktrees = [] + const snapshots = [] + + for (const sel of finalSelected) { + console.log(`\n=== ${sel.tag}(${sel.major})===`) + ensureTagLocally(cfg.repo, sel.tag) + const worktreeDir = addWorktree(sel.tag) + createdWorktrees.push(worktreeDir) + const p = repoPaths(worktreeDir) + + preparePropertiesInWorktree(worktreeDir, p) + + const res = buildMeta({ + repoRoot: worktreeDir, + configPath: p.configPath, + propertiesPath: p.propertiesPath, + propertiesTaroPath: p.propertiesTaroPath, + packagesDir: p.packagesDir, + variablesPath: p.variablesPath, + pkgJsonPath: p.pkgJsonPath, + specDir: p.specDir, + cssVarPrefix: cfg.majors[sel.major].cssVarPrefix, + out: p.metaPath, + }) + console.log( + ` ✅ meta:组件 ${res.componentCount},有 API(H5) ${res.apiComponentCount},token ${res.globalTokens},libVersion ${res.libVersion}` + ) + + // 校验:meta 必须有 libVersion 且组件非空 + if (!res.libVersion || res.componentCount === 0) { + throw new Error(`${sel.tag} 的 meta 校验失败:libVersion=${res.libVersion} componentCount=${res.componentCount}`) + } + + snapshots.push({ + tag: sel.tag, + clean: sel.clean, + major: sel.major, + worktreeDir, + metaPath: p.metaPath, + }) + } + + const cleanup = () => { + for (const dir of createdWorktrees) { + try { + git(['worktree', 'remove', dir, '--force'], { cwd: REPO_ROOT, stdio: 'pipe' }) + } catch { + fs.rmSync(dir, { recursive: true, force: true }) + } + } + } + + return { snapshots, versionsIndex, cleanup } +} + +// 独立调试:node scripts/sync.mjs [tagSubstr] +function main() { + const filterArg = process.argv[2] + const { snapshots, versionsIndex, cleanup } = sync( + filterArg ? { tagFilter: (t) => t.includes(filterArg) } : {} + ) + console.log('\n=== versions.json ===') + console.log(JSON.stringify(versionsIndex, null, 2)) + console.log(`\n快照 ${snapshots.length} 个(worktree 未清理,调试模式保留)`) + if (process.env.NUTUI_SYNC_CLEANUP === '1') { + cleanup() + console.log('已清理 worktree') + } +} + +if (process.argv[1] && fileURLToPath(import.meta.url) === path.resolve(process.argv[1])) { + main() +} diff --git a/packages/nutui-react-cli-core/scripts/versions.config.mjs b/packages/nutui-react-cli-core/scripts/versions.config.mjs new file mode 100644 index 0000000000..ae55238edb --- /dev/null +++ b/packages/nutui-react-cli-core/scripts/versions.config.mjs @@ -0,0 +1,18 @@ +// 多版本 sync 的配置:数据源仓库、默认 major、各 major 的抽取参数。 +// CLI 仓库自带(不随叶子包发布)。sync.mjs 读取它遍历 tag 生成快照。 +// +// 说明: +// - repo 用 SSH。实测本机 https://github.com 不通、git@github.com 可达;SSH 也便于 +// 在开发机复用已配置的凭证。CI 上若走 HTTPS,改这里即可。 +// - cssVarPrefix:v3 与 v4 的组件 token 体系实测均为 --nutui-(3.x 的 variables.scss +// 有 900+ 行 --nutui-,仅个位数 --nut-scale-* 工具变量不带 !default、不计入 token), +// 故两者都用 --nutui-。保留该字段仅为未来某个 major 若切换前缀时的扩展点。 +// - includePrerelease:v4 目前只有 beta tag,需允许预发布才能取到 latest。 +export default { + repo: 'git@github.com:jdf2e/nutui-react.git', + defaultMajor: 'v4', + majors: { + v3: { cssVarPrefix: '--nutui-', includePrerelease: false, stable: true }, + v4: { cssVarPrefix: '--nutui-', includePrerelease: true, stable: false }, + }, +} diff --git a/packages/nutui-react-cli-core/src/__tests__/version-routing.test.ts b/packages/nutui-react-cli-core/src/__tests__/version-routing.test.ts new file mode 100644 index 0000000000..c0ee2280eb --- /dev/null +++ b/packages/nutui-react-cli-core/src/__tests__/version-routing.test.ts @@ -0,0 +1,149 @@ +import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest' +import fs from 'node:fs' +import os from 'node:os' +import path from 'node:path' +import { resolveSnapshotDir } from '../data.js' +import { detectVersion } from '../version.js' +import type { VersionsIndex } from '../types.js' + +// 手造一个多版本 data 目录:versions.json + 各 v{tag}/meta.json(仅需能被 existsSync 命中)。 +const VERSIONS: VersionsIndex = { + defaultMajor: 'v4', + majors: { + v3: { latest: '3.1.0', stable: true, minors: { '3.0': '3.0.20', '3.1': '3.1.0' } }, + v4: { latest: '4.0.0-beta.7', stable: false, minors: { '4.0': '4.0.0-beta.7' } }, + }, +} + +let dataDir: string + +beforeAll(() => { + dataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'nutui-cli-test-')) + fs.writeFileSync( + path.join(dataDir, 'versions.json'), + JSON.stringify(VERSIONS, null, 2) + ) + for (const tag of ['3.0.20', '3.1.0', '4.0.0-beta.7']) { + const dir = path.join(dataDir, `v${tag}`) + fs.mkdirSync(dir, { recursive: true }) + fs.writeFileSync( + path.join(dir, 'meta.json'), + JSON.stringify({ libVersion: tag, components: {} }) + ) + } +}) + +afterAll(() => { + fs.rmSync(dataDir, { recursive: true, force: true }) +}) + +describe('resolveSnapshotDir', () => { + it('精确 minor 命中:3.1.0 → v3.1.0', () => { + expect(resolveSnapshotDir(dataDir, '3.1.0')).toBe(path.join(dataDir, 'v3.1.0')) + }) + + it('最近不超过的旧 minor:3.0.5 → v3.0.20(minor 3.0)', () => { + expect(resolveSnapshotDir(dataDir, '3.0.5')).toBe(path.join(dataDir, 'v3.0.20')) + }) + + it('请求的 minor 高于已有:3.5.0 → 回退最近的 3.1 → v3.1.0', () => { + expect(resolveSnapshotDir(dataDir, '3.5.0')).toBe(path.join(dataDir, 'v3.1.0')) + }) + + it('v4 预发布精确命中:4.0.0-beta.7 → v4.0.0-beta.7', () => { + expect(resolveSnapshotDir(dataDir, '4.0.0-beta.7')).toBe( + path.join(dataDir, 'v4.0.0-beta.7') + ) + }) + + it('未知 major:99.0.0 → 回退 defaultMajor(v4) latest,并 stderr 提示', () => { + const spy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true) + expect(resolveSnapshotDir(dataDir, '99.0.0')).toBe( + path.join(dataDir, 'v4.0.0-beta.7') + ) + expect(spy).toHaveBeenCalledOnce() + spy.mockRestore() + }) + + it('只给 major:3 → v3 latest(v3.1.0)', () => { + expect(resolveSnapshotDir(dataDir, '3')).toBe(path.join(dataDir, 'v3.1.0')) + }) +}) + +describe('detectVersion', () => { + const base = { npmPackageName: '@nutui/nutui-react', versionsIndex: VERSIONS } + + it('flag 优先,保留预发布:4.0.0-beta.7', () => { + const r = detectVersion({ ...base, flag: '4.0.0-beta.7' }) + expect(r).toMatchObject({ version: '4.0.0-beta.7', major: 'v4', source: 'flag' }) + }) + + it('flag 只给 major:3 → coerce 3.0.0', () => { + const r = detectVersion({ ...base, flag: '3' }) + expect(r).toMatchObject({ version: '3.0.0', major: 'v3', source: 'flag' }) + }) + + it('flag 带 range 前缀:^3.1.0 → coerce 3.1.0', () => { + const r = detectVersion({ ...base, flag: '^3.1.0' }) + expect(r).toMatchObject({ version: '3.1.0', major: 'v3', source: 'flag' }) + }) + + it('flag 的 major 不存在:99 → 回退 defaultMajor v4 latest', () => { + const spy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true) + const r = detectVersion({ ...base, flag: '99.0.0' }) + expect(r).toMatchObject({ version: '4.0.0-beta.7', major: 'v4' }) + spy.mockRestore() + }) + + it('无 flag、无项目文件:fallback 到 defaultMajor latest', () => { + const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'nutui-empty-')) + const r = detectVersion({ ...base, cwd: tmp }) + expect(r).toMatchObject({ + version: '4.0.0-beta.7', + major: 'v4', + source: 'fallback', + }) + fs.rmSync(tmp, { recursive: true, force: true }) + }) + + it('node_modules 检测优先于 package.json', () => { + const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'nutui-proj-')) + fs.mkdirSync(path.join(tmp, 'node_modules/@nutui/nutui-react'), { + recursive: true, + }) + fs.writeFileSync( + path.join(tmp, 'node_modules/@nutui/nutui-react/package.json'), + JSON.stringify({ version: '3.0.9' }) + ) + fs.writeFileSync( + path.join(tmp, 'package.json'), + JSON.stringify({ dependencies: { '@nutui/nutui-react': '^4.0.0-beta.7' } }) + ) + const r = detectVersion({ ...base, cwd: tmp }) + expect(r).toMatchObject({ version: '3.0.9', major: 'v3', source: 'node_modules' }) + fs.rmSync(tmp, { recursive: true, force: true }) + }) + + it('无 node_modules 时读 package.json 依赖声明', () => { + const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'nutui-proj2-')) + fs.writeFileSync( + path.join(tmp, 'package.json'), + JSON.stringify({ devDependencies: { '@nutui/nutui-react': '~3.1.0' } }) + ) + const r = detectVersion({ ...base, cwd: tmp }) + expect(r).toMatchObject({ version: '3.1.0', major: 'v3', source: 'package.json' }) + fs.rmSync(tmp, { recursive: true, force: true }) + }) + + it('非 semver 依赖声明(workspace:*)→ fallback', () => { + const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'nutui-proj3-')) + fs.writeFileSync( + path.join(tmp, 'package.json'), + JSON.stringify({ dependencies: { '@nutui/nutui-react': 'workspace:*' } }) + ) + const r = detectVersion({ ...base, cwd: tmp }) + expect(r.source).toBe('fallback') + expect(r.major).toBe('v4') + fs.rmSync(tmp, { recursive: true, force: true }) + }) +}) diff --git a/packages/nutui-react-cli-core/src/cli.ts b/packages/nutui-react-cli-core/src/cli.ts index 56de9c4f13..7c5f2e3f50 100644 --- a/packages/nutui-react-cli-core/src/cli.ts +++ b/packages/nutui-react-cli-core/src/cli.ts @@ -25,6 +25,13 @@ export function runCli(config: CliConfig, argv: string[]): void { default: 'text' as OutputFormat, global: true, }) + .option('nutui-version', { + alias: 'nv', + type: 'string', + describe: + '目标 NutUI 版本(如 3、3.1.0、4.0.0-beta.7);省略则从 node_modules / package.json 自动检测', + global: true, + }) .command( ['list', 'ls'], '列出全部组件(按分类)', @@ -39,6 +46,7 @@ export function runCli(config: CliConfig, argv: string[]): void { config, category: a.category, format: a.format as OutputFormat, + nutuiVersion: a['nutui-version'] as string | undefined, }) ) .command( @@ -55,6 +63,7 @@ export function runCli(config: CliConfig, argv: string[]): void { config, component: a.component as string, format: a.format as OutputFormat, + nutuiVersion: a['nutui-version'] as string | undefined, }) ) .command( @@ -82,6 +91,7 @@ export function runCli(config: CliConfig, argv: string[]): void { component: a.component as string, lang: (a.lang as Lang) ?? config.defaultLang, format: a.format as OutputFormat, + nutuiVersion: a['nutui-version'] as string | undefined, }) ) .command( @@ -104,6 +114,7 @@ export function runCli(config: CliConfig, argv: string[]): void { component: a.component as string, name: a.name as string | undefined, format: a.format as OutputFormat, + nutuiVersion: a['nutui-version'] as string | undefined, }) ) .command( @@ -119,6 +130,7 @@ export function runCli(config: CliConfig, argv: string[]): void { config, component: a.component as string | undefined, format: a.format as OutputFormat, + nutuiVersion: a['nutui-version'] as string | undefined, }) ) .command( diff --git a/packages/nutui-react-cli-core/src/commands/_shared.ts b/packages/nutui-react-cli-core/src/commands/_shared.ts index 86a89fd3be..71498854c5 100644 --- a/packages/nutui-react-cli-core/src/commands/_shared.ts +++ b/packages/nutui-react-cli-core/src/commands/_shared.ts @@ -1,7 +1,60 @@ -// 命令间共享:解析组件名,未命中则打印 did-you-mean 并退出。 -import { resolveComponent, suggestComponents } from '../data.js' +// 命令间共享:版本检测 + 快照解析,以及组件名解析(未命中打印 did-you-mean 并退出)。 +import { + loadMetaByDir, + loadVersionsIndex, + resolveComponent, + resolveSnapshotDir, + suggestComponents, +} from '../data.js' +import { detectVersion, type VersionInfo } from '../version.js' import type { CliConfig } from '../config.js' -import type { Component, Meta } from '../types.js' +import type { Component, Meta, OutputFormat } from '../types.js' + +export interface ResolvedContext { + meta: Meta + snapshotDir: string + versionInfo: VersionInfo +} + +// 命令入口统一走这里:flag → detectVersion → resolveSnapshotDir → loadMetaByDir。 +export function resolveContext( + config: CliConfig, + nutuiVersion?: string +): ResolvedContext { + const versionsIndex = loadVersionsIndex(config.dataDir) + const versionInfo = detectVersion({ + flag: nutuiVersion, + cwd: process.cwd(), + npmPackageName: config.npmPackageName, + versionsIndex, + }) + const snapshotDir = resolveSnapshotDir(config.dataDir, versionInfo.version) + const meta = loadMetaByDir(snapshotDir) + return { meta, snapshotDir, versionInfo } +} + +// 文本格式的版本信息头,如 "NutUI React(H5)v3.1.0(来源:package.json)"。 +export function versionHeaderText( + config: CliConfig, + info: VersionInfo +): string { + const sourceLabel: Record = { + flag: '--nutui-version', + node_modules: 'node_modules', + 'package.json': 'package.json', + fallback: '默认', + } + return `${config.libLabel} v${info.version}(来源:${sourceLabel[info.source]})` +} + +// JSON 格式的 _meta 字段。 +export function versionMeta(info: VersionInfo): { + version: string + major: string + source: VersionInfo['source'] +} { + return { version: info.version, major: info.major, source: info.source } +} export function resolveOrExit( config: CliConfig, @@ -17,3 +70,6 @@ export function resolveOrExit( process.stderr.write(`${msg}\n`) process.exit(1) } + +// 各命令共用的输出格式类型别名(避免重复 import)。 +export type { OutputFormat } diff --git a/packages/nutui-react-cli-core/src/commands/demo.ts b/packages/nutui-react-cli-core/src/commands/demo.ts index 5fe6be72c9..cc4b0db3fb 100644 --- a/packages/nutui-react-cli-core/src/commands/demo.ts +++ b/packages/nutui-react-cli-core/src/commands/demo.ts @@ -1,40 +1,52 @@ // demo [name] —— 列出或输出 demo 源码。 -import { listDemos, loadMeta, readDemo } from '../data.js' +import { listDemos, readDemo } from '../data.js' import { output } from '../format.js' -import { resolveOrExit } from './_shared.js' +import { + resolveContext, + resolveOrExit, + versionHeaderText, + versionMeta, + type OutputFormat, +} from './_shared.js' import type { CliConfig } from '../config.js' -import type { OutputFormat } from '../types.js' export interface DemoArgs { config: CliConfig component: string name?: string format: OutputFormat + nutuiVersion?: string } export function runDemo(args: DemoArgs): void { const { config } = args - const meta = loadMeta(config.dataDir) + const { meta, snapshotDir, versionInfo } = resolveContext( + config, + args.nutuiVersion + ) const comp = resolveOrExit(config, meta, args.component) - const demos = listDemos(config.dataDir, comp) + const demos = listDemos(snapshotDir, comp) - // 无 name:列出全部 demo 文件名。 + // 无 name:列出全部 demo 文件名(列表带版本头,便于确认版本)。 if (!args.name) { const jsonData = { id: comp.id, name: comp.name, demos } - output(args.format, jsonData, () => { - if (!demos.length) - return `${comp.name} ${comp.cName} 暂无 ${config.demoLabel} 示例。` - return `${comp.name} ${comp.cName} 的 ${config.demoLabel} 示例(${demos.length} 个):\n${demos - .map((d) => ` - ${d}`) - .join( - '\n' - )}\n\n查看源码:${config.binName} demo ${comp.name} ${demos[0]}` - }) + output( + args.format, + jsonData, + () => { + if (!demos.length) + return `${comp.name} ${comp.cName} 暂无 ${config.demoLabel} 示例。` + return `${comp.name} ${comp.cName} 的 ${config.demoLabel} 示例(${demos.length} 个):\n${demos + .map((d) => ` - ${d}`) + .join('\n')}\n\n查看源码:${config.binName} demo ${comp.name} ${demos[0]}` + }, + { header: versionHeaderText(config, versionInfo), meta: versionMeta(versionInfo) } + ) return } - // 有 name:输出该 demo 源码。 - const code = readDemo(config.dataDir, comp, args.name) + // 有 name:输出该 demo 源码(正文是源码,text 不加版本头,json 带 _meta)。 + const code = readDemo(snapshotDir, comp, args.name) if (code === null) { const jsonData = { id: comp.id, @@ -42,16 +54,24 @@ export function runDemo(args: DemoArgs): void { demo: args.name, code: null, } - output(args.format, jsonData, () => { - const avail = demos.length - ? `可选:${demos.join(' / ')}` - : `该组件暂无 ${config.demoLabel} 示例` - return `未找到示例「${args.name}」。${avail}` - }) + output( + args.format, + jsonData, + () => { + const avail = demos.length + ? `可选:${demos.join(' / ')}` + : `该组件暂无 ${config.demoLabel} 示例` + return `未找到示例「${args.name}」。${avail}` + }, + { header: '', meta: versionMeta(versionInfo) } + ) process.exitCode = 1 return } const jsonData = { id: comp.id, name: comp.name, demo: args.name, code } - output(args.format, jsonData, () => code) + output(args.format, jsonData, () => code, { + header: '', + meta: versionMeta(versionInfo), + }) } diff --git a/packages/nutui-react-cli-core/src/commands/doc.ts b/packages/nutui-react-cli-core/src/commands/doc.ts index 2cbf623176..897041bf0e 100644 --- a/packages/nutui-react-cli-core/src/commands/doc.ts +++ b/packages/nutui-react-cli-core/src/commands/doc.ts @@ -1,23 +1,34 @@ // doc [--lang ...] —— 输出组件完整文档原文。 -import { loadMeta, readDoc } from '../data.js' +import { readDoc } from '../data.js' import { output } from '../format.js' -import { resolveOrExit } from './_shared.js' +import { + resolveContext, + resolveOrExit, + versionMeta, + type OutputFormat, +} from './_shared.js' import type { CliConfig } from '../config.js' -import type { Lang, OutputFormat } from '../types.js' +import type { Lang } from '../types.js' export interface DocArgs { config: CliConfig component: string lang: Lang format: OutputFormat + nutuiVersion?: string } export function runDoc(args: DocArgs): void { - const meta = loadMeta(args.config.dataDir) + const { meta, snapshotDir, versionInfo } = resolveContext( + args.config, + args.nutuiVersion + ) const comp = resolveOrExit(args.config, meta, args.component) - const content = readDoc(args.config.dataDir, comp, args.lang) + const content = readDoc(snapshotDir, comp, args.lang) const langName = args.config.langLabel[args.lang] ?? args.lang + // 文档正文是原始 markdown,text 格式不加版本头以免污染可直接保存的内容; + // json 格式仍在 _meta 里带版本信息。 if (content === null) { const jsonData = { id: comp.id, @@ -25,12 +36,18 @@ export function runDoc(args: DocArgs): void { lang: args.lang, content: null, } - output(args.format, jsonData, () => { - return `${comp.name} ${comp.cName} 暂无${langName}文档(可能是隐藏子组件)。` - }) + output( + args.format, + jsonData, + () => `${comp.name} ${comp.cName} 暂无${langName}文档(可能是隐藏子组件)。`, + { header: '', meta: versionMeta(versionInfo) } + ) return } const jsonData = { id: comp.id, name: comp.name, lang: args.lang, content } - output(args.format, jsonData, () => content) + output(args.format, jsonData, () => content, { + header: '', + meta: versionMeta(versionInfo), + }) } diff --git a/packages/nutui-react-cli-core/src/commands/info.ts b/packages/nutui-react-cli-core/src/commands/info.ts index 43b6d85d8c..a5b9b088d3 100644 --- a/packages/nutui-react-cli-core/src/commands/info.ts +++ b/packages/nutui-react-cli-core/src/commands/info.ts @@ -1,18 +1,23 @@ // info —— 输出组件 Props 表。 -import { loadMeta } from '../data.js' import { output, renderTable } from '../format.js' -import { resolveOrExit } from './_shared.js' +import { + resolveContext, + resolveOrExit, + versionHeaderText, + versionMeta, + type OutputFormat, +} from './_shared.js' import type { CliConfig } from '../config.js' -import type { OutputFormat } from '../types.js' export interface InfoArgs { config: CliConfig component: string format: OutputFormat + nutuiVersion?: string } export function runInfo(args: InfoArgs): void { - const meta = loadMeta(args.config.dataDir) + const { meta, versionInfo } = resolveContext(args.config, args.nutuiVersion) const comp = resolveOrExit(args.config, meta, args.component) const tables = comp.api?.tables ?? [] const propTables = tables.filter((t) => t.kind === 'props') @@ -29,22 +34,27 @@ export function runInfo(args: InfoArgs): void { })), } - output(args.format, jsonData, () => { - if (!propTables.length) { - const others = tables.map((t) => `${t.name}(${t.kind})`).join('、') - let msg = `${comp.name} ${comp.cName} 没有 Props 表` - msg += others - ? `。它可能是布局/子组件;现有其它表:${others}。` - : `(可能是布局或纯样式组件)。` - return msg - } - const blocks = propTables.map((t) => { - const title = t.subComponent - ? `${t.name}(${comp.name}.${t.subComponent})` - : t.name - const rows = t.rows.map((r) => [r.prop, r.desc, r.type, r.default]) - return `▍${title}\n${renderTable(['属性', '说明', '类型', '默认值'], rows)}` - }) - return `${comp.name} ${comp.cName}(v${comp.version})\n\n${blocks.join('\n\n')}` - }) + output( + args.format, + jsonData, + () => { + if (!propTables.length) { + const others = tables.map((t) => `${t.name}(${t.kind})`).join('、') + let msg = `${comp.name} ${comp.cName} 没有 Props 表` + msg += others + ? `。它可能是布局/子组件;现有其它表:${others}。` + : `(可能是布局或纯样式组件)。` + return msg + } + const blocks = propTables.map((t) => { + const title = t.subComponent + ? `${t.name}(${comp.name}.${t.subComponent})` + : t.name + const rows = t.rows.map((r) => [r.prop, r.desc, r.type, r.default]) + return `▍${title}\n${renderTable(['属性', '说明', '类型', '默认值'], rows)}` + }) + return `${comp.name} ${comp.cName}(v${comp.version})\n\n${blocks.join('\n\n')}` + }, + { header: versionHeaderText(args.config, versionInfo), meta: versionMeta(versionInfo) } + ) } diff --git a/packages/nutui-react-cli-core/src/commands/list.ts b/packages/nutui-react-cli-core/src/commands/list.ts index 2b593ed97b..e853734ce7 100644 --- a/packages/nutui-react-cli-core/src/commands/list.ts +++ b/packages/nutui-react-cli-core/src/commands/list.ts @@ -1,17 +1,22 @@ // list —— 按分类列出组件。 -import { loadMeta } from '../data.js' import { output, renderTable } from '../format.js' +import { + resolveContext, + versionHeaderText, + versionMeta, + type OutputFormat, +} from './_shared.js' import type { CliConfig } from '../config.js' -import type { OutputFormat } from '../types.js' export interface ListArgs { config: CliConfig category?: string format: OutputFormat + nutuiVersion?: string } export function runList(args: ListArgs): void { - const meta = loadMeta(args.config.dataDir) + const { meta, versionInfo } = resolveContext(args.config, args.nutuiVersion) let categories = meta.categories if (args.category) { const key = args.category.toLowerCase() @@ -39,20 +44,25 @@ export function runList(args: ListArgs): void { })), })) - output(args.format, jsonData, () => { - const blocks: string[] = [] - let total = 0 - for (const cat of categories) { - const comps = cat.components - .map((id) => meta.components[id]) - .filter(Boolean) - total += comps.length - const rows = comps.map((c) => [c.name, c.cName ?? '', c.version ?? '']) - blocks.push( - `▍${cat.name} (${cat.enName})\n${renderTable(['组件', '中文名', '版本'], rows)}` - ) - } - const header = `${args.config.libLabel}共 ${meta.componentCount} 个组件,版本 ${meta.libVersion}` - return `${header}\n\n${blocks.join('\n\n')}\n\n合计:${total} 个` - }) + output( + args.format, + { categories: jsonData }, + () => { + const blocks: string[] = [] + let total = 0 + for (const cat of categories) { + const comps = cat.components + .map((id) => meta.components[id]) + .filter(Boolean) + total += comps.length + const rows = comps.map((c) => [c.name, c.cName ?? '', c.version ?? '']) + blocks.push( + `▍${cat.name} (${cat.enName})\n${renderTable(['组件', '中文名', '版本'], rows)}` + ) + } + const header = `${args.config.libLabel}共 ${meta.componentCount} 个组件,版本 ${meta.libVersion}` + return `${header}\n\n${blocks.join('\n\n')}\n\n合计:${total} 个` + }, + { header: versionHeaderText(args.config, versionInfo), meta: versionMeta(versionInfo) } + ) } diff --git a/packages/nutui-react-cli-core/src/commands/token.ts b/packages/nutui-react-cli-core/src/commands/token.ts index f5860b82f3..f1fd40ffc1 100644 --- a/packages/nutui-react-cli-core/src/commands/token.ts +++ b/packages/nutui-react-cli-core/src/commands/token.ts @@ -1,27 +1,41 @@ // token [Component] —— 输出 Design Token。无参列全局 token,有参列组件 token。 -import { loadMeta } from '../data.js' import { output, renderTable } from '../format.js' -import { resolveOrExit } from './_shared.js' +import { + resolveContext, + resolveOrExit, + versionHeaderText, + versionMeta, + type OutputFormat, +} from './_shared.js' import type { CliConfig } from '../config.js' -import type { OutputFormat, Token } from '../types.js' +import type { Token } from '../types.js' export interface TokenArgs { config: CliConfig component?: string format: OutputFormat + nutuiVersion?: string } export function runToken(args: TokenArgs): void { const { config } = args - const meta = loadMeta(config.dataDir) + const { meta, versionInfo } = resolveContext(config, args.nutuiVersion) + const vc = { + header: versionHeaderText(config, versionInfo), + meta: versionMeta(versionInfo), + } // 无参:全局 token。 if (!args.component) { - output(args.format, { scope: 'global', tokens: meta.globalTokens }, () => - renderTokenText( - `${config.libLabel}全局 Design Token(${meta.globalTokens.length} 个)`, - meta.globalTokens - ) + output( + args.format, + { scope: 'global', tokens: meta.globalTokens }, + () => + renderTokenText( + `${config.libLabel}全局 Design Token(${meta.globalTokens.length} 个)`, + meta.globalTokens + ), + vc ) return } @@ -29,15 +43,20 @@ export function runToken(args: TokenArgs): void { // 有参:组件 token。 const comp = resolveOrExit(config, meta, args.component) const tokens = comp.tokens ?? [] - output(args.format, { scope: comp.id, name: comp.name, tokens }, () => { - if (!tokens.length) { - return `${comp.name} ${comp.cName} 无专属 Design Token(可运行 ${config.binName} token 查看全局 token)。` - } - return renderTokenText( - `${comp.name} ${comp.cName} 的 Design Token(${tokens.length} 个)`, - tokens - ) - }) + output( + args.format, + { scope: comp.id, name: comp.name, tokens }, + () => { + if (!tokens.length) { + return `${comp.name} ${comp.cName} 无专属 Design Token(可运行 ${config.binName} token 查看全局 token)。` + } + return renderTokenText( + `${comp.name} ${comp.cName} 的 Design Token(${tokens.length} 个)`, + tokens + ) + }, + vc + ) } function renderTokenText(title: string, tokens: Token[]): string { diff --git a/packages/nutui-react-cli-core/src/config.ts b/packages/nutui-react-cli-core/src/config.ts index 690f253177..8b58d91e65 100644 --- a/packages/nutui-react-cli-core/src/config.ts +++ b/packages/nutui-react-cli-core/src/config.ts @@ -6,6 +6,9 @@ export interface CliConfig { binName: string // npm 包名,用于 MCP TTY 提示与文档链接。'@nutui/nutui-react-cli' | '@nutui/nutui-react-taro-cli' cliPkgName: string + // 被查询的 NutUI 运行时 npm 包名,用于版本自动检测(读项目 node_modules / package.json 依赖)。 + // '@nutui/nutui-react' | '@nutui/nutui-react-taro' + npmPackageName: string platform: 'h5' | 'taro' // list 命令头部标签。'NutUI React(H5)' | 'NutUI React(Taro 多端)' libLabel: string diff --git a/packages/nutui-react-cli-core/src/data.ts b/packages/nutui-react-cli-core/src/data.ts index 5270e3b56c..c61ec87832 100644 --- a/packages/nutui-react-cli-core/src/data.ts +++ b/packages/nutui-react-cli-core/src/data.ts @@ -1,21 +1,111 @@ -// 数据查询原语。DATA_DIR 由各叶子包通过 CliConfig.dataDir 注入(各包用 import.meta.url -// 相对定位自己的随包 data/ 快照),core 不再自行用 import.meta.url 定位。 +// 数据查询原语。dataDir 由各叶子包通过 CliConfig.dataDir 注入(各包用 import.meta.url +// 相对定位自己的随包 data/ 快照根,其下为 versions.json + v{tag}/ 多版本目录)。 +// +// 多版本:dataDir 不再直接含 meta.json,而是 dataDir/versions.json + dataDir/v{tag}/meta.json。 +// 命令层先 detectVersion 得到目标版本,再 resolveSnapshotDir 路由到某个 v{tag}/ 目录(snapshotDir), +// 之后所有读取都基于该 snapshotDir。 import fs from 'node:fs' import path from 'node:path' -import type { Component, Lang, Meta } from './types.js' +import type { Component, Lang, Meta, VersionsIndex } from './types.js' -let cachedMeta: Meta | null = null +// 按快照目录缓存 meta,避免重复读盘。快照目录内容在进程生命周期内不变。 +const metaCache = new Map() -export function loadMeta(dataDir: string): Meta { - if (cachedMeta) return cachedMeta - const metaPath = path.join(dataDir, 'meta.json') +export function loadMetaByDir(snapshotDir: string): Meta { + const cached = metaCache.get(snapshotDir) + if (cached) return cached + const metaPath = path.join(snapshotDir, 'meta.json') if (!fs.existsSync(metaPath)) { throw new Error( `未找到打包数据 ${metaPath}。若为源码开发,请先运行 pnpm run build(或 pnpm run prepare-data)。` ) } - cachedMeta = JSON.parse(fs.readFileSync(metaPath, 'utf-8')) as Meta - return cachedMeta + const meta = JSON.parse(fs.readFileSync(metaPath, 'utf-8')) as Meta + metaCache.set(snapshotDir, meta) + return meta +} + +// versions.json 缓存(按 dataDir)。 +const versionsCache = new Map() + +export function loadVersionsIndex(dataDir: string): VersionsIndex { + const cached = versionsCache.get(dataDir) + if (cached) return cached + const p = path.join(dataDir, 'versions.json') + if (!fs.existsSync(p)) { + throw new Error( + `未找到 ${p}。若为源码开发,请先运行 pnpm run prepare-data 生成多版本快照。` + ) + } + const idx = JSON.parse(fs.readFileSync(p, 'utf-8')) as VersionsIndex + versionsCache.set(dataDir, idx) + return idx +} + +// 把不带/带 v 前缀的 tag 串统一成快照目录名 v{tag}。 +function snapshotDirFor(dataDir: string, tag: string): string { + const clean = tag.replace(/^v/, '') + return path.join(dataDir, `v${clean}`) +} + +/** + * 把一个完整版本号路由到最接近的历史快照目录(复刻 antd loader 的解析顺序)。 + * 1. 精确 minor 命中:versions.majors[vX].minors["X.Y"] → data/v{tag}/ + * 2. 最近不超过请求 minor 的旧 minor + * 3. 回退该 major 的 latest 主快照 + * 4. major 不存在 → 回退 defaultMajor 的 latest,stderr 提示 + * 返回存在的 snapshotDir 绝对路径。 + */ +export function resolveSnapshotDir(dataDir: string, version: string): string { + const idx = loadVersionsIndex(dataDir) + const parts = version.split('.') + const major = `v${parts[0]}` + + const majorIndex = idx.majors[major] + + // major 不存在 → 回退 defaultMajor + if (!majorIndex) { + const fb = idx.majors[idx.defaultMajor] + process.stderr.write( + `[nutui-cli] 未找到 NutUI ${major} 的离线数据,回退到默认版本 ${idx.defaultMajor}(${fb?.latest ?? '未知'})。\n` + ) + return snapshotDirFor(dataDir, fb.latest) + } + + const tryDir = (tag: string): string | null => { + const dir = snapshotDirFor(dataDir, tag) + return fs.existsSync(path.join(dir, 'meta.json')) ? dir : null + } + + // 不是可识别的 major.minor.patch → 直接用该 major latest + if (parts[1] === undefined || parts[1] === '') { + return tryDir(majorIndex.latest) ?? snapshotDirFor(dataDir, majorIndex.latest) + } + + const minorKey = `${parts[0]}.${parts[1]}` + + // 1. 精确 minor 命中 + if (majorIndex.minors[minorKey]) { + const dir = tryDir(majorIndex.minors[minorKey]) + if (dir) return dir + } + + // 2. 最近不超过请求 minor 的旧 minor + const requestedMinor = parseInt(parts[1], 10) + const availableMinors = Object.keys(majorIndex.minors) + .filter((k) => k.startsWith(`${parts[0]}.`)) + .sort((a, b) => parseInt(a.split('.')[1], 10) - parseInt(b.split('.')[1], 10)) + let bestMinorKey: string | undefined + for (const m of availableMinors) { + if (parseInt(m.split('.')[1], 10) <= requestedMinor) bestMinorKey = m + } + if (bestMinorKey && majorIndex.minors[bestMinorKey]) { + const dir = tryDir(majorIndex.minors[bestMinorKey]) + if (dir) return dir + } + + // 3. 回退该 major latest + return tryDir(majorIndex.latest) ?? snapshotDirFor(dataDir, majorIndex.latest) } // 组件名大小写不敏感解析:Button / button / BUTTON 均可。命中返回组件,否则 null。 @@ -62,17 +152,17 @@ export function suggestComponents( // 读取组件某语言的文档原文。快照期 prepare-data 已按 .md 落盘(zh.md / en.md), // 故此处直接以 lang 寻址,无需 key 映射。缺失(如 Taro 无英文)返回 null。 export function readDoc( - dataDir: string, + snapshotDir: string, component: Component, lang: Lang ): string | null { - const file = path.join(dataDir, 'docs', component.id, `${lang}.md`) + const file = path.join(snapshotDir, 'docs', component.id, `${lang}.md`) return fs.existsSync(file) ? fs.readFileSync(file, 'utf-8') : null } // 列出组件的全部 demo 文件名(不含扩展名,如 demo1),按序号排序。 -export function listDemos(dataDir: string, component: Component): string[] { - const dir = path.join(dataDir, 'demos', component.id) +export function listDemos(snapshotDir: string, component: Component): string[] { + const dir = path.join(snapshotDir, 'demos', component.id) if (!fs.existsSync(dir)) return [] return fs .readdirSync(dir) @@ -87,7 +177,7 @@ export function listDemos(dataDir: string, component: Component): string[] { // 读取组件某个 demo 的源码。name 形如 demo1(也容忍带 .tsx)。缺失返回 null。 export function readDemo( - dataDir: string, + snapshotDir: string, component: Component, name: string ): string | null { @@ -96,6 +186,6 @@ export function readDemo( return null } const base = name.endsWith('.tsx') ? name : `${name}.tsx` - const file = path.join(dataDir, 'demos', component.id, base) + const file = path.join(snapshotDir, 'demos', component.id, base) return fs.existsSync(file) ? fs.readFileSync(file, 'utf-8') : null } diff --git a/packages/nutui-react-cli-core/src/format.ts b/packages/nutui-react-cli-core/src/format.ts index a191e5038b..3680a44025 100644 --- a/packages/nutui-react-cli-core/src/format.ts +++ b/packages/nutui-react-cli-core/src/format.ts @@ -33,11 +33,30 @@ function pad(s: string, width: number): string { } // 统一的「按格式输出」入口:json 走 printJson,text 走回调产出的文本。 +// 可选 versionCtx:json 时在顶层并入 `_meta`,text 时在正文前加一行版本信息头, +// 让用户/Agent 明确当前查询命中的是哪个大版本、来源为何。 export function output( format: OutputFormat, jsonData: unknown, - toText: () => string + toText: () => string, + versionCtx?: { header: string; meta: Record } ): void { - if (format === 'json') printJson(jsonData) - else printText(toText()) + if (format === 'json') { + if ( + versionCtx && + jsonData && + typeof jsonData === 'object' && + !Array.isArray(jsonData) + ) { + printJson({ _meta: versionCtx.meta, ...(jsonData as object) }) + } else if (versionCtx) { + printJson({ _meta: versionCtx.meta, data: jsonData }) + } else { + printJson(jsonData) + } + } else { + printText( + versionCtx && versionCtx.header ? `${versionCtx.header}\n\n${toText()}` : toText() + ) + } } diff --git a/packages/nutui-react-cli-core/src/mcp/tools.ts b/packages/nutui-react-cli-core/src/mcp/tools.ts index 4d18b74496..1f232f2a37 100644 --- a/packages/nutui-react-cli-core/src/mcp/tools.ts +++ b/packages/nutui-react-cli-core/src/mcp/tools.ts @@ -1,13 +1,19 @@ -// MCP 工具定义与处理器。复用 data.ts 原语,与 CLI 命令共享同一份 meta 快照, +// MCP 工具定义与处理器。复用 data.ts 原语,与 CLI 命令共享同一套多版本快照路由, // 输出结构与各命令的 --format json 保持一致。工具名 = config.mcp.toolPrefix + 动词。 +// +// 多版本:每个工具入参新增可选 nutuiVersion(与 CLI 的 --nutui-version 对齐)。handler +// 内部走同一套 detectVersion → resolveSnapshotDir → loadMetaByDir,路由到对应快照。 import { listDemos, - loadMeta, + loadMetaByDir, + loadVersionsIndex, readDemo, readDoc, resolveComponent, + resolveSnapshotDir, suggestComponents, } from '../data.js' +import { detectVersion, type VersionInfo } from '../version.js' import { createError, ErrorCodes } from '../error.js' import type { CliConfig } from '../config.js' import type { Component, Lang, Meta } from '../types.js' @@ -64,6 +70,19 @@ function langEnumDesc(config: CliConfig): string { return `文档语言,${parts.join(',')}` } +// 目标版本参数描述(各工具共用)。 +const NUTUI_VERSION_DESC = + '目标 NutUI 版本(如 3、3.1.0、4.0.0-beta.7);省略则从项目 node_modules / package.json 自动检测,检测不到则用默认大版本' + +function nutuiVersionProp() { + return { + nutuiVersion: { + type: 'string', + description: NUTUI_VERSION_DESC, + }, + } +} + export function buildToolDefinitions(config: CliConfig) { const p = config.mcp.toolPrefix return [ @@ -78,6 +97,7 @@ export function buildToolDefinitions(config: CliConfig) { description: '按分类英文名筛选(如 base / feedback / form),省略则列出全部', }, + ...nutuiVersionProp(), }, required: [] as string[], }, @@ -92,8 +112,9 @@ export function buildToolDefinitions(config: CliConfig) { properties: { component: { type: 'string', - description: '组件名(大小写不敏感,如 Button)', + description: '组件名(大小写不敏感,如 Button)', }, + ...nutuiVersionProp(), }, required: ['component'], }, @@ -107,13 +128,14 @@ export function buildToolDefinitions(config: CliConfig) { properties: { component: { type: 'string', - description: '组件名(大小写不敏感,如 Button)', + description: '组件名(大小写不敏感,如 Button)', }, lang: { type: 'string', enum: [...config.langs], description: langEnumDesc(config), }, + ...nutuiVersionProp(), }, required: ['component'], }, @@ -127,12 +149,13 @@ export function buildToolDefinitions(config: CliConfig) { properties: { component: { type: 'string', - description: '组件名(大小写不敏感,如 Button)', + description: '组件名(大小写不敏感,如 Button)', }, name: { type: 'string', description: '示例名(如 demo1);省略则列出全部示例', }, + ...nutuiVersionProp(), }, required: ['component'], }, @@ -149,6 +172,7 @@ export function buildToolDefinitions(config: CliConfig) { type: 'string', description: '组件名,返回组件级 token;省略则返回全局 token', }, + ...nutuiVersionProp(), }, required: [] as string[], }, @@ -160,7 +184,22 @@ export function buildToolDefinitions(config: CliConfig) { export function createToolHandler(config: CliConfig) { const p = config.mcp.toolPrefix return async (name: string, params: Record) => { - const meta = loadMeta(config.dataDir) + // 每次调用按入参 nutuiVersion 路由到对应快照(省略则自动检测)。 + const versionsIndex = loadVersionsIndex(config.dataDir) + const versionInfo: VersionInfo = detectVersion({ + flag: params.nutuiVersion as string | undefined, + cwd: process.cwd(), + npmPackageName: config.npmPackageName, + versionsIndex, + }) + const snapshotDir = resolveSnapshotDir(config.dataDir, versionInfo.version) + const meta = loadMetaByDir(snapshotDir) + const _meta = { + version: versionInfo.version, + major: versionInfo.major, + source: versionInfo.source, + } + // 去前缀得到动词,兼容两端不同前缀。 const verb = name.startsWith(p) ? name.slice(p.length) : name @@ -186,7 +225,7 @@ export function createToolHandler(config: CliConfig) { version: c.version, })), })) - return toMcpResult({ libVersion: meta.libVersion, categories: data }) + return toMcpResult({ _meta, libVersion: meta.libVersion, categories: data }) } case 'info': { @@ -196,6 +235,7 @@ export function createToolHandler(config: CliConfig) { (t) => t.kind === 'props' ) return toMcpResult({ + _meta, name: comp.name, cName: comp.cName, version: comp.version, @@ -211,7 +251,7 @@ export function createToolHandler(config: CliConfig) { const comp = resolve(config, meta, params.component as string) if (isError(comp)) return toMcpResult(comp) const lang = (params.lang as Lang) ?? config.defaultLang - const content = readDoc(config.dataDir, comp, lang) + const content = readDoc(snapshotDir, comp, lang) if (content === null) { const langName = config.langLabel[lang] ?? lang return toMcpResult( @@ -221,18 +261,18 @@ export function createToolHandler(config: CliConfig) { ) ) } - return toMcpResult({ name: comp.name, lang, doc: content }) + return toMcpResult({ _meta, name: comp.name, lang, doc: content }) } case 'demo': { const comp = resolve(config, meta, params.component as string) if (isError(comp)) return toMcpResult(comp) - const demos = listDemos(config.dataDir, comp) + const demos = listDemos(snapshotDir, comp) const demoName = params.name as string | undefined if (!demoName) { - return toMcpResult({ component: comp.name, demos }) + return toMcpResult({ _meta, component: comp.name, demos }) } - const code = readDemo(config.dataDir, comp, demoName) + const code = readDemo(snapshotDir, comp, demoName) if (code === null) { return toMcpResult( createError( @@ -244,17 +284,18 @@ export function createToolHandler(config: CliConfig) { ) ) } - return toMcpResult({ component: comp.name, demo: demoName, code }) + return toMcpResult({ _meta, component: comp.name, demo: demoName, code }) } case 'token': { const query = params.component as string | undefined if (!query) { - return toMcpResult({ scope: 'global', tokens: meta.globalTokens }) + return toMcpResult({ _meta, scope: 'global', tokens: meta.globalTokens }) } const comp = resolve(config, meta, query) if (isError(comp)) return toMcpResult(comp) return toMcpResult({ + _meta, scope: comp.id, component: comp.name, tokens: comp.tokens ?? [], diff --git a/packages/nutui-react-cli-core/src/types.ts b/packages/nutui-react-cli-core/src/types.ts index f4e86a098f..85837f5f63 100644 --- a/packages/nutui-react-cli-core/src/types.ts +++ b/packages/nutui-react-cli-core/src/types.ts @@ -73,3 +73,20 @@ export interface Meta { export type Lang = string export type OutputFormat = 'text' | 'json' + +// data/versions.json 的结构:把 major.minor 映射到具体 tag,供运行时把请求版本 +// 路由到最接近的历史快照目录。由 scripts/sync.mjs 生成。 +export interface MajorIndex { + // 该 major 的 latest tag(不带 v 前缀,如 '3.1.0' / '4.0.0-beta.7') + latest: string + // 是否有稳定版(v4 目前全 beta → false,命中时不打「预发布」warning) + stable: boolean + // major.minor → tag(不带 v 前缀),如 { '3.0': '3.0.20', '3.1': '3.1.0' } + minors: Record +} + +export interface VersionsIndex { + // 兜底 major,如 'v4' + defaultMajor: string + majors: Record +} diff --git a/packages/nutui-react-cli-core/src/version.ts b/packages/nutui-react-cli-core/src/version.ts new file mode 100644 index 0000000000..ec9157a0ae --- /dev/null +++ b/packages/nutui-react-cli-core/src/version.ts @@ -0,0 +1,103 @@ +// NutUI 目标版本检测:复刻 antd CLI 的四层回落,把 npm 包名参数化,供 H5 / Taro 共用。 +// 解析顺序:--nutui-version → node_modules/ → 项目 package.json 依赖声明 → defaultMajor 兜底。 +import fs from 'node:fs' +import path from 'node:path' +import semver from 'semver' +import type { VersionsIndex } from './types.js' + +export interface VersionInfo { + version: string // 解析出的完整版本号,如 '3.1.0' / '4.0.0-beta.7' + major: string // 'v3' / 'v4' + source: 'flag' | 'node_modules' | 'package.json' | 'fallback' +} + +export interface DetectVersionOptions { + flag?: string + cwd?: string + npmPackageName: string // '@nutui/nutui-react' | '@nutui/nutui-react-taro' + versionsIndex: VersionsIndex +} + +function toMajor(version: string): string { + return `v${version.split('.')[0]}` +} + +function readJson(file: string): T | null { + try { + return JSON.parse(fs.readFileSync(file, 'utf-8')) as T + } catch { + return null + } +} + +// 拿到完整版本后,若其 major 不在离线数据里,回退 defaultMajor 并提示。 +function withKnownMajor( + version: string, + source: VersionInfo['source'], + idx: VersionsIndex +): VersionInfo { + const major = toMajor(version) + if (idx.majors[major]) { + return { version, major, source } + } + const fbMajor = idx.defaultMajor + const fbVersion = idx.majors[fbMajor]?.latest ?? version + process.stderr.write( + `[nutui-cli] 未找到 NutUI ${major} 的离线数据,回退到默认版本 ${fbMajor}(${fbVersion})。\n` + ) + return { version: fbVersion, major: fbMajor, source } +} + +export function detectVersion(opts: DetectVersionOptions): VersionInfo { + const cwd = opts.cwd ?? process.cwd() + const idx = opts.versionsIndex + + // 1. --nutui-version flag:先 parse 保留预发布串,再 coerce 兼容 "3"、"^3.1.0" 等。 + if (opts.flag) { + const parsed = + semver.parse(opts.flag) ?? + semver.coerce(opts.flag, { includePrerelease: true }) + if (parsed) { + return withKnownMajor(parsed.version, 'flag', idx) + } + process.stderr.write( + `[nutui-cli] Warning: --nutui-version "${opts.flag}" 不是有效的 semver,改用自动检测。\n` + ) + } + + // 2. node_modules//package.json + const nmPath = path.join(cwd, 'node_modules', opts.npmPackageName, 'package.json') + if (fs.existsSync(nmPath)) { + const pkg = readJson<{ version?: string }>(nmPath) + if (pkg?.version) { + return withKnownMajor(pkg.version, 'node_modules', idx) + } + } + + // 3. 项目 package.json 的 deps / devDeps / peerDeps 声明 + const pkgPath = path.join(cwd, 'package.json') + if (fs.existsSync(pkgPath)) { + const pkg = readJson<{ + dependencies?: Record + devDependencies?: Record + peerDependencies?: Record + }>(pkgPath) + const dep = + pkg?.dependencies?.[opts.npmPackageName] ?? + pkg?.devDependencies?.[opts.npmPackageName] ?? + pkg?.peerDependencies?.[opts.npmPackageName] + if (dep) { + const parsed = + semver.parse(dep) ?? semver.coerce(dep, { includePrerelease: true }) + if (parsed) { + return withKnownMajor(parsed.version, 'package.json', idx) + } + // 非 semver(如 'workspace:*' / '*')→ 落到 fallback + } + } + + // 4. Fallback:defaultMajor 的 latest + const fbMajor = idx.defaultMajor + const fbVersion = idx.majors[fbMajor]?.latest ?? '0.0.0' + return { version: fbVersion, major: fbMajor, source: 'fallback' } +} diff --git a/packages/nutui-react-cli-core/vitest.config.ts b/packages/nutui-react-cli-core/vitest.config.ts new file mode 100644 index 0000000000..d2d969041c --- /dev/null +++ b/packages/nutui-react-cli-core/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + include: ['src/**/*.test.ts'], + environment: 'node', + }, +}) diff --git a/packages/nutui-react-cli/README.md b/packages/nutui-react-cli/README.md index 4ae7ae62a7..a40363d8d2 100644 --- a/packages/nutui-react-cli/README.md +++ b/packages/nutui-react-cli/README.md @@ -35,7 +35,12 @@ nutui-react info Button --format json | `nutui-react token [Component]` | 查看 Design Token;省略组件名则列出全局 token | | `nutui-react mcp` | 启动本地 MCP 服务(stdio),供 Claude Code / Cursor / VS Code / Codex 等 IDE 调用 | -全局选项:`--format, -f `(默认 `text`)、`--help, -h`、`--version, -v`。 +全局选项: + +- `--format, -f `(默认 `text`) +- `--nutui-version, --nv `(目标 NutUI 版本,见下) +- `--help, -h` +- `--version, -v`(CLI 自身版本)。 示例: @@ -48,6 +53,29 @@ nutui-react demo Button demo1 # 查看某个示例源码 nutui-react token Button ``` +## 多版本 + +CLI 随包内置多个 NutUI 大版本的离线快照(当前:`v3.0.20`、`v3.1.0`、`v4.0.0-beta.7`),可对同一台机器上不同 NutUI 版本给出对应的组件知识。 + +用 `--nutui-version`(别名 `--nv`)指定目标版本,支持 `3`、`3.1.0`、`4.0.0-beta.7` 等写法: + +```bash +nutui-react --nv 3.1.0 info Button # 查 3.1.0 的 Button Props +nutui-react --nv 3 list # 查 v3 最新快照 +nutui-react --nv 4.0.0-beta.7 doc Cell +``` + +按以下顺序**自动检测**目标版本: + +1. `--nutui-version ` 显式指定; +2. 项目 `node_modules/@nutui/nutui-react/package.json` 的实际安装版本; +3. 项目 `package.json` 的 `dependencies` / `devDependencies` / `peerDependencies` 声明(兼容 `^3.1.0`、`~3.1.0` 等); +4. 兜底到默认大版本(`v4`)的 latest。 + +版本路由按 `major.minor` 粒度:请求 `3.0.5` 会落到该 minor 系列的最高 patch 快照 `v3.0.20`;请求的 minor 若高于已有,回退到该 major 最近的旧 minor。每次查询的输出都会标明实际命中的版本与来源。 + +> 在项目里能自动推断版本时,优先不显式传 `--nutui-version`,让 CLI 自行检测更省心。 + ## MCP(IDE 集成) CLI 是「Agent 主动敲命令」,MCP 则把同一份能力注册成 IDE 原生工具,让 Claude Code / Cursor / VS Code / Codex 在对话中**按需自动调用**,无需拼命令行字符串。二者复用同一份离线 meta 快照,等于给同一个知识库套了两种调用协议。 diff --git a/packages/nutui-react-cli/scripts/prepare-data.mjs b/packages/nutui-react-cli/scripts/prepare-data.mjs index dd2a141ddc..9378ef34b0 100644 --- a/packages/nutui-react-cli/scripts/prepare-data.mjs +++ b/packages/nutui-react-cli/scripts/prepare-data.mjs @@ -1,13 +1,13 @@ -// @nutui/nutui-react-cli(H5)的 data 快照生成:委托 core 的 prepareData,注入 H5 端参数。 +// @nutui/nutui-react-cli(H5)的多版本 data 快照生成:委托 core 的 prepareAllVersions,注入 H5 端参数。 // DO NOT manual edit the output (data/). Run: pnpm run prepare-data import path from 'node:path' import { fileURLToPath } from 'node:url' -import { prepareData } from '@nutui/nutui-react-cli-core/scripts/prepare-data.mjs' +import { prepareAllVersions } from '@nutui/nutui-react-cli-core/scripts/prepare-data.mjs' const __dirname = path.dirname(fileURLToPath(import.meta.url)) const PKG_DIR = path.resolve(__dirname, '..') -prepareData({ +await prepareAllVersions({ pkgDir: PKG_DIR, docKeys: { zh: 'h5', en: 'enUS' }, demoKey: 'h5', diff --git a/packages/nutui-react-cli/skills/nutui-react/SKILL.en.md b/packages/nutui-react-cli/skills/nutui-react/SKILL.en.md index ddbc3dfdac..e5071ca4cd 100644 --- a/packages/nutui-react-cli/skills/nutui-react/SKILL.en.md +++ b/packages/nutui-react-cli/skills/nutui-react/SKILL.en.md @@ -123,9 +123,10 @@ This provides 5 tools (`nutui_list`, `nutui_info`, `nutui_doc`, `nutui_demo`, `n | Flag | Purpose | | --- | --- | | `--format, -f ` | Output format; agents should prefer `json` (default: `text`) | +| `--nutui-version, --nv ` | Target NutUI version (e.g. `3`, `3.1.0`, `4.0.0-beta.7`); auto-detected when omitted | | `--lang, -l ` | Doc language for `doc` / `mcp` (default: `zh`) | | `--help, -h` | Show help | -| `--version, -v` | Print CLI version | +| `--version, -v` | Print the CLI's own version (not the NutUI version) | ## Key Rules @@ -133,3 +134,4 @@ This provides 5 tools (`nutui_list`, `nutui_info`, `nutui_doc`, `nutui_demo`, `n 2. **Use `--format json`** — Every command supports it. Parse the JSON output rather than regex-matching the human-readable text. 3. **Confirm the component exists** — If unsure of the exact name, run `nutui-react list` or rely on the CLI's "did you mean" suggestion instead of importing a guessed name. 4. **Use Design Tokens for styling** — NutUI uses `nut-` flat BEM class names and the `var(--nutui-*)` token system. When customizing appearance, query `nutui-react token` and use tokens rather than hardcoding colors or spacing. +5. **Prefer auto-detected versions** — The CLI bundles v3 / v4 multi-version snapshots. When working inside a project that depends on NutUI, prefer **not** passing `--nutui-version` — let the CLI infer it from the project's `node_modules` / `package.json`. Only pass `--nv ` when the user explicitly asks about a specific version or you are outside a project context. The `_meta.version` / `_meta.source` in the output tells you which version was actually resolved. diff --git a/packages/nutui-react-cli/skills/nutui-react/SKILL.md b/packages/nutui-react-cli/skills/nutui-react/SKILL.md index 8b813f0400..c1b5ccae1b 100644 --- a/packages/nutui-react-cli/skills/nutui-react/SKILL.md +++ b/packages/nutui-react-cli/skills/nutui-react/SKILL.md @@ -119,9 +119,10 @@ nutui-react token Button --format json | 参数 | 用途 | | --- | --- | | `--format, -f ` | 输出格式;agent 应优先使用 `json`(默认:`text`) | +| `--nutui-version, --nv ` | 目标 NutUI 版本(如 `3`、`3.1.0`、`4.0.0-beta.7`);省略则自动检测 | | `--lang, -l ` | `doc` / `mcp` 的文档语言(默认:`zh`) | | `--help, -h` | 显示帮助 | -| `--version, -v` | 打印 CLI 版本 | +| `--version, -v` | 打印 CLI 自身版本(不是 NutUI 版本) | ## 核心规则 @@ -129,3 +130,4 @@ nutui-react token Button --format json 2. **使用 `--format json`** —— 每个命令都支持它。解析 JSON 输出,而不是用正则匹配人类可读的文本。 3. **确认组件存在** —— 如果不确定确切名称,运行 `nutui-react list`,或借助 CLI 的「你是不是想找」建议,而不是导入一个猜测的名称。 4. **使用 Design Token 做样式** —— NutUI 采用 `nut-` 扁平 BEM 类名和 `var(--nutui-*)` 变量体系。定制外观时,查询 `nutui-react token` 并使用 Token,而不是硬编码颜色或间距。 +5. **版本优先自动检测** —— CLI 内置 v3 / v4 多版本快照。在有 NutUI 依赖的项目里工作时,优先**不传** `--nutui-version`,让 CLI 从项目 `node_modules` / `package.json` 自动推断;只有当用户明确要查某个特定版本、或不在项目上下文中时,才显式传 `--nv `。输出里的 `_meta.version` / `_meta.source` 会告诉你实际命中的版本。 diff --git a/packages/nutui-react-cli/src/cli.ts b/packages/nutui-react-cli/src/cli.ts index 217f0e0eb7..37e0ee1828 100644 --- a/packages/nutui-react-cli/src/cli.ts +++ b/packages/nutui-react-cli/src/cli.ts @@ -12,6 +12,7 @@ const dataDir = fileURLToPath(new URL('../data/', import.meta.url)) const config: CliConfig = { binName: 'nutui-react', cliPkgName: '@nutui/nutui-react-cli', + npmPackageName: '@nutui/nutui-react', platform: 'h5', libLabel: 'NutUI React(H5)', demoLabel: 'H5', diff --git a/packages/nutui-react-cli/tsup.config.ts b/packages/nutui-react-cli/tsup.config.ts index 9a2ad73922..f57de67ec0 100644 --- a/packages/nutui-react-cli/tsup.config.ts +++ b/packages/nutui-react-cli/tsup.config.ts @@ -14,6 +14,7 @@ export default defineConfig({ // core 为 workspace 内 private 包(不发布),必须一并 bundle 进产物。 noExternal: [ 'yargs', + 'semver', '@modelcontextprotocol/sdk', '@nutui/nutui-react-cli-core', ], diff --git a/packages/nutui-react-taro-cli/README.md b/packages/nutui-react-taro-cli/README.md index b4feec3e4c..a265e86e99 100644 --- a/packages/nutui-react-taro-cli/README.md +++ b/packages/nutui-react-taro-cli/README.md @@ -38,7 +38,12 @@ nutui-react-taro info Button --format json | `nutui-react-taro token [Component]` | 查看 Design Token;省略组件名则列出全局 token | | `nutui-react-taro mcp` | 启动本地 MCP 服务(stdio),供 Claude Code / Cursor / VS Code / Codex 等 IDE 调用 | -全局选项:`--format, -f `(默认 `text`)、`--help, -h`、`--version, -v`。 +全局选项: + +- `--format, -f `(默认 `text`) +- `--nutui-version, --nv `(目标 NutUI 版本,见下) +- `--help, -h` +- `--version, -v`(CLI 自身版本) 示例: @@ -51,6 +56,29 @@ nutui-react-taro demo Button demo1 # 查看某个示例源码 nutui-react-taro token Button ``` +## 多版本 + +CLI 随包内置多个 NutUI 大版本的离线快照(当前:`v3.0.20`、`v3.1.0`、`v4.0.0-beta.7`),可对同一台机器上不同 NutUI 版本给出对应的组件知识。 + +用 `--nutui-version`(别名 `--nv`)指定目标版本,支持 `3`、`3.1.0`、`4.0.0-beta.7` 等写法: + +```bash +nutui-react-taro --nv 3.1.0 info Button +nutui-react-taro --nv 3 list +nutui-react-taro --nv 4.0.0-beta.7 doc Cell +``` + +按以下顺序**自动检测**目标版本: + +1. `--nutui-version ` 显式指定; +2. 项目 `node_modules/@nutui/nutui-react-taro/package.json` 的实际安装版本; +3. 项目 `package.json` 的 `dependencies` / `devDependencies` / `peerDependencies` 声明(兼容 `^3.1.0`、`~3.1.0` 等); +4. 兜底到默认大版本(`v4`)的 latest。 + +版本路由按 `major.minor` 粒度:请求 `3.0.5` 会落到该 minor 系列的最高 patch 快照 `v3.0.20`;请求的 minor 若高于已有,回退到该 major 最近的旧 minor。每次查询的输出都会标明实际命中的版本与来源。 + +> 在项目里能自动推断版本时,优先不显式传 `--nutui-version`,让 CLI 自行检测更省心。`-v / --version` 语义保持不变,仍输出 CLI 自身版本。 + ## MCP(IDE 集成) CLI 是「Agent 主动敲命令」,MCP 则把同一份能力注册成 IDE 原生工具,让 Claude Code / Cursor / VS Code / Codex 在对话中**按需自动调用**,无需拼命令行字符串。二者复用同一份离线 meta 快照,等于给同一个知识库套了两种调用协议。 diff --git a/packages/nutui-react-taro-cli/scripts/prepare-data.mjs b/packages/nutui-react-taro-cli/scripts/prepare-data.mjs index 447dad2527..9776aa0c42 100644 --- a/packages/nutui-react-taro-cli/scripts/prepare-data.mjs +++ b/packages/nutui-react-taro-cli/scripts/prepare-data.mjs @@ -1,13 +1,13 @@ -// @nutui/nutui-react-taro-cli(Taro)的 data 快照生成:委托 core 的 prepareData,注入 Taro 端参数。 +// @nutui/nutui-react-taro-cli(Taro)的多版本 data 快照生成:委托 core 的 prepareAllVersions,注入 Taro 端参数。 // DO NOT manual edit the output (data/). Run: pnpm run prepare-data import path from 'node:path' import { fileURLToPath } from 'node:url' -import { prepareData } from '@nutui/nutui-react-cli-core/scripts/prepare-data.mjs' +import { prepareAllVersions } from '@nutui/nutui-react-cli-core/scripts/prepare-data.mjs' const __dirname = path.dirname(fileURLToPath(import.meta.url)) const PKG_DIR = path.resolve(__dirname, '..') -prepareData({ +await prepareAllVersions({ pkgDir: PKG_DIR, // Taro 端仅中文文档(doc.taro.md)。 docKeys: { zh: 'taro' }, diff --git a/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.en.md b/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.en.md index 687575e7fc..3ea38cda81 100644 --- a/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.en.md +++ b/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.en.md @@ -124,8 +124,9 @@ This provides 5 tools (`nutui_list`, `nutui_info`, `nutui_doc`, `nutui_demo`, `n | Flag | Purpose | | --- | --- | | `--format, -f ` | Output format; agents should prefer `json` (default: `text`) | +| `--nutui-version, --nv ` | Target NutUI version (e.g. `3`, `3.1.0`, `4.0.0-beta.7`); auto-detected when omitted | | `--help, -h` | Show help | -| `--version, -v` | Print CLI version | +| `--version, -v` | Print the CLI's own version (not the NutUI version) | ## Key Rules @@ -134,3 +135,4 @@ This provides 5 tools (`nutui_list`, `nutui_info`, `nutui_doc`, `nutui_demo`, `n 3. **Confirm the component exists** — If unsure of the exact name, run `nutui-react-taro list` or rely on the CLI's "did you mean" suggestion instead of importing a guessed name. 4. **Use Design Tokens for styling** — NutUI uses `nut-` flat BEM class names and the `var(--nutui-*)` token system. When customizing appearance, query `nutui-react-taro token` and use tokens rather than hardcoding colors or spacing. 5. **Import from `@nutui/nutui-react-taro`** — Not `@nutui/nutui-react`. This is the Taro (mini-program / cross-platform) package. +6. **Prefer auto-detected versions** — The CLI bundles v3 / v4 multi-version snapshots. When working inside a project that depends on NutUI, prefer **not** passing `--nutui-version` — let the CLI infer it from the project's `node_modules` / `package.json`. Only pass `--nv ` when the user explicitly asks about a specific version or you are outside a project context. The `_meta.version` / `_meta.source` in the output tells you which version was actually resolved. diff --git a/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md b/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md index 66370e1540..d55a06aa4c 100644 --- a/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md +++ b/packages/nutui-react-taro-cli/skills/nutui-react-taro/SKILL.md @@ -118,8 +118,9 @@ nutui-react-taro token Button --format json | 参数 | 用途 | | --- | --- | | `--format, -f ` | 输出格式;agent 应优先使用 `json`(默认:`text`) | +| `--nutui-version, --nv ` | 目标 NutUI 版本(如 `3`、`3.1.0`、`4.0.0-beta.7`);省略则自动检测 | | `--help, -h` | 显示帮助 | -| `--version, -v` | 打印 CLI 版本 | +| `--version, -v` | 打印 CLI 自身版本(不是 NutUI 版本) | ## 核心规则 @@ -128,3 +129,4 @@ nutui-react-taro token Button --format json 3. **确认组件存在** —— 如果不确定确切名称,运行 `nutui-react-taro list`,或借助 CLI 的「你是不是想找」建议,而不是导入一个猜测的名称。 4. **使用 Design Token 做样式** —— NutUI 采用 `nut-` 扁平 BEM 类名和 `var(--nutui-*)` 变量体系。定制外观时,查询 `nutui-react-taro token` 并使用 Token,而不是硬编码颜色或间距。 5. **从 `@nutui/nutui-react-taro` 导入** —— 不是 `@nutui/nutui-react`。这是 Taro(小程序 / 跨端)包。 +6. **版本优先自动检测** —— CLI 内置 v3 / v4 多版本快照。在有 NutUI 依赖的项目里工作时,优先**不传** `--nutui-version`,让 CLI 从项目 `node_modules` / `package.json` 自动推断;只有当用户明确要查某个特定版本、或不在项目上下文中时,才显式传 `--nv `。输出里的 `_meta.version` / `_meta.source` 会告诉你实际命中的版本。 diff --git a/packages/nutui-react-taro-cli/src/cli.ts b/packages/nutui-react-taro-cli/src/cli.ts index 819d920856..e2051e823e 100644 --- a/packages/nutui-react-taro-cli/src/cli.ts +++ b/packages/nutui-react-taro-cli/src/cli.ts @@ -12,6 +12,7 @@ const dataDir = fileURLToPath(new URL('../data/', import.meta.url)) const config: CliConfig = { binName: 'nutui-react-taro', cliPkgName: '@nutui/nutui-react-taro-cli', + npmPackageName: '@nutui/nutui-react-taro', platform: 'taro', libLabel: 'NutUI React(Taro 多端)', demoLabel: 'Taro', diff --git a/packages/nutui-react-taro-cli/tsup.config.ts b/packages/nutui-react-taro-cli/tsup.config.ts index 9a2ad73922..f57de67ec0 100644 --- a/packages/nutui-react-taro-cli/tsup.config.ts +++ b/packages/nutui-react-taro-cli/tsup.config.ts @@ -14,6 +14,7 @@ export default defineConfig({ // core 为 workspace 内 private 包(不发布),必须一并 bundle 进产物。 noExternal: [ 'yargs', + 'semver', '@modelcontextprotocol/sdk', '@nutui/nutui-react-cli-core', ], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c0185e5f5d..7e479f560e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,9 +5,9 @@ settings: excludeLinksFromLockfile: false overrides: - '@types/react': ^18.2.57 - '@types/react-dom': ^18.2.19 - sass: 1.77.6 + '@types/react': ^18.3.31 + '@types/react-dom': ^18.3.7 + sass: ^1.103.1 '@tarojs/api': 4.2.0 '@tarojs/components': 4.2.0 @@ -18,14 +18,14 @@ importers: .: dependencies: '@babel/runtime': - specifier: ^7.23.9 + specifier: ^7.29.7 version: 7.29.7 '@nutui/icons-react': - specifier: ^3.0.2-beta.6 - version: 3.0.2-beta.6 + specifier: ^3.0.2 + version: 3.0.2 '@nutui/icons-react-taro': - specifier: 3.0.2-beta.6 - version: 3.0.2-beta.6 + specifier: 3.0.2 + version: 3.0.2 '@nutui/jdesign-icons-react-taro': specifier: 1.0.6-beta.2 version: 1.0.6-beta.2 @@ -39,7 +39,7 @@ importers: specifier: ~9.6.1 version: 9.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': - specifier: ^0.5.7 + specifier: ^0.5.23 version: 0.5.23 '@use-gesture/react': specifier: 10.2.20 @@ -57,8 +57,8 @@ importers: specifier: ^4.1.1 version: 4.1.1 lottie-react: - specifier: ^2.4.0 - version: 2.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^2.4.2 + version: 2.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-fast-compare: specifier: ^3.2.2 version: 3.2.2 @@ -73,50 +73,50 @@ importers: specifier: ^7.18.6 version: 7.18.6(@babel/core@7.29.7) '@commitlint/cli': - specifier: ^20.5.2 - version: 20.5.3(@types/node@20.19.41)(conventional-commits-parser@6.4.0)(typescript@5.9.3) + specifier: ^20.5.3 + version: 20.5.3(@types/node@20.19.43)(conventional-commits-parser@6.4.0)(typescript@5.9.3) '@commitlint/config-conventional': - specifier: ^20.5.0 + specifier: ^20.5.3 version: 20.5.3 '@inquirer/prompts': - specifier: ^7.2.3 - version: 7.10.1(@types/node@20.19.41) + specifier: ^7.10.1 + version: 7.10.1(@types/node@20.19.43) '@loadable/component': - specifier: ^5.16.3 + specifier: ^5.16.7 version: 5.16.7(react@18.3.1) '@mdx-js/mdx': - specifier: ^3.0.1 + specifier: ^3.1.1 version: 3.1.1 '@mdx-js/react': - specifier: ^3.0.1 - version: 3.1.1(@types/react@18.3.29)(react@18.3.1) + specifier: ^3.1.1 + version: 3.1.1(@types/react@18.3.31)(react@18.3.1) '@mdx-js/rollup': - specifier: ^3.0.1 - version: 3.1.1(rollup@4.60.4) + specifier: ^3.1.1 + version: 3.1.1(rollup@4.63.1) '@pmmmwh/react-refresh-webpack-plugin': - specifier: 0.5.10 - version: 0.5.10(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + specifier: 0.6.2 + version: 0.6.2(react-refresh@0.18.0)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.1.0(@babel/core@7.29.7)(@types/babel__core@7.20.5)(rollup@4.60.4) + specifier: ^6.1.0 + version: 6.1.0(@babel/core@7.29.7)(@types/babel__core@7.20.5)(rollup@4.63.1) '@rollup/plugin-commonjs': - specifier: ^26.0.1 - version: 26.0.3(rollup@4.60.4) + specifier: ^26.0.3 + version: 26.0.3(rollup@4.63.1) '@rollup/plugin-node-resolve': - specifier: 16.0.0 - version: 16.0.0(rollup@4.60.4) + specifier: 16.0.3 + version: 16.0.3(rollup@4.63.1) '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.60.4)(tslib@2.8.1)(typescript@5.9.3) + version: 11.1.6(rollup@4.63.1)(tslib@2.8.1)(typescript@5.9.3) '@shikijs/markdown-it': - specifier: ^3.0.0 + specifier: ^3.23.0 version: 3.23.0 '@swc/core': - specifier: ^1.4.8 - version: 1.15.40(@swc/helpers@0.5.23) + specifier: ^1.16.1 + version: 1.16.1(@swc/helpers@0.5.23) '@tarojs/components': specifier: 4.2.0 - version: 4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + version: 4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/plugin-platform-alipay': specifier: 4.2.0 version: 4.2.0(@tarojs/service@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0) @@ -131,120 +131,120 @@ importers: version: 4.2.0(react@18.3.1) '@tarojs/taro': specifier: 4.2.0 - version: 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + version: 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@testing-library/jest-dom': - specifier: ^6.4.2 + specifier: ^6.9.1 version: 6.9.1 '@testing-library/react': - specifier: ^16.0.0 - version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.29))(@types/react@18.3.29)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^16.3.2 + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 '@types/loadable__component': - specifier: ^5.13.8 + specifier: ^5.13.10 version: 5.13.10 '@types/lodash.kebabcase': specifier: ^4.1.9 version: 4.1.9 '@types/node': - specifier: ^20.11.19 - version: 20.19.41 + specifier: ^20.19.43 + version: 20.19.43 '@types/postcss-import': specifier: ^14.0.3 version: 14.0.3 '@types/react': - specifier: ^18.2.57 - version: 18.3.29 + specifier: ^18.3.31 + version: 18.3.31 '@types/react-dom': - specifier: ^18.2.19 - version: 18.3.7(@types/react@18.3.29) + specifier: ^18.3.7 + version: 18.3.7(@types/react@18.3.31) '@types/react-syntax-highlighter': - specifier: ^15.5.11 + specifier: ^15.5.13 version: 15.5.13 '@types/react-test-renderer': - specifier: ^19.0.0 + specifier: ^19.1.0 version: 19.1.0 '@types/react-transition-group': - specifier: ^4.4.10 - version: 4.4.12(@types/react@18.3.29) + specifier: ^4.4.12 + version: 4.4.12(@types/react@18.3.31) '@types/testing-library__jest-dom': specifier: ^6.0.0 version: 6.0.0 '@typescript-eslint/eslint-plugin': - specifier: ^7.0.2 + specifier: ^7.18.0 version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) '@typescript-eslint/parser': - specifier: ^7.0.2 + specifier: ^7.18.0 version: 7.18.0(eslint@8.57.1)(typescript@5.9.3) '@vitejs/plugin-react': - specifier: ^4.2.1 - version: 4.7.0(vite@5.4.21(@types/node@20.19.41)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)) + specifier: ^4.7.0 + version: 4.7.0(vite@5.4.21(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)) '@vitest/coverage-v8': - specifier: ^3.0.7 - version: 3.2.4(vitest@3.2.4) + specifier: ^3.2.7 + version: 3.2.7(vitest@3.2.7) '@vitest/ui': - specifier: ^2.0.4 - version: 2.1.9(vitest@3.2.4) + specifier: ^2.1.9 + version: 2.1.9(vitest@3.2.7) autoprefixer: - specifier: ^10.4.17 - version: 10.5.0(postcss@8.5.15) + specifier: ^10.5.4 + version: 10.5.4(postcss@8.5.28) axios: - specifier: ^1.6.7 - version: 1.16.1(debug@4.4.3) + specifier: ^1.19.0 + version: 1.20.0(debug@4.4.3) cypress: - specifier: ^13.15.0 + specifier: ^13.17.0 version: 13.17.0 del: - specifier: ^8.0.0 + specifier: ^8.0.1 version: 8.0.1 eslint: - specifier: ^8.56.0 + specifier: ^8.57.1 version: 8.57.1 eslint-config-airbnb: specifier: ^19.0.4 version: 19.0.4(eslint-plugin-import@2.32.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.5(eslint@8.57.1))(eslint@8.57.1) eslint-config-prettier: - specifier: ^9.1.0 + specifier: ^9.1.2 version: 9.1.2(eslint@8.57.1) eslint-plugin-import: - specifier: ^2.29.1 + specifier: ^2.32.0 version: 2.32.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1) eslint-plugin-jsx-a11y: - specifier: ^6.8.0 + specifier: ^6.10.2 version: 6.10.2(eslint@8.57.1) eslint-plugin-markdown: - specifier: ^5.0.0 + specifier: ^5.1.0 version: 5.1.0(eslint@8.57.1) eslint-plugin-prettier: - specifier: ^5.1.3 - version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.8.3) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.9.6) eslint-plugin-react: - specifier: ^7.33.2 + specifier: ^7.37.5 version: 7.37.5(eslint@8.57.1) eslint-plugin-react-hooks: - specifier: ^4.6.0 + specifier: ^4.6.2 version: 4.6.2(eslint@8.57.1) eslint-plugin-unused-imports: - specifier: ^4.0.0 + specifier: ^4.4.1 version: 4.4.1(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1) fs-extra: - specifier: ^11.2.0 - version: 11.3.5 + specifier: ^11.4.0 + version: 11.4.0 glob: - specifier: ^11.0.0 + specifier: ^11.1.0 version: 11.1.0 gulp: - specifier: ^5.0.0 + specifier: ^5.0.1 version: 5.0.1 gulp-insert: specifier: ^0.5.0 version: 0.5.0 gulp-postcss: specifier: ^10.0.0 - version: 10.0.0(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4) + version: 10.0.0(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13) gulp-rename: - specifier: ^2.0.0 + specifier: ^2.1.0 version: 2.1.0 gulp-replace: specifier: ^1.1.4 @@ -256,16 +256,16 @@ importers: specifier: ^14.12.3 version: 14.12.3 highlight.js: - specifier: ^11.9.0 - version: 11.11.1 + specifier: ^11.12.0 + version: 11.12.0 husky: - specifier: ^9.0.11 + specifier: ^9.1.7 version: 9.1.7 jscodeshift: - specifier: ^17.0.0 - version: 17.3.0(@babel/preset-env@7.29.7(@babel/core@7.29.7)) + specifier: ^17.4.0 + version: 17.4.0(@babel/preset-env@7.29.7(@babel/core@7.29.7)) lint-staged: - specifier: ^15.2.2 + specifier: ^15.5.2 version: 15.5.2 lzutf8: specifier: 0.6.3 @@ -274,91 +274,91 @@ importers: specifier: 0.0.7 version: 0.0.7 markdown-it: - specifier: ^14.0.0 - version: 14.2.0 + specifier: ^14.3.0 + version: 14.3.1 marked: - specifier: ^14.1.1 + specifier: ^14.1.4 version: 14.1.4 mobx: - specifier: ^6.12.0 - version: 6.15.4 + specifier: ^6.16.1 + version: 6.16.1 mobx-react-lite: - specifier: ^4.0.5 - version: 4.1.1(mobx@6.15.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^4.1.1 + version: 4.1.1(mobx@6.16.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) postcss: - specifier: ^8.4.35 - version: 8.5.15 + specifier: ^8.5.26 + version: 8.5.28 postcss-css-variables: specifier: ^0.19.0 - version: 0.19.0(postcss@8.5.15) + version: 0.19.0(postcss@8.5.28) postcss-import: - specifier: ^16.0.1 - version: 16.1.1(postcss@8.5.15) + specifier: ^16.2.0 + version: 16.2.0(postcss@8.5.28) postcss-modules: - specifier: ^6.0.0 - version: 6.0.1(postcss@8.5.15) + specifier: ^6.0.1 + version: 6.0.1(postcss@8.5.28) postcss-rtlcss: - specifier: ^5.1.0 - version: 5.7.1(postcss@8.5.15) + specifier: ^5.7.1 + version: 5.7.1(postcss@8.5.28) postcss-scss: specifier: ^4.0.9 - version: 4.0.9(postcss@8.5.15) + version: 4.0.9(postcss@8.5.28) prettier: - specifier: ^3.2.5 - version: 3.8.3 + specifier: ^3.9.6 + version: 3.9.6 prettier-markdown-table: - specifier: ^1.0.2 - version: 1.0.3(linguist-languages@7.31.2)(prettier@3.8.3) + specifier: ^1.0.3 + version: 1.0.3(linguist-languages@7.31.2)(prettier@3.9.6) react: - specifier: ^18.2.0 + specifier: ^18.3.1 version: 18.3.1 react-color: specifier: ^2.19.3 version: 2.19.3(react@18.3.1) react-dom: - specifier: ^18.2.0 + specifier: ^18.3.1 version: 18.3.1(react@18.3.1) react-markdown: - specifier: ^9.0.1 - version: 9.1.0(@types/react@18.3.29)(react@18.3.1) + specifier: ^9.1.0 + version: 9.1.0(@types/react@18.3.31)(react@18.3.1) react-refresh: - specifier: ^0.14.0 - version: 0.14.2 + specifier: ^0.18.0 + version: 0.18.0 react-router-dom: - specifier: ^7.1.5 - version: 7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^7.18.2 + version: 7.18.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-syntax-highlighter: - specifier: ^15.5.0 + specifier: ^15.6.6 version: 15.6.6(react@18.3.1) react-test-renderer: - specifier: ^18.2.0 + specifier: ^18.3.1 version: 18.3.1(react@18.3.1) reactcss: specifier: ^1.2.3 version: 1.2.3(react@18.3.1) remark-directive: - specifier: ^3.0.0 + specifier: ^3.0.1 version: 3.0.1 remark-gfm: - specifier: ^4.0.0 + specifier: ^4.0.1 version: 4.0.1 rollup: - specifier: ^4.12.0 - version: 4.60.4 + specifier: ^4.62.5 + version: 4.63.1 sass: - specifier: 1.77.6 - version: 1.77.6 + specifier: ^1.103.1 + version: 1.103.1 shelljs: - specifier: ^0.8.5 - version: 0.8.5 + specifier: ^0.10.0 + version: 0.10.0 simple-git: - specifier: ^3.25.0 + specifier: ^3.36.0 version: 3.36.0 start-server-and-test: - specifier: ^2.0.8 + specifier: ^2.1.5 version: 2.1.5 turndown: - specifier: ^7.1.2 + specifier: ^7.2.4 version: 7.2.4 turndown-plugin-gfm: specifier: ^1.0.2 @@ -367,146 +367,146 @@ importers: specifier: ^5.3.3 version: 5.9.3 unist-util-visit: - specifier: ^5.0.0 + specifier: ^5.1.0 version: 5.1.0 vconsole: specifier: ^3.15.1 version: 3.15.1 vinyl-fs: - specifier: ^4.0.0 + specifier: ^4.0.2 version: 4.0.2 vite: - specifier: ^5.1.3 - version: 5.4.21(@types/node@20.19.41)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + specifier: ^5.4.21 + version: 5.4.21(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) vite-plugin-dts: - specifier: 4.2.1 - version: 4.2.1(@types/node@20.19.41)(rollup@4.60.4)(typescript@5.9.3)(vite@5.4.21(@types/node@20.19.41)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)) + specifier: 4.5.4 + version: 4.5.4(@types/node@20.19.43)(rollup@4.63.1)(typescript@5.9.3)(vite@5.4.21(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)) vitest: - specifier: ^3.0.7 - version: 3.2.4(@types/debug@4.1.13)(@types/node@20.19.41)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + specifier: ^3.2.7 + version: 3.2.7(@types/debug@4.1.13)(@types/node@20.19.43)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) vitest-canvas-mock: specifier: ^0.3.3 - version: 0.3.3(vitest@3.2.4) + version: 0.3.3(vitest@3.2.7) yargs: - specifier: ^17.7.2 - version: 17.7.2 + specifier: ^17.7.3 + version: 17.7.3 packages/nutui-auto-import: dependencies: '@rollup/pluginutils': - specifier: ^5.1.1 - version: 5.4.0(rollup@4.60.4) + specifier: ^5.4.0 + version: 5.4.0(rollup@4.63.1) '@types/babel__traverse': - specifier: ^7.20.6 + specifier: ^7.28.0 version: 7.28.0 estree-walker: specifier: ^3.0.3 version: 3.0.3 magic-string: - specifier: ^0.30.11 + specifier: ^0.30.21 version: 0.30.21 unplugin: specifier: ^2.2.0 version: 2.3.11 devDependencies: '@babel/core': - specifier: ^7.25.8 + specifier: ^7.29.7 version: 7.29.7 '@babel/preset-react': - specifier: ^7.25.7 + specifier: ^7.29.7 version: 7.29.7(@babel/core@7.29.7) '@nutui/nutui-react': - specifier: ^2.6.22 + specifier: ^2.7.15 version: 2.7.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.1.0(@babel/core@7.29.7)(@types/babel__core@7.20.5)(rollup@4.60.4) + specifier: ^6.1.0 + version: 6.1.0(@babel/core@7.29.7)(@types/babel__core@7.20.5)(rollup@4.63.1) '@sxzz/eslint-config': - specifier: ^4.2.0 - version: 4.6.0(@types/eslint@9.6.1)(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + specifier: ^4.6.0 + version: 4.6.0(@types/eslint@9.6.1)(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/utils@8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3) '@sxzz/prettier-config': - specifier: ^2.0.2 - version: 2.3.1 + specifier: ^2.3.2 + version: 2.3.2(prettier@3.9.6) '@sxzz/test-utils': - specifier: ^0.3.2 - version: 0.3.12(esbuild@0.27.7)(rollup@4.60.4)(vitest@2.1.9) + specifier: ^0.5.18 + version: 0.5.18(@volar/typescript@2.4.28)(esbuild@0.27.7)(rollup@4.63.1)(typescript@5.9.3)(vitest@2.1.9) '@types/node': - specifier: ^22.5.5 - version: 22.19.19 + specifier: ^22.20.1 + version: 22.20.1 bumpp: - specifier: ^9.5.2 + specifier: ^9.11.1 version: 9.11.1(magicast@0.3.5) eslint: - specifier: ^9.11.0 - version: 9.39.4(jiti@2.7.0) + specifier: ^9.39.5 + version: 9.39.5(jiti@2.7.0) fast-glob: - specifier: ^3.3.2 + specifier: ^3.3.3 version: 3.3.3 prettier: - specifier: ^3.3.3 - version: 3.8.3 + specifier: ^3.9.6 + version: 3.9.6 tsup: - specifier: ^8.3.0 - version: 8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.19))(@swc/core@1.15.40(@swc/helpers@0.5.23))(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4)(typescript@5.9.3)(yaml@2.9.0) + specifier: ^8.5.1 + version: 8.5.1(@microsoft/api-extractor@7.59.0(@types/node@22.20.1))(@swc/core@1.16.1(@swc/helpers@0.5.23))(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13)(typescript@5.9.3)(yaml@2.9.0) tsx: - specifier: ^4.19.1 - version: 4.22.4 + specifier: ^4.23.12 + version: 4.23.13 typescript: specifier: ^5.6.2 version: 5.9.3 vite: - specifier: ^5.4.7 - version: 5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + specifier: ^5.4.21 + version: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) vitest: - specifier: ^2.1.1 - version: 2.1.9(@types/node@22.19.19)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + specifier: ^2.1.9 + version: 2.1.9(@types/node@22.20.1)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) packages/nutui-codemod: dependencies: chalk: - specifier: ^5.3.0 + specifier: ^5.6.2 version: 5.6.2 is-git-clean: specifier: ^1.1.0 version: 1.1.0 jscodeshift: - specifier: ^17.0.0 - version: 17.3.0(@babel/preset-env@7.29.7(@babel/core@7.29.7)) + specifier: ^17.4.0 + version: 17.4.0(@babel/preset-env@7.29.7(@babel/core@7.29.7)) devDependencies: jest: - specifier: ^30.3.0 - version: 30.4.2(@types/node@22.19.19) + specifier: ^30.4.2 + version: 30.4.2(@types/node@20.19.43) prettier: - specifier: ^3.2.5 - version: 3.8.3 + specifier: ^3.9.6 + version: 3.9.6 release-it: specifier: ^18.1.2 - version: 18.1.2(@types/node@22.19.19)(typescript@5.9.3) + version: 18.1.2(@types/node@20.19.43)(typescript@5.9.3) ts-jest: - specifier: ^29.1.2 - version: 29.4.11(@babel/core@7.29.7)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@30.4.1(@babel/core@7.29.7))(jest-util@30.4.1)(jest@30.4.2(@types/node@22.19.19))(typescript@5.9.3) + specifier: ^29.4.12 + version: 29.4.12(@babel/core@7.29.7)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@30.4.1(@babel/core@7.29.7))(jest-util@30.4.1)(jest@30.4.2(@types/node@20.19.43))(typescript@5.9.3) packages/nutui-react-cli: dependencies: yargs: - specifier: ^17.7.2 - version: 17.7.2 + specifier: ^17.7.3 + version: 17.7.3 devDependencies: '@nutui/nutui-react-cli-core': specifier: workspace:* version: link:../nutui-react-cli-core '@types/node': - specifier: ^22.5.5 - version: 22.19.19 + specifier: ^22.20.1 + version: 22.20.1 '@types/yargs': - specifier: ^17.0.33 + specifier: ^17.0.35 version: 17.0.35 bumpp: - specifier: ^9.5.2 + specifier: ^9.11.1 version: 9.11.1(magicast@0.3.5) tsup: - specifier: ^8.3.0 - version: 8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.19))(@swc/core@1.15.40(@swc/helpers@0.5.23))(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4)(typescript@5.9.3)(yaml@2.9.0) + specifier: ^8.5.1 + version: 8.5.1(@microsoft/api-extractor@7.59.0(@types/node@22.20.1))(@swc/core@1.16.1(@swc/helpers@0.5.23))(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13)(typescript@5.9.3)(yaml@2.9.0) typescript: specifier: ^5.6.2 version: 5.9.3 @@ -514,43 +514,55 @@ importers: packages/nutui-react-cli-core: dependencies: '@modelcontextprotocol/sdk': - specifier: ^1.29.0 - version: 1.29.0(zod@4.4.3) + specifier: ^1.30.0 + version: 1.30.0(zod@4.4.3) + semver: + specifier: ^7.8.0 + version: 7.8.1 yargs: - specifier: ^17.7.2 - version: 17.7.2 + specifier: ^17.7.3 + version: 17.7.3 devDependencies: '@types/node': - specifier: ^22.5.5 - version: 22.19.19 + specifier: ^22.20.1 + version: 22.20.1 + '@types/semver': + specifier: ^7.7.1 + version: 7.7.1 '@types/yargs': - specifier: ^17.0.33 + specifier: ^17.0.35 version: 17.0.35 + markdown-it: + specifier: ^14.2.0 + version: 14.3.1 typescript: specifier: ^5.6.2 version: 5.9.3 + vitest: + specifier: ^3.2.7 + version: 3.2.7(@types/debug@4.1.13)(@types/node@22.20.1)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) packages/nutui-react-taro-cli: dependencies: yargs: - specifier: ^17.7.2 - version: 17.7.2 + specifier: ^17.7.3 + version: 17.7.3 devDependencies: '@nutui/nutui-react-cli-core': specifier: workspace:* version: link:../nutui-react-cli-core '@types/node': - specifier: ^22.5.5 - version: 22.19.19 + specifier: ^22.20.1 + version: 22.20.1 '@types/yargs': - specifier: ^17.0.33 + specifier: ^17.0.35 version: 17.0.35 bumpp: - specifier: ^9.5.2 + specifier: ^9.11.1 version: 9.11.1(magicast@0.3.5) tsup: - specifier: ^8.3.0 - version: 8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.19))(@swc/core@1.15.40(@swc/helpers@0.5.23))(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4)(typescript@5.9.3)(yaml@2.9.0) + specifier: ^8.5.1 + version: 8.5.1(@microsoft/api-extractor@7.59.0(@types/node@22.20.1))(@swc/core@1.16.1(@swc/helpers@0.5.23))(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13)(typescript@5.9.3)(yaml@2.9.0) typescript: specifier: ^5.6.2 version: 5.9.3 @@ -558,45 +570,45 @@ importers: packages/nutui-replace-icons: dependencies: '@babel/cli': - specifier: ^7.25.7 + specifier: ^7.29.7 version: 7.29.7(@babel/core@7.29.7) '@babel/core': - specifier: ^7.23.9 + specifier: ^7.29.7 version: 7.29.7 '@babel/generator': - specifier: ^7.24.5 - version: 7.29.7 + specifier: ^7.29.8 + version: 7.29.8 '@babel/preset-env': - specifier: ^7.25.7 + specifier: ^7.29.7 version: 7.29.7(@babel/core@7.29.7) '@babel/preset-react': - specifier: ^7.25.7 + specifier: ^7.29.7 version: 7.29.7(@babel/core@7.29.7) '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 '@types/babel__generator': - specifier: ^7.6.8 + specifier: ^7.27.0 version: 7.27.0 vitest: - specifier: ^1.5.0 - version: 1.6.1(@types/node@18.19.130)(@vitest/ui@2.1.9(vitest@3.2.4))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + specifier: ^1.6.1 + version: 1.6.1(@types/node@18.19.130)(@vitest/ui@2.1.9(vitest@3.2.7))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) devDependencies: '@types/lodash.kebabcase': specifier: ^4.1.9 version: 4.1.9 '@types/node': - specifier: ^18.13.0 + specifier: ^18.19.130 version: 18.19.130 prettier: - specifier: ^3.2.5 - version: 3.8.3 + specifier: ^3.9.6 + version: 3.9.6 rollup: - specifier: ^2.79.0 + specifier: ^2.80.0 version: 2.80.0 rollup-plugin-ts: - specifier: ^3.0.2 - version: 3.4.5(@babel/core@7.29.7)(@babel/plugin-transform-runtime@7.29.7(@babel/core@7.29.7))(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@babel/preset-typescript@7.29.7(@babel/core@7.29.7))(@babel/runtime@7.29.7)(@swc/core@1.15.40(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(rollup@2.80.0)(typescript@5.9.3) + specifier: ^3.4.5 + version: 3.4.5(@babel/core@7.29.7)(@babel/plugin-transform-runtime@7.29.7(@babel/core@7.29.7))(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@babel/preset-typescript@7.29.7(@babel/core@7.29.7))(@babel/runtime@7.29.7)(@swc/core@1.16.1(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(rollup@2.80.0)(typescript@5.9.3) typescript: specifier: ^5.4.5 version: 5.9.3 @@ -604,29 +616,29 @@ importers: packages/nutui-taro-demo: dependencies: '@babel/runtime': - specifier: ^7.23.9 + specifier: ^7.29.7 version: 7.29.7 '@nutui/lottie-miniprogram': - specifier: ^1.0.1 + specifier: ^1.0.2 version: 1.0.2 '@nutui/replace-icons': - specifier: ^1.0.0 - version: 1.0.3(@types/node@22.19.19)(@vitest/ui@2.1.9(vitest@3.2.4))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + specifier: ^1.0.3 + version: 1.0.3(@types/node@22.20.1)(@vitest/ui@2.1.9(vitest@3.2.7))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) '@nutui/touch-emulator': specifier: ^1.0.0 version: 1.0.0 '@pmmmwh/react-refresh-webpack-plugin': - specifier: ^0.5.11 - version: 0.5.17(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + specifier: ^0.6.2 + version: 0.6.2(react-refresh@0.18.0)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/components': specifier: 4.2.0 - version: 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + version: 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/helper': specifier: 4.1.3 version: 4.1.3(@swc/helpers@0.5.23) '@tarojs/plugin-framework-react': specifier: 4.1.3 - version: 4.1.3(@pmmmwh/react-refresh-webpack-plugin@0.5.17(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/runtime@4.1.3)(@tarojs/shared@4.1.3)(@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)))(react@18.3.1)(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + version: 4.1.3(@pmmmwh/react-refresh-webpack-plugin@0.6.2(react-refresh@0.18.0)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/runtime@4.1.3)(@tarojs/shared@4.1.3)(@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)))(react@18.3.1)(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/plugin-html': specifier: 4.1.3 version: 4.1.3(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/runtime@4.1.3)(@tarojs/shared@4.1.3) @@ -635,7 +647,7 @@ importers: version: 4.1.3(@tarojs/service@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3) '@tarojs/plugin-platform-h5': specifier: 4.1.3 - version: 4.1.3(61616c2ed6adcfead3c5df5cc362031d) + version: 4.1.3(e48d17c9af345a333d434f02d921caa5) '@tarojs/plugin-platform-jd': specifier: 4.1.3 version: 4.1.3(@tarojs/service@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3) @@ -656,7 +668,7 @@ importers: version: 4.1.3(react@18.3.1) '@tarojs/router': specifier: 4.1.3 - version: 4.1.3(330f866bc86612540cd13e3381b967b9) + version: 4.1.3(4802cbeebfe1a66f5f36155868e0a2b1) '@tarojs/runtime': specifier: 4.1.3 version: 4.1.3 @@ -665,10 +677,10 @@ importers: version: 4.1.3 '@tarojs/taro': specifier: 4.1.3 - version: 4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + version: 4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/taro-h5': specifier: 4.1.3 - version: 4.1.3(f7070da514994097dea585bd01b868be) + version: 4.1.3(09f260d77208d3a0f8c7621b42b3d2e1) babel-plugin-import: specifier: ^1.13.8 version: 1.13.8 @@ -679,86 +691,86 @@ importers: specifier: ^4.1.1 version: 4.1.1 lottie-react: - specifier: ^2.4.0 - version: 2.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^2.4.2 + version: 2.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: - specifier: ^18.2.0 + specifier: ^18.3.1 version: 18.3.1 react-dom: - specifier: ^18.2.0 + specifier: ^18.3.1 version: 18.3.1(react@18.3.1) react-refresh: - specifier: ^0.14.0 - version: 0.14.2 + specifier: ^0.18.0 + version: 0.18.0 react-transition-group: specifier: ^4.4.5 version: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) devDependencies: '@babel/core': - specifier: ^7.23.9 + specifier: ^7.29.7 version: 7.29.7 '@tarojs/cli': specifier: 4.1.3 - version: 4.1.3(@swc/helpers@0.5.23)(@types/node@22.19.19) + version: 4.1.3(@swc/helpers@0.5.23)(@types/node@22.20.1) '@tarojs/plugin-platform-harmony-ets': specifier: 4.1.3 - version: 4.1.3(@babel/core@7.29.7)(@swc/core@1.3.96(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(lightningcss@1.32.0)(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))) + version: 4.1.3(@babel/core@7.29.7)(@swc/core@1.3.96(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(lightningcss@1.32.0)(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))) '@tarojs/vite-runner': specifier: 4.1.3 - version: 4.1.3(@swc/helpers@0.5.23)(@tarojs/runtime@4.1.3)(@types/babel__core@7.20.5)(jiti@2.7.0)(postcss@8.5.15)(rollup@3.30.0)(terser@5.48.0)(tsx@4.22.4)(typescript@5.9.3)(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)) + version: 4.1.3(@swc/helpers@0.5.23)(@tarojs/runtime@4.1.3)(@types/babel__core@7.20.5)(jiti@2.7.0)(postcss@8.5.28)(rollup@3.30.0)(terser@5.48.0)(tsx@4.23.13)(typescript@5.9.3)(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)) '@tarojs/webpack5-runner': specifier: 4.1.3 - version: 4.1.3(@babel/core@7.29.7)(@swc/core@1.3.96(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@tarojs/runtime@4.1.3)(less@3.13.1)(postcss@8.5.15)(sass@1.77.6)(stylus@0.64.0)(typescript@5.9.3)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + version: 4.1.3(@babel/core@7.29.7)(@swc/core@1.3.96(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@tarojs/runtime@4.1.3)(less@3.13.1)(postcss@8.5.28)(sass@1.103.1)(stylus@0.64.0)(typescript@5.9.3)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@types/react': - specifier: ^18.2.57 - version: 18.3.29 + specifier: ^18.3.31 + version: 18.3.31 '@types/react-dom': - specifier: ^18.2.19 - version: 18.3.7(@types/react@18.3.29) + specifier: ^18.3.7 + version: 18.3.7(@types/react@18.3.31) '@types/react-router-dom': specifier: ^5.3.3 version: 5.3.3 '@types/react-syntax-highlighter': - specifier: ^15.5.11 + specifier: ^15.5.13 version: 15.5.13 '@types/react-test-renderer': - specifier: ^19.0.0 + specifier: ^19.1.0 version: 19.1.0 '@types/react-transition-group': - specifier: ^4.4.10 - version: 4.4.12(@types/react@18.3.29) + specifier: ^4.4.12 + version: 4.4.12(@types/react@18.3.31) '@types/webpack-env': - specifier: ^1.18.4 + specifier: ^1.18.8 version: 1.18.8 '@typescript-eslint/eslint-plugin': - specifier: ^7.0.2 + specifier: ^7.18.0 version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) '@typescript-eslint/parser': - specifier: ^7.0.2 + specifier: ^7.18.0 version: 7.18.0(eslint@8.57.1)(typescript@5.9.3) babel-preset-taro: specifier: 4.1.3 - version: 4.1.3(@babel/core@7.29.7)(@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7))(@babel/preset-react@7.29.7(@babel/core@7.29.7))(@swc/helpers@0.5.23)(react-refresh@0.14.2) + version: 4.1.3(@babel/core@7.29.7)(@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7))(@babel/preset-react@7.29.7(@babel/core@7.29.7))(@swc/helpers@0.5.23)(react-refresh@0.18.0) eslint: - specifier: ^8.56.0 + specifier: ^8.57.1 version: 8.57.1 eslint-config-taro: specifier: 4.1.3 version: 4.1.3(@babel/core@7.29.7)(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.5(eslint@8.57.1))(eslint@8.57.1)(typescript@5.9.3) eslint-plugin-import: - specifier: ^2.29.1 + specifier: ^2.32.0 version: 2.32.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1) eslint-plugin-react: - specifier: ^7.33.2 + specifier: ^7.37.5 version: 7.37.5(eslint@8.57.1) eslint-plugin-react-hooks: - specifier: ^4.6.0 + specifier: ^4.6.2 version: 4.6.2(eslint@8.57.1) postcss: - specifier: ^8.4.35 - version: 8.5.15 + specifier: ^8.5.26 + version: 8.5.28 stylelint: - specifier: ^16.7.0 + specifier: ^16.26.1 version: 16.26.1(typescript@5.9.3) typescript: specifier: ^5.3.3 @@ -814,8 +826,8 @@ packages: '@babel/core': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - '@babel/generator@7.29.7': - resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} + '@babel/generator@7.29.8': + resolution: {integrity: sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.29.7': @@ -914,6 +926,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.8': + resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.29.7': resolution: {integrity: sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w==} engines: {node: '>=6.9.0'} @@ -1499,6 +1516,10 @@ packages: resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.8': + resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1659,18 +1680,21 @@ packages: '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} - '@emnapi/core@1.9.2': - resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} + '@emnapi/core@1.11.1': + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} '@emnapi/runtime@1.10.0': resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} - '@emnapi/runtime@1.9.2': - resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + '@es-joy/jsdoccomment@0.50.2': resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==} engines: {node: '>=18'} @@ -2174,8 +2198,8 @@ packages: resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/eslintrc@3.3.5': - resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} + '@eslint/eslintrc@3.3.7': + resolution: {integrity: sha512-F42g89Qd5oAWtp0k0nnSrjziAKza7w8SVT4mStc18LZMaRb4J1HQAHLCalEtDCxrTuksx7NU9qsmeLwpOfPqWw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/js@8.41.0': @@ -2190,6 +2214,10 @@ packages: resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@9.39.5': + resolution: {integrity: sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/markdown@6.6.0': resolution: {integrity: sha512-IsWPy2jU3gaQDlioDC4sT4I4kG1hX1OMWs/q2sWwJrPoMASHW/Z4SDw+6Aql6EsHejGbagYuJbFq9Zvx+Y1b1Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2584,7 +2612,7 @@ packages: '@mdx-js/react@3.1.1': resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} peerDependencies: - '@types/react': ^18.2.57 + '@types/react': ^18.3.31 react: '>=16' '@mdx-js/rollup@3.1.1': @@ -2592,24 +2620,26 @@ packages: peerDependencies: rollup: '>=2' - '@microsoft/api-extractor-model@7.29.6': - resolution: {integrity: sha512-gC0KGtrZvxzf/Rt9oMYD2dHvtN/1KPEYsrQPyMKhLHnlVuO/f4AFN3E4toqZzD2pt4LhkKoYmL2H9tX3yCOyRw==} + '@microsoft/api-extractor-model@7.33.11': + resolution: {integrity: sha512-iDu1AtuRC2Z8XVs2SieZieVavF1FXPBX1C9pMexJh8Dx/Dd/3ZZ4nRQp/PU2Vk2rUHWuBz1wOyL4DcuhVnBXwg==} + engines: {node: '>=20.9.0'} - '@microsoft/api-extractor@7.47.7': - resolution: {integrity: sha512-fNiD3G55ZJGhPOBPMKD/enozj8yxJSYyVJWxRWdcUtw842rvthDHJgUWq9gXQTensFlMHv2wGuCjjivPv53j0A==} + '@microsoft/api-extractor@7.59.0': + resolution: {integrity: sha512-KDYV8kSVjmG8JJWVg1f1aKxteNG1IQ44D07Rjhlcci8wlqrSFNhUfgv7dJhwT0W2h3NDIL5Vz2f+/DfO4OpDHw==} + engines: {node: '>=20.9.0'} hasBin: true - '@microsoft/tsdoc-config@0.17.1': - resolution: {integrity: sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==} + '@microsoft/tsdoc-config@0.18.1': + resolution: {integrity: sha512-9brPoVdfN9k9g0dcWkFeA7IH9bbcttzDJlXvkf8b2OBzd5MueR1V2wkKBL0abn0otvmkHJC6aapBOTJDDeMCZg==} - '@microsoft/tsdoc@0.15.1': - resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} + '@microsoft/tsdoc@0.16.0': + resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==} '@mixmark-io/domino@2.2.0': resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==} - '@modelcontextprotocol/sdk@1.29.0': - resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==} + '@modelcontextprotocol/sdk@1.30.0': + resolution: {integrity: sha512-xKd8OIzlqNzcqcNumGAa6g+PW2kjD5vrpcKOnfldAUPP3j7lnqMPwlTXQm8gF+UwH72z0lqaRbjr9hqGz0eITA==} engines: {node: '>=18'} peerDependencies: '@cfworker/json-schema': ^4.1.1 @@ -2618,6 +2648,13 @@ packages: '@cfworker/json-schema': optional: true + '@napi-rs/lzma-linux-x64-gnu@1.5.1': + resolution: {integrity: sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==} + engines: {node: ^22.20 || ^24.12 || >=25} + cpu: [x64] + os: [linux] + libc: [glibc] + '@napi-rs/triples@1.2.0': resolution: {integrity: sha512-HAPjR3bnCsdXBsATpDIP5WCrw0JcACwhhrwIAQhiR46n+jm+a2F8kBsfseAuWtSyQ+H3Yebt2k43B5dy+04yMA==} @@ -2627,6 +2664,13 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@napi-rs/wasm-runtime@1.2.3': + resolution: {integrity: sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==} + engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} + peerDependencies: + '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 + '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 + '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} @@ -2645,14 +2689,14 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nutui/icons-react-taro@3.0.2-beta.6': - resolution: {integrity: sha512-h05EJjjgn8HuEWVAgXUkXfnUWuiRQvmhdmay1walkAKfm1OsJHpxWBaWe9wjxQew/MKVrkU4tw+YlSHs0eaWcQ==} + '@nutui/icons-react-taro@3.0.2': + resolution: {integrity: sha512-yQgN1eOXVDQuJ9RLmQelo01LoDvRn81UsDdQf2Yct35qDeqEcc7yuBhnwCRrj6mc2Z8KFvzbGysbazmvP4g2VA==} '@nutui/icons-react@1.0.5': resolution: {integrity: sha512-0TYl3Fk+sVz95DKqn/7isYAvaK5YGnaBwMMib4rqYLoqi9GGFwgU9rp2hYXu/X5IYdWgshj0xiuGMK75/vUYbQ==} - '@nutui/icons-react@3.0.2-beta.6': - resolution: {integrity: sha512-zSp+qxzXcwrdkGI2ZRCjcGHOrJmiB4y/lTeG8QjI+O4XN6OeRUJ/rz9qz0VsWTFCmwP/bjVckmSjcgR850ak3g==} + '@nutui/icons-react@3.0.2': + resolution: {integrity: sha512-GxN/MIHUpPoxA5X82doXUIYQxf4kDXFEo9/J9gTuC2ZoUzb2CwewTRhDU1oA9XXeP75jM4G+uIdo5JcPifQnaA==} '@nutui/jdesign-icons-react-taro@1.0.6-beta.2': resolution: {integrity: sha512-2Scz5c9o14gA7Mw5JdiEkc/KEbNlNWMcJMuqVyFVipYeeYN/118N/fvHVpocmJviN0Gc4P+u3ZB3dIQSA2j4Fw==} @@ -2729,139 +2773,221 @@ packages: '@octokit/types@14.1.0': resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} - '@oxc-parser/binding-android-arm-eabi@0.125.0': - resolution: {integrity: sha512-YfHwPEH8c5XNOlffaAqhsChNOBgmJ7rEgVbxSwAr65KDR0wbpZUBkrSaCClYL4urf0LmwyULrahHMvFAyk/dwA==} + '@oxc-parser/binding-android-arm-eabi@0.139.0': + resolution: {integrity: sha512-22EsXTA3Vc7OvrF4bfT48PFln2UbxkVgrp/Tm32qLw76Dv7SmcInfClJe6yPYamnli6HiqasnESZ5ezN+X4ybg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-parser/binding-android-arm64@0.125.0': - resolution: {integrity: sha512-rh72O8ackqp0HC+3W38oCTkCFmOpXrHRrbP+4xrX8O1UmCWcyb5pIbA/+0ATPGVVl9NcHt/CgqI8rBuw4Y9kMg==} + '@oxc-parser/binding-android-arm64@0.139.0': + resolution: {integrity: sha512-uASQkZV+CUQ6xXvoMzDQyfhd8OMusdv2FyCPfAi5ZDYptesapJlw7erhpGi1Lc+U8QjQV2JUrIh7d/3su2LzmQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-parser/binding-darwin-arm64@0.125.0': - resolution: {integrity: sha512-14Q74TMQA/eO0N5dz5Tel25qma9vVJEpmrmqXnx0R7jMXhqFxkSSy40NOtCQijWUfeD5ho5+NuXDl5WSxyifJQ==} + '@oxc-parser/binding-darwin-arm64@0.139.0': + resolution: {integrity: sha512-vuQOv2WF5pZCkdSPEExul98o853M3MCR24DpWsGrUoPJu5KcnGE34kLXY2yFwBwZwT+eN1x40Tt4q6ZzlEdNUA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-parser/binding-darwin-x64@0.125.0': - resolution: {integrity: sha512-qWQDphAaIS6qXeuYcWm4jta8qFZpjjim2WxiPwZmHi77COS8i0Jct8tBcNIOZ/JaVh+hCL2it228m2Lr9GOL6A==} + '@oxc-parser/binding-darwin-x64@0.139.0': + resolution: {integrity: sha512-zxZB8ChS+7XactZhcyxQ292P/DNiiBaPPKYiVUlb3RC0V/hme5bokNubjcmEmbW9uTfmqLTpveAdkbe66H3pGg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-parser/binding-freebsd-x64@0.125.0': - resolution: {integrity: sha512-PTATC/j2MvDP8lejoCC7PFWNoYV2NsVzzM0WgBqZDFAkFdKsW0wfbQWochfY3fHNUN1QhZNetrd/K4Pdo6cIHQ==} + '@oxc-parser/binding-freebsd-x64@0.139.0': + resolution: {integrity: sha512-iw2MsoCPBQwdJqywRAGsF1jEAcGoZ+DeG2LVzt5pdUvRHqajsMF46BH0rHiWoWtMwcMSia+oQYga7fHo7u7Bcw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-parser/binding-linux-arm-gnueabihf@0.125.0': - resolution: {integrity: sha512-Colj5agHBAMKZrkyPcCEelfKuh8sNi1lWpJf1TiEeEmbREQ6I2ytG+ccfdDaiUV7Z0Vw5FyJbnqEPgHo8kF3RQ==} + '@oxc-parser/binding-linux-arm-gnueabihf@0.139.0': + resolution: {integrity: sha512-SwjD/k3Y5bwGJWOH313VyaDrAuaYg1Pe+4AAXCgUKvSO5IHkj+mZ0oFcOWmB5nTuOM3uwdT+leL8h4OnFlI5hw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm-musleabihf@0.125.0': - resolution: {integrity: sha512-BxQ8o082+/qtjAFK6WUV+/bi0y3M0RPvPQNm8JSY7/7LfhbWq6NykgZiGayrtauO1nowpmGlnpJXXMp9q0oT1A==} + '@oxc-parser/binding-linux-arm-musleabihf@0.139.0': + resolution: {integrity: sha512-qbeygDkcvailKFhphb2YGMMXsaZIynHlPtoOrcx4NZB/tRbUKraCCMbw8dPeFtEKasfS2qWh1VnReY+Lcys1zA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm64-gnu@0.125.0': - resolution: {integrity: sha512-qR0dOth+4whygUwoNnfews8jMC78gjhIBfcy9AFzvxoh7PFGdferRp3KV/4kkeaVk2kOS/5grlAeJevpA+/Pfg==} + '@oxc-parser/binding-linux-arm64-gnu@0.139.0': + resolution: {integrity: sha512-SrlL02KeImKlvx/9rCeopOLH7qKI3rqKKEguK6KBwVwEGLhV/A47dW4DNigf6/LFhrwoovaiayEQryjYAI86dQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-arm64-musl@0.125.0': - resolution: {integrity: sha512-eIXyzpA12/+maKjMSsXdHfpzwQcoRfzokT+/ZhVEo6u/9RcXQrZZmZ70MmmJqwVcLez6U4ScjB/eiYlsEs7p0g==} + '@oxc-parser/binding-linux-arm64-musl@0.139.0': + resolution: {integrity: sha512-u9e884ChAVRmIZ1jr/m46S96FoDQnruFjISLi4Y0i6Wu/JUUmIiw7+umLyXILJsPfUuqnN5BJLe23t07+Y6+IA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-ppc64-gnu@0.125.0': - resolution: {integrity: sha512-w7ir5OuqSJUKLadmsSAWwTNso/ZGem2bPT/1LSU7l+ecmKPyegIvU+wzY0ADhZ/t/goaedqyp24SDRxyLxO9zg==} + '@oxc-parser/binding-linux-ppc64-gnu@0.139.0': + resolution: {integrity: sha512-Z9tU2b3GJfAXOdirQmz4gZQkQkVjy53i77gf91l0733MQKa/qtk73KQQE2GzDtMqim+HyjpzvemmqzBtH2IJUA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-gnu@0.125.0': - resolution: {integrity: sha512-2KPTfWorcW8RNE8aEMHKbPSjHDBjFVYqg8nSLRBp7pe7VBqHsmkO9jpK8YmaYA5d5GcUy+J++5O4EgxkrQBEtw==} + '@oxc-parser/binding-linux-riscv64-gnu@0.139.0': + resolution: {integrity: sha512-RyUbr7hzPK84YDWKs77PRYk9VBwWbsbuYsQzQWiSmLnARXTg2zntLPGfCH/1wpfUYdmGkp/6SsqTXSsYdw9Jgw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-musl@0.125.0': - resolution: {integrity: sha512-Vsl8dmQdKtDsQiDPHP5VFjXOuVGcZQcziYMkU/yPnlaKHMqoX/q+bxt7K+BwResi9Cc8pnZ6oYGTgPcjAtt5QQ==} + '@oxc-parser/binding-linux-riscv64-musl@0.139.0': + resolution: {integrity: sha512-dcQhjtcDvtR8BgkUpt03Yz5SzxdzYvTigenIJOEsiSX6G2t6yybEMxGWjp0dOuYGror0BaqcZfTyXR58amCEig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-s390x-gnu@0.125.0': - resolution: {integrity: sha512-HwY5kuM818r/kHdHG2TZqzqxyF7fz90prPg85R/2VmgRWk8cMyGZo+8BNZDQAMJ6aGSTRvn2sdGXv3sZ5bsUWw==} + '@oxc-parser/binding-linux-s390x-gnu@0.139.0': + resolution: {integrity: sha512-iuGrxysV4rGUymdKpn7bgZQ6Vix8Bi/6D/rp71HYIzphq6NKrsBhsGOYsSZte+uBFL43tXh7Xr7TM72sGliJNA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-gnu@0.125.0': - resolution: {integrity: sha512-o7k6+xAI2pIkjBsCqM0elI4q+qY/3TexH6cpIlGm+nJze1tvx7QEHCKdiy6wnRacFvUYmySEZ5hWFBc9MbxrIA==} + '@oxc-parser/binding-linux-x64-gnu@0.139.0': + resolution: {integrity: sha512-NxJdZZyaa2JLLvNfH/iJQXfCNfKcPMylwY4ObMpBVmW4Nq+RyUpVVQXrMMelcQ6rwx3nuhF1Iga8n+eoAKGCIA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-musl@0.125.0': - resolution: {integrity: sha512-vksRynFD6vytE1sDZCaeIk6y6rCsq0a18T4kcXbfGHBq2q/qSyDogWLk3A3S3hl/ikNfse7yrEwAuQ8ldIJeAg==} + '@oxc-parser/binding-linux-x64-musl@0.139.0': + resolution: {integrity: sha512-ePxBvvtzISmSsJ0RIj8FNikSCn58i1jtccj7XR4U9Li4iSzhkFyYlnJ51cQTUwkairz8WMTD4SpKoot8RyTnQA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxc-parser/binding-openharmony-arm64@0.125.0': - resolution: {integrity: sha512-AAtg4pnKvrKsay2ldZZRY98ALFBOgbyy3Gyxo658z6aecM0Zr5mI9BOHRCchSVKUHqMqmjhCA4wIdZvz02VrAw==} + '@oxc-parser/binding-openharmony-arm64@0.139.0': + resolution: {integrity: sha512-b/c2+mPXMOxG5x16n8yf9cjor/ntQQScmYnSmLEWIWJ4rfXd5dokMxx0kliSLA+YAGq6DD3K9BWi+aFXHiiV1w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-parser/binding-wasm32-wasi@0.125.0': - resolution: {integrity: sha512-FkIQFrwlBXoFsazb9NQpQPP4YI9sWWXUOLkIPYlQb+hPwr+VY6d0B7l26yMBR2ktf2h3qyAMOW6Pd+mX9rtOJg==} - engines: {node: '>=14.0.0'} + '@oxc-parser/binding-wasm32-wasi@0.139.0': + resolution: {integrity: sha512-rNU0pO+/CVPC2qZ+xtX5R2cOje9Q75q3UkfgwUCPlplqxMv6Iffd5tMPGVMCLGnPINxPlmi0WPsW94HltbYvfQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@oxc-parser/binding-win32-arm64-msvc@0.125.0': - resolution: {integrity: sha512-bi4RY9oktNm3kQ3qRCJgBKtwqSg+mtnt5W9l33rdiTyiXlL8a1LQQy1x7aym/ArHDE+19kSWSr2YDd2ExxzbfQ==} + '@oxc-parser/binding-win32-arm64-msvc@0.139.0': + resolution: {integrity: sha512-JPEmfncZfqAFiGsAN6UZSMIBqnG8wn8buywRacFOWjP+9dZwcs03SsBp4tmyjM/4l/VoH/IuThrW1Jof3OyQUw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-parser/binding-win32-ia32-msvc@0.125.0': - resolution: {integrity: sha512-ZhvL2vK+9rzjk1US2d2u6NeI1/jtkzsm//ilFac+Kn3klTpJJlKNZwF23CUiAu+B3rdQUbPItm/BHlL6f/5uPA==} + '@oxc-parser/binding-win32-ia32-msvc@0.139.0': + resolution: {integrity: sha512-c06dWBwEnFHof5JN7T9/ts23uATXS9czPEBO60d4xnjH2Am29Bo7OGKdVHRmcWQnw0OBxlTg9fIEXAvtcwOBfw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-parser/binding-win32-x64-msvc@0.125.0': - resolution: {integrity: sha512-P4ywUSCYIg44Y82wF3e0ns1BV1dNn+ZhfjNDwm0FTPtBKXedOCRPrvmjXn7Qb+IDGGHAA68lmDLCjGxuKUwXPw==} + '@oxc-parser/binding-win32-x64-msvc@0.139.0': + resolution: {integrity: sha512-bI3/44urQjW/D495JPXe+c9d+4Q+ONi3DvDNnzwRZYTWHZ3hAlFdmirYK4mzhTfCZiAly02EbMYir7QGU+9O2Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxc-project/types@0.125.0': - resolution: {integrity: sha512-s9RKLJbRR+3kEFB3mmJVPWah3cZUAl0Jzmthx6Pb/QXnlNkRwTP75tK4uVahp/ifiiTmNYMXI1+NnGP1rNurXg==} + '@oxc-project/types@0.139.0': + resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} '@package-json/types@0.0.12': resolution: {integrity: sha512-uu43FGU34B5VM9mCNjXCwLaGHYjXdNincqKLaraaCW+7S2+SmiBg1Nv8bPnmschrIfZmfKNY9f3fC376MRrObw==} + '@parcel/watcher-android-arm64@2.6.0': + resolution: {integrity: sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.6.0': + resolution: {integrity: sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.6.0': + resolution: {integrity: sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.6.0': + resolution: {integrity: sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.6.0': + resolution: {integrity: sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm-musl@2.6.0': + resolution: {integrity: sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-arm64-glibc@2.6.0': + resolution: {integrity: sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm64-musl@2.6.0': + resolution: {integrity: sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-x64-glibc@2.6.0': + resolution: {integrity: sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-x64-musl@2.6.0': + resolution: {integrity: sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@parcel/watcher-win32-arm64@2.6.0': + resolution: {integrity: sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-x64@2.6.0': + resolution: {integrity: sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.6.0': + resolution: {integrity: sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==} + engines: {node: '>= 10.0.0'} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -2874,44 +3000,18 @@ packages: resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==} engines: {node: ^14.18.0 || >=16.0.0} - '@pmmmwh/react-refresh-webpack-plugin@0.5.10': - resolution: {integrity: sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==} - engines: {node: '>= 10.13'} - peerDependencies: - '@types/webpack': 4.x || 5.x - react-refresh: '>=0.10.0 <1.0.0' - sockjs-client: ^1.4.0 - type-fest: '>=0.17.0 <4.0.0' - webpack: '>=4.43.0 <6.0.0' - webpack-dev-server: 3.x || 4.x - webpack-hot-middleware: 2.x - webpack-plugin-serve: 0.x || 1.x - peerDependenciesMeta: - '@types/webpack': - optional: true - sockjs-client: - optional: true - type-fest: - optional: true - webpack-dev-server: - optional: true - webpack-hot-middleware: - optional: true - webpack-plugin-serve: - optional: true - - '@pmmmwh/react-refresh-webpack-plugin@0.5.17': - resolution: {integrity: sha512-tXDyE1/jzFsHXjhRZQ3hMl0IVhYe5qula43LDWIhVfjp9G/nT5OQY5AORVOrkEGAUltBJOfOWeETbmhm6kHhuQ==} - engines: {node: '>= 10.13'} + '@pmmmwh/react-refresh-webpack-plugin@0.6.2': + resolution: {integrity: sha512-IhIAD5n4XvGHuL9nAgWfsBR0TdxtjrUWETYKCBHxauYXEv+b+ctEbs9neEgPC7Ecgzv4bpZTBwesAoGDeFymzA==} + engines: {node: '>=18.12'} peerDependencies: - '@types/webpack': 4.x || 5.x + '@types/webpack': 5.x react-refresh: '>=0.10.0 <1.0.0' sockjs-client: ^1.4.0 - type-fest: '>=0.17.0 <5.0.0' - webpack: '>=4.43.0 <6.0.0' - webpack-dev-server: 3.x || 4.x || 5.x + type-fest: '>=0.17.0 <6.0.0' + webpack: ^5.0.0 + webpack-dev-server: ^4.8.0 || 5.x webpack-hot-middleware: 2.x - webpack-plugin-serve: 0.x || 1.x + webpack-plugin-serve: 1.x peerDependenciesMeta: '@types/webpack': optional: true @@ -2941,8 +3041,8 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - '@prettier/plugin-oxc@0.1.4': - resolution: {integrity: sha512-P/KX37tuR1R7xMHMakgzdWsRDMeze7SkwUcGQKbqQVSsJLW0q5kxax2dxEJgK4E4zIoMy7pG6UUE7x4al8AQeg==} + '@prettier/plugin-oxc@0.2.2': + resolution: {integrity: sha512-yscDcAuDtvOfE0c8i8UVP+hjK43VIPpwfMv+73mdkpy12rZWnk5Kl6N6pUneQmaZ3PKTg611zemBHFpMjp9ZnQ==} engines: {node: '>=14'} '@react-spring/animated@9.6.1': @@ -3025,8 +3125,8 @@ packages: rollup: optional: true - '@rollup/plugin-node-resolve@16.0.0': - resolution: {integrity: sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==} + '@rollup/plugin-node-resolve@16.0.3': + resolution: {integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.78.0||^3.0.0||^4.0.0 @@ -3065,168 +3165,179 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.60.4': - resolution: {integrity: sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==} + '@rollup/rollup-android-arm-eabi@4.63.1': + resolution: {integrity: sha512-UZ8sUxPTiHWYX9QNdJedb1kDZSpS1t/VPWBWGSgqHNi9w3Cu6IXvu2mzbhiTiPvtrqgTQJ+zqiAq2iPIPilpaQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.60.4': - resolution: {integrity: sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==} + '@rollup/rollup-android-arm64@4.63.1': + resolution: {integrity: sha512-cQ4nFQABN5cDvDpbvJ7bMStCpnaVxynZrRMfUJYgxcIk9Sh54FIO1vtfkg0B69REjER77ioZ/ov+eAApx/KmLQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.60.4': - resolution: {integrity: sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==} + '@rollup/rollup-darwin-arm64@4.63.1': + resolution: {integrity: sha512-FQNqd1lRy/0QhDk3xeRIkSBiCpXCiDnZO3YLVdcDKN1UBiKToNftCzcXYNLshmPDUMlu2TdeS8tGcsU6f3YF1Q==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.60.4': - resolution: {integrity: sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==} + '@rollup/rollup-darwin-x64@4.63.1': + resolution: {integrity: sha512-pvD16V939D3CloK0+qikpGaxiPrDUXTe7Y5cWOMkMSy7m1cawa8EGy/kXYi/G/cKAC4HDAbSnzCIk1WmsoOKXg==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.60.4': - resolution: {integrity: sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==} + '@rollup/rollup-freebsd-arm64@4.63.1': + resolution: {integrity: sha512-pcFGeL2345VwdTnJhA6zLbew+YgWB0qBG2+dMtXjCicf6+rm6kO6cOoh5VnTe0ZMrMRgRyuHmCJxZWrIdzYuOw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.60.4': - resolution: {integrity: sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==} + '@rollup/rollup-freebsd-x64@4.63.1': + resolution: {integrity: sha512-mRJlqSRulVzcKq/LKA6ICSIc3K/l4fzlVn/gePn2nXIHy8seRi5z/eeRE0d/XMBxcMldiXtQTSpRj0tkkC3g8Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.60.4': - resolution: {integrity: sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==} + '@rollup/rollup-linux-arm-gnueabihf@4.63.1': + resolution: {integrity: sha512-YDUNvVM85TI3g/1OpnqKP1h4NeW/j64DfWMf+G3M809xNk1bJSnpFp4sh83NpmVE5DXnkh8ULor4LTVZKoYLHw==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.60.4': - resolution: {integrity: sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==} + '@rollup/rollup-linux-arm-musleabihf@4.63.1': + resolution: {integrity: sha512-7Mcn71p9ZuQFAj+h+dhQXy/yeLePRS2yKRnmW1DijA9thKO5qap0GNOIQK4yQ6iP3SU0Mrb/yWo8h8vgRba8lw==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.60.4': - resolution: {integrity: sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==} + '@rollup/rollup-linux-arm64-gnu@4.63.1': + resolution: {integrity: sha512-4YiLQTX6U4CSl0L9cluep9A9W6UmTfqBDc2/CH6wlu54pl4E7Jn3cOD8oxzvBDEGk/JMKgJ47C8g+radF7mwvg==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.60.4': - resolution: {integrity: sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==} + '@rollup/rollup-linux-arm64-musl@4.63.1': + resolution: {integrity: sha512-2ra8F7w8OquwZN9z2/fKFnli69wa8PLwaVzRMIPGb13ByMJwC28Fbp8YcVGoUhlYMTt7j5j9bNgpysrN2UM+vw==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.60.4': - resolution: {integrity: sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==} + '@rollup/rollup-linux-loong64-gnu@4.63.1': + resolution: {integrity: sha512-Sy20ncyhjmBP0Ml+UvQbimjlk6VFgjW5uNP+qqwHB00mTE8Bl2C1TuHTlRwK2YoXeZbee5lP2XevBWVkAQAtSQ==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.60.4': - resolution: {integrity: sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==} + '@rollup/rollup-linux-loong64-musl@4.63.1': + resolution: {integrity: sha512-noITLp8oNjYliPnGWmLyelIHwULGqbHloQHGw1rtxbWhTuWooRpnZarZQJ1y9EUC4szuCusCc+HEpUtxpIwYvA==} cpu: [loong64] os: [linux] libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.60.4': - resolution: {integrity: sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==} + '@rollup/rollup-linux-ppc64-gnu@4.63.1': + resolution: {integrity: sha512-hlxxXd+F1mWiAcaFR7Sv9ZQT6m6UfI8+Vy/kFJzztq2pDMU/0wZ9sish0iszNZvsQDo8Gc0i5yuFEOz5dDf6fA==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.60.4': - resolution: {integrity: sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==} + '@rollup/rollup-linux-ppc64-musl@4.63.1': + resolution: {integrity: sha512-EF7OpqQTQ/BvGqLzUi4rEHuagCV9MugAUXSHemwPW5vxZ75RR+jxO/2j95Ph2dalMpFHSVECjRoioHZgA9zOYA==} cpu: [ppc64] os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.60.4': - resolution: {integrity: sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==} + '@rollup/rollup-linux-riscv64-gnu@4.63.1': + resolution: {integrity: sha512-wQO3JesW9PRkwlabQ27y7sPfVOOTLRG73I4F2UYHG5PXun3J9U3y+b7ezVKSYbsvSKGQ1k1cq8Qlun4C9kLt3w==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.60.4': - resolution: {integrity: sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==} + '@rollup/rollup-linux-riscv64-musl@4.63.1': + resolution: {integrity: sha512-ouAGwhO6wHRXdnOVCOsB0tRFkA7nhNB2Nwax6oECXN0YiN8EYUTBAOudADOB1PI+yDL61TeNx/u7MVCzksNbkQ==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.60.4': - resolution: {integrity: sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==} + '@rollup/rollup-linux-s390x-gnu@4.63.1': + resolution: {integrity: sha512-q2R38Sn+1J8RxhfJ+T54wSWmyKXWec+9jgDfqO2AtArEqHO5R2aeayp5H5OYLr5UYDVGsVaZPEFUooMhYCdz5A==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.60.4': - resolution: {integrity: sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==} + '@rollup/rollup-linux-x64-gnu@4.63.1': + resolution: {integrity: sha512-gfI5T24WLLuFfSKw7Go/zDXjAAV0fny0swTaDv+WjK7vqcw4cRhFfdsyKL1n+ukI+ooBxn3bVQnyrn06WpI50w==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.60.4': - resolution: {integrity: sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==} + '@rollup/rollup-linux-x64-musl@4.63.1': + resolution: {integrity: sha512-4h6XqthmB4Hspji84wvgk+ElodTsGj+dbZqHJHHtKxj4mYq0ANSEEPX9ys3moJueqsRjwpaJYH7874Itwnj2ow==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.60.4': - resolution: {integrity: sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==} + '@rollup/rollup-openbsd-x64@4.63.1': + resolution: {integrity: sha512-dlfCOa87o1VAYegLQ9EKilx2JCeRofiyPGhTCmqnuXZ6bMPiycO1rq1+sKoulAp7pGLIsTIw+1x5R+zgh5LhhA==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.60.4': - resolution: {integrity: sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==} + '@rollup/rollup-openharmony-arm64@4.63.1': + resolution: {integrity: sha512-cjkLbOlfcm3QGhMM1J5zaZjsw1GggbN6rw9UTSSRrPrR1KkcXnN7Uq9rPw34xImQ9VOY9GN+6u2Zj80B9ptkcw==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.60.4': - resolution: {integrity: sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==} + '@rollup/rollup-win32-arm64-msvc@4.63.1': + resolution: {integrity: sha512-Li1KdUnWGE4N3e1F/B4RTB1ms+nG4WBgjByO46pkeBVX/2UBsY53xf5vK9WygVmnH3RwncIST7lkSdLSY6P9lg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.60.4': - resolution: {integrity: sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==} + '@rollup/rollup-win32-ia32-msvc@4.63.1': + resolution: {integrity: sha512-t4ZYOSoLTgwhuFMrmTMLx/+i1DQVK7HYqMc6kY46EApwi8X0nIVphzdNoThU3xt6n+N5urG1/gxBdCaKDLavfg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.60.4': - resolution: {integrity: sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==} + '@rollup/rollup-win32-x64-gnu@4.63.1': + resolution: {integrity: sha512-RgroPfMmKlD1RzSDxvwgcPiy2HNQKoYV7OmwIXDsk73uKW5t6B/V8KIy27SMv/FNXFo/oSBtWc9J0X7t91ezZg==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.60.4': - resolution: {integrity: sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==} + '@rollup/rollup-win32-x64-msvc@4.63.1': + resolution: {integrity: sha512-at8QVep6S3h5Y6gSbdGU06bRY5WJkf6WUduM9YtvYMbYhB1MOFfUgc6kehitQXzOtMSaT70q7f9ydPhpqu821w==} cpu: [x64] os: [win32] '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@rushstack/node-core-library@5.7.0': - resolution: {integrity: sha512-Ff9Cz/YlWu9ce4dmqNBZpA45AEya04XaBFIjV7xTVeEf+y/kTjEasmozqFELXlNG4ROdevss75JrrZ5WgufDkQ==} + '@rushstack/node-core-library@5.24.0': + resolution: {integrity: sha512-g/Z47ZwARn/VkTnHcyJslrR26erRf1G5JbqPlfGZGBCrOcrEt8fTQXXDVhUDDNl/g/v3TXI1dNiAAT5FEks8BA==} + engines: {node: '>=20.9.0'} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/problem-matcher@0.2.1': + resolution: {integrity: sha512-gulfhBs6n+I5b7DvjKRfhMGyUejtSgOHTclF/eONr8hcgF1APEDjhxIsfdUYYMzC3rvLwGluqLjbwCFZ8nxrog==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/rig-package@0.5.3': - resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} + '@rushstack/rig-package@0.7.3': + resolution: {integrity: sha512-aAA518n6wxxjCfnTAOjQnm7ngNE0FVHxHAw2pxKlIhxrMn0XQjGcXKF0oKWpjBgJOmsaJpVob/v+zr3zxgPWuA==} - '@rushstack/terminal@0.14.0': - resolution: {integrity: sha512-juTKMAMpTIJKudeFkG5slD8Z/LHwNwGZLtU441l/u82XdTBfsP+LbGKJLCNwP5se+DMCT55GB8x9p6+C4UL7jw==} + '@rushstack/terminal@0.24.3': + resolution: {integrity: sha512-KxphDhPGC4xDrKg8O4yrWCEpPMi87aJc1iycXqMVh1dLgV0M34hiH9ZTgWjBRmcrT/OIHoOeWf48npcQFzgp+g==} + engines: {node: '>=20.9.0'} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/ts-command-line@4.22.6': - resolution: {integrity: sha512-QSRqHT/IfoC5nk9zn6+fgyqOPXHME0BfchII9EUPR19pocsNp/xSbeBCbD3PIR2Lg+Q5qk7OFqk1VhWPMdKHJg==} + '@rushstack/ts-command-line@5.3.13': + resolution: {integrity: sha512-+jNbxhh8CkrZYxMk9X3GRYM2+Myr1xCCj+eHbJ9Vp+PCdNHS0TUl5QQFT6UbM/aTFRCzs5jiBTKYzBRpe5uYbQ==} + engines: {node: '>=20.9.0'} '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -3319,8 +3430,8 @@ packages: engines: {node: '>=12.10.0', npm: '>=6.0.0'} hasBin: true - '@swc/core-darwin-arm64@1.15.40': - resolution: {integrity: sha512-PaYyclfmQ++77D8ityYvmmVzHv9aG8ROwt2GfG6/ccloy4Hgf80qtOnzb9VYvPsUT7Ty1uhuDRhv3XYpf62qhQ==} + '@swc/core-darwin-arm64@1.16.1': + resolution: {integrity: sha512-zlJblJ8ncErD43lKdxjbUaUskJQf+LxiPXYcWXD8/8ZMV+7uuAT+CwjciLXpyZBd5Pq/S726bMpeeAwSeL1hhg==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -3331,8 +3442,8 @@ packages: cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.15.40': - resolution: {integrity: sha512-HbbPzvfLBUXjIB1Ezks+//lNUjmLjfyd63XSwprJgrZaXYdm70kohXPJUWdqKZozolFxbPaO+xtBaiUp6BoueA==} + '@swc/core-darwin-x64@1.16.1': + resolution: {integrity: sha512-IN0BmPWb0YAh/17mmlWB/HDBtTw2MfuW4hulf/tQAgTQBRH17l+z499bNJLK6LizSjqs0P7V+jU38Zj+vJC1DA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -3343,8 +3454,8 @@ packages: cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.15.40': - resolution: {integrity: sha512-SlRZsCjOCPR2LvFs0Ri/Xrx/5o5TCt8vl4gW6mX1hEZOG0a625RxzRHpHdAQNGykmAN/7IeaFAJG+QnNmxlHcA==} + '@swc/core-linux-arm-gnueabihf@1.16.1': + resolution: {integrity: sha512-EYgrx2YOCQ2Twz2S793kqNjPkpvYVUPzzR95bIb7by+VQcyaai4lZZ2iz/tZvcFVKSNcN3/JTKwx+aBn2ZL52A==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -3355,8 +3466,8 @@ packages: cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.15.40': - resolution: {integrity: sha512-Q8byxJt2fh8CR3EUX6snBpy47AoBVm+In/+Z3rjDHMjC38ZvR9/gtUUNCT0tfrn4EdVsO8/QPi59nxrxvqxvBQ==} + '@swc/core-linux-arm64-gnu@1.16.1': + resolution: {integrity: sha512-moyKm0YZlHdHohzm1YwgAyesqnE853rO0REMfJLFAova51wF9BNi+3ZW2PeS7Vqvn6HeJuepLpAHbBdZctxpHA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -3369,8 +3480,8 @@ packages: os: [linux] libc: [glibc] - '@swc/core-linux-arm64-musl@1.15.40': - resolution: {integrity: sha512-4z0MgHU+7M0pZDqBN1El7mFXDI1SBwinfcUkAyA4v8QrhOIUOZltySt2aStQLZGrdXVXM4Y4ylfiTC04ED+MoQ==} + '@swc/core-linux-arm64-musl@1.16.1': + resolution: {integrity: sha512-kKGBO9wdapiSzuf5ZzZ2fYtlu1BNSYtIIUxvH1ir/gcelTOREEHGDCLTDFx/2Knf878nU11A40z7LxwasEFxqA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -3383,22 +3494,22 @@ packages: os: [linux] libc: [musl] - '@swc/core-linux-ppc64-gnu@1.15.40': - resolution: {integrity: sha512-fLI4iUgeSZu0eRWUXwe6YzPFx9gHbFiPkl8Rp3mJfP8OpNR3nTQCGPvHdDh9xniW7mVvgMY4ni7A4VzqI1KrpA==} + '@swc/core-linux-ppc64-gnu@1.16.1': + resolution: {integrity: sha512-nZ6qahtLxC3PM54cWOQZHxt4lTCF/3J4LIoWWzz6v7A+rLs8Dx54anYQf7mH3eIi8KlNpgKci/ie8ZSqFN8O7A==} engines: {node: '>=10'} cpu: [ppc64] os: [linux] libc: [glibc] - '@swc/core-linux-s390x-gnu@1.15.40': - resolution: {integrity: sha512-YqeKMAb7d4nQSGMJQ454IlaCENpzcDqhvBE9+CPfdnYpnUXxd+BSrB6Xk0YjW8UyoEhUj4p6quATCxbsp6J3jg==} + '@swc/core-linux-s390x-gnu@1.16.1': + resolution: {integrity: sha512-4ji5PNzhYq193Z4/4xUaSoNJza6iCkDJSzhetrbB6KOYxsr+kxtQr8ePWhMJUiMt6JUWtXaZ1PYT8FhtED+nGA==} engines: {node: '>=10'} cpu: [s390x] os: [linux] libc: [glibc] - '@swc/core-linux-x64-gnu@1.15.40': - resolution: {integrity: sha512-7HOuS1iGcme/j/TuL1TfmmLGiMQrjv/GmjyZeydl00FKPtpGXEldwqfI56xgd1YzrzoB2svWjxbGGyQ0TEASxg==} + '@swc/core-linux-x64-gnu@1.16.1': + resolution: {integrity: sha512-VJQxqrisHV+B394IgrOu8YsIIXZgffnf5tO+yc9Z/hoUpuZEvuQTjWwlnpZdpyD+0nx6LTD1/3k646JYm43yJA==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -3411,8 +3522,8 @@ packages: os: [linux] libc: [glibc] - '@swc/core-linux-x64-musl@1.15.40': - resolution: {integrity: sha512-h4kZYHc7dpc9P9u4brRJaS8Pl7tPVHAeiLSzw7T5RfIJgAoSdaCMKzI/2Uay9gFhaw8uyCDl0L5q37r0EpAfIA==} + '@swc/core-linux-x64-musl@1.16.1': + resolution: {integrity: sha512-r9oV1mwxxsIGcLV1IQ/tw76MW3doatKze1QFWuC+a7QqJUkhY/bKTSVk6NpKKUGm2LDsE33Va8VqSClfA7vSiQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -3425,8 +3536,8 @@ packages: os: [linux] libc: [musl] - '@swc/core-win32-arm64-msvc@1.15.40': - resolution: {integrity: sha512-+mQgKZXSj6mV38Zh05QaxSjUDmGP/R2JWlXZTDLSPkDzHU6p3GxN9eeSf5dfyDVU86946fmCvSzyl/ucImx8+A==} + '@swc/core-win32-arm64-msvc@1.16.1': + resolution: {integrity: sha512-6huNRessoBLxWEqBm5zJXyCQ27TO7anvkdiuQ5MDO4CJni0nOXEqKtV9RllQ2TdyENKKsUMXVnIfW2hIXx/R5Q==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -3437,8 +3548,8 @@ packages: cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.15.40': - resolution: {integrity: sha512-yvwdPLGd25mcj/mNatjNQ0lZujtQD6psH3v9PNmMb+fSzjbNG8KIDxjFWrcV+fsFVLOkyOmdJsFmX7NAFjVyPw==} + '@swc/core-win32-ia32-msvc@1.16.1': + resolution: {integrity: sha512-OVKJFUzphrGmsh+BGtcZDesx0YryV7/Yvy5XGgTqnrZfjnyfcr5uaqYQugCckdIlupc5Vs3XtDjRAj12z4ZPlw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -3449,8 +3560,8 @@ packages: cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.15.40': - resolution: {integrity: sha512-OXtKsLU1bVtInzzDEAY2sYiF/rl4tvAnLLLpuMp3HzAOQZ5A+i69AKDhA1YLQTaMAqO3vzyYNVAYVRMPtSYD4w==} + '@swc/core-win32-x64-msvc@1.16.1': + resolution: {integrity: sha512-Bt+VIhWYCGk4urklnkkteLUOeLv1VxigwTCeB/xC6rBZxY6IIKdDwCJf6on3E3SUGsIqmQS6QqtuJQc1VxF4Aw==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -3461,8 +3572,8 @@ packages: cpu: [x64] os: [win32] - '@swc/core@1.15.40': - resolution: {integrity: sha512-2kwzJikRvgtNAG7MwVZY2vEzZjTxKIq5jXOihuSV/8U+Hej8Va22t65aKnJZs3P+NwojZvR8Mf8kyM7O+V8sQg==} + '@swc/core@1.16.1': + resolution: {integrity: sha512-nUaeu91O5QZKrQdaDCHd402ogUIoNOOjpkZNq0UomWK0G6gDaGmLhvddF1/3BXf5O8aLyo6ZPY/aMDWvaJQ/hg==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -3495,35 +3606,51 @@ packages: '@swc/types@0.1.26': resolution: {integrity: sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==} + '@swc/types@0.1.28': + resolution: {integrity: sha512-V6Mnml8v09QALx6K0elJ7o9K/MkVDtW3t6L+7Ou/JcWtb3xwId2AH4FeOceySd2JaO87IMw4+6vSZxLm34LPbw==} + '@sxzz/eslint-config@4.6.0': resolution: {integrity: sha512-w6Ythr84oVFk5YpBM6nc/f+YSgwz0UUf+DjSC93jqtFzQ9w17VTuTPyawJ+nNgC6AdIpe43qFoq/zVN0Ol7Jdw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^9.5.0 - '@sxzz/prettier-config@2.3.1': - resolution: {integrity: sha512-FOmTI3cFS7KIOdQFbr2bwUj2runmb0/PVh5S8Wqvr7Vqd17qYYG/b0eSgXCe73ADEpMB+0yQ7Y7HzMR9GSAxLQ==} + '@sxzz/prettier-config@2.3.2': + resolution: {integrity: sha512-OqVsdrjsVcxsC/RDC9JsxJHMjYBkm0Haxki4crBxrI4SQyl3ZQSm+6H4omhKDVI4uEgTnd1s+lmJojqtiDt9Mg==} peerDependencies: + prettier: ^3.8.0 prettier-plugin-astro: ^0.14.1 peerDependenciesMeta: prettier-plugin-astro: optional: true - '@sxzz/test-utils@0.3.12': - resolution: {integrity: sha512-S2iEanMxoXgNEEKpPt9SbnT4BUWSWsgcMvBJddBd6K1WUPfoTGJe/DS6Ux/oeEBSRDHnERzvdnLhOtaWmsXQUg==} - engines: {node: '>=18.12.0'} + '@sxzz/test-utils@0.5.18': + resolution: {integrity: sha512-Od2KZMSzibfnNhcpniDVvPqyHOdx/UG1Wz9ZrJnH9zJx94deSZnIKaOF32Wzw3VaQMupQhrAEg1+B0uNYcA33Q==} + engines: {node: '>=20.19.0'} peerDependencies: + '@ts-macro/language-plugin': '*' + '@volar/typescript': '*' + '@vue/language-core': ^3.1.0 esbuild: '>=0.20.0' rolldown: '*' rollup: ^4.1.0 - vitest: ^2.0.0 || ^3.0.0-0 + typescript: ^5.8.0 || ^6.0.0 + vitest: ^2.0.0 || ^3.0.0 || ^4.0.0 peerDependenciesMeta: + '@ts-macro/language-plugin': + optional: true + '@volar/typescript': + optional: true + '@vue/language-core': + optional: true esbuild: optional: true rolldown: optional: true rollup: optional: true + typescript: + optional: true '@szmarczak/http-timer@1.1.2': resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} @@ -3915,7 +4042,7 @@ packages: '@tarojs/components': 4.2.0 '@tarojs/helper': 4.1.3 '@tarojs/shared': 4.1.3 - '@types/react': ^18.2.57 + '@types/react': ^18.3.31 html-webpack-plugin: ^5 postcss: ^8 rollup: ^3 @@ -3946,7 +4073,7 @@ packages: '@tarojs/components': 4.2.0 '@tarojs/helper': 4.2.0 '@tarojs/shared': 4.2.0 - '@types/react': ^18.2.57 + '@types/react': ^18.3.31 html-webpack-plugin: ^5 postcss: ^8 rollup: ^3 @@ -3991,7 +4118,7 @@ packages: '@tarojs/runtime': 4.1.3 less: ^4 postcss: ^8 - sass: 1.77.6 + sass: ^1.103.1 stylus: '>=0.52.4' webpack: 5.91.0 peerDependenciesMeta: @@ -4015,8 +4142,8 @@ packages: engines: {node: '>=18'} peerDependencies: '@testing-library/dom': ^10.0.0 - '@types/react': ^18.2.57 - '@types/react-dom': ^18.2.19 + '@types/react': ^18.3.31 + '@types/react-dom': ^18.3.7 react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: @@ -4031,6 +4158,9 @@ packages: '@tybys/wasm-util@0.10.2': resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@types/archy@0.0.31': resolution: {integrity: sha512-v+dxizsFVyXgD3EpFuqT9YjdEjbJmPxNf1QIX9ohZOhxh1ZF2yhqv3vYaeum9lg3VghhxS5S0a6yldN9J9lPEQ==} @@ -4082,9 +4212,6 @@ packages: '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} @@ -4188,11 +4315,11 @@ packages: '@types/node@18.19.130': resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} - '@types/node@20.19.41': - resolution: {integrity: sha512-ECymXOukMnOoVkC2bb1Vc/w/836DXncOg5m8Xj1RH7xSHZJWNYY6Zh7EH477vcnD5egKNNfy2RpNOmuChhFPgQ==} + '@types/node@20.19.43': + resolution: {integrity: sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==} - '@types/node@22.19.19': - resolution: {integrity: sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==} + '@types/node@22.20.1': + resolution: {integrity: sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -4222,7 +4349,7 @@ packages: '@types/react-dom@18.3.7': resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} peerDependencies: - '@types/react': ^18.2.57 + '@types/react': ^18.3.31 '@types/react-router-dom@5.3.3': resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} @@ -4239,10 +4366,10 @@ packages: '@types/react-transition-group@4.4.12': resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} peerDependencies: - '@types/react': ^18.2.57 + '@types/react': ^18.3.31 - '@types/react@18.3.29': - resolution: {integrity: sha512-ch0qJdr2JY0r04NXSprbK6TXOgnaJ1Tz23fm5W+z0/CBah6BSBc3n96h7K9GOtwh0HrilNWHIBzE1Ko4Dcw/Wg==} + '@types/react@18.3.31': + resolution: {integrity: sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -4652,11 +4779,11 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - '@vitest/coverage-v8@3.2.4': - resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==} + '@vitest/coverage-v8@3.2.7': + resolution: {integrity: sha512-NEGWJS2XNu2PfRLQwOO3CTKj1tTETxNBdk454vDxVBhxJYhPaA/eS0nAI0c+1El1P7a60z8+i+ZrQoGESweGKg==} peerDependencies: - '@vitest/browser': 3.2.4 - vitest: 3.2.4 + '@vitest/browser': 3.2.7 + vitest: 3.2.7 peerDependenciesMeta: '@vitest/browser': optional: true @@ -4667,8 +4794,8 @@ packages: '@vitest/expect@2.1.9': resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} - '@vitest/expect@3.2.4': - resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@vitest/expect@3.2.7': + resolution: {integrity: sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==} '@vitest/mocker@2.1.9': resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==} @@ -4681,8 +4808,8 @@ packages: vite: optional: true - '@vitest/mocker@3.2.4': - resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + '@vitest/mocker@3.2.7': + resolution: {integrity: sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 @@ -4695,8 +4822,8 @@ packages: '@vitest/pretty-format@2.1.9': resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} - '@vitest/pretty-format@3.2.4': - resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@vitest/pretty-format@3.2.7': + resolution: {integrity: sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==} '@vitest/runner@1.6.1': resolution: {integrity: sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA==} @@ -4704,8 +4831,8 @@ packages: '@vitest/runner@2.1.9': resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==} - '@vitest/runner@3.2.4': - resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + '@vitest/runner@3.2.7': + resolution: {integrity: sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==} '@vitest/snapshot@1.6.1': resolution: {integrity: sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ==} @@ -4713,8 +4840,8 @@ packages: '@vitest/snapshot@2.1.9': resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} - '@vitest/snapshot@3.2.4': - resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + '@vitest/snapshot@3.2.7': + resolution: {integrity: sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==} '@vitest/spy@1.6.1': resolution: {integrity: sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw==} @@ -4722,8 +4849,8 @@ packages: '@vitest/spy@2.1.9': resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==} - '@vitest/spy@3.2.4': - resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + '@vitest/spy@3.2.7': + resolution: {integrity: sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==} '@vitest/ui@2.1.9': resolution: {integrity: sha512-izzd2zmnk8Nl5ECYkW27328RbQ1nKvkm6Bb5DAaz1Gk59EbLkiCMa6OLT0NoaAYTjOFS6N+SMYW1nh4/9ljPiw==} @@ -4736,8 +4863,8 @@ packages: '@vitest/utils@2.1.9': resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} - '@vitest/utils@3.2.4': - resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@vitest/utils@3.2.7': + resolution: {integrity: sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==} '@volar/language-core@2.4.28': resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} @@ -4757,8 +4884,8 @@ packages: '@vue/compiler-vue2@2.7.16': resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} - '@vue/language-core@2.1.6': - resolution: {integrity: sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==} + '@vue/language-core@2.2.0': + resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -4927,15 +5054,18 @@ packages: ajv@6.15.0: resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - - ajv@8.13.0: - resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} ajv@8.20.0: resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + alien-signals@0.4.14: + resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==} + + anser@2.3.5: + resolution: {integrity: sha512-vcZjxvvVoxTeR5XBNJB38oTu/7eDCZlwdz32N1eNgpyPF7j/Z7Idf+CUwQOkKKpJ7RJyjxgLHCM7vdIK0iCNMQ==} + ansi-align@2.0.0: resolution: {integrity: sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==} @@ -4967,11 +5097,6 @@ packages: engines: {'0': node >= 0.8.0} hasBin: true - ansi-html@0.0.9: - resolution: {integrity: sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==} - engines: {'0': node >= 0.8.0} - hasBin: true - ansi-regex@3.0.1: resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} engines: {node: '>=4'} @@ -5193,8 +5318,8 @@ packages: atomically@2.1.1: resolution: {integrity: sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==} - autoprefixer@10.5.0: - resolution: {integrity: sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==} + autoprefixer@10.5.4: + resolution: {integrity: sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -5218,8 +5343,8 @@ packages: resolution: {integrity: sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==} deprecated: Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410 - axios@1.16.1: - resolution: {integrity: sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==} + axios@1.20.0: + resolution: {integrity: sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==} axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} @@ -5366,6 +5491,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + baseline-browser-mapping@2.11.20: + resolution: {integrity: sha512-H0ulySigv6icDJ1F7SjtdCD6PrhTpdYCmP0CactWy1+ekh0AFd0o1Wn5T8b+hnTmdBx19u9yhL6wvCylXMY7zw==} + engines: {node: '>=6.0.0'} + hasBin: true + basic-ftp@5.3.1: resolution: {integrity: sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==} engines: {node: '>=10.0.0'} @@ -5450,6 +5580,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.28.8: + resolution: {integrity: sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} @@ -5580,6 +5715,9 @@ packages: caniuse-lite@1.0.30001793: resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} + caniuse-lite@1.0.30001810: + resolution: {integrity: sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==} + capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} @@ -5681,6 +5819,10 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -5893,9 +6035,6 @@ packages: resolution: {integrity: sha512-0h+uSNtQGW3D98eQt3jJ8L06Fves8hncB4V/PKdw/Qb8Hnk19VaKuTr55UNRYiSoVa7WwrFls+rh3ux9agmkeQ==} engines: {node: '>= 12.0.0'} - common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} @@ -5923,9 +6062,6 @@ packages: resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} engines: {node: '>= 0.8.0'} - computeds@0.0.1: - resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -6479,6 +6615,10 @@ packages: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + diff@8.0.4: + resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} + engines: {node: '>=0.3.1'} + dingtalk-jsapi@2.15.6: resolution: {integrity: sha512-804mFz2AFV/H9ysmo7dLqMjSGOQgREsgQIuep+Xg+yNQeQtnUOYntElEzlB798Sj/691e4mMKz9mtQ7v9qdjuA==} @@ -6596,6 +6736,9 @@ packages: electron-to-chromium@1.5.364: resolution: {integrity: sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw==} + electron-to-chromium@1.5.420: + resolution: {integrity: sha512-2yD6XreGusOfNV+dUcvipJEXc3n/n7fgr7996aszTG+YY5E4mqM4tOq/3uhP129cazL9YHbVWSpc79ePotWtPA==} + emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} @@ -7062,9 +7205,10 @@ packages: deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true - eslint@9.39.4: - resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} + eslint@9.39.5: + resolution: {integrity: sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true peerDependencies: jiti: '*' @@ -7509,6 +7653,10 @@ packages: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} + form-data@4.0.6: + resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} + engines: {node: '>= 6'} + format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} @@ -7545,13 +7693,13 @@ packages: resolution: {integrity: sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==} engines: {node: '>=14.14'} + fs-extra@11.4.0: + resolution: {integrity: sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==} + engines: {node: '>=14.14'} + fs-extra@3.0.1: resolution: {integrity: sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==} - fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} - fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} @@ -7700,6 +7848,7 @@ packages: git-raw-commits@5.0.1: resolution: {integrity: sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==} engines: {node: '>=18'} + deprecated: Deprecated and no longer maintained. Use @conventional-changelog/git-client instead. hasBin: true git-repo-name@0.6.0: @@ -7999,6 +8148,10 @@ packages: resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} engines: {node: '>=12.0.0'} + highlight.js@11.12.0: + resolution: {integrity: sha512-nbfWpyRMcMrPMmDwJB+dhX/eiaPKtc2RB+0QZskqJ3WjRA/FDS0e9hZrx8EC/lbEv8gXy98FcDbNa/dspAaJMg==} + engines: {node: '>=12.0.0'} + highlightjs-vue@1.0.0: resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} @@ -8208,8 +8361,8 @@ packages: engines: {node: '>=6.9.0'} hasBin: true - immutable@4.3.8: - resolution: {integrity: sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==} + immutable@5.1.9: + resolution: {integrity: sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==} import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} @@ -8954,11 +9107,15 @@ packages: resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} hasBin: true + js-yaml@4.3.2: + resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==} + hasBin: true + jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - jscodeshift@17.3.0: - resolution: {integrity: sha512-LjFrGOIORqXBU+jwfC9nbkjmQfFldtMIoS6d9z2LG/lkmyNXsJAySPT+2SWXJEoE68/bCWcxKpXH37npftgmow==} + jscodeshift@17.4.0: + resolution: {integrity: sha512-i3ESKiiTsGynxzTg5BhsZViD0ai72/6SsI1efDZxG6/5KCoElsmquxtyhXK5lpEgoO7MTNpYkjFEdEL97SkBNg==} engines: {node: '>=16'} hasBin: true peerDependencies: @@ -9245,8 +9402,8 @@ packages: linguist-languages@7.31.2: resolution: {integrity: sha512-UQv5iuzEcGoYWdc/Ea2yqLiFbe8rQmIa5uD1FLwF5vBYmwbTvJlPJfHaIVtfYZTQf2wg7pzhxkwkGPP3q+v+EA==} - linkify-it@5.0.1: - resolution: {integrity: sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg==} + linkify-it@5.0.2: + resolution: {integrity: sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==} lint-staged@15.5.2: resolution: {integrity: sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==} @@ -9361,9 +9518,6 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - lodash@4.17.23: - resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} - lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} @@ -9401,8 +9555,8 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - lottie-react@2.4.1: - resolution: {integrity: sha512-LQrH7jlkigIIv++wIyrOYFLHSKQpEY4zehPicL9bQsrt1rnoKRYCYgpCUe5maqylNtacy58/sQDZTkwMcTRxZw==} + lottie-react@2.4.2: + resolution: {integrity: sha512-YkEEKN4E2Y2cFpPEwcvAXTAiRGy/P+0mJKYp9aDP1+r42xZgeXTZCf6No1csWRGmh4YQc3kbYtTq/b4c3IRCYg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -9453,10 +9607,6 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - lru-cache@7.18.3: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} @@ -9517,8 +9667,8 @@ packages: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} - markdown-it@14.2.0: - resolution: {integrity: sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==} + markdown-it@14.3.1: + resolution: {integrity: sha512-4Ej49aYTDFIQ+uBkfX8GBvJGccoARxxPep+7aWTs55ozbjQJpW9M26Fe53vnGgvLeVzva/amzjQQaQu9w0vMhA==} hasBin: true markdown-table@3.0.4: @@ -9833,13 +9983,14 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + minimatch@10.2.3: + resolution: {integrity: sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==} + engines: {node: 18 || 20 || >=22} + minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} - minimatch@3.0.8: - resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} - minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} @@ -9921,8 +10072,8 @@ packages: react-native: optional: true - mobx@6.15.4: - resolution: {integrity: sha512-do+2UsEKRVT70W/QqP2F2sju2x4p2xZo+5/azXqKjXgTk2jfmzsLjzwW0YI8CBEjy4ZUdU8EunXocXXwJdCrtw==} + mobx@6.16.1: + resolution: {integrity: sha512-syNcDdX3KT+Jq3je6eGjBhuc24Z68td2VG0zNFqRswaE433D9SNH5VRy/xrGbJsUixfppLLccXhAW9JSf6n+SQ==} moo-color@1.0.3: resolution: {integrity: sha512-i/+ZKXMDf6aqYtBhuOcej71YSlbjT3wCO/4H1j8rPvxDJEifdwgg5MaFyu6iYAT8GBZJg2z0dkgK4YMzvURALQ==} @@ -9977,6 +10128,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.18: + resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + napi-postinstall@0.3.4: resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -10021,6 +10177,9 @@ packages: no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + node-exports-info@1.6.0: resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==} engines: {node: '>= 0.4'} @@ -10044,6 +10203,10 @@ packages: resolution: {integrity: sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==} engines: {node: '>=18'} + node-releases@2.0.54: + resolution: {integrity: sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==} + engines: {node: '>=18'} + normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -10238,8 +10401,8 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} - oxc-parser@0.125.0: - resolution: {integrity: sha512-6M0gEDDVMGGy+Ckg/mlLh4PL87sfKRMlkQJTVTxdcEREwDa4usWjM9n4jC6Jxa5+nc3YlZTecUs4hHjoTVWKaw==} + oxc-parser@0.139.0: + resolution: {integrity: sha512-cf1TKZN+zc0lwqigeyXKzKVk5+vNRe99Or2+wVJsXLdlhJgC+gsIniYDfj/ZEBzCJ8Xm21ZG6YtMbR262CcS2w==} engines: {node: ^20.19.0 || >=22.12.0} p-cancelable@0.4.1: @@ -10645,8 +10808,8 @@ packages: peerDependencies: postcss: ^8 - postcss-import@16.1.1: - resolution: {integrity: sha512-2xVS1NCZAfjtVdvXiyegxzJ447GyqCeEI5V7ApgQVOWnros1p5lGNovJNapwPpMombyFBfqDwt7AD3n2l0KOfQ==} + postcss-import@16.2.0: + resolution: {integrity: sha512-0mQUGlSp87Zl70K58RNwQAN1WS9plFE6KWGui9nyK6ninduMyjW/Khaoy/BpBoFTBh7ndAvAKrSKVbwy6vd/BA==} engines: {node: '>=18.0.0'} peerDependencies: postcss: ^8.0.0 @@ -10900,8 +11063,8 @@ packages: resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} engines: {node: '>=6.0.0'} - postcss@8.5.15: - resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + postcss@8.5.28: + resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -10930,8 +11093,8 @@ packages: linguist-languages: ^7.27.0 prettier: ^3.3.2 - prettier@3.8.3: - resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} + prettier@3.9.6: + resolution: {integrity: sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==} engines: {node: '>=14'} hasBin: true @@ -11162,7 +11325,7 @@ packages: react-markdown@9.1.0: resolution: {integrity: sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==} peerDependencies: - '@types/react': ^18.2.57 + '@types/react': ^18.3.31 react: '>=18' react-reconciler@0.29.0: @@ -11171,23 +11334,23 @@ packages: peerDependencies: react: ^18.2.0 - react-refresh@0.14.2: - resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} - engines: {node: '>=0.10.0'} - react-refresh@0.17.0: resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} - react-router-dom@7.16.0: - resolution: {integrity: sha512-kMUAbimWB5FVbF4Bce4bJsiKJWLIUHq/mEG8+CFDnCSgltptBiG5nguducmsJeGKytlCvQud9Qhzpn49iduTlA==} + react-refresh@0.18.0: + resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} + engines: {node: '>=0.10.0'} + + react-router-dom@7.18.3: + resolution: {integrity: sha512-ytVbyBBM7vMfRCam25r0WMhSVSom909A8p+8m0/f1w853dz/xfFu6etAT2SEbVoSnI+ZoPRDqIsQXVT89gp7kg==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' react-dom: '>=18' - react-router@7.16.0: - resolution: {integrity: sha512-wArC8lVyJb3+jM9OpDyW6hLCizACWkvQR/sSGqSs+o5uEXEtGlqdZ4v8hENR3Jad6i+LRkK93q/+bQAcvl6V1A==} + react-router@7.18.3: + resolution: {integrity: sha512-gyXgtdr5uACJ5b1Q4udzjVV+tb/rlHIMJKuJ0e89R4Kzgz47z/rgP0dIKxktqIEUhDHluGTPJJH/wRha7CyqsA==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -11259,6 +11422,10 @@ packages: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} + readdirp@5.1.1: + resolution: {integrity: sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==} + engines: {node: '>= 20.19.0'} + recast@0.23.11: resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} engines: {node: '>= 4'} @@ -11570,8 +11737,8 @@ packages: engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true - rollup@4.60.4: - resolution: {integrity: sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==} + rollup@4.63.1: + resolution: {integrity: sha512-3Df9jsstwhccuEfmAMi9l8XUh/GOkVObmFTU7CCVBysEbcOZLl84jCtaAZMcPiMz2EGKsATzQcU+Xr3n/wU6cg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -11645,7 +11812,7 @@ packages: peerDependencies: '@rspack/core': 0.x || 1.x node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - sass: 1.77.6 + sass: ^1.103.1 sass-embedded: '*' webpack: ^5.0.0 peerDependenciesMeta: @@ -11660,9 +11827,9 @@ packages: webpack: optional: true - sass@1.77.6: - resolution: {integrity: sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==} - engines: {node: '>=14.0.0'} + sass@1.103.1: + resolution: {integrity: sha512-9icZURbP51S6S0QGoyaeqk9uB06GNWxsFYWfH5RgpFgqK5FA8tJcM3AdVxrZEVJ7dz+L87nG95gBKf4VuaMHGw==} + engines: {node: '>=20.19.0'} hasBin: true sax@1.2.4: @@ -11730,13 +11897,13 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} hasBin: true @@ -11745,6 +11912,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + send@0.19.2: resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} engines: {node: '>= 0.8.0'} @@ -11823,6 +11995,10 @@ packages: resolution: {integrity: sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==} engines: {node: '>= 0.4'} + shelljs@0.10.0: + resolution: {integrity: sha512-Jex+xw5Mg2qMZL3qnzXIfaxEtBaC4n7xifqaqtrZDdlheR70OGkydrPJWT0V1cA1k3nanC86x9FwAmQl6w3Klw==} + engines: {node: '>=18'} + shelljs@0.8.5: resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} engines: {node: '>=4'} @@ -12588,8 +12764,8 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-jest@29.4.11: - resolution: {integrity: sha512-IrFl7l9AuB/qrNw5quqvAv/hmKMb8dhWOH4jQOGo0Oq8tCeo1O86/iTFG1FaRimgUkF13l4PcepO8ATFT6Ns4g==} + ts-jest@29.4.12: + resolution: {integrity: sha512-Ov6ClY53Fflh6BGAnY2DlTq1hYDrTycz2PVTXBWFW2CU+9zrEqAp9fWdGXl42EXO5RLSFAcAZ2JFKbP+zBTFfw==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -12643,8 +12819,8 @@ packages: typescript: optional: true - tsx@4.22.4: - resolution: {integrity: sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==} + tsx@4.23.13: + resolution: {integrity: sha512-BL5MGkRln6aDYhb0xbQlEAGw743BaZYWdbWtdJOBriYJboKgUUYCadFp2/FpBBZquBC/ezNBn7wMMPx7FDZUDw==} engines: {node: '>=18.0.0'} hasBin: true @@ -12731,11 +12907,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - typescript@5.4.2: - resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} - engines: {node: '>=14.17'} - hasBin: true - typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} @@ -12874,6 +13045,10 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + unplugin-utils@0.3.2: + resolution: {integrity: sha512-xVToRh2CTmLk2HnEG7ac4rl1MJTT3RFkpS8B++/SnB0kXvuaavD+n3m/vrzyWQOdJNSZQACnbz01pnppbwV5BA==} + engines: {node: '>=20.19.0'} + unplugin@2.3.11: resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} engines: {node: '>=18.12.0'} @@ -12895,6 +13070,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.3.2: + resolution: {integrity: sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + update-notifier@2.5.0: resolution: {integrity: sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==} engines: {node: '>=4'} @@ -13030,9 +13211,8 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite-plugin-dts@4.2.1: - resolution: {integrity: sha512-/QlYvgUMiv8+ZTEerhNCYnYaZMM07cdlX6hQCR/w/g/nTh0tUXPoYwbT6SitizLJ9BybT1lnrcZgqheI6wromQ==} - engines: {node: ^14.18.0 || >=16.0.0} + vite-plugin-dts@4.5.4: + resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==} peerDependencies: typescript: '*' vite: '*' @@ -13054,7 +13234,7 @@ packages: '@types/node': ^18.0.0 || >=20.0.0 less: '*' lightningcss: ^1.21.0 - sass: 1.77.6 + sass: ^1.103.1 sass-embedded: '*' stylus: '*' sugarss: '*' @@ -13132,16 +13312,16 @@ packages: jsdom: optional: true - vitest@3.2.4: - resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} + vitest@3.2.7: + resolution: {integrity: sha512-KrxIJ62Fd89gfysR4WotlgZABiz2dqFPgqGzX7s+CwsqLFomRH7777ZcrOD6+WVAh7khPQP41A+BKbpcJFrdEg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.4 - '@vitest/ui': 3.2.4 + '@vitest/browser': 3.2.7 + '@vitest/ui': 3.2.7 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -13449,8 +13629,8 @@ packages: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + yargs@17.7.3: + resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} engines: {node: '>=12'} yauzl@2.10.0: @@ -13534,7 +13714,7 @@ snapshots: '@babel/core@7.29.7': dependencies: '@babel/code-frame': 7.29.7 - '@babel/generator': 7.29.7 + '@babel/generator': 7.29.8 '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) '@babel/helpers': 7.29.7 @@ -13559,10 +13739,10 @@ snapshots: eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/generator@7.29.7': + '@babel/generator@7.29.8': dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 @@ -13693,6 +13873,10 @@ snapshots: dependencies: '@babel/types': 7.29.7 + '@babel/parser@7.29.8': + dependencies: + '@babel/types': 7.29.8 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -14402,7 +14586,7 @@ snapshots: '@babel/traverse@7.29.7': dependencies: '@babel/code-frame': 7.29.7 - '@babel/generator': 7.29.7 + '@babel/generator': 7.29.8 '@babel/helper-globals': 7.29.7 '@babel/parser': 7.29.7 '@babel/template': 7.29.7 @@ -14416,6 +14600,11 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 + '@babel/types@7.29.8': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@bcoe/v8-coverage@0.2.3': {} '@bcoe/v8-coverage@1.0.2': {} @@ -14435,15 +14624,15 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@commitlint/cli@20.5.3(@types/node@20.19.41)(conventional-commits-parser@6.4.0)(typescript@5.9.3)': + '@commitlint/cli@20.5.3(@types/node@20.19.43)(conventional-commits-parser@6.4.0)(typescript@5.9.3)': dependencies: '@commitlint/format': 20.5.0 '@commitlint/lint': 20.5.3 - '@commitlint/load': 20.5.3(@types/node@20.19.41)(typescript@5.9.3) + '@commitlint/load': 20.5.3(@types/node@20.19.43)(typescript@5.9.3) '@commitlint/read': 20.5.0(conventional-commits-parser@6.4.0) '@commitlint/types': 20.5.0 tinyexec: 1.2.4 - yargs: 17.7.2 + yargs: 17.7.3 transitivePeerDependencies: - '@types/node' - conventional-commits-filter @@ -14484,14 +14673,14 @@ snapshots: '@commitlint/rules': 20.5.3 '@commitlint/types': 20.5.0 - '@commitlint/load@20.5.3(@types/node@20.19.41)(typescript@5.9.3)': + '@commitlint/load@20.5.3(@types/node@20.19.43)(typescript@5.9.3)': dependencies: '@commitlint/config-validator': 20.5.0 '@commitlint/execute-rule': 20.0.0 '@commitlint/resolve-extends': 20.5.3 '@commitlint/types': 20.5.0 cosmiconfig: 9.0.1(typescript@5.9.3) - cosmiconfig-typescript-loader: 6.3.0(@types/node@20.19.41)(cosmiconfig@9.0.1(typescript@5.9.3))(typescript@5.9.3) + cosmiconfig-typescript-loader: 6.3.0(@types/node@20.19.43)(cosmiconfig@9.0.1(typescript@5.9.3))(typescript@5.9.3) es-toolkit: 1.47.0 is-plain-obj: 4.1.0 picocolors: 1.1.1 @@ -14622,9 +14811,9 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/core@1.9.2': + '@emnapi/core@1.11.1': dependencies: - '@emnapi/wasi-threads': 1.2.1 + '@emnapi/wasi-threads': 1.2.2 tslib: 2.8.1 optional: true @@ -14633,7 +14822,7 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.9.2': + '@emnapi/runtime@1.11.1': dependencies: tslib: 2.8.1 optional: true @@ -14643,6 +14832,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 + optional: true + '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.9 @@ -14876,10 +15070,10 @@ snapshots: '@esbuild/win32-x64@0.28.0': optional: true - '@eslint-community/eslint-plugin-eslint-comments@4.7.2(eslint@9.39.4(jiti@2.7.0))': + '@eslint-community/eslint-plugin-eslint-comments@4.7.2(eslint@9.39.5(jiti@2.7.0))': dependencies: escape-string-regexp: 4.0.0 - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) ignore: 7.0.5 '@eslint-community/eslint-utils@4.9.1(eslint@8.41.0)': @@ -14892,18 +15086,18 @@ snapshots: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.7.0))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.5(jiti@2.7.0))': dependencies: - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/compat@1.4.1(eslint@9.39.4(jiti@2.7.0))': + '@eslint/compat@1.4.1(eslint@9.39.5(jiti@2.7.0))': dependencies: '@eslint/core': 0.17.0 optionalDependencies: - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) '@eslint/config-array@0.21.2': dependencies: @@ -14943,7 +15137,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/eslintrc@3.3.5': + '@eslint/eslintrc@3.3.7': dependencies: ajv: 6.15.0 debug: 4.4.3(supports-color@8.1.1) @@ -14951,7 +15145,7 @@ snapshots: globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.2.0 + js-yaml: 4.3.2 minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -14963,6 +15157,8 @@ snapshots: '@eslint/js@9.39.4': {} + '@eslint/js@9.39.5': {} + '@eslint/markdown@6.6.0': dependencies: '@eslint/core': 0.14.0 @@ -15062,249 +15258,135 @@ snapshots: '@inquirer/ansi@1.0.2': {} - '@inquirer/checkbox@4.3.2(@types/node@20.19.41)': + '@inquirer/checkbox@4.3.2(@types/node@20.19.43)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@20.19.41) + '@inquirer/core': 10.3.2(@types/node@20.19.43) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@20.19.41) + '@inquirer/type': 3.0.10(@types/node@20.19.43) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 20.19.41 - - '@inquirer/checkbox@4.3.2(@types/node@22.19.19)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@22.19.19) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.19) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.19.19 - - '@inquirer/confirm@5.1.21(@types/node@20.19.41)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@20.19.41) - '@inquirer/type': 3.0.10(@types/node@20.19.41) - optionalDependencies: - '@types/node': 20.19.41 - - '@inquirer/confirm@5.1.21(@types/node@22.19.19)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.19) - '@inquirer/type': 3.0.10(@types/node@22.19.19) - optionalDependencies: - '@types/node': 22.19.19 + '@types/node': 20.19.43 - '@inquirer/core@10.3.2(@types/node@20.19.41)': + '@inquirer/confirm@5.1.21(@types/node@20.19.43)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@20.19.41) - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 + '@inquirer/core': 10.3.2(@types/node@20.19.43) + '@inquirer/type': 3.0.10(@types/node@20.19.43) optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 20.19.43 - '@inquirer/core@10.3.2(@types/node@22.19.19)': + '@inquirer/core@10.3.2(@types/node@20.19.43)': dependencies: '@inquirer/ansi': 1.0.2 '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.19) + '@inquirer/type': 3.0.10(@types/node@20.19.43) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.19 - - '@inquirer/editor@4.2.23(@types/node@20.19.41)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@20.19.41) - '@inquirer/external-editor': 1.0.3(@types/node@20.19.41) - '@inquirer/type': 3.0.10(@types/node@20.19.41) - optionalDependencies: - '@types/node': 20.19.41 - - '@inquirer/editor@4.2.23(@types/node@22.19.19)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.19) - '@inquirer/external-editor': 1.0.3(@types/node@22.19.19) - '@inquirer/type': 3.0.10(@types/node@22.19.19) - optionalDependencies: - '@types/node': 22.19.19 + '@types/node': 20.19.43 - '@inquirer/expand@4.0.23(@types/node@20.19.41)': + '@inquirer/editor@4.2.23(@types/node@20.19.43)': dependencies: - '@inquirer/core': 10.3.2(@types/node@20.19.41) - '@inquirer/type': 3.0.10(@types/node@20.19.41) - yoctocolors-cjs: 2.1.3 + '@inquirer/core': 10.3.2(@types/node@20.19.43) + '@inquirer/external-editor': 1.0.3(@types/node@20.19.43) + '@inquirer/type': 3.0.10(@types/node@20.19.43) optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 20.19.43 - '@inquirer/expand@4.0.23(@types/node@22.19.19)': + '@inquirer/expand@4.0.23(@types/node@20.19.43)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.19) - '@inquirer/type': 3.0.10(@types/node@22.19.19) + '@inquirer/core': 10.3.2(@types/node@20.19.43) + '@inquirer/type': 3.0.10(@types/node@20.19.43) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.19 + '@types/node': 20.19.43 - '@inquirer/external-editor@1.0.3(@types/node@20.19.41)': + '@inquirer/external-editor@1.0.3(@types/node@20.19.43)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 20.19.43 - '@inquirer/external-editor@1.0.3(@types/node@22.19.19)': + '@inquirer/external-editor@1.0.3(@types/node@22.20.1)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 22.19.19 + '@types/node': 22.20.1 '@inquirer/figures@1.0.15': {} - '@inquirer/input@4.3.1(@types/node@20.19.41)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@20.19.41) - '@inquirer/type': 3.0.10(@types/node@20.19.41) - optionalDependencies: - '@types/node': 20.19.41 - - '@inquirer/input@4.3.1(@types/node@22.19.19)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.19) - '@inquirer/type': 3.0.10(@types/node@22.19.19) - optionalDependencies: - '@types/node': 22.19.19 - - '@inquirer/number@3.0.23(@types/node@20.19.41)': + '@inquirer/input@4.3.1(@types/node@20.19.43)': dependencies: - '@inquirer/core': 10.3.2(@types/node@20.19.41) - '@inquirer/type': 3.0.10(@types/node@20.19.41) + '@inquirer/core': 10.3.2(@types/node@20.19.43) + '@inquirer/type': 3.0.10(@types/node@20.19.43) optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 20.19.43 - '@inquirer/number@3.0.23(@types/node@22.19.19)': + '@inquirer/number@3.0.23(@types/node@20.19.43)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.19) - '@inquirer/type': 3.0.10(@types/node@22.19.19) + '@inquirer/core': 10.3.2(@types/node@20.19.43) + '@inquirer/type': 3.0.10(@types/node@20.19.43) optionalDependencies: - '@types/node': 22.19.19 + '@types/node': 20.19.43 - '@inquirer/password@4.0.23(@types/node@20.19.41)': + '@inquirer/password@4.0.23(@types/node@20.19.43)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@20.19.41) - '@inquirer/type': 3.0.10(@types/node@20.19.41) + '@inquirer/core': 10.3.2(@types/node@20.19.43) + '@inquirer/type': 3.0.10(@types/node@20.19.43) optionalDependencies: - '@types/node': 20.19.41 - - '@inquirer/password@4.0.23(@types/node@22.19.19)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@22.19.19) - '@inquirer/type': 3.0.10(@types/node@22.19.19) - optionalDependencies: - '@types/node': 22.19.19 - - '@inquirer/prompts@7.10.1(@types/node@20.19.41)': - dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@20.19.41) - '@inquirer/confirm': 5.1.21(@types/node@20.19.41) - '@inquirer/editor': 4.2.23(@types/node@20.19.41) - '@inquirer/expand': 4.0.23(@types/node@20.19.41) - '@inquirer/input': 4.3.1(@types/node@20.19.41) - '@inquirer/number': 3.0.23(@types/node@20.19.41) - '@inquirer/password': 4.0.23(@types/node@20.19.41) - '@inquirer/rawlist': 4.1.11(@types/node@20.19.41) - '@inquirer/search': 3.2.2(@types/node@20.19.41) - '@inquirer/select': 4.4.2(@types/node@20.19.41) + '@types/node': 20.19.43 + + '@inquirer/prompts@7.10.1(@types/node@20.19.43)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@20.19.43) + '@inquirer/confirm': 5.1.21(@types/node@20.19.43) + '@inquirer/editor': 4.2.23(@types/node@20.19.43) + '@inquirer/expand': 4.0.23(@types/node@20.19.43) + '@inquirer/input': 4.3.1(@types/node@20.19.43) + '@inquirer/number': 3.0.23(@types/node@20.19.43) + '@inquirer/password': 4.0.23(@types/node@20.19.43) + '@inquirer/rawlist': 4.1.11(@types/node@20.19.43) + '@inquirer/search': 3.2.2(@types/node@20.19.43) + '@inquirer/select': 4.4.2(@types/node@20.19.43) optionalDependencies: - '@types/node': 20.19.41 - - '@inquirer/prompts@7.10.1(@types/node@22.19.19)': - dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@22.19.19) - '@inquirer/confirm': 5.1.21(@types/node@22.19.19) - '@inquirer/editor': 4.2.23(@types/node@22.19.19) - '@inquirer/expand': 4.0.23(@types/node@22.19.19) - '@inquirer/input': 4.3.1(@types/node@22.19.19) - '@inquirer/number': 3.0.23(@types/node@22.19.19) - '@inquirer/password': 4.0.23(@types/node@22.19.19) - '@inquirer/rawlist': 4.1.11(@types/node@22.19.19) - '@inquirer/search': 3.2.2(@types/node@22.19.19) - '@inquirer/select': 4.4.2(@types/node@22.19.19) - optionalDependencies: - '@types/node': 22.19.19 + '@types/node': 20.19.43 - '@inquirer/rawlist@4.1.11(@types/node@20.19.41)': + '@inquirer/rawlist@4.1.11(@types/node@20.19.43)': dependencies: - '@inquirer/core': 10.3.2(@types/node@20.19.41) - '@inquirer/type': 3.0.10(@types/node@20.19.41) + '@inquirer/core': 10.3.2(@types/node@20.19.43) + '@inquirer/type': 3.0.10(@types/node@20.19.43) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 20.19.43 - '@inquirer/rawlist@4.1.11(@types/node@22.19.19)': + '@inquirer/search@3.2.2(@types/node@20.19.43)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.19) - '@inquirer/type': 3.0.10(@types/node@22.19.19) + '@inquirer/core': 10.3.2(@types/node@20.19.43) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@20.19.43) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.19 + '@types/node': 20.19.43 - '@inquirer/search@3.2.2(@types/node@20.19.41)': + '@inquirer/select@4.4.2(@types/node@20.19.43)': dependencies: - '@inquirer/core': 10.3.2(@types/node@20.19.41) + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@20.19.43) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@20.19.41) + '@inquirer/type': 3.0.10(@types/node@20.19.43) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 20.19.43 - '@inquirer/search@3.2.2(@types/node@22.19.19)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.19) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.19) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.19.19 - - '@inquirer/select@4.4.2(@types/node@20.19.41)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@20.19.41) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@20.19.41) - yoctocolors-cjs: 2.1.3 + '@inquirer/type@3.0.10(@types/node@20.19.43)': optionalDependencies: - '@types/node': 20.19.41 - - '@inquirer/select@4.4.2(@types/node@22.19.19)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@22.19.19) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.19) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 22.19.19 - - '@inquirer/type@3.0.10(@types/node@20.19.41)': - optionalDependencies: - '@types/node': 20.19.41 - - '@inquirer/type@3.0.10(@types/node@22.19.19)': - optionalDependencies: - '@types/node': 22.19.19 + '@types/node': 20.19.43 '@isaacs/cliui@8.0.2': dependencies: @@ -15330,7 +15412,7 @@ snapshots: '@jest/console@30.4.1': dependencies: '@jest/types': 30.4.1 - '@types/node': 22.19.19 + '@types/node': 18.19.130 chalk: 4.1.2 jest-message-util: 30.4.1 jest-util: 30.4.1 @@ -15344,7 +15426,7 @@ snapshots: '@jest/test-result': 30.4.1 '@jest/transform': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 22.19.19 + '@types/node': 18.19.130 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 4.4.0 @@ -15352,7 +15434,7 @@ snapshots: fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 jest-changed-files: 30.4.1 - jest-config: 30.4.2(@types/node@22.19.19) + jest-config: 30.4.2(@types/node@18.19.130) jest-haste-map: 30.4.1 jest-message-util: 30.4.1 jest-regex-util: 30.4.0 @@ -15378,7 +15460,7 @@ snapshots: dependencies: '@jest/fake-timers': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 22.19.19 + '@types/node': 18.19.130 jest-mock: 30.4.1 '@jest/expect-utils@30.4.1': @@ -15396,7 +15478,7 @@ snapshots: dependencies: '@jest/types': 30.4.1 '@sinonjs/fake-timers': 15.4.0 - '@types/node': 22.19.19 + '@types/node': 18.19.130 jest-message-util: 30.4.1 jest-mock: 30.4.1 jest-util: 30.4.1 @@ -15414,7 +15496,7 @@ snapshots: '@jest/pattern@30.4.0': dependencies: - '@types/node': 22.19.19 + '@types/node': 18.19.130 jest-regex-util: 30.4.0 '@jest/reporters@30.4.1': @@ -15425,7 +15507,7 @@ snapshots: '@jest/transform': 30.4.1 '@jest/types': 30.4.1 '@jridgewell/trace-mapping': 0.3.31 - '@types/node': 22.19.19 + '@types/node': 18.19.130 chalk: 4.1.2 collect-v8-coverage: 1.0.3 exit-x: 0.2.2 @@ -15503,7 +15585,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/yargs': 15.0.20 chalk: 4.1.2 @@ -15512,7 +15594,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -15522,7 +15604,7 @@ snapshots: '@jest/schemas': 30.4.1 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -15607,88 +15689,88 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@3.1.1(@types/react@18.3.29)(react@18.3.1)': + '@mdx-js/react@3.1.1(@types/react@18.3.31)(react@18.3.1)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.3.29 + '@types/react': 18.3.31 react: 18.3.1 - '@mdx-js/rollup@3.1.1(rollup@4.60.4)': + '@mdx-js/rollup@3.1.1(rollup@4.63.1)': dependencies: '@mdx-js/mdx': 3.1.1 - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) - rollup: 4.60.4 + '@rollup/pluginutils': 5.4.0(rollup@4.63.1) + rollup: 4.63.1 source-map: 0.7.6 vfile: 6.0.3 transitivePeerDependencies: - supports-color - '@microsoft/api-extractor-model@7.29.6(@types/node@20.19.41)': + '@microsoft/api-extractor-model@7.33.11(@types/node@20.19.43)': dependencies: - '@microsoft/tsdoc': 0.15.1 - '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.7.0(@types/node@20.19.41) + '@microsoft/tsdoc': 0.16.0 + '@microsoft/tsdoc-config': 0.18.1 + '@rushstack/node-core-library': 5.24.0(@types/node@20.19.43) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor-model@7.29.6(@types/node@22.19.19)': + '@microsoft/api-extractor-model@7.33.11(@types/node@22.20.1)': dependencies: - '@microsoft/tsdoc': 0.15.1 - '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.7.0(@types/node@22.19.19) + '@microsoft/tsdoc': 0.16.0 + '@microsoft/tsdoc-config': 0.18.1 + '@rushstack/node-core-library': 5.24.0(@types/node@22.20.1) transitivePeerDependencies: - '@types/node' optional: true - '@microsoft/api-extractor@7.47.7(@types/node@20.19.41)': - dependencies: - '@microsoft/api-extractor-model': 7.29.6(@types/node@20.19.41) - '@microsoft/tsdoc': 0.15.1 - '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.7.0(@types/node@20.19.41) - '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.14.0(@types/node@20.19.41) - '@rushstack/ts-command-line': 4.22.6(@types/node@20.19.41) - lodash: 4.17.23 - minimatch: 3.0.8 + '@microsoft/api-extractor@7.59.0(@types/node@20.19.43)': + dependencies: + '@microsoft/api-extractor-model': 7.33.11(@types/node@20.19.43) + '@microsoft/tsdoc': 0.16.0 + '@microsoft/tsdoc-config': 0.18.1 + '@rushstack/node-core-library': 5.24.0(@types/node@20.19.43) + '@rushstack/rig-package': 0.7.3 + '@rushstack/terminal': 0.24.3(@types/node@20.19.43) + '@rushstack/ts-command-line': 5.3.13(@types/node@20.19.43) + diff: 8.0.4 + minimatch: 10.2.3 resolve: 1.22.12 - semver: 7.5.4 + semver: 7.7.4 source-map: 0.6.1 - typescript: 5.4.2 + typescript: 5.9.3 transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.47.7(@types/node@22.19.19)': - dependencies: - '@microsoft/api-extractor-model': 7.29.6(@types/node@22.19.19) - '@microsoft/tsdoc': 0.15.1 - '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.7.0(@types/node@22.19.19) - '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.14.0(@types/node@22.19.19) - '@rushstack/ts-command-line': 4.22.6(@types/node@22.19.19) - lodash: 4.17.23 - minimatch: 3.0.8 + '@microsoft/api-extractor@7.59.0(@types/node@22.20.1)': + dependencies: + '@microsoft/api-extractor-model': 7.33.11(@types/node@22.20.1) + '@microsoft/tsdoc': 0.16.0 + '@microsoft/tsdoc-config': 0.18.1 + '@rushstack/node-core-library': 5.24.0(@types/node@22.20.1) + '@rushstack/rig-package': 0.7.3 + '@rushstack/terminal': 0.24.3(@types/node@22.20.1) + '@rushstack/ts-command-line': 5.3.13(@types/node@22.20.1) + diff: 8.0.4 + minimatch: 10.2.3 resolve: 1.22.12 - semver: 7.5.4 + semver: 7.7.4 source-map: 0.6.1 - typescript: 5.4.2 + typescript: 5.9.3 transitivePeerDependencies: - '@types/node' optional: true - '@microsoft/tsdoc-config@0.17.1': + '@microsoft/tsdoc-config@0.18.1': dependencies: - '@microsoft/tsdoc': 0.15.1 - ajv: 8.12.0 + '@microsoft/tsdoc': 0.16.0 + ajv: 8.18.0 jju: 1.4.0 resolve: 1.22.12 - '@microsoft/tsdoc@0.15.1': {} + '@microsoft/tsdoc@0.16.0': {} '@mixmark-io/domino@2.2.0': {} - '@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)': + '@modelcontextprotocol/sdk@1.30.0(zod@4.4.3)': dependencies: '@hono/node-server': 1.19.14(hono@4.12.30) ajv: 8.20.0 @@ -15710,6 +15792,9 @@ snapshots: transitivePeerDependencies: - supports-color + '@napi-rs/lzma-linux-x64-gnu@1.5.1': + optional: true + '@napi-rs/triples@1.2.0': {} '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': @@ -15719,11 +15804,11 @@ snapshots: '@tybys/wasm-util': 0.10.2 optional: true - '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - '@emnapi/core': 1.9.2 - '@emnapi/runtime': 1.9.2 - '@tybys/wasm-util': 0.10.2 + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.3 optional: true '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': @@ -15745,11 +15830,11 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@nutui/icons-react-taro@3.0.2-beta.6': {} + '@nutui/icons-react-taro@3.0.2': {} '@nutui/icons-react@1.0.5': {} - '@nutui/icons-react@3.0.2-beta.6': {} + '@nutui/icons-react@3.0.2': {} '@nutui/jdesign-icons-react-taro@1.0.6-beta.2': {} @@ -15772,16 +15857,16 @@ snapshots: transitivePeerDependencies: - react-dom - '@nutui/replace-icons@1.0.3(@types/node@22.19.19)(@vitest/ui@2.1.9(vitest@3.2.4))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)': + '@nutui/replace-icons@1.0.3(@types/node@22.20.1)(@vitest/ui@2.1.9(vitest@3.2.7))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)': dependencies: '@babel/cli': 7.29.7(@babel/core@7.29.7) '@babel/core': 7.29.7 - '@babel/generator': 7.29.7 + '@babel/generator': 7.29.8 '@babel/preset-env': 7.29.7(@babel/core@7.29.7) '@babel/preset-react': 7.29.7(@babel/core@7.29.7) '@types/babel__core': 7.20.5 '@types/babel__generator': 7.27.0 - vitest: 1.6.1(@types/node@22.19.19)(@vitest/ui@2.1.9(vitest@3.2.4))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vitest: 1.6.1(@types/node@22.20.1)(@vitest/ui@2.1.9(vitest@3.2.7))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) transitivePeerDependencies: - '@edge-runtime/vm' - '@types/node' @@ -15868,74 +15953,131 @@ snapshots: dependencies: '@octokit/openapi-types': 25.1.0 - '@oxc-parser/binding-android-arm-eabi@0.125.0': + '@oxc-parser/binding-android-arm-eabi@0.139.0': optional: true - '@oxc-parser/binding-android-arm64@0.125.0': + '@oxc-parser/binding-android-arm64@0.139.0': optional: true - '@oxc-parser/binding-darwin-arm64@0.125.0': + '@oxc-parser/binding-darwin-arm64@0.139.0': optional: true - '@oxc-parser/binding-darwin-x64@0.125.0': + '@oxc-parser/binding-darwin-x64@0.139.0': optional: true - '@oxc-parser/binding-freebsd-x64@0.125.0': + '@oxc-parser/binding-freebsd-x64@0.139.0': optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.125.0': + '@oxc-parser/binding-linux-arm-gnueabihf@0.139.0': optional: true - '@oxc-parser/binding-linux-arm-musleabihf@0.125.0': + '@oxc-parser/binding-linux-arm-musleabihf@0.139.0': optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.125.0': + '@oxc-parser/binding-linux-arm64-gnu@0.139.0': optional: true - '@oxc-parser/binding-linux-arm64-musl@0.125.0': + '@oxc-parser/binding-linux-arm64-musl@0.139.0': optional: true - '@oxc-parser/binding-linux-ppc64-gnu@0.125.0': + '@oxc-parser/binding-linux-ppc64-gnu@0.139.0': optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.125.0': + '@oxc-parser/binding-linux-riscv64-gnu@0.139.0': optional: true - '@oxc-parser/binding-linux-riscv64-musl@0.125.0': + '@oxc-parser/binding-linux-riscv64-musl@0.139.0': optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.125.0': + '@oxc-parser/binding-linux-s390x-gnu@0.139.0': optional: true - '@oxc-parser/binding-linux-x64-gnu@0.125.0': + '@oxc-parser/binding-linux-x64-gnu@0.139.0': optional: true - '@oxc-parser/binding-linux-x64-musl@0.125.0': + '@oxc-parser/binding-linux-x64-musl@0.139.0': optional: true - '@oxc-parser/binding-openharmony-arm64@0.125.0': + '@oxc-parser/binding-openharmony-arm64@0.139.0': optional: true - '@oxc-parser/binding-wasm32-wasi@0.125.0': + '@oxc-parser/binding-wasm32-wasi@0.139.0': dependencies: - '@emnapi/core': 1.9.2 - '@emnapi/runtime': 1.9.2 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optional: true - '@oxc-parser/binding-win32-arm64-msvc@0.125.0': + '@oxc-parser/binding-win32-arm64-msvc@0.139.0': optional: true - '@oxc-parser/binding-win32-ia32-msvc@0.125.0': + '@oxc-parser/binding-win32-ia32-msvc@0.139.0': optional: true - '@oxc-parser/binding-win32-x64-msvc@0.125.0': + '@oxc-parser/binding-win32-x64-msvc@0.139.0': optional: true - '@oxc-project/types@0.125.0': {} + '@oxc-project/types@0.139.0': {} '@package-json/types@0.0.12': {} + '@parcel/watcher-android-arm64@2.6.0': + optional: true + + '@parcel/watcher-darwin-arm64@2.6.0': + optional: true + + '@parcel/watcher-darwin-x64@2.6.0': + optional: true + + '@parcel/watcher-freebsd-x64@2.6.0': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.6.0': + optional: true + + '@parcel/watcher-linux-arm-musl@2.6.0': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.6.0': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.6.0': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.6.0': + optional: true + + '@parcel/watcher-linux-x64-musl@2.6.0': + optional: true + + '@parcel/watcher-win32-arm64@2.6.0': + optional: true + + '@parcel/watcher-win32-x64@2.6.0': + optional: true + + '@parcel/watcher@2.6.0': + dependencies: + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.4 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.6.0 + '@parcel/watcher-darwin-arm64': 2.6.0 + '@parcel/watcher-darwin-x64': 2.6.0 + '@parcel/watcher-freebsd-x64': 2.6.0 + '@parcel/watcher-linux-arm-glibc': 2.6.0 + '@parcel/watcher-linux-arm-musl': 2.6.0 + '@parcel/watcher-linux-arm64-glibc': 2.6.0 + '@parcel/watcher-linux-arm64-musl': 2.6.0 + '@parcel/watcher-linux-x64-glibc': 2.6.0 + '@parcel/watcher-linux-x64-musl': 2.6.0 + '@parcel/watcher-win32-arm64': 2.6.0 + '@parcel/watcher-win32-x64': 2.6.0 + optional: true + '@pkgjs/parseargs@0.11.0': optional: true @@ -15943,37 +16085,33 @@ snapshots: '@pkgr/core@0.3.6': {} - '@pmmmwh/react-refresh-webpack-plugin@0.5.10(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@pmmmwh/react-refresh-webpack-plugin@0.6.2(react-refresh@0.18.0)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: - ansi-html-community: 0.0.8 - common-path-prefix: 3.0.0 + anser: 2.3.5 core-js-pure: 3.49.0 error-stack-parser: 2.1.4 - find-up: 5.0.0 html-entities: 2.6.0 - loader-utils: 2.0.4 - react-refresh: 0.14.2 - schema-utils: 3.3.0 + react-refresh: 0.18.0 + schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) optionalDependencies: - type-fest: 2.19.0 - webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + type-fest: 4.41.0 + webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) - '@pmmmwh/react-refresh-webpack-plugin@0.5.17(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@pmmmwh/react-refresh-webpack-plugin@0.6.2(react-refresh@0.18.0)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: - ansi-html: 0.0.9 + anser: 2.3.5 core-js-pure: 3.49.0 error-stack-parser: 2.1.4 html-entities: 2.6.0 - loader-utils: 2.0.4 - react-refresh: 0.14.2 + react-refresh: 0.18.0 schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) optionalDependencies: type-fest: 4.41.0 - webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@pnpm/config.env-replace@1.1.0': {} @@ -15989,9 +16127,9 @@ snapshots: '@polka/url@1.0.0-next.29': {} - '@prettier/plugin-oxc@0.1.4': + '@prettier/plugin-oxc@0.2.2': dependencies: - oxc-parser: 0.125.0 + oxc-parser: 0.139.0 '@react-spring/animated@9.6.1(react@18.3.1)': dependencies: @@ -16052,27 +16190,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@rollup/plugin-babel@6.1.0(@babel/core@7.29.7)(@types/babel__core@7.20.5)(rollup@4.60.4)': + '@rollup/plugin-babel@6.1.0(@babel/core@7.29.7)(@types/babel__core@7.20.5)(rollup@4.63.1)': dependencies: '@babel/core': 7.29.7 '@babel/helper-module-imports': 7.29.7 - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) + '@rollup/pluginutils': 5.4.0(rollup@4.63.1) optionalDependencies: '@types/babel__core': 7.20.5 - rollup: 4.60.4 + rollup: 4.63.1 transitivePeerDependencies: - supports-color - '@rollup/plugin-commonjs@26.0.3(rollup@4.60.4)': + '@rollup/plugin-commonjs@26.0.3(rollup@4.63.1)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) + '@rollup/pluginutils': 5.4.0(rollup@4.63.1) commondir: 1.0.1 estree-walker: 2.0.2 glob: 10.5.0 is-reference: 1.2.1 magic-string: 0.30.21 optionalDependencies: - rollup: 4.60.4 + rollup: 4.63.1 '@rollup/plugin-inject@5.0.5(rollup@3.30.0)': dependencies: @@ -16082,15 +16220,15 @@ snapshots: optionalDependencies: rollup: 3.30.0 - '@rollup/plugin-node-resolve@16.0.0(rollup@4.60.4)': + '@rollup/plugin-node-resolve@16.0.3(rollup@4.63.1)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) + '@rollup/pluginutils': 5.4.0(rollup@4.63.1) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.12 optionalDependencies: - rollup: 4.60.4 + rollup: 4.63.1 '@rollup/plugin-terser@0.4.4(rollup@3.30.0)': dependencies: @@ -16100,13 +16238,13 @@ snapshots: optionalDependencies: rollup: 3.30.0 - '@rollup/plugin-typescript@11.1.6(rollup@4.60.4)(tslib@2.8.1)(typescript@5.9.3)': + '@rollup/plugin-typescript@11.1.6(rollup@4.63.1)(tslib@2.8.1)(typescript@5.9.3)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) + '@rollup/pluginutils': 5.4.0(rollup@4.63.1) resolve: 1.22.12 typescript: 5.9.3 optionalDependencies: - rollup: 4.60.4 + rollup: 4.63.1 tslib: 2.8.1 '@rollup/pluginutils@5.4.0(rollup@2.80.0)': @@ -16125,150 +16263,161 @@ snapshots: optionalDependencies: rollup: 3.30.0 - '@rollup/pluginutils@5.4.0(rollup@4.60.4)': + '@rollup/pluginutils@5.4.0(rollup@4.63.1)': dependencies: '@types/estree': 1.0.9 estree-walker: 2.0.2 picomatch: 4.0.4 optionalDependencies: - rollup: 4.60.4 + rollup: 4.63.1 - '@rollup/rollup-android-arm-eabi@4.60.4': + '@rollup/rollup-android-arm-eabi@4.63.1': optional: true - '@rollup/rollup-android-arm64@4.60.4': + '@rollup/rollup-android-arm64@4.63.1': optional: true - '@rollup/rollup-darwin-arm64@4.60.4': + '@rollup/rollup-darwin-arm64@4.63.1': optional: true - '@rollup/rollup-darwin-x64@4.60.4': + '@rollup/rollup-darwin-x64@4.63.1': optional: true - '@rollup/rollup-freebsd-arm64@4.60.4': + '@rollup/rollup-freebsd-arm64@4.63.1': optional: true - '@rollup/rollup-freebsd-x64@4.60.4': + '@rollup/rollup-freebsd-x64@4.63.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.60.4': + '@rollup/rollup-linux-arm-gnueabihf@4.63.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.60.4': + '@rollup/rollup-linux-arm-musleabihf@4.63.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.60.4': + '@rollup/rollup-linux-arm64-gnu@4.63.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.60.4': + '@rollup/rollup-linux-arm64-musl@4.63.1': optional: true - '@rollup/rollup-linux-loong64-gnu@4.60.4': + '@rollup/rollup-linux-loong64-gnu@4.63.1': optional: true - '@rollup/rollup-linux-loong64-musl@4.60.4': + '@rollup/rollup-linux-loong64-musl@4.63.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.60.4': + '@rollup/rollup-linux-ppc64-gnu@4.63.1': optional: true - '@rollup/rollup-linux-ppc64-musl@4.60.4': + '@rollup/rollup-linux-ppc64-musl@4.63.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.60.4': + '@rollup/rollup-linux-riscv64-gnu@4.63.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.60.4': + '@rollup/rollup-linux-riscv64-musl@4.63.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.60.4': + '@rollup/rollup-linux-s390x-gnu@4.63.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.60.4': + '@rollup/rollup-linux-x64-gnu@4.63.1': optional: true - '@rollup/rollup-linux-x64-musl@4.60.4': + '@rollup/rollup-linux-x64-musl@4.63.1': optional: true - '@rollup/rollup-openbsd-x64@4.60.4': + '@rollup/rollup-openbsd-x64@4.63.1': optional: true - '@rollup/rollup-openharmony-arm64@4.60.4': + '@rollup/rollup-openharmony-arm64@4.63.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.60.4': + '@rollup/rollup-win32-arm64-msvc@4.63.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.60.4': + '@rollup/rollup-win32-ia32-msvc@4.63.1': optional: true - '@rollup/rollup-win32-x64-gnu@4.60.4': + '@rollup/rollup-win32-x64-gnu@4.63.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.60.4': + '@rollup/rollup-win32-x64-msvc@4.63.1': optional: true '@rtsao/scc@1.1.0': {} - '@rushstack/node-core-library@5.7.0(@types/node@20.19.41)': + '@rushstack/node-core-library@5.24.0(@types/node@20.19.43)': dependencies: - ajv: 8.13.0 - ajv-draft-04: 1.0.0(ajv@8.13.0) - ajv-formats: 3.0.1(ajv@8.13.0) - fs-extra: 7.0.1 + ajv: 8.20.0 + ajv-draft-04: 1.0.0(ajv@8.20.0) + ajv-formats: 3.0.1(ajv@8.20.0) + fs-extra: 11.3.5 import-lazy: 4.0.0 jju: 1.4.0 resolve: 1.22.12 - semver: 7.5.4 + semver: 7.7.4 optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 20.19.43 - '@rushstack/node-core-library@5.7.0(@types/node@22.19.19)': + '@rushstack/node-core-library@5.24.0(@types/node@22.20.1)': dependencies: - ajv: 8.13.0 - ajv-draft-04: 1.0.0(ajv@8.13.0) - ajv-formats: 3.0.1(ajv@8.13.0) - fs-extra: 7.0.1 + ajv: 8.20.0 + ajv-draft-04: 1.0.0(ajv@8.20.0) + ajv-formats: 3.0.1(ajv@8.20.0) + fs-extra: 11.3.5 import-lazy: 4.0.0 jju: 1.4.0 resolve: 1.22.12 - semver: 7.5.4 + semver: 7.7.4 + optionalDependencies: + '@types/node': 22.20.1 + optional: true + + '@rushstack/problem-matcher@0.2.1(@types/node@20.19.43)': optionalDependencies: - '@types/node': 22.19.19 + '@types/node': 20.19.43 + + '@rushstack/problem-matcher@0.2.1(@types/node@22.20.1)': + optionalDependencies: + '@types/node': 22.20.1 optional: true - '@rushstack/rig-package@0.5.3': + '@rushstack/rig-package@0.7.3': dependencies: + jju: 1.4.0 resolve: 1.22.12 - strip-json-comments: 3.1.1 - '@rushstack/terminal@0.14.0(@types/node@20.19.41)': + '@rushstack/terminal@0.24.3(@types/node@20.19.43)': dependencies: - '@rushstack/node-core-library': 5.7.0(@types/node@20.19.41) + '@rushstack/node-core-library': 5.24.0(@types/node@20.19.43) + '@rushstack/problem-matcher': 0.2.1(@types/node@20.19.43) supports-color: 8.1.1 optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 20.19.43 - '@rushstack/terminal@0.14.0(@types/node@22.19.19)': + '@rushstack/terminal@0.24.3(@types/node@22.20.1)': dependencies: - '@rushstack/node-core-library': 5.7.0(@types/node@22.19.19) + '@rushstack/node-core-library': 5.24.0(@types/node@22.20.1) + '@rushstack/problem-matcher': 0.2.1(@types/node@22.20.1) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.19.19 + '@types/node': 22.20.1 optional: true - '@rushstack/ts-command-line@4.22.6(@types/node@20.19.41)': + '@rushstack/ts-command-line@5.3.13(@types/node@20.19.43)': dependencies: - '@rushstack/terminal': 0.14.0(@types/node@20.19.41) + '@rushstack/terminal': 0.24.3(@types/node@20.19.43) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 transitivePeerDependencies: - '@types/node' - '@rushstack/ts-command-line@4.22.6(@types/node@22.19.19)': + '@rushstack/ts-command-line@5.3.13(@types/node@22.20.1)': dependencies: - '@rushstack/terminal': 0.14.0(@types/node@22.19.19) + '@rushstack/terminal': 0.24.3(@types/node@22.20.1) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -16302,7 +16451,7 @@ snapshots: '@shikijs/markdown-it@3.23.0': dependencies: - markdown-it: 14.2.0 + markdown-it: 14.3.1 shiki: 3.23.0 '@shikijs/themes@3.23.0': @@ -16360,89 +16509,89 @@ snapshots: '@stencil/core@2.22.3': {} - '@swc/core-darwin-arm64@1.15.40': + '@swc/core-darwin-arm64@1.16.1': optional: true '@swc/core-darwin-arm64@1.3.96': optional: true - '@swc/core-darwin-x64@1.15.40': + '@swc/core-darwin-x64@1.16.1': optional: true '@swc/core-darwin-x64@1.3.96': optional: true - '@swc/core-linux-arm-gnueabihf@1.15.40': + '@swc/core-linux-arm-gnueabihf@1.16.1': optional: true '@swc/core-linux-arm-gnueabihf@1.3.96': optional: true - '@swc/core-linux-arm64-gnu@1.15.40': + '@swc/core-linux-arm64-gnu@1.16.1': optional: true '@swc/core-linux-arm64-gnu@1.3.96': optional: true - '@swc/core-linux-arm64-musl@1.15.40': + '@swc/core-linux-arm64-musl@1.16.1': optional: true '@swc/core-linux-arm64-musl@1.3.96': optional: true - '@swc/core-linux-ppc64-gnu@1.15.40': + '@swc/core-linux-ppc64-gnu@1.16.1': optional: true - '@swc/core-linux-s390x-gnu@1.15.40': + '@swc/core-linux-s390x-gnu@1.16.1': optional: true - '@swc/core-linux-x64-gnu@1.15.40': + '@swc/core-linux-x64-gnu@1.16.1': optional: true '@swc/core-linux-x64-gnu@1.3.96': optional: true - '@swc/core-linux-x64-musl@1.15.40': + '@swc/core-linux-x64-musl@1.16.1': optional: true '@swc/core-linux-x64-musl@1.3.96': optional: true - '@swc/core-win32-arm64-msvc@1.15.40': + '@swc/core-win32-arm64-msvc@1.16.1': optional: true '@swc/core-win32-arm64-msvc@1.3.96': optional: true - '@swc/core-win32-ia32-msvc@1.15.40': + '@swc/core-win32-ia32-msvc@1.16.1': optional: true '@swc/core-win32-ia32-msvc@1.3.96': optional: true - '@swc/core-win32-x64-msvc@1.15.40': + '@swc/core-win32-x64-msvc@1.16.1': optional: true '@swc/core-win32-x64-msvc@1.3.96': optional: true - '@swc/core@1.15.40(@swc/helpers@0.5.23)': + '@swc/core@1.16.1(@swc/helpers@0.5.23)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.26 + '@swc/types': 0.1.28 optionalDependencies: - '@swc/core-darwin-arm64': 1.15.40 - '@swc/core-darwin-x64': 1.15.40 - '@swc/core-linux-arm-gnueabihf': 1.15.40 - '@swc/core-linux-arm64-gnu': 1.15.40 - '@swc/core-linux-arm64-musl': 1.15.40 - '@swc/core-linux-ppc64-gnu': 1.15.40 - '@swc/core-linux-s390x-gnu': 1.15.40 - '@swc/core-linux-x64-gnu': 1.15.40 - '@swc/core-linux-x64-musl': 1.15.40 - '@swc/core-win32-arm64-msvc': 1.15.40 - '@swc/core-win32-ia32-msvc': 1.15.40 - '@swc/core-win32-x64-msvc': 1.15.40 + '@swc/core-darwin-arm64': 1.16.1 + '@swc/core-darwin-x64': 1.16.1 + '@swc/core-linux-arm-gnueabihf': 1.16.1 + '@swc/core-linux-arm64-gnu': 1.16.1 + '@swc/core-linux-arm64-musl': 1.16.1 + '@swc/core-linux-ppc64-gnu': 1.16.1 + '@swc/core-linux-s390x-gnu': 1.16.1 + '@swc/core-linux-x64-gnu': 1.16.1 + '@swc/core-linux-x64-musl': 1.16.1 + '@swc/core-win32-arm64-msvc': 1.16.1 + '@swc/core-win32-ia32-msvc': 1.16.1 + '@swc/core-win32-x64-msvc': 1.16.1 '@swc/helpers': 0.5.23 '@swc/core@1.3.96(@swc/helpers@0.5.23)': @@ -16479,35 +16628,39 @@ snapshots: dependencies: '@swc/counter': 0.1.3 - '@sxzz/eslint-config@4.6.0(@types/eslint@9.6.1)(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + '@swc/types@0.1.28': dependencies: - '@eslint-community/eslint-plugin-eslint-comments': 4.7.2(eslint@9.39.4(jiti@2.7.0)) + '@swc/counter': 0.1.3 + + '@sxzz/eslint-config@4.6.0(@types/eslint@9.6.1)(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/utils@8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-plugin-eslint-comments': 4.7.2(eslint@9.39.5(jiti@2.7.0)) '@eslint/js': 9.39.4 '@eslint/markdown': 6.6.0 - '@unocss/eslint-plugin': 65.5.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) - eslint: 9.39.4(jiti@2.7.0) - eslint-config-flat-gitignore: 1.0.1(eslint@9.39.4(jiti@2.7.0)) - eslint-config-prettier: 9.1.2(eslint@9.39.4(jiti@2.7.0)) - eslint-plugin-antfu: 2.7.0(eslint@9.39.4(jiti@2.7.0)) - eslint-plugin-command: 2.1.0(eslint@9.39.4(jiti@2.7.0)) - eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@9.39.4(jiti@2.7.0)) - eslint-plugin-jsdoc: 50.8.0(eslint@9.39.4(jiti@2.7.0)) - eslint-plugin-jsonc: 2.21.1(eslint@9.39.4(jiti@2.7.0)) - eslint-plugin-n: 17.24.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) - eslint-plugin-perfectionist: 4.15.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) - eslint-plugin-prettier: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@9.39.4(jiti@2.7.0)))(eslint@9.39.4(jiti@2.7.0))(prettier@3.8.3) - eslint-plugin-regexp: 2.10.0(eslint@9.39.4(jiti@2.7.0)) - eslint-plugin-sxzz: 0.1.0(eslint@9.39.4(jiti@2.7.0)) - eslint-plugin-unicorn: 56.0.1(eslint@9.39.4(jiti@2.7.0)) - eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0)) - eslint-plugin-vue: 9.33.0(eslint@9.39.4(jiti@2.7.0)) - eslint-plugin-yml: 1.19.1(eslint@9.39.4(jiti@2.7.0)) + '@unocss/eslint-plugin': 65.5.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3) + eslint: 9.39.5(jiti@2.7.0) + eslint-config-flat-gitignore: 1.0.1(eslint@9.39.5(jiti@2.7.0)) + eslint-config-prettier: 9.1.2(eslint@9.39.5(jiti@2.7.0)) + eslint-plugin-antfu: 2.7.0(eslint@9.39.5(jiti@2.7.0)) + eslint-plugin-command: 2.1.0(eslint@9.39.5(jiti@2.7.0)) + eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@9.39.5(jiti@2.7.0)) + eslint-plugin-jsdoc: 50.8.0(eslint@9.39.5(jiti@2.7.0)) + eslint-plugin-jsonc: 2.21.1(eslint@9.39.5(jiti@2.7.0)) + eslint-plugin-n: 17.24.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3) + eslint-plugin-perfectionist: 4.15.1(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3) + eslint-plugin-prettier: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@9.39.5(jiti@2.7.0)))(eslint@9.39.5(jiti@2.7.0))(prettier@3.9.6) + eslint-plugin-regexp: 2.10.0(eslint@9.39.5(jiti@2.7.0)) + eslint-plugin-sxzz: 0.1.0(eslint@9.39.5(jiti@2.7.0)) + eslint-plugin-unicorn: 56.0.1(eslint@9.39.5(jiti@2.7.0)) + eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)) + eslint-plugin-vue: 9.33.0(eslint@9.39.5(jiti@2.7.0)) + eslint-plugin-yml: 1.19.1(eslint@9.39.5(jiti@2.7.0)) globals: 15.15.0 jsonc-eslint-parser: 2.4.2 local-pkg: 1.2.1 - prettier: 3.8.3 - typescript-eslint: 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) - vue-eslint-parser: 9.4.3(eslint@9.39.4(jiti@2.7.0)) + prettier: 3.9.6 + typescript-eslint: 8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3) + vue-eslint-parser: 9.4.3(eslint@9.39.5(jiti@2.7.0)) yaml-eslint-parser: 1.3.2 transitivePeerDependencies: - '@eslint/json' @@ -16518,18 +16671,21 @@ snapshots: - supports-color - typescript - '@sxzz/prettier-config@2.3.1': + '@sxzz/prettier-config@2.3.2(prettier@3.9.6)': dependencies: - '@prettier/plugin-oxc': 0.1.4 + '@prettier/plugin-oxc': 0.2.2 + prettier: 3.9.6 - '@sxzz/test-utils@0.3.12(esbuild@0.27.7)(rollup@4.60.4)(vitest@2.1.9)': + '@sxzz/test-utils@0.5.18(@volar/typescript@2.4.28)(esbuild@0.27.7)(rollup@4.63.1)(typescript@5.9.3)(vitest@2.1.9)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) tinyglobby: 0.2.17 - vitest: 2.1.9(@types/node@22.19.19)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + unplugin-utils: 0.3.2 + vitest: 2.1.9(@types/node@22.20.1)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) optionalDependencies: + '@volar/typescript': 2.4.28 esbuild: 0.27.7 - rollup: 4.60.4 + rollup: 4.63.1 + typescript: 5.9.3 '@szmarczak/http-timer@1.1.2': dependencies: @@ -16566,7 +16722,7 @@ snapshots: '@tarojs/binding-linux-x64-gnu': 4.1.3 '@tarojs/binding-win32-x64-msvc': 4.1.3 - '@tarojs/cli@4.1.3(@swc/helpers@0.5.23)(@types/node@22.19.19)': + '@tarojs/cli@4.1.3(@swc/helpers@0.5.23)(@types/node@22.20.1)': dependencies: '@tarojs/binding': 4.1.3 '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) @@ -16574,11 +16730,11 @@ snapshots: '@tarojs/service': 4.1.3(@swc/helpers@0.5.23) '@tarojs/shared': 4.1.3 adm-zip: 0.5.17 - axios: 1.16.1(debug@4.4.3) + axios: 1.20.0(debug@4.4.3) cli-highlight: 2.1.11 download-git-repo: 3.0.2 envinfo: 7.21.0 - inquirer: 8.2.7(@types/node@22.19.19) + inquirer: 8.2.7(@types/node@22.20.1) latest-version: 5.1.0 minimist: 1.2.8 ora: 5.4.1 @@ -16590,12 +16746,12 @@ snapshots: - debug - supports-color - '@tarojs/components-react@4.1.3(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(react@18.3.1)(rollup@3.30.0)(solid-js@1.9.13)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/components-react@4.1.3(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(react@18.3.1)(rollup@3.30.0)(solid-js@1.9.13)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@babel/runtime': 7.29.7 - '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/shared': 4.1.3 - '@tarojs/taro': 4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/taro': 4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) classnames: 2.5.1 react: 18.3.1 solid-js: 1.9.13 @@ -16612,12 +16768,12 @@ snapshots: - webpack-chain - webpack-dev-server - '@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@stencil/core': 2.22.3 '@tarojs/runtime': 4.2.0 '@tarojs/shared': 4.2.0 - '@tarojs/taro': 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/taro': 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) classnames: 2.5.1 hammerjs: 2.0.8 hls.js: 1.6.16 @@ -16625,7 +16781,7 @@ snapshots: swiper: 11.1.15 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.29 + '@types/react': 18.3.31 transitivePeerDependencies: - '@tarojs/helper' - html-webpack-plugin @@ -16635,12 +16791,12 @@ snapshots: - webpack-chain - webpack-dev-server - '@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@stencil/core': 2.22.3 '@tarojs/runtime': 4.2.0 '@tarojs/shared': 4.2.0 - '@tarojs/taro': 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/taro': 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) classnames: 2.5.1 hammerjs: 2.0.8 hls.js: 1.6.16 @@ -16648,7 +16804,7 @@ snapshots: swiper: 11.1.15 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.29 + '@types/react': 18.3.31 transitivePeerDependencies: - '@tarojs/helper' - html-webpack-plugin @@ -16661,7 +16817,7 @@ snapshots: '@tarojs/helper@4.1.3(@swc/helpers@0.5.23)': dependencies: '@babel/core': 7.29.7 - '@babel/generator': 7.29.7 + '@babel/generator': 7.29.8 '@babel/parser': 7.29.7 '@babel/traverse': 7.29.7 '@babel/types': 7.29.7 @@ -16676,7 +16832,7 @@ snapshots: dotenv-expand: 11.0.7 esbuild: 0.21.5 find-yarn-workspace-root: 2.0.0 - fs-extra: 11.3.5 + fs-extra: 11.4.0 lodash: 4.18.1 require-from-string: 2.0.2 resolve: 1.22.12 @@ -16688,7 +16844,7 @@ snapshots: '@tarojs/helper@4.2.0(@swc/helpers@0.5.23)': dependencies: '@babel/core': 7.29.7 - '@babel/generator': 7.29.7 + '@babel/generator': 7.29.8 '@babel/parser': 7.29.7 '@babel/traverse': 7.29.7 '@babel/types': 7.29.7 @@ -16703,7 +16859,7 @@ snapshots: dotenv-expand: 11.0.7 esbuild: 0.21.5 find-yarn-workspace-root: 2.0.0 - fs-extra: 11.3.5 + fs-extra: 11.4.0 lodash: 4.18.1 require-from-string: 2.0.2 resolve: 1.22.12 @@ -16807,7 +16963,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tarojs/plugin-framework-react@4.1.3(@pmmmwh/react-refresh-webpack-plugin@0.5.17(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/runtime@4.1.3)(@tarojs/shared@4.1.3)(@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)))(react@18.3.1)(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/plugin-framework-react@4.1.3(@pmmmwh/react-refresh-webpack-plugin@0.6.2(react-refresh@0.18.0)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/runtime@4.1.3)(@tarojs/shared@4.1.3)(@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)))(react@18.3.1)(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runtime': 4.1.3 @@ -16817,11 +16973,11 @@ snapshots: lodash: 4.18.1 tslib: 2.8.1 optionalDependencies: - '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - '@vitejs/plugin-react': 4.7.0(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)) + '@pmmmwh/react-refresh-webpack-plugin': 0.6.2(react-refresh@0.18.0)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + '@vitejs/plugin-react': 4.7.0(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)) react: 18.3.1 - vite: 5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + vite: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) '@tarojs/plugin-html@4.1.3(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/runtime@4.1.3)(@tarojs/shared@4.1.3)': dependencies: @@ -16839,16 +16995,16 @@ snapshots: '@tarojs/service': 4.2.0(@swc/helpers@0.5.23) '@tarojs/shared': 4.2.0 - '@tarojs/plugin-platform-h5@4.1.3(61616c2ed6adcfead3c5df5cc362031d)': + '@tarojs/plugin-platform-h5@4.1.3(e48d17c9af345a333d434f02d921caa5)': dependencies: '@babel/core': 7.29.7 - '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - '@tarojs/components-react': 4.1.3(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(react@18.3.1)(rollup@3.30.0)(solid-js@1.9.13)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + '@tarojs/components-react': 4.1.3(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(react@18.3.1)(rollup@3.30.0)(solid-js@1.9.13)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runtime': 4.1.3 '@tarojs/service': 4.1.3(@swc/helpers@0.5.23) '@tarojs/shared': 4.1.3 - '@tarojs/taro-h5': 4.1.3(f7070da514994097dea585bd01b868be) + '@tarojs/taro-h5': 4.1.3(09f260d77208d3a0f8c7621b42b3d2e1) babel-plugin-transform-taroapi: 4.1.3(@babel/core@7.29.7) change-case: 4.1.2 lodash-es: 4.17.21 @@ -16868,17 +17024,17 @@ snapshots: - webpack-chain - webpack-dev-server - '@tarojs/plugin-platform-harmony-ets@4.1.3(@babel/core@7.29.7)(@swc/core@1.3.96(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(lightningcss@1.32.0)(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))': + '@tarojs/plugin-platform-harmony-ets@4.1.3(@babel/core@7.29.7)(@swc/core@1.3.96(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(lightningcss@1.32.0)(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))': dependencies: '@babel/preset-react': 7.29.7(@babel/core@7.29.7) - '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runner-utils': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runtime': 4.1.3 '@tarojs/service': 4.1.3(@swc/helpers@0.5.23) '@tarojs/shared': 4.1.3 - '@tarojs/taro': 4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + '@tarojs/taro': 4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) webpack-sources: 3.5.0 transitivePeerDependencies: - '@babel/core' @@ -16954,11 +17110,11 @@ snapshots: react: 18.3.1 react-reconciler: 0.29.0(react@18.3.1) - '@tarojs/router@4.1.3(330f866bc86612540cd13e3381b967b9)': + '@tarojs/router@4.1.3(4802cbeebfe1a66f5f36155868e0a2b1)': dependencies: '@tarojs/runtime': 4.1.3 '@tarojs/shared': 4.1.3 - '@tarojs/taro': 4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/taro': 4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) dingtalk-jsapi: 2.15.6 history: 5.3.0 mobile-detect: 1.4.5 @@ -17028,11 +17184,11 @@ snapshots: '@tarojs/shared@4.2.0': {} - '@tarojs/taro-h5@4.1.3(f7070da514994097dea585bd01b868be)': + '@tarojs/taro-h5@4.1.3(09f260d77208d3a0f8c7621b42b3d2e1)': dependencies: '@tarojs/api': 4.2.0(@tarojs/runtime@4.1.3)(@tarojs/shared@4.1.3) - '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - '@tarojs/router': 4.1.3(330f866bc86612540cd13e3381b967b9) + '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + '@tarojs/router': 4.1.3(4802cbeebfe1a66f5f36155868e0a2b1) '@tarojs/runtime': 4.1.3 '@tarojs/shared': 4.1.3 abortcontroller-polyfill: 1.7.8 @@ -17048,67 +17204,67 @@ snapshots: transitivePeerDependencies: - '@tarojs/taro' - '@tarojs/taro-loader@4.1.3(@swc/helpers@0.5.23)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/taro-loader@4.1.3(@swc/helpers@0.5.23)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) '@tarojs/shared': 4.1.3 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) transitivePeerDependencies: - '@swc/helpers' - supports-color - '@tarojs/taro@4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/taro@4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@tarojs/api': 4.2.0(@tarojs/runtime@4.1.3)(@tarojs/shared@4.1.3) - '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runtime': 4.1.3 '@tarojs/shared': 4.1.3 '@types/postcss-url': 10.0.4 - postcss: 8.5.15 + postcss: 8.5.28 optionalDependencies: - '@types/react': 18.3.29 - html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@types/react': 18.3.31 + html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) rollup: 3.30.0 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) webpack-chain: 6.5.1 - webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) - '@tarojs/taro@4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/taro@4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@tarojs/api': 4.2.0(@tarojs/runtime@4.2.0)(@tarojs/shared@4.2.0) - '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runtime': 4.2.0 '@tarojs/shared': 4.2.0 '@types/postcss-url': 10.0.4 - postcss: 8.5.15 + postcss: 8.5.28 optionalDependencies: - '@types/react': 18.3.29 - html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@types/react': 18.3.31 + html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) rollup: 3.30.0 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) webpack-chain: 6.5.1 - webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) - '@tarojs/taro@4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/taro@4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@tarojs/api': 4.2.0(@tarojs/runtime@4.2.0)(@tarojs/shared@4.2.0) - '@tarojs/components': 4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/components': 4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/helper': 4.2.0(@swc/helpers@0.5.23) '@tarojs/runtime': 4.2.0 '@tarojs/shared': 4.2.0 '@types/postcss-url': 10.0.4 - postcss: 8.5.15 + postcss: 8.5.28 optionalDependencies: - '@types/react': 18.3.29 - html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - rollup: 4.60.4 - webpack: 5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + '@types/react': 18.3.31 + html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + rollup: 4.63.1 + webpack: 5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) webpack-chain: 6.5.1 - webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) - '@tarojs/vite-runner@4.1.3(@swc/helpers@0.5.23)(@tarojs/runtime@4.1.3)(@types/babel__core@7.20.5)(jiti@2.7.0)(postcss@8.5.15)(rollup@3.30.0)(terser@5.48.0)(tsx@4.22.4)(typescript@5.9.3)(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0))': + '@tarojs/vite-runner@4.1.3(@swc/helpers@0.5.23)(@tarojs/runtime@4.1.3)(@types/babel__core@7.20.5)(jiti@2.7.0)(postcss@8.5.28)(rollup@3.30.0)(terser@5.48.0)(tsx@4.23.13)(typescript@5.9.3)(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0))': dependencies: '@ampproject/remapping': 2.3.0 '@babel/core': 7.29.7 @@ -17121,9 +17277,9 @@ snapshots: '@tarojs/runner-utils': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runtime': 4.1.3 '@tarojs/shared': 4.1.3 - '@vitejs/plugin-legacy': 4.1.1(terser@5.48.0)(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)) + '@vitejs/plugin-legacy': 4.1.1(terser@5.48.0)(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)) acorn-walk: 8.3.5 - autoprefixer: 10.5.0(postcss@8.5.15) + autoprefixer: 10.5.4(postcss@8.5.28) babel-plugin-transform-taroapi: 4.1.3(@babel/core@7.29.7) connect-history-api-fallback: 2.0.0 fast-glob: 3.3.3 @@ -17133,19 +17289,19 @@ snapshots: magic-string: 0.30.21 mrmime: 2.0.1 picomatch: 4.0.4 - postcss: 8.5.15 - postcss-css-variables: 0.19.0(postcss@8.5.15) - postcss-html-transform: 4.1.3(postcss@8.5.15) - postcss-import: 16.1.1(postcss@8.5.15) - postcss-load-config: 5.1.0(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4) - postcss-modules: 6.0.1(postcss@8.5.15) - postcss-plugin-constparse: 4.1.3(postcss@8.5.15) - postcss-pxtransform: 4.1.3(postcss@8.5.15) + postcss: 8.5.28 + postcss-css-variables: 0.19.0(postcss@8.5.28) + postcss-html-transform: 4.1.3(postcss@8.5.28) + postcss-import: 16.2.0(postcss@8.5.28) + postcss-load-config: 5.1.0(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13) + postcss-modules: 6.0.1(postcss@8.5.28) + postcss-plugin-constparse: 4.1.3(postcss@8.5.28) + postcss-pxtransform: 4.1.3(postcss@8.5.28) regenerator-runtime: 0.11.1 sax: 1.2.4 stylelint: 16.26.1(typescript@5.9.3) - vite: 5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) - vite-plugin-static-copy: 0.17.1(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)) + vite: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + vite-plugin-static-copy: 0.17.1(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)) transitivePeerDependencies: - '@swc/helpers' - '@types/babel__core' @@ -17156,74 +17312,74 @@ snapshots: - tsx - typescript - '@tarojs/webpack5-prebundle@4.1.3(@swc/helpers@0.5.23)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/webpack5-prebundle@4.1.3(@swc/helpers@0.5.23)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) '@tarojs/shared': 4.1.3 enhanced-resolve: 5.22.1 es-module-lexer: 0.10.5 lodash: 4.18.1 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) webpack-virtual-modules: 0.6.2 transitivePeerDependencies: - '@swc/helpers' - supports-color - '@tarojs/webpack5-runner@4.1.3(@babel/core@7.29.7)(@swc/core@1.3.96(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@tarojs/runtime@4.1.3)(less@3.13.1)(postcss@8.5.15)(sass@1.77.6)(stylus@0.64.0)(typescript@5.9.3)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/webpack5-runner@4.1.3(@babel/core@7.29.7)(@swc/core@1.3.96(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@tarojs/runtime@4.1.3)(less@3.13.1)(postcss@8.5.28)(sass@1.103.1)(stylus@0.64.0)(typescript@5.9.3)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@babel/core': 7.29.7 '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runner-utils': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runtime': 4.1.3 '@tarojs/shared': 4.1.3 - '@tarojs/taro-loader': 4.1.3(@swc/helpers@0.5.23)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - '@tarojs/webpack5-prebundle': 4.1.3(@swc/helpers@0.5.23)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/taro-loader': 4.1.3(@swc/helpers@0.5.23)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + '@tarojs/webpack5-prebundle': 4.1.3(@swc/helpers@0.5.23)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) acorn: 8.16.0 acorn-walk: 8.3.5 - autoprefixer: 10.5.0(postcss@8.5.15) - babel-loader: 8.2.1(@babel/core@7.29.7)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - copy-webpack-plugin: 12.0.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - css-loader: 7.1.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - css-minimizer-webpack-plugin: 6.0.0(esbuild@0.21.5)(lightningcss@1.32.0)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + autoprefixer: 10.5.4(postcss@8.5.28) + babel-loader: 8.2.1(@babel/core@7.29.7)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + copy-webpack-plugin: 12.0.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + css-loader: 7.1.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + css-minimizer-webpack-plugin: 6.0.0(esbuild@0.21.5)(lightningcss@1.32.0)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) detect-port: 1.6.1 esbuild: 0.21.5 - esbuild-loader: 4.4.3(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + esbuild-loader: 4.4.3(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) html-minifier: 4.0.0 - html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) jsdom: 24.1.3 - less-loader: 12.3.3(less@3.13.1)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + less-loader: 12.3.3(less@3.13.1)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) lightningcss: 1.32.0 loader-utils: 3.3.1 lodash: 4.18.1 md5: 2.3.0 - mini-css-extract-plugin: 2.10.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + mini-css-extract-plugin: 2.10.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) miniprogram-simulate: 1.6.1 ora: 5.4.1 picomatch: 4.0.4 - postcss: 8.5.15 - postcss-html-transform: 4.1.3(postcss@8.5.15) - postcss-import: 16.1.1(postcss@8.5.15) - postcss-loader: 8.2.1(postcss@8.5.15)(typescript@5.9.3)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - postcss-plugin-constparse: 4.1.3(postcss@8.5.15) - postcss-pxtransform: 4.1.3(postcss@8.5.15) - postcss-url: 10.1.4(postcss@8.5.15) + postcss: 8.5.28 + postcss-html-transform: 4.1.3(postcss@8.5.28) + postcss-import: 16.2.0(postcss@8.5.28) + postcss-loader: 8.2.1(postcss@8.5.28)(typescript@5.9.3)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + postcss-plugin-constparse: 4.1.3(postcss@8.5.28) + postcss-pxtransform: 4.1.3(postcss@8.5.28) + postcss-url: 10.1.4(postcss@8.5.28) regenerator-runtime: 0.11.1 resolve-url-loader: 5.0.0 - sass-loader: 14.2.1(sass@1.77.6)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + sass-loader: 14.2.1(sass@1.103.1)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) sax: 1.2.4 - style-loader: 3.3.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - stylus-loader: 8.1.3(stylus@0.64.0)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - terser-webpack-plugin: 5.6.1(@swc/core@1.3.96(@swc/helpers@0.5.23))(esbuild@0.21.5)(lightningcss@1.32.0)(postcss@8.5.15)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + style-loader: 3.3.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + stylus-loader: 8.1.3(stylus@0.64.0)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + terser-webpack-plugin: 5.6.1(@swc/core@1.3.96(@swc/helpers@0.5.23))(esbuild@0.21.5)(lightningcss@1.32.0)(postcss@8.5.28)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) vm2: 3.11.5 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) webpack-chain: 6.5.1 - webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) webpack-format-messages: 3.0.1 webpack-virtual-modules: 0.6.2 - webpackbar: 5.0.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpackbar: 5.0.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) optionalDependencies: less: 3.13.1 - sass: 1.77.6 + sass: 1.103.1 stylus: 0.64.0 transitivePeerDependencies: - '@minify-html/node' @@ -17268,15 +17424,15 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.29))(@types/react@18.3.29)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.29.7 '@testing-library/dom': 10.4.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.29 - '@types/react-dom': 18.3.7(@types/react@18.3.29) + '@types/react': 18.3.31 + '@types/react-dom': 18.3.7(@types/react@18.3.31) '@tootallnate/quickjs-emscripten@0.23.0': {} @@ -17285,6 +17441,11 @@ snapshots: tslib: 2.8.1 optional: true + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + '@types/archy@0.0.31': {} '@types/argparse@1.0.38': {} @@ -17315,11 +17476,11 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/chai@5.2.3': dependencies: @@ -17329,11 +17490,11 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.1.1 - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/connect@3.4.38': dependencies: - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/debug@4.1.13': dependencies: @@ -17355,22 +17516,20 @@ snapshots: dependencies: '@types/estree': 1.0.9 - '@types/estree@1.0.8': {} - '@types/estree@1.0.9': {} '@types/expect@1.20.4': {} '@types/express-serve-static-core@4.19.8': dependencies: - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/qs': 6.15.1 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 '@types/express-serve-static-core@5.1.1': dependencies: - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/qs': 6.15.1 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -17385,16 +17544,16 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 20.19.41 + '@types/node': 20.19.43 '@types/fs-extra@8.1.5': dependencies: - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/glob@7.2.0': dependencies: '@types/minimatch': 6.0.0 - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/hast@2.3.10': dependencies: @@ -17412,7 +17571,7 @@ snapshots: '@types/http-proxy@1.17.17': dependencies: - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/istanbul-lib-coverage@2.0.6': {} @@ -17430,15 +17589,15 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.19.19 + '@types/node': 20.19.43 '@types/keyv@3.1.4': dependencies: - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/loadable__component@5.13.10': dependencies: - '@types/react': 18.3.29 + '@types/react': 18.3.31 '@types/lodash.debounce@4.0.9': dependencies: @@ -17470,7 +17629,7 @@ snapshots: '@types/node-forge@1.3.14': dependencies: - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/node@17.0.45': {} @@ -17478,11 +17637,11 @@ snapshots: dependencies: undici-types: 5.26.5 - '@types/node@20.19.41': + '@types/node@20.19.43': dependencies: undici-types: 6.21.0 - '@types/node@22.19.19': + '@types/node@22.20.1': dependencies: undici-types: 6.21.0 @@ -17496,12 +17655,12 @@ snapshots: '@types/postcss-import@14.0.3': dependencies: - postcss: 8.5.15 + postcss: 8.5.28 '@types/postcss-url@10.0.4': dependencies: - '@types/node': 22.19.19 - postcss: 8.5.15 + '@types/node': 20.19.43 + postcss: 8.5.28 '@types/prop-types@15.7.15': {} @@ -17509,34 +17668,34 @@ snapshots: '@types/range-parser@1.2.7': {} - '@types/react-dom@18.3.7(@types/react@18.3.29)': + '@types/react-dom@18.3.7(@types/react@18.3.31)': dependencies: - '@types/react': 18.3.29 + '@types/react': 18.3.31 '@types/react-router-dom@5.3.3': dependencies: '@types/history': 4.7.11 - '@types/react': 18.3.29 + '@types/react': 18.3.31 '@types/react-router': 5.1.20 '@types/react-router@5.1.20': dependencies: '@types/history': 4.7.11 - '@types/react': 18.3.29 + '@types/react': 18.3.31 '@types/react-syntax-highlighter@15.5.13': dependencies: - '@types/react': 18.3.29 + '@types/react': 18.3.31 '@types/react-test-renderer@19.1.0': dependencies: - '@types/react': 18.3.29 + '@types/react': 18.3.31 - '@types/react-transition-group@4.4.12(@types/react@18.3.29)': + '@types/react-transition-group@4.4.12(@types/react@18.3.31)': dependencies: - '@types/react': 18.3.29 + '@types/react': 18.3.31 - '@types/react@18.3.29': + '@types/react@18.3.31': dependencies: '@types/prop-types': 15.7.15 csstype: 3.2.3 @@ -17545,24 +17704,24 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/retry@0.12.0': {} '@types/sass@1.45.0': dependencies: - sass: 1.77.6 + sass: 1.103.1 '@types/semver@7.7.1': {} '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/send@1.2.1': dependencies: - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/serve-index@1.9.4': dependencies: @@ -17571,7 +17730,7 @@ snapshots: '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/send': 0.17.6 '@types/sinonjs__fake-timers@8.1.1': {} @@ -17580,7 +17739,7 @@ snapshots: '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/stack-utils@2.0.3': {} @@ -17597,13 +17756,13 @@ snapshots: '@types/vinyl@2.0.12': dependencies: '@types/expect': 1.20.4 - '@types/node': 22.19.19 + '@types/node': 20.19.43 '@types/webpack-env@1.18.8': {} '@types/ws@8.18.1': dependencies: - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@types/yargs-parser@21.0.3': {} @@ -17617,7 +17776,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.19.19 + '@types/node': 20.19.43 optional: true '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)': @@ -17658,15 +17817,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.60.0 - '@typescript-eslint/type-utils': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) - '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.60.0 - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -17700,14 +17859,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/parser@8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.60.0 '@typescript-eslint/types': 8.60.0 '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.60.0 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -17764,13 +17923,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.60.0 '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -17852,13 +18011,13 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/utils@8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.60.0 '@typescript-eslint/types': 8.60.0 '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.9.3) - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -17887,9 +18046,9 @@ snapshots: '@unocss/core@65.5.0': {} - '@unocss/eslint-plugin@65.5.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + '@unocss/eslint-plugin@65.5.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3)': dependencies: - '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3) '@unocss/config': 65.5.0 '@unocss/core': 65.5.0 '@unocss/rule-utils': 65.5.0 @@ -17982,7 +18141,7 @@ snapshots: '@use-gesture/core': 10.2.20 react: 18.3.1 - '@vitejs/plugin-legacy@4.1.1(terser@5.48.0)(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0))': + '@vitejs/plugin-legacy@4.1.1(terser@5.48.0)(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0))': dependencies: '@babel/core': 7.29.7 '@babel/preset-env': 7.29.7(@babel/core@7.29.7) @@ -17992,11 +18151,11 @@ snapshots: regenerator-runtime: 0.13.11 systemjs: 6.15.1 terser: 5.48.0 - vite: 5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vite: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@20.19.41)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0))': + '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0))': dependencies: '@babel/core': 7.29.7 '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7) @@ -18004,11 +18163,11 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 5.4.21(@types/node@20.19.41)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vite: 5.4.21(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0))': + '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0))': dependencies: '@babel/core': 7.29.7 '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7) @@ -18016,12 +18175,12 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vite: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) transitivePeerDependencies: - supports-color optional: true - '@vitest/coverage-v8@3.2.4(vitest@3.2.4)': + '@vitest/coverage-v8@3.2.7(vitest@3.2.7)': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -18036,7 +18195,7 @@ snapshots: std-env: 3.10.0 test-exclude: 7.0.2 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.13)(@types/node@20.19.41)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vitest: 3.2.7(@types/debug@4.1.13)(@types/node@20.19.43)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) transitivePeerDependencies: - supports-color @@ -18053,35 +18212,43 @@ snapshots: chai: 5.3.3 tinyrainbow: 1.2.0 - '@vitest/expect@3.2.4': + '@vitest/expect@3.2.7': dependencies: '@types/chai': 5.2.3 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 + '@vitest/spy': 3.2.7 + '@vitest/utils': 3.2.7 chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0))': + '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0))': dependencies: '@vitest/spy': 2.1.9 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vite: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + + '@vitest/mocker@3.2.7(vite@5.4.21(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0))': + dependencies: + '@vitest/spy': 3.2.7 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 5.4.21(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) - '@vitest/mocker@3.2.4(vite@5.4.21(@types/node@20.19.41)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0))': + '@vitest/mocker@3.2.7(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0))': dependencies: - '@vitest/spy': 3.2.4 + '@vitest/spy': 3.2.7 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 5.4.21(@types/node@20.19.41)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vite: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) '@vitest/pretty-format@2.1.9': dependencies: tinyrainbow: 1.2.0 - '@vitest/pretty-format@3.2.4': + '@vitest/pretty-format@3.2.7': dependencies: tinyrainbow: 2.0.0 @@ -18096,9 +18263,9 @@ snapshots: '@vitest/utils': 2.1.9 pathe: 1.1.2 - '@vitest/runner@3.2.4': + '@vitest/runner@3.2.7': dependencies: - '@vitest/utils': 3.2.4 + '@vitest/utils': 3.2.7 pathe: 2.0.3 strip-literal: 3.1.0 @@ -18114,9 +18281,9 @@ snapshots: magic-string: 0.30.21 pathe: 1.1.2 - '@vitest/snapshot@3.2.4': + '@vitest/snapshot@3.2.7': dependencies: - '@vitest/pretty-format': 3.2.4 + '@vitest/pretty-format': 3.2.7 magic-string: 0.30.21 pathe: 2.0.3 @@ -18128,7 +18295,7 @@ snapshots: dependencies: tinyspy: 3.0.2 - '@vitest/spy@3.2.4': + '@vitest/spy@3.2.7': dependencies: tinyspy: 4.0.4 @@ -18141,10 +18308,10 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.17 tinyrainbow: 1.2.0 - vitest: 2.1.9(@types/node@22.19.19)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vitest: 2.1.9(@types/node@22.20.1)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) optional: true - '@vitest/ui@2.1.9(vitest@3.2.4)': + '@vitest/ui@2.1.9(vitest@3.2.7)': dependencies: '@vitest/utils': 2.1.9 fflate: 0.8.3 @@ -18153,7 +18320,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.17 tinyrainbow: 1.2.0 - vitest: 3.2.4(@types/debug@4.1.13)(@types/node@20.19.41)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vitest: 3.2.7(@types/debug@4.1.13)(@types/node@20.19.43)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) '@vitest/utils@1.6.1': dependencies: @@ -18168,9 +18335,9 @@ snapshots: loupe: 3.2.1 tinyrainbow: 1.2.0 - '@vitest/utils@3.2.4': + '@vitest/utils@3.2.7': dependencies: - '@vitest/pretty-format': 3.2.4 + '@vitest/pretty-format': 3.2.7 loupe: 3.2.1 tinyrainbow: 2.0.0 @@ -18204,13 +18371,13 @@ snapshots: de-indent: 1.0.2 he: 1.2.0 - '@vue/language-core@2.1.6(typescript@5.9.3)': + '@vue/language-core@2.2.0(typescript@5.9.3)': dependencies: '@volar/language-core': 2.4.28 '@vue/compiler-dom': 3.5.35 '@vue/compiler-vue2': 2.7.16 '@vue/shared': 3.5.35 - computeds: 0.0.1 + alien-signals: 0.4.14 minimatch: 9.0.9 muggle-string: 0.4.1 path-browserify: 1.0.1 @@ -18361,18 +18528,14 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 - ajv-draft-04@1.0.0(ajv@8.13.0): + ajv-draft-04@1.0.0(ajv@8.20.0): optionalDependencies: - ajv: 8.13.0 + ajv: 8.20.0 ajv-formats@2.1.1(ajv@8.20.0): optionalDependencies: ajv: 8.20.0 - ajv-formats@3.0.1(ajv@8.13.0): - optionalDependencies: - ajv: 8.13.0 - ajv-formats@3.0.1(ajv@8.20.0): optionalDependencies: ajv: 8.20.0 @@ -18393,19 +18556,12 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.12.0: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - - ajv@8.13.0: + ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.1.2 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 ajv@8.20.0: dependencies: @@ -18414,6 +18570,10 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + alien-signals@0.4.14: {} + + anser@2.3.5: {} + ansi-align@2.0.0: dependencies: string-width: 2.1.1 @@ -18440,8 +18600,6 @@ snapshots: ansi-html-community@0.0.8: {} - ansi-html@0.0.9: {} - ansi-regex@3.0.1: {} ansi-regex@4.1.1: {} @@ -18649,13 +18807,13 @@ snapshots: stubborn-fs: 2.0.0 when-exit: 2.1.5 - autoprefixer@10.5.0(postcss@8.5.15): + autoprefixer@10.5.4(postcss@8.5.28): dependencies: - browserslist: 4.28.2 - caniuse-lite: 1.0.30001793 + browserslist: 4.28.8 + caniuse-lite: 1.0.30001810 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -18675,10 +18833,10 @@ snapshots: transitivePeerDependencies: - supports-color - axios@1.16.1(debug@4.4.3): + axios@1.20.0(debug@4.4.3): dependencies: follow-redirects: 1.16.0(debug@4.4.3) - form-data: 4.0.5 + form-data: 4.0.6 https-proxy-agent: 5.0.1 proxy-from-env: 2.1.0 transitivePeerDependencies: @@ -18702,7 +18860,7 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@8.2.1(@babel/core@7.29.7)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + babel-loader@8.2.1(@babel/core@7.29.7)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: '@babel/core': 7.29.7 find-cache-dir: 2.1.0 @@ -18710,7 +18868,7 @@ snapshots: make-dir: 2.1.0 pify: 4.0.1 schema-utils: 2.7.1 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) babel-plugin-const-enum@1.2.0(@babel/core@7.29.7): dependencies: @@ -18820,7 +18978,7 @@ snapshots: babel-plugin-jest-hoist: 30.4.0 babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.7) - babel-preset-taro@4.1.3(@babel/core@7.29.7)(@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7))(@babel/preset-react@7.29.7(@babel/core@7.29.7))(@swc/helpers@0.5.23)(react-refresh@0.14.2): + babel-preset-taro@4.1.3(@babel/core@7.29.7)(@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7))(@babel/preset-react@7.29.7(@babel/core@7.29.7))(@swc/helpers@0.5.23)(react-refresh@0.18.0): dependencies: '@babel/core': 7.29.7 '@babel/plugin-proposal-decorators': 7.29.7(@babel/core@7.29.7) @@ -18838,7 +18996,7 @@ snapshots: core-js: 3.49.0 optionalDependencies: '@babel/preset-react': 7.29.7(@babel/core@7.29.7) - react-refresh: 0.14.2 + react-refresh: 0.18.0 transitivePeerDependencies: - '@babel/plugin-transform-typescript' - '@react-native/babel-preset' @@ -18866,6 +19024,8 @@ snapshots: baseline-browser-mapping@2.10.33: {} + baseline-browser-mapping@2.11.20: {} + basic-ftp@5.3.1: {} batch@0.6.1: {} @@ -19000,6 +19160,14 @@ snapshots: node-releases: 2.0.46 update-browserslist-db: 1.2.3(browserslist@4.28.2) + browserslist@4.28.8: + dependencies: + baseline-browser-mapping: 2.11.20 + caniuse-lite: 1.0.30001810 + electron-to-chromium: 1.5.420 + node-releases: 2.0.54 + update-browserslist-db: 1.3.2(browserslist@4.28.8) + bs-logger@0.2.6: dependencies: fast-json-stable-stringify: 2.1.0 @@ -19189,6 +19357,8 @@ snapshots: caniuse-lite@1.0.30001793: {} + caniuse-lite@1.0.30001810: {} + capital-case@1.0.4: dependencies: no-case: 3.0.4 @@ -19307,6 +19477,10 @@ snapshots: dependencies: readdirp: 4.1.2 + chokidar@5.0.0: + dependencies: + readdirp: 5.1.1 + chownr@1.1.4: {} chownr@2.0.0: {} @@ -19504,8 +19678,6 @@ snapshots: comment-parser@1.4.7: {} - common-path-prefix@3.0.0: {} - common-tags@1.8.2: {} commondir@1.0.1: {} @@ -19538,8 +19710,6 @@ snapshots: transitivePeerDependencies: - supports-color - computeds@0.0.1: {} - concat-map@0.0.1: {} concat-stream@1.6.2: @@ -19643,7 +19813,7 @@ snapshots: copy-text-to-clipboard@3.2.2: {} - copy-webpack-plugin@12.0.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + copy-webpack-plugin@12.0.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: fast-glob: 3.3.3 glob-parent: 6.0.2 @@ -19651,7 +19821,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.3.3 serialize-javascript: 6.0.2 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) core-js-compat@3.49.0: dependencies: @@ -19670,9 +19840,9 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig-typescript-loader@6.3.0(@types/node@20.19.41)(cosmiconfig@9.0.1(typescript@5.9.3))(typescript@5.9.3): + cosmiconfig-typescript-loader@6.3.0(@types/node@20.19.43)(cosmiconfig@9.0.1(typescript@5.9.3))(typescript@5.9.3): dependencies: - '@types/node': 20.19.41 + '@types/node': 20.19.43 cosmiconfig: 9.0.1(typescript@5.9.3) jiti: 2.6.1 typescript: 5.9.3 @@ -19724,34 +19894,34 @@ snapshots: crypto-random-string@1.0.0: {} - css-declaration-sorter@7.4.0(postcss@8.5.15): + css-declaration-sorter@7.4.0(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 css-functions-list@3.3.3: {} - css-loader@7.1.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + css-loader@7.1.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: - icss-utils: 5.1.0(postcss@8.5.15) - postcss: 8.5.15 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.15) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.15) - postcss-modules-scope: 3.2.1(postcss@8.5.15) - postcss-modules-values: 4.0.0(postcss@8.5.15) + icss-utils: 5.1.0(postcss@8.5.28) + postcss: 8.5.28 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.28) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.28) + postcss-modules-scope: 3.2.1(postcss@8.5.28) + postcss-modules-values: 4.0.0(postcss@8.5.28) postcss-value-parser: 4.2.0 semver: 7.8.1 optionalDependencies: - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) - css-minimizer-webpack-plugin@6.0.0(esbuild@0.21.5)(lightningcss@1.32.0)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + css-minimizer-webpack-plugin@6.0.0(esbuild@0.21.5)(lightningcss@1.32.0)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: '@jridgewell/trace-mapping': 0.3.31 - cssnano: 6.1.2(postcss@8.5.15) + cssnano: 6.1.2(postcss@8.5.28) jest-worker: 29.7.0 - postcss: 8.5.15 + postcss: 8.5.28 schema-utils: 4.3.3 serialize-javascript: 6.0.2 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) optionalDependencies: esbuild: 0.21.5 lightningcss: 1.32.0 @@ -19800,49 +19970,49 @@ snapshots: cssfontparser@1.2.1: {} - cssnano-preset-default@6.1.2(postcss@8.5.15): + cssnano-preset-default@6.1.2(postcss@8.5.28): dependencies: browserslist: 4.28.2 - css-declaration-sorter: 7.4.0(postcss@8.5.15) - cssnano-utils: 4.0.2(postcss@8.5.15) - postcss: 8.5.15 - postcss-calc: 9.0.1(postcss@8.5.15) - postcss-colormin: 6.1.0(postcss@8.5.15) - postcss-convert-values: 6.1.0(postcss@8.5.15) - postcss-discard-comments: 6.0.2(postcss@8.5.15) - postcss-discard-duplicates: 6.0.3(postcss@8.5.15) - postcss-discard-empty: 6.0.3(postcss@8.5.15) - postcss-discard-overridden: 6.0.2(postcss@8.5.15) - postcss-merge-longhand: 6.0.5(postcss@8.5.15) - postcss-merge-rules: 6.1.1(postcss@8.5.15) - postcss-minify-font-values: 6.1.0(postcss@8.5.15) - postcss-minify-gradients: 6.0.3(postcss@8.5.15) - postcss-minify-params: 6.1.0(postcss@8.5.15) - postcss-minify-selectors: 6.0.4(postcss@8.5.15) - postcss-normalize-charset: 6.0.2(postcss@8.5.15) - postcss-normalize-display-values: 6.0.2(postcss@8.5.15) - postcss-normalize-positions: 6.0.2(postcss@8.5.15) - postcss-normalize-repeat-style: 6.0.2(postcss@8.5.15) - postcss-normalize-string: 6.0.2(postcss@8.5.15) - postcss-normalize-timing-functions: 6.0.2(postcss@8.5.15) - postcss-normalize-unicode: 6.1.0(postcss@8.5.15) - postcss-normalize-url: 6.0.2(postcss@8.5.15) - postcss-normalize-whitespace: 6.0.2(postcss@8.5.15) - postcss-ordered-values: 6.0.2(postcss@8.5.15) - postcss-reduce-initial: 6.1.0(postcss@8.5.15) - postcss-reduce-transforms: 6.0.2(postcss@8.5.15) - postcss-svgo: 6.0.3(postcss@8.5.15) - postcss-unique-selectors: 6.0.4(postcss@8.5.15) - - cssnano-utils@4.0.2(postcss@8.5.15): - dependencies: - postcss: 8.5.15 - - cssnano@6.1.2(postcss@8.5.15): - dependencies: - cssnano-preset-default: 6.1.2(postcss@8.5.15) + css-declaration-sorter: 7.4.0(postcss@8.5.28) + cssnano-utils: 4.0.2(postcss@8.5.28) + postcss: 8.5.28 + postcss-calc: 9.0.1(postcss@8.5.28) + postcss-colormin: 6.1.0(postcss@8.5.28) + postcss-convert-values: 6.1.0(postcss@8.5.28) + postcss-discard-comments: 6.0.2(postcss@8.5.28) + postcss-discard-duplicates: 6.0.3(postcss@8.5.28) + postcss-discard-empty: 6.0.3(postcss@8.5.28) + postcss-discard-overridden: 6.0.2(postcss@8.5.28) + postcss-merge-longhand: 6.0.5(postcss@8.5.28) + postcss-merge-rules: 6.1.1(postcss@8.5.28) + postcss-minify-font-values: 6.1.0(postcss@8.5.28) + postcss-minify-gradients: 6.0.3(postcss@8.5.28) + postcss-minify-params: 6.1.0(postcss@8.5.28) + postcss-minify-selectors: 6.0.4(postcss@8.5.28) + postcss-normalize-charset: 6.0.2(postcss@8.5.28) + postcss-normalize-display-values: 6.0.2(postcss@8.5.28) + postcss-normalize-positions: 6.0.2(postcss@8.5.28) + postcss-normalize-repeat-style: 6.0.2(postcss@8.5.28) + postcss-normalize-string: 6.0.2(postcss@8.5.28) + postcss-normalize-timing-functions: 6.0.2(postcss@8.5.28) + postcss-normalize-unicode: 6.1.0(postcss@8.5.28) + postcss-normalize-url: 6.0.2(postcss@8.5.28) + postcss-normalize-whitespace: 6.0.2(postcss@8.5.28) + postcss-ordered-values: 6.0.2(postcss@8.5.28) + postcss-reduce-initial: 6.1.0(postcss@8.5.28) + postcss-reduce-transforms: 6.0.2(postcss@8.5.28) + postcss-svgo: 6.0.3(postcss@8.5.28) + postcss-unique-selectors: 6.0.4(postcss@8.5.28) + + cssnano-utils@4.0.2(postcss@8.5.28): + dependencies: + postcss: 8.5.28 + + cssnano@6.1.2(postcss@8.5.28): + dependencies: + cssnano-preset-default: 6.1.2(postcss@8.5.28) lilconfig: 3.1.3 - postcss: 8.5.15 + postcss: 8.5.28 csso@3.5.1: dependencies: @@ -20127,6 +20297,8 @@ snapshots: diff-sequences@29.6.3: {} + diff@8.0.4: {} + dingtalk-jsapi@2.15.6: dependencies: promise-polyfill: 7.1.2 @@ -20276,6 +20448,8 @@ snapshots: electron-to-chromium@1.5.364: {} + electron-to-chromium@1.5.420: {} + emittery@0.13.1: {} emoji-regex@10.6.0: {} @@ -20464,12 +20638,12 @@ snapshots: esast-util-from-estree: 2.0.0 vfile-message: 4.0.3 - esbuild-loader@4.4.3(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + esbuild-loader@4.4.3(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: esbuild: 0.27.7 get-tsconfig: 4.14.0 loader-utils: 2.0.4 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) webpack-sources: 3.5.0 esbuild@0.21.5: @@ -20578,14 +20752,14 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-compat-utils@0.5.1(eslint@9.39.4(jiti@2.7.0)): + eslint-compat-utils@0.5.1(eslint@9.39.5(jiti@2.7.0)): dependencies: - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) semver: 7.8.1 - eslint-compat-utils@0.6.5(eslint@9.39.4(jiti@2.7.0)): + eslint-compat-utils@0.6.5(eslint@9.39.5(jiti@2.7.0)): dependencies: - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) semver: 7.8.1 eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.32.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1): @@ -20608,18 +20782,18 @@ snapshots: object.assign: 4.1.7 object.entries: 1.1.9 - eslint-config-flat-gitignore@1.0.1(eslint@9.39.4(jiti@2.7.0)): + eslint-config-flat-gitignore@1.0.1(eslint@9.39.5(jiti@2.7.0)): dependencies: - '@eslint/compat': 1.4.1(eslint@9.39.4(jiti@2.7.0)) - eslint: 9.39.4(jiti@2.7.0) + '@eslint/compat': 1.4.1(eslint@9.39.5(jiti@2.7.0)) + eslint: 9.39.5(jiti@2.7.0) eslint-config-prettier@9.1.2(eslint@8.57.1): dependencies: eslint: 8.57.1 - eslint-config-prettier@9.1.2(eslint@9.39.4(jiti@2.7.0)): + eslint-config-prettier@9.1.2(eslint@9.39.5(jiti@2.7.0)): dependencies: - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) eslint-config-taro@4.1.3(@babel/core@7.29.7)(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.5(eslint@8.57.1))(eslint@8.57.1)(typescript@5.9.3): dependencies: @@ -20653,9 +20827,9 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-json-compat-utils@0.2.3(eslint@9.39.4(jiti@2.7.0))(jsonc-eslint-parser@2.4.2): + eslint-json-compat-utils@0.2.3(eslint@9.39.5(jiti@2.7.0))(jsonc-eslint-parser@2.4.2): dependencies: - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) esquery: 1.7.0 jsonc-eslint-parser: 2.4.2 @@ -20679,30 +20853,30 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-antfu@2.7.0(eslint@9.39.4(jiti@2.7.0)): + eslint-plugin-antfu@2.7.0(eslint@9.39.5(jiti@2.7.0)): dependencies: '@antfu/utils': 0.7.10 - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) - eslint-plugin-command@2.1.0(eslint@9.39.4(jiti@2.7.0)): + eslint-plugin-command@2.1.0(eslint@9.39.5(jiti@2.7.0)): dependencies: '@es-joy/jsdoccomment': 0.50.2 - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) - eslint-plugin-es-x@7.8.0(eslint@9.39.4(jiti@2.7.0)): + eslint-plugin-es-x@7.8.0(eslint@9.39.5(jiti@2.7.0)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 - eslint: 9.39.4(jiti@2.7.0) - eslint-compat-utils: 0.5.1(eslint@9.39.4(jiti@2.7.0)) + eslint: 9.39.5(jiti@2.7.0) + eslint-compat-utils: 0.5.1(eslint@9.39.5(jiti@2.7.0)) - eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@9.39.4(jiti@2.7.0)): + eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@9.39.5(jiti@2.7.0)): dependencies: '@package-json/types': 0.0.12 '@typescript-eslint/types': 8.60.0 comment-parser: 1.4.7 debug: 4.4.3(supports-color@8.1.1) - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) eslint-import-context: 0.1.9(unrs-resolver@1.12.2) is-glob: 4.0.3 minimatch: 10.2.5 @@ -20710,7 +20884,7 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.12.2 optionalDependencies: - '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3) eslint-import-resolver-node: 0.3.10 transitivePeerDependencies: - supports-color @@ -20773,14 +20947,14 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsdoc@50.8.0(eslint@9.39.4(jiti@2.7.0)): + eslint-plugin-jsdoc@50.8.0(eslint@9.39.5(jiti@2.7.0)): dependencies: '@es-joy/jsdoccomment': 0.50.2 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) espree: 10.4.0 esquery: 1.7.0 parse-imports-exports: 0.2.4 @@ -20789,13 +20963,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.21.1(eslint@9.39.4(jiti@2.7.0)): + eslint-plugin-jsonc@2.21.1(eslint@9.39.5(jiti@2.7.0)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)) diff-sequences: 27.5.1 - eslint: 9.39.4(jiti@2.7.0) - eslint-compat-utils: 0.6.5(eslint@9.39.4(jiti@2.7.0)) - eslint-json-compat-utils: 0.2.3(eslint@9.39.4(jiti@2.7.0))(jsonc-eslint-parser@2.4.2) + eslint: 9.39.5(jiti@2.7.0) + eslint-compat-utils: 0.6.5(eslint@9.39.5(jiti@2.7.0)) + eslint-json-compat-utils: 0.2.3(eslint@9.39.5(jiti@2.7.0))(jsonc-eslint-parser@2.4.2) espree: 10.4.0 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.2 @@ -20830,12 +21004,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-n@17.24.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): + eslint-plugin-n@17.24.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)) enhanced-resolve: 5.22.1 - eslint: 9.39.4(jiti@2.7.0) - eslint-plugin-es-x: 7.8.0(eslint@9.39.4(jiti@2.7.0)) + eslint: 9.39.5(jiti@2.7.0) + eslint-plugin-es-x: 7.8.0(eslint@9.39.5(jiti@2.7.0)) get-tsconfig: 4.14.0 globals: 15.15.0 globrex: 0.1.2 @@ -20845,35 +21019,35 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@4.15.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): + eslint-plugin-perfectionist@4.15.1(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3): dependencies: '@typescript-eslint/types': 8.60.0 - '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) - eslint: 9.39.4(jiti@2.7.0) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3) + eslint: 9.39.5(jiti@2.7.0) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-prettier@5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.8.3): + eslint-plugin-prettier@5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.9.6): dependencies: eslint: 8.57.1 - prettier: 3.8.3 + prettier: 3.9.6 prettier-linter-helpers: 1.0.1 synckit: 0.11.13 optionalDependencies: '@types/eslint': 9.6.1 eslint-config-prettier: 9.1.2(eslint@8.57.1) - eslint-plugin-prettier@5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@9.39.4(jiti@2.7.0)))(eslint@9.39.4(jiti@2.7.0))(prettier@3.8.3): + eslint-plugin-prettier@5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@9.39.5(jiti@2.7.0)))(eslint@9.39.5(jiti@2.7.0))(prettier@3.9.6): dependencies: - eslint: 9.39.4(jiti@2.7.0) - prettier: 3.8.3 + eslint: 9.39.5(jiti@2.7.0) + prettier: 3.9.6 prettier-linter-helpers: 1.0.1 synckit: 0.11.13 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 9.1.2(eslint@9.39.4(jiti@2.7.0)) + eslint-config-prettier: 9.1.2(eslint@9.39.5(jiti@2.7.0)) eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): dependencies: @@ -20901,29 +21075,29 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-regexp@2.10.0(eslint@9.39.4(jiti@2.7.0)): + eslint-plugin-regexp@2.10.0(eslint@9.39.5(jiti@2.7.0)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 comment-parser: 1.4.7 - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) jsdoc-type-pratt-parser: 4.8.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-sxzz@0.1.0(eslint@9.39.4(jiti@2.7.0)): + eslint-plugin-sxzz@0.1.0(eslint@9.39.5(jiti@2.7.0)): dependencies: - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) - eslint-plugin-unicorn@56.0.1(eslint@9.39.4(jiti@2.7.0)): + eslint-plugin-unicorn@56.0.1(eslint@9.39.5(jiti@2.7.0)): dependencies: '@babel/helper-validator-identifier': 7.29.7 - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)) ci-info: 4.4.0 clean-regexp: 1.0.0 core-js-compat: 3.49.0 - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) esquery: 1.7.0 globals: 15.15.0 indent-string: 4.0.0 @@ -20942,33 +21116,33 @@ snapshots: optionalDependencies: '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) - eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0)): + eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0)): dependencies: - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3) - eslint-plugin-vue@9.33.0(eslint@9.39.4(jiti@2.7.0)): + eslint-plugin-vue@9.33.0(eslint@9.39.5(jiti@2.7.0)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) - eslint: 9.39.4(jiti@2.7.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)) + eslint: 9.39.5(jiti@2.7.0) globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 semver: 7.8.1 - vue-eslint-parser: 9.4.3(eslint@9.39.4(jiti@2.7.0)) + vue-eslint-parser: 9.4.3(eslint@9.39.5(jiti@2.7.0)) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color - eslint-plugin-yml@1.19.1(eslint@9.39.4(jiti@2.7.0)): + eslint-plugin-yml@1.19.1(eslint@9.39.5(jiti@2.7.0)): dependencies: debug: 4.4.3(supports-color@8.1.1) diff-sequences: 27.5.1 escape-string-regexp: 4.0.0 - eslint: 9.39.4(jiti@2.7.0) - eslint-compat-utils: 0.6.5(eslint@9.39.4(jiti@2.7.0)) + eslint: 9.39.5(jiti@2.7.0) + eslint-compat-utils: 0.6.5(eslint@9.39.5(jiti@2.7.0)) natural-compare: 1.4.0 yaml-eslint-parser: 1.3.2 transitivePeerDependencies: @@ -21084,15 +21258,15 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@9.39.4(jiti@2.7.0): + eslint@9.39.5(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.2 '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.5 - '@eslint/js': 9.39.4 + '@eslint/eslintrc': 3.3.7 + '@eslint/js': 9.39.5 '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 @@ -21622,7 +21796,7 @@ snapshots: dependencies: magic-string: 0.30.21 mlly: 1.8.2 - rollup: 4.60.4 + rollup: 4.63.1 flagged-respawn@2.0.0: {} @@ -21689,6 +21863,14 @@ snapshots: hasown: 2.0.4 mime-types: 2.1.35 + form-data@4.0.6: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.4 + mime-types: 2.1.35 + format@0.2.2: {} forwarded@0.2.0: {} @@ -21716,16 +21898,16 @@ snapshots: jsonfile: 6.2.1 universalify: 2.0.1 - fs-extra@3.0.1: + fs-extra@11.4.0: dependencies: graceful-fs: 4.2.11 - jsonfile: 3.0.1 - universalify: 0.1.2 + jsonfile: 6.2.1 + universalify: 2.0.1 - fs-extra@7.0.1: + fs-extra@3.0.1: dependencies: graceful-fs: 4.2.11 - jsonfile: 4.0.0 + jsonfile: 3.0.1 universalify: 0.1.2 fs-extra@8.1.0: @@ -22172,12 +22354,12 @@ snapshots: readable-stream: 1.1.14 streamqueue: 0.0.6 - gulp-postcss@10.0.0(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4): + gulp-postcss@10.0.0(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13): dependencies: fancy-log: 2.0.0 plugin-error: 2.0.1 - postcss: 8.5.15 - postcss-load-config: 5.1.0(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4) + postcss: 8.5.28 + postcss-load-config: 5.1.0(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13) vinyl-sourcemaps-apply: 0.2.1 transitivePeerDependencies: - jiti @@ -22187,7 +22369,7 @@ snapshots: gulp-replace@1.1.4: dependencies: - '@types/node': 20.19.41 + '@types/node': 20.19.43 '@types/vinyl': 2.0.12 istextorbinary: 3.3.0 replacestream: 4.0.3 @@ -22362,6 +22544,8 @@ snapshots: highlight.js@11.11.1: {} + highlight.js@11.12.0: {} + highlightjs-vue@1.0.0: {} history@5.3.0: @@ -22429,7 +22613,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -22437,10 +22621,10 @@ snapshots: pretty-error: 4.0.0 tapable: 2.3.3 optionalDependencies: - webpack: 5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) optional: true - html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -22448,7 +22632,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.3.3 optionalDependencies: - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) htmlparser2@6.1.0: dependencies: @@ -22576,9 +22760,9 @@ snapshots: runes2: 1.1.4 yup: 1.7.1 - icss-utils@5.1.0(postcss@8.5.15): + icss-utils@5.1.0(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 ieee754@1.2.1: {} @@ -22595,7 +22779,7 @@ snapshots: dependencies: queue: 6.0.1 - immutable@4.3.8: {} + immutable@5.1.9: {} import-fresh@3.3.1: dependencies: @@ -22634,12 +22818,12 @@ snapshots: inline-style-parser@0.2.7: {} - inquirer@12.3.0(@types/node@22.19.19): + inquirer@12.3.0(@types/node@20.19.43): dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.19) - '@inquirer/prompts': 7.10.1(@types/node@22.19.19) - '@inquirer/type': 3.0.10(@types/node@22.19.19) - '@types/node': 22.19.19 + '@inquirer/core': 10.3.2(@types/node@20.19.43) + '@inquirer/prompts': 7.10.1(@types/node@20.19.43) + '@inquirer/type': 3.0.10(@types/node@20.19.43) + '@types/node': 20.19.43 ansi-escapes: 4.3.2 mute-stream: 2.0.0 run-async: 3.0.0 @@ -22661,9 +22845,9 @@ snapshots: strip-ansi: 5.2.0 through: 2.3.8 - inquirer@8.2.7(@types/node@22.19.19): + inquirer@8.2.7(@types/node@22.20.1): dependencies: - '@inquirer/external-editor': 1.0.3(@types/node@22.19.19) + '@inquirer/external-editor': 1.0.3(@types/node@22.20.1) ansi-escapes: 4.3.2 chalk: 4.1.2 cli-cursor: 3.1.0 @@ -23129,7 +23313,7 @@ snapshots: '@jest/expect': 30.4.1 '@jest/test-result': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 22.19.19 + '@types/node': 18.19.130 chalk: 4.1.2 co: 4.6.0 dedent: 1.7.2 @@ -23149,7 +23333,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@30.4.2(@types/node@22.19.19): + jest-cli@30.4.2(@types/node@20.19.43): dependencies: '@jest/core': 30.4.2 '@jest/test-result': 30.4.1 @@ -23157,10 +23341,10 @@ snapshots: chalk: 4.1.2 exit-x: 0.2.2 import-local: 3.2.0 - jest-config: 30.4.2(@types/node@22.19.19) + jest-config: 30.4.2(@types/node@20.19.43) jest-util: 30.4.1 jest-validate: 30.4.1 - yargs: 17.7.2 + yargs: 17.7.3 transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -23168,7 +23352,7 @@ snapshots: - supports-color - ts-node - jest-config@30.4.2(@types/node@22.19.19): + jest-config@30.4.2(@types/node@18.19.130): dependencies: '@babel/core': 7.29.7 '@jest/get-type': 30.1.0 @@ -23194,7 +23378,38 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.19.19 + '@types/node': 18.19.130 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-config@30.4.2(@types/node@20.19.43): + dependencies: + '@babel/core': 7.29.7 + '@jest/get-type': 30.1.0 + '@jest/pattern': 30.4.0 + '@jest/test-sequencer': 30.4.1 + '@jest/types': 30.4.1 + babel-jest: 30.4.1(@babel/core@7.29.7) + chalk: 4.1.2 + ci-info: 4.4.0 + deepmerge: 4.3.1 + glob: 10.5.0 + graceful-fs: 4.2.11 + jest-circus: 30.4.2 + jest-docblock: 30.4.0 + jest-environment-node: 30.4.1 + jest-regex-util: 30.4.0 + jest-resolve: 30.4.1 + jest-runner: 30.4.2 + jest-util: 30.4.1 + jest-validate: 30.4.1 + parse-json: 5.2.0 + pretty-format: 30.4.1 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.19.43 transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -23223,7 +23438,7 @@ snapshots: '@jest/environment': 30.4.1 '@jest/fake-timers': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 22.19.19 + '@types/node': 18.19.130 jest-mock: 30.4.1 jest-util: 30.4.1 jest-validate: 30.4.1 @@ -23231,7 +23446,7 @@ snapshots: jest-haste-map@30.4.1: dependencies: '@jest/types': 30.4.1 - '@types/node': 22.19.19 + '@types/node': 18.19.130 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -23271,7 +23486,7 @@ snapshots: jest-mock@30.4.1: dependencies: '@jest/types': 30.4.1 - '@types/node': 22.19.19 + '@types/node': 18.19.130 jest-util: 30.4.1 jest-pnp-resolver@1.2.3(jest-resolve@30.4.1): @@ -23305,7 +23520,7 @@ snapshots: '@jest/test-result': 30.4.1 '@jest/transform': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 22.19.19 + '@types/node': 18.19.130 chalk: 4.1.2 emittery: 0.13.1 exit-x: 0.2.2 @@ -23334,7 +23549,7 @@ snapshots: '@jest/test-result': 30.4.1 '@jest/transform': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 22.19.19 + '@types/node': 18.19.130 chalk: 4.1.2 cjs-module-lexer: 2.2.0 collect-v8-coverage: 1.0.3 @@ -23355,7 +23570,7 @@ snapshots: jest-snapshot@30.4.1: dependencies: '@babel/core': 7.29.7 - '@babel/generator': 7.29.7 + '@babel/generator': 7.29.8 '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) '@babel/types': 7.29.7 @@ -23381,7 +23596,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.19.19 + '@types/node': 18.19.130 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -23390,7 +23605,7 @@ snapshots: jest-util@30.4.1: dependencies: '@jest/types': 30.4.1 - '@types/node': 22.19.19 + '@types/node': 18.19.130 chalk: 4.1.2 ci-info: 4.4.0 graceful-fs: 4.2.11 @@ -23409,7 +23624,7 @@ snapshots: dependencies: '@jest/test-result': 30.4.1 '@jest/types': 30.4.1 - '@types/node': 22.19.19 + '@types/node': 18.19.130 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -23418,31 +23633,31 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.19.19 + '@types/node': 18.19.130 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.19.19 + '@types/node': 18.19.130 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@30.4.1: dependencies: - '@types/node': 22.19.19 + '@types/node': 18.19.130 '@ungap/structured-clone': 1.3.1 jest-util: 30.4.1 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@30.4.2(@types/node@22.19.19): + jest@30.4.2(@types/node@20.19.43): dependencies: '@jest/core': 30.4.2 '@jest/types': 30.4.1 import-local: 3.2.0 - jest-cli: 30.4.2(@types/node@22.19.19) + jest-cli: 30.4.2(@types/node@20.19.43) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -23493,9 +23708,13 @@ snapshots: dependencies: argparse: 2.0.1 + js-yaml@4.3.2: + dependencies: + argparse: 2.0.1 + jsbn@0.1.1: {} - jscodeshift@17.3.0(@babel/preset-env@7.29.7(@babel/core@7.29.7)): + jscodeshift@17.4.0(@babel/preset-env@7.29.7(@babel/core@7.29.7)): dependencies: '@babel/core': 7.29.7 '@babel/parser': 7.29.7 @@ -23509,9 +23728,9 @@ snapshots: '@babel/register': 7.29.7(@babel/core@7.29.7) flow-parser: 0.316.0 graceful-fs: 4.2.11 - micromatch: 4.0.8 neo-async: 2.6.2 picocolors: 1.1.1 + picomatch: 4.0.4 recast: 0.23.11 tmp: 0.2.7 write-file-atomic: 5.0.1 @@ -23682,11 +23901,11 @@ snapshots: lead@4.0.0: {} - less-loader@12.3.3(less@3.13.1)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + less-loader@12.3.3(less@3.13.1)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: less: 3.13.1 optionalDependencies: - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) less@3.13.1: dependencies: @@ -23773,7 +23992,7 @@ snapshots: linguist-languages@7.31.2: {} - linkify-it@5.0.1: + linkify-it@5.0.2: dependencies: uc.micro: 2.1.0 @@ -23892,8 +24111,6 @@ snapshots: lodash@4.17.21: {} - lodash@4.17.23: {} - lodash@4.18.1: {} log-symbols@2.2.0: @@ -23935,7 +24152,7 @@ snapshots: dependencies: js-tokens: 4.0.0 - lottie-react@2.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + lottie-react@2.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: lottie-web: 5.13.0 react: 18.3.1 @@ -23985,10 +24202,6 @@ snapshots: dependencies: yallist: 3.1.1 - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - lru-cache@7.18.3: {} lz-string@1.5.0: {} @@ -24056,11 +24269,11 @@ snapshots: markdown-extensions@2.0.0: {} - markdown-it@14.2.0: + markdown-it@14.3.1: dependencies: argparse: 2.0.1 entities: 4.5.0 - linkify-it: 5.0.1 + linkify-it: 5.0.2 mdurl: 2.0.0 punycode.js: 2.3.1 uc.micro: 2.1.0 @@ -24634,21 +24847,21 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.10.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + mini-css-extract-plugin@2.10.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: schema-utils: 4.3.3 tapable: 2.3.3 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) minimalistic-assert@1.0.1: {} - minimatch@10.2.5: + minimatch@10.2.3: dependencies: brace-expansion: 5.0.6 - minimatch@3.0.8: + minimatch@10.2.5: dependencies: - brace-expansion: 1.1.15 + brace-expansion: 5.0.6 minimatch@3.1.5: dependencies: @@ -24738,15 +24951,15 @@ snapshots: mobile-detect@1.4.5: {} - mobx-react-lite@4.1.1(mobx@6.15.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + mobx-react-lite@4.1.1(mobx@6.16.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - mobx: 6.15.4 + mobx: 6.16.1 react: 18.3.1 use-sync-external-store: 1.6.0(react@18.3.1) optionalDependencies: react-dom: 18.3.1(react@18.3.1) - mobx@6.15.4: {} + mobx@6.16.1: {} moo-color@1.0.3: dependencies: @@ -24799,6 +25012,8 @@ snapshots: nanoid@3.3.12: {} + nanoid@3.3.18: {} + napi-postinstall@0.3.4: {} native-request@1.1.2: @@ -24831,6 +25046,9 @@ snapshots: lower-case: 2.0.2 tslib: 2.8.1 + node-addon-api@7.1.1: + optional: true + node-exports-info@1.6.0: dependencies: array.prototype.flatmap: 1.3.3 @@ -24852,6 +25070,8 @@ snapshots: node-releases@2.0.46: {} + node-releases@2.0.54: {} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 @@ -25098,30 +25318,30 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - oxc-parser@0.125.0: + oxc-parser@0.139.0: dependencies: - '@oxc-project/types': 0.125.0 + '@oxc-project/types': 0.139.0 optionalDependencies: - '@oxc-parser/binding-android-arm-eabi': 0.125.0 - '@oxc-parser/binding-android-arm64': 0.125.0 - '@oxc-parser/binding-darwin-arm64': 0.125.0 - '@oxc-parser/binding-darwin-x64': 0.125.0 - '@oxc-parser/binding-freebsd-x64': 0.125.0 - '@oxc-parser/binding-linux-arm-gnueabihf': 0.125.0 - '@oxc-parser/binding-linux-arm-musleabihf': 0.125.0 - '@oxc-parser/binding-linux-arm64-gnu': 0.125.0 - '@oxc-parser/binding-linux-arm64-musl': 0.125.0 - '@oxc-parser/binding-linux-ppc64-gnu': 0.125.0 - '@oxc-parser/binding-linux-riscv64-gnu': 0.125.0 - '@oxc-parser/binding-linux-riscv64-musl': 0.125.0 - '@oxc-parser/binding-linux-s390x-gnu': 0.125.0 - '@oxc-parser/binding-linux-x64-gnu': 0.125.0 - '@oxc-parser/binding-linux-x64-musl': 0.125.0 - '@oxc-parser/binding-openharmony-arm64': 0.125.0 - '@oxc-parser/binding-wasm32-wasi': 0.125.0 - '@oxc-parser/binding-win32-arm64-msvc': 0.125.0 - '@oxc-parser/binding-win32-ia32-msvc': 0.125.0 - '@oxc-parser/binding-win32-x64-msvc': 0.125.0 + '@oxc-parser/binding-android-arm-eabi': 0.139.0 + '@oxc-parser/binding-android-arm64': 0.139.0 + '@oxc-parser/binding-darwin-arm64': 0.139.0 + '@oxc-parser/binding-darwin-x64': 0.139.0 + '@oxc-parser/binding-freebsd-x64': 0.139.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.139.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.139.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.139.0 + '@oxc-parser/binding-linux-arm64-musl': 0.139.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.139.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.139.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.139.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.139.0 + '@oxc-parser/binding-linux-x64-gnu': 0.139.0 + '@oxc-parser/binding-linux-x64-musl': 0.139.0 + '@oxc-parser/binding-openharmony-arm64': 0.139.0 + '@oxc-parser/binding-wasm32-wasi': 0.139.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.139.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.139.0 + '@oxc-parser/binding-win32-x64-msvc': 0.139.0 p-cancelable@0.4.1: {} @@ -25201,7 +25421,7 @@ snapshots: ky: 1.14.3 registry-auth-token: 5.1.1 registry-url: 6.0.1 - semver: 7.6.3 + semver: 7.8.1 package-json@4.0.1: dependencies: @@ -25481,244 +25701,244 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-calc@9.0.1(postcss@8.5.15): + postcss-calc@9.0.1(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-colormin@6.1.0(postcss@8.5.15): + postcss-colormin@6.1.0(postcss@8.5.28): dependencies: browserslist: 4.28.2 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-convert-values@6.1.0(postcss@8.5.15): + postcss-convert-values@6.1.0(postcss@8.5.28): dependencies: browserslist: 4.28.2 - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-css-variables@0.19.0(postcss@8.5.15): + postcss-css-variables@0.19.0(postcss@8.5.28): dependencies: balanced-match: 1.0.2 escape-string-regexp: 1.0.5 extend: 3.0.2 - postcss: 8.5.15 + postcss: 8.5.28 - postcss-discard-comments@6.0.2(postcss@8.5.15): + postcss-discard-comments@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-discard-duplicates@6.0.3(postcss@8.5.15): + postcss-discard-duplicates@6.0.3(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-discard-empty@6.0.3(postcss@8.5.15): + postcss-discard-empty@6.0.3(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-discard-overridden@6.0.2(postcss@8.5.15): + postcss-discard-overridden@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-html-transform@4.1.3(postcss@8.5.15): + postcss-html-transform@4.1.3(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-import@16.1.1(postcss@8.5.15): + postcss-import@16.2.0(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.12 - postcss-load-config@5.1.0(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4): + postcss-load-config@5.1.0(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13): dependencies: lilconfig: 3.1.3 yaml: 2.9.0 optionalDependencies: jiti: 2.7.0 - postcss: 8.5.15 - tsx: 4.22.4 + postcss: 8.5.28 + tsx: 4.23.13 - postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4)(yaml@2.9.0): + postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13)(yaml@2.9.0): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.7.0 - postcss: 8.5.15 - tsx: 4.22.4 + postcss: 8.5.28 + tsx: 4.23.13 yaml: 2.9.0 - postcss-loader@8.2.1(postcss@8.5.15)(typescript@5.9.3)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + postcss-loader@8.2.1(postcss@8.5.28)(typescript@5.9.3)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: cosmiconfig: 9.0.1(typescript@5.9.3) jiti: 2.7.0 - postcss: 8.5.15 + postcss: 8.5.28 semver: 7.8.1 optionalDependencies: - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) transitivePeerDependencies: - typescript - postcss-merge-longhand@6.0.5(postcss@8.5.15): + postcss-merge-longhand@6.0.5(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - stylehacks: 6.1.1(postcss@8.5.15) + stylehacks: 6.1.1(postcss@8.5.28) - postcss-merge-rules@6.1.1(postcss@8.5.15): + postcss-merge-rules@6.1.1(postcss@8.5.28): dependencies: browserslist: 4.28.2 caniuse-api: 3.0.0 - cssnano-utils: 4.0.2(postcss@8.5.15) - postcss: 8.5.15 + cssnano-utils: 4.0.2(postcss@8.5.28) + postcss: 8.5.28 postcss-selector-parser: 6.1.2 - postcss-minify-font-values@6.1.0(postcss@8.5.15): + postcss-minify-font-values@6.1.0(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-minify-gradients@6.0.3(postcss@8.5.15): + postcss-minify-gradients@6.0.3(postcss@8.5.28): dependencies: colord: 2.9.3 - cssnano-utils: 4.0.2(postcss@8.5.15) - postcss: 8.5.15 + cssnano-utils: 4.0.2(postcss@8.5.28) + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-minify-params@6.1.0(postcss@8.5.15): + postcss-minify-params@6.1.0(postcss@8.5.28): dependencies: browserslist: 4.28.2 - cssnano-utils: 4.0.2(postcss@8.5.15) - postcss: 8.5.15 + cssnano-utils: 4.0.2(postcss@8.5.28) + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-minify-selectors@6.0.4(postcss@8.5.15): + postcss-minify-selectors@6.0.4(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-selector-parser: 6.1.2 - postcss-modules-extract-imports@3.1.0(postcss@8.5.15): + postcss-modules-extract-imports@3.1.0(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-modules-local-by-default@4.2.0(postcss@8.5.15): + postcss-modules-local-by-default@4.2.0(postcss@8.5.28): dependencies: - icss-utils: 5.1.0(postcss@8.5.15) - postcss: 8.5.15 + icss-utils: 5.1.0(postcss@8.5.28) + postcss: 8.5.28 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.5.15): + postcss-modules-scope@3.2.1(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-selector-parser: 7.1.1 - postcss-modules-values@4.0.0(postcss@8.5.15): + postcss-modules-values@4.0.0(postcss@8.5.28): dependencies: - icss-utils: 5.1.0(postcss@8.5.15) - postcss: 8.5.15 + icss-utils: 5.1.0(postcss@8.5.28) + postcss: 8.5.28 - postcss-modules@6.0.1(postcss@8.5.15): + postcss-modules@6.0.1(postcss@8.5.28): dependencies: generic-names: 4.0.0 - icss-utils: 5.1.0(postcss@8.5.15) + icss-utils: 5.1.0(postcss@8.5.28) lodash.camelcase: 4.3.0 - postcss: 8.5.15 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.15) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.15) - postcss-modules-scope: 3.2.1(postcss@8.5.15) - postcss-modules-values: 4.0.0(postcss@8.5.15) + postcss: 8.5.28 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.28) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.28) + postcss-modules-scope: 3.2.1(postcss@8.5.28) + postcss-modules-values: 4.0.0(postcss@8.5.28) string-hash: 1.1.3 - postcss-normalize-charset@6.0.2(postcss@8.5.15): + postcss-normalize-charset@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-normalize-display-values@6.0.2(postcss@8.5.15): + postcss-normalize-display-values@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-positions@6.0.2(postcss@8.5.15): + postcss-normalize-positions@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@6.0.2(postcss@8.5.15): + postcss-normalize-repeat-style@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-string@6.0.2(postcss@8.5.15): + postcss-normalize-string@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@6.0.2(postcss@8.5.15): + postcss-normalize-timing-functions@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@6.1.0(postcss@8.5.15): + postcss-normalize-unicode@6.1.0(postcss@8.5.28): dependencies: browserslist: 4.28.2 - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-url@6.0.2(postcss@8.5.15): + postcss-normalize-url@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@6.0.2(postcss@8.5.15): + postcss-normalize-whitespace@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-ordered-values@6.0.2(postcss@8.5.15): + postcss-ordered-values@6.0.2(postcss@8.5.28): dependencies: - cssnano-utils: 4.0.2(postcss@8.5.15) - postcss: 8.5.15 + cssnano-utils: 4.0.2(postcss@8.5.28) + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-plugin-constparse@4.1.3(postcss@8.5.15): + postcss-plugin-constparse@4.1.3(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-pxtransform@4.1.3(postcss@8.5.15): + postcss-pxtransform@4.1.3(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-reduce-initial@6.1.0(postcss@8.5.15): + postcss-reduce-initial@6.1.0(postcss@8.5.28): dependencies: browserslist: 4.28.2 caniuse-api: 3.0.0 - postcss: 8.5.15 + postcss: 8.5.28 - postcss-reduce-transforms@6.0.2(postcss@8.5.15): + postcss-reduce-transforms@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 postcss-resolve-nested-selector@0.1.6: {} - postcss-rtlcss@5.7.1(postcss@8.5.15): + postcss-rtlcss@5.7.1(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 rtlcss: 4.3.0 - postcss-safe-parser@7.0.1(postcss@8.5.15): + postcss-safe-parser@7.0.1(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-scss@4.0.9(postcss@8.5.15): + postcss-scss@4.0.9(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-selector-parser@6.1.2: dependencies: @@ -25730,23 +25950,23 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-svgo@6.0.3(postcss@8.5.15): + postcss-svgo@6.0.3(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 svgo: 3.3.3 - postcss-unique-selectors@6.0.4(postcss@8.5.15): + postcss-unique-selectors@6.0.4(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-selector-parser: 6.1.2 - postcss-url@10.1.4(postcss@8.5.15): + postcss-url@10.1.4(postcss@8.5.28): dependencies: make-dir: 3.1.0 mime: 2.5.2 minimatch: 3.1.5 - postcss: 8.5.15 + postcss: 8.5.28 xxhashjs: 0.2.2 postcss-value-parser@4.2.0: {} @@ -25756,9 +25976,9 @@ snapshots: picocolors: 0.2.1 source-map: 0.6.1 - postcss@8.5.15: + postcss@8.5.28: dependencies: - nanoid: 3.3.12 + nanoid: 3.3.18 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -25774,12 +25994,12 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier-markdown-table@1.0.3(linguist-languages@7.31.2)(prettier@3.8.3): + prettier-markdown-table@1.0.3(linguist-languages@7.31.2)(prettier@3.9.6): dependencies: linguist-languages: 7.31.2 - prettier: 3.8.3 + prettier: 3.9.6 - prettier@3.8.3: {} + prettier@3.9.6: {} pretty-bytes@5.6.0: {} @@ -26027,11 +26247,11 @@ snapshots: react-is@19.2.6: {} - react-markdown@9.1.0(@types/react@18.3.29)(react@18.3.1): + react-markdown@9.1.0(@types/react@18.3.31)(react@18.3.1): dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@types/react': 18.3.29 + '@types/react': 18.3.31 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.6 html-url-attributes: 3.0.1 @@ -26051,17 +26271,17 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 - react-refresh@0.14.2: {} - react-refresh@0.17.0: {} - react-router-dom@7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-refresh@0.18.0: {} + + react-router-dom@7.18.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router: 7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-router: 7.18.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-router@7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-router@7.18.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: cookie: 1.1.1 react: 18.3.1 @@ -26164,6 +26384,8 @@ snapshots: readdirp@4.1.2: {} + readdirp@5.1.1: {} + recast@0.23.11: dependencies: ast-types: 0.16.1 @@ -26335,7 +26557,7 @@ snapshots: relateurl@0.2.7: {} - release-it@18.1.2(@types/node@22.19.19)(typescript@5.9.3): + release-it@18.1.2(@types/node@20.19.43)(typescript@5.9.3): dependencies: '@iarna/toml': 2.2.5 '@octokit/rest': 21.0.2 @@ -26346,7 +26568,7 @@ snapshots: execa: 9.5.2 git-url-parse: 16.0.0 globby: 14.0.2 - inquirer: 12.3.0(@types/node@22.19.19) + inquirer: 12.3.0(@types/node@20.19.43) issue-parser: 7.0.1 lodash: 4.17.21 mime-types: 2.1.35 @@ -26486,7 +26708,7 @@ snapshots: adjust-sourcemap-loader: 4.0.0 convert-source-map: 1.9.0 loader-utils: 2.0.4 - postcss: 8.5.15 + postcss: 8.5.28 source-map: 0.6.1 resolve@1.22.12: @@ -26540,7 +26762,7 @@ snapshots: dependencies: glob: 7.2.3 - rollup-plugin-ts@3.4.5(@babel/core@7.29.7)(@babel/plugin-transform-runtime@7.29.7(@babel/core@7.29.7))(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@babel/preset-typescript@7.29.7(@babel/core@7.29.7))(@babel/runtime@7.29.7)(@swc/core@1.15.40(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(rollup@2.80.0)(typescript@5.9.3): + rollup-plugin-ts@3.4.5(@babel/core@7.29.7)(@babel/plugin-transform-runtime@7.29.7(@babel/core@7.29.7))(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@babel/preset-typescript@7.29.7(@babel/core@7.29.7))(@babel/runtime@7.29.7)(@swc/core@1.16.1(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(rollup@2.80.0)(typescript@5.9.3): dependencies: '@rollup/pluginutils': 5.4.0(rollup@2.80.0) '@wessberg/stringutil': 1.0.19 @@ -26560,7 +26782,7 @@ snapshots: '@babel/preset-env': 7.29.7(@babel/core@7.29.7) '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7) '@babel/runtime': 7.29.7 - '@swc/core': 1.15.40(@swc/helpers@0.5.23) + '@swc/core': 1.16.1(@swc/helpers@0.5.23) '@swc/helpers': 0.5.23 rollup@2.80.0: @@ -26571,35 +26793,36 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - rollup@4.60.4: + rollup@4.63.1: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.60.4 - '@rollup/rollup-android-arm64': 4.60.4 - '@rollup/rollup-darwin-arm64': 4.60.4 - '@rollup/rollup-darwin-x64': 4.60.4 - '@rollup/rollup-freebsd-arm64': 4.60.4 - '@rollup/rollup-freebsd-x64': 4.60.4 - '@rollup/rollup-linux-arm-gnueabihf': 4.60.4 - '@rollup/rollup-linux-arm-musleabihf': 4.60.4 - '@rollup/rollup-linux-arm64-gnu': 4.60.4 - '@rollup/rollup-linux-arm64-musl': 4.60.4 - '@rollup/rollup-linux-loong64-gnu': 4.60.4 - '@rollup/rollup-linux-loong64-musl': 4.60.4 - '@rollup/rollup-linux-ppc64-gnu': 4.60.4 - '@rollup/rollup-linux-ppc64-musl': 4.60.4 - '@rollup/rollup-linux-riscv64-gnu': 4.60.4 - '@rollup/rollup-linux-riscv64-musl': 4.60.4 - '@rollup/rollup-linux-s390x-gnu': 4.60.4 - '@rollup/rollup-linux-x64-gnu': 4.60.4 - '@rollup/rollup-linux-x64-musl': 4.60.4 - '@rollup/rollup-openbsd-x64': 4.60.4 - '@rollup/rollup-openharmony-arm64': 4.60.4 - '@rollup/rollup-win32-arm64-msvc': 4.60.4 - '@rollup/rollup-win32-ia32-msvc': 4.60.4 - '@rollup/rollup-win32-x64-gnu': 4.60.4 - '@rollup/rollup-win32-x64-msvc': 4.60.4 + '@napi-rs/lzma-linux-x64-gnu': 1.5.1 + '@rollup/rollup-android-arm-eabi': 4.63.1 + '@rollup/rollup-android-arm64': 4.63.1 + '@rollup/rollup-darwin-arm64': 4.63.1 + '@rollup/rollup-darwin-x64': 4.63.1 + '@rollup/rollup-freebsd-arm64': 4.63.1 + '@rollup/rollup-freebsd-x64': 4.63.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.63.1 + '@rollup/rollup-linux-arm-musleabihf': 4.63.1 + '@rollup/rollup-linux-arm64-gnu': 4.63.1 + '@rollup/rollup-linux-arm64-musl': 4.63.1 + '@rollup/rollup-linux-loong64-gnu': 4.63.1 + '@rollup/rollup-linux-loong64-musl': 4.63.1 + '@rollup/rollup-linux-ppc64-gnu': 4.63.1 + '@rollup/rollup-linux-ppc64-musl': 4.63.1 + '@rollup/rollup-linux-riscv64-gnu': 4.63.1 + '@rollup/rollup-linux-riscv64-musl': 4.63.1 + '@rollup/rollup-linux-s390x-gnu': 4.63.1 + '@rollup/rollup-linux-x64-gnu': 4.63.1 + '@rollup/rollup-linux-x64-musl': 4.63.1 + '@rollup/rollup-openbsd-x64': 4.63.1 + '@rollup/rollup-openharmony-arm64': 4.63.1 + '@rollup/rollup-win32-arm64-msvc': 4.63.1 + '@rollup/rollup-win32-ia32-msvc': 4.63.1 + '@rollup/rollup-win32-x64-gnu': 4.63.1 + '@rollup/rollup-win32-x64-msvc': 4.63.1 fsevents: 2.3.3 router@2.2.0: @@ -26620,7 +26843,7 @@ snapshots: dependencies: escalade: 3.2.0 picocolors: 1.1.1 - postcss: 8.5.15 + postcss: 8.5.28 strip-json-comments: 3.1.1 run-applescript@7.1.0: {} @@ -26672,18 +26895,20 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@14.2.1(sass@1.77.6)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + sass-loader@14.2.1(sass@1.103.1)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: neo-async: 2.6.2 optionalDependencies: - sass: 1.77.6 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + sass: 1.103.1 + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) - sass@1.77.6: + sass@1.103.1: dependencies: - chokidar: 3.6.0 - immutable: 4.3.8 + chokidar: 5.0.0 + immutable: 5.1.9 source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.6.0 sax@1.2.4: {} @@ -26742,7 +26967,7 @@ snapshots: loglevel: 1.9.2 loglevel-plugin-prefix: 0.8.4 pretty-bytes: 5.6.0 - sass: 1.77.6 + sass: 1.103.1 tslib: 1.14.1 seek-bzip@1.0.6: @@ -26768,14 +26993,14 @@ snapshots: semver@6.3.1: {} - semver@7.5.4: - dependencies: - lru-cache: 6.0.0 - semver@7.6.3: {} + semver@7.7.4: {} + semver@7.8.1: {} + semver@7.8.5: {} + send@0.19.2: dependencies: debug: 2.6.9 @@ -26900,6 +27125,11 @@ snapshots: shell-quote@1.8.4: {} + shelljs@0.10.0: + dependencies: + execa: 5.1.1 + fast-glob: 3.3.3 + shelljs@0.8.5: dependencies: glob: 7.2.3 @@ -27379,9 +27609,9 @@ snapshots: stubborn-utils@1.0.2: {} - style-loader@3.3.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + style-loader@3.3.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) style-to-js@1.1.21: dependencies: @@ -27391,10 +27621,10 @@ snapshots: dependencies: inline-style-parser: 0.2.7 - stylehacks@6.1.1(postcss@8.5.15): + stylehacks@6.1.1(postcss@8.5.28): dependencies: browserslist: 4.28.2 - postcss: 8.5.15 + postcss: 8.5.28 postcss-selector-parser: 6.1.2 stylelint@16.26.1(typescript@5.9.3): @@ -27427,9 +27657,9 @@ snapshots: micromatch: 4.0.8 normalize-path: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.15 + postcss: 8.5.28 postcss-resolve-nested-selector: 0.1.6 - postcss-safe-parser: 7.0.1(postcss@8.5.15) + postcss-safe-parser: 7.0.1(postcss@8.5.28) postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 resolve-from: 5.0.0 @@ -27442,13 +27672,13 @@ snapshots: - supports-color - typescript - stylus-loader@8.1.3(stylus@0.64.0)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + stylus-loader@8.1.3(stylus@0.64.0)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: fast-glob: 3.3.3 normalize-path: 3.0.0 stylus: 0.64.0 optionalDependencies: - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) stylus@0.64.0: dependencies: @@ -27567,30 +27797,30 @@ snapshots: dependencies: execa: 0.7.0 - terser-webpack-plugin@5.6.1(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + terser-webpack-plugin@5.6.1(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 terser: 5.48.0 - webpack: 5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) optionalDependencies: - '@swc/core': 1.15.40(@swc/helpers@0.5.23) + '@swc/core': 1.16.1(@swc/helpers@0.5.23) lightningcss: 1.32.0 - postcss: 8.5.15 + postcss: 8.5.28 - terser-webpack-plugin@5.6.1(@swc/core@1.3.96(@swc/helpers@0.5.23))(esbuild@0.21.5)(lightningcss@1.32.0)(postcss@8.5.15)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + terser-webpack-plugin@5.6.1(@swc/core@1.3.96(@swc/helpers@0.5.23))(esbuild@0.21.5)(lightningcss@1.32.0)(postcss@8.5.28)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 terser: 5.48.0 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) optionalDependencies: '@swc/core': 1.3.96(@swc/helpers@0.5.23) esbuild: 0.21.5 lightningcss: 1.32.0 - postcss: 8.5.15 + postcss: 8.5.28 terser@5.48.0: dependencies: @@ -27761,16 +27991,16 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.4.11(@babel/core@7.29.7)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@30.4.1(@babel/core@7.29.7))(jest-util@30.4.1)(jest@30.4.2(@types/node@22.19.19))(typescript@5.9.3): + ts-jest@29.4.12(@babel/core@7.29.7)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@30.4.1(@babel/core@7.29.7))(jest-util@30.4.1)(jest@30.4.2(@types/node@20.19.43))(typescript@5.9.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 handlebars: 4.7.9 - jest: 30.4.2(@types/node@22.19.19) + jest: 30.4.2(@types/node@20.19.43) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.8.1 + semver: 7.8.5 type-fest: 4.41.0 typescript: 5.9.3 yargs-parser: 21.1.1 @@ -27792,7 +28022,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.19))(@swc/core@1.15.40(@swc/helpers@0.5.23))(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4)(typescript@5.9.3)(yaml@2.9.0): + tsup@8.5.1(@microsoft/api-extractor@7.59.0(@types/node@22.20.1))(@swc/core@1.16.1(@swc/helpers@0.5.23))(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13)(typescript@5.9.3)(yaml@2.9.0): dependencies: bundle-require: 5.1.0(esbuild@0.27.7) cac: 6.7.14 @@ -27803,18 +28033,18 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4)(yaml@2.9.0) + postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13)(yaml@2.9.0) resolve-from: 5.0.0 - rollup: 4.60.4 + rollup: 4.63.1 source-map: 0.7.6 sucrase: 3.35.1 tinyexec: 0.3.2 tinyglobby: 0.2.17 tree-kill: 1.2.2 optionalDependencies: - '@microsoft/api-extractor': 7.47.7(@types/node@22.19.19) - '@swc/core': 1.15.40(@swc/helpers@0.5.23) - postcss: 8.5.15 + '@microsoft/api-extractor': 7.59.0(@types/node@22.20.1) + '@swc/core': 1.16.1(@swc/helpers@0.5.23) + postcss: 8.5.28 typescript: 5.9.3 transitivePeerDependencies: - jiti @@ -27822,7 +28052,7 @@ snapshots: - tsx - yaml - tsx@4.22.4: + tsx@4.23.13: dependencies: esbuild: 0.28.0 optionalDependencies: @@ -27906,19 +28136,17 @@ snapshots: typedarray@0.0.6: {} - typescript-eslint@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): + typescript-eslint@8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) - '@typescript-eslint/parser': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) - eslint: 9.39.4(jiti@2.7.0) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3) + eslint: 9.39.5(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - typescript@5.4.2: {} - typescript@5.9.3: {} ua-parser-js@1.0.41: {} @@ -28055,6 +28283,11 @@ snapshots: unpipe@1.0.0: {} + unplugin-utils@0.3.2: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.4 + unplugin@2.3.11: dependencies: '@jridgewell/remapping': 2.3.5 @@ -28099,6 +28332,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.3.2(browserslist@4.28.8): + dependencies: + browserslist: 4.28.8 + escalade: 3.2.0 + picocolors: 1.1.1 + update-notifier@2.5.0: dependencies: boxen: 1.3.0 @@ -28122,7 +28361,7 @@ snapshots: is-npm: 6.1.0 latest-version: 9.0.0 pupa: 3.3.0 - semver: 7.6.3 + semver: 7.8.1 xdg-basedir: 5.1.0 upper-case-first@2.0.2: @@ -28270,13 +28509,13 @@ snapshots: - bare-abort-controller - react-native-b4a - vite-node@1.6.1(@types/node@18.19.130)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0): + vite-node@1.6.1(@types/node@18.19.130)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@8.1.1) pathe: 1.1.2 picocolors: 1.1.1 - vite: 5.4.21(@types/node@18.19.130)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vite: 5.4.21(@types/node@18.19.130)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) transitivePeerDependencies: - '@types/node' - less @@ -28288,13 +28527,13 @@ snapshots: - supports-color - terser - vite-node@1.6.1(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0): + vite-node@1.6.1(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@8.1.1) pathe: 1.1.2 picocolors: 1.1.1 - vite: 5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vite: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) transitivePeerDependencies: - '@types/node' - less @@ -28306,13 +28545,13 @@ snapshots: - supports-color - terser - vite-node@2.1.9(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0): + vite-node@2.1.9(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 1.1.2 - vite: 5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vite: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) transitivePeerDependencies: - '@types/node' - less @@ -28324,13 +28563,13 @@ snapshots: - supports-color - terser - vite-node@3.2.4(@types/node@20.19.41)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0): + vite-node@3.2.4(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 5.4.21(@types/node@20.19.41)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vite: 5.4.21(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) transitivePeerDependencies: - '@types/node' - less @@ -28342,81 +28581,99 @@ snapshots: - supports-color - terser - vite-plugin-dts@4.2.1(@types/node@20.19.41)(rollup@4.60.4)(typescript@5.9.3)(vite@5.4.21(@types/node@20.19.41)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)): + vite-node@3.2.4(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: - '@microsoft/api-extractor': 7.47.7(@types/node@20.19.41) - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) + cac: 6.7.14 + debug: 4.4.3(supports-color@8.1.1) + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite-plugin-dts@4.5.4(@types/node@20.19.43)(rollup@4.63.1)(typescript@5.9.3)(vite@5.4.21(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)): + dependencies: + '@microsoft/api-extractor': 7.59.0(@types/node@20.19.43) + '@rollup/pluginutils': 5.4.0(rollup@4.63.1) '@volar/typescript': 2.4.28 - '@vue/language-core': 2.1.6(typescript@5.9.3) + '@vue/language-core': 2.2.0(typescript@5.9.3) compare-versions: 6.1.1 debug: 4.4.3(supports-color@8.1.1) kolorist: 1.8.0 - local-pkg: 0.5.1 + local-pkg: 1.2.1 magic-string: 0.30.21 typescript: 5.9.3 optionalDependencies: - vite: 5.4.21(@types/node@20.19.41)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vite: 5.4.21(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-static-copy@0.17.1(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)): + vite-plugin-static-copy@0.17.1(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)): dependencies: chokidar: 3.6.0 fast-glob: 3.3.3 - fs-extra: 11.3.5 + fs-extra: 11.4.0 picocolors: 1.1.1 - vite: 5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vite: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) - vite@5.4.21(@types/node@18.19.130)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0): + vite@5.4.21(@types/node@18.19.130)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: esbuild: 0.21.5 - postcss: 8.5.15 - rollup: 4.60.4 + postcss: 8.5.28 + rollup: 4.63.1 optionalDependencies: '@types/node': 18.19.130 fsevents: 2.3.3 less: 3.13.1 lightningcss: 1.32.0 - sass: 1.77.6 + sass: 1.103.1 stylus: 0.64.0 terser: 5.48.0 - vite@5.4.21(@types/node@20.19.41)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0): + vite@5.4.21(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: esbuild: 0.21.5 - postcss: 8.5.15 - rollup: 4.60.4 + postcss: 8.5.28 + rollup: 4.63.1 optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 20.19.43 fsevents: 2.3.3 less: 3.13.1 lightningcss: 1.32.0 - sass: 1.77.6 + sass: 1.103.1 stylus: 0.64.0 terser: 5.48.0 - vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0): + vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: esbuild: 0.21.5 - postcss: 8.5.15 - rollup: 4.60.4 + postcss: 8.5.28 + rollup: 4.63.1 optionalDependencies: - '@types/node': 22.19.19 + '@types/node': 22.20.1 fsevents: 2.3.3 less: 3.13.1 lightningcss: 1.32.0 - sass: 1.77.6 + sass: 1.103.1 stylus: 0.64.0 terser: 5.48.0 - vitest-canvas-mock@0.3.3(vitest@3.2.4): + vitest-canvas-mock@0.3.3(vitest@3.2.7): dependencies: jest-canvas-mock: 2.5.2 - vitest: 3.2.4(@types/debug@4.1.13)(@types/node@20.19.41)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vitest: 3.2.7(@types/debug@4.1.13)(@types/node@20.19.43)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) - vitest@1.6.1(@types/node@18.19.130)(@vitest/ui@2.1.9(vitest@3.2.4))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0): + vitest@1.6.1(@types/node@18.19.130)(@vitest/ui@2.1.9(vitest@3.2.7))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: '@vitest/expect': 1.6.1 '@vitest/runner': 1.6.1 @@ -28435,12 +28692,12 @@ snapshots: strip-literal: 2.1.1 tinybench: 2.9.0 tinypool: 0.8.4 - vite: 5.4.21(@types/node@18.19.130)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) - vite-node: 1.6.1(@types/node@18.19.130)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vite: 5.4.21(@types/node@18.19.130)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + vite-node: 1.6.1(@types/node@18.19.130)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 18.19.130 - '@vitest/ui': 2.1.9(vitest@3.2.4) + '@vitest/ui': 2.1.9(vitest@3.2.7) happy-dom: 14.12.3 jsdom: 24.1.3 transitivePeerDependencies: @@ -28453,7 +28710,7 @@ snapshots: - supports-color - terser - vitest@1.6.1(@types/node@22.19.19)(@vitest/ui@2.1.9(vitest@3.2.4))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0): + vitest@1.6.1(@types/node@22.20.1)(@vitest/ui@2.1.9(vitest@3.2.7))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: '@vitest/expect': 1.6.1 '@vitest/runner': 1.6.1 @@ -28472,12 +28729,12 @@ snapshots: strip-literal: 2.1.1 tinybench: 2.9.0 tinypool: 0.8.4 - vite: 5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) - vite-node: 1.6.1(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vite: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + vite-node: 1.6.1(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.19.19 - '@vitest/ui': 2.1.9(vitest@3.2.4) + '@types/node': 22.20.1 + '@vitest/ui': 2.1.9(vitest@3.2.7) happy-dom: 14.12.3 jsdom: 24.1.3 transitivePeerDependencies: @@ -28490,10 +28747,10 @@ snapshots: - supports-color - terser - vitest@2.1.9(@types/node@22.19.19)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0): + vitest@2.1.9(@types/node@22.20.1)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)) + '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9 @@ -28509,11 +28766,11 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.1.1 tinyrainbow: 1.2.0 - vite: 5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) - vite-node: 2.1.9(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vite: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + vite-node: 2.1.9(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.19.19 + '@types/node': 22.20.1 '@vitest/ui': 2.1.9(vitest@2.1.9) happy-dom: 14.12.3 jsdom: 24.1.3 @@ -28528,16 +28785,58 @@ snapshots: - supports-color - terser - vitest@3.2.4(@types/debug@4.1.13)(@types/node@20.19.41)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0): + vitest@3.2.7(@types/debug@4.1.13)(@types/node@20.19.43)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): + dependencies: + '@types/chai': 5.2.3 + '@vitest/expect': 3.2.7 + '@vitest/mocker': 3.2.7(vite@5.4.21(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)) + '@vitest/pretty-format': 3.2.7 + '@vitest/runner': 3.2.7 + '@vitest/snapshot': 3.2.7 + '@vitest/spy': 3.2.7 + '@vitest/utils': 3.2.7 + chai: 5.3.3 + debug: 4.4.3(supports-color@8.1.1) + expect-type: 1.3.0 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.17 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 5.4.21(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + vite-node: 3.2.4(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.13 + '@types/node': 20.19.43 + '@vitest/ui': 2.1.9(vitest@3.2.7) + happy-dom: 14.12.3 + jsdom: 24.1.3 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vitest@3.2.7(@types/debug@4.1.13)(@types/node@22.20.1)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: '@types/chai': 5.2.3 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@5.4.21(@types/node@20.19.41)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 + '@vitest/expect': 3.2.7 + '@vitest/mocker': 3.2.7(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)) + '@vitest/pretty-format': 3.2.7 + '@vitest/runner': 3.2.7 + '@vitest/snapshot': 3.2.7 + '@vitest/spy': 3.2.7 + '@vitest/utils': 3.2.7 chai: 5.3.3 debug: 4.4.3(supports-color@8.1.1) expect-type: 1.3.0 @@ -28550,13 +28849,13 @@ snapshots: tinyglobby: 0.2.17 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 5.4.21(@types/node@20.19.41)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) - vite-node: 3.2.4(@types/node@20.19.41)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vite: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + vite-node: 3.2.4(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.13 - '@types/node': 20.19.41 - '@vitest/ui': 2.1.9(vitest@3.2.4) + '@types/node': 22.20.1 + '@vitest/ui': 2.1.9(vitest@3.2.7) happy-dom: 14.12.3 jsdom: 24.1.3 transitivePeerDependencies: @@ -28577,10 +28876,10 @@ snapshots: vscode-uri@3.1.0: {} - vue-eslint-parser@9.4.3(eslint@9.39.4(jiti@2.7.0)): + vue-eslint-parser@9.4.3(eslint@9.39.5(jiti@2.7.0)): dependencies: debug: 4.4.3(supports-color@8.1.1) - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.5(jiti@2.7.0) eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 @@ -28596,7 +28895,7 @@ snapshots: wait-on@9.0.4(debug@4.4.3): dependencies: - axios: 1.16.1(debug@4.4.3) + axios: 1.20.0(debug@4.4.3) joi: 18.2.1 lodash: 4.18.1 minimist: 1.2.8 @@ -28629,26 +28928,26 @@ snapshots: deepmerge: 1.5.2 javascript-stringify: 2.1.0 - webpack-dev-middleware@5.3.4(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + webpack-dev-middleware@5.3.4(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.3.3 - webpack: 5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) optional: true - webpack-dev-middleware@5.3.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + webpack-dev-middleware@5.3.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.3.3 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) - webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -28678,10 +28977,10 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpack-dev-middleware: 5.3.4(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) ws: 8.21.0 optionalDependencies: - webpack: 5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) transitivePeerDependencies: - bufferutil - debug @@ -28689,7 +28988,7 @@ snapshots: - utf-8-validate optional: true - webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -28719,10 +29018,10 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpack-dev-middleware: 5.3.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) ws: 8.21.0 optionalDependencies: - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) transitivePeerDependencies: - bufferutil - debug @@ -28743,7 +29042,7 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15): + webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.9 @@ -28766,7 +29065,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.3.3 - terser-webpack-plugin: 5.6.1(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + terser-webpack-plugin: 5.6.1(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) watchpack: 2.5.1 webpack-sources: 3.5.0 transitivePeerDependencies: @@ -28783,7 +29082,7 @@ snapshots: - postcss - uglify-js - webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15): + webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.9 @@ -28806,7 +29105,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.3.3 - terser-webpack-plugin: 5.6.1(@swc/core@1.3.96(@swc/helpers@0.5.23))(esbuild@0.21.5)(lightningcss@1.32.0)(postcss@8.5.15)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + terser-webpack-plugin: 5.6.1(@swc/core@1.3.96(@swc/helpers@0.5.23))(esbuild@0.21.5)(lightningcss@1.32.0)(postcss@8.5.28)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) watchpack: 2.5.1 webpack-sources: 3.5.0 transitivePeerDependencies: @@ -28823,13 +29122,13 @@ snapshots: - postcss - uglify-js - webpackbar@5.0.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + webpackbar@5.0.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: chalk: 4.1.2 consola: 2.15.3 pretty-time: 1.1.0 std-env: 3.10.0 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) websocket-driver@0.7.4: dependencies: @@ -29020,7 +29319,7 @@ snapshots: y18n: 5.0.8 yargs-parser: 20.2.9 - yargs@17.7.2: + yargs@17.7.3: dependencies: cliui: 8.0.1 escalade: 3.2.0 From 038bf258ac1a2b5ab592870c6f3ff5003f1041b7 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 4 Sep 2026 10:47:56 +0800 Subject: [PATCH 19/25] docs: enhance CLI documentation for multi-version support in NutUI React and Taro --- .../doc/docs/ai-react/cli.en-US.md | 26 ++++++++++++++++++- .../sites-react/doc/docs/ai-react/cli.md | 26 ++++++++++++++++++- .../doc/docs/ai-react/mcp.en-US.md | 2 ++ .../sites-react/doc/docs/ai-react/mcp.md | 2 ++ .../sites-react/doc/docs/ai-taro/cli.en-US.md | 26 ++++++++++++++++++- src/sites/sites-react/doc/docs/ai-taro/cli.md | 26 ++++++++++++++++++- .../sites-react/doc/docs/ai-taro/mcp.en-US.md | 2 ++ src/sites/sites-react/doc/docs/ai-taro/mcp.md | 2 ++ 8 files changed, 108 insertions(+), 4 deletions(-) diff --git a/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md b/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md index 6f57f34522..4e6d103af5 100644 --- a/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md @@ -9,6 +9,7 @@ This guide explains how to use `@nutui/nutui-react-cli` to query NutUI-React com ## Highlights - **Fully offline, zero API key** — Component metadata, docs, and demos are bundled at build time. Once installed, queries run locally in milliseconds with no network requests and no latency. +- **Multi-version snapshots** — Bundles offline snapshots of multiple major versions (v3 / v4). Use `--nutui-version` to query the exact API of any version; when omitted, the CLI auto-detects the version your project uses. - **Structured output** — Every command supports `--format json` for agents to parse directly, instead of regex-matching text. - **Smart correction** — Component names are case-insensitive; typed `Buttn`? The CLI suggests `Button` based on edit distance rather than just erroring out. - **Bilingual docs** — The `doc` command supports `--lang zh|en` to switch between Chinese and English. @@ -44,6 +45,7 @@ nutui-react demo Button # List all H5 demo names for the component nutui-react demo Button demo1 # View a demo's source nutui-react token # Global Design Tokens nutui-react token Button # Component-level Design Tokens +nutui-react --nv 3.1.0 info Button # Query a specific NutUI version's API (auto-detected if omitted) nutui-react mcp # Start a local MCP server for IDE integration ``` @@ -65,9 +67,31 @@ When a component name isn't found, the CLI returns a "did you mean" suggestion ( | Flag | Description | Default | | --- | --- | --- | | `--format, -f ` | Output format; agents should prefer `json` | `text` | +| `--nutui-version, --nv ` | Target NutUI version (e.g. `3`, `3.1.0`, `4.0.0-beta.7`) | Auto-detected | | `--lang, -l ` | Doc language (for `doc` / `mcp`) | `zh` | | `--help, -h` | Show help | - | -| `--version, -v` | Print the CLI version | - | +| `--version, -v` | Print the CLI's own version (not the NutUI version) | - | + +## Multi-version + +The CLI bundles offline snapshots of multiple NutUI major versions (currently `v3.0.20`, `v3.1.0`, `v4.0.0-beta.7`), so it can answer with the right component knowledge for whichever NutUI version a machine uses. Pass `--nutui-version` (alias `--nv`) to target a version — `3`, `3.1.0`, `4.0.0-beta.7`, etc. all work: + +```bash +nutui-react --nv 3.1.0 info Button # Button props in 3.1.0 +nutui-react --nv 3 list # latest v3 snapshot +nutui-react --nv 4.0.0-beta.7 doc Cell +``` + +When `--nutui-version` is omitted, the target version is **auto-detected** in this order: + +1. the `--nutui-version ` flag; +2. the installed version in the project's `node_modules/@nutui/nutui-react/package.json`; +3. the `dependencies` / `devDependencies` / `peerDependencies` declaration in the project's `package.json` (handles `^3.1.0`, `~3.1.0`, etc.); +4. a fallback to the default major version (`v4`) latest. + +Version routing is `major.minor`-grained: a request for `3.0.5` lands on the highest patch snapshot of that minor series, `v3.0.20`; a minor higher than any available falls back to the nearest older minor of that major. Every query reports the resolved version and its source (the header in `text` output, the `_meta` field in `json` output). + +> When the version can be inferred from the project, prefer not passing `--nutui-version` and let the CLI detect it. The `-v / --version` semantics stay unchanged — it still prints the CLI's own version. ## Usage with AI tools diff --git a/src/sites/sites-react/doc/docs/ai-react/cli.md b/src/sites/sites-react/doc/docs/ai-react/cli.md index 77265cc12e..5f70c672cc 100644 --- a/src/sites/sites-react/doc/docs/ai-react/cli.md +++ b/src/sites/sites-react/doc/docs/ai-react/cli.md @@ -9,6 +9,7 @@ ## 亮点 - **完全离线、零 API Key** — 组件元数据与文档、示例在构建期打包进入,安装后本地毫秒级查询,无网络请求、无延迟。 +- **多版本快照** — 随包内置 v3 / v4 多个大版本的离线快照,`--nutui-version` 可查询任意版本的精确 API,未指定时自动检测项目所用版本。 - **结构化输出** — 所有命令支持 `--format json`,供 Agent 直接解析,而非正则抓文本。 - **智能纠错** — 组件名大小写不敏感;输入 `Buttn`?CLI 基于编辑距离建议 `Button`,而非直接报错。 - **双语文档** — `doc` 命令支持 `--lang zh|en` 切换中英文。 @@ -44,6 +45,7 @@ nutui-react demo Button # 列出组件的全部 H5 示例名 nutui-react demo Button demo1 # 查看某个示例的源码 nutui-react token # 全局 Design Token nutui-react token Button # 组件级 Design Token +nutui-react --nv 3.1.0 info Button # 查指定 NutUI 版本的 API(省略则自动检测) nutui-react mcp # 启动本地 MCP 服务,供 IDE 集成 ``` @@ -65,9 +67,31 @@ nutui-react mcp # 启动本地 MCP 服务,供 IDE 集成 | 参数 | 说明 | 默认值 | | --- | --- | --- | | `--format, -f ` | 输出格式;Agent 应优先用 `json` | `text` | +| `--nutui-version, --nv ` | 目标 NutUI 版本(如 `3`、`3.1.0`、`4.0.0-beta.7`) | 自动检测 | | `--lang, -l ` | 文档语言(用于 `doc` / `mcp`) | `zh` | | `--help, -h` | 显示帮助 | - | -| `--version, -v` | 打印 CLI 版本号 | - | +| `--version, -v` | 打印 CLI 自身版本号(非 NutUI 版本) | - | + +## 多版本 + +CLI 随包内置多个 NutUI 大版本的离线快照(当前:`v3.0.20`、`v3.1.0`、`v4.0.0-beta.7`),可对同一台机器上不同 NutUI 版本给出对应的组件知识。用 `--nutui-version`(别名 `--nv`)指定目标版本,支持 `3`、`3.1.0`、`4.0.0-beta.7` 等写法: + +```bash +nutui-react --nv 3.1.0 info Button # 查 3.1.0 的 Button Props +nutui-react --nv 3 list # 查 v3 最新快照 +nutui-react --nv 4.0.0-beta.7 doc Cell +``` + +未指定 `--nutui-version` 时,按以下顺序**自动检测**目标版本: + +1. `--nutui-version ` 显式指定; +2. 项目 `node_modules/@nutui/nutui-react/package.json` 的实际安装版本; +3. 项目 `package.json` 的 `dependencies` / `devDependencies` / `peerDependencies` 声明(兼容 `^3.1.0`、`~3.1.0` 等); +4. 兜底到默认大版本(`v4`)的 latest。 + +版本路由按 `major.minor` 粒度:请求 `3.0.5` 会落到该 minor 系列的最高 patch 快照 `v3.0.20`;请求的 minor 若高于已有,回退到该 major 最近的旧 minor。每次查询的输出都会标明实际命中的版本与来源(`text` 输出的头部、`json` 输出的 `_meta` 字段)。 + +> 在项目里能自动推断版本时,优先不显式传 `--nutui-version`,让 CLI 自行检测更省心。`-v / --version` 语义保持不变,仍输出 CLI 自身版本。 ## 在 AI 工具中使用 diff --git a/src/sites/sites-react/doc/docs/ai-react/mcp.en-US.md b/src/sites/sites-react/doc/docs/ai-react/mcp.en-US.md index 88be6273a6..bf3529e207 100644 --- a/src/sites/sites-react/doc/docs/ai-react/mcp.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-react/mcp.en-US.md @@ -24,6 +24,8 @@ The CLI is "the agent runs commands"; MCP registers the same capabilities as IDE All tools are read-only, side-effect-free, and do not access the external network. +Every tool accepts an optional `nutuiVersion` argument (e.g. `3.1.0`, `4.0.0-beta.7`) to target a NutUI major version; when omitted, the version your project uses is auto-detected, falling back to the default major. See the [CLI multi-version notes](/#/en-US/ai/cli). + ### Prompts | Prompt | Description | diff --git a/src/sites/sites-react/doc/docs/ai-react/mcp.md b/src/sites/sites-react/doc/docs/ai-react/mcp.md index f153dd4e05..fcfb9c4152 100644 --- a/src/sites/sites-react/doc/docs/ai-react/mcp.md +++ b/src/sites/sites-react/doc/docs/ai-react/mcp.md @@ -24,6 +24,8 @@ CLI 是「Agent 主动敲命令」,MCP 则把同一份能力注册成 IDE 原 所有工具均为只读、无副作用、不访问外部网络。 +每个工具都接受可选入参 `nutuiVersion`(如 `3.1.0`、`4.0.0-beta.7`),用于指定目标 NutUI 大版本;省略时自动检测项目所用版本,检测不到则回退默认大版本。详见 [CLI 的「多版本」说明](/#/zh-CN/ai/cli)。 + ### 提示词 | 提示词 | 说明 | diff --git a/src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md b/src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md index bcf7e77e5f..55abeaea22 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md @@ -11,6 +11,7 @@ It serves `@nutui/nutui-react-taro` (Taro cross-platform / mini-program). For H5 ## Highlights - **Fully offline, zero API key** — Component metadata, docs, and demos are bundled at build time. Once installed, queries run locally in milliseconds with no network requests and no latency. +- **Multi-version snapshots** — Bundles offline snapshots of multiple major versions (v3 / v4). Use `--nutui-version` to query the exact API of any version; when omitted, the CLI auto-detects the version your project uses. - **Structured output** — Every command supports `--format json` for agents to parse directly, instead of regex-matching text. - **Smart correction** — Component names are case-insensitive; typed `Buttn`? The CLI suggests `Button` based on edit distance rather than just erroring out. - **Taro-specific data** — Props and demos come from the Taro-side docs (`doc.taro.md` / `demos/taro`), which may differ from the H5 package. @@ -45,6 +46,7 @@ nutui-react-taro demo Button # List all Taro demo names for the com nutui-react-taro demo Button demo1 # View a demo's source nutui-react-taro token # Global Design Tokens nutui-react-taro token Button # Component-level Design Tokens +nutui-react-taro --nv 3.1.0 info Button # Query a specific NutUI version's API (auto-detected if omitted) nutui-react-taro mcp # Start a local MCP server for IDE integration ``` @@ -66,8 +68,30 @@ When a component name isn't found, the CLI returns a "did you mean" suggestion ( | Flag | Description | Default | | --- | --- | --- | | `--format, -f ` | Output format; agents should prefer `json` | `text` | +| `--nutui-version, --nv ` | Target NutUI version (e.g. `3`, `3.1.0`, `4.0.0-beta.7`) | Auto-detected | | `--help, -h` | Show help | - | -| `--version, -v` | Print the CLI version | - | +| `--version, -v` | Print the CLI's own version (not the NutUI version) | - | + +## Multi-version + +The CLI bundles offline snapshots of multiple NutUI major versions (currently `v3.0.20`, `v3.1.0`, `v4.0.0-beta.7`), so it can answer with the right component knowledge for whichever NutUI version a machine uses. Pass `--nutui-version` (alias `--nv`) to target a version — `3`, `3.1.0`, `4.0.0-beta.7`, etc. all work: + +```bash +nutui-react-taro --nv 3.1.0 info Button +nutui-react-taro --nv 3 list +nutui-react-taro --nv 4.0.0-beta.7 doc Cell +``` + +When `--nutui-version` is omitted, the target version is **auto-detected** in this order: + +1. the `--nutui-version ` flag; +2. the installed version in the project's `node_modules/@nutui/nutui-react-taro/package.json`; +3. the `dependencies` / `devDependencies` / `peerDependencies` declaration in the project's `package.json` (handles `^3.1.0`, `~3.1.0`, etc.); +4. a fallback to the default major version (`v4`) latest. + +Version routing is `major.minor`-grained: a request for `3.0.5` lands on the highest patch snapshot of that minor series, `v3.0.20`; a minor higher than any available falls back to the nearest older minor of that major. Every query reports the resolved version and its source (the header in `text` output, the `_meta` field in `json` output). + +> When the version can be inferred from the project, prefer not passing `--nutui-version` and let the CLI detect it. The `-v / --version` semantics stay unchanged — it still prints the CLI's own version. ## Usage with AI tools diff --git a/src/sites/sites-react/doc/docs/ai-taro/cli.md b/src/sites/sites-react/doc/docs/ai-taro/cli.md index 9914decb53..15760e7815 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/cli.md +++ b/src/sites/sites-react/doc/docs/ai-taro/cli.md @@ -11,6 +11,7 @@ ## 亮点 - **完全离线、零 API Key** — 组件元数据与文档、示例在构建期打包进入,安装后本地毫秒级查询,无网络请求、无延迟。 +- **多版本快照** — 随包内置 v3 / v4 多个大版本的离线快照,`--nutui-version` 可查询任意版本的精确 API,未指定时自动检测项目所用版本。 - **结构化输出** — 所有命令支持 `--format json`,供 Agent 直接解析,而非正则抓文本。 - **智能纠错** — 组件名大小写不敏感;输入 `Buttn`?CLI 基于编辑距离建议 `Button`,而非直接报错。 - **Taro 端专属数据** — Props 与示例取自 Taro 端文档(`doc.taro.md` / `demos/taro`),与 H5 包可能不同。 @@ -45,6 +46,7 @@ nutui-react-taro demo Button # 列出组件的全部 Taro 示例名 nutui-react-taro demo Button demo1 # 查看某个示例的源码 nutui-react-taro token # 全局 Design Token nutui-react-taro token Button # 组件级 Design Token +nutui-react-taro --nv 3.1.0 info Button # 查指定 NutUI 版本的 API(省略则自动检测) nutui-react-taro mcp # 启动本地 MCP 服务,供 IDE 集成 ``` @@ -66,8 +68,30 @@ nutui-react-taro mcp # 启动本地 MCP 服务,供 IDE | 参数 | 说明 | 默认值 | | --- | --- | --- | | `--format, -f ` | 输出格式;Agent 应优先用 `json` | `text` | +| `--nutui-version, --nv ` | 目标 NutUI 版本(如 `3`、`3.1.0`、`4.0.0-beta.7`) | 自动检测 | | `--help, -h` | 显示帮助 | - | -| `--version, -v` | 打印 CLI 版本号 | - | +| `--version, -v` | 打印 CLI 自身版本号(非 NutUI 版本) | - | + +## 多版本 + +CLI 随包内置多个 NutUI 大版本的离线快照(当前:`v3.0.20`、`v3.1.0`、`v4.0.0-beta.7`),可对同一台机器上不同 NutUI 版本给出对应的组件知识。用 `--nutui-version`(别名 `--nv`)指定目标版本,支持 `3`、`3.1.0`、`4.0.0-beta.7` 等写法: + +```bash +nutui-react-taro --nv 3.1.0 info Button +nutui-react-taro --nv 3 list +nutui-react-taro --nv 4.0.0-beta.7 doc Cell +``` + +未指定 `--nutui-version` 时,按以下顺序**自动检测**目标版本: + +1. `--nutui-version ` 显式指定; +2. 项目 `node_modules/@nutui/nutui-react-taro/package.json` 的实际安装版本; +3. 项目 `package.json` 的 `dependencies` / `devDependencies` / `peerDependencies` 声明(兼容 `^3.1.0`、`~3.1.0` 等); +4. 兜底到默认大版本(`v4`)的 latest。 + +版本路由按 `major.minor` 粒度:请求 `3.0.5` 会落到该 minor 系列的最高 patch 快照 `v3.0.20`;请求的 minor 若高于已有,回退到该 major 最近的旧 minor。每次查询的输出都会标明实际命中的版本与来源(`text` 输出的头部、`json` 输出的 `_meta` 字段)。 + +> 在项目里能自动推断版本时,优先不显式传 `--nutui-version`,让 CLI 自行检测更省心。`-v / --version` 语义保持不变,仍输出 CLI 自身版本。 ## 在 AI 工具中使用 diff --git a/src/sites/sites-react/doc/docs/ai-taro/mcp.en-US.md b/src/sites/sites-react/doc/docs/ai-taro/mcp.en-US.md index 7954f590df..bde99593fa 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/mcp.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-taro/mcp.en-US.md @@ -24,6 +24,8 @@ The CLI is "the agent runs commands"; MCP registers the same capabilities as IDE All tools are read-only, side-effect-free, and do not access the external network. +Every tool accepts an optional `nutuiVersion` argument (e.g. `3.1.0`, `4.0.0-beta.7`) to target a NutUI major version; when omitted, the version your project uses is auto-detected, falling back to the default major. See the [CLI multi-version notes](/#/en-US/ai/cli). + ### Prompts | Prompt | Description | diff --git a/src/sites/sites-react/doc/docs/ai-taro/mcp.md b/src/sites/sites-react/doc/docs/ai-taro/mcp.md index fe692f461d..2ab7a61dd7 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/mcp.md +++ b/src/sites/sites-react/doc/docs/ai-taro/mcp.md @@ -24,6 +24,8 @@ CLI 是「Agent 主动敲命令」,MCP 则把同一份能力注册成 IDE 原 所有工具均为只读、无副作用、不访问外部网络。 +每个工具都接受可选入参 `nutuiVersion`(如 `3.1.0`、`4.0.0-beta.7`),用于指定目标 NutUI 大版本;省略时自动检测项目所用版本,检测不到则回退默认大版本。详见 [CLI 的「多版本」说明](/#/zh-CN/ai/cli)。 + ### 提示词 | 提示词 | 说明 | From 28604bbb7155123c89f1d21984c86556d6b8b710 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 4 Sep 2026 10:51:39 +0800 Subject: [PATCH 20/25] chore: release v4.1.0 for NutUI React and Taro CLI with multi-version knowledge query capability --- packages/nutui-react-cli/CHANGELOG.md | 6 ++++++ packages/nutui-react-cli/package.json | 2 +- packages/nutui-react-taro-cli/CHANGELOG.md | 6 ++++++ packages/nutui-react-taro-cli/package.json | 2 +- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/nutui-react-cli/CHANGELOG.md b/packages/nutui-react-cli/CHANGELOG.md index c47b57e4cc..04cdf2060a 100644 --- a/packages/nutui-react-cli/CHANGELOG.md +++ b/packages/nutui-react-cli/CHANGELOG.md @@ -2,6 +2,12 @@ 本包版本号自 `4.0.0` 起与组件包 `@nutui/nutui-react` 对齐,便于未来支持多版本查询。 +## v4.1.0 + +`2026-09-04` + +- feat: 新增多版本知识查询能力 + ## v4.0.0 `2026-08-21` diff --git a/packages/nutui-react-cli/package.json b/packages/nutui-react-cli/package.json index 1e31f59e11..24de0bf54d 100644 --- a/packages/nutui-react-cli/package.json +++ b/packages/nutui-react-cli/package.json @@ -1,6 +1,6 @@ { "name": "@nutui/nutui-react-cli", - "version": "4.0.0", + "version": "4.1.0", "type": "module", "description": "NutUI React 面向 AI Coding 的离线知识查询 CLI:list / info / doc / demo / token。", "keywords": [ diff --git a/packages/nutui-react-taro-cli/CHANGELOG.md b/packages/nutui-react-taro-cli/CHANGELOG.md index c3d777bb6e..a67261183b 100644 --- a/packages/nutui-react-taro-cli/CHANGELOG.md +++ b/packages/nutui-react-taro-cli/CHANGELOG.md @@ -2,6 +2,12 @@ 本包版本号自 `4.0.0` 起与组件包 `@nutui/nutui-react-taro` 对齐,便于未来支持多版本查询。 +## v4.1.0 + +`2026-09-04` + +- feat: 新增多版本知识查询能力 + ## v4.0.0 `2026-08-21` diff --git a/packages/nutui-react-taro-cli/package.json b/packages/nutui-react-taro-cli/package.json index ff3eac3e44..c7632d9f04 100644 --- a/packages/nutui-react-taro-cli/package.json +++ b/packages/nutui-react-taro-cli/package.json @@ -1,6 +1,6 @@ { "name": "@nutui/nutui-react-taro-cli", - "version": "4.0.0", + "version": "4.1.0", "type": "module", "description": "NutUI React Taro 面向 AI Coding 的离线知识查询 CLI:list / info / doc / demo / token。", "keywords": [ From 96df95198d7aeb59e0d94ed72c5d2f6373a9a9f8 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 4 Sep 2026 14:45:57 +0800 Subject: [PATCH 21/25] feat: add migration capabilities from v3 to v4 in NutUI React CLI --- .../scripts/prepare-data.mjs | 23 ++- .../src/__tests__/diff-compute.test.ts | 107 +++++++++++ .../src/__tests__/migrate-parse.test.ts | 94 ++++++++++ .../src/__tests__/scan.test.ts | 87 +++++++++ packages/nutui-react-cli-core/src/cli.ts | 62 +++++++ .../src/commands/diff-compute.ts | 99 ++++++++++ .../nutui-react-cli-core/src/commands/diff.ts | 110 ++++++++++++ .../src/commands/migrate-parse.ts | 76 ++++++++ .../src/commands/migrate.ts | 169 ++++++++++++++++++ packages/nutui-react-cli-core/src/data.ts | 11 ++ packages/nutui-react-cli-core/src/error.ts | 2 + .../nutui-react-cli-core/src/mcp/tools.ts | 152 ++++++++++++++++ .../nutui-react-cli-core/src/utils/scan.ts | 114 ++++++++++++ packages/nutui-react-cli/CHANGELOG.md | 1 + packages/nutui-react-cli/README.md | 33 +++- .../nutui-react-cli/scripts/prepare-data.mjs | 4 + .../skills/nutui-react-v3-to-v4/README.md | 29 +++ .../skills/nutui-react-v3-to-v4/SKILL.en.md | 138 ++++++++++++++ .../skills/nutui-react-v3-to-v4/SKILL.md | 138 ++++++++++++++ packages/nutui-react-taro-cli/CHANGELOG.md | 1 + packages/nutui-react-taro-cli/README.md | 33 +++- .../scripts/prepare-data.mjs | 4 + .../nutui-react-taro-v3-to-v4/README.md | 29 +++ .../nutui-react-taro-v3-to-v4/SKILL.en.md | 138 ++++++++++++++ .../skills/nutui-react-taro-v3-to-v4/SKILL.md | 138 ++++++++++++++ 25 files changed, 1785 insertions(+), 7 deletions(-) create mode 100644 packages/nutui-react-cli-core/src/__tests__/diff-compute.test.ts create mode 100644 packages/nutui-react-cli-core/src/__tests__/migrate-parse.test.ts create mode 100644 packages/nutui-react-cli-core/src/__tests__/scan.test.ts create mode 100644 packages/nutui-react-cli-core/src/commands/diff-compute.ts create mode 100644 packages/nutui-react-cli-core/src/commands/diff.ts create mode 100644 packages/nutui-react-cli-core/src/commands/migrate-parse.ts create mode 100644 packages/nutui-react-cli-core/src/commands/migrate.ts create mode 100644 packages/nutui-react-cli-core/src/utils/scan.ts create mode 100644 packages/nutui-react-cli/skills/nutui-react-v3-to-v4/README.md create mode 100644 packages/nutui-react-cli/skills/nutui-react-v3-to-v4/SKILL.en.md create mode 100644 packages/nutui-react-cli/skills/nutui-react-v3-to-v4/SKILL.md create mode 100644 packages/nutui-react-taro-cli/skills/nutui-react-taro-v3-to-v4/README.md create mode 100644 packages/nutui-react-taro-cli/skills/nutui-react-taro-v3-to-v4/SKILL.en.md create mode 100644 packages/nutui-react-taro-cli/skills/nutui-react-taro-v3-to-v4/SKILL.md diff --git a/packages/nutui-react-cli-core/scripts/prepare-data.mjs b/packages/nutui-react-cli-core/scripts/prepare-data.mjs index 8ff8f6a094..5e6b82f030 100644 --- a/packages/nutui-react-cli-core/scripts/prepare-data.mjs +++ b/packages/nutui-react-cli-core/scripts/prepare-data.mjs @@ -26,9 +26,12 @@ function copyRepoFile(srcRepoRoot, relPosixPath, destAbs) { * @param {Record} opts.docKeys lang -> meta.docs 的 key。{zh:'h5', en:'enUS'} 或 {zh:'taro'} * @param {'h5'|'taro'} opts.demoKey 取 meta.demos 的哪一端 * @param {'api'|'apiTaro'} opts.apiField 取哪一端的 API 表,归一写入快照的 `api` 字段 - * @returns {{ docCount:number, demoCount:number, missing:number, libVersion:string }} + * @param {Record} [opts.migrationDocs] "from-v{n}" -> 该 tag worktree 内迁移文档的 posix 相对路径。 + * 如 { 'from-v3': 'src/sites/sites-react/doc/docs/react/migrate-from-v3.md' }。文档只在部分 tag(如 v4)存在, + * 不存在时静默跳过。命中则复制到 outDir/migrations/from-v{n}.md,供 migrate 命令读取。 + * @returns {{ docCount:number, demoCount:number, missing:number, libVersion:string, migrationCount:number }} */ -export function prepareData({ srcMetaPath, srcRepoRoot, outDir, docKeys, demoKey, apiField }) { +export function prepareData({ srcMetaPath, srcRepoRoot, outDir, docKeys, demoKey, apiField, migrationDocs }) { const meta = JSON.parse(fs.readFileSync(srcMetaPath, 'utf-8')) // 全量重建该版本目录,避免残留上一次的组件。 @@ -81,7 +84,15 @@ export function prepareData({ srcMetaPath, srcRepoRoot, outDir, docKeys, demoKey } } - return { docCount, demoCount, missing: missing.length, libVersion: meta.libVersion, missingList: missing } + // 4. 迁移文档:把该 tag worktree 内存在的迁移文档复制到 outDir/migrations/from-v{n}.md。 + // 文档随 v4 beta 手写维护、只在部分 tag 存在(v3 tag 无),缺失静默跳过。 + let migrationCount = 0 + for (const [key, rel] of Object.entries(migrationDocs || {})) { + const ok = copyRepoFile(srcRepoRoot, rel, path.join(outDir, 'migrations', `${key}.md`)) + if (ok) migrationCount++ + } + + return { docCount, demoCount, missing: missing.length, libVersion: meta.libVersion, missingList: missing, migrationCount } } /** @@ -93,8 +104,9 @@ export function prepareData({ srcMetaPath, srcRepoRoot, outDir, docKeys, demoKey * @param {Record} opts.docKeys * @param {'h5'|'taro'} opts.demoKey * @param {'api'|'apiTaro'} opts.apiField + * @param {Record} [opts.migrationDocs] "from-v{n}" -> 迁移文档相对仓库根的 posix 路径(按平台不同) */ -export async function prepareAllVersions({ pkgDir, docKeys, demoKey, apiField }) { +export async function prepareAllVersions({ pkgDir, docKeys, demoKey, apiField, migrationDocs }) { const { sync } = await import('./sync.mjs') const platform = apiField === 'apiTaro' ? 'Taro' : 'React/H5' console.log(`🚀 building multi-version data snapshots (${platform}) for ${pkgDir} ...\n`) @@ -116,9 +128,10 @@ export async function prepareAllVersions({ pkgDir, docKeys, demoKey, apiField }) docKeys, demoKey, apiField, + migrationDocs, }) console.log( - ` ✅ v${snap.clean}: docs ${res.docCount} + demos ${res.demoCount}(libVersion ${res.libVersion})` + ` ✅ v${snap.clean}: docs ${res.docCount} + demos ${res.demoCount}${res.migrationCount ? ` + 迁移文档 ${res.migrationCount}` : ''}(libVersion ${res.libVersion})` ) if (res.missing) { console.log(` ⚠️ ${res.missing} 个文件在 worktree 缺失(已跳过)`) diff --git a/packages/nutui-react-cli-core/src/__tests__/diff-compute.test.ts b/packages/nutui-react-cli-core/src/__tests__/diff-compute.test.ts new file mode 100644 index 0000000000..efbd9dc384 --- /dev/null +++ b/packages/nutui-react-cli-core/src/__tests__/diff-compute.test.ts @@ -0,0 +1,107 @@ +import { describe, expect, it } from 'vitest' +import { diffComponent, diffMeta } from '../commands/diff-compute.js' +import type { ApiTable, Component, Meta } from '../types.js' + +// 造一个只含 props 表的最小 Component。 +function comp(id: string, name: string, rows: ApiTable['rows'], subComponent: string | null = null): Component { + return { + id, + name, + cName: name, + version: '0', + category: { name: '', enName: '' }, + taro: false, + v15: false, + v16: false, + docs: { h5: null, enUS: null, zhTW: null, taro: null }, + demos: { h5: [], taro: [] }, + api: { + tables: [{ name: 'Props', kind: 'props', sourceComponent: id, subComponent, rows }], + }, + tokens: [], + } +} + +function meta(components: Record, libVersion = '0'): Meta { + return { + schemaVersion: '1', + libVersion, + componentCount: Object.keys(components).length, + apiComponentCount: 0, + categories: [], + globalTokens: [], + components, + } +} + +describe('diffComponent', () => { + it('检测默认值与类型变更(Empty size/status 场景)', () => { + const v1 = comp('empty', 'Empty', [ + { prop: 'size', desc: '', type: '`small` | `base`', default: 'base' }, + { prop: 'status', desc: '', type: '`empty` | `error`', default: 'empty' }, + ]) + const v2 = comp('empty', 'Empty', [ + { prop: 'size', desc: '', type: '`full` | `half`', default: 'half' }, + { prop: 'status', desc: '', type: '`network`', default: 'network' }, + ]) + const d = diffComponent('Empty', v1, v2) + expect(d.added).toEqual([]) + expect(d.removed).toEqual([]) + expect(d.changed).toHaveLength(2) + const size = d.changed.find((c) => c.prop === 'size')! + expect(size).toMatchObject({ defaultFrom: 'base', defaultTo: 'half' }) + expect(size.typeFrom).toBe('`small` | `base`') + expect(size.typeTo).toBe('`full` | `half`') + }) + + it('检测新增与移除的 prop', () => { + const v1 = comp('x', 'X', [{ prop: 'old', desc: '', type: 'string', default: '' }]) + const v2 = comp('x', 'X', [{ prop: 'new', desc: '', type: 'string', default: '' }]) + const d = diffComponent('X', v1, v2) + expect(d.added.map((r) => r.prop)).toEqual(['new']) + expect(d.removed.map((r) => r.prop)).toEqual(['old']) + expect(d.changed).toEqual([]) + }) + + it('完全一致时无差异', () => { + const rows = [{ prop: 'a', desc: '', type: 'string', default: '1' }] + const d = diffComponent('X', comp('x', 'X', rows), comp('x', 'X', rows)) + expect(d.added).toEqual([]) + expect(d.removed).toEqual([]) + expect(d.changed).toEqual([]) + }) + + it('组件仅在一版存在(v2 新增组件):全部记为 added', () => { + const v2 = comp('n', 'New', [{ prop: 'a', desc: '', type: 'string', default: '' }]) + const d = diffComponent('New', undefined, v2) + expect(d.added).toHaveLength(1) + }) + + it('子组件表的 prop 以 Sub.prop 作 key,不与主表混淆', () => { + const v1 = comp('x', 'X', [{ prop: 'value', desc: '', type: 'string', default: '' }], 'Item') + const v2 = comp('x', 'X', [{ prop: 'value', desc: '', type: 'number', default: '' }], 'Item') + const d = diffComponent('X', v1, v2) + expect(d.changed[0].prop).toBe('Item.value') + }) +}) + +describe('diffMeta', () => { + const metaA = meta({ + empty: comp('empty', 'Empty', [{ prop: 'size', desc: '', type: 's', default: 'base' }]), + button: comp('button', 'Button', [{ prop: 'type', desc: '', type: 's', default: '' }]), + }, '3.1.0') + const metaB = meta({ + empty: comp('empty', 'Empty', [{ prop: 'size', desc: '', type: 's', default: 'half' }]), + button: comp('button', 'Button', [{ prop: 'type', desc: '', type: 's', default: '' }]), + }, '4.0.0') + + it('只返回有差异的组件(Button 无变化被过滤)', () => { + const diffs = diffMeta(metaA, metaB) + expect(diffs.map((d) => d.name)).toEqual(['Empty']) + }) + + it('指定组件只 diff 该组件', () => { + const diffs = diffMeta(metaA, metaB, 'button') + expect(diffs).toEqual([]) + }) +}) diff --git a/packages/nutui-react-cli-core/src/__tests__/migrate-parse.test.ts b/packages/nutui-react-cli-core/src/__tests__/migrate-parse.test.ts new file mode 100644 index 0000000000..968def0771 --- /dev/null +++ b/packages/nutui-react-cli-core/src/__tests__/migrate-parse.test.ts @@ -0,0 +1,94 @@ +import { describe, expect, it } from 'vitest' +import { parseMigrationDoc, filterSections } from '../commands/migrate-parse.js' + +const DOC = `# 从 v3 升级到 v4 + +本文档将帮助您升级。 + +## 升级步骤 + +1. 安装 v4 + +--- + +## 不兼容更新与兼容升级说明 + +### Toast (操作反馈) + +- 默认 duration 由 2s 调整为 3s。 + +### Empty (反馈类) + +> v4 不提供 v3 兼容。 + +- size 默认值由 base 调整为 half。 + +### Popover (反馈类) + +- theme 默认值由 light 调整为 dark。 +` + +describe('parseMigrationDoc', () => { + const parsed = parseMigrationDoc(DOC) + + it('抽取主标题', () => { + expect(parsed.title).toBe('从 v3 升级到 v4') + }) + + it('intro 含升级步骤、且止于第一个 ### 之前', () => { + expect(parsed.intro).toContain('## 升级步骤') + expect(parsed.intro).toContain('安装 v4') + expect(parsed.intro).not.toContain('### Toast') + }) + + it('切出全部组件段', () => { + expect(parsed.sections.map((s) => s.component)).toEqual([ + 'Toast', + 'Empty', + 'Popover', + ]) + }) + + it('解析组件分类', () => { + expect(parsed.sections[0]).toMatchObject({ + component: 'Toast', + category: '操作反馈', + }) + }) + + it('组件段 raw 含标题行与正文,不含下一段', () => { + const empty = parsed.sections.find((s) => s.component === 'Empty')! + expect(empty.raw).toContain('### Empty (反馈类)') + expect(empty.raw).toContain('size 默认值由 base 调整为 half') + expect(empty.raw).not.toContain('### Popover') + }) + + it('无 ### 段的文档:sections 空、intro 为全文', () => { + const p = parseMigrationDoc('# 标题\n\n正文无组件段。') + expect(p.sections).toEqual([]) + expect(p.intro).toContain('正文无组件段') + }) +}) + +describe('filterSections', () => { + const { sections } = parseMigrationDoc(DOC) + + it('空 names 返回全部', () => { + expect(filterSections(sections, [])).toHaveLength(3) + }) + + it('大小写不敏感过滤单组件', () => { + const r = filterSections(sections, ['empty']) + expect(r).toHaveLength(1) + expect(r[0].component).toBe('Empty') + }) + + it('多组件过滤', () => { + const r = filterSections(sections, ['Toast', 'Popover']) + expect(r.map((s) => s.component)).toEqual(['Toast', 'Popover']) + }) + + it('未命中返回空', () => { + expect(filterSections(sections, ['Button'])).toEqual([]) + }) +}) diff --git a/packages/nutui-react-cli-core/src/__tests__/scan.test.ts b/packages/nutui-react-cli-core/src/__tests__/scan.test.ts new file mode 100644 index 0000000000..13065cde57 --- /dev/null +++ b/packages/nutui-react-cli-core/src/__tests__/scan.test.ts @@ -0,0 +1,87 @@ +import { afterAll, beforeAll, describe, expect, it } from 'vitest' +import fs from 'node:fs' +import os from 'node:os' +import path from 'node:path' +import { extractComponents, scanProject } from '../utils/scan.js' + +describe('extractComponents', () => { + it('解析单行具名 import', () => { + const c = extractComponents(`import { Button, Cell } from '@nutui/nutui-react'`) + expect(c.sort()).toEqual(['Button', 'Cell']) + }) + + it('解析多行 import', () => { + const c = extractComponents(`import { + Button, + Empty, + Toast, + } from '@nutui/nutui-react'`) + expect(c.sort()).toEqual(['Button', 'Empty', 'Toast']) + }) + + it('识别 -taro 包与 icons 包', () => { + const src = ` + import { Cell } from '@nutui/nutui-react-taro' + import { Dongdong } from '@nutui/icons-react-taro' + ` + expect(extractComponents(src).sort()).toEqual(['Cell', 'Dongdong']) + }) + + it('as 别名取原名,type 前缀剥除', () => { + const c = extractComponents( + `import { Button as Btn, type ButtonProps } from '@nutui/nutui-react'` + ) + expect(c.sort()).toEqual(['Button', 'ButtonProps']) + }) + + it('忽略非 NutUI import', () => { + const c = extractComponents(`import { useState } from 'react'`) + expect(c).toEqual([]) + }) + + it('不误伤子路径 import(如 dist/style)', () => { + // 具名 import 才计入;副作用 import '@nutui/nutui-react/dist/style.css' 无具名列表 + const c = extractComponents(`import '@nutui/nutui-react/dist/style.css'`) + expect(c).toEqual([]) + }) +}) + +describe('scanProject', () => { + let dir: string + beforeAll(() => { + dir = fs.mkdtempSync(path.join(os.tmpdir(), 'nutui-scan-')) + fs.mkdirSync(path.join(dir, 'src'), { recursive: true }) + fs.writeFileSync( + path.join(dir, 'src', 'a.tsx'), + `import { Button, Empty } from '@nutui/nutui-react'` + ) + fs.writeFileSync( + path.join(dir, 'src', 'b.ts'), + `import { Cell } from '@nutui/nutui-react'` + ) + // node_modules 应被跳过 + fs.mkdirSync(path.join(dir, 'node_modules'), { recursive: true }) + fs.writeFileSync( + path.join(dir, 'node_modules', 'x.tsx'), + `import { ShouldSkip } from '@nutui/nutui-react'` + ) + }) + afterAll(() => fs.rmSync(dir, { recursive: true, force: true })) + + it('聚合去重、跳过 node_modules', () => { + const r = scanProject(dir) + expect(r.components).toEqual(['Button', 'Cell', 'Empty']) + expect(r.components).not.toContain('ShouldSkip') + }) + + it('files 只含有 NutUI import 的文件', () => { + const r = scanProject(dir) + expect(r.files).toHaveLength(2) + }) + + it('传入单文件也可扫描', () => { + const r = scanProject(path.join(dir, 'src', 'a.tsx')) + expect(r.components).toEqual(['Button', 'Empty']) + expect(r.scannedFileCount).toBe(1) + }) +}) diff --git a/packages/nutui-react-cli-core/src/cli.ts b/packages/nutui-react-cli-core/src/cli.ts index 7c5f2e3f50..3d34cb8b33 100644 --- a/packages/nutui-react-cli-core/src/cli.ts +++ b/packages/nutui-react-cli-core/src/cli.ts @@ -5,6 +5,8 @@ import { runInfo } from './commands/info.js' import { runDoc } from './commands/doc.js' import { runDemo } from './commands/demo.js' import { runToken } from './commands/token.js' +import { runMigrate } from './commands/migrate.js' +import { runDiff } from './commands/diff.js' import { runMcp } from './commands/mcp.js' import type { CliConfig } from './config.js' import type { Lang, OutputFormat } from './types.js' @@ -133,6 +135,66 @@ export function runCli(config: CliConfig, argv: string[]): void { nutuiVersion: a['nutui-version'] as string | undefined, }) ) + .command( + 'migrate [from] [to]', + '输出 vN→vM 迁移指南(默认 3 4);--component 看单组件,--apply 扫描项目生成迁移提示', + (y) => + y + .positional('from', { + type: 'string', + describe: '起始大版本(如 3),默认 3', + }) + .positional('to', { + type: 'string', + describe: '目标大版本(如 4),默认 from+1', + }) + .option('component', { + alias: 'c', + type: 'string', + describe: '只输出该组件的迁移说明(大小写不敏感)', + }) + .option('apply', { + type: 'string', + describe: '扫描该目录,只输出项目用到组件的迁移步骤并生成给 Agent 的提示', + }), + (a) => + runMigrate({ + config, + from: a.from as string | undefined, + to: a.to as string | undefined, + component: a.component as string | undefined, + apply: a.apply as string | undefined, + format: a.format as OutputFormat, + }) + ) + .command( + 'diff [component]', + '跨版本 Props 差异比对(新增 / 移除 / 类型或默认值变更)', + (y) => + y + .positional('v1', { + type: 'string', + describe: '起始版本(如 3、3.1.0)', + demandOption: true, + }) + .positional('v2', { + type: 'string', + describe: '目标版本(如 4、4.0.0-beta.7)', + demandOption: true, + }) + .positional('component', { + type: 'string', + describe: '只比对该组件(大小写不敏感);省略则比对全部', + }), + (a) => + runDiff({ + config, + v1: a.v1 as string, + v2: a.v2 as string, + component: a.component as string | undefined, + format: a.format as OutputFormat, + }) + ) .command( 'mcp', '启动本地 MCP 服务(stdio),供 Claude Code / Cursor / VS Code / Codex 等调用', diff --git a/packages/nutui-react-cli-core/src/commands/diff-compute.ts b/packages/nutui-react-cli-core/src/commands/diff-compute.ts new file mode 100644 index 0000000000..7e5dbeb1c5 --- /dev/null +++ b/packages/nutui-react-cli-core/src/commands/diff-compute.ts @@ -0,0 +1,99 @@ +// 跨版本 API 差异比对:给定两份 meta,逐组件比对 Props 表,找出 added / removed / changed。 +// 纯函数,不碰 IO,便于单测。diff 命令负责加载两版快照后调用它。 +import type { ApiRow, ApiTable, Component, Meta } from '../types.js' + +export interface RowChange { + prop: string + // 变化维度:type 或 default 变了就记,各记 旧→新 + typeFrom?: string + typeTo?: string + defaultFrom?: string + defaultTo?: string +} + +export interface ComponentDiff { + name: string + // v2 相对 v1 新增的 Props({prop, desc, type, default}) + added: ApiRow[] + // v2 相对 v1 移除的 Props + removed: ApiRow[] + // 两版都在、但 type / default 有变化 + changed: RowChange[] +} + +// 把组件的所有 props 表拍平成 prop → row(同名 prop 以先出现者为准;子组件表也并入)。 +function flattenProps(comp: Component | undefined): Map { + const map = new Map() + if (!comp) return map + const tables: ApiTable[] = comp.api?.tables ?? [] + for (const t of tables) { + if (t.kind !== 'props') continue + for (const r of t.rows) { + // 子组件表用 "Sub.prop" 作 key,避免与主表同名 prop 混淆 + const key = t.subComponent ? `${t.subComponent}.${r.prop}` : r.prop + if (!map.has(key)) map.set(key, r) + } + } + return map +} + +// 比对单个组件在两版之间的 Props 差异。 +export function diffComponent( + name: string, + v1: Component | undefined, + v2: Component | undefined +): ComponentDiff { + const a = flattenProps(v1) + const b = flattenProps(v2) + + const added: ApiRow[] = [] + const removed: ApiRow[] = [] + const changed: RowChange[] = [] + + for (const [key, row] of b) { + if (!a.has(key)) added.push(row) + } + for (const [key, row] of a) { + if (!b.has(key)) removed.push(row) + } + for (const [key, ra] of a) { + const rb = b.get(key) + if (!rb) continue + const c: RowChange = { prop: key } + let dirty = false + if ((ra.type ?? '') !== (rb.type ?? '')) { + c.typeFrom = ra.type + c.typeTo = rb.type + dirty = true + } + if ((ra.default ?? '') !== (rb.default ?? '')) { + c.defaultFrom = ra.default + c.defaultTo = rb.default + dirty = true + } + if (dirty) changed.push(c) + } + + return { name, added, removed, changed } +} + +// 比对两份 meta 的所有组件(或指定单组件)。返回有差异的组件列表。 +export function diffMeta( + metaA: Meta, + metaB: Meta, + componentId?: string +): ComponentDiff[] { + const ids = componentId + ? [componentId.toLowerCase()] + : [...new Set([...Object.keys(metaA.components), ...Object.keys(metaB.components)])].sort() + + const out: ComponentDiff[] = [] + for (const id of ids) { + const ca = metaA.components[id] + const cb = metaB.components[id] + const name = cb?.name ?? ca?.name ?? id + const d = diffComponent(name, ca, cb) + if (d.added.length || d.removed.length || d.changed.length) out.push(d) + } + return out +} diff --git a/packages/nutui-react-cli-core/src/commands/diff.ts b/packages/nutui-react-cli-core/src/commands/diff.ts new file mode 100644 index 0000000000..56a23b21e3 --- /dev/null +++ b/packages/nutui-react-cli-core/src/commands/diff.ts @@ -0,0 +1,110 @@ +// diff [component] —— 跨版本 Props 差异比对。 +// 与其它命令不同:需要同时加载两个版本的快照,故绕过只解析单版本的 resolveContext, +// 直接用 resolveSnapshotDir + loadMetaByDir 各加载一份,再交给 diff-compute 纯函数比对。 +import { loadMetaByDir, resolveComponent, resolveSnapshotDir, suggestComponents } from '../data.js' +import { output, renderTable } from '../format.js' +import { diffMeta, type ComponentDiff } from './diff-compute.js' +import type { OutputFormat } from './_shared.js' +import type { CliConfig } from '../config.js' + +export interface DiffArgs { + config: CliConfig + v1: string + v2: string + component?: string + format: OutputFormat +} + +function fail(msg: string): never { + process.stderr.write(`${msg}\n`) + process.exit(1) +} + +export function runDiff(args: DiffArgs): void { + const dirA = resolveSnapshotDir(args.config.dataDir, args.v1) + const dirB = resolveSnapshotDir(args.config.dataDir, args.v2) + const metaA = loadMetaByDir(dirA) + const metaB = loadMetaByDir(dirB) + + // 组件名 → id:以 v2(较新版本)为准解析;未命中给 did-you-mean。 + let componentId: string | undefined + if (args.component) { + const comp = resolveComponent(metaB, args.component) ?? resolveComponent(metaA, args.component) + if (!comp) { + const sug = suggestComponents(metaB, args.component) + fail( + `未找到组件「${args.component}」。${sug.length ? ` 你是否想找:${sug.join(' / ')}?` : ''}` + ) + } + componentId = comp.id + } + + const diffs = diffMeta(metaA, metaB, componentId) + + const jsonData = { + v1: metaA.libVersion, + v2: metaB.libVersion, + component: args.component ?? null, + changedComponentCount: diffs.length, + components: diffs.map((d) => ({ + name: d.name, + added: d.added, + removed: d.removed, + changed: d.changed, + })), + } + + output( + args.format, + jsonData, + () => renderText(metaA.libVersion, metaB.libVersion, diffs, args.component), + { header: '', meta: { v1: metaA.libVersion, v2: metaB.libVersion } } + ) +} + +function renderText( + v1: string, + v2: string, + diffs: ComponentDiff[], + component: string | undefined +): string { + const head = `NutUI Props 差异:v${v1} → v${v2}` + if (!diffs.length) { + return `${head}\n\n${component ? `组件 ${component} 在两版之间无 Props 差异。` : '两版之间无 Props 级差异。'}` + } + + const blocks: string[] = [head] + for (const d of diffs) { + const lines: string[] = [`▍${d.name}`] + if (d.added.length) { + lines.push(' 新增:') + lines.push( + indent(renderTable(['属性', '类型', '默认值'], d.added.map((r) => [r.prop, r.type, r.default]))) + ) + } + if (d.removed.length) { + lines.push(' 移除:') + lines.push( + indent(renderTable(['属性', '类型', '默认值'], d.removed.map((r) => [r.prop, r.type, r.default]))) + ) + } + if (d.changed.length) { + lines.push(' 变更:') + const rows = d.changed.map((c) => [ + c.prop, + c.typeFrom !== undefined ? `${c.typeFrom} → ${c.typeTo}` : '—', + c.defaultFrom !== undefined ? `${c.defaultFrom} → ${c.defaultTo}` : '—', + ]) + lines.push(indent(renderTable(['属性', '类型', '默认值'], rows))) + } + blocks.push(lines.join('\n')) + } + return blocks.join('\n\n') +} + +function indent(s: string): string { + return s + .split('\n') + .map((l) => ` ${l}`) + .join('\n') +} diff --git a/packages/nutui-react-cli-core/src/commands/migrate-parse.ts b/packages/nutui-react-cli-core/src/commands/migrate-parse.ts new file mode 100644 index 0000000000..d27bf2dc37 --- /dev/null +++ b/packages/nutui-react-cli-core/src/commands/migrate-parse.ts @@ -0,0 +1,76 @@ +// 迁移文档解析:把手写的 migrate-from-v{n}.md 切成"通用引言 + 每组件段落",供 migrate 命令按组件过滤。 +// 文档是散文式 markdown:# 标题 → 若干前置 ## 小节(升级步骤等)→ 逐组件的 ### Component (分类) 段。 +// 解析只做结构切分,不重写内容——组件段原文照出,交由 Agent 阅读判断(见 SKILL)。 + +export interface MigrationSection { + // 组件英文名(### 标题里的首个 token,如 Toast / Empty) + component: string + // 组件中文分类标注(### 标题括号内文本,如"操作反馈";无则空串) + category: string + // 该组件段的原文 markdown(含 ### 标题行) + raw: string +} + +export interface ParsedMigration { + // 文档主标题(# 之后的文本,如"从 v3 升级到 v4") + title: string + // 第一个 ### 组件段之前的全部内容(含"升级步骤"等通用小节) + intro: string + // 逐组件段落 + sections: MigrationSection[] +} + +// 解析 ### 标题行:`### Toast (操作反馈)` → { component:'Toast', category:'操作反馈' }。 +// 容忍全角/半角括号与缺省分类。 +function parseHeading(line: string): { component: string; category: string } { + const text = line.replace(/^###\s+/, '').trim() + const m = text.match(/^(\S+)\s*[((]\s*(.*?)\s*[))]\s*$/) + if (m) return { component: m[1], category: m[2] } + // 没有括号分类,取首个 token 作组件名 + return { component: text.split(/\s+/)[0] ?? text, category: '' } +} + +export function parseMigrationDoc(md: string): ParsedMigration { + const lines = md.split('\n') + + // 主标题:首个 `# ` + let title = '' + for (const l of lines) { + const m = l.match(/^#\s+(.+)$/) + if (m) { + title = m[1].trim() + break + } + } + + // 找出所有 `### ` 组件段的起始行号 + const headingIdx: number[] = [] + lines.forEach((l, i) => { + if (/^###\s+/.test(l)) headingIdx.push(i) + }) + + // intro = 第一个 ### 之前的全部(去尾部空白) + const introEnd = headingIdx.length ? headingIdx[0] : lines.length + const intro = lines.slice(0, introEnd).join('\n').trim() + + const sections: MigrationSection[] = [] + for (let k = 0; k < headingIdx.length; k++) { + const start = headingIdx[k] + const end = k + 1 < headingIdx.length ? headingIdx[k + 1] : lines.length + const raw = lines.slice(start, end).join('\n').trim() + const { component, category } = parseHeading(lines[start]) + sections.push({ component, category, raw }) + } + + return { title, intro, sections } +} + +// 大小写不敏感地按组件名筛选段落。names 为空时返回全部。 +export function filterSections( + sections: MigrationSection[], + names: string[] +): MigrationSection[] { + if (!names.length) return sections + const want = new Set(names.map((n) => n.toLowerCase())) + return sections.filter((s) => want.has(s.component.toLowerCase())) +} diff --git a/packages/nutui-react-cli-core/src/commands/migrate.ts b/packages/nutui-react-cli-core/src/commands/migrate.ts new file mode 100644 index 0000000000..9426efa932 --- /dev/null +++ b/packages/nutui-react-cli-core/src/commands/migrate.ts @@ -0,0 +1,169 @@ +// migrate [from] [to] —— 输出 vN→vM 迁移指南。数据源是随包抽取的官方迁移文档(migrate-from-v{n}.md), +// 按组件切段后原文输出;--component 只看某组件,--apply 扫描项目、只输出用到组件的迁移步骤并生成给 Agent 的提示。 +// +// 与其它命令不同:迁移跨两个版本,故不走 resolveContext(它只解析单版本),而是用 to 版本定位快照、读其内迁移文档。 +import { loadVersionsIndex, readMigrationDoc, resolveSnapshotDir } from '../data.js' +import { output } from '../format.js' +import { parseMigrationDoc, filterSections } from './migrate-parse.js' +import { scanProject } from '../utils/scan.js' +import type { OutputFormat } from './_shared.js' +import type { CliConfig } from '../config.js' + +export interface MigrateArgs { + config: CliConfig + from?: string + to?: string + component?: string + apply?: string + format: OutputFormat +} + +// 把版本参数('3' / '3.1.0' / 'v4')归一为大版本号整数。无法解析返回 null。 +function toMajorNum(v: string | undefined): number | null { + if (!v) return null + const m = String(v).replace(/^v/, '').match(/^(\d+)/) + return m ? Number(m[1]) : null +} + +function fail(msg: string): never { + process.stderr.write(`${msg}\n`) + process.exit(1) +} + +export function runMigrate(args: MigrateArgs): void { + const fromMajor = toMajorNum(args.from) ?? 3 + const toMajor = toMajorNum(args.to) ?? fromMajor + 1 + + if (toMajor <= fromMajor) { + fail( + `迁移方向无效:from=v${fromMajor} to=v${toMajor}。请指定从低到高的大版本,如 ${args.config.binName} migrate 3 4。` + ) + } + + // 用 to 大版本定位快照目录(该版本快照里带 migrations/from-v{from}.md)。 + const idx = loadVersionsIndex(args.config.dataDir) + const toMajorKey = `v${toMajor}` + if (!idx.majors[toMajorKey]) { + fail( + `未找到 NutUI v${toMajor} 的离线数据,无法提供 v${fromMajor}→v${toMajor} 迁移指南。已知版本:${Object.keys(idx.majors).join(' / ')}。` + ) + } + const snapshotDir = resolveSnapshotDir(args.config.dataDir, String(toMajor)) + const md = readMigrationDoc(snapshotDir, fromMajor) + + if (md === null) { + fail( + `暂无 v${fromMajor}→v${toMajor} 的迁移文档数据。目前仅内置随 ${idx.majors[toMajorKey].latest} 分发的迁移说明;若为源码开发,请先运行 pnpm run build 重新抽取。` + ) + } + + const parsed = parseMigrationDoc(md) + + // 确定要输出的组件段:--apply 扫描项目取交集;--component 显式过滤;否则全部。 + let sections = parsed.sections + let scan: ReturnType | null = null + let matchedComponents: string[] = [] + let missingFromDoc: string[] = [] + + if (args.apply) { + scan = scanProject(args.apply) + sections = filterSections(parsed.sections, scan.components) + matchedComponents = sections.map((s) => s.component) + // 项目用到、但迁移文档未覆盖的组件(v3→v4 大多无破坏性变更,属正常)。 + const covered = new Set(sections.map((s) => s.component.toLowerCase())) + missingFromDoc = scan.components.filter((c) => !covered.has(c.toLowerCase())) + } else if (args.component) { + sections = filterSections(parsed.sections, [args.component]) + if (!sections.length) { + fail( + `迁移文档中未找到组件「${args.component}」。已覆盖:${parsed.sections.map((s) => s.component).join(' / ')}。` + ) + } + } + + const jsonData = { + from: `v${fromMajor}`, + to: `v${toMajor}`, + libVersion: idx.majors[toMajorKey].latest, + coveredComponents: parsed.sections.map((s) => s.component), + steps: sections.map((s) => ({ + component: s.component, + category: s.category, + guide: s.raw, + })), + ...(scan + ? { + appliedTo: args.apply, + scannedFiles: scan.scannedFileCount, + projectComponents: scan.components, + matchedComponents, + componentsWithoutBreakingChanges: missingFromDoc, + } + : {}), + } + + output( + args.format, + jsonData, + () => renderText(parsed, sections, args, scan, matchedComponents, missingFromDoc), + // 迁移指南本身是可直接粘贴的 markdown,text 不加版本头(同 doc.ts)。 + { header: '', meta: { from: `v${fromMajor}`, to: `v${toMajor}`, libVersion: idx.majors[toMajorKey].latest } } + ) +} + +function renderText( + parsed: ReturnType, + sections: ReturnType['sections'], + args: MigrateArgs, + scan: ReturnType | null, + matchedComponents: string[], + missingFromDoc: string[] +): string { + const parts: string[] = [] + + if (scan) { + // --apply:产出一段给 Code Agent 的定向迁移提示。 + parts.push(`# NutUI ${parsed.title || '版本迁移'}(基于项目扫描)`) + parts.push( + `> 扫描目录 \`${args.apply}\`:共 ${scan.scannedFileCount} 个源文件,检测到 ${scan.components.length} 个 NutUI 组件:${scan.components.join('、') || '(无)'}。` + ) + if (matchedComponents.length) { + parts.push( + `> 其中 **${matchedComponents.length}** 个有破坏性变更需处理:${matchedComponents.join('、')}。` + ) + } else { + parts.push('> 未命中任何有破坏性变更的组件——按当前迁移文档,项目所用组件无需改代码(仍建议构建后人工核对样式)。') + } + if (missingFromDoc.length) { + parts.push( + `> 以下组件项目用到、但迁移文档未列破坏性变更(v3→v4 多数组件如此,通常无需改动):${missingFromDoc.join('、')}。` + ) + } + parts.push( + [ + '## 给代码 Agent 的指令', + '', + '1. 仅需处理下方列出的组件,逐个阅读其「迁移说明」原文。', + '2. 破坏性变更集中在**样式 / CSS 类名 / Design Token / 枚举值 / 默认值**,几乎没有 Props 增删——请重点检查这些维度,不要臆造 Props 改名。', + '3. 枚举值/默认值变更(如 Empty 的 `size`/`status`、Popover 的 `theme`)**不会自动兼容**,必须改代码。', + '4. 对无法机械改写、需要视觉确认的改动,改完后标记「待人工复核」,不要声称已完成。', + '5. 迁移后运行构建验证;编译通过 ≠ 视觉/行为正确。', + ].join('\n') + ) + } else { + // 全量 / --component:先给引言(升级步骤),再给组件段。 + if (!args.component && parsed.intro) parts.push(parsed.intro) + } + + if (sections.length) { + if (scan || args.component) { + parts.push('---') + parts.push('## 迁移说明') + } + for (const s of sections) parts.push(s.raw) + } else if (!scan) { + parts.push('(无匹配的组件迁移说明。)') + } + + return parts.join('\n\n') +} diff --git a/packages/nutui-react-cli-core/src/data.ts b/packages/nutui-react-cli-core/src/data.ts index c61ec87832..f85b153ea6 100644 --- a/packages/nutui-react-cli-core/src/data.ts +++ b/packages/nutui-react-cli-core/src/data.ts @@ -189,3 +189,14 @@ export function readDemo( const file = path.join(snapshotDir, 'demos', component.id, base) return fs.existsSync(file) ? fs.readFileSync(file, 'utf-8') : null } + +// 读取某个快照目录下的迁移文档原文(prepare-data 从对应 tag worktree 抽取而来)。 +// fromMajor 形如 3(表示"从 v3 升级到当前快照版本");文档路径为 migrations/from-v{n}.md。 +// 该文档只在含迁移说明的版本(如 v4)快照里存在,缺失返回 null。 +export function readMigrationDoc( + snapshotDir: string, + fromMajor: number +): string | null { + const file = path.join(snapshotDir, 'migrations', `from-v${fromMajor}.md`) + return fs.existsSync(file) ? fs.readFileSync(file, 'utf-8') : null +} diff --git a/packages/nutui-react-cli-core/src/error.ts b/packages/nutui-react-cli-core/src/error.ts index 9b2df21069..6b0820098f 100644 --- a/packages/nutui-react-cli-core/src/error.ts +++ b/packages/nutui-react-cli-core/src/error.ts @@ -4,6 +4,8 @@ export const ErrorCodes = { COMPONENT_NOT_FOUND: 'COMPONENT_NOT_FOUND', DOC_NOT_FOUND: 'DOC_NOT_FOUND', DEMO_NOT_FOUND: 'DEMO_NOT_FOUND', + VERSION_NOT_FOUND: 'VERSION_NOT_FOUND', + INVALID_ARGUMENT: 'INVALID_ARGUMENT', UNKNOWN_TOOL: 'UNKNOWN_TOOL', } as const diff --git a/packages/nutui-react-cli-core/src/mcp/tools.ts b/packages/nutui-react-cli-core/src/mcp/tools.ts index 1f232f2a37..97e9a7ee59 100644 --- a/packages/nutui-react-cli-core/src/mcp/tools.ts +++ b/packages/nutui-react-cli-core/src/mcp/tools.ts @@ -9,12 +9,16 @@ import { loadVersionsIndex, readDemo, readDoc, + readMigrationDoc, resolveComponent, resolveSnapshotDir, suggestComponents, } from '../data.js' import { detectVersion, type VersionInfo } from '../version.js' import { createError, ErrorCodes } from '../error.js' +import { parseMigrationDoc, filterSections } from '../commands/migrate-parse.js' +import { diffMeta } from '../commands/diff-compute.js' +import { scanProject } from '../utils/scan.js' import type { CliConfig } from '../config.js' import type { Component, Lang, Meta } from '../types.js' @@ -178,6 +182,46 @@ export function buildToolDefinitions(config: CliConfig) { }, annotations: { title: '查询 Design Token', ...TOOL_ANNOTATIONS }, }, + { + name: `${p}migrate`, + description: + '获取 NutUI 大版本迁移指南(默认 v3→v4)。component 只看某组件;applyDir 扫描项目目录,只返回项目用到组件的迁移步骤。数据源是随包抽取的官方迁移文档。', + inputSchema: { + type: 'object' as const, + properties: { + from: { type: 'string', description: '起始大版本(如 3),默认 3' }, + to: { type: 'string', description: '目标大版本(如 4),默认 from+1' }, + component: { + type: 'string', + description: '只返回该组件的迁移说明(大小写不敏感)', + }, + applyDir: { + type: 'string', + description: '扫描该目录,只返回项目实际用到组件的迁移步骤', + }, + }, + required: [] as string[], + }, + annotations: { title: '版本迁移指南', ...TOOL_ANNOTATIONS }, + }, + { + name: `${p}diff`, + description: + '跨版本 Props 差异比对:给定两个版本,返回各组件新增 / 移除 / 类型或默认值变更的 Props。', + inputSchema: { + type: 'object' as const, + properties: { + v1: { type: 'string', description: '起始版本(如 3、3.1.0)' }, + v2: { type: 'string', description: '目标版本(如 4、4.0.0-beta.7)' }, + component: { + type: 'string', + description: '只比对该组件(大小写不敏感);省略则比对全部', + }, + }, + required: ['v1', 'v2'], + }, + annotations: { title: '跨版本 Props 差异', ...TOOL_ANNOTATIONS }, + }, ] } @@ -302,6 +346,114 @@ export function createToolHandler(config: CliConfig) { }) } + case 'migrate': { + // 迁移跨两个大版本,自己解析,不用预加载的单快照 meta。 + const toMajorNum = (v: unknown): number | null => { + if (!v) return null + const m = String(v).replace(/^v/, '').match(/^(\d+)/) + return m ? Number(m[1]) : null + } + const fromMajor = toMajorNum(params.from) ?? 3 + const toMajor = toMajorNum(params.to) ?? fromMajor + 1 + if (toMajor <= fromMajor) { + return toMcpResult( + createError( + ErrorCodes.INVALID_ARGUMENT, + `迁移方向无效:from=v${fromMajor} to=v${toMajor}。请指定从低到高的大版本。` + ) + ) + } + const toKey = `v${toMajor}` + if (!versionsIndex.majors[toKey]) { + return toMcpResult( + createError( + ErrorCodes.VERSION_NOT_FOUND, + `未找到 NutUI v${toMajor} 的离线数据,无法提供 v${fromMajor}→v${toMajor} 迁移指南。` + ) + ) + } + const toDir = resolveSnapshotDir(config.dataDir, String(toMajor)) + const md = readMigrationDoc(toDir, fromMajor) + if (md === null) { + return toMcpResult( + createError( + ErrorCodes.DOC_NOT_FOUND, + `暂无 v${fromMajor}→v${toMajor} 的迁移文档数据。` + ) + ) + } + const parsed = parseMigrationDoc(md) + const applyDir = params.applyDir as string | undefined + const compName = params.component as string | undefined + let sections = parsed.sections + let scanInfo: Record = {} + if (applyDir) { + const scan = scanProject(applyDir) + sections = filterSections(parsed.sections, scan.components) + const covered = new Set(sections.map((s) => s.component.toLowerCase())) + scanInfo = { + appliedTo: applyDir, + scannedFiles: scan.scannedFileCount, + projectComponents: scan.components, + matchedComponents: sections.map((s) => s.component), + componentsWithoutBreakingChanges: scan.components.filter( + (c) => !covered.has(c.toLowerCase()) + ), + } + } else if (compName) { + sections = filterSections(parsed.sections, [compName]) + } + return toMcpResult({ + _meta: { from: `v${fromMajor}`, to: `v${toMajor}`, libVersion: versionsIndex.majors[toKey].latest }, + title: parsed.title, + intro: applyDir || compName ? undefined : parsed.intro, + coveredComponents: parsed.sections.map((s) => s.component), + steps: sections.map((s) => ({ + component: s.component, + category: s.category, + guide: s.raw, + })), + ...scanInfo, + }) + } + + case 'diff': { + const v1 = params.v1 as string + const v2 = params.v2 as string + if (!v1 || !v2) { + return toMcpResult( + createError(ErrorCodes.INVALID_ARGUMENT, 'diff 需要 v1 与 v2 两个版本参数。') + ) + } + const metaA = loadMetaByDir(resolveSnapshotDir(config.dataDir, v1)) + const metaB = loadMetaByDir(resolveSnapshotDir(config.dataDir, v2)) + const compName = params.component as string | undefined + let componentId: string | undefined + if (compName) { + const comp = resolveComponent(metaB, compName) ?? resolveComponent(metaA, compName) + if (!comp) { + const sug = suggestComponents(metaB, compName) + return toMcpResult( + createError( + ErrorCodes.COMPONENT_NOT_FOUND, + `未找到组件「${compName}」。`, + sug.length ? `你是否想找:${sug.join(' / ')}?` : undefined + ) + ) + } + componentId = comp.id + } + const diffs = diffMeta(metaA, metaB, componentId) + return toMcpResult({ + _meta: { v1: metaA.libVersion, v2: metaB.libVersion }, + v1: metaA.libVersion, + v2: metaB.libVersion, + component: compName ?? null, + changedComponentCount: diffs.length, + components: diffs, + }) + } + default: return toMcpResult( createError(ErrorCodes.UNKNOWN_TOOL, `未知工具:${name}`) diff --git a/packages/nutui-react-cli-core/src/utils/scan.ts b/packages/nutui-react-cli-core/src/utils/scan.ts new file mode 100644 index 0000000000..52607b35b2 --- /dev/null +++ b/packages/nutui-react-cli-core/src/utils/scan.ts @@ -0,0 +1,114 @@ +// 项目扫描:递归遍历源码目录,找出从 @nutui/nutui-react(-taro) 具名 import 的组件。 +// 供 migrate --apply 用——只对项目实际用到的组件输出迁移步骤。纯 node:fs + 正则,无第三方依赖。 +import fs from 'node:fs' +import path from 'node:path' + +export interface ScanResult { + // 项目中出现过的 NutUI 组件名(保留源码里的原始拼写,去重) + components: string[] + // 扫描到的、含 NutUI import 的文件绝对路径 + files: string[] + // 实际遍历的源码文件总数(用于"扫描了 N 个文件"提示) + scannedFileCount: number +} + +const SOURCE_EXT = new Set(['.tsx', '.ts', '.jsx', '.js', '.mjs', '.cjs']) +const SKIP_DIRS = new Set([ + 'node_modules', + '.git', + 'dist', + 'build', + '.next', + '.turbo', + 'coverage', +]) + +// 匹配 import { ... } from '@nutui/nutui-react' | '@nutui/nutui-react-taro' +// 也匹配 icons 包(@nutui/icons-react(-taro)),图标名也算"用到的组件"以便迁移提示覆盖图标变更。 +// [\s\S]*? 跨行匹配具名列表;末尾包名用锚点确保不误伤子路径 import。 +const IMPORT_RE = + /import\s+(?:type\s+)?\{([\s\S]*?)\}\s*from\s*['"]@nutui\/(?:nutui-react|icons-react)(?:-taro)?['"]/g + +// 从具名列表字符串(可能含换行、注释、as 别名)解析出组件名集合。 +function parseNamedImports(inner: string): string[] { + return inner + .split(',') + .map((s) => + s + // 去掉行内 / 块注释残片 + .replace(/\/\/.*$/gm, '') + .replace(/\/\*[\s\S]*?\*\//g, '') + .trim() + ) + .filter(Boolean) + // `Button as Btn` → 取原名 Button;`type Foo` → 去掉 type 前缀 + .map((s) => s.replace(/^type\s+/, '').split(/\s+as\s+/)[0].trim()) + .filter((s) => /^[A-Za-z][A-Za-z0-9_]*$/.test(s)) +} + +// 从单个文件内容里抽取 NutUI 组件名。无命中返回空数组。 +export function extractComponents(content: string): string[] { + const found = new Set() + for (const m of content.matchAll(IMPORT_RE)) { + for (const name of parseNamedImports(m[1])) found.add(name) + } + return [...found] +} + +function walk(dir: string, onFile: (file: string) => void): void { + let entries: fs.Dirent[] + try { + entries = fs.readdirSync(dir, { withFileTypes: true }) + } catch { + return + } + for (const entry of entries) { + if (entry.name.startsWith('.') && entry.name !== '.') { + // 跳过隐藏目录/文件(.git 等),但允许显式传入的 '.' 起点 + if (entry.isDirectory() && SKIP_DIRS.has(entry.name)) continue + if (entry.isDirectory()) continue + } + const full = path.join(dir, entry.name) + if (entry.isDirectory()) { + if (SKIP_DIRS.has(entry.name)) continue + walk(full, onFile) + } else if (entry.isFile() && SOURCE_EXT.has(path.extname(entry.name))) { + onFile(full) + } + } +} + +// 扫描目录,聚合项目用到的 NutUI 组件。dir 可为文件或目录。 +export function scanProject(dir: string): ScanResult { + const components = new Set() + const files: string[] = [] + let scannedFileCount = 0 + + const handle = (file: string) => { + scannedFileCount++ + let content: string + try { + content = fs.readFileSync(file, 'utf-8') + } catch { + return + } + const names = extractComponents(content) + if (names.length) { + files.push(file) + for (const n of names) components.add(n) + } + } + + const stat = fs.existsSync(dir) ? fs.statSync(dir) : null + if (stat?.isFile()) { + handle(dir) + } else { + walk(dir, handle) + } + + return { + components: [...components].sort(), + files: files.sort(), + scannedFileCount, + } +} diff --git a/packages/nutui-react-cli/CHANGELOG.md b/packages/nutui-react-cli/CHANGELOG.md index 04cdf2060a..be1571930e 100644 --- a/packages/nutui-react-cli/CHANGELOG.md +++ b/packages/nutui-react-cli/CHANGELOG.md @@ -7,6 +7,7 @@ `2026-09-04` - feat: 新增多版本知识查询能力 +- feat: 新增 v3 -> v4 迁移的能力 ## v4.0.0 diff --git a/packages/nutui-react-cli/README.md b/packages/nutui-react-cli/README.md index a40363d8d2..e1af179f9b 100644 --- a/packages/nutui-react-cli/README.md +++ b/packages/nutui-react-cli/README.md @@ -33,6 +33,8 @@ nutui-react info Button --format json | `nutui-react doc [--lang zh\|en]` | 查看组件完整文档,默认中文 | | `nutui-react demo [name]` | 省略 `name` 列出全部示例;指定 `name`(如 `demo1`)输出源码 | | `nutui-react token [Component]` | 查看 Design Token;省略组件名则列出全局 token | +| `nutui-react migrate [from] [to]` | 输出 vN→vM 迁移指南(默认 `3 4`);`--component ` 看单组件,`--apply ` 扫描项目生成迁移提示 | +| `nutui-react diff [Component]` | 跨版本 Props 差异对比(新增 / 移除 / 类型或默认值变更) | | `nutui-react mcp` | 启动本地 MCP 服务(stdio),供 Claude Code / Cursor / VS Code / Codex 等 IDE 调用 | 全局选项: @@ -51,6 +53,9 @@ nutui-react doc Button --lang en nutui-react demo Button # 列出示例 nutui-react demo Button demo1 # 查看某个示例源码 nutui-react token Button +nutui-react migrate 3 4 # v3→v4 迁移指南 +nutui-react migrate 3 4 --apply ./src --format json # 扫描项目,生成给 Agent 的迁移提示 +nutui-react diff 3.1.0 4.0.0-beta.7 Empty # 跨版本 Props 差异 ``` ## 多版本 @@ -76,11 +81,27 @@ nutui-react --nv 4.0.0-beta.7 doc Cell > 在项目里能自动推断版本时,优先不显式传 `--nutui-version`,让 CLI 自行检测更省心。 +## 版本迁移(v3 → v4) + +两个命令支撑从 v3 升级到 v4,数据均随包离线分发: + +- `nutui-react migrate 3 4` —— 输出**官方迁移文档**。`--component ` 只看某组件;`--apply ` 扫描项目、只输出实际用到组件的迁移步骤,并生成一段给 Code Agent 的定向提示。 +- `nutui-react diff [Component]` —— 实时对比两个版本快照的 Props,列出新增 / 移除 / 类型或默认值变更(精确 `旧→新`)。 + +二者**互补**:`migrate` 讲"为什么改、怎么改"(含样式 / CSS 类名 / Design Token),`diff` 给"API 层精确差了什么"。配套的 `nutui-react-v3-to-v4` Skill 会编排整个升级流程(见下)。 + +```bash +nutui-react migrate 3 4 --format json # 全量迁移清单 +nutui-react migrate 3 4 --component Empty # 只看 Empty +nutui-react migrate 3 4 --apply ./src --format json # 扫描项目 + 生成 Agent 提示 +nutui-react diff 3 4 Empty --format json # Empty 的 Props 差异 +``` + ## MCP(IDE 集成) CLI 是「Agent 主动敲命令」,MCP 则把同一份能力注册成 IDE 原生工具,让 Claude Code / Cursor / VS Code / Codex 在对话中**按需自动调用**,无需拼命令行字符串。二者复用同一份离线 meta 快照,等于给同一个知识库套了两种调用协议。 -`nutui-react mcp` 启动一个 stdio MCP 服务,暴露 5 个只读工具与 2 个提示词: +`nutui-react mcp` 启动一个 stdio MCP 服务,暴露 7 个只读工具与 2 个提示词: | 工具 | 说明 | | --- | --- | @@ -89,6 +110,8 @@ CLI 是「Agent 主动敲命令」,MCP 则把同一份能力注册成 IDE 原 | `nutui_doc` | 组件完整文档(`lang: zh\|en`) | | `nutui_demo` | H5 示例列表 / 源码 | | `nutui_token` | Design Token(全局 / 组件级) | +| `nutui_migrate` | vN→vM 迁移指南(可按组件 / 扫描目录) | +| `nutui_diff` | 跨版本 Props 差异对比 | | 提示词 | 说明 | | --- | --- | @@ -140,6 +163,14 @@ npx skills add jdf2e/nutui-react --skill nutui-react npx skills add jdf2e/nutui-react --skill nutui-react-to-taro ``` +### 升级 Skill:v3 → v4 + +本包还内置一份 [升级 Skill](./skills/nutui-react-v3-to-v4/SKILL.md),指导 Agent 把项目从 NutUI React v3 升级到 v4。它编排「依赖升级 → `migrate --apply` 扫描项目 → 逐组件读 `migrate` + `diff` 改写 → 构建验证」的完整流程,并把 v3→v4 的关键事实讲清楚:破坏性变更集中在**样式 / CSS 类名 / Design Token / 枚举值 / 默认值**(如 Empty 的 `size`/`status`、Popover 的 `theme`、Toast 的 `duration`)。 + +```bash +npx skills add jdf2e/nutui-react --skill nutui-react-v3-to-v4 +``` + ## 本地开发 ```bash diff --git a/packages/nutui-react-cli/scripts/prepare-data.mjs b/packages/nutui-react-cli/scripts/prepare-data.mjs index 9378ef34b0..0991c6a6ff 100644 --- a/packages/nutui-react-cli/scripts/prepare-data.mjs +++ b/packages/nutui-react-cli/scripts/prepare-data.mjs @@ -12,4 +12,8 @@ await prepareAllVersions({ docKeys: { zh: 'h5', en: 'enUS' }, demoKey: 'h5', apiField: 'api', + // H5 端迁移文档(随 v4 手写维护,v3 tag 无,缺失静默跳过)。 + migrationDocs: { + 'from-v3': 'src/sites/sites-react/doc/docs/react/migrate-from-v3.md', + }, }) diff --git a/packages/nutui-react-cli/skills/nutui-react-v3-to-v4/README.md b/packages/nutui-react-cli/skills/nutui-react-v3-to-v4/README.md new file mode 100644 index 0000000000..936603c7e0 --- /dev/null +++ b/packages/nutui-react-cli/skills/nutui-react-v3-to-v4/README.md @@ -0,0 +1,29 @@ +# NutUI React v3 → v4 Upgrade + +把项目从 NutUI React v3(`@nutui/nutui-react` 3.x)升级到 v4(4.x)。 + +与常见的大版本升级不同:v3→v4 **几乎没有 Props 增删或改名**,破坏性变更集中在**样式 / CSS 类名 / Design Token / 枚举值 / 默认值**(如 Empty 的 `size`/`status`、Popover 的 `theme` 默认值、Toast 的 `duration`)。这些变更**不会触发编译错误**,漏改会静默出错。本 skill 用离线 CLI 的 `migrate` / `diff` 命令定位真正需要改的组件,以官方迁移文档为准逐处改写,避免臆造 API 改名或漏掉默认值变更。 + +## 安装 + +运行时通过 `npx` 免安装调用 CLI,无需预装: + +```bash +npx skills add jdf2e/nutui-react --skill nutui-react-v3-to-v4 +``` + +## 适用场景 + +- **系统性完成 v3 → v4 升级**:按依赖升级 → 扫描盘点 → 逐组件改写 → 验证的流程,把项目从 `@nutui/nutui-react` 3.x 升到 4.x。 +- **定位真正需要改的组件**:用 `nutui-react migrate 3 4 --apply ./src` 扫描项目,只列出项目实际用到、且有破坏性变更的组件,避免对全部组件盲目排查。 +- **精确核对 API 差异**:用 `nutui-react diff 3 4 ` 拿到两版 Props 的枚举值 / 默认值 / 类型的精确 `旧→新`,补齐迁移文档没写到的 API 级差异。 +- **处理枚举值 / 默认值变更**:识别 Empty `size`/`status`、Popover `theme`、Toast `duration` 等默认值变更——它们不报编译错,必须改代码。 +- **核对自定义样式覆盖**:grep 项目里针对 `.nut-*` 类名或 `--nutui-*` 变量的自定义样式,对照 CSS 类名 / token 变更逐处修正。 + +## 依赖的 CLI 命令 + +- `nutui-react migrate 3 4 [--component X] [--apply ./src]` —— 官方迁移文档(按组件切分 / 项目扫描)。 +- `nutui-react diff 3 4 [Component]` —— 跨版本 Props 实测差异。 +- `nutui-react doc ` / `token ` —— 完整文档与 Design Token 交叉核对。 + +全部离线、随包分发、支持 `--format json`。 diff --git a/packages/nutui-react-cli/skills/nutui-react-v3-to-v4/SKILL.en.md b/packages/nutui-react-cli/skills/nutui-react-v3-to-v4/SKILL.en.md new file mode 100644 index 0000000000..b90ba832ea --- /dev/null +++ b/packages/nutui-react-cli/skills/nutui-react-v3-to-v4/SKILL.en.md @@ -0,0 +1,138 @@ +--- +name: nutui-react-v3-to-v4 +description: > + Use when upgrading a project from NutUI React v3 (@nutui/nutui-react 3.x, H5) to v4 (4.x). Triggers on "upgrade NutUI React from v3 to v4", "migrate nutui v3 to v4", "bump @nutui/nutui-react to 4.0". Unlike typical major upgrades, v3→v4 has almost no Props additions/removals/renames — breaking changes concentrate in **styles / CSS class names / Design Tokens / enum values / default values** (e.g. Empty's size/status, Popover's theme). This skill uses the offline CLI's migrate / diff commands to pinpoint which components actually need changes, rewriting each per the official migration doc — avoiding invented API renames or missed default-value changes. +allowed-tools: + - Bash(nutui-react *) + - Bash(npx -y @nutui/nutui-react-cli *) + - Bash(which nutui-react) + - Bash(grep *) +--- + +# NutUI React v3 → v4 Upgrade + +You are upgrading a project from `@nutui/nutui-react` **3.x** to **4.x** (H5). + +**Remember this counter-intuitive fact first**: v3→v4 has **almost no Props additions / renames** — most components' APIs are identical across the two versions. The real breaking changes concentrate in four dimensions: + +1. **Enum / default-value changes** (most code-impacting) — e.g. Empty's `size`, `status`, Popover's `theme` default. These do **not** auto-fall-back, and the compiler won't flag them — missing one fails silently. +2. **CSS class-name changes** — if the project has custom style overrides targeting `.nut-xxx` classes, a renamed class silently breaks them. +3. **Design Token changes** — added / removed / redefaulted `var(--nutui-*)` variables. +4. **Visual-spec adjustments** — spacing, font size, icon size. Usually no code change, but verify rendering after build. + +So: **don't assume upgrade = change imports or rename Props.** Use the CLI to find what each component actually changed, then fix each spot. + +## Supporting tools + +`@nutui/nutui-react-cli` — offline, metadata bundled. If not on PATH, call via npx: + +```bash +which nutui-react || echo "use: npx -y @nutui/nutui-react-cli " +``` + +Two key commands: + +- `nutui-react migrate 3 4` — the **official migration doc** (authoritative, hand-written, filled in per-component alongside v4). This is the **primary basis** for rewrites. +- `nutui-react diff 3 4 ` — **measured Props diff between the two versions' meta** (precise `old → new` for enums, defaults, types). Fills in API/default-level diffs the doc doesn't spell out. + +They're **complementary**: migrate explains "why & how to change" (incl. styles/classes/tokens), diff gives "what exactly differs at the API layer". Read both when changing a component. + +**Always pass `--format json` and parse it — don't regex the text output.** + +## Upgrade flow + +Execute in order. Don't skip the scan — it decides which few components you need to touch. + +### Phase 0 — Dependency upgrade (do first) + +1. Bump deps to v4 (get user consent before installing): + - `@nutui/nutui-react@^4` + - icon package `@nutui/icons-react` (v4-compatible version) — if the project uses icons +2. Confirm lockfile update and `node_modules` reinstall. + +### Phase 1 — Scan & inventory + +Use `--apply` to scan the project and get "which components have breaking changes to handle" in one step: + +```bash +nutui-react migrate 3 4 --apply ./src --format json +``` + +Focus on three fields: + +- `matchedComponents` — **components the project uses AND that have breaking changes**. This is your worklist. +- `componentsWithoutBreakingChanges` — used but not listed in the migration doc (most components; usually no change needed). +- `steps[].guide` — the migration doc text for each component to handle. + +If `matchedComponents` is empty: per the current doc, the project's components need no code changes — proceed to Phase 3 verification (still worth checking styles). + +Extra scan: if the project has **custom CSS overrides** (targeting `.nut-*` classes or `--nutui-*` variables), grep them — they're the high-risk spots for class/token changes: + +```bash +grep -rn "\.nut-" src --include=*.css --include=*.scss --include=*.less +grep -rn -- "--nutui-" src --include=*.css --include=*.scss --include=*.less +``` + +### Phase 2 — Rewrite per component + +For **each** component in `matchedComponents`: + +```bash +# 1. Read the official migration note (why & how; styles/classes/tokens) +nutui-react migrate 3 4 --component Empty --format json + +# 2. See precise API diff (enums, defaults, types old → new) +nutui-react diff 3 4 Empty --format json + +# 3. Cross-check full doc / tokens when needed +nutui-react doc Empty --format json +nutui-react token Empty --format json +``` + +Then rewrite per the migration note. Focus on **enum / default / class-name / token** changes; don't invent Props renames. + +### Phase 3 — Verify + +- Build the project and confirm it compiles. +- **Compiling ≠ correct** — enum/default changes don't raise compile errors. Verify actual rendering of every component you touched in Phase 1/2. +- Report: which components were changed, which custom style overrides need review, which you recommend the user eyeball on device/browser. + +## Known breaking changes (as of current doc — always defer to live `migrate` output) + +The migration doc is filled in continuously through v4 beta; below are currently-covered components. **Always run `migrate 3 4` for the latest list; don't rely on this table alone.** + +### Empty — enums + defaults + class names, all breaking + +- `size`: removes `base`/`small`, now `full`/`half`/`partial`; **default `base` → `half`**. + - `size="base"` → `full` (full-page) or `partial` (inline); `size="small"` → `half`. +- `status`: removes `empty`/`error`; **default `empty` → `network`**. + - `status="empty"` → `search` (or a scenario enum); `status="error"` → `network` (or pass a custom `image`). +- CSS classes: `.nut-empty-base`/`.nut-empty-small` → `.nut-empty--full`/`--half`/`--partial`; image container → `.nut-empty-image`. +- tokens: old `--nutui-empty-image-size` etc. removed; use per-size variables. + +### Popover — defaults + class names, breaking + +- New `type` (`status`/`description`), default `status`. +- **`theme` default `light` → `dark`**: v3 code relying on the light default must add `theme="light"`; v3 `theme="dark"` can drop the prop. +- CSS classes: removes `.nut-popover-dark` (dark is now default); light style uses `.nut-popover-light`. +- tokens: several `--nutui-popover-*` defaults adjusted. + +### Toast — defaults + class name + +- **Default `duration` `2s` → `3s`**: to keep 2s, pass `duration: 2` explicitly or `Toast.config({ duration: 2 })` globally. +- Removes the misspelled helper class `.nut-toast-inner-descrption` (**no replacement class**; delete or move overrides to `.nut-toast-inner`). + +### Radio / Checkbox — pure style + +- Radio: hotspot tweak when no text (adds `.nut-radio-nolabel`), removes checked shadow. +- Checkbox: dark-mode color fixes. +- Usually no code change, but review related style overrides. + +## Key rules + +1. **Scan first, then query per component.** `migrate 3 4 --apply ./src` gives the worklist; `migrate --component X` + `diff 3 4 X` per component before changing. +2. **Breaking changes are in styles/classes/tokens/enums/defaults, not Props names.** Don't invent API renames. +3. **Enum/default changes must be fixed and won't raise compile errors** — Empty `size`/`status`, Popover `theme`, Toast `duration` are the danger zones; missing one fails silently. +4. **Always `--format json`.** +5. **Don't use `nutui-codemod` for v3→v4** — its rules are for v2→v3 (component/Props renames) and will mis-edit if run. +6. **Compiling isn't done** — eyeball rendering of changed components, hand off spots needing human confirmation. diff --git a/packages/nutui-react-cli/skills/nutui-react-v3-to-v4/SKILL.md b/packages/nutui-react-cli/skills/nutui-react-v3-to-v4/SKILL.md new file mode 100644 index 0000000000..6b1a4e4fa1 --- /dev/null +++ b/packages/nutui-react-cli/skills/nutui-react-v3-to-v4/SKILL.md @@ -0,0 +1,138 @@ +--- +name: nutui-react-v3-to-v4 +description: > + 当需要把项目从 NutUI React v3(@nutui/nutui-react 3.x)升级到 v4(4.x)时使用。触发场景如「把 NutUI React 从 v3 升级到 v4」「nutui v3 迁移 v4」「升级 @nutui/nutui-react 到 4.0」。与常见的大版本升级不同:v3→v4 几乎没有 Props 增删或改名,破坏性变更集中在**样式 / CSS 类名 / Design Token / 枚举值 / 默认值**(如 Empty 的 size/status、Popover 的 theme)。本 skill 用离线 CLI 的 migrate / diff 命令定位真正需要改的组件,以官方迁移文档为准逐处改写,避免臆造 API 改名或漏掉默认值变更。 +allowed-tools: + - Bash(nutui-react *) + - Bash(npx -y @nutui/nutui-react-cli *) + - Bash(which nutui-react) + - Bash(grep *) +--- + +# NutUI React v3 → v4 升级 + +你负责把项目从 `@nutui/nutui-react` **3.x** 升级到 **4.x**。 + +**先记住这个反直觉的事实**:v3→v4 **几乎没有 Props 增删 / 改名**——大多数组件的 API 在两版之间完全一致。真正的破坏性变更集中在四个维度: + +1. **枚举值 / 默认值变更**(最需要改代码)——如 Empty 的 `size`、`status`,Popover 的 `theme` 默认值。这些**不会自动兼容**,且编译器不会报错,漏改会静默出错。 +2. **CSS 类名变更**——如果项目里有针对 `.nut-xxx` 类名的自定义样式覆盖,类名变了样式就失效。 +3. **Design Token 变更**——`var(--nutui-*)` 变量的新增 / 移除 / 默认值调整。 +4. **视觉规格调整**——间距、字号、图标尺寸等,通常无需改代码,但需构建后人工核对。 + +所以:**不要假设升级 = 改 import 或改 Props 名。** 要靠 CLI 查出每个组件到底改了什么维度,再逐处改。 + +## 支撑工具 + +`@nutui/nutui-react-cli` —— 离线、元数据随包分发。若不在 PATH 上用 npx 调用: + +```bash +which nutui-react || echo "use: npx -y @nutui/nutui-react-cli " +``` + +两个关键命令: + +- `nutui-react migrate 3 4` —— **官方迁移文档**(权威、手写、随 v4 逐组件补充)。这是改写的**主依据**。 +- `nutui-react diff 3 4 ` —— **两版 meta 的 Props 实测差异**(枚举值、默认值、类型的精确 `旧→新`)。补齐文档没写到的 API/默认值级差异。 + +二者**互补**:migrate 讲"为什么改、怎么改"(含样式/类名/token),diff 给"API 层精确差了什么"。改一个组件时两个都看。 + +**始终传 `--format json` 解析结构化输出,不要正则抓文本。** + +## 升级流程 + +按序执行。不要跳过扫描——它决定了你只需处理哪几个组件。 + +### 阶段 0 —— 依赖升级(先做) + +1. 升级依赖到 v4(执行安装前先征求用户同意): + - `@nutui/nutui-react@^4` + - 图标包 `@nutui/icons-react`(v4 配套版本)——若项目用到图标 +2. 确认锁文件更新、`node_modules` 重装。 + +### 阶段 1 —— 扫描盘点 + +用 `--apply` 扫描项目,一步得到"哪些组件有破坏性变更需要处理": + +```bash +nutui-react migrate 3 4 --apply ./src --format json +``` + +输出里关注三个字段: + +- `matchedComponents` —— **项目用到、且有破坏性变更的组件**。这是你的工作清单。 +- `componentsWithoutBreakingChanges` —— 项目用到、但迁移文档未列破坏性变更的组件(多数组件在此,通常无需改)。 +- `steps[].guide` —— 每个待处理组件的迁移说明原文。 + +若 `matchedComponents` 为空:按当前迁移文档,项目所用组件无需改代码——直接进阶段 3 验证即可(仍建议核对样式)。 + +补充扫描:如果项目有**自定义 CSS 覆盖**(针对 `.nut-*` 类名或 `--nutui-*` 变量),grep 出来,它们是类名/token 变更的高风险点: + +```bash +grep -rn "\.nut-" src --include=*.css --include=*.scss --include=*.less +grep -rn -- "--nutui-" src --include=*.css --include=*.scss --include=*.less +``` + +### 阶段 2 —— 逐组件改写 + +对 `matchedComponents` 里的**每个**组件: + +```bash +# 1. 读官方迁移说明(为什么改、样式/类名/token 怎么变) +nutui-react migrate 3 4 --component Empty --format json + +# 2. 看 API 层精确差异(枚举值、默认值、类型的 旧→新) +nutui-react diff 3 4 Empty --format json + +# 3. 需要时查完整文档 / token 交叉核对 +nutui-react doc Empty --format json +nutui-react token Empty --format json +``` + +然后按迁移说明逐处改写。以**枚举值 / 默认值 / 类名 / token** 为主,不要臆造 Props 改名。 + +### 阶段 3 —— 验证 + +- 构建项目确认编译通过。 +- **编译通过 ≠ 视觉/行为正确**——枚举值/默认值变更不会报编译错。逐个核对阶段 1/2 改过的组件的实际渲染。 +- 报告:哪些组件已改、哪些自定义样式覆盖需复核、哪些建议用户在真机/浏览器里目视确认。 + +## 已知破坏性变更(截至当前文档,务必以 `migrate` 命令实时输出为准) + +迁移文档随 v4 beta 持续补充,以下为当前已覆盖的组件与要点。**始终跑 `migrate 3 4` 拿最新清单,不要只依赖下表。** + +### Empty —— 枚举值 + 默认值 + 类名,全部不兼容 + +- `size`:移除 `base`/`small`,改为 `full`/`half`/`partial`;**默认值 `base` → `half`**。 + - `size="base"` → 整页用 `full`、局部用 `partial`;`size="small"` → `half`。 +- `status`:移除 `empty`/`error`;**默认值 `empty` → `network`**。 + - `status="empty"` → `search`(或按场景选枚举);`status="error"` → `network`(或用 `image` 传自定义插图)。 +- CSS 类名:`.nut-empty-base`/`.nut-empty-small` → `.nut-empty--full`/`--half`/`--partial`;插图容器 → `.nut-empty-image`。 +- token:旧 `--nutui-empty-image-size` 等已移除,改用分尺寸变量。 + +### Popover —— 默认值 + 类名,不兼容 + +- 新增 `type`(`status`/`description`),默认 `status`。 +- **`theme` 默认值 `light` → `dark`**:v3 默认明亮风格的,需显式加 `theme="light"`;v3 写 `theme="dark"` 的可移除该属性。 +- CSS 类名:移除 `.nut-popover-dark`(深色已是默认);明亮风格用 `.nut-popover-light`。 +- token:多个 `--nutui-popover-*` 默认值调整。 + +### Toast —— 默认值 + 类名 + +- **默认 `duration` `2s` → `3s`**:要维持 2s 显式传 `duration: 2` 或全局 `Toast.config({ duration: 2 })`。 +- 移除拼错的辅助类名 `.nut-toast-inner-descrption`(**无替代类名**,若有针对它的样式覆盖需删除/改到 `.nut-toast-inner`)。 + +### Radio / Checkbox —— 纯样式 + +- Radio:无文本时热区调整(新增 `.nut-radio-nolabel`)、去除选中投影。 +- Checkbox:暗黑模式色彩修复。 +- 一般无需改代码,但如有相关样式覆盖需核对。 + +## 核心规则 + +1. **先扫描,再逐组件查。** `migrate 3 4 --apply ./src` 给工作清单,逐个 `migrate --component X` + `diff 3 4 X` 再改。 +2. **破坏性变更主要在样式/类名/token/枚举/默认值,不在 Props 名。** 不要臆造 API 改名。 +3. **枚举值/默认值变更必须改代码且不报编译错**——Empty `size`/`status`、Popover `theme`、Toast `duration` 是重灾区,漏改会静默出错。 +4. **始终 `--format json`。** +5. **不要用 `nutui-codemod` 做 v3→v4** —— 那个包的规则是 v2→v3 的(组件/Props 改名),与 v3→v4 不匹配,跑了会误改。 +6. **构建通过不代表升级完成** —— 对改过的组件目视核对渲染,把需人工确认处交给用户。 diff --git a/packages/nutui-react-taro-cli/CHANGELOG.md b/packages/nutui-react-taro-cli/CHANGELOG.md index a67261183b..33371848eb 100644 --- a/packages/nutui-react-taro-cli/CHANGELOG.md +++ b/packages/nutui-react-taro-cli/CHANGELOG.md @@ -7,6 +7,7 @@ `2026-09-04` - feat: 新增多版本知识查询能力 +- feat: 新增 v3 -> v4 迁移的能力 ## v4.0.0 diff --git a/packages/nutui-react-taro-cli/README.md b/packages/nutui-react-taro-cli/README.md index a265e86e99..886f6cb58a 100644 --- a/packages/nutui-react-taro-cli/README.md +++ b/packages/nutui-react-taro-cli/README.md @@ -36,6 +36,8 @@ nutui-react-taro info Button --format json | `nutui-react-taro doc ` | 查看组件完整文档(中文) | | `nutui-react-taro demo [name]` | 省略 `name` 列出全部示例;指定 `name`(如 `demo1`)输出源码 | | `nutui-react-taro token [Component]` | 查看 Design Token;省略组件名则列出全局 token | +| `nutui-react-taro migrate [from] [to]` | 输出 vN→vM 迁移指南(默认 `3 4`);`--component ` 看单组件,`--apply ` 扫描项目生成迁移提示 | +| `nutui-react-taro diff [Component]` | 跨版本 Props 差异对比(新增 / 移除 / 类型或默认值变更) | | `nutui-react-taro mcp` | 启动本地 MCP 服务(stdio),供 Claude Code / Cursor / VS Code / Codex 等 IDE 调用 | 全局选项: @@ -54,6 +56,9 @@ nutui-react-taro doc Button nutui-react-taro demo Button # 列出示例 nutui-react-taro demo Button demo1 # 查看某个示例源码 nutui-react-taro token Button +nutui-react-taro migrate 3 4 # v3→v4 迁移指南 +nutui-react-taro migrate 3 4 --apply ./src --format json # 扫描项目,生成给 Agent 的迁移提示 +nutui-react-taro diff 3.1.0 4.0.0-beta.7 Empty # 跨版本 Props 差异 ``` ## 多版本 @@ -79,11 +84,27 @@ nutui-react-taro --nv 4.0.0-beta.7 doc Cell > 在项目里能自动推断版本时,优先不显式传 `--nutui-version`,让 CLI 自行检测更省心。`-v / --version` 语义保持不变,仍输出 CLI 自身版本。 +## 版本迁移(v3 → v4) + +两个命令支撑从 v3 升级到 v4,数据均随包离线分发: + +- `nutui-react-taro migrate 3 4` —— 输出**官方迁移文档**(从主仓 Taro 端 `migrate-from-v3.md` 抽取,随 v4 逐组件补充)。`--component ` 只看某组件;`--apply ` 扫描项目、只输出实际用到组件的迁移步骤,并生成一段给 Code Agent 的定向提示。 +- `nutui-react-taro diff [Component]` —— 实时对比两个版本快照的 Props,列出新增 / 移除 / 类型或默认值变更(精确 `旧→新`)。 + +二者**互补**:`migrate` 讲"为什么改、怎么改"(含样式 / CSS 类名 / Design Token),`diff` 给"API 层精确差了什么"。配套的 `nutui-react-taro-v3-to-v4` Skill 会编排整个升级流程(见下)。 + +```bash +nutui-react-taro migrate 3 4 --format json # 全量迁移清单 +nutui-react-taro migrate 3 4 --component Empty # 只看 Empty +nutui-react-taro migrate 3 4 --apply ./src --format json # 扫描项目 + 生成 Agent 提示 +nutui-react-taro diff 3 4 Empty --format json # Empty 的 Props 差异 +``` + ## MCP(IDE 集成) CLI 是「Agent 主动敲命令」,MCP 则把同一份能力注册成 IDE 原生工具,让 Claude Code / Cursor / VS Code / Codex 在对话中**按需自动调用**,无需拼命令行字符串。二者复用同一份离线 meta 快照,等于给同一个知识库套了两种调用协议。 -`nutui-react-taro mcp` 启动一个 stdio MCP 服务,暴露 5 个只读工具与 2 个提示词: +`nutui-react-taro mcp` 启动一个 stdio MCP 服务,暴露 7 个只读工具与 2 个提示词: | 工具 | 说明 | | --- | --- | @@ -92,6 +113,8 @@ CLI 是「Agent 主动敲命令」,MCP 则把同一份能力注册成 IDE 原 | `nutui_doc` | 组件完整文档(中文) | | `nutui_demo` | Taro 示例列表 / 源码 | | `nutui_token` | Design Token(全局 / 组件级) | +| `nutui_migrate` | vN→vM 迁移指南(可按组件 / 扫描目录) | +| `nutui_diff` | 跨版本 Props 差异对比 | | 提示词 | 说明 | | --- | --- | @@ -135,6 +158,14 @@ npx skills add jdf2e/nutui-react --skill nutui-react-taro 兼容 Claude Code / Cursor / VS Code / Codex 等所有支持 [skills](https://github.com/vercel-labs/skills) 协议的 Agent。安装后,Agent 在遇到 NutUI React Taro 相关任务时会自动遵循「先查后写」的流程。 +### 升级 Skill:v3 → v4 + +本包还内置一份 [升级 Skill](./skills/nutui-react-taro-v3-to-v4/SKILL.md),指导 Agent 把 Taro 项目从 NutUI React Taro v3 升级到 v4。它编排「依赖升级 → `migrate --apply` 扫描项目 → 逐组件读 `migrate` + `diff` 改写 → 构建验证」的完整流程,并把 v3→v4 的关键事实讲清楚:破坏性变更集中在**样式 / CSS 类名 / Design Token / 枚举值 / 默认值**(如 Empty 的 `size`/`status`、Popover 的 `theme`、Toast 的 `duration`)。 + +```bash +npx skills add jdf2e/nutui-react --skill nutui-react-taro-v3-to-v4 +``` + ## 本地开发 ```bash diff --git a/packages/nutui-react-taro-cli/scripts/prepare-data.mjs b/packages/nutui-react-taro-cli/scripts/prepare-data.mjs index 9776aa0c42..a42f997e41 100644 --- a/packages/nutui-react-taro-cli/scripts/prepare-data.mjs +++ b/packages/nutui-react-taro-cli/scripts/prepare-data.mjs @@ -13,4 +13,8 @@ await prepareAllVersions({ docKeys: { zh: 'taro' }, demoKey: 'taro', apiField: 'apiTaro', + // Taro 端迁移文档(随 v4 手写维护,v3 tag 无,缺失静默跳过)。 + migrationDocs: { + 'from-v3': 'src/sites/sites-react/doc/docs/taro/migrate-from-v3.md', + }, }) diff --git a/packages/nutui-react-taro-cli/skills/nutui-react-taro-v3-to-v4/README.md b/packages/nutui-react-taro-cli/skills/nutui-react-taro-v3-to-v4/README.md new file mode 100644 index 0000000000..4ef0bb333e --- /dev/null +++ b/packages/nutui-react-taro-cli/skills/nutui-react-taro-v3-to-v4/README.md @@ -0,0 +1,29 @@ +# NutUI React Taro v3 → v4 Upgrade + +把项目从 NutUI React Taro v3(`@nutui/nutui-react-taro` 3.x,小程序 / 跨端)升级到 v4(4.x)。 + +与常见的大版本升级不同:v3→v4 **几乎没有 Props 增删或改名**,破坏性变更集中在**样式 / CSS 类名 / Design Token / 枚举值 / 默认值**(如 Empty 的 `size`/`status`、Popover 的 `theme` 默认值、Toast 的 `duration`)。这些变更**不会触发编译错误**,漏改会静默出错。本 skill 用离线 CLI 的 `migrate` / `diff` 命令定位真正需要改的组件,以官方迁移文档为准逐处改写,避免臆造 API 改名或漏掉默认值变更。 + +## 安装 + +运行时通过 `npx` 免安装调用 CLI,无需预装: + +```bash +npx skills add jdf2e/nutui-react --skill nutui-react-taro-v3-to-v4 +``` + +## 适用场景 + +- **系统性完成 v3 → v4 升级**:按依赖升级 → 扫描盘点 → 逐组件改写 → 验证的流程,把 Taro 项目从 `@nutui/nutui-react-taro` 3.x 升到 4.x。 +- **定位真正需要改的组件**:用 `nutui-react-taro migrate 3 4 --apply ./src` 扫描项目,只列出项目实际用到、且有破坏性变更的组件,避免对全部组件盲目排查。 +- **精确核对 API 差异**:用 `nutui-react-taro diff 3 4 ` 拿到两版 Props 的枚举值 / 默认值 / 类型的精确 `旧→新`,补齐迁移文档没写到的 API 级差异。 +- **处理枚举值 / 默认值变更**:识别 Empty `size`/`status`、Popover `theme`、Toast `duration` 等默认值变更——它们不报编译错,必须改代码。 +- **核对自定义样式覆盖**:grep 项目里针对 `.nut-*` 类名或 `--nutui-*` 变量的自定义样式,对照 CSS 类名 / token 变更逐处修正。 + +## 依赖的 CLI 命令 + +- `nutui-react-taro migrate 3 4 [--component X] [--apply ./src]` —— 官方迁移文档(按组件切分 / 项目扫描)。 +- `nutui-react-taro diff 3 4 [Component]` —— 跨版本 Props 实测差异。 +- `nutui-react-taro doc ` / `token ` —— 完整文档与 Design Token 交叉核对。 + +全部离线、随包分发、支持 `--format json`。 diff --git a/packages/nutui-react-taro-cli/skills/nutui-react-taro-v3-to-v4/SKILL.en.md b/packages/nutui-react-taro-cli/skills/nutui-react-taro-v3-to-v4/SKILL.en.md new file mode 100644 index 0000000000..5b17085ac6 --- /dev/null +++ b/packages/nutui-react-taro-cli/skills/nutui-react-taro-v3-to-v4/SKILL.en.md @@ -0,0 +1,138 @@ +--- +name: nutui-react-taro-v3-to-v4 +description: > + Use when upgrading a project from NutUI React Taro v3 (@nutui/nutui-react-taro 3.x, mini-program / cross-platform) to v4 (4.x). Triggers on "upgrade NutUI React Taro from v3 to v4", "migrate nutui taro v3 to v4", "bump @nutui/nutui-react-taro to 4.0". Unlike typical major upgrades, v3→v4 has almost no Props additions/removals/renames — breaking changes concentrate in **styles / CSS class names / Design Tokens / enum values / default values** (e.g. Empty's size/status, Popover's theme). This skill uses the offline CLI's migrate / diff commands to pinpoint which components actually need changes, rewriting each per the official migration doc — avoiding invented API renames or missed default-value changes. +allowed-tools: + - Bash(nutui-react-taro *) + - Bash(npx -y @nutui/nutui-react-taro-cli *) + - Bash(which nutui-react-taro) + - Bash(grep *) +--- + +# NutUI React Taro v3 → v4 Upgrade + +You are upgrading a project from `@nutui/nutui-react-taro` **3.x** to **4.x** (Taro mini-program / cross-platform). + +**Remember this counter-intuitive fact first**: v3→v4 has **almost no Props additions / renames** — most components' APIs are identical across the two versions. The real breaking changes concentrate in four dimensions: + +1. **Enum / default-value changes** (most code-impacting) — e.g. Empty's `size`, `status`, Popover's `theme` default. These do **not** auto-fall-back, and the compiler won't flag them — missing one fails silently. +2. **CSS class-name changes** — if the project has custom style overrides targeting `.nut-xxx` classes, a renamed class silently breaks them. +3. **Design Token changes** — added / removed / redefaulted `var(--nutui-*)` variables. +4. **Visual-spec adjustments** — spacing, font size, icon size. Usually no code change, but verify rendering after build. + +So: **don't assume upgrade = change imports or rename Props.** Use the CLI to find what each component actually changed, then fix each spot. + +## Supporting tools + +`@nutui/nutui-react-taro-cli` — offline, metadata bundled. If not on PATH, call via npx: + +```bash +which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli " +``` + +Two key commands: + +- `nutui-react-taro migrate 3 4` — the **official migration doc** (authoritative, hand-written, filled in per-component alongside v4). This is the **primary basis** for rewrites. +- `nutui-react-taro diff 3 4 ` — **measured Props diff between the two versions' meta** (precise `old → new` for enums, defaults, types). Fills in API/default-level diffs the doc doesn't spell out. + +They're **complementary**: migrate explains "why & how to change" (incl. styles/classes/tokens), diff gives "what exactly differs at the API layer". Read both when changing a component. + +**Always pass `--format json` and parse it — don't regex the text output.** + +## Upgrade flow + +Execute in order. Don't skip the scan — it decides which few components you need to touch. + +### Phase 0 — Dependency upgrade (do first) + +1. Bump deps to v4 (get user consent before installing): + - `@nutui/nutui-react-taro@^4` + - icon package `@nutui/icons-react-taro` (v4-compatible version) — if the project uses icons +2. Confirm lockfile update and `node_modules` reinstall. + +### Phase 1 — Scan & inventory + +Use `--apply` to scan the project and get "which components have breaking changes to handle" in one step: + +```bash +nutui-react-taro migrate 3 4 --apply ./src --format json +``` + +Focus on three fields: + +- `matchedComponents` — **components the project uses AND that have breaking changes**. This is your worklist. +- `componentsWithoutBreakingChanges` — used but not listed in the migration doc (most components; usually no change needed). +- `steps[].guide` — the migration doc text for each component to handle. + +If `matchedComponents` is empty: per the current doc, the project's components need no code changes — proceed to Phase 3 verification (still worth checking styles). + +Extra scan: if the project has **custom CSS overrides** (targeting `.nut-*` classes or `--nutui-*` variables), grep them — they're the high-risk spots for class/token changes: + +```bash +grep -rn "\.nut-" src --include=*.css --include=*.scss --include=*.less +grep -rn -- "--nutui-" src --include=*.css --include=*.scss --include=*.less +``` + +### Phase 2 — Rewrite per component + +For **each** component in `matchedComponents`: + +```bash +# 1. Read the official migration note (why & how; styles/classes/tokens) +nutui-react-taro migrate 3 4 --component Empty --format json + +# 2. See precise API diff (enums, defaults, types old → new) +nutui-react-taro diff 3 4 Empty --format json + +# 3. Cross-check full doc / tokens when needed +nutui-react-taro doc Empty --format json +nutui-react-taro token Empty --format json +``` + +Then rewrite per the migration note. Focus on **enum / default / class-name / token** changes; don't invent Props renames. + +### Phase 3 — Verify + +- Build the project and confirm it compiles (e.g. `taro build --type weapp` / `--type h5`). +- **Compiling ≠ correct** — enum/default changes don't raise compile errors. Verify actual rendering of every component you touched in Phase 1/2. +- Report: which components were changed, which custom style overrides need review, which you recommend the user eyeball on device/simulator. + +## Known breaking changes (as of current doc — always defer to live `migrate` output) + +The migration doc is filled in continuously through v4 beta; below are currently-covered components. **Always run `migrate 3 4` for the latest list; don't rely on this table alone.** + +### Empty — enums + defaults + class names, all breaking + +- `size`: removes `base`/`small`, now `full`/`half`/`partial`; **default `base` → `half`**. + - `size="base"` → `full` (full-page) or `partial` (inline); `size="small"` → `half`. +- `status`: removes `empty`/`error`; **default `empty` → `network`**. + - `status="empty"` → `search` (or a scenario enum); `status="error"` → `network` (or pass a custom `image`). +- CSS classes: `.nut-empty-base`/`.nut-empty-small` → `.nut-empty--full`/`--half`/`--partial`; image container → `.nut-empty-image`. +- tokens: old `--nutui-empty-image-size` etc. removed; use per-size variables. + +### Popover — defaults + class names, breaking + +- New `type` (`status`/`description`), default `status`. +- **`theme` default `light` → `dark`**: v3 code relying on the light default must add `theme="light"`; v3 `theme="dark"` can drop the prop. +- CSS classes: removes `.nut-popover-dark` (dark is now default); light style uses `.nut-popover-light`. +- tokens: several `--nutui-popover-*` defaults adjusted. + +### Toast — defaults + class name + +- **Default `duration` `2s` → `3s`**: to keep 2s, pass `duration: 2` explicitly or `Toast.config({ duration: 2 })` globally. +- Removes the misspelled helper class `.nut-toast-inner-descrption` (**no replacement class**; delete or move overrides to `.nut-toast-inner`). + +### Radio / Checkbox — pure style + +- Radio: hotspot tweak when no text (adds `.nut-radio-nolabel`), removes checked shadow. +- Checkbox: dark-mode color fixes. +- Usually no code change, but review related style overrides. + +## Key rules + +1. **Scan first, then query per component.** `migrate 3 4 --apply ./src` gives the worklist; `migrate --component X` + `diff 3 4 X` per component before changing. +2. **Breaking changes are in styles/classes/tokens/enums/defaults, not Props names.** Don't invent API renames. +3. **Enum/default changes must be fixed and won't raise compile errors** — Empty `size`/`status`, Popover `theme`, Toast `duration` are the danger zones; missing one fails silently. +4. **Always `--format json`.** +5. **Don't use `nutui-codemod` for v3→v4** — its rules are for v2→v3 (component/Props renames) and will mis-edit if run. +6. **Compiling isn't done** — eyeball rendering of changed components, hand off spots needing human confirmation. diff --git a/packages/nutui-react-taro-cli/skills/nutui-react-taro-v3-to-v4/SKILL.md b/packages/nutui-react-taro-cli/skills/nutui-react-taro-v3-to-v4/SKILL.md new file mode 100644 index 0000000000..6eaf0f26b2 --- /dev/null +++ b/packages/nutui-react-taro-cli/skills/nutui-react-taro-v3-to-v4/SKILL.md @@ -0,0 +1,138 @@ +--- +name: nutui-react-taro-v3-to-v4 +description: > + 当需要把项目从 NutUI React Taro v3(@nutui/nutui-react-taro 3.x,小程序 / 跨端)升级到 v4(4.x)时使用。触发场景如「把 NutUI React Taro 从 v3 升级到 v4」「nutui taro v3 迁移 v4」「升级 @nutui/nutui-react-taro 到 4.0」。与常见的大版本升级不同:v3→v4 几乎没有 Props 增删或改名,破坏性变更集中在**样式 / CSS 类名 / Design Token / 枚举值 / 默认值**(如 Empty 的 size/status、Popover 的 theme)。本 skill 用离线 CLI 的 migrate / diff 命令定位真正需要改的组件,以官方迁移文档为准逐处改写,避免臆造 API 改名或漏掉默认值变更。 +allowed-tools: + - Bash(nutui-react-taro *) + - Bash(npx -y @nutui/nutui-react-taro-cli *) + - Bash(which nutui-react-taro) + - Bash(grep *) +--- + +# NutUI React Taro v3 → v4 升级 + +你负责把项目从 `@nutui/nutui-react-taro` **3.x** 升级到 **4.x**(Taro 小程序 / 跨端)。 + +**先记住这个反直觉的事实**:v3→v4 **几乎没有 Props 增删 / 改名**——大多数组件的 API 在两版之间完全一致。真正的破坏性变更集中在四个维度: + +1. **枚举值 / 默认值变更**(最需要改代码)——如 Empty 的 `size`、`status`,Popover 的 `theme` 默认值。这些**不会自动兼容**,且编译器不会报错,漏改会静默出错。 +2. **CSS 类名变更**——如果项目里有针对 `.nut-xxx` 类名的自定义样式覆盖,类名变了样式就失效。 +3. **Design Token 变更**——`var(--nutui-*)` 变量的新增 / 移除 / 默认值调整。 +4. **视觉规格调整**——间距、字号、图标尺寸等,通常无需改代码,但需构建后人工核对。 + +所以:**不要假设升级 = 改 import 或改 Props 名。** 要靠 CLI 查出每个组件到底改了什么维度,再逐处改。 + +## 支撑工具 + +`@nutui/nutui-react-taro-cli` —— 离线、元数据随包分发。若不在 PATH 上用 npx 调用: + +```bash +which nutui-react-taro || echo "use: npx -y @nutui/nutui-react-taro-cli " +``` + +两个关键命令: + +- `nutui-react-taro migrate 3 4` —— **官方迁移文档**(权威、手写、随 v4 逐组件补充)。这是改写的**主依据**。 +- `nutui-react-taro diff 3 4 ` —— **两版 meta 的 Props 实测差异**(枚举值、默认值、类型的精确 `旧→新`)。补齐文档没写到的 API/默认值级差异。 + +二者**互补**:migrate 讲"为什么改、怎么改"(含样式/类名/token),diff 给"API 层精确差了什么"。改一个组件时两个都看。 + +**始终传 `--format json` 解析结构化输出,不要正则抓文本。** + +## 升级流程 + +按序执行。不要跳过扫描——它决定了你只需处理哪几个组件。 + +### 阶段 0 —— 依赖升级(先做) + +1. 升级依赖到 v4(执行安装前先征求用户同意): + - `@nutui/nutui-react-taro@^4` + - 图标包 `@nutui/icons-react-taro`(v4 配套版本)——若项目用到图标 +2. 确认锁文件更新、`node_modules` 重装。 + +### 阶段 1 —— 扫描盘点 + +用 `--apply` 扫描项目,一步得到"哪些组件有破坏性变更需要处理": + +```bash +nutui-react-taro migrate 3 4 --apply ./src --format json +``` + +输出里关注三个字段: + +- `matchedComponents` —— **项目用到、且有破坏性变更的组件**。这是你的工作清单。 +- `componentsWithoutBreakingChanges` —— 项目用到、但迁移文档未列破坏性变更的组件(多数组件在此,通常无需改)。 +- `steps[].guide` —— 每个待处理组件的迁移说明原文。 + +若 `matchedComponents` 为空:按当前迁移文档,项目所用组件无需改代码——直接进阶段 3 验证即可(仍建议核对样式)。 + +补充扫描:如果项目有**自定义 CSS 覆盖**(针对 `.nut-*` 类名或 `--nutui-*` 变量),grep 出来,它们是类名/token 变更的高风险点: + +```bash +grep -rn "\.nut-" src --include=*.css --include=*.scss --include=*.less +grep -rn -- "--nutui-" src --include=*.css --include=*.scss --include=*.less +``` + +### 阶段 2 —— 逐组件改写 + +对 `matchedComponents` 里的**每个**组件: + +```bash +# 1. 读官方迁移说明(为什么改、样式/类名/token 怎么变) +nutui-react-taro migrate 3 4 --component Empty --format json + +# 2. 看 API 层精确差异(枚举值、默认值、类型的 旧→新) +nutui-react-taro diff 3 4 Empty --format json + +# 3. 需要时查完整文档 / token 交叉核对 +nutui-react-taro doc Empty --format json +nutui-react-taro token Empty --format json +``` + +然后按迁移说明逐处改写。以**枚举值 / 默认值 / 类名 / token** 为主,不要臆造 Props 改名。 + +### 阶段 3 —— 验证 + +- 构建项目确认编译通过(如 `taro build --type weapp` / `--type h5`)。 +- **编译通过 ≠ 视觉/行为正确**——枚举值/默认值变更不会报编译错。逐个核对阶段 1/2 改过的组件的实际渲染。 +- 报告:哪些组件已改、哪些自定义样式覆盖需复核、哪些建议用户在真机/模拟器里目视确认。 + +## 已知破坏性变更(截至当前文档,务必以 `migrate` 命令实时输出为准) + +迁移文档随 v4 beta 持续补充,以下为当前已覆盖的组件与要点。**始终跑 `migrate 3 4` 拿最新清单,不要只依赖下表。** + +### Empty —— 枚举值 + 默认值 + 类名,全部不兼容 + +- `size`:移除 `base`/`small`,改为 `full`/`half`/`partial`;**默认值 `base` → `half`**。 + - `size="base"` → 整页用 `full`、局部用 `partial`;`size="small"` → `half`。 +- `status`:移除 `empty`/`error`;**默认值 `empty` → `network`**。 + - `status="empty"` → `search`(或按场景选枚举);`status="error"` → `network`(或用 `image` 传自定义插图)。 +- CSS 类名:`.nut-empty-base`/`.nut-empty-small` → `.nut-empty--full`/`--half`/`--partial`;插图容器 → `.nut-empty-image`。 +- token:旧 `--nutui-empty-image-size` 等已移除,改用分尺寸变量。 + +### Popover —— 默认值 + 类名,不兼容 + +- 新增 `type`(`status`/`description`),默认 `status`。 +- **`theme` 默认值 `light` → `dark`**:v3 默认明亮风格的,需显式加 `theme="light"`;v3 写 `theme="dark"` 的可移除该属性。 +- CSS 类名:移除 `.nut-popover-dark`(深色已是默认);明亮风格用 `.nut-popover-light`。 +- token:多个 `--nutui-popover-*` 默认值调整。 + +### Toast —— 默认值 + 类名 + +- **默认 `duration` `2s` → `3s`**:要维持 2s 显式传 `duration: 2` 或全局 `Toast.config({ duration: 2 })`。 +- 移除拼错的辅助类名 `.nut-toast-inner-descrption`(**无替代类名**,若有针对它的样式覆盖需删除/改到 `.nut-toast-inner`)。 + +### Radio / Checkbox —— 纯样式 + +- Radio:无文本时热区调整(新增 `.nut-radio-nolabel`)、去除选中投影。 +- Checkbox:暗黑模式色彩修复。 +- 一般无需改代码,但如有相关样式覆盖需核对。 + +## 核心规则 + +1. **先扫描,再逐组件查。** `migrate 3 4 --apply ./src` 给工作清单,逐个 `migrate --component X` + `diff 3 4 X` 再改。 +2. **破坏性变更主要在样式/类名/token/枚举/默认值,不在 Props 名。** 不要臆造 API 改名。 +3. **枚举值/默认值变更必须改代码且不报编译错**——Empty `size`/`status`、Popover `theme`、Toast `duration` 是重灾区,漏改会静默出错。 +4. **始终 `--format json`。** +5. **不要用 `nutui-codemod` 做 v3→v4** —— 那个包的规则是 v2→v3 的(组件/Props 改名),与 v3→v4 不匹配,跑了会误改。 +6. **构建通过不代表升级完成** —— 对改过的组件目视核对渲染,把需人工确认处交给用户。 From 84b5af5e03f6f354027b30b175bd5a966a9fa26e Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 4 Sep 2026 16:36:57 +0800 Subject: [PATCH 22/25] =?UTF-8?q?chore:=20=E9=87=8D=E6=96=B0=E7=94=9F?= =?UTF-8?q?=E6=88=90=20lock?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pnpm-lock.yaml | 985 +++++++++++++++++++++++++++++-------------------- 1 file changed, 588 insertions(+), 397 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c8c201a9cd..0ab5d733d8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -94,8 +94,8 @@ importers: specifier: ^3.1.1 version: 3.1.1(rollup@4.63.1) '@pmmmwh/react-refresh-webpack-plugin': - specifier: 0.5.10 - version: 0.5.10(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + specifier: 0.6.2 + version: 0.6.2(react-refresh@0.18.0)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@rollup/plugin-babel': specifier: ^6.1.0 version: 6.1.0(@babel/core@7.29.7)(@types/babel__core@7.20.5)(rollup@4.63.1) @@ -116,7 +116,7 @@ importers: version: 1.16.1(@swc/helpers@0.5.23) '@tarojs/components': specifier: 4.2.0 - version: 4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + version: 4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/plugin-platform-alipay': specifier: 4.2.0 version: 4.2.0(@tarojs/service@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0) @@ -131,7 +131,7 @@ importers: version: 4.2.0(react@18.3.1) '@tarojs/taro': specifier: 4.2.0 - version: 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + version: 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@testing-library/jest-dom': specifier: ^6.9.1 version: 6.9.1 @@ -187,8 +187,8 @@ importers: specifier: ^2.1.9 version: 2.1.9(vitest@3.2.7) autoprefixer: - specifier: ^10.4.17 - version: 10.5.0(postcss@8.5.15) + specifier: ^10.5.4 + version: 10.5.4(postcss@8.5.28) axios: specifier: ^1.19.0 version: 1.20.0(debug@4.4.3) @@ -242,7 +242,7 @@ importers: version: 0.5.0 gulp-postcss: specifier: ^10.0.0 - version: 10.0.0(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4) + version: 10.0.0(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13) gulp-rename: specifier: ^2.1.0 version: 2.1.0 @@ -286,23 +286,23 @@ importers: specifier: ^4.1.1 version: 4.1.1(mobx@6.16.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) postcss: - specifier: ^8.4.35 - version: 8.5.15 + specifier: ^8.5.26 + version: 8.5.28 postcss-css-variables: specifier: ^0.19.0 - version: 0.19.0(postcss@8.5.15) + version: 0.19.0(postcss@8.5.28) postcss-import: - specifier: ^16.0.1 - version: 16.1.1(postcss@8.5.15) + specifier: ^16.2.0 + version: 16.2.0(postcss@8.5.28) postcss-modules: - specifier: ^6.0.0 - version: 6.0.1(postcss@8.5.15) + specifier: ^6.0.1 + version: 6.0.1(postcss@8.5.28) postcss-rtlcss: - specifier: ^5.1.0 - version: 5.7.1(postcss@8.5.15) + specifier: ^5.7.1 + version: 5.7.1(postcss@8.5.28) postcss-scss: specifier: ^4.0.9 - version: 4.0.9(postcss@8.5.15) + version: 4.0.9(postcss@8.5.28) prettier: specifier: ^3.9.6 version: 3.9.6 @@ -446,8 +446,8 @@ importers: specifier: ^3.9.6 version: 3.9.6 tsup: - specifier: ^8.3.0 - version: 8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.19))(@swc/core@1.15.40(@swc/helpers@0.5.23))(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4)(typescript@5.9.3)(yaml@2.9.0) + specifier: ^8.5.1 + version: 8.5.1(@microsoft/api-extractor@7.59.0(@types/node@22.20.1))(@swc/core@1.16.1(@swc/helpers@0.5.23))(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13)(typescript@5.9.3)(yaml@2.9.0) tsx: specifier: ^4.23.12 version: 4.23.13 @@ -475,16 +475,16 @@ importers: devDependencies: jest: specifier: ^30.4.2 - version: 30.4.2(@types/node@20.19.43) + version: 30.4.2(@types/node@22.20.1) prettier: specifier: ^3.9.6 version: 3.9.6 release-it: specifier: ^18.1.2 - version: 18.1.2(@types/node@20.19.43)(typescript@5.9.3) + version: 18.1.2(@types/node@22.20.1)(typescript@5.9.3) ts-jest: specifier: ^29.4.12 - version: 29.4.12(@babel/core@7.29.7)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@30.4.1(@babel/core@7.29.7))(jest-util@30.4.1)(jest@30.4.2(@types/node@20.19.43))(typescript@5.9.3) + version: 29.4.12(@babel/core@7.29.7)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@30.4.1(@babel/core@7.29.7))(jest-util@30.4.1)(jest@30.4.2(@types/node@22.20.1))(typescript@5.9.3) packages/nutui-react-cli: dependencies: @@ -505,8 +505,8 @@ importers: specifier: ^9.11.1 version: 9.11.1(magicast@0.3.5) tsup: - specifier: ^8.3.0 - version: 8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.19))(@swc/core@1.15.40(@swc/helpers@0.5.23))(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4)(typescript@5.9.3)(yaml@2.9.0) + specifier: ^8.5.1 + version: 8.5.1(@microsoft/api-extractor@7.59.0(@types/node@22.20.1))(@swc/core@1.16.1(@swc/helpers@0.5.23))(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13)(typescript@5.9.3)(yaml@2.9.0) typescript: specifier: ^5.6.2 version: 5.9.3 @@ -514,15 +514,21 @@ importers: packages/nutui-react-cli-core: dependencies: '@modelcontextprotocol/sdk': - specifier: ^1.29.0 - version: 1.29.0(zod@4.4.3) + specifier: ^1.30.0 + version: 1.30.0(zod@4.4.3) + semver: + specifier: ^7.8.0 + version: 7.8.1 yargs: specifier: ^17.7.3 version: 17.7.3 devDependencies: '@types/node': - specifier: ^22.5.5 - version: 22.19.19 + specifier: ^22.20.1 + version: 22.20.1 + '@types/semver': + specifier: ^7.7.1 + version: 7.7.1 '@types/yargs': specifier: ^17.0.35 version: 17.0.35 @@ -555,8 +561,8 @@ importers: specifier: ^9.11.1 version: 9.11.1(magicast@0.3.5) tsup: - specifier: ^8.3.0 - version: 8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.19))(@swc/core@1.15.40(@swc/helpers@0.5.23))(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4)(typescript@5.9.3)(yaml@2.9.0) + specifier: ^8.5.1 + version: 8.5.1(@microsoft/api-extractor@7.59.0(@types/node@22.20.1))(@swc/core@1.16.1(@swc/helpers@0.5.23))(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13)(typescript@5.9.3)(yaml@2.9.0) typescript: specifier: ^5.6.2 version: 5.9.3 @@ -586,7 +592,7 @@ importers: version: 7.27.0 vitest: specifier: ^1.6.1 - version: 1.6.1(@types/node@18.19.130)(@vitest/ui@2.1.9(vitest@3.2.7))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + version: 1.6.1(@types/node@18.19.130)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) devDependencies: '@types/lodash.kebabcase': specifier: ^4.1.9 @@ -617,22 +623,22 @@ importers: version: 1.0.2 '@nutui/replace-icons': specifier: ^1.0.3 - version: 1.0.3(@types/node@22.20.1)(@vitest/ui@2.1.9(vitest@3.2.7))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + version: 1.0.3(@types/node@22.20.1)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) '@nutui/touch-emulator': specifier: ^1.0.0 version: 1.0.0 '@pmmmwh/react-refresh-webpack-plugin': - specifier: ^0.5.11 - version: 0.5.17(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + specifier: ^0.6.2 + version: 0.6.2(react-refresh@0.18.0)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/components': specifier: 4.2.0 - version: 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + version: 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/helper': specifier: 4.1.3 version: 4.1.3(@swc/helpers@0.5.23) '@tarojs/plugin-framework-react': specifier: 4.1.3 - version: 4.1.3(@pmmmwh/react-refresh-webpack-plugin@0.5.17(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/runtime@4.1.3)(@tarojs/shared@4.1.3)(@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)))(react@18.3.1)(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + version: 4.1.3(@pmmmwh/react-refresh-webpack-plugin@0.6.2(react-refresh@0.18.0)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/runtime@4.1.3)(@tarojs/shared@4.1.3)(@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)))(react@18.3.1)(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/plugin-html': specifier: 4.1.3 version: 4.1.3(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/runtime@4.1.3)(@tarojs/shared@4.1.3) @@ -641,7 +647,7 @@ importers: version: 4.1.3(@tarojs/service@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3) '@tarojs/plugin-platform-h5': specifier: 4.1.3 - version: 4.1.3(61616c2ed6adcfead3c5df5cc362031d) + version: 4.1.3(e48d17c9af345a333d434f02d921caa5) '@tarojs/plugin-platform-jd': specifier: 4.1.3 version: 4.1.3(@tarojs/service@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3) @@ -662,7 +668,7 @@ importers: version: 4.1.3(react@18.3.1) '@tarojs/router': specifier: 4.1.3 - version: 4.1.3(330f866bc86612540cd13e3381b967b9) + version: 4.1.3(4802cbeebfe1a66f5f36155868e0a2b1) '@tarojs/runtime': specifier: 4.1.3 version: 4.1.3 @@ -671,10 +677,10 @@ importers: version: 4.1.3 '@tarojs/taro': specifier: 4.1.3 - version: 4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + version: 4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/taro-h5': specifier: 4.1.3 - version: 4.1.3(f7070da514994097dea585bd01b868be) + version: 4.1.3(09f260d77208d3a0f8c7621b42b3d2e1) babel-plugin-import: specifier: ^1.13.8 version: 1.13.8 @@ -708,13 +714,13 @@ importers: version: 4.1.3(@swc/helpers@0.5.23)(@types/node@22.20.1) '@tarojs/plugin-platform-harmony-ets': specifier: 4.1.3 - version: 4.1.3(@babel/core@7.29.7)(@swc/core@1.3.96(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(lightningcss@1.32.0)(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))) + version: 4.1.3(@babel/core@7.29.7)(@swc/core@1.3.96(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(lightningcss@1.32.0)(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))) '@tarojs/vite-runner': specifier: 4.1.3 - version: 4.1.3(@swc/helpers@0.5.23)(@tarojs/runtime@4.1.3)(@types/babel__core@7.20.5)(jiti@2.7.0)(postcss@8.5.15)(rollup@3.30.0)(terser@5.48.0)(tsx@4.22.4)(typescript@5.9.3)(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)) + version: 4.1.3(@swc/helpers@0.5.23)(@tarojs/runtime@4.1.3)(@types/babel__core@7.20.5)(jiti@2.7.0)(postcss@8.5.28)(rollup@3.30.0)(terser@5.48.0)(tsx@4.23.13)(typescript@5.9.3)(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)) '@tarojs/webpack5-runner': specifier: 4.1.3 - version: 4.1.3(@babel/core@7.29.7)(@swc/core@1.3.96(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@tarojs/runtime@4.1.3)(less@3.13.1)(postcss@8.5.15)(sass@1.77.6)(stylus@0.64.0)(typescript@5.9.3)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + version: 4.1.3(@babel/core@7.29.7)(@swc/core@1.3.96(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@tarojs/runtime@4.1.3)(less@3.13.1)(postcss@8.5.28)(sass@1.103.1)(stylus@0.64.0)(typescript@5.9.3)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@types/react': specifier: ^18.3.31 version: 18.3.31 @@ -761,8 +767,8 @@ importers: specifier: ^4.6.2 version: 4.6.2(eslint@8.57.1) postcss: - specifier: ^8.4.35 - version: 8.5.15 + specifier: ^8.5.26 + version: 8.5.28 stylelint: specifier: ^16.26.1 version: 16.26.1(typescript@5.9.3) @@ -7895,11 +7901,12 @@ packages: glob@11.1.0: resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} engines: {node: 20 || >=22} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me global-directory@4.0.1: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} @@ -11056,8 +11063,8 @@ packages: resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} engines: {node: '>=6.0.0'} - postcss@8.5.15: - resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + postcss@8.5.28: + resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -12504,6 +12511,7 @@ packages: tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me teex@1.0.1: resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} @@ -13124,6 +13132,7 @@ packages: uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true v8-to-istanbul@9.3.0: @@ -15259,6 +15268,16 @@ snapshots: optionalDependencies: '@types/node': 20.19.43 + '@inquirer/checkbox@4.3.2(@types/node@22.20.1)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.20.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/confirm@5.1.21(@types/node@20.19.43)': dependencies: '@inquirer/core': 10.3.2(@types/node@20.19.43) @@ -15266,6 +15285,13 @@ snapshots: optionalDependencies: '@types/node': 20.19.43 + '@inquirer/confirm@5.1.21(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/type': 3.0.10(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/core@10.3.2(@types/node@20.19.43)': dependencies: '@inquirer/ansi': 1.0.2 @@ -15279,6 +15305,19 @@ snapshots: optionalDependencies: '@types/node': 20.19.43 + '@inquirer/core@10.3.2(@types/node@22.20.1)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.20.1) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/editor@4.2.23(@types/node@20.19.43)': dependencies: '@inquirer/core': 10.3.2(@types/node@20.19.43) @@ -15287,6 +15326,14 @@ snapshots: optionalDependencies: '@types/node': 20.19.43 + '@inquirer/editor@4.2.23(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/external-editor': 1.0.3(@types/node@22.20.1) + '@inquirer/type': 3.0.10(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/expand@4.0.23(@types/node@20.19.43)': dependencies: '@inquirer/core': 10.3.2(@types/node@20.19.43) @@ -15295,6 +15342,14 @@ snapshots: optionalDependencies: '@types/node': 20.19.43 + '@inquirer/expand@4.0.23(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/type': 3.0.10(@types/node@22.20.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/external-editor@1.0.3(@types/node@20.19.43)': dependencies: chardet: 2.1.1 @@ -15318,6 +15373,13 @@ snapshots: optionalDependencies: '@types/node': 20.19.43 + '@inquirer/input@4.3.1(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/type': 3.0.10(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/number@3.0.23(@types/node@20.19.43)': dependencies: '@inquirer/core': 10.3.2(@types/node@20.19.43) @@ -15325,6 +15387,13 @@ snapshots: optionalDependencies: '@types/node': 20.19.43 + '@inquirer/number@3.0.23(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/type': 3.0.10(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/password@4.0.23(@types/node@20.19.43)': dependencies: '@inquirer/ansi': 1.0.2 @@ -15333,6 +15402,14 @@ snapshots: optionalDependencies: '@types/node': 20.19.43 + '@inquirer/password@4.0.23(@types/node@22.20.1)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/type': 3.0.10(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/prompts@7.10.1(@types/node@20.19.43)': dependencies: '@inquirer/checkbox': 4.3.2(@types/node@20.19.43) @@ -15348,6 +15425,21 @@ snapshots: optionalDependencies: '@types/node': 20.19.43 + '@inquirer/prompts@7.10.1(@types/node@22.20.1)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@22.20.1) + '@inquirer/confirm': 5.1.21(@types/node@22.20.1) + '@inquirer/editor': 4.2.23(@types/node@22.20.1) + '@inquirer/expand': 4.0.23(@types/node@22.20.1) + '@inquirer/input': 4.3.1(@types/node@22.20.1) + '@inquirer/number': 3.0.23(@types/node@22.20.1) + '@inquirer/password': 4.0.23(@types/node@22.20.1) + '@inquirer/rawlist': 4.1.11(@types/node@22.20.1) + '@inquirer/search': 3.2.2(@types/node@22.20.1) + '@inquirer/select': 4.4.2(@types/node@22.20.1) + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/rawlist@4.1.11(@types/node@20.19.43)': dependencies: '@inquirer/core': 10.3.2(@types/node@20.19.43) @@ -15356,6 +15448,14 @@ snapshots: optionalDependencies: '@types/node': 20.19.43 + '@inquirer/rawlist@4.1.11(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/type': 3.0.10(@types/node@22.20.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/search@3.2.2(@types/node@20.19.43)': dependencies: '@inquirer/core': 10.3.2(@types/node@20.19.43) @@ -15365,6 +15465,15 @@ snapshots: optionalDependencies: '@types/node': 20.19.43 + '@inquirer/search@3.2.2(@types/node@22.20.1)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.20.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/select@4.4.2(@types/node@20.19.43)': dependencies: '@inquirer/ansi': 1.0.2 @@ -15375,10 +15484,24 @@ snapshots: optionalDependencies: '@types/node': 20.19.43 + '@inquirer/select@4.4.2(@types/node@22.20.1)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@22.20.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.20.1 + '@inquirer/type@3.0.10(@types/node@20.19.43)': optionalDependencies: '@types/node': 20.19.43 + '@inquirer/type@3.0.10(@types/node@22.20.1)': + optionalDependencies: + '@types/node': 22.20.1 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -15848,7 +15971,7 @@ snapshots: transitivePeerDependencies: - react-dom - '@nutui/replace-icons@1.0.3(@types/node@22.20.1)(@vitest/ui@2.1.9(vitest@3.2.7))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)': + '@nutui/replace-icons@1.0.3(@types/node@22.20.1)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)': dependencies: '@babel/cli': 7.29.7(@babel/core@7.29.7) '@babel/core': 7.29.7 @@ -15857,7 +15980,7 @@ snapshots: '@babel/preset-react': 7.29.7(@babel/core@7.29.7) '@types/babel__core': 7.20.5 '@types/babel__generator': 7.27.0 - vitest: 1.6.1(@types/node@22.20.1)(@vitest/ui@2.1.9(vitest@3.2.7))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + vitest: 1.6.1(@types/node@22.20.1)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) transitivePeerDependencies: - '@edge-runtime/vm' - '@types/node' @@ -16076,7 +16199,7 @@ snapshots: '@pkgr/core@0.3.6': {} - '@pmmmwh/react-refresh-webpack-plugin@0.5.10(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@pmmmwh/react-refresh-webpack-plugin@0.6.2(react-refresh@0.18.0)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: anser: 2.3.5 core-js-pure: 3.49.0 @@ -16085,12 +16208,12 @@ snapshots: react-refresh: 0.18.0 schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) optionalDependencies: - type-fest: 2.19.0 - webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + type-fest: 4.41.0 + webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) - '@pmmmwh/react-refresh-webpack-plugin@0.5.17(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@pmmmwh/react-refresh-webpack-plugin@0.6.2(react-refresh@0.18.0)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: anser: 2.3.5 core-js-pure: 3.49.0 @@ -16099,10 +16222,10 @@ snapshots: react-refresh: 0.18.0 schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) optionalDependencies: type-fest: 4.41.0 - webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@pnpm/config.env-replace@1.1.0': {} @@ -16737,12 +16860,12 @@ snapshots: - debug - supports-color - '@tarojs/components-react@4.1.3(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(react@18.3.1)(rollup@3.30.0)(solid-js@1.9.13)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/components-react@4.1.3(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(react@18.3.1)(rollup@3.30.0)(solid-js@1.9.13)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@babel/runtime': 7.29.7 - '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/shared': 4.1.3 - '@tarojs/taro': 4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/taro': 4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) classnames: 2.5.1 react: 18.3.1 solid-js: 1.9.13 @@ -16759,12 +16882,12 @@ snapshots: - webpack-chain - webpack-dev-server - '@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@stencil/core': 2.22.3 '@tarojs/runtime': 4.2.0 '@tarojs/shared': 4.2.0 - '@tarojs/taro': 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/taro': 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) classnames: 2.5.1 hammerjs: 2.0.8 hls.js: 1.6.16 @@ -16782,12 +16905,12 @@ snapshots: - webpack-chain - webpack-dev-server - '@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@stencil/core': 2.22.3 '@tarojs/runtime': 4.2.0 '@tarojs/shared': 4.2.0 - '@tarojs/taro': 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/taro': 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) classnames: 2.5.1 hammerjs: 2.0.8 hls.js: 1.6.16 @@ -16836,9 +16959,9 @@ snapshots: dependencies: '@babel/core': 7.29.7 '@babel/generator': 7.29.8 - '@babel/parser': 7.29.7 + '@babel/parser': 7.29.8 '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 '@swc/core': 1.3.96(@swc/helpers@0.5.23) '@swc/register': 0.1.10(@swc/core@1.3.96(@swc/helpers@0.5.23)) ansi-escapes: 4.3.2 @@ -16954,7 +17077,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tarojs/plugin-framework-react@4.1.3(@pmmmwh/react-refresh-webpack-plugin@0.5.17(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/runtime@4.1.3)(@tarojs/shared@4.1.3)(@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)))(react@18.3.1)(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/plugin-framework-react@4.1.3(@pmmmwh/react-refresh-webpack-plugin@0.6.2(react-refresh@0.18.0)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/runtime@4.1.3)(@tarojs/shared@4.1.3)(@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)))(react@18.3.1)(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runtime': 4.1.3 @@ -16964,11 +17087,11 @@ snapshots: lodash: 4.18.1 tslib: 2.8.1 optionalDependencies: - '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - '@vitejs/plugin-react': 4.7.0(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)) + '@pmmmwh/react-refresh-webpack-plugin': 0.6.2(react-refresh@0.18.0)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + '@vitejs/plugin-react': 4.7.0(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)) react: 18.3.1 - vite: 5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + vite: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) '@tarojs/plugin-html@4.1.3(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/runtime@4.1.3)(@tarojs/shared@4.1.3)': dependencies: @@ -16986,16 +17109,16 @@ snapshots: '@tarojs/service': 4.2.0(@swc/helpers@0.5.23) '@tarojs/shared': 4.2.0 - '@tarojs/plugin-platform-h5@4.1.3(61616c2ed6adcfead3c5df5cc362031d)': + '@tarojs/plugin-platform-h5@4.1.3(e48d17c9af345a333d434f02d921caa5)': dependencies: '@babel/core': 7.29.7 - '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - '@tarojs/components-react': 4.1.3(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(react@18.3.1)(rollup@3.30.0)(solid-js@1.9.13)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + '@tarojs/components-react': 4.1.3(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(react@18.3.1)(rollup@3.30.0)(solid-js@1.9.13)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runtime': 4.1.3 '@tarojs/service': 4.1.3(@swc/helpers@0.5.23) '@tarojs/shared': 4.1.3 - '@tarojs/taro-h5': 4.1.3(f7070da514994097dea585bd01b868be) + '@tarojs/taro-h5': 4.1.3(09f260d77208d3a0f8c7621b42b3d2e1) babel-plugin-transform-taroapi: 4.1.3(@babel/core@7.29.7) change-case: 4.1.2 lodash-es: 4.17.21 @@ -17015,17 +17138,17 @@ snapshots: - webpack-chain - webpack-dev-server - '@tarojs/plugin-platform-harmony-ets@4.1.3(@babel/core@7.29.7)(@swc/core@1.3.96(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(lightningcss@1.32.0)(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))': + '@tarojs/plugin-platform-harmony-ets@4.1.3(@babel/core@7.29.7)(@swc/core@1.3.96(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(lightningcss@1.32.0)(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))': dependencies: '@babel/preset-react': 7.29.7(@babel/core@7.29.7) - '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runner-utils': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runtime': 4.1.3 '@tarojs/service': 4.1.3(@swc/helpers@0.5.23) '@tarojs/shared': 4.1.3 - '@tarojs/taro': 4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + '@tarojs/taro': 4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) webpack-sources: 3.5.0 transitivePeerDependencies: - '@babel/core' @@ -17101,11 +17224,11 @@ snapshots: react: 18.3.1 react-reconciler: 0.29.0(react@18.3.1) - '@tarojs/router@4.1.3(330f866bc86612540cd13e3381b967b9)': + '@tarojs/router@4.1.3(4802cbeebfe1a66f5f36155868e0a2b1)': dependencies: '@tarojs/runtime': 4.1.3 '@tarojs/shared': 4.1.3 - '@tarojs/taro': 4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/taro': 4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) dingtalk-jsapi: 2.15.6 history: 5.3.0 mobile-detect: 1.4.5 @@ -17175,11 +17298,11 @@ snapshots: '@tarojs/shared@4.2.0': {} - '@tarojs/taro-h5@4.1.3(f7070da514994097dea585bd01b868be)': + '@tarojs/taro-h5@4.1.3(09f260d77208d3a0f8c7621b42b3d2e1)': dependencies: '@tarojs/api': 4.2.0(@tarojs/runtime@4.1.3)(@tarojs/shared@4.1.3) - '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - '@tarojs/router': 4.1.3(330f866bc86612540cd13e3381b967b9) + '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + '@tarojs/router': 4.1.3(4802cbeebfe1a66f5f36155868e0a2b1) '@tarojs/runtime': 4.1.3 '@tarojs/shared': 4.1.3 abortcontroller-polyfill: 1.7.8 @@ -17195,67 +17318,67 @@ snapshots: transitivePeerDependencies: - '@tarojs/taro' - '@tarojs/taro-loader@4.1.3(@swc/helpers@0.5.23)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/taro-loader@4.1.3(@swc/helpers@0.5.23)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) '@tarojs/shared': 4.1.3 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) transitivePeerDependencies: - '@swc/helpers' - supports-color - '@tarojs/taro@4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/taro@4.1.3(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@tarojs/api': 4.2.0(@tarojs/runtime@4.1.3)(@tarojs/shared@4.1.3) - '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runtime': 4.1.3 '@tarojs/shared': 4.1.3 '@types/postcss-url': 10.0.4 - postcss: 8.5.15 + postcss: 8.5.28 optionalDependencies: - '@types/react': 18.3.29 - html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@types/react': 18.3.31 + html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) rollup: 3.30.0 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) webpack-chain: 6.5.1 - webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) - '@tarojs/taro@4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/taro@4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@tarojs/api': 4.2.0(@tarojs/runtime@4.2.0)(@tarojs/shared@4.2.0) - '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runtime': 4.2.0 '@tarojs/shared': 4.2.0 '@types/postcss-url': 10.0.4 - postcss: 8.5.15 + postcss: 8.5.28 optionalDependencies: - '@types/react': 18.3.29 - html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@types/react': 18.3.31 + html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) rollup: 3.30.0 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) webpack-chain: 6.5.1 - webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) - '@tarojs/taro@4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/taro@4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@tarojs/api': 4.2.0(@tarojs/runtime@4.2.0)(@tarojs/shared@4.2.0) - '@tarojs/components': 4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/components': 4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.31)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(postcss@8.5.28)(rollup@4.63.1)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)))(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) '@tarojs/helper': 4.2.0(@swc/helpers@0.5.23) '@tarojs/runtime': 4.2.0 '@tarojs/shared': 4.2.0 '@types/postcss-url': 10.0.4 - postcss: 8.5.15 + postcss: 8.5.28 optionalDependencies: - '@types/react': 18.3.29 - html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - rollup: 4.60.4 - webpack: 5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + '@types/react': 18.3.31 + html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + rollup: 4.63.1 + webpack: 5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) webpack-chain: 6.5.1 - webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) - '@tarojs/vite-runner@4.1.3(@swc/helpers@0.5.23)(@tarojs/runtime@4.1.3)(@types/babel__core@7.20.5)(jiti@2.7.0)(postcss@8.5.15)(rollup@3.30.0)(terser@5.48.0)(tsx@4.22.4)(typescript@5.9.3)(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0))': + '@tarojs/vite-runner@4.1.3(@swc/helpers@0.5.23)(@tarojs/runtime@4.1.3)(@types/babel__core@7.20.5)(jiti@2.7.0)(postcss@8.5.28)(rollup@3.30.0)(terser@5.48.0)(tsx@4.23.13)(typescript@5.9.3)(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0))': dependencies: '@ampproject/remapping': 2.3.0 '@babel/core': 7.29.7 @@ -17270,7 +17393,7 @@ snapshots: '@tarojs/shared': 4.1.3 '@vitejs/plugin-legacy': 4.1.1(terser@5.48.0)(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)) acorn-walk: 8.3.5 - autoprefixer: 10.5.0(postcss@8.5.15) + autoprefixer: 10.5.4(postcss@8.5.28) babel-plugin-transform-taroapi: 4.1.3(@babel/core@7.29.7) connect-history-api-fallback: 2.0.0 fast-glob: 3.3.3 @@ -17280,14 +17403,14 @@ snapshots: magic-string: 0.30.21 mrmime: 2.0.1 picomatch: 4.0.4 - postcss: 8.5.15 - postcss-css-variables: 0.19.0(postcss@8.5.15) - postcss-html-transform: 4.1.3(postcss@8.5.15) - postcss-import: 16.1.1(postcss@8.5.15) - postcss-load-config: 5.1.0(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4) - postcss-modules: 6.0.1(postcss@8.5.15) - postcss-plugin-constparse: 4.1.3(postcss@8.5.15) - postcss-pxtransform: 4.1.3(postcss@8.5.15) + postcss: 8.5.28 + postcss-css-variables: 0.19.0(postcss@8.5.28) + postcss-html-transform: 4.1.3(postcss@8.5.28) + postcss-import: 16.2.0(postcss@8.5.28) + postcss-load-config: 5.1.0(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13) + postcss-modules: 6.0.1(postcss@8.5.28) + postcss-plugin-constparse: 4.1.3(postcss@8.5.28) + postcss-pxtransform: 4.1.3(postcss@8.5.28) regenerator-runtime: 0.11.1 sax: 1.2.4 stylelint: 16.26.1(typescript@5.9.3) @@ -17303,71 +17426,71 @@ snapshots: - tsx - typescript - '@tarojs/webpack5-prebundle@4.1.3(@swc/helpers@0.5.23)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/webpack5-prebundle@4.1.3(@swc/helpers@0.5.23)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) '@tarojs/shared': 4.1.3 enhanced-resolve: 5.22.1 es-module-lexer: 0.10.5 lodash: 4.18.1 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) webpack-virtual-modules: 0.6.2 transitivePeerDependencies: - '@swc/helpers' - supports-color - '@tarojs/webpack5-runner@4.1.3(@babel/core@7.29.7)(@swc/core@1.3.96(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@tarojs/runtime@4.1.3)(less@3.13.1)(postcss@8.5.15)(sass@1.77.6)(stylus@0.64.0)(typescript@5.9.3)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/webpack5-runner@4.1.3(@babel/core@7.29.7)(@swc/core@1.3.96(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@tarojs/runtime@4.1.3)(less@3.13.1)(postcss@8.5.28)(sass@1.103.1)(stylus@0.64.0)(typescript@5.9.3)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28))': dependencies: '@babel/core': 7.29.7 '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runner-utils': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runtime': 4.1.3 '@tarojs/shared': 4.1.3 - '@tarojs/taro-loader': 4.1.3(@swc/helpers@0.5.23)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - '@tarojs/webpack5-prebundle': 4.1.3(@swc/helpers@0.5.23)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/taro-loader': 4.1.3(@swc/helpers@0.5.23)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + '@tarojs/webpack5-prebundle': 4.1.3(@swc/helpers@0.5.23)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) acorn: 8.16.0 acorn-walk: 8.3.5 - autoprefixer: 10.5.0(postcss@8.5.15) - babel-loader: 8.2.1(@babel/core@7.29.7)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - copy-webpack-plugin: 12.0.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - css-loader: 7.1.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - css-minimizer-webpack-plugin: 6.0.0(esbuild@0.21.5)(lightningcss@1.32.0)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + autoprefixer: 10.5.4(postcss@8.5.28) + babel-loader: 8.2.1(@babel/core@7.29.7)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + copy-webpack-plugin: 12.0.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + css-loader: 7.1.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + css-minimizer-webpack-plugin: 6.0.0(esbuild@0.21.5)(lightningcss@1.32.0)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) detect-port: 1.6.1 esbuild: 0.21.5 - esbuild-loader: 4.4.3(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + esbuild-loader: 4.4.3(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) html-minifier: 4.0.0 - html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) jsdom: 24.1.3 - less-loader: 12.3.3(less@3.13.1)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + less-loader: 12.3.3(less@3.13.1)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) lightningcss: 1.32.0 loader-utils: 3.3.1 lodash: 4.18.1 md5: 2.3.0 - mini-css-extract-plugin: 2.10.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + mini-css-extract-plugin: 2.10.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) miniprogram-simulate: 1.6.1 ora: 5.4.1 picomatch: 4.0.4 - postcss: 8.5.15 - postcss-html-transform: 4.1.3(postcss@8.5.15) - postcss-import: 16.1.1(postcss@8.5.15) - postcss-loader: 8.2.1(postcss@8.5.15)(typescript@5.9.3)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - postcss-plugin-constparse: 4.1.3(postcss@8.5.15) - postcss-pxtransform: 4.1.3(postcss@8.5.15) - postcss-url: 10.1.4(postcss@8.5.15) + postcss: 8.5.28 + postcss-html-transform: 4.1.3(postcss@8.5.28) + postcss-import: 16.2.0(postcss@8.5.28) + postcss-loader: 8.2.1(postcss@8.5.28)(typescript@5.9.3)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + postcss-plugin-constparse: 4.1.3(postcss@8.5.28) + postcss-pxtransform: 4.1.3(postcss@8.5.28) + postcss-url: 10.1.4(postcss@8.5.28) regenerator-runtime: 0.11.1 resolve-url-loader: 5.0.0 - sass-loader: 14.2.1(sass@1.77.6)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + sass-loader: 14.2.1(sass@1.103.1)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) sax: 1.2.4 - style-loader: 3.3.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - stylus-loader: 8.1.3(stylus@0.64.0)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - terser-webpack-plugin: 5.6.1(@swc/core@1.3.96(@swc/helpers@0.5.23))(esbuild@0.21.5)(lightningcss@1.32.0)(postcss@8.5.15)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + style-loader: 3.3.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + stylus-loader: 8.1.3(stylus@0.64.0)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) + terser-webpack-plugin: 5.6.1(@swc/core@1.3.96(@swc/helpers@0.5.23))(esbuild@0.21.5)(lightningcss@1.32.0)(postcss@8.5.28)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) vm2: 3.11.5 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) webpack-chain: 6.5.1 - webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) webpack-format-messages: 3.0.1 webpack-virtual-modules: 0.6.2 - webpackbar: 5.0.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpackbar: 5.0.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) optionalDependencies: less: 3.13.1 sass: 1.103.1 @@ -17646,12 +17769,12 @@ snapshots: '@types/postcss-import@14.0.3': dependencies: - postcss: 8.5.15 + postcss: 8.5.28 '@types/postcss-url@10.0.4': dependencies: - '@types/node': 22.19.19 - postcss: 8.5.15 + '@types/node': 20.19.43 + postcss: 8.5.28 '@types/prop-types@15.7.15': {} @@ -18225,7 +18348,15 @@ snapshots: estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 5.4.21(@types/node@20.19.41)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0) + vite: 5.4.21(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + + '@vitest/mocker@3.2.7(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0))': + dependencies: + '@vitest/spy': 3.2.7 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) '@vitest/pretty-format@2.1.9': dependencies: @@ -18790,13 +18921,13 @@ snapshots: stubborn-fs: 2.0.0 when-exit: 2.1.5 - autoprefixer@10.5.0(postcss@8.5.15): + autoprefixer@10.5.4(postcss@8.5.28): dependencies: browserslist: 4.28.8 caniuse-lite: 1.0.30001810 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -18843,7 +18974,7 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@8.2.1(@babel/core@7.29.7)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + babel-loader@8.2.1(@babel/core@7.29.7)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: '@babel/core': 7.29.7 find-cache-dir: 2.1.0 @@ -18851,7 +18982,7 @@ snapshots: make-dir: 2.1.0 pify: 4.0.1 schema-utils: 2.7.1 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) babel-plugin-const-enum@1.2.0(@babel/core@7.29.7): dependencies: @@ -19796,7 +19927,7 @@ snapshots: copy-text-to-clipboard@3.2.2: {} - copy-webpack-plugin@12.0.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + copy-webpack-plugin@12.0.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: fast-glob: 3.3.3 glob-parent: 6.0.2 @@ -19804,7 +19935,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.3.3 serialize-javascript: 6.0.2 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) core-js-compat@3.49.0: dependencies: @@ -19877,34 +20008,34 @@ snapshots: crypto-random-string@1.0.0: {} - css-declaration-sorter@7.4.0(postcss@8.5.15): + css-declaration-sorter@7.4.0(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 css-functions-list@3.3.3: {} - css-loader@7.1.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + css-loader@7.1.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: - icss-utils: 5.1.0(postcss@8.5.15) - postcss: 8.5.15 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.15) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.15) - postcss-modules-scope: 3.2.1(postcss@8.5.15) - postcss-modules-values: 4.0.0(postcss@8.5.15) + icss-utils: 5.1.0(postcss@8.5.28) + postcss: 8.5.28 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.28) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.28) + postcss-modules-scope: 3.2.1(postcss@8.5.28) + postcss-modules-values: 4.0.0(postcss@8.5.28) postcss-value-parser: 4.2.0 semver: 7.8.1 optionalDependencies: - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) - css-minimizer-webpack-plugin@6.0.0(esbuild@0.21.5)(lightningcss@1.32.0)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + css-minimizer-webpack-plugin@6.0.0(esbuild@0.21.5)(lightningcss@1.32.0)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: '@jridgewell/trace-mapping': 0.3.31 - cssnano: 6.1.2(postcss@8.5.15) + cssnano: 6.1.2(postcss@8.5.28) jest-worker: 29.7.0 - postcss: 8.5.15 + postcss: 8.5.28 schema-utils: 4.3.3 serialize-javascript: 6.0.2 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) optionalDependencies: esbuild: 0.21.5 lightningcss: 1.32.0 @@ -19953,49 +20084,49 @@ snapshots: cssfontparser@1.2.1: {} - cssnano-preset-default@6.1.2(postcss@8.5.15): + cssnano-preset-default@6.1.2(postcss@8.5.28): dependencies: browserslist: 4.28.2 - css-declaration-sorter: 7.4.0(postcss@8.5.15) - cssnano-utils: 4.0.2(postcss@8.5.15) - postcss: 8.5.15 - postcss-calc: 9.0.1(postcss@8.5.15) - postcss-colormin: 6.1.0(postcss@8.5.15) - postcss-convert-values: 6.1.0(postcss@8.5.15) - postcss-discard-comments: 6.0.2(postcss@8.5.15) - postcss-discard-duplicates: 6.0.3(postcss@8.5.15) - postcss-discard-empty: 6.0.3(postcss@8.5.15) - postcss-discard-overridden: 6.0.2(postcss@8.5.15) - postcss-merge-longhand: 6.0.5(postcss@8.5.15) - postcss-merge-rules: 6.1.1(postcss@8.5.15) - postcss-minify-font-values: 6.1.0(postcss@8.5.15) - postcss-minify-gradients: 6.0.3(postcss@8.5.15) - postcss-minify-params: 6.1.0(postcss@8.5.15) - postcss-minify-selectors: 6.0.4(postcss@8.5.15) - postcss-normalize-charset: 6.0.2(postcss@8.5.15) - postcss-normalize-display-values: 6.0.2(postcss@8.5.15) - postcss-normalize-positions: 6.0.2(postcss@8.5.15) - postcss-normalize-repeat-style: 6.0.2(postcss@8.5.15) - postcss-normalize-string: 6.0.2(postcss@8.5.15) - postcss-normalize-timing-functions: 6.0.2(postcss@8.5.15) - postcss-normalize-unicode: 6.1.0(postcss@8.5.15) - postcss-normalize-url: 6.0.2(postcss@8.5.15) - postcss-normalize-whitespace: 6.0.2(postcss@8.5.15) - postcss-ordered-values: 6.0.2(postcss@8.5.15) - postcss-reduce-initial: 6.1.0(postcss@8.5.15) - postcss-reduce-transforms: 6.0.2(postcss@8.5.15) - postcss-svgo: 6.0.3(postcss@8.5.15) - postcss-unique-selectors: 6.0.4(postcss@8.5.15) - - cssnano-utils@4.0.2(postcss@8.5.15): - dependencies: - postcss: 8.5.15 - - cssnano@6.1.2(postcss@8.5.15): - dependencies: - cssnano-preset-default: 6.1.2(postcss@8.5.15) + css-declaration-sorter: 7.4.0(postcss@8.5.28) + cssnano-utils: 4.0.2(postcss@8.5.28) + postcss: 8.5.28 + postcss-calc: 9.0.1(postcss@8.5.28) + postcss-colormin: 6.1.0(postcss@8.5.28) + postcss-convert-values: 6.1.0(postcss@8.5.28) + postcss-discard-comments: 6.0.2(postcss@8.5.28) + postcss-discard-duplicates: 6.0.3(postcss@8.5.28) + postcss-discard-empty: 6.0.3(postcss@8.5.28) + postcss-discard-overridden: 6.0.2(postcss@8.5.28) + postcss-merge-longhand: 6.0.5(postcss@8.5.28) + postcss-merge-rules: 6.1.1(postcss@8.5.28) + postcss-minify-font-values: 6.1.0(postcss@8.5.28) + postcss-minify-gradients: 6.0.3(postcss@8.5.28) + postcss-minify-params: 6.1.0(postcss@8.5.28) + postcss-minify-selectors: 6.0.4(postcss@8.5.28) + postcss-normalize-charset: 6.0.2(postcss@8.5.28) + postcss-normalize-display-values: 6.0.2(postcss@8.5.28) + postcss-normalize-positions: 6.0.2(postcss@8.5.28) + postcss-normalize-repeat-style: 6.0.2(postcss@8.5.28) + postcss-normalize-string: 6.0.2(postcss@8.5.28) + postcss-normalize-timing-functions: 6.0.2(postcss@8.5.28) + postcss-normalize-unicode: 6.1.0(postcss@8.5.28) + postcss-normalize-url: 6.0.2(postcss@8.5.28) + postcss-normalize-whitespace: 6.0.2(postcss@8.5.28) + postcss-ordered-values: 6.0.2(postcss@8.5.28) + postcss-reduce-initial: 6.1.0(postcss@8.5.28) + postcss-reduce-transforms: 6.0.2(postcss@8.5.28) + postcss-svgo: 6.0.3(postcss@8.5.28) + postcss-unique-selectors: 6.0.4(postcss@8.5.28) + + cssnano-utils@4.0.2(postcss@8.5.28): + dependencies: + postcss: 8.5.28 + + cssnano@6.1.2(postcss@8.5.28): + dependencies: + cssnano-preset-default: 6.1.2(postcss@8.5.28) lilconfig: 3.1.3 - postcss: 8.5.15 + postcss: 8.5.28 csso@3.5.1: dependencies: @@ -20621,12 +20752,12 @@ snapshots: esast-util-from-estree: 2.0.0 vfile-message: 4.0.3 - esbuild-loader@4.4.3(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + esbuild-loader@4.4.3(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: esbuild: 0.27.7 get-tsconfig: 4.14.0 loader-utils: 2.0.4 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) webpack-sources: 3.5.0 esbuild@0.21.5: @@ -22337,12 +22468,12 @@ snapshots: readable-stream: 1.1.14 streamqueue: 0.0.6 - gulp-postcss@10.0.0(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4): + gulp-postcss@10.0.0(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13): dependencies: fancy-log: 2.0.0 plugin-error: 2.0.1 - postcss: 8.5.15 - postcss-load-config: 5.1.0(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4) + postcss: 8.5.28 + postcss-load-config: 5.1.0(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13) vinyl-sourcemaps-apply: 0.2.1 transitivePeerDependencies: - jiti @@ -22596,7 +22727,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -22604,10 +22735,10 @@ snapshots: pretty-error: 4.0.0 tapable: 2.3.3 optionalDependencies: - webpack: 5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) optional: true - html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -22615,7 +22746,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.3.3 optionalDependencies: - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) htmlparser2@6.1.0: dependencies: @@ -22743,9 +22874,9 @@ snapshots: runes2: 1.1.4 yup: 1.7.1 - icss-utils@5.1.0(postcss@8.5.15): + icss-utils@5.1.0(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 ieee754@1.2.1: {} @@ -22801,12 +22932,12 @@ snapshots: inline-style-parser@0.2.7: {} - inquirer@12.3.0(@types/node@20.19.43): + inquirer@12.3.0(@types/node@22.20.1): dependencies: - '@inquirer/core': 10.3.2(@types/node@20.19.43) - '@inquirer/prompts': 7.10.1(@types/node@20.19.43) - '@inquirer/type': 3.0.10(@types/node@20.19.43) - '@types/node': 20.19.43 + '@inquirer/core': 10.3.2(@types/node@22.20.1) + '@inquirer/prompts': 7.10.1(@types/node@22.20.1) + '@inquirer/type': 3.0.10(@types/node@22.20.1) + '@types/node': 22.20.1 ansi-escapes: 4.3.2 mute-stream: 2.0.0 run-async: 3.0.0 @@ -23316,7 +23447,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@30.4.2(@types/node@20.19.43): + jest-cli@30.4.2(@types/node@22.20.1): dependencies: '@jest/core': 30.4.2 '@jest/test-result': 30.4.1 @@ -23324,7 +23455,7 @@ snapshots: chalk: 4.1.2 exit-x: 0.2.2 import-local: 3.2.0 - jest-config: 30.4.2(@types/node@20.19.43) + jest-config: 30.4.2(@types/node@22.20.1) jest-util: 30.4.1 jest-validate: 30.4.1 yargs: 17.7.3 @@ -23366,7 +23497,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@30.4.2(@types/node@20.19.43): + jest-config@30.4.2(@types/node@22.20.1): dependencies: '@babel/core': 7.29.7 '@jest/get-type': 30.1.0 @@ -23392,7 +23523,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.19.43 + '@types/node': 22.20.1 transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -23635,12 +23766,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@30.4.2(@types/node@20.19.43): + jest@30.4.2(@types/node@22.20.1): dependencies: '@jest/core': 30.4.2 '@jest/types': 30.4.1 import-local: 3.2.0 - jest-cli: 30.4.2(@types/node@20.19.43) + jest-cli: 30.4.2(@types/node@22.20.1) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -23884,11 +24015,11 @@ snapshots: lead@4.0.0: {} - less-loader@12.3.3(less@3.13.1)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + less-loader@12.3.3(less@3.13.1)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: less: 3.13.1 optionalDependencies: - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) less@3.13.1: dependencies: @@ -24830,11 +24961,11 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.10.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + mini-css-extract-plugin@2.10.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: schema-utils: 4.3.3 tapable: 2.3.3 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) minimalistic-assert@1.0.1: {} @@ -25684,244 +25815,244 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-calc@9.0.1(postcss@8.5.15): + postcss-calc@9.0.1(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-colormin@6.1.0(postcss@8.5.15): + postcss-colormin@6.1.0(postcss@8.5.28): dependencies: browserslist: 4.28.2 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-convert-values@6.1.0(postcss@8.5.15): + postcss-convert-values@6.1.0(postcss@8.5.28): dependencies: browserslist: 4.28.2 - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-css-variables@0.19.0(postcss@8.5.15): + postcss-css-variables@0.19.0(postcss@8.5.28): dependencies: balanced-match: 1.0.2 escape-string-regexp: 1.0.5 extend: 3.0.2 - postcss: 8.5.15 + postcss: 8.5.28 - postcss-discard-comments@6.0.2(postcss@8.5.15): + postcss-discard-comments@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-discard-duplicates@6.0.3(postcss@8.5.15): + postcss-discard-duplicates@6.0.3(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-discard-empty@6.0.3(postcss@8.5.15): + postcss-discard-empty@6.0.3(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-discard-overridden@6.0.2(postcss@8.5.15): + postcss-discard-overridden@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-html-transform@4.1.3(postcss@8.5.15): + postcss-html-transform@4.1.3(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-import@16.1.1(postcss@8.5.15): + postcss-import@16.2.0(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.12 - postcss-load-config@5.1.0(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4): + postcss-load-config@5.1.0(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13): dependencies: lilconfig: 3.1.3 yaml: 2.9.0 optionalDependencies: jiti: 2.7.0 - postcss: 8.5.15 - tsx: 4.22.4 + postcss: 8.5.28 + tsx: 4.23.13 - postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4)(yaml@2.9.0): + postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13)(yaml@2.9.0): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.7.0 - postcss: 8.5.15 - tsx: 4.22.4 + postcss: 8.5.28 + tsx: 4.23.13 yaml: 2.9.0 - postcss-loader@8.2.1(postcss@8.5.15)(typescript@5.9.3)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + postcss-loader@8.2.1(postcss@8.5.28)(typescript@5.9.3)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: cosmiconfig: 9.0.1(typescript@5.9.3) jiti: 2.7.0 - postcss: 8.5.15 + postcss: 8.5.28 semver: 7.8.1 optionalDependencies: - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) transitivePeerDependencies: - typescript - postcss-merge-longhand@6.0.5(postcss@8.5.15): + postcss-merge-longhand@6.0.5(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - stylehacks: 6.1.1(postcss@8.5.15) + stylehacks: 6.1.1(postcss@8.5.28) - postcss-merge-rules@6.1.1(postcss@8.5.15): + postcss-merge-rules@6.1.1(postcss@8.5.28): dependencies: browserslist: 4.28.2 caniuse-api: 3.0.0 - cssnano-utils: 4.0.2(postcss@8.5.15) - postcss: 8.5.15 + cssnano-utils: 4.0.2(postcss@8.5.28) + postcss: 8.5.28 postcss-selector-parser: 6.1.2 - postcss-minify-font-values@6.1.0(postcss@8.5.15): + postcss-minify-font-values@6.1.0(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-minify-gradients@6.0.3(postcss@8.5.15): + postcss-minify-gradients@6.0.3(postcss@8.5.28): dependencies: colord: 2.9.3 - cssnano-utils: 4.0.2(postcss@8.5.15) - postcss: 8.5.15 + cssnano-utils: 4.0.2(postcss@8.5.28) + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-minify-params@6.1.0(postcss@8.5.15): + postcss-minify-params@6.1.0(postcss@8.5.28): dependencies: browserslist: 4.28.2 - cssnano-utils: 4.0.2(postcss@8.5.15) - postcss: 8.5.15 + cssnano-utils: 4.0.2(postcss@8.5.28) + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-minify-selectors@6.0.4(postcss@8.5.15): + postcss-minify-selectors@6.0.4(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-selector-parser: 6.1.2 - postcss-modules-extract-imports@3.1.0(postcss@8.5.15): + postcss-modules-extract-imports@3.1.0(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-modules-local-by-default@4.2.0(postcss@8.5.15): + postcss-modules-local-by-default@4.2.0(postcss@8.5.28): dependencies: - icss-utils: 5.1.0(postcss@8.5.15) - postcss: 8.5.15 + icss-utils: 5.1.0(postcss@8.5.28) + postcss: 8.5.28 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.5.15): + postcss-modules-scope@3.2.1(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-selector-parser: 7.1.1 - postcss-modules-values@4.0.0(postcss@8.5.15): + postcss-modules-values@4.0.0(postcss@8.5.28): dependencies: - icss-utils: 5.1.0(postcss@8.5.15) - postcss: 8.5.15 + icss-utils: 5.1.0(postcss@8.5.28) + postcss: 8.5.28 - postcss-modules@6.0.1(postcss@8.5.15): + postcss-modules@6.0.1(postcss@8.5.28): dependencies: generic-names: 4.0.0 - icss-utils: 5.1.0(postcss@8.5.15) + icss-utils: 5.1.0(postcss@8.5.28) lodash.camelcase: 4.3.0 - postcss: 8.5.15 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.15) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.15) - postcss-modules-scope: 3.2.1(postcss@8.5.15) - postcss-modules-values: 4.0.0(postcss@8.5.15) + postcss: 8.5.28 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.28) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.28) + postcss-modules-scope: 3.2.1(postcss@8.5.28) + postcss-modules-values: 4.0.0(postcss@8.5.28) string-hash: 1.1.3 - postcss-normalize-charset@6.0.2(postcss@8.5.15): + postcss-normalize-charset@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-normalize-display-values@6.0.2(postcss@8.5.15): + postcss-normalize-display-values@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-positions@6.0.2(postcss@8.5.15): + postcss-normalize-positions@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@6.0.2(postcss@8.5.15): + postcss-normalize-repeat-style@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-string@6.0.2(postcss@8.5.15): + postcss-normalize-string@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@6.0.2(postcss@8.5.15): + postcss-normalize-timing-functions@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@6.1.0(postcss@8.5.15): + postcss-normalize-unicode@6.1.0(postcss@8.5.28): dependencies: browserslist: 4.28.2 - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-url@6.0.2(postcss@8.5.15): + postcss-normalize-url@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@6.0.2(postcss@8.5.15): + postcss-normalize-whitespace@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-ordered-values@6.0.2(postcss@8.5.15): + postcss-ordered-values@6.0.2(postcss@8.5.28): dependencies: - cssnano-utils: 4.0.2(postcss@8.5.15) - postcss: 8.5.15 + cssnano-utils: 4.0.2(postcss@8.5.28) + postcss: 8.5.28 postcss-value-parser: 4.2.0 - postcss-plugin-constparse@4.1.3(postcss@8.5.15): + postcss-plugin-constparse@4.1.3(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-pxtransform@4.1.3(postcss@8.5.15): + postcss-pxtransform@4.1.3(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-reduce-initial@6.1.0(postcss@8.5.15): + postcss-reduce-initial@6.1.0(postcss@8.5.28): dependencies: browserslist: 4.28.2 caniuse-api: 3.0.0 - postcss: 8.5.15 + postcss: 8.5.28 - postcss-reduce-transforms@6.0.2(postcss@8.5.15): + postcss-reduce-transforms@6.0.2(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 postcss-resolve-nested-selector@0.1.6: {} - postcss-rtlcss@5.7.1(postcss@8.5.15): + postcss-rtlcss@5.7.1(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 rtlcss: 4.3.0 - postcss-safe-parser@7.0.1(postcss@8.5.15): + postcss-safe-parser@7.0.1(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 - postcss-scss@4.0.9(postcss@8.5.15): + postcss-scss@4.0.9(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-selector-parser@6.1.2: dependencies: @@ -25933,23 +26064,23 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-svgo@6.0.3(postcss@8.5.15): + postcss-svgo@6.0.3(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-value-parser: 4.2.0 svgo: 3.3.3 - postcss-unique-selectors@6.0.4(postcss@8.5.15): + postcss-unique-selectors@6.0.4(postcss@8.5.28): dependencies: - postcss: 8.5.15 + postcss: 8.5.28 postcss-selector-parser: 6.1.2 - postcss-url@10.1.4(postcss@8.5.15): + postcss-url@10.1.4(postcss@8.5.28): dependencies: make-dir: 3.1.0 mime: 2.5.2 minimatch: 3.1.5 - postcss: 8.5.15 + postcss: 8.5.28 xxhashjs: 0.2.2 postcss-value-parser@4.2.0: {} @@ -25959,7 +26090,7 @@ snapshots: picocolors: 0.2.1 source-map: 0.6.1 - postcss@8.5.15: + postcss@8.5.28: dependencies: nanoid: 3.3.18 picocolors: 1.1.1 @@ -26540,7 +26671,7 @@ snapshots: relateurl@0.2.7: {} - release-it@18.1.2(@types/node@20.19.43)(typescript@5.9.3): + release-it@18.1.2(@types/node@22.20.1)(typescript@5.9.3): dependencies: '@iarna/toml': 2.2.5 '@octokit/rest': 21.0.2 @@ -26551,7 +26682,7 @@ snapshots: execa: 9.5.2 git-url-parse: 16.0.0 globby: 14.0.2 - inquirer: 12.3.0(@types/node@20.19.43) + inquirer: 12.3.0(@types/node@22.20.1) issue-parser: 7.0.1 lodash: 4.17.21 mime-types: 2.1.35 @@ -26691,7 +26822,7 @@ snapshots: adjust-sourcemap-loader: 4.0.0 convert-source-map: 1.9.0 loader-utils: 2.0.4 - postcss: 8.5.15 + postcss: 8.5.28 source-map: 0.6.1 resolve@1.22.12: @@ -26826,7 +26957,7 @@ snapshots: dependencies: escalade: 3.2.0 picocolors: 1.1.1 - postcss: 8.5.15 + postcss: 8.5.28 strip-json-comments: 3.1.1 run-applescript@7.1.0: {} @@ -26878,12 +27009,12 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@14.2.1(sass@1.77.6)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + sass-loader@14.2.1(sass@1.103.1)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: neo-async: 2.6.2 optionalDependencies: - sass: 1.77.6 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + sass: 1.103.1 + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) sass@1.103.1: dependencies: @@ -27592,9 +27723,9 @@ snapshots: stubborn-utils@1.0.2: {} - style-loader@3.3.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + style-loader@3.3.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) style-to-js@1.1.21: dependencies: @@ -27604,10 +27735,10 @@ snapshots: dependencies: inline-style-parser: 0.2.7 - stylehacks@6.1.1(postcss@8.5.15): + stylehacks@6.1.1(postcss@8.5.28): dependencies: browserslist: 4.28.2 - postcss: 8.5.15 + postcss: 8.5.28 postcss-selector-parser: 6.1.2 stylelint@16.26.1(typescript@5.9.3): @@ -27640,9 +27771,9 @@ snapshots: micromatch: 4.0.8 normalize-path: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.15 + postcss: 8.5.28 postcss-resolve-nested-selector: 0.1.6 - postcss-safe-parser: 7.0.1(postcss@8.5.15) + postcss-safe-parser: 7.0.1(postcss@8.5.28) postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 resolve-from: 5.0.0 @@ -27655,13 +27786,13 @@ snapshots: - supports-color - typescript - stylus-loader@8.1.3(stylus@0.64.0)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + stylus-loader@8.1.3(stylus@0.64.0)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: fast-glob: 3.3.3 normalize-path: 3.0.0 stylus: 0.64.0 optionalDependencies: - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) stylus@0.64.0: dependencies: @@ -27780,30 +27911,30 @@ snapshots: dependencies: execa: 0.7.0 - terser-webpack-plugin@5.6.1(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + terser-webpack-plugin@5.6.1(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 terser: 5.48.0 - webpack: 5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) optionalDependencies: '@swc/core': 1.16.1(@swc/helpers@0.5.23) lightningcss: 1.32.0 - postcss: 8.5.15 + postcss: 8.5.28 - terser-webpack-plugin@5.6.1(@swc/core@1.3.96(@swc/helpers@0.5.23))(esbuild@0.21.5)(lightningcss@1.32.0)(postcss@8.5.15)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + terser-webpack-plugin@5.6.1(@swc/core@1.3.96(@swc/helpers@0.5.23))(esbuild@0.21.5)(lightningcss@1.32.0)(postcss@8.5.28)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 terser: 5.48.0 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) optionalDependencies: '@swc/core': 1.3.96(@swc/helpers@0.5.23) esbuild: 0.21.5 lightningcss: 1.32.0 - postcss: 8.5.15 + postcss: 8.5.28 terser@5.48.0: dependencies: @@ -27974,12 +28105,12 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.4.12(@babel/core@7.29.7)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@30.4.1(@babel/core@7.29.7))(jest-util@30.4.1)(jest@30.4.2(@types/node@20.19.43))(typescript@5.9.3): + ts-jest@29.4.12(@babel/core@7.29.7)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@30.4.1(@babel/core@7.29.7))(jest-util@30.4.1)(jest@30.4.2(@types/node@22.20.1))(typescript@5.9.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 handlebars: 4.7.9 - jest: 30.4.2(@types/node@20.19.43) + jest: 30.4.2(@types/node@22.20.1) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -28005,7 +28136,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.19))(@swc/core@1.15.40(@swc/helpers@0.5.23))(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4)(typescript@5.9.3)(yaml@2.9.0): + tsup@8.5.1(@microsoft/api-extractor@7.59.0(@types/node@22.20.1))(@swc/core@1.16.1(@swc/helpers@0.5.23))(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13)(typescript@5.9.3)(yaml@2.9.0): dependencies: bundle-require: 5.1.0(esbuild@0.27.7) cac: 6.7.14 @@ -28016,7 +28147,7 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4)(yaml@2.9.0) + postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.13)(yaml@2.9.0) resolve-from: 5.0.0 rollup: 4.63.1 source-map: 0.7.6 @@ -28025,9 +28156,9 @@ snapshots: tinyglobby: 0.2.17 tree-kill: 1.2.2 optionalDependencies: - '@microsoft/api-extractor': 7.47.7(@types/node@22.19.19) - '@swc/core': 1.15.40(@swc/helpers@0.5.23) - postcss: 8.5.15 + '@microsoft/api-extractor': 7.59.0(@types/node@22.20.1) + '@swc/core': 1.16.1(@swc/helpers@0.5.23) + postcss: 8.5.28 typescript: 5.9.3 transitivePeerDependencies: - jiti @@ -28564,10 +28695,28 @@ snapshots: - supports-color - terser - vite-plugin-dts@4.2.1(@types/node@20.19.41)(rollup@4.60.4)(typescript@5.9.3)(vite@5.4.21(@types/node@20.19.41)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0)): + vite-node@3.2.4(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: - '@microsoft/api-extractor': 7.47.7(@types/node@20.19.41) - '@rollup/pluginutils': 5.4.0(rollup@4.60.4) + cac: 6.7.14 + debug: 4.4.3(supports-color@8.1.1) + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite-plugin-dts@4.5.4(@types/node@20.19.43)(rollup@4.63.1)(typescript@5.9.3)(vite@5.4.21(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)): + dependencies: + '@microsoft/api-extractor': 7.59.0(@types/node@20.19.43) + '@rollup/pluginutils': 5.4.0(rollup@4.63.1) '@volar/typescript': 2.4.28 '@vue/language-core': 2.2.0(typescript@5.9.3) compare-versions: 6.1.1 @@ -28594,8 +28743,8 @@ snapshots: vite@5.4.21(@types/node@18.19.130)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: esbuild: 0.21.5 - postcss: 8.5.15 - rollup: 4.60.4 + postcss: 8.5.28 + rollup: 4.63.1 optionalDependencies: '@types/node': 18.19.130 fsevents: 2.3.3 @@ -28608,8 +28757,8 @@ snapshots: vite@5.4.21(@types/node@20.19.43)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: esbuild: 0.21.5 - postcss: 8.5.15 - rollup: 4.60.4 + postcss: 8.5.28 + rollup: 4.63.1 optionalDependencies: '@types/node': 20.19.43 fsevents: 2.3.3 @@ -28622,8 +28771,8 @@ snapshots: vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: esbuild: 0.21.5 - postcss: 8.5.15 - rollup: 4.60.4 + postcss: 8.5.28 + rollup: 4.63.1 optionalDependencies: '@types/node': 22.20.1 fsevents: 2.3.3 @@ -28638,7 +28787,7 @@ snapshots: jest-canvas-mock: 2.5.2 vitest: 3.2.7(@types/debug@4.1.13)(@types/node@20.19.43)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) - vitest@1.6.1(@types/node@18.19.130)(@vitest/ui@2.1.9(vitest@3.2.7))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): + vitest@1.6.1(@types/node@18.19.130)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: '@vitest/expect': 1.6.1 '@vitest/runner': 1.6.1 @@ -28675,7 +28824,7 @@ snapshots: - supports-color - terser - vitest@1.6.1(@types/node@22.20.1)(@vitest/ui@2.1.9(vitest@3.2.7))(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): + vitest@1.6.1(@types/node@22.20.1)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): dependencies: '@vitest/expect': 1.6.1 '@vitest/runner': 1.6.1 @@ -28777,8 +28926,50 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.13 - '@types/node': 20.19.41 - '@vitest/ui': 2.1.9(vitest@3.2.4) + '@types/node': 20.19.43 + '@vitest/ui': 2.1.9(vitest@3.2.7) + happy-dom: 14.12.3 + jsdom: 24.1.3 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vitest@3.2.7(@types/debug@4.1.13)(@types/node@22.20.1)(@vitest/ui@2.1.9)(happy-dom@14.12.3)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0): + dependencies: + '@types/chai': 5.2.3 + '@vitest/expect': 3.2.7 + '@vitest/mocker': 3.2.7(vite@5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0)) + '@vitest/pretty-format': 3.2.7 + '@vitest/runner': 3.2.7 + '@vitest/snapshot': 3.2.7 + '@vitest/spy': 3.2.7 + '@vitest/utils': 3.2.7 + chai: 5.3.3 + debug: 4.4.3(supports-color@8.1.1) + expect-type: 1.3.0 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.17 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 5.4.21(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + vite-node: 3.2.4(@types/node@22.20.1)(less@3.13.1)(lightningcss@1.32.0)(sass@1.103.1)(stylus@0.64.0)(terser@5.48.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.13 + '@types/node': 22.20.1 + '@vitest/ui': 2.1.9(vitest@3.2.7) happy-dom: 14.12.3 jsdom: 24.1.3 transitivePeerDependencies: @@ -28851,26 +29042,26 @@ snapshots: deepmerge: 1.5.2 javascript-stringify: 2.1.0 - webpack-dev-middleware@5.3.4(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + webpack-dev-middleware@5.3.4(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.3.3 - webpack: 5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) optional: true - webpack-dev-middleware@5.3.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + webpack-dev-middleware@5.3.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.3.3 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) - webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -28900,10 +29091,10 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpack-dev-middleware: 5.3.4(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) ws: 8.21.0 optionalDependencies: - webpack: 5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) transitivePeerDependencies: - bufferutil - debug @@ -28911,7 +29102,7 @@ snapshots: - utf-8-validate optional: true - webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -28941,10 +29132,10 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpack-dev-middleware: 5.3.4(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) ws: 8.21.0 optionalDependencies: - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) transitivePeerDependencies: - bufferutil - debug @@ -28965,7 +29156,7 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15): + webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.9 @@ -28988,7 +29179,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.3.3 - terser-webpack-plugin: 5.6.1(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + terser-webpack-plugin: 5.6.1(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)(webpack@5.91.0(@swc/core@1.16.1(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) watchpack: 2.5.1 webpack-sources: 3.5.0 transitivePeerDependencies: @@ -29005,7 +29196,7 @@ snapshots: - postcss - uglify-js - webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15): + webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.9 @@ -29028,7 +29219,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.3.3 - terser-webpack-plugin: 5.6.1(@swc/core@1.3.96(@swc/helpers@0.5.23))(esbuild@0.21.5)(lightningcss@1.32.0)(postcss@8.5.15)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + terser-webpack-plugin: 5.6.1(@swc/core@1.3.96(@swc/helpers@0.5.23))(esbuild@0.21.5)(lightningcss@1.32.0)(postcss@8.5.28)(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)) watchpack: 2.5.1 webpack-sources: 3.5.0 transitivePeerDependencies: @@ -29045,13 +29236,13 @@ snapshots: - postcss - uglify-js - webpackbar@5.0.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)): + webpackbar@5.0.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28)): dependencies: chalk: 4.1.2 consola: 2.15.3 pretty-time: 1.1.0 std-env: 3.10.0 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.28) websocket-driver@0.7.4: dependencies: From 360735725784c77274b3c61884fcdf183f965cf2 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Wed, 9 Sep 2026 14:22:59 +0800 Subject: [PATCH 23/25] feat: enhance CLI and documentation for migration and diff capabilities in NutUI React and Taro --- scripts/properties.json | 94 +++++++++++++++++-- .../doc/docs/ai-react/cli.en-US.md | 25 ++++- .../sites-react/doc/docs/ai-react/cli.md | 25 ++++- .../doc/docs/ai-react/mcp.en-US.md | 8 +- .../sites-react/doc/docs/ai-react/mcp.md | 9 +- .../doc/docs/ai-react/skill.en-US.md | 27 +++++- .../sites-react/doc/docs/ai-react/skill.md | 27 +++++- .../sites-react/doc/docs/ai-taro/cli.en-US.md | 26 ++++- src/sites/sites-react/doc/docs/ai-taro/cli.md | 26 ++++- .../sites-react/doc/docs/ai-taro/mcp.en-US.md | 8 +- src/sites/sites-react/doc/docs/ai-taro/mcp.md | 9 +- .../doc/docs/ai-taro/skill.en-US.md | 63 +++++++++++++ .../sites-react/doc/docs/ai-taro/skill.md | 63 +++++++++++++ 13 files changed, 383 insertions(+), 27 deletions(-) create mode 100644 src/sites/sites-react/doc/docs/ai-taro/skill.en-US.md create mode 100644 src/sites/sites-react/doc/docs/ai-taro/skill.md diff --git a/scripts/properties.json b/scripts/properties.json index aaf7d01bc8..8b3a512a01 100644 --- a/scripts/properties.json +++ b/scripts/properties.json @@ -6949,6 +6949,36 @@ "第三列": "`string`", "第四列": "-" }, + { + "组件分类": "操作反馈", + "组件名": "NoticeBar", + "版本号": "2.0.0", + "表格名": "Props", + "第一列": "description", + "第二列": "副文本内容,显示在主文本下方", + "第三列": "`ReactNode`", + "第四列": "-" + }, + { + "组件分类": "操作反馈", + "组件名": "NoticeBar", + "版本号": "2.0.0", + "表格名": "Props", + "第一列": "tag", + "第二列": "信息标图标,显示在文案右侧,尺寸 12×12", + "第三列": "`ReactNode`", + "第四列": "-" + }, + { + "组件分类": "操作反馈", + "组件名": "NoticeBar", + "版本号": "2.0.0", + "表格名": "Props", + "第一列": "action", + "第二列": "操作按钮区域,支持弱行动(文字链接)和强行动(按钮),最大宽度 99px", + "第三列": "`ReactNode`", + "第四列": "-" + }, { "组件分类": "操作反馈", "组件名": "NoticeBar", @@ -6959,6 +6989,16 @@ "第三列": "`boolean`", "第四列": "false" }, + { + "组件分类": "操作反馈", + "组件名": "NoticeBar", + "版本号": "2.0.0", + "表格名": "Props", + "第一列": "autoClose", + "第二列": "自动关闭延时(毫秒),0 或不传为手动关闭", + "第三列": "`number`", + "第四列": "0" + }, { "组件分类": "操作反馈", "组件名": "NoticeBar", @@ -6975,7 +7015,7 @@ "版本号": "2.0.0", "表格名": "Props", "第一列": "rightIcon", - "第二列": "右边的 icon,在 closeable 模式下默认为 ``", + "第二列": "右边的 icon,在 closeable 模式下默认为 ``", "第三列": "`ReactNode`", "第四列": "-" }, @@ -6985,7 +7025,7 @@ "版本号": "2.0.0", "表格名": "Props", "第一列": "right", - "第二列": "区别于rightIcon,为右边自定义区域,仅用于 direction='horizontal' 模式", + "第二列": "~~已废弃,建议使用 action 替代~~ 右边自定义区域,仅用于 direction='horizontal' 模式", "第三列": "`ReactNode`", "第四列": "-" }, @@ -7199,6 +7239,16 @@ "第三列": "`onClose: () => void`", "第四列": "-" }, + { + "组件分类": "操作反馈", + "组件名": "Popover", + "版本号": "3.0.0", + "表格名": "Props", + "第一列": "type", + "第二列": "气泡类型,`status` 状态型(图标+文案+关闭),`description` 说明型(仅文案)", + "第三列": "`status` | `description`", + "第四列": "status" + }, { "组件分类": "操作反馈", "组件名": "Popover", @@ -7219,6 +7269,16 @@ "第三列": "`boolean`", "第四列": "false" }, + { + "组件分类": "操作反馈", + "组件名": "Popover", + "版本号": "3.0.0", + "表格名": "Props", + "第一列": "theme", + "第二列": "主题风格,默认 `dark` 为设计规范深色气泡;`light` 为明亮风格(白底深字)", + "第三列": "`light` | `dark`", + "第四列": "dark" + }, { "组件分类": "操作反馈", "组件名": "Popover", @@ -7237,7 +7297,7 @@ "第一列": "offset", "第二列": "出现位置的偏移量", "第三列": "`string[]` | `number[]`", - "第四列": "[0, 12]" + "第四列": "[0, 8]" }, { "组件分类": "操作反馈", @@ -7247,7 +7307,7 @@ "第一列": "arrowOffset", "第二列": "小箭头的偏移量", "第三列": "`number`", - "第四列": "0" + "第四列": "20" }, { "组件分类": "操作反馈", @@ -7279,6 +7339,26 @@ "第三列": "`boolean`", "第四列": "true" }, + { + "组件分类": "操作反馈", + "组件名": "Popover", + "版本号": "3.0.0", + "表格名": "Props", + "第一列": "autoShow", + "第二列": "是否自动弹出,需配合 `onOpen` 更新 `visible`", + "第三列": "`boolean`", + "第四列": "false" + }, + { + "组件分类": "操作反馈", + "组件名": "Popover", + "版本号": "3.0.0", + "表格名": "Props", + "第一列": "duration", + "第二列": "自动关闭时长(ms),`0` 表示不自动关闭", + "第三列": "`number`", + "第四列": "0" + }, { "组件分类": "操作反馈", "组件名": "Popover", @@ -7887,7 +7967,7 @@ "第一列": "visible", "第二列": "是否显示骨架屏(true不显示骨架屏,false显示骨架屏)", "第三列": "`boolean`", - "第四列": "true" + "第四列": "false" }, { "组件分类": "操作反馈", @@ -7897,7 +7977,7 @@ "第一列": "animated", "第二列": "是否开启骨架屏动画", "第三列": "`boolean`", - "第四列": "false" + "第四列": "true" }, { "组件分类": "操作反馈", @@ -7927,7 +8007,7 @@ "第一列": "duration", "第二列": "动画时长", "第三列": "`number`", - "第四列": "0.6" + "第四列": "0.4" }, { "组件分类": "操作反馈", diff --git a/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md b/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md index 4e6d103af5..3a3dec7818 100644 --- a/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md @@ -46,6 +46,8 @@ nutui-react demo Button demo1 # View a demo's source nutui-react token # Global Design Tokens nutui-react token Button # Component-level Design Tokens nutui-react --nv 3.1.0 info Button # Query a specific NutUI version's API (auto-detected if omitted) +nutui-react migrate 3 4 --apply ./src # Scan a project and generate v3 → v4 migration guidance +nutui-react diff 3 4 Empty # Compare Empty props between v3 and v4 nutui-react mcp # Start a local MCP server for IDE integration ``` @@ -58,6 +60,8 @@ nutui-react mcp # Start a local MCP server for IDE integrat | `nutui-react doc [--lang zh\|en]` | Full component Markdown docs (Chinese by default) | | `nutui-react demo [name]` | Omit `name` to list all demos; pass `name` (e.g. `demo1`) for source | | `nutui-react token [Component]` | Design Tokens; omit the component name to list global tokens | +| `nutui-react migrate [from] [to]` | Print a major-version migration guide (defaults to `3 4`); use `--component ` for one component or `--apply ` to scan a project and generate migration guidance | +| `nutui-react diff [Component]` | Compare two version snapshots for added, removed, type-changed, and default-changed props | | `nutui-react mcp` | Start a local MCP server (stdio) for Claude Code / Cursor / VS Code / Codex IDE integration | When a component name isn't found, the CLI returns a "did you mean" suggestion (e.g. `Buttn` → `Button`) — use it to correct the name rather than guessing. @@ -93,9 +97,28 @@ Version routing is `major.minor`-grained: a request for `3.0.5` lands on the hig > When the version can be inferred from the project, prefer not passing `--nutui-version` and let the CLI detect it. The `-v / --version` semantics stay unchanged — it still prints the CLI's own version. +## Migrate from v3 to v4 + +Both `migrate` and `diff` use offline data shipped with the CLI, but they answer different questions: + +- `migrate` reads the official migration guide and covers the reasoning and required edits, including styles, CSS class names, and Design Tokens that are not represented in props tables. +- `diff` compares two version snapshots and precisely reports added, removed, type-changed, and default-changed props. + +Scan the project first, then inspect each affected component: + +```bash +nutui-react migrate 3 4 --apply ./src --format json +nutui-react migrate 3 4 --component Empty --format json +nutui-react diff 3 4 Empty --format json +``` + +`--apply` only scans source files and outputs migration steps plus an agent prompt for the components actually used; it **does not modify files**. `matchedComponents` identifies components to update, while `componentsWithoutBreakingChanges` lists used components with no breaking change recorded in the current migration guide. + +Install the [`nutui-react-v3-to-v4` Skill](/#/en-US/ai/skill) for an agent-guided workflow covering dependency upgrades, inventory, component-by-component edits, build checks, and visual verification. + ## Usage with AI tools -The CLI ships with a Skill file following the [Agent Skills](https://github.com/vercel-labs/skills) spec, distributed with the npm package. It guides the agent to call the right command at the right time — e.g. "look up props with `info` and grab a demo before writing a component" and "customize styles with `var(--nutui-*)` tokens instead of hardcoded colors". +The CLI package ships with Skills that follow the [Agent Skills](https://github.com/vercel-labs/skills) spec. They cover both component development and v3 → v4 upgrades, guiding the agent to call the right command at the right time. Install into the current project (directly from the GitHub repo): diff --git a/src/sites/sites-react/doc/docs/ai-react/cli.md b/src/sites/sites-react/doc/docs/ai-react/cli.md index 5f70c672cc..ca60754b4c 100644 --- a/src/sites/sites-react/doc/docs/ai-react/cli.md +++ b/src/sites/sites-react/doc/docs/ai-react/cli.md @@ -46,6 +46,8 @@ nutui-react demo Button demo1 # 查看某个示例的源码 nutui-react token # 全局 Design Token nutui-react token Button # 组件级 Design Token nutui-react --nv 3.1.0 info Button # 查指定 NutUI 版本的 API(省略则自动检测) +nutui-react migrate 3 4 --apply ./src # 扫描项目并生成 v3 → v4 迁移提示 +nutui-react diff 3 4 Empty # 对比 Empty 在 v3 / v4 的 Props 差异 nutui-react mcp # 启动本地 MCP 服务,供 IDE 集成 ``` @@ -58,6 +60,8 @@ nutui-react mcp # 启动本地 MCP 服务,供 IDE 集成 | `nutui-react doc [--lang zh\|en]` | 组件完整 Markdown 文档,默认中文 | | `nutui-react demo [name]` | 省略 `name` 列出全部示例;指定 `name`(如 `demo1`)输出源码 | | `nutui-react token [Component]` | Design Token;省略组件名则列出全局 token | +| `nutui-react migrate [from] [to]` | 输出大版本迁移指南(默认 `3 4`);支持 `--component ` 查看单组件,或 `--apply ` 扫描项目并生成迁移提示 | +| `nutui-react diff [Component]` | 对比两个版本快照的 Props 差异,包括新增、移除、类型和默认值变更 | | `nutui-react mcp` | 启动本地 MCP 服务(stdio),供 Claude Code / Cursor / VS Code / Codex 等 IDE 集成 | 未命中组件名时,CLI 会给出「你是否想找」建议(如 `Buttn` → `Button`),据此纠正而非凭空猜测。 @@ -93,9 +97,28 @@ nutui-react --nv 4.0.0-beta.7 doc Cell > 在项目里能自动推断版本时,优先不显式传 `--nutui-version`,让 CLI 自行检测更省心。`-v / --version` 语义保持不变,仍输出 CLI 自身版本。 +## v3 → v4 迁移 + +`migrate` 与 `diff` 都基于随 CLI 分发的离线数据,但用途不同: + +- `migrate` 读取官方迁移文档,说明为什么改、怎么改,并覆盖样式、CSS 类名和 Design Token 等 Props 表之外的变化。 +- `diff` 实时比较两个版本快照,精确列出 Props 的新增、移除、类型和默认值变化。 + +推荐先扫描项目,再逐组件核对: + +```bash +nutui-react migrate 3 4 --apply ./src --format json +nutui-react migrate 3 4 --component Empty --format json +nutui-react diff 3 4 Empty --format json +``` + +`--apply` 只扫描源码并输出项目实际使用组件的迁移步骤与 Agent 提示,**不会自动修改文件**。输出中的 `matchedComponents` 是需要重点处理的组件,`componentsWithoutBreakingChanges` 是已使用但当前迁移文档未记录破坏性变更的组件。 + +完整升级流程可安装 [`nutui-react-v3-to-v4` Skill](/#/zh-CN/ai/skill),由 Agent 按「升级依赖 → 扫描盘点 → 逐组件改写 → 构建与视觉验证」执行。 + ## 在 AI 工具中使用 -CLI 内置一份遵循 [Agent Skills](https://github.com/vercel-labs/skills) 规范的 Skill 文件,随 npm 包分发,指导 Agent 在正确的时机调用正确的命令——例如「写组件前先 `info` 查 Props、再 `demo` 拿示例」「定制样式用 `var(--nutui-*)` token 而非硬编码颜色」。 +CLI 随 npm 包分发遵循 [Agent Skills](https://github.com/vercel-labs/skills) 规范的 Skill,分别覆盖组件开发与 v3 → v4 升级流程,指导 Agent 在正确的时机调用正确的命令。 安装到当前项目(从 GitHub 仓库直接安装): diff --git a/src/sites/sites-react/doc/docs/ai-react/mcp.en-US.md b/src/sites/sites-react/doc/docs/ai-react/mcp.en-US.md index bf3529e207..c24d08624d 100644 --- a/src/sites/sites-react/doc/docs/ai-react/mcp.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-react/mcp.en-US.md @@ -10,7 +10,7 @@ The CLI is "the agent runs commands"; MCP registers the same capabilities as IDE ## Start the MCP server -`nutui-react mcp` starts a local MCP server that communicates over stdio, exposing 5 read-only tools and 2 prompts. This command shouldn't be run directly in a terminal — configure it in your AI tool instead (see below). +`nutui-react mcp` starts a local MCP server that communicates over stdio, exposing 7 read-only tools and 2 prompts. This command shouldn't be run directly in a terminal — configure it in your AI tool instead (see below). ### Tools @@ -21,10 +21,14 @@ The CLI is "the agent runs commands"; MCP registers the same capabilities as IDE | `nutui_doc` | Get a component's full docs (`lang: zh\|en`) | | `nutui_demo` | Get a component's H5 demo list / source | | `nutui_token` | Query Design Tokens (global / component-level) | +| `nutui_migrate` | Get a major-version migration guide, optionally filtered by component or project directory | +| `nutui_diff` | Compare prop differences between two version snapshots | All tools are read-only, side-effect-free, and do not access the external network. -Every tool accepts an optional `nutuiVersion` argument (e.g. `3.1.0`, `4.0.0-beta.7`) to target a NutUI major version; when omitted, the version your project uses is auto-detected, falling back to the default major. See the [CLI multi-version notes](/#/en-US/ai/cli). +The first five component-knowledge tools accept an optional `nutuiVersion` argument (e.g. `3.1.0`, `4.0.0-beta.7`) to target a NutUI major version; when omitted, the version your project uses is auto-detected, falling back to the default major. See the [CLI multi-version notes](/#/en-US/ai/cli). + +`nutui_migrate` accepts optional `from`, `to`, `component`, and `applyDir` arguments. `applyDir` only scans the directory and returns migration steps; it does not modify files. `nutui_diff` requires `v1` and `v2`, with an optional `component` filter. They return the same structured data as the CLI's `migrate` and `diff` commands for agent-driven v3 → v4 upgrades. ### Prompts diff --git a/src/sites/sites-react/doc/docs/ai-react/mcp.md b/src/sites/sites-react/doc/docs/ai-react/mcp.md index fcfb9c4152..054a3d8b6f 100644 --- a/src/sites/sites-react/doc/docs/ai-react/mcp.md +++ b/src/sites/sites-react/doc/docs/ai-react/mcp.md @@ -10,7 +10,7 @@ CLI 是「Agent 主动敲命令」,MCP 则把同一份能力注册成 IDE 原 ## 启动 MCP 服务 -`nutui-react mcp` 启动一个通过 stdio 通信的本地 MCP 服务,暴露 5 个只读工具与 2 个提示词。该命令不应在终端直接裸跑,而应在 AI 工具中配置(见下方)。 +`nutui-react mcp` 启动一个通过 stdio 通信的本地 MCP 服务,暴露 7 个只读工具与 2 个提示词。该命令不应在终端直接裸跑,而应在 AI 工具中配置(见下方)。 ### 工具 @@ -21,10 +21,15 @@ CLI 是「Agent 主动敲命令」,MCP 则把同一份能力注册成 IDE 原 | `nutui_doc` | 获取组件完整文档(`lang: zh\|en`) | | `nutui_demo` | 获取组件 H5 示例列表 / 源码 | | `nutui_token` | 查询 Design Token(全局 / 组件级) | +| `nutui_migrate` | 获取大版本迁移指南;可按组件筛选或扫描项目目录 | +| `nutui_diff` | 对比两个版本快照的 Props 差异 | 所有工具均为只读、无副作用、不访问外部网络。 -每个工具都接受可选入参 `nutuiVersion`(如 `3.1.0`、`4.0.0-beta.7`),用于指定目标 NutUI 大版本;省略时自动检测项目所用版本,检测不到则回退默认大版本。详见 [CLI 的「多版本」说明](/#/zh-CN/ai/cli)。 +前 5 个组件知识工具都接受可选入参 `nutuiVersion`(如 `3.1.0`、`4.0.0-beta.7`),用于指定目标 NutUI 大版本;省略时自动检测项目所用版本,检测不到则回退默认大版本。详见 [CLI 的「多版本」说明](/#/zh-CN/ai/cli)。 + +- `nutui_migrate` 接受可选的 `from`、`to`、`component` 和 `applyDir` 参数; +- `applyDir` 只扫描目录并返回迁移步骤,不修改文件。`nutui_diff` 要求传入 `v1`、`v2`,也可用 `component` 限定单个组件。两者与 CLI 的 `migrate`、`diff` 命令返回同类结构化数据,可由 Agent 直接用于 v3 → v4 升级。 ### 提示词 diff --git a/src/sites/sites-react/doc/docs/ai-react/skill.en-US.md b/src/sites/sites-react/doc/docs/ai-react/skill.en-US.md index d104730b3e..cde545f032 100644 --- a/src/sites/sites-react/doc/docs/ai-react/skill.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-react/skill.en-US.md @@ -1,6 +1,6 @@ # Skill -This page introduces two NutUI-React Agent Skills, the problem each one solves, and how to install them. +This page introduces three NutUI-React Agent Skills, the problem each one solves, and how to install them. ## What is a Skill? @@ -8,11 +8,12 @@ A [Skill](https://github.com/vercel-labs/skills) is an instruction file followin Once installed, the agent automatically loads the Skill and follows its workflow when it hits a matching task, with no need for you to prompt it every time. Compatible with Claude Code / Cursor / VS Code / Codex and any agent that supports the skills protocol. -Two Skills are available: +Three Skills are available: | Skill | Purpose | | --- | --- | | `nutui-react` | Look up the API before writing NutUI-React code, eliminating API hallucination | +| `nutui-react-v3-to-v4` | Systematically upgrade `@nutui/nutui-react` from v3 to v4 | | `nutui-react-to-taro` | Migrate an H5 project from `@nutui/nutui-react` to `@nutui/nutui-react-taro` (Taro / mini-program) | ## `nutui-react` — look up before writing @@ -32,6 +33,24 @@ Guides the agent to query the real API with the CLI before writing any NutUI-Rea npx skills add jdf2e/nutui-react --skill nutui-react ``` +## `nutui-react-v3-to-v4` — major-version upgrade + +Guides the agent through upgrading `@nutui/nutui-react` from v3 to v4 with the new `migrate` and `diff` capabilities. It focuses on style, CSS class, Design Token, enum, and default-value changes that may not produce compile errors. + +**Workflow:** + +- Ask for confirmation before upgrading dependencies, then verify the lockfile and installation result. +- Run `nutui-react migrate 3 4 --apply ./src --format json` to inventory the components actually used by the project. +- For every matched component, combine `migrate --component` with `diff 3 4` to check both the official migration guidance and exact prop changes. +- Inspect custom styles targeting `.nut-*` classes and `--nutui-*` variables. +- Validate builds, rendering, and interactions; a successful compilation alone does not complete the migration. + +**Install:** + +```bash +npx skills add jdf2e/nutui-react --skill nutui-react-v3-to-v4 +``` + ## `nutui-react-to-taro` — migrate H5 to Taro Guides the agent to migrate a project using `@nutui/nutui-react` (H5) to `@nutui/nutui-react-taro` (Taro cross-platform / mini-program). The two packages share one component set and almost every component maps 1:1, so migration is highly regular — the Skill orchestrates the mechanical rewrites and the judgment-heavy semantic rewrites into a clear workflow. @@ -55,8 +74,8 @@ npx skills add jdf2e/nutui-react --skill nutui-react-to-taro All three reuse the same offline knowledge — only the calling protocol differs: -- **CLI** — the agent runs commands to query. -- **MCP** — registers the same capabilities as IDE-native tools, called on demand in conversation. +- **CLI** — the agent runs commands to query knowledge, scan a project, or compare versions. +- **MCP** — registers the same query, migration, and diff capabilities as IDE-native tools, called on demand in conversation. - **Skill** — provides no new capability; it tells the agent _when and in what order_ to call the CLI / MCP, codifying the workflow. If your IDE supports MCP, enabling the MCP server alongside lets the Skill's query steps route through IDE-native tools automatically. diff --git a/src/sites/sites-react/doc/docs/ai-react/skill.md b/src/sites/sites-react/doc/docs/ai-react/skill.md index 432d4acb1e..a7b67de4b8 100644 --- a/src/sites/sites-react/doc/docs/ai-react/skill.md +++ b/src/sites/sites-react/doc/docs/ai-react/skill.md @@ -1,6 +1,6 @@ # Skill -本篇介绍两个 NutUI-React Agent Skill,以及它们各自解决的问题与安装方式。 +本篇介绍三个 NutUI-React Agent Skill,以及它们各自解决的问题与安装方式。 ## 什么是 Skill? @@ -8,11 +8,12 @@ 安装后,Agent 在遇到对应任务时会自动加载 Skill 并遵循其中的流程,无需你每次手动提示。兼容 Claude Code / Cursor / VS Code / Codex 等所有支持 skills 协议的 Agent。 -目前提供两个 Skill: +目前提供三个 Skill: | Skill | 用途 | | --- | --- | | `nutui-react` | 写 NutUI-React 代码时「先查后写」,消除 API 幻觉 | +| `nutui-react-v3-to-v4` | 将 `@nutui/nutui-react` 从 v3 系统升级到 v4 | | `nutui-react-to-taro` | 把 H5 项目从 `@nutui/nutui-react` 迁移到 `@nutui/nutui-react-taro`(Taro / 小程序) | ## `nutui-react` — 先查后写 @@ -32,6 +33,24 @@ npx skills add jdf2e/nutui-react --skill nutui-react ``` +## `nutui-react-v3-to-v4` — 大版本升级 + +指导 Agent 使用 `migrate` 与 `diff` 能力,把 `@nutui/nutui-react` 从 v3 升级到 v4。 + +**它编排的迁移流程:** + +- 升级依赖前先征求用户确认,并核对锁文件与安装结果。 +- 用 `nutui-react migrate 3 4 --apply ./src --format json` 扫描项目,建立实际使用组件的迁移清单。 +- 对每个命中的组件结合 `migrate --component` 与 `diff 3 4`,同时核对官方迁移说明和 Props 精确差异。 +- 检查项目中针对 `.nut-*` 类名与 `--nutui-*` 变量的自定义样式覆盖。 +- 完成构建与视觉、交互验证;编译通过不等于迁移完成。 + +**安装:** + +```bash +npx skills add jdf2e/nutui-react --skill nutui-react-v3-to-v4 +``` + ## `nutui-react-to-taro` — H5 迁移到 Taro 指导 Agent 把使用 `@nutui/nutui-react`(H5)的项目,迁移到 `@nutui/nutui-react-taro`(Taro 跨端 / 小程序)。两个包共用同一套组件,绝大多数组件一一对应,因此迁移高度规则化——Skill 负责把规则化改写与需要判断的语义改写编排成清晰流程。 @@ -55,8 +74,8 @@ npx skills add jdf2e/nutui-react --skill nutui-react-to-taro 三者复用同一份离线知识,只是调用协议不同: -- **CLI** — Agent 主动敲命令查询。 -- **MCP** — 把同一份能力注册成 IDE 原生工具,在对话中按需自动调用。 +- **CLI** — Agent 主动运行命令查询知识、扫描项目或比较版本。 +- **MCP** — 把同一份查询、迁移和差异对比能力注册成 IDE 原生工具,在对话中按需自动调用。 - **Skill** — 不提供新能力,而是告诉 Agent「何时、按什么顺序」调用 CLI / MCP,把流程固化下来。 如果你的 IDE 支持 MCP,推荐同时启用 MCP 服务,让 Skill 里的查询步骤自动走 IDE 原生工具。 diff --git a/src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md b/src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md index 55abeaea22..34c80111e9 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md @@ -47,6 +47,8 @@ nutui-react-taro demo Button demo1 # View a demo's source nutui-react-taro token # Global Design Tokens nutui-react-taro token Button # Component-level Design Tokens nutui-react-taro --nv 3.1.0 info Button # Query a specific NutUI version's API (auto-detected if omitted) +nutui-react-taro migrate 3 4 --apply ./src # Scan a project and generate v3 → v4 migration guidance +nutui-react-taro diff 3 4 Empty # Compare Empty props between v3 and v4 nutui-react-taro mcp # Start a local MCP server for IDE integration ``` @@ -59,6 +61,8 @@ nutui-react-taro mcp # Start a local MCP server for IDE int | `nutui-react-taro doc ` | Full component Markdown docs (Chinese) | | `nutui-react-taro demo [name]` | Omit `name` to list all demos; pass `name` (e.g. `demo1`) for source | | `nutui-react-taro token [Component]` | Design Tokens; omit the component name to list global tokens | +| `nutui-react-taro migrate [from] [to]` | Print a major-version migration guide (defaults to `3 4`); use `--component ` for one component or `--apply ` to scan a project and generate migration guidance | +| `nutui-react-taro diff [Component]` | Compare two version snapshots for added, removed, type-changed, and default-changed props | | `nutui-react-taro mcp` | Start a local MCP server (stdio) for Claude Code / Cursor / VS Code / Codex IDE integration | When a component name isn't found, the CLI returns a "did you mean" suggestion (e.g. `Buttn` → `Button`) — use it to correct the name rather than guessing. @@ -93,9 +97,28 @@ Version routing is `major.minor`-grained: a request for `3.0.5` lands on the hig > When the version can be inferred from the project, prefer not passing `--nutui-version` and let the CLI detect it. The `-v / --version` semantics stay unchanged — it still prints the CLI's own version. +## Migrate from v3 to v4 + +Both `migrate` and `diff` use offline data shipped with the CLI, but they answer different questions: + +- `migrate` reads the official migration guide and covers the reasoning and required edits, including styles, CSS class names, and Design Tokens that are not represented in props tables. +- `diff` compares two version snapshots and precisely reports added, removed, type-changed, and default-changed props. + +Scan the project first, then inspect each affected component: + +```bash +nutui-react-taro migrate 3 4 --apply ./src --format json +nutui-react-taro migrate 3 4 --component Empty --format json +nutui-react-taro diff 3 4 Empty --format json +``` + +`--apply` only scans source files and outputs migration steps plus an agent prompt for the components actually used; it **does not modify files**. `matchedComponents` identifies components to update, while `componentsWithoutBreakingChanges` lists used components with no breaking change recorded in the current migration guide. + +Install the [`nutui-react-taro-v3-to-v4` Skill](/#/en-US/ai/skill) for an agent-guided workflow covering dependency upgrades, inventory, component-by-component edits, multi-platform builds, and visual verification. + ## Usage with AI tools -The CLI ships with a Skill file following the [Agent Skills](https://github.com/vercel-labs/skills) spec, distributed with the npm package. It guides the agent to call the right command at the right time — e.g. "look up props with `info` and grab a demo before writing a component" and "customize styles with `var(--nutui-*)` tokens instead of hardcoded colors". +The CLI package ships with Skills that follow the [Agent Skills](https://github.com/vercel-labs/skills) spec. They cover both component development and v3 → v4 upgrades, guiding the agent to call the right command at the right time. Install into the current project (directly from the GitHub repo): @@ -109,6 +132,7 @@ If your IDE supports MCP, the CLI can also run as an MCP server, registering the ## Learn more +- [Skill](/#/en-US/ai/skill) - [MCP Server](/#/en-US/ai/mcp) - [LLMs.txt](/#/en-US/ai/llms) - [For Agents](/#/en-US/ai/for-agents) diff --git a/src/sites/sites-react/doc/docs/ai-taro/cli.md b/src/sites/sites-react/doc/docs/ai-taro/cli.md index 15760e7815..66b8c540a5 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/cli.md +++ b/src/sites/sites-react/doc/docs/ai-taro/cli.md @@ -47,6 +47,8 @@ nutui-react-taro demo Button demo1 # 查看某个示例的源码 nutui-react-taro token # 全局 Design Token nutui-react-taro token Button # 组件级 Design Token nutui-react-taro --nv 3.1.0 info Button # 查指定 NutUI 版本的 API(省略则自动检测) +nutui-react-taro migrate 3 4 --apply ./src # 扫描项目并生成 v3 → v4 迁移提示 +nutui-react-taro diff 3 4 Empty # 对比 Empty 在 v3 / v4 的 Props 差异 nutui-react-taro mcp # 启动本地 MCP 服务,供 IDE 集成 ``` @@ -59,6 +61,8 @@ nutui-react-taro mcp # 启动本地 MCP 服务,供 IDE | `nutui-react-taro doc ` | 组件完整 Markdown 文档(中文) | | `nutui-react-taro demo [name]` | 省略 `name` 列出全部示例;指定 `name`(如 `demo1`)输出源码 | | `nutui-react-taro token [Component]` | Design Token;省略组件名则列出全局 token | +| `nutui-react-taro migrate [from] [to]` | 输出大版本迁移指南(默认 `3 4`);支持 `--component ` 查看单组件,或 `--apply ` 扫描项目并生成迁移提示 | +| `nutui-react-taro diff [Component]` | 对比两个版本快照的 Props 差异,包括新增、移除、类型和默认值变更 | | `nutui-react-taro mcp` | 启动本地 MCP 服务(stdio),供 Claude Code / Cursor / VS Code / Codex 等 IDE 集成 | 未命中组件名时,CLI 会给出「你是否想找」建议(如 `Buttn` → `Button`),据此纠正而非凭空猜测。 @@ -93,9 +97,28 @@ nutui-react-taro --nv 4.0.0-beta.7 doc Cell > 在项目里能自动推断版本时,优先不显式传 `--nutui-version`,让 CLI 自行检测更省心。`-v / --version` 语义保持不变,仍输出 CLI 自身版本。 +## v3 → v4 迁移 + +`migrate` 与 `diff` 都基于随 CLI 分发的离线数据,但用途不同: + +- `migrate` 读取官方迁移文档,说明为什么改、怎么改,并覆盖样式、CSS 类名和 Design Token 等 Props 表之外的变化。 +- `diff` 实时比较两个版本快照,精确列出 Props 的新增、移除、类型和默认值变化。 + +推荐先扫描项目,再逐组件核对: + +```bash +nutui-react-taro migrate 3 4 --apply ./src --format json +nutui-react-taro migrate 3 4 --component Empty --format json +nutui-react-taro diff 3 4 Empty --format json +``` + +`--apply` 只扫描源码并输出项目实际使用组件的迁移步骤与 Agent 提示,**不会自动修改文件**。输出中的 `matchedComponents` 是需要重点处理的组件,`componentsWithoutBreakingChanges` 是已使用但当前迁移文档未记录破坏性变更的组件。 + +完整升级流程可安装 [`nutui-react-taro-v3-to-v4` Skill](/#/zh-CN/ai/skill),由 Agent 按「升级依赖 → 扫描盘点 → 逐组件改写 → 多端构建与视觉验证」执行。 + ## 在 AI 工具中使用 -CLI 内置一份遵循 [Agent Skills](https://github.com/vercel-labs/skills) 规范的 Skill 文件,随 npm 包分发,指导 Agent 在正确的时机调用正确的命令——例如「写组件前先 `info` 查 Props、再 `demo` 拿示例」「定制样式用 `var(--nutui-*)` token 而非硬编码颜色」。 +CLI 随 npm 包分发遵循 [Agent Skills](https://github.com/vercel-labs/skills) 规范的 Skill,分别覆盖组件开发与 v3 → v4 升级流程,指导 Agent 在正确的时机调用正确的命令。 安装到当前项目(从 GitHub 仓库直接安装): @@ -109,6 +132,7 @@ npx skills add jdf2e/nutui-react --skill nutui-react-taro ## 了解更多 +- [Skill](/#/zh-CN/ai/skill) - [MCP Server](/#/zh-CN/ai/mcp) - [LLMs.txt](/#/zh-CN/ai/llms) - [For Agents](/#/zh-CN/ai/for-agents) diff --git a/src/sites/sites-react/doc/docs/ai-taro/mcp.en-US.md b/src/sites/sites-react/doc/docs/ai-taro/mcp.en-US.md index bde99593fa..603cc09257 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/mcp.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-taro/mcp.en-US.md @@ -10,7 +10,7 @@ The CLI is "the agent runs commands"; MCP registers the same capabilities as IDE ## Start the MCP server -`nutui-react-taro mcp` starts a local MCP server that communicates over stdio, exposing 5 read-only tools and 2 prompts. This command shouldn't be run directly in a terminal — configure it in your AI tool instead (see below). +`nutui-react-taro mcp` starts a local MCP server that communicates over stdio, exposing 7 read-only tools and 2 prompts. This command shouldn't be run directly in a terminal — configure it in your AI tool instead (see below). ### Tools @@ -21,10 +21,14 @@ The CLI is "the agent runs commands"; MCP registers the same capabilities as IDE | `nutui_doc` | Get a component's full docs (Chinese) | | `nutui_demo` | Get a component's Taro demo list / source | | `nutui_token` | Query Design Tokens (global / component-level) | +| `nutui_migrate` | Get a major-version migration guide, optionally filtered by component or project directory | +| `nutui_diff` | Compare prop differences between two version snapshots | All tools are read-only, side-effect-free, and do not access the external network. -Every tool accepts an optional `nutuiVersion` argument (e.g. `3.1.0`, `4.0.0-beta.7`) to target a NutUI major version; when omitted, the version your project uses is auto-detected, falling back to the default major. See the [CLI multi-version notes](/#/en-US/ai/cli). +The first five component-knowledge tools accept an optional `nutuiVersion` argument (e.g. `3.1.0`, `4.0.0-beta.7`) to target a NutUI major version; when omitted, the version your project uses is auto-detected, falling back to the default major. See the [CLI multi-version notes](/#/en-US/ai/cli). + +`nutui_migrate` accepts optional `from`, `to`, `component`, and `applyDir` arguments. `applyDir` only scans the directory and returns migration steps; it does not modify files. `nutui_diff` requires `v1` and `v2`, with an optional `component` filter. They return the same structured data as the CLI's `migrate` and `diff` commands for agent-driven v3 → v4 upgrades. ### Prompts diff --git a/src/sites/sites-react/doc/docs/ai-taro/mcp.md b/src/sites/sites-react/doc/docs/ai-taro/mcp.md index 2ab7a61dd7..033e54532c 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/mcp.md +++ b/src/sites/sites-react/doc/docs/ai-taro/mcp.md @@ -10,7 +10,7 @@ CLI 是「Agent 主动敲命令」,MCP 则把同一份能力注册成 IDE 原 ## 启动 MCP 服务 -`nutui-react-taro mcp` 启动一个通过 stdio 通信的本地 MCP 服务,暴露 5 个只读工具与 2 个提示词。该命令不应在终端直接裸跑,而应在 AI 工具中配置(见下方)。 +`nutui-react-taro mcp` 启动一个通过 stdio 通信的本地 MCP 服务,暴露 7 个只读工具与 2 个提示词。该命令不应在终端直接裸跑,而应在 AI 工具中配置(见下方)。 ### 工具 @@ -21,10 +21,15 @@ CLI 是「Agent 主动敲命令」,MCP 则把同一份能力注册成 IDE 原 | `nutui_doc` | 获取组件完整文档(中文) | | `nutui_demo` | 获取组件 Taro 示例列表 / 源码 | | `nutui_token` | 查询 Design Token(全局 / 组件级) | +| `nutui_migrate` | 获取大版本迁移指南;可按组件筛选或扫描项目目录 | +| `nutui_diff` | 对比两个版本快照的 Props 差异 | 所有工具均为只读、无副作用、不访问外部网络。 -每个工具都接受可选入参 `nutuiVersion`(如 `3.1.0`、`4.0.0-beta.7`),用于指定目标 NutUI 大版本;省略时自动检测项目所用版本,检测不到则回退默认大版本。详见 [CLI 的「多版本」说明](/#/zh-CN/ai/cli)。 +前 5 个组件知识工具都接受可选入参 `nutuiVersion`(如 `3.1.0`、`4.0.0-beta.7`),用于指定目标 NutUI 大版本;省略时自动检测项目所用版本,检测不到则回退默认大版本。详见 [CLI 的「多版本」说明](/#/zh-CN/ai/cli)。 + +- `nutui_migrate` 接受可选的 `from`、`to`、`component` 和 `applyDir` 参数; +- `applyDir` 只扫描目录并返回迁移步骤,不修改文件。`nutui_diff` 要求传入 `v1`、`v2`,也可用 `component` 限定单个组件。两者与 CLI 的 `migrate`、`diff` 命令返回同类结构化数据,可由 Agent 直接用于 v3 → v4 升级。 ### 提示词 diff --git a/src/sites/sites-react/doc/docs/ai-taro/skill.en-US.md b/src/sites/sites-react/doc/docs/ai-taro/skill.en-US.md new file mode 100644 index 0000000000..2da456a318 --- /dev/null +++ b/src/sites/sites-react/doc/docs/ai-taro/skill.en-US.md @@ -0,0 +1,63 @@ +# Skill + +This page introduces the two NutUI-React Taro Agent Skills, the problem each one solves, and how to install them. + +## What is a Skill? + +A [Skill](https://github.com/vercel-labs/skills) is an instruction file following the Agent Skills spec. The CLI and MCP provide query, migration, and diff capabilities, while a Skill defines when and in what order the agent should use them. + +Two Skills are available: + +| Skill | Purpose | +| --- | --- | +| `nutui-react-taro` | Look up the API before writing NutUI-React Taro code, eliminating API hallucination | +| `nutui-react-taro-v3-to-v4` | Systematically upgrade `@nutui/nutui-react-taro` from v3 to v4 | + +## `nutui-react-taro` — look up before writing + +Guides the agent to query real APIs and Taro demos through the CLI or MCP before writing NutUI-React Taro code, rather than reusing H5 APIs or guessing from memory. + +**Behavior it enforces:** + +- Run `nutui-react-taro info ` for props and `demo` for a Taro example before writing component code. +- Use `doc` for complete documentation and `token` for `var(--nutui-*)` Design Tokens. +- Confirm uncertain component names with `list`, and prefer structured `--format json` output. + +**Install:** + +```bash +npx skills add jdf2e/nutui-react --skill nutui-react-taro +``` + +## `nutui-react-taro-v3-to-v4` — major-version upgrade + +Guides the agent through upgrading `@nutui/nutui-react-taro` from v3 to v4 with the new `migrate` and `diff` capabilities. It focuses on style, CSS class, Design Token, enum, and default-value changes that may not produce compile errors. + +**Workflow:** + +- Ask for confirmation before upgrading dependencies, then verify the lockfile and installation result. +- Run `nutui-react-taro migrate 3 4 --apply ./src --format json` to inventory the components actually used by the project. +- For every matched component, combine `migrate --component` with `diff 3 4` to check both the official migration guidance and exact prop changes. +- Inspect custom styles targeting `.nut-*` classes and `--nutui-*` variables. +- Validate builds, rendering, and interactions on the target mini-program, H5, or other Taro platforms; successful compilation alone does not complete the migration. + +**Install:** + +```bash +npx skills add jdf2e/nutui-react --skill nutui-react-taro-v3-to-v4 +``` + +## How Skill, CLI, and MCP relate + +- **CLI** — The agent runs commands to query knowledge, scan a project, or compare versions. +- **MCP** — Registers the same query, migration, and diff capabilities as IDE-native tools for automatic, on-demand calls in conversation. +- **Skill** — Defines task triggers, execution order, change boundaries, and verification requirements. + +If your IDE supports MCP, enable the MCP server as well so the Skill's query and migration steps can call IDE-native tools directly. + +## Learn more + +- [CLI](/#/en-US/ai/cli) +- [MCP Server](/#/en-US/ai/mcp) +- [For Agents](/#/en-US/ai/for-agents) +- [LLMs.txt](/#/en-US/ai/llms) diff --git a/src/sites/sites-react/doc/docs/ai-taro/skill.md b/src/sites/sites-react/doc/docs/ai-taro/skill.md new file mode 100644 index 0000000000..aff5254145 --- /dev/null +++ b/src/sites/sites-react/doc/docs/ai-taro/skill.md @@ -0,0 +1,63 @@ +# Skill + +本篇介绍 NutUI-React Taro 的两个 Agent Skill,以及它们各自解决的问题与安装方式。 + +## 什么是 Skill? + +[Skill](https://github.com/vercel-labs/skills) 是一份遵循 Agent Skills 规范的说明文件。CLI 与 MCP 提供查询、迁移和差异对比能力,Skill 则约束 Agent 在什么时机、按什么顺序使用这些能力。 + +目前提供两个 Skill: + +| Skill | 用途 | +| --- | --- | +| `nutui-react-taro` | 写 NutUI-React Taro 代码时「先查后写」,消除 API 幻觉 | +| `nutui-react-taro-v3-to-v4` | 将 `@nutui/nutui-react-taro` 从 v3 系统升级到 v4 | + +## `nutui-react-taro` — 先查后写 + +指导 Agent 在编写 NutUI-React Taro 组件代码前,先通过 CLI 或 MCP 查询真实 API 与 Taro 示例,而不是沿用 H5 API 或凭记忆猜测。 + +**它约束 Agent 的行为:** + +- 写组件前先用 `nutui-react-taro info ` 查询 Props,再用 `demo` 获取 Taro 示例。 +- 用 `doc` 核对完整文档,用 `token` 获取 `var(--nutui-*)` Design Token。 +- 不确定组件名时先用 `list` 确认,并优先使用 `--format json` 结构化输出。 + +**安装:** + +```bash +npx skills add jdf2e/nutui-react --skill nutui-react-taro +``` + +## `nutui-react-taro-v3-to-v4` — 大版本升级 + +指导 Agent 使用新增的 `migrate` 与 `diff` 能力,把 `@nutui/nutui-react-taro` 从 v3 升级到 v4。该 Skill 特别关注不会触发编译错误的样式、CSS 类名、Design Token、枚举值和默认值变化。 + +**它编排的迁移流程:** + +- 升级依赖前先征求用户确认,并核对锁文件与安装结果。 +- 用 `nutui-react-taro migrate 3 4 --apply ./src --format json` 扫描项目,建立实际使用组件的迁移清单。 +- 对每个命中的组件结合 `migrate --component` 与 `diff 3 4`,同时核对官方迁移说明和 Props 精确差异。 +- 检查项目中针对 `.nut-*` 类名与 `--nutui-*` 变量的自定义样式覆盖。 +- 在目标小程序、H5 或其他 Taro 端完成构建与视觉、交互验证;编译通过不等于迁移完成。 + +**安装:** + +```bash +npx skills add jdf2e/nutui-react --skill nutui-react-taro-v3-to-v4 +``` + +## Skill 与 CLI / MCP 的关系 + +- **CLI** — Agent 主动运行命令查询知识、扫描项目或比较版本。 +- **MCP** — 把同一份查询、迁移和差异对比能力注册成 IDE 原生工具,在对话中按需自动调用。 +- **Skill** — 定义任务触发条件、执行顺序、修改边界和验证要求。 + +如果你的 IDE 支持 MCP,推荐同时启用 MCP 服务,让 Skill 中的查询和迁移步骤直接调用 IDE 原生工具。 + +## 了解更多 + +- [CLI](/#/zh-CN/ai/cli) +- [MCP Server](/#/zh-CN/ai/mcp) +- [For Agents](/#/zh-CN/ai/for-agents) +- [LLMs.txt](/#/zh-CN/ai/llms) From a3511f9d0315ecfadaddf0d89bb5401c230fac42 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Wed, 9 Sep 2026 14:31:27 +0800 Subject: [PATCH 24/25] fix: correct formatting in documentation for NutUI React and Taro Skills --- src/sites/sites-react/doc/docs/ai-react/cli.en-US.md | 2 +- src/sites/sites-react/doc/docs/ai-react/cli.md | 2 +- src/sites/sites-react/doc/docs/ai-react/skill.en-US.md | 6 +++--- src/sites/sites-react/doc/docs/ai-react/skill.md | 6 +++--- src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md | 2 +- src/sites/sites-react/doc/docs/ai-taro/cli.md | 2 +- src/sites/sites-react/doc/docs/ai-taro/skill.en-US.md | 4 ++-- src/sites/sites-react/doc/docs/ai-taro/skill.md | 4 ++-- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md b/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md index 3a3dec7818..2e3596e64c 100644 --- a/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md @@ -114,7 +114,7 @@ nutui-react diff 3 4 Empty --format json `--apply` only scans source files and outputs migration steps plus an agent prompt for the components actually used; it **does not modify files**. `matchedComponents` identifies components to update, while `componentsWithoutBreakingChanges` lists used components with no breaking change recorded in the current migration guide. -Install the [`nutui-react-v3-to-v4` Skill](/#/en-US/ai/skill) for an agent-guided workflow covering dependency upgrades, inventory, component-by-component edits, build checks, and visual verification. +Install the [nutui-react-v3-to-v4 Skill](/#/en-US/ai/skill) for an agent-guided workflow covering dependency upgrades, inventory, component-by-component edits, build checks, and visual verification. ## Usage with AI tools diff --git a/src/sites/sites-react/doc/docs/ai-react/cli.md b/src/sites/sites-react/doc/docs/ai-react/cli.md index ca60754b4c..392f58f762 100644 --- a/src/sites/sites-react/doc/docs/ai-react/cli.md +++ b/src/sites/sites-react/doc/docs/ai-react/cli.md @@ -114,7 +114,7 @@ nutui-react diff 3 4 Empty --format json `--apply` 只扫描源码并输出项目实际使用组件的迁移步骤与 Agent 提示,**不会自动修改文件**。输出中的 `matchedComponents` 是需要重点处理的组件,`componentsWithoutBreakingChanges` 是已使用但当前迁移文档未记录破坏性变更的组件。 -完整升级流程可安装 [`nutui-react-v3-to-v4` Skill](/#/zh-CN/ai/skill),由 Agent 按「升级依赖 → 扫描盘点 → 逐组件改写 → 构建与视觉验证」执行。 +完整升级流程可安装 [nutui-react-v3-to-v4 Skill](/#/zh-CN/ai/skill),由 Agent 按「升级依赖 → 扫描盘点 → 逐组件改写 → 构建与视觉验证」执行。 ## 在 AI 工具中使用 diff --git a/src/sites/sites-react/doc/docs/ai-react/skill.en-US.md b/src/sites/sites-react/doc/docs/ai-react/skill.en-US.md index cde545f032..4a974b706b 100644 --- a/src/sites/sites-react/doc/docs/ai-react/skill.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-react/skill.en-US.md @@ -16,7 +16,7 @@ Three Skills are available: | `nutui-react-v3-to-v4` | Systematically upgrade `@nutui/nutui-react` from v3 to v4 | | `nutui-react-to-taro` | Migrate an H5 project from `@nutui/nutui-react` to `@nutui/nutui-react-taro` (Taro / mini-program) | -## `nutui-react` — look up before writing +## nutui-react — look up before writing Guides the agent to query the real API with the CLI before writing any NutUI-React component code, instead of guessing props or enum values from memory. @@ -33,7 +33,7 @@ Guides the agent to query the real API with the CLI before writing any NutUI-Rea npx skills add jdf2e/nutui-react --skill nutui-react ``` -## `nutui-react-v3-to-v4` — major-version upgrade +## nutui-react-v3-to-v4 — major-version upgrade Guides the agent through upgrading `@nutui/nutui-react` from v3 to v4 with the new `migrate` and `diff` capabilities. It focuses on style, CSS class, Design Token, enum, and default-value changes that may not produce compile errors. @@ -51,7 +51,7 @@ Guides the agent through upgrading `@nutui/nutui-react` from v3 to v4 with the n npx skills add jdf2e/nutui-react --skill nutui-react-v3-to-v4 ``` -## `nutui-react-to-taro` — migrate H5 to Taro +## nutui-react-to-taro — migrate H5 to Taro Guides the agent to migrate a project using `@nutui/nutui-react` (H5) to `@nutui/nutui-react-taro` (Taro cross-platform / mini-program). The two packages share one component set and almost every component maps 1:1, so migration is highly regular — the Skill orchestrates the mechanical rewrites and the judgment-heavy semantic rewrites into a clear workflow. diff --git a/src/sites/sites-react/doc/docs/ai-react/skill.md b/src/sites/sites-react/doc/docs/ai-react/skill.md index a7b67de4b8..ecec019f6e 100644 --- a/src/sites/sites-react/doc/docs/ai-react/skill.md +++ b/src/sites/sites-react/doc/docs/ai-react/skill.md @@ -16,7 +16,7 @@ | `nutui-react-v3-to-v4` | 将 `@nutui/nutui-react` 从 v3 系统升级到 v4 | | `nutui-react-to-taro` | 把 H5 项目从 `@nutui/nutui-react` 迁移到 `@nutui/nutui-react-taro`(Taro / 小程序) | -## `nutui-react` — 先查后写 +## nutui-react — 先查后写 指导 Agent 在写任何 NutUI-React 组件代码前,先用 CLI 查询真实 API,而非凭记忆猜测 Prop 或枚举值。 @@ -33,7 +33,7 @@ npx skills add jdf2e/nutui-react --skill nutui-react ``` -## `nutui-react-v3-to-v4` — 大版本升级 +## nutui-react-v3-to-v4 — 大版本升级 指导 Agent 使用 `migrate` 与 `diff` 能力,把 `@nutui/nutui-react` 从 v3 升级到 v4。 @@ -51,7 +51,7 @@ npx skills add jdf2e/nutui-react --skill nutui-react npx skills add jdf2e/nutui-react --skill nutui-react-v3-to-v4 ``` -## `nutui-react-to-taro` — H5 迁移到 Taro +## nutui-react-to-taro — H5 迁移到 Taro 指导 Agent 把使用 `@nutui/nutui-react`(H5)的项目,迁移到 `@nutui/nutui-react-taro`(Taro 跨端 / 小程序)。两个包共用同一套组件,绝大多数组件一一对应,因此迁移高度规则化——Skill 负责把规则化改写与需要判断的语义改写编排成清晰流程。 diff --git a/src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md b/src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md index 34c80111e9..0fe6468486 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-taro/cli.en-US.md @@ -114,7 +114,7 @@ nutui-react-taro diff 3 4 Empty --format json `--apply` only scans source files and outputs migration steps plus an agent prompt for the components actually used; it **does not modify files**. `matchedComponents` identifies components to update, while `componentsWithoutBreakingChanges` lists used components with no breaking change recorded in the current migration guide. -Install the [`nutui-react-taro-v3-to-v4` Skill](/#/en-US/ai/skill) for an agent-guided workflow covering dependency upgrades, inventory, component-by-component edits, multi-platform builds, and visual verification. +Install the [nutui-react-taro-v3-to-v4 Skill](/#/en-US/ai/skill) for an agent-guided workflow covering dependency upgrades, inventory, component-by-component edits, multi-platform builds, and visual verification. ## Usage with AI tools diff --git a/src/sites/sites-react/doc/docs/ai-taro/cli.md b/src/sites/sites-react/doc/docs/ai-taro/cli.md index 66b8c540a5..efb850ddb4 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/cli.md +++ b/src/sites/sites-react/doc/docs/ai-taro/cli.md @@ -114,7 +114,7 @@ nutui-react-taro diff 3 4 Empty --format json `--apply` 只扫描源码并输出项目实际使用组件的迁移步骤与 Agent 提示,**不会自动修改文件**。输出中的 `matchedComponents` 是需要重点处理的组件,`componentsWithoutBreakingChanges` 是已使用但当前迁移文档未记录破坏性变更的组件。 -完整升级流程可安装 [`nutui-react-taro-v3-to-v4` Skill](/#/zh-CN/ai/skill),由 Agent 按「升级依赖 → 扫描盘点 → 逐组件改写 → 多端构建与视觉验证」执行。 +完整升级流程可安装 [nutui-react-taro-v3-to-v4 Skill](/#/zh-CN/ai/skill),由 Agent 按「升级依赖 → 扫描盘点 → 逐组件改写 → 多端构建与视觉验证」执行。 ## 在 AI 工具中使用 diff --git a/src/sites/sites-react/doc/docs/ai-taro/skill.en-US.md b/src/sites/sites-react/doc/docs/ai-taro/skill.en-US.md index 2da456a318..56a94cd916 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/skill.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-taro/skill.en-US.md @@ -13,7 +13,7 @@ Two Skills are available: | `nutui-react-taro` | Look up the API before writing NutUI-React Taro code, eliminating API hallucination | | `nutui-react-taro-v3-to-v4` | Systematically upgrade `@nutui/nutui-react-taro` from v3 to v4 | -## `nutui-react-taro` — look up before writing +## nutui-react-taro — look up before writing Guides the agent to query real APIs and Taro demos through the CLI or MCP before writing NutUI-React Taro code, rather than reusing H5 APIs or guessing from memory. @@ -29,7 +29,7 @@ Guides the agent to query real APIs and Taro demos through the CLI or MCP before npx skills add jdf2e/nutui-react --skill nutui-react-taro ``` -## `nutui-react-taro-v3-to-v4` — major-version upgrade +## nutui-react-taro-v3-to-v4 — major-version upgrade Guides the agent through upgrading `@nutui/nutui-react-taro` from v3 to v4 with the new `migrate` and `diff` capabilities. It focuses on style, CSS class, Design Token, enum, and default-value changes that may not produce compile errors. diff --git a/src/sites/sites-react/doc/docs/ai-taro/skill.md b/src/sites/sites-react/doc/docs/ai-taro/skill.md index aff5254145..614e263c8f 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/skill.md +++ b/src/sites/sites-react/doc/docs/ai-taro/skill.md @@ -13,7 +13,7 @@ | `nutui-react-taro` | 写 NutUI-React Taro 代码时「先查后写」,消除 API 幻觉 | | `nutui-react-taro-v3-to-v4` | 将 `@nutui/nutui-react-taro` 从 v3 系统升级到 v4 | -## `nutui-react-taro` — 先查后写 +## nutui-react-taro — 先查后写 指导 Agent 在编写 NutUI-React Taro 组件代码前,先通过 CLI 或 MCP 查询真实 API 与 Taro 示例,而不是沿用 H5 API 或凭记忆猜测。 @@ -29,7 +29,7 @@ npx skills add jdf2e/nutui-react --skill nutui-react-taro ``` -## `nutui-react-taro-v3-to-v4` — 大版本升级 +## nutui-react-taro-v3-to-v4 — 大版本升级 指导 Agent 使用新增的 `migrate` 与 `diff` 能力,把 `@nutui/nutui-react-taro` 从 v3 升级到 v4。该 Skill 特别关注不会触发编译错误的样式、CSS 类名、Design Token、枚举值和默认值变化。 From e1bb49b97fc24a16a1936a3802d191ecdef49815 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Wed, 9 Sep 2026 14:43:56 +0800 Subject: [PATCH 25/25] docs: update MCP documentation for NutUI React and Taro, enhancing tool descriptions and adding new parameters for migration and diff capabilities --- packages/nutui-react-cli/docs/mcp.md | 13 +++++++++---- packages/nutui-react-taro-cli/docs/mcp.md | 17 ++++++++++++----- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/packages/nutui-react-cli/docs/mcp.md b/packages/nutui-react-cli/docs/mcp.md index 5cf22f76d9..d1abf3aa6d 100644 --- a/packages/nutui-react-cli/docs/mcp.md +++ b/packages/nutui-react-cli/docs/mcp.md @@ -1,12 +1,10 @@ # NutUI Knowledge -通过 Model Context Protocol (MCP) 教 AI 工具中使用 NutUI-React。 +通过 Model Context Protocol (MCP) 教 AI 工具使用 NutUI-React。 ## 启动 MCP 服务 -`nutui-react mcp` 启动一个通过 stdio 通信的本地 MCP 服务,暴露 5 个只读工具与 2 个提示词。该命令不应在终端直接裸跑,而应在 AI 工具中配置(见下方)。 - -### 工具 +`nutui-react mcp` 启动一个通过 stdio 通信的本地 MCP 服务,暴露 7 个只读工具与 2 个提示词。该命令不应在终端直接裸跑,而应在 AI 工具中配置(见下方)。 | 工具 | 说明 | | --- | --- | @@ -15,9 +13,16 @@ | `nutui_doc` | 获取组件完整文档(`lang: zh\|en`) | | `nutui_demo` | 获取组件 H5 示例列表 / 源码 | | `nutui_token` | 查询 Design Token(全局 / 组件级) | +| `nutui_migrate` | 获取大版本迁移指南;可按组件筛选或扫描项目目录 | +| `nutui_diff` | 对比两个版本快照的 Props 差异 | 所有工具均为只读、无副作用、不访问外部网络。 +前 5 个组件知识工具都接受可选入参 `nutuiVersion`(如 `3.1.0`、`4.0.0-beta.7`),用于指定目标 NutUI 大版本;省略时自动检测项目所用版本,检测不到则回退默认大版本。 + +- `nutui_migrate` 接受可选的 `from`、`to`、`component` 和 `applyDir` 参数; +- `applyDir` 只扫描目录并返回迁移步骤,不修改文件。`nutui_diff` 要求传入 `v1`、`v2`,也可用 `component` 限定单个组件。两者与 CLI 的 `migrate`、`diff` 命令返回同类结构化数据,可由 Agent 直接用于 v3 → v4 升级。 + ### 提示词 | 提示词 | 说明 | diff --git a/packages/nutui-react-taro-cli/docs/mcp.md b/packages/nutui-react-taro-cli/docs/mcp.md index e5a8dba56a..649c06079a 100644 --- a/packages/nutui-react-taro-cli/docs/mcp.md +++ b/packages/nutui-react-taro-cli/docs/mcp.md @@ -1,10 +1,10 @@ # NutUI Taro Knowledge -通过 Model Context Protocol (MCP) 教 AI 工具中使用 NutUI-React(Taro 多端)。 +通过 Model Context Protocol (MCP) 教 AI 工具使用 NutUI-React(Taro 多端)。 ## 启动 MCP 服务 -`nutui-react-taro mcp` 启动一个通过 stdio 通信的本地 MCP 服务,暴露 5 个只读工具与 2 个提示词。该命令不应在终端直接裸跑,而应在 AI 工具中配置(见下方)。 +`nutui-react-taro mcp` 启动一个通过 stdio 通信的本地 MCP 服务,暴露 7 个只读工具与 2 个提示词。该命令不应在终端直接裸跑,而应在 AI 工具中配置(见下方)。 ### 工具 @@ -12,18 +12,25 @@ | --- | --- | | `nutui_list` | 列出全部组件(可按分类筛选) | | `nutui_info` | 获取组件的 Props 规格 | -| `nutui_doc` | 获取组件完整文档(仅 `zh`,Taro 端暂无英文文档) | +| `nutui_doc` | 获取组件完整文档(中文) | | `nutui_demo` | 获取组件 Taro 示例列表 / 源码 | | `nutui_token` | 查询 Design Token(全局 / 组件级) | +| `nutui_migrate` | 获取大版本迁移指南;可按组件筛选或扫描项目目录 | +| `nutui_diff` | 对比两个版本快照的 Props 差异 | 所有工具均为只读、无副作用、不访问外部网络。 +前 5 个组件知识工具都接受可选入参 `nutuiVersion`(如 `3.1.0`、`4.0.0-beta.7`),用于指定目标 NutUI 大版本;省略时自动检测项目所用版本,检测不到则回退默认大版本。 + +- `nutui_migrate` 接受可选的 `from`、`to`、`component` 和 `applyDir` 参数; +- `applyDir` 只扫描目录并返回迁移步骤,不修改文件。`nutui_diff` 要求传入 `v1`、`v2`,也可用 `component` 限定单个组件。两者与 CLI 的 `migrate`、`diff` 命令返回同类结构化数据,可由 Agent 直接用于 v3 → v4 升级。 + ### 提示词 | 提示词 | 说明 | | --- | --- | -| `nutui-expert` | 把 Agent 定位为 NutUI-React(Taro 多端)专家(先查后写) | -| `nutui-page-generator` | 基于 NutUI-React(Taro 多端)组件生成完整可运行页面 | +| `nutui-expert` | 把 Agent 定位为 NutUI-React Taro 专家(先查后写) | +| `nutui-page-generator` | 基于 NutUI-React Taro 组件生成完整可运行页面 | ## 配置