chore(project): 添加文档系统和开发工具配置
- 创建完整的文档体系(8 个核心文档) - CHANGELOG.md - 项目变更日志 - PROJECT-STATUS.md - 项目状态报告 - DEVELOPMENT-GUIDE.md - 开发指南 - CODING-STANDARDS.md - 代码规范 - GIT-WORKFLOW.md - Git 工作流规范 - api-integration-log.md - API 集成日志 - lessons-learned.md - 经验教训总结 - INITIALIZATION-SUMMARY.md - 初始化总结 - 配置测试框架 - Vitest + @vue/test-utils + jsdom - 测试环境设置(Mock Taro API、wx API) - 添加测试示例文件 - 配置代码质量工具 - ESLint 完善配置 - Prettier 格式化配置 - Husky Git Hooks - lint-staged 暂存文件检查 - 优化项目配置 - 更新 package.json(测试脚本、lint-staged) - 优化 .gitignore - 创建主文档 CLAUDE.md 详细信息和后续步骤请查看 docs/INITIALIZATION-SUMMARY.md
Showing
23 changed files
with
4478 additions
and
14 deletions
.eslintrc.js
0 → 100644
| 1 | +// ESLint 配置 | ||
| 2 | +// https://eslint.vuejs.org/user-guide/#editor-integrations | ||
| 3 | +module.exports = { | ||
| 4 | + extends: ['taro/vue3'], | ||
| 5 | + rules: { | ||
| 6 | + // 自定义规则 | ||
| 7 | + 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', | ||
| 8 | + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', | ||
| 9 | + 'vue/multi-word-component-names': 'off', // 允许单词组件名 | ||
| 10 | + 'prefer-const': 'warn', // 建议使用 const | ||
| 11 | + 'no-var': 'error', // 禁止使用 var | ||
| 12 | + eqeqeq: ['error', 'always'], // 必须使用 === | ||
| 13 | + curly: ['error', 'all'], // 必须使用大括号 | ||
| 14 | + 'brace-style': ['error', '1tbs'], // 大括号风格 | ||
| 15 | + indent: ['error', 2, { SwitchCase: 1 }], // 缩进 | ||
| 16 | + quotes: ['error', 'single', { avoidEscape: true }], // 单引号 | ||
| 17 | + semi: ['error', 'never'], // 不使用分号 | ||
| 18 | + 'comma-dangle': ['error', 'never'], // 不使用尾随逗号 | ||
| 19 | + 'space-before-function-paren': [ | ||
| 20 | + 'error', | ||
| 21 | + { | ||
| 22 | + anonymous: 'always', | ||
| 23 | + named: 'never', | ||
| 24 | + asyncArrow: 'always', | ||
| 25 | + }, | ||
| 26 | + ], | ||
| 27 | + }, | ||
| 28 | + globals: { | ||
| 29 | + // Taro 全局变量 | ||
| 30 | + wx: 'readonly', | ||
| 31 | + Taro: 'readonly', | ||
| 32 | + }, | ||
| 33 | +} |
| 1 | +# 构建输出 | ||
| 1 | dist/ | 2 | dist/ |
| 2 | deploy_versions/ | 3 | deploy_versions/ |
| 3 | .temp/ | 4 | .temp/ |
| 4 | .rn_temp/ | 5 | .rn_temp/ |
| 6 | + | ||
| 7 | +# 依赖 | ||
| 5 | node_modules/ | 8 | node_modules/ |
| 6 | -.DS_Store | 9 | +package-lock.json |
| 10 | +yarn.lock | ||
| 11 | + | ||
| 12 | +# 缓存 | ||
| 7 | .swc | 13 | .swc |
| 8 | .history | 14 | .history |
| 15 | +.cache | ||
| 16 | +.tsbuildinfo | ||
| 17 | + | ||
| 18 | +# 日志 | ||
| 19 | +*.log | ||
| 20 | +logs/ | ||
| 21 | + | ||
| 22 | +# 编辑器 | ||
| 23 | +.DS_Store | ||
| 24 | +.idea/ | ||
| 25 | +.vscode/ | ||
| 26 | +*.swp | ||
| 27 | +*.swo | ||
| 28 | + | ||
| 29 | +# 资源目录(如果有本地开发资源) | ||
| 9 | resource | 30 | resource |
| 10 | -CLAUDE.md | 31 | + |
| 32 | +# 测试覆盖率 | ||
| 33 | +coverage/ | ||
| 34 | + | ||
| 35 | +# 环境变量 | ||
| 36 | +.env.local | ||
| 37 | +.env.*.local | ||
| 38 | + | ||
| 39 | +# 其他 | ||
| 11 | .claude/ | 40 | .claude/ | ... | ... |
.husky/pre-commit
0 → 100755
.prettierignore
0 → 100644
.prettierrc
0 → 100644
| 1 | +{ | ||
| 2 | + "semi": false, | ||
| 3 | + "singleQuote": true, | ||
| 4 | + "printWidth": 100, | ||
| 5 | + "tabWidth": 2, | ||
| 6 | + "useTabs": false, | ||
| 7 | + "trailingComma": "es5", | ||
| 8 | + "bracketSpacing": true, | ||
| 9 | + "arrowParens": "avoid", | ||
| 10 | + "endOfLine": "lf", | ||
| 11 | + "vueIndentScriptAndStyle": false, | ||
| 12 | + "overrides": [ | ||
| 13 | + { | ||
| 14 | + "files": "*.vue", | ||
| 15 | + "options": { | ||
| 16 | + "parser": "vue" | ||
| 17 | + } | ||
| 18 | + }, | ||
| 19 | + { | ||
| 20 | + "files": "*.js", | ||
| 21 | + "options": { | ||
| 22 | + "parser": "babel" | ||
| 23 | + } | ||
| 24 | + }, | ||
| 25 | + { | ||
| 26 | + "files": "*.less", | ||
| 27 | + "options": { | ||
| 28 | + "parser": "less" | ||
| 29 | + } | ||
| 30 | + } | ||
| 31 | + ] | ||
| 32 | +} |
CLAUDE.md
0 → 100644
| 1 | +# CLAUDE.md | ||
| 2 | + | ||
| 3 | +本文件为 Claude Code (claude.ai/code) 在此代码库中工作时提供指导。 | ||
| 4 | + | ||
| 5 | +## 项目概述 | ||
| 6 | + | ||
| 7 | +**lls_program** 是一个基于 Taro 4 + Vue 3 + NutUI 的微信小程序,名为"老来赛"。这是一个家庭活动和积分奖励管理系统。 | ||
| 8 | + | ||
| 9 | +## 技术栈 | ||
| 10 | + | ||
| 11 | +- **框架**: Taro 4.1.7 - 跨平台小程序框架 | ||
| 12 | +- **UI**: Vue 3.3 + Composition API (`<script setup>`) | ||
| 13 | +- **UI 组件库**: NutUI Taro 4.3.13 (自动导入,无需手动引入) | ||
| 14 | +- **样式**: TailwindCSS 3.4 + Less (组件特定样式) | ||
| 15 | +- **状态管理**: Pinia 3.0 + taro-plugin-pinia | ||
| 16 | +- **HTTP 请求**: axios-miniprogram 2.7.2 | ||
| 17 | +- **构建工具**: Webpack 5 | ||
| 18 | + | ||
| 19 | +## 开发命令 | ||
| 20 | + | ||
| 21 | +```bash | ||
| 22 | +# 安装依赖 | ||
| 23 | +pnpm install | ||
| 24 | + | ||
| 25 | +# 开发(微信小程序) | ||
| 26 | +pnpm run dev:weapp | ||
| 27 | + | ||
| 28 | +# 生产构建 | ||
| 29 | +pnpm run build:weapp | ||
| 30 | + | ||
| 31 | +# 其他平台 | ||
| 32 | +pnpm run dev:h5 # H5 开发 | ||
| 33 | +pnpm run dev:alipay # 支付宝小程序 | ||
| 34 | +pnpm run dev:tt # 抖音小程序 | ||
| 35 | +``` | ||
| 36 | + | ||
| 37 | +## 架构设计 | ||
| 38 | + | ||
| 39 | +### 核心目录结构 | ||
| 40 | + | ||
| 41 | +``` | ||
| 42 | +src/ | ||
| 43 | +├── api/ # 按业务领域组织的 API 接口 | ||
| 44 | +├── assets/ # 静态资源(图片、样式) | ||
| 45 | +├── components/ # 可复用的 Vue 组件 | ||
| 46 | +├── composables/ # Vue 3 组合式函数 (useXxx) | ||
| 47 | +├── pages/ # Taro 页面(每个页面包含 index.vue + index.config.js) | ||
| 48 | +├── stores/ # Pinia 状态管理 | ||
| 49 | +├── utils/ # 工具函数 | ||
| 50 | +├── app.config.js # Taro 应用配置(页面列表、窗口、权限) | ||
| 51 | +└── app.less # 全局样式 | ||
| 52 | +``` | ||
| 53 | + | ||
| 54 | +### 路径别名 (config/index.js:30-38) | ||
| 55 | + | ||
| 56 | +```javascript | ||
| 57 | +@/utils → src/utils | ||
| 58 | +@/components → src/components | ||
| 59 | +@/images → src/assets/images | ||
| 60 | +@/assets → src/assets | ||
| 61 | +@/composables → src/composables | ||
| 62 | +@/api → src/api | ||
| 63 | +@/stores → src/stores | ||
| 64 | +@/hooks → src/hooks | ||
| 65 | +``` | ||
| 66 | + | ||
| 67 | +### 设计宽度配置 | ||
| 68 | + | ||
| 69 | +- **NutUI 组件**: 375px (自动处理) | ||
| 70 | +- **其他所有内容**: 750px (Taro 标准) | ||
| 71 | +- `config/index.js` 中的 `designWidth` 函数根据文件路径自动切换 | ||
| 72 | + | ||
| 73 | +## 核心 API 模式 | ||
| 74 | + | ||
| 75 | +### API 响应格式 | ||
| 76 | + | ||
| 77 | +所有 API 响应遵循以下结构: | ||
| 78 | +```javascript | ||
| 79 | +{ | ||
| 80 | + code: 1, // 1 = 成功,其他值 = 失败 | ||
| 81 | + data: {...}, // 响应数据 | ||
| 82 | + msg: "message" // 错误/成功消息 | ||
| 83 | +} | ||
| 84 | +``` | ||
| 85 | + | ||
| 86 | +**始终检查** `res.code === 1`(而不是 `res.code`)来判断成功。 | ||
| 87 | + | ||
| 88 | +### 认证机制 (sessionid) | ||
| 89 | + | ||
| 90 | +**关键**: 项目使用 `sessionid` 进行认证(存储在 `wx.storage` 中): | ||
| 91 | + | ||
| 92 | +1. **获取**: `src/utils/request.js:23-30` - `getSessionId()` 从 `wx.getStorageSync("sessionid")` 读取 | ||
| 93 | +2. **设置**: 在 `miniProgramAuthAPI` 或 `loginAPI` 成功后设置 | ||
| 94 | +3. **使用**: 请求拦截器 (`request.js:75-78`) 设置 `config.headers.cookie = sessionid` | ||
| 95 | +4. **清除**: 收到 401 响应或用户登出时 | ||
| 96 | + | ||
| 97 | +⚠️ **重要**: sessionid **不**由前端用于判断登录状态(后端通过 401 响应来判断)。它只是传递给服务器的凭证。 | ||
| 98 | + | ||
| 99 | +### 请求拦截器 (src/utils/request.js:66-80) | ||
| 100 | + | ||
| 101 | +```javascript | ||
| 102 | +service.interceptors.request.use(config => { | ||
| 103 | + // 动态获取 sessionid 并设置到请求头 | ||
| 104 | + const sessionid = getSessionId(); | ||
| 105 | + if (sessionid) { | ||
| 106 | + config.headers.cookie = sessionid; | ||
| 107 | + } | ||
| 108 | + return config; | ||
| 109 | +}) | ||
| 110 | +``` | ||
| 111 | + | ||
| 112 | +### API 模块模式 (src/api/) | ||
| 113 | + | ||
| 114 | +每个 API 文件导出调用中央 `fn()` 辅助函数的函数: | ||
| 115 | + | ||
| 116 | +```javascript | ||
| 117 | +// src/api/common.js | ||
| 118 | +export const smsAPI = (params) => fn(fetch.post(Api.SMS, params)); | ||
| 119 | +``` | ||
| 120 | + | ||
| 121 | +关键 API 模块: | ||
| 122 | +- `common.js` - 短信验证码、上传凭证 | ||
| 123 | +- `user.js` - 用户认证和个人信息 | ||
| 124 | +- `family.js` - 家庭管理 | ||
| 125 | +- `points.js` - 积分/奖励系统 | ||
| 126 | +- `photo.js` - 照片/媒体处理 | ||
| 127 | +- `organization.js` - 组织管理 | ||
| 128 | + | ||
| 129 | +## Taro 小程序限制 | ||
| 130 | + | ||
| 131 | +### ❌ 禁止使用 Web API | ||
| 132 | + | ||
| 133 | +```javascript | ||
| 134 | +// 禁止 - 在小程序中会崩溃 | ||
| 135 | +window.document.getElementById() | ||
| 136 | +localStorage | ||
| 137 | +window.location.href | ||
| 138 | +fetch() | ||
| 139 | +``` | ||
| 140 | + | ||
| 141 | +### ✅ 必须使用 Taro API | ||
| 142 | + | ||
| 143 | +```javascript | ||
| 144 | +// 正确 - 使用 Taro 等价 API | ||
| 145 | +Taro.createSelectorQuery() | ||
| 146 | +Taro.getStorage() / Taro.setStorage() | ||
| 147 | +Taro.navigateTo() | ||
| 148 | +Taro.request() | ||
| 149 | +``` | ||
| 150 | + | ||
| 151 | +### 页面生命周期(使用 Taro Hooks) | ||
| 152 | + | ||
| 153 | +```javascript | ||
| 154 | +import { useLoad, useShow, useReady } from '@tarojs/taro' | ||
| 155 | + | ||
| 156 | +useLoad((options) => { | ||
| 157 | + // 页面加载(仅触发一次)- 适合获取路由参数 | ||
| 158 | +}) | ||
| 159 | + | ||
| 160 | +useShow(() => { | ||
| 161 | + // 页面显示(每次显示都触发)- 适合刷新数据 | ||
| 162 | +}) | ||
| 163 | + | ||
| 164 | +useReady(() => { | ||
| 165 | + // 页面首次渲染完成 | ||
| 166 | +}) | ||
| 167 | +``` | ||
| 168 | + | ||
| 169 | +### ❌ 页面中避免使用 Vue 生命周期 | ||
| 170 | + | ||
| 171 | +```javascript | ||
| 172 | +// 不要使用 - 可能无法正常工作 | ||
| 173 | +onMounted(() => { ... }) | ||
| 174 | +onUnmounted(() => { ... }) | ||
| 175 | +``` | ||
| 176 | + | ||
| 177 | +## 组件指南 | ||
| 178 | + | ||
| 179 | +### 页面结构 | ||
| 180 | + | ||
| 181 | +每个页面目录包含: | ||
| 182 | +- `index.vue` - 页面组件(必须使用 `<script setup>`) | ||
| 183 | +- `index.config.js` - 页面特定配置(navigationBarTitleText 等) | ||
| 184 | +- `index.less` - 页面特定样式(scoped) | ||
| 185 | + | ||
| 186 | +### 组件命名规范 | ||
| 187 | + | ||
| 188 | +- **页面**: 目录名(如 `pages/Dashboard/`) | ||
| 189 | +- **组件**: PascalCase 多单词命名(如 `PointsCollector.vue`、`FamilyAlbum.vue`) | ||
| 190 | +- **API 文件**: camelCase(如 `miniProgramAuthAPI`) | ||
| 191 | + | ||
| 192 | +### NutUI 自动导入 | ||
| 193 | + | ||
| 194 | +NutUI 组件通过 `unplugin-vue-components` 自动导入。**不要**手动导入: | ||
| 195 | + | ||
| 196 | +```vue | ||
| 197 | +<!-- ✅ 正确 - 自动导入 --> | ||
| 198 | +<template> | ||
| 199 | + <nut-button type="primary">点击</nut-button> | ||
| 200 | +</template> | ||
| 201 | + | ||
| 202 | +<!-- ❌ 错误 - 不要导入 --> | ||
| 203 | +<script setup> | ||
| 204 | +import { Button } from '@nutui/nutui-taro' | ||
| 205 | +</script> | ||
| 206 | +``` | ||
| 207 | + | ||
| 208 | +## 样式 | ||
| 209 | + | ||
| 210 | +### TailwindCSS + Less 混合使用 | ||
| 211 | + | ||
| 212 | +- **TailwindCSS**: 用于布局、间距、颜色、排版(80% 的样式) | ||
| 213 | +- **Less**: 用于组件特定样式、动画、深度选择器(20%) | ||
| 214 | + | ||
| 215 | +### Tailwind 配置 | ||
| 216 | + | ||
| 217 | +- **Content**: `./src/**/*.{html,js,ts,jsx,tsx,vue}` (tailwind.config.js:13) | ||
| 218 | +- **Preflight**: 禁用(小程序不需要) | ||
| 219 | +- **rem → rpx**: 由 `weapp-tailwindcss` 插件处理 (rem2rpx: true) | ||
| 220 | + | ||
| 221 | +### 样式指南 | ||
| 222 | + | ||
| 223 | +```vue | ||
| 224 | +<style lang="less" scoped> | ||
| 225 | +/* ✅ 组件必须使用 scoped */ | ||
| 226 | +.page-container { | ||
| 227 | + padding: 30px; | ||
| 228 | +} | ||
| 229 | + | ||
| 230 | +/* ✅ 使用 Less 处理深度选择器 */ | ||
| 231 | +.custom-element :deep(.nut-popup) { | ||
| 232 | + background-color: #fff; | ||
| 233 | +} | ||
| 234 | +</style> | ||
| 235 | +``` | ||
| 236 | + | ||
| 237 | +## 状态管理 (Pinia) | ||
| 238 | + | ||
| 239 | +### Store 模式 | ||
| 240 | + | ||
| 241 | +```javascript | ||
| 242 | +// src/stores/host.js | ||
| 243 | +import { defineStore } from 'pinia' | ||
| 244 | + | ||
| 245 | +export const hostStore = defineStore('host', { | ||
| 246 | + state: () => ({ | ||
| 247 | + id: '', | ||
| 248 | + join_id: '' | ||
| 249 | + }), | ||
| 250 | + actions: { | ||
| 251 | + add(id) { | ||
| 252 | + this.id = id | ||
| 253 | + } | ||
| 254 | + } | ||
| 255 | +}) | ||
| 256 | +``` | ||
| 257 | + | ||
| 258 | +### 在组件中使用 | ||
| 259 | + | ||
| 260 | +```vue | ||
| 261 | +<script setup> | ||
| 262 | +import { hostStore } from '@/stores/host' | ||
| 263 | + | ||
| 264 | +const host = hostStore() | ||
| 265 | +host.add('123') | ||
| 266 | +</script> | ||
| 267 | +``` | ||
| 268 | + | ||
| 269 | +## 常用模式 | ||
| 270 | + | ||
| 271 | +### 页面导航 | ||
| 272 | + | ||
| 273 | +```javascript | ||
| 274 | +import Taro from '@tarojs/taro' | ||
| 275 | + | ||
| 276 | +// 跳转到页面 | ||
| 277 | +Taro.navigateTo({ | ||
| 278 | + url: '/pages/Detail/index?id=123' | ||
| 279 | +}) | ||
| 280 | + | ||
| 281 | +// 重定向(无返回) | ||
| 282 | +Taro.redirectTo({ | ||
| 283 | + url: '/pages/Login/index' | ||
| 284 | +}) | ||
| 285 | + | ||
| 286 | +// 切换 Tab | ||
| 287 | +Taro.switchTab({ | ||
| 288 | + url: '/pages/Dashboard/index' | ||
| 289 | +}) | ||
| 290 | + | ||
| 291 | +// 获取路由参数 | ||
| 292 | +useLoad((options) => { | ||
| 293 | + const { id } = options | ||
| 294 | +}) | ||
| 295 | +``` | ||
| 296 | + | ||
| 297 | +### 本地存储 | ||
| 298 | + | ||
| 299 | +```javascript | ||
| 300 | +// 异步(推荐) | ||
| 301 | +await Taro.setStorage({ key: 'user', data: userInfo }) | ||
| 302 | +const { data } = await Taro.getStorage({ key: 'user' }) | ||
| 303 | + | ||
| 304 | +// 同步(谨慎使用) | ||
| 305 | +Taro.setStorageSync('token', 'xxxx') | ||
| 306 | +const token = Taro.getStorageSync('token') | ||
| 307 | +``` | ||
| 308 | + | ||
| 309 | +### 提示/弹窗 | ||
| 310 | + | ||
| 311 | +```javascript | ||
| 312 | +// Toast 提示 | ||
| 313 | +Taro.showToast({ | ||
| 314 | + title: '操作成功', | ||
| 315 | + icon: 'success', | ||
| 316 | + duration: 2000 | ||
| 317 | +}) | ||
| 318 | + | ||
| 319 | +// Modal 弹窗 | ||
| 320 | +Taro.showModal({ | ||
| 321 | + title: '提示', | ||
| 322 | + content: '确定删除吗?', | ||
| 323 | + success: (res) => { | ||
| 324 | + if (res.confirm) { | ||
| 325 | + // 用户点击了确定 | ||
| 326 | + } | ||
| 327 | + } | ||
| 328 | +}) | ||
| 329 | +``` | ||
| 330 | + | ||
| 331 | +## 页面注册 | ||
| 332 | + | ||
| 333 | +页面在 `src/app.config.js` 中注册: | ||
| 334 | + | ||
| 335 | +```javascript | ||
| 336 | +export default { | ||
| 337 | + pages: [ | ||
| 338 | + 'pages/Dashboard/index', | ||
| 339 | + 'pages/MyFamily/index', | ||
| 340 | + 'pages/Activities/index', | ||
| 341 | + // ... 更多页面 | ||
| 342 | + ] | ||
| 343 | +} | ||
| 344 | +``` | ||
| 345 | + | ||
| 346 | +**创建新页面时**: 必须将其添加到此数组中。 | ||
| 347 | + | ||
| 348 | +## 构建输出 | ||
| 349 | + | ||
| 350 | +- **开发环境**: `dist/` 目录 | ||
| 351 | +- **微信开发者工具**: 打开 `dist/` 作为项目根目录 | ||
| 352 | + | ||
| 353 | +## 重要文件说明 | ||
| 354 | + | ||
| 355 | +### `src/utils/request.js` | ||
| 356 | + | ||
| 357 | +核心 HTTP 客户端,包含: | ||
| 358 | +- SessionID 注入 | ||
| 359 | +- 401 响应处理 | ||
| 360 | +- 401 时静默授权重定向 | ||
| 361 | +- 错误处理 | ||
| 362 | + | ||
| 363 | +### `src/utils/authRedirect.js` | ||
| 364 | + | ||
| 365 | +处理小程序登录流程的静默授权。 | ||
| 366 | + | ||
| 367 | +### `src/utils/tools.js` | ||
| 368 | + | ||
| 369 | +通用工具函数: | ||
| 370 | +- `formatDate()` - 使用 moment.js 格式化日期 | ||
| 371 | +- `wxInfo()` - 平台检测(Android/iOS/微信) | ||
| 372 | +- `hasEllipsis()` - 文本溢出检测 | ||
| 373 | + | ||
| 374 | +## 开发注意事项 | ||
| 375 | + | ||
| 376 | +1. **始终使用 Taro API** 而非 Web API | ||
| 377 | +2. **检查 `res.code === 1`** 判断 API 成功(不是 `res.code`) | ||
| 378 | +3. **NutUI 组件已自动导入** - 不要手动导入 | ||
| 379 | +4. **页面中使用 Taro 生命周期钩子**(`useLoad`、`useShow`) | ||
| 380 | +5. **SessionID 动态获取** - 每次请求从存储中读取 | ||
| 381 | +6. **已配置路径别名** - 使用 `@/components` 代替相对路径 | ||
| 382 | +7. **设计宽度双模式**: NutUI 使用 375px,其他使用 750px | ||
| 383 | + | ||
| 384 | +## 平台差异 | ||
| 385 | + | ||
| 386 | +项目通过 Taro 支持多平台: | ||
| 387 | +- **微信 (weapp)**: 主要目标平台 | ||
| 388 | +- **H5**: Web 浏览器版本 | ||
| 389 | +- **支付宝 (alipay)**: 支付宝小程序 | ||
| 390 | +- **抖音 (tt)**: 字节跳动小程序 | ||
| 391 | + | ||
| 392 | +平台特定代码可使用: | ||
| 393 | +```javascript | ||
| 394 | +if (process.env.TARO_ENV === 'weapp') { | ||
| 395 | + // 微信特定代码 | ||
| 396 | +} | ||
| 397 | +``` |
docs/CHANGELOG.md
0 → 100644
| 1 | +# 项目变更日志 | ||
| 2 | + | ||
| 3 | +本文档记录项目的所有重要变更。 | ||
| 4 | + | ||
| 5 | +格式遵循:[Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/) | ||
| 6 | + | ||
| 7 | +--- | ||
| 8 | + | ||
| 9 | +## [2026-02-05] - 项目开发环境初始化 | ||
| 10 | + | ||
| 11 | +### 新增 | ||
| 12 | +- 创建 docs/ 目录结构(reports/、tasks/) | ||
| 13 | +- 创建 CHANGELOG.md 变更日志 | ||
| 14 | +- 创建 PROJECT-STATUS.md 项目状态报告 | ||
| 15 | +- 创建 DEVELOPMENT-GUIDE.md 开发指南 | ||
| 16 | +- 创建规范文档目录 | ||
| 17 | + | ||
| 18 | +--- | ||
| 19 | + | ||
| 20 | +**详细信息**: | ||
| 21 | +- **影响文件**: docs/CHANGELOG.md, docs/PROJECT-STATUS.md, docs/DEVELOPMENT-GUIDE.md | ||
| 22 | +- **技术栈**: 文档系统 | ||
| 23 | +- **测试状态**: N/A | ||
| 24 | +- **备注**: 为后续开发建立完善的文档体系 |
docs/CODING-STANDARDS.md
0 → 100644
| 1 | +# 代码规范 | ||
| 2 | + | ||
| 3 | +**更新时间**: 2026-02-05 | ||
| 4 | + | ||
| 5 | +本文档定义项目的代码规范。 | ||
| 6 | + | ||
| 7 | +--- | ||
| 8 | + | ||
| 9 | +## 📋 命名规范 | ||
| 10 | + | ||
| 11 | +### 文件命名 | ||
| 12 | + | ||
| 13 | +``` | ||
| 14 | +组件: PascalCase UserCard.vue | ||
| 15 | +页面: PascalCase Dashboard/index.vue | ||
| 16 | +API 文件: camelCase userAPI.js | ||
| 17 | +工具函数: camelCase formatDate.js | ||
| 18 | +常量文件: UPPER_CASE API_CONSTANTS.js | ||
| 19 | +``` | ||
| 20 | + | ||
| 21 | +### 变量命名 | ||
| 22 | + | ||
| 23 | +```javascript | ||
| 24 | +// ✅ 正确 | ||
| 25 | +const userList = ref([]) | ||
| 26 | +const isLoading = ref(false) | ||
| 27 | +const MAX_COUNT = 100 | ||
| 28 | + | ||
| 29 | +// ❌ 错误 | ||
| 30 | +const UserList = ref([]) | ||
| 31 | +const is_loading = ref(false) | ||
| 32 | +const max_count = 100 | ||
| 33 | +``` | ||
| 34 | + | ||
| 35 | +### 函数命名 | ||
| 36 | + | ||
| 37 | +```javascript | ||
| 38 | +// ✅ 正确 - 动词开头 | ||
| 39 | +const fetchUserData = async () => {} | ||
| 40 | +const handleSubmit = () => {} | ||
| 41 | +const formatDate = (date) => {} | ||
| 42 | + | ||
| 43 | +// ❌ 错误 | ||
| 44 | +const userData = async () => {} // 应该是 fetchUserData | ||
| 45 | +const submit = () => {} // 应该是 handleSubmit | ||
| 46 | +``` | ||
| 47 | + | ||
| 48 | +--- | ||
| 49 | + | ||
| 50 | +## 🎯 Vue 3 规范 | ||
| 51 | + | ||
| 52 | +### 组件定义 | ||
| 53 | + | ||
| 54 | +```vue | ||
| 55 | +<script setup> | ||
| 56 | +// 1. 导入 | ||
| 57 | +import { ref, computed, onMounted } from 'vue' | ||
| 58 | +import { useLoad } from '@tarojs/taro' | ||
| 59 | +import { userAPI } from '@/api/user' | ||
| 60 | + | ||
| 61 | +// 2. Props 定义 | ||
| 62 | +const props = defineProps({ | ||
| 63 | + userId: { | ||
| 64 | + type: Number, | ||
| 65 | + required: true, | ||
| 66 | + default: 0 | ||
| 67 | + } | ||
| 68 | +}) | ||
| 69 | + | ||
| 70 | +// 3. Emits 定义 | ||
| 71 | +const emit = defineEmits(['update', 'delete']) | ||
| 72 | + | ||
| 73 | +// 4. 响应式状态 | ||
| 74 | +const loading = ref(false) | ||
| 75 | +const dataList = ref([]) | ||
| 76 | + | ||
| 77 | +// 5. 计算属性 | ||
| 78 | +const totalCount = computed(() => dataList.value.length) | ||
| 79 | + | ||
| 80 | +// 6. 方法 | ||
| 81 | +const fetchData = async () => { | ||
| 82 | + loading.value = true | ||
| 83 | + try { | ||
| 84 | + const res = await userAPI() | ||
| 85 | + if (res.code === 1) { | ||
| 86 | + dataList.value = res.data | ||
| 87 | + } | ||
| 88 | + } finally { | ||
| 89 | + loading.value = false | ||
| 90 | + } | ||
| 91 | +} | ||
| 92 | + | ||
| 93 | +// 7. 生命周期(Taro Hooks) | ||
| 94 | +useLoad(() => { | ||
| 95 | + fetchData() | ||
| 96 | +}) | ||
| 97 | +</script> | ||
| 98 | +``` | ||
| 99 | + | ||
| 100 | +### Props 验证 | ||
| 101 | + | ||
| 102 | +```javascript | ||
| 103 | +// ✅ 正确 - 完整的类型和默认值 | ||
| 104 | +const props = defineProps({ | ||
| 105 | + userId: { | ||
| 106 | + type: Number, | ||
| 107 | + required: true, | ||
| 108 | + default: 0 | ||
| 109 | + }, | ||
| 110 | + userName: { | ||
| 111 | + type: String, | ||
| 112 | + default: '' | ||
| 113 | + }, | ||
| 114 | + isActive: { | ||
| 115 | + type: Boolean, | ||
| 116 | + default: false | ||
| 117 | + } | ||
| 118 | +}) | ||
| 119 | + | ||
| 120 | +// ❌ 错误 - 缺少类型 | ||
| 121 | +const props = defineProps(['userId', 'userName']) | ||
| 122 | +``` | ||
| 123 | + | ||
| 124 | +### Emits 定义 | ||
| 125 | + | ||
| 126 | +```javascript | ||
| 127 | +// ✅ 正确 - 定义事件名 | ||
| 128 | +const emit = defineEmits({ | ||
| 129 | + // 带验证的事件 | ||
| 130 | + update: (payload) => typeof payload.id === 'number', | ||
| 131 | + // 无验证的事件 | ||
| 132 | + delete: null | ||
| 133 | +}) | ||
| 134 | + | ||
| 135 | +// ❌ 错误 - 未定义事件 | ||
| 136 | +const emit = defineEmits() | ||
| 137 | +``` | ||
| 138 | + | ||
| 139 | +--- | ||
| 140 | + | ||
| 141 | +## 🎨 样式规范 | ||
| 142 | + | ||
| 143 | +### TailwindCSS 优先 | ||
| 144 | + | ||
| 145 | +```vue | ||
| 146 | +<template> | ||
| 147 | + <!-- ✅ 优先使用 TailwindCSS --> | ||
| 148 | + <view class="flex items-center justify-between p-4 bg-white"> | ||
| 149 | + <text class="text-xl font-bold text-gray-900">标题</text> | ||
| 150 | + </view> | ||
| 151 | +</template> | ||
| 152 | + | ||
| 153 | +<style lang="less" scoped> | ||
| 154 | +/* ✅ 仅在必要时使用 Less */ | ||
| 155 | +.custom-element { | ||
| 156 | + // 深度选择器 | ||
| 157 | + :deep(.nut-popup) { | ||
| 158 | + background-color: #fff; | ||
| 159 | + } | ||
| 160 | + | ||
| 161 | + // 复杂动画 | ||
| 162 | + @keyframes slide-in { | ||
| 163 | + from { transform: translateX(-100%); } | ||
| 164 | + to { transform: translateX(0); } | ||
| 165 | + } | ||
| 166 | +} | ||
| 167 | +</style> | ||
| 168 | +``` | ||
| 169 | + | ||
| 170 | +### 样式作用域 | ||
| 171 | + | ||
| 172 | +```vue | ||
| 173 | +<!-- ✅ 页面组件必须使用 scoped --> | ||
| 174 | +<template> | ||
| 175 | + <view class="page-container">...</view> | ||
| 176 | +</template> | ||
| 177 | + | ||
| 178 | +<style lang="less" scoped> | ||
| 179 | +.page-container { | ||
| 180 | + padding: 30px; | ||
| 181 | +} | ||
| 182 | +</style> | ||
| 183 | +``` | ||
| 184 | + | ||
| 185 | +--- | ||
| 186 | + | ||
| 187 | +## 📡 API 调用规范 | ||
| 188 | + | ||
| 189 | +### 统一错误处理 | ||
| 190 | + | ||
| 191 | +```javascript | ||
| 192 | +// ✅ 正确 - 完整的错误处理 | ||
| 193 | +const fetchData = async () => { | ||
| 194 | + loading.value = true | ||
| 195 | + try { | ||
| 196 | + const res = await userAPI() | ||
| 197 | + if (res.code === 1) { | ||
| 198 | + dataList.value = res.data | ||
| 199 | + } else { | ||
| 200 | + Taro.showToast({ | ||
| 201 | + title: res.msg || '请求失败', | ||
| 202 | + icon: 'none' | ||
| 203 | + }) | ||
| 204 | + } | ||
| 205 | + } catch (err) { | ||
| 206 | + console.error('请求失败:', err) | ||
| 207 | + Taro.showToast({ | ||
| 208 | + title: '网络异常', | ||
| 209 | + icon: 'none' | ||
| 210 | + }) | ||
| 211 | + } finally { | ||
| 212 | + loading.value = false | ||
| 213 | + } | ||
| 214 | +} | ||
| 215 | + | ||
| 216 | +// ❌ 错误 - 没有错误处理 | ||
| 217 | +const fetchData = async () => { | ||
| 218 | + const res = await userAPI() | ||
| 219 | + dataList.value = res.data | ||
| 220 | +} | ||
| 221 | +``` | ||
| 222 | + | ||
| 223 | +### SessionID 管理 | ||
| 224 | + | ||
| 225 | +```javascript | ||
| 226 | +// ✅ 正确 - sessionid 由请求拦截器自动注入 | ||
| 227 | +// 详见 src/utils/request.js:75-78 | ||
| 228 | + | ||
| 229 | +// ❌ 错误 - 手动设置 sessionid | ||
| 230 | +const sessionid = Taro.getStorageSync('sessionid') | ||
| 231 | +const res = await userAPI({ headers: { cookie: sessionid } }) | ||
| 232 | +``` | ||
| 233 | + | ||
| 234 | +--- | ||
| 235 | + | ||
| 236 | +## 🧪 测试规范 | ||
| 237 | + | ||
| 238 | +### 单元测试 | ||
| 239 | + | ||
| 240 | +```javascript | ||
| 241 | +// ✅ 好的测试 - 清晰的描述和断言 | ||
| 242 | +describe('formatDate', () => { | ||
| 243 | + it('should format date to YYYY-MM-DD', () => { | ||
| 244 | + const result = formatDate('2026-02-05') | ||
| 245 | + expect(result).toBe('2026-02-05') | ||
| 246 | + }) | ||
| 247 | + | ||
| 248 | + it('should handle invalid date', () => { | ||
| 249 | + const result = formatDate('invalid') | ||
| 250 | + expect(result).toBe('') | ||
| 251 | + }) | ||
| 252 | +}) | ||
| 253 | +``` | ||
| 254 | + | ||
| 255 | +### 测试覆盖率目标 | ||
| 256 | + | ||
| 257 | +- **全局覆盖率**: > 80% | ||
| 258 | +- **核心业务逻辑**: > 90% | ||
| 259 | +- **工具函数**: 100% | ||
| 260 | + | ||
| 261 | +--- | ||
| 262 | + | ||
| 263 | +## 📝 注释规范 | ||
| 264 | + | ||
| 265 | +### JSDoc 注释 | ||
| 266 | + | ||
| 267 | +```javascript | ||
| 268 | +/** | ||
| 269 | + * 格式化日期 | ||
| 270 | + * @param {string|Date} date - 日期对象或日期字符串 | ||
| 271 | + * @param {string} format - 格式化模板(默认:'YYYY-MM-DD') | ||
| 272 | + * @returns {string} 格式化后的日期字符串 | ||
| 273 | + * @example | ||
| 274 | + * formatDate('2026-02-05', 'YYYY年MM月DD日') | ||
| 275 | + * // 返回:'2026年02月05日' | ||
| 276 | + */ | ||
| 277 | +const formatDate = (date, format = 'YYYY-MM-DD') => { | ||
| 278 | + // ... | ||
| 279 | +} | ||
| 280 | +``` | ||
| 281 | + | ||
| 282 | +### 复杂逻辑注释 | ||
| 283 | + | ||
| 284 | +```javascript | ||
| 285 | +// 步骤 1: 验证用户权限 | ||
| 286 | +const hasPermission = await checkUserPermission() | ||
| 287 | +if (!hasPermission) { | ||
| 288 | + throw new Error('无权限操作') | ||
| 289 | +} | ||
| 290 | + | ||
| 291 | +// 步骤 2: 检查数据有效性 | ||
| 292 | +const isValid = validateData(data) | ||
| 293 | +if (!isValid) { | ||
| 294 | + throw new Error('数据格式错误') | ||
| 295 | +} | ||
| 296 | + | ||
| 297 | +// 步骤 3: 提交到服务器 | ||
| 298 | +const result = await submitData(data) | ||
| 299 | +``` | ||
| 300 | + | ||
| 301 | +--- | ||
| 302 | + | ||
| 303 | +## 🔒 安全规范 | ||
| 304 | + | ||
| 305 | +### 防止 XSS | ||
| 306 | + | ||
| 307 | +```vue | ||
| 308 | +<!-- ❌ 危险 - 用户输入未转义 --> | ||
| 309 | +<view v-html="userComment"></view> | ||
| 310 | + | ||
| 311 | +<!-- ✅ 安全 - 使用 text 插值 --> | ||
| 312 | +<view>{{ userComment }}</view> | ||
| 313 | +``` | ||
| 314 | + | ||
| 315 | +### 敏感信息保护 | ||
| 316 | + | ||
| 317 | +```javascript | ||
| 318 | +// ❌ 错误 - 硬编码密钥 | ||
| 319 | +const API_KEY = 'sk-proj-xxxxx' | ||
| 320 | + | ||
| 321 | +// ✅ 正确 - 使用环境变量 | ||
| 322 | +const API_KEY = process.env.API_KEY | ||
| 323 | +``` | ||
| 324 | + | ||
| 325 | +--- | ||
| 326 | + | ||
| 327 | +## ✅ 代码检查清单 | ||
| 328 | + | ||
| 329 | +提交代码前,确认: | ||
| 330 | + | ||
| 331 | +- [ ] 代码可读性强,命名清晰 | ||
| 332 | +- [ ] 函数单一职责,长度 < 50 行 | ||
| 333 | +- [ ] 无深度嵌套(> 4 层) | ||
| 334 | +- [ ] 无魔法数字,使用常量 | ||
| 335 | +- [ ] 无 console.log 或 debugger | ||
| 336 | +- [ ] Props 有类型和默认值 | ||
| 337 | +- [ ] Emits 有事件名定义 | ||
| 338 | +- [ ] API 调用检查 `res.code === 1` | ||
| 339 | +- [ ] 所有 async 函数有 try-catch | ||
| 340 | +- [ ] 组件样式使用 scoped | ||
| 341 | +- [ ] 优先使用 TailwindCSS | ||
| 342 | +- [ ] 复杂逻辑有注释说明 | ||
| 343 | +- [ ] JSDoc 注释完整 | ||
| 344 | + | ||
| 345 | +--- | ||
| 346 | + | ||
| 347 | +**维护者**: 开发团队 | ||
| 348 | +**最后更新**: 2026-02-05 |
docs/DEVELOPMENT-GUIDE.md
0 → 100644
| 1 | +# 开发指南 | ||
| 2 | + | ||
| 3 | +**更新时间**: 2026-02-05 | ||
| 4 | + | ||
| 5 | +本文档提供老来赛项目的开发规范和最佳实践。 | ||
| 6 | + | ||
| 7 | +--- | ||
| 8 | + | ||
| 9 | +## 🚀 快速开始 | ||
| 10 | + | ||
| 11 | +### 1. 环境准备 | ||
| 12 | + | ||
| 13 | +```bash | ||
| 14 | +# 安装依赖 | ||
| 15 | +pnpm install | ||
| 16 | + | ||
| 17 | +# 启动开发服务器 | ||
| 18 | +pnpm run dev:weapp | ||
| 19 | + | ||
| 20 | +# 在微信开发者工具中打开 dist/ 目录 | ||
| 21 | +``` | ||
| 22 | + | ||
| 23 | +### 2. 开发流程 | ||
| 24 | + | ||
| 25 | +1. **创建新页面**: | ||
| 26 | + ```bash | ||
| 27 | + # 在 src/pages/ 下创建页面目录 | ||
| 28 | + mkdir src/pages/YourPage | ||
| 29 | + touch src/pages/YourPage/index.vue | ||
| 30 | + touch src/pages/YourPage/index.config.js | ||
| 31 | + ``` | ||
| 32 | + | ||
| 33 | +2. **注册页面**(必须): | ||
| 34 | + ```javascript | ||
| 35 | + // src/app.config.js | ||
| 36 | + export default { | ||
| 37 | + pages: [ | ||
| 38 | + // ... 其他页面 | ||
| 39 | + 'pages/YourPage/index' | ||
| 40 | + ] | ||
| 41 | + } | ||
| 42 | + ``` | ||
| 43 | + | ||
| 44 | +3. **启动开发**: | ||
| 45 | + ```bash | ||
| 46 | + pnpm run dev:weapp | ||
| 47 | + ``` | ||
| 48 | + | ||
| 49 | +--- | ||
| 50 | + | ||
| 51 | +## 📝 代码规范 | ||
| 52 | + | ||
| 53 | +### Vue 组件规范 | ||
| 54 | + | ||
| 55 | +#### ✅ 推荐做法 | ||
| 56 | + | ||
| 57 | +```vue | ||
| 58 | +<script setup> | ||
| 59 | +import { ref, computed } from 'vue' | ||
| 60 | + | ||
| 61 | +// 1. Props 定义(有类型和默认值) | ||
| 62 | +const props = defineProps({ | ||
| 63 | + userId: { | ||
| 64 | + type: Number, | ||
| 65 | + required: true | ||
| 66 | + }, | ||
| 67 | + title: { | ||
| 68 | + type: String, | ||
| 69 | + default: '' | ||
| 70 | + } | ||
| 71 | +}) | ||
| 72 | + | ||
| 73 | +// 2. Emits 定义(有事件名) | ||
| 74 | +const emit = defineEmits(['update', 'delete']) | ||
| 75 | + | ||
| 76 | +// 3. 响应式状态 | ||
| 77 | +const loading = ref(false) | ||
| 78 | +const dataList = ref([]) | ||
| 79 | + | ||
| 80 | +// 4. 计算属性 | ||
| 81 | +const totalCount = computed(() => dataList.value.length) | ||
| 82 | + | ||
| 83 | +// 5. 方法 | ||
| 84 | +const fetchData = async () => { | ||
| 85 | + loading.value = true | ||
| 86 | + try { | ||
| 87 | + const res = await yourAPI() | ||
| 88 | + if (res.code === 1) { | ||
| 89 | + dataList.value = res.data | ||
| 90 | + } | ||
| 91 | + } finally { | ||
| 92 | + loading.value = false | ||
| 93 | + } | ||
| 94 | +} | ||
| 95 | + | ||
| 96 | +// 6. 生命周期(使用 Taro Hooks) | ||
| 97 | +import { useLoad, useShow } from '@tarojs/taro' | ||
| 98 | + | ||
| 99 | +useLoad((options) => { | ||
| 100 | + // 页面加载(只触发一次) | ||
| 101 | + fetchData() | ||
| 102 | +}) | ||
| 103 | + | ||
| 104 | +useShow(() => { | ||
| 105 | + // 页面显示(每次显示都触发) | ||
| 106 | +}) | ||
| 107 | +</script> | ||
| 108 | + | ||
| 109 | +<template> | ||
| 110 | + <view class="page-container"> | ||
| 111 | + <!-- 模板内容 --> | ||
| 112 | + </view> | ||
| 113 | +</template> | ||
| 114 | + | ||
| 115 | +<style lang="less" scoped> | ||
| 116 | +.page-container { | ||
| 117 | + padding: 30px; | ||
| 118 | +} | ||
| 119 | +</style> | ||
| 120 | +``` | ||
| 121 | + | ||
| 122 | +#### ❌ 避免做法 | ||
| 123 | + | ||
| 124 | +```vue | ||
| 125 | +<script setup> | ||
| 126 | +// ❌ 不要在页面中使用 Vue 生命周期 | ||
| 127 | +import { onMounted } from 'vue' | ||
| 128 | +onMounted(() => { | ||
| 129 | + // 可能无法正常工作 | ||
| 130 | +}) | ||
| 131 | + | ||
| 132 | +// ❌ 不要直接修改 props | ||
| 133 | +props.title = 'new title' | ||
| 134 | + | ||
| 135 | +// ❌ 不要使用 Web API | ||
| 136 | +localStorage.setItem('key', 'value') | ||
| 137 | +``` | ||
| 138 | + | ||
| 139 | +### API 调用规范 | ||
| 140 | + | ||
| 141 | +```javascript | ||
| 142 | +// ✅ 正确 - 检查 res.code === 1 | ||
| 143 | +const fetchData = async () => { | ||
| 144 | + try { | ||
| 145 | + const res = await yourAPI() | ||
| 146 | + if (res.code === 1) { // 重要:检查 === 1 | ||
| 147 | + // 处理成功 | ||
| 148 | + console.log(res.data) | ||
| 149 | + } else { | ||
| 150 | + // 处理业务错误 | ||
| 151 | + Taro.showToast({ | ||
| 152 | + title: res.msg || '请求失败', | ||
| 153 | + icon: 'none' | ||
| 154 | + }) | ||
| 155 | + } | ||
| 156 | + } catch (err) { | ||
| 157 | + // 处理网络错误 | ||
| 158 | + console.error('请求失败:', err) | ||
| 159 | + Taro.showToast({ | ||
| 160 | + title: '网络异常', | ||
| 161 | + icon: 'none' | ||
| 162 | + }) | ||
| 163 | + } | ||
| 164 | +} | ||
| 165 | + | ||
| 166 | +// ❌ 错误 - 不检查或错误检查 | ||
| 167 | +const fetchData = async () => { | ||
| 168 | + const res = await yourAPI() | ||
| 169 | + if (res.code) { // 错误:应该检查 === 1 | ||
| 170 | + // ... | ||
| 171 | + } | ||
| 172 | +} | ||
| 173 | +``` | ||
| 174 | + | ||
| 175 | +### 路径别名使用 | ||
| 176 | + | ||
| 177 | +```javascript | ||
| 178 | +// ✅ 正确 - 使用路径别名 | ||
| 179 | +import { formatDate } from '@/utils/tools' | ||
| 180 | +import UserCard from '@/components/UserCard.vue' | ||
| 181 | +import { userAPI } from '@/api/user' | ||
| 182 | + | ||
| 183 | +// ❌ 错误 - 使用相对路径 | ||
| 184 | +import { formatDate } from '../../utils/tools' | ||
| 185 | +import UserCard from '../../components/UserCard.vue' | ||
| 186 | +``` | ||
| 187 | + | ||
| 188 | +--- | ||
| 189 | + | ||
| 190 | +## 🎨 样式规范 | ||
| 191 | + | ||
| 192 | +### TailwindCSS + Less 混合使用 | ||
| 193 | + | ||
| 194 | +```vue | ||
| 195 | +<template> | ||
| 196 | + <!-- TailwindCSS 用于布局、间距、颜色(80%) --> | ||
| 197 | + <view class="flex flex-col gap-4 p-4 bg-white"> | ||
| 198 | + <text class="text-xl font-bold text-gray-900">标题</text> | ||
| 199 | + </view> | ||
| 200 | +</template> | ||
| 201 | + | ||
| 202 | +<style lang="less" scoped> | ||
| 203 | +/* Less 用于组件特定样式(20%) */ | ||
| 204 | +.custom-element { | ||
| 205 | + // 深度选择器修改第三方组件 | ||
| 206 | + :deep(.nut-popup) { | ||
| 207 | + background-color: #fff; | ||
| 208 | + } | ||
| 209 | + | ||
| 210 | + // 复杂动画 | ||
| 211 | + @keyframes slide-in { | ||
| 212 | + from { transform: translateX(-100%); } | ||
| 213 | + to { transform: translateX(0); } | ||
| 214 | + } | ||
| 215 | +} | ||
| 216 | +</style> | ||
| 217 | +``` | ||
| 218 | + | ||
| 219 | +### 样式单位 | ||
| 220 | + | ||
| 221 | +```less | ||
| 222 | +// ✅ 正确 - 使用 px(Taro 自动转换为 rpx) | ||
| 223 | +.container { | ||
| 224 | + width: 100px; // → 100rpx | ||
| 225 | + height: 200px; | ||
| 226 | +} | ||
| 227 | + | ||
| 228 | +// ❌ 错误 - 直接写 rpx(除非明确需要) | ||
| 229 | +.container { | ||
| 230 | + width: 100rpx; | ||
| 231 | +} | ||
| 232 | +``` | ||
| 233 | + | ||
| 234 | +--- | ||
| 235 | + | ||
| 236 | +## 🔧 常用模式 | ||
| 237 | + | ||
| 238 | +### 路由导航 | ||
| 239 | + | ||
| 240 | +```javascript | ||
| 241 | +import Taro from '@tarojs/taro' | ||
| 242 | + | ||
| 243 | +// 跳转到新页面 | ||
| 244 | +Taro.navigateTo({ | ||
| 245 | + url: '/pages/Detail/index?id=123' | ||
| 246 | +}) | ||
| 247 | + | ||
| 248 | +// 重定向(无返回) | ||
| 249 | +Taro.redirectTo({ | ||
| 250 | + url: '/pages/Login/index' | ||
| 251 | +}) | ||
| 252 | + | ||
| 253 | +// 切换 Tab | ||
| 254 | +Taro.switchTab({ | ||
| 255 | + url: '/pages/Dashboard/index' | ||
| 256 | +}) | ||
| 257 | + | ||
| 258 | +// 返回上一页 | ||
| 259 | +Taro.navigateBack({ | ||
| 260 | + delta: 1 | ||
| 261 | +}) | ||
| 262 | +``` | ||
| 263 | + | ||
| 264 | +### 获取路由参数 | ||
| 265 | + | ||
| 266 | +```javascript | ||
| 267 | +import { useLoad } from '@tarojs/taro' | ||
| 268 | + | ||
| 269 | +useLoad((options) => { | ||
| 270 | + const { id, type } = options | ||
| 271 | + console.log('页面参数:', id, type) | ||
| 272 | +}) | ||
| 273 | +``` | ||
| 274 | + | ||
| 275 | +### 本地存储 | ||
| 276 | + | ||
| 277 | +```javascript | ||
| 278 | +// 异步(推荐) | ||
| 279 | +await Taro.setStorage({ key: 'user', data: userInfo }) | ||
| 280 | +const { data } = await Taro.getStorage({ key: 'user' }) | ||
| 281 | + | ||
| 282 | +// 同步(谨慎使用) | ||
| 283 | +Taro.setStorageSync('token', 'xxxx') | ||
| 284 | +const token = Taro.getStorageSync('token') | ||
| 285 | +``` | ||
| 286 | + | ||
| 287 | +### 提示/弹窗 | ||
| 288 | + | ||
| 289 | +```javascript | ||
| 290 | +// Toast | ||
| 291 | +Taro.showToast({ | ||
| 292 | + title: '操作成功', | ||
| 293 | + icon: 'success', | ||
| 294 | + duration: 2000 | ||
| 295 | +}) | ||
| 296 | + | ||
| 297 | +// Modal | ||
| 298 | +Taro.showModal({ | ||
| 299 | + title: '提示', | ||
| 300 | + content: '确定删除吗?', | ||
| 301 | + success: (res) => { | ||
| 302 | + if (res.confirm) { | ||
| 303 | + // 用户点击确定 | ||
| 304 | + } | ||
| 305 | + } | ||
| 306 | +}) | ||
| 307 | +``` | ||
| 308 | + | ||
| 309 | +--- | ||
| 310 | + | ||
| 311 | +## 🧪 测试规范 | ||
| 312 | + | ||
| 313 | +### 单元测试(待添加) | ||
| 314 | + | ||
| 315 | +```javascript | ||
| 316 | +// 示例:工具函数测试 | ||
| 317 | +import { describe, it, expect } from 'vitest' | ||
| 318 | +import { formatDate } from '@/utils/tools' | ||
| 319 | + | ||
| 320 | +describe('formatDate', () => { | ||
| 321 | + it('should format date correctly', () => { | ||
| 322 | + const result = formatDate('2026-02-05') | ||
| 323 | + expect(result).toBe('2026年02月05日') | ||
| 324 | + }) | ||
| 325 | +}) | ||
| 326 | +``` | ||
| 327 | + | ||
| 328 | +### E2E 测试(待添加) | ||
| 329 | + | ||
| 330 | +```javascript | ||
| 331 | +// 示例:关键流程测试 | ||
| 332 | +test('should login successfully', async ({ page }) => { | ||
| 333 | + await page.goto('/pages/login/index') | ||
| 334 | + await page.fill('input[name="phone"]', '13800138000') | ||
| 335 | + await page.click('button[type="submit"]') | ||
| 336 | + await expect(page).toHaveURL('/pages/dashboard/index') | ||
| 337 | +}) | ||
| 338 | +``` | ||
| 339 | + | ||
| 340 | +--- | ||
| 341 | + | ||
| 342 | +## 📦 依赖管理 | ||
| 343 | + | ||
| 344 | +### 添加依赖 | ||
| 345 | + | ||
| 346 | +```bash | ||
| 347 | +# 生产依赖 | ||
| 348 | +pnpm add package-name | ||
| 349 | + | ||
| 350 | +# 开发依赖 | ||
| 351 | +pnpm add -D package-name | ||
| 352 | + | ||
| 353 | +# NutUI 相关 | ||
| 354 | +pnpm add @nutui/nutui-taro | ||
| 355 | +``` | ||
| 356 | + | ||
| 357 | +### NutUI 组件使用 | ||
| 358 | + | ||
| 359 | +```vue | ||
| 360 | +<template> | ||
| 361 | + <!-- ✅ 正确 - 自动导入,无需手动 import --> | ||
| 362 | + <nut-button type="primary">按钮</nut-button> | ||
| 363 | + <nut-popup v-model:visible="showPopup"> | ||
| 364 | + 内容 | ||
| 365 | + </nut-popup> | ||
| 366 | +</template> | ||
| 367 | + | ||
| 368 | +<script setup> | ||
| 369 | +// ❌ 错误 - 不要手动导入 | ||
| 370 | +// import { Button } from '@nutui/nutui-taro' | ||
| 371 | +</script> | ||
| 372 | +``` | ||
| 373 | + | ||
| 374 | +--- | ||
| 375 | + | ||
| 376 | +## 🚨 常见问题 | ||
| 377 | + | ||
| 378 | +### Q1: 页面不显示? | ||
| 379 | + | ||
| 380 | +**检查清单**: | ||
| 381 | +- [ ] 页面是否在 `app.config.js` 中注册 | ||
| 382 | +- [ ] 页面路径是否正确 | ||
| 383 | +- [ ] 是否有语法错误 | ||
| 384 | + | ||
| 385 | +### Q2: API 请求失败? | ||
| 386 | + | ||
| 387 | +**检查清单**: | ||
| 388 | +- [ ] 域名是否在微信小程序后台配置 | ||
| 389 | +- [ ] sessionid 是否正确设置 | ||
| 390 | +- [ ] 请求参数是否正确 | ||
| 391 | +- [ ] 网络是否正常 | ||
| 392 | + | ||
| 393 | +### Q3: 样式不生效? | ||
| 394 | + | ||
| 395 | +**检查清单**: | ||
| 396 | +- [ ] 是否添加了 `scoped` | ||
| 397 | +- [ ] 是否使用了不支持的 CSS | ||
| 398 | +- [ ] 是否被全局样式覆盖 | ||
| 399 | + | ||
| 400 | +### Q4: 组件不显示? | ||
| 401 | + | ||
| 402 | +**检查清单**: | ||
| 403 | +- [ ] 组件名称是否正确(PascalCase) | ||
| 404 | +- [ ] NutUI 组件是否正确使用 | ||
| 405 | +- [ ] 组件路径是否正确 | ||
| 406 | + | ||
| 407 | +--- | ||
| 408 | + | ||
| 409 | +## 📚 参考资源 | ||
| 410 | + | ||
| 411 | +### 项目文档 | ||
| 412 | + | ||
| 413 | +- [CLAUDE.md](../CLAUDE.md) - 项目指南 | ||
| 414 | +- [PROJECT-STATUS.md](PROJECT-STATUS.md) - 项目状态 | ||
| 415 | +- [CHANGELOG.md](CHANGELOG.md) - 变更日志 | ||
| 416 | + | ||
| 417 | +### 外部资源 | ||
| 418 | + | ||
| 419 | +- [Taro 官方文档](https://docs.taro.zone/) | ||
| 420 | +- [Vue 3 官方文档](https://cn.vuejs.org/) | ||
| 421 | +- [NutUI Taro 文档](https://nutui.jd.com/4/taro/) | ||
| 422 | +- [TailwindCSS 文档](https://tailwindcss.com/) | ||
| 423 | + | ||
| 424 | +--- | ||
| 425 | + | ||
| 426 | +**维护者**: 开发团队 | ||
| 427 | +**最后更新**: 2026-02-05 |
docs/GIT-WORKFLOW.md
0 → 100644
| 1 | +# Git 工作流规范 | ||
| 2 | + | ||
| 3 | +**更新时间**: 2026-02-05 | ||
| 4 | + | ||
| 5 | +本文档定义项目的 Git 工作流和提交规范。 | ||
| 6 | + | ||
| 7 | +--- | ||
| 8 | + | ||
| 9 | +## 🌳 分支策略 | ||
| 10 | + | ||
| 11 | +### 主要分支 | ||
| 12 | + | ||
| 13 | +``` | ||
| 14 | +master - 生产环境(主分支) | ||
| 15 | +develop - 开发环境(日常开发) | ||
| 16 | +feature/* - 功能分支 | ||
| 17 | +bugfix/* - Bug 修复分支 | ||
| 18 | +hotfix/* - 紧急修复分支 | ||
| 19 | +``` | ||
| 20 | + | ||
| 21 | +### 分支命名 | ||
| 22 | + | ||
| 23 | +```bash | ||
| 24 | +# 功能开发 | ||
| 25 | +feature/功能名称 | ||
| 26 | +feature/user-profile | ||
| 27 | +feature/points-system | ||
| 28 | + | ||
| 29 | +# Bug 修复 | ||
| 30 | +bugfix/问题描述 | ||
| 31 | +bugfix/login-error | ||
| 32 | + | ||
| 33 | +# 紧急修复 | ||
| 34 | +hotfix/严重问题 | ||
| 35 | +hotfix/security-fix | ||
| 36 | +``` | ||
| 37 | + | ||
| 38 | +--- | ||
| 39 | + | ||
| 40 | +## 🔄 工作流程 | ||
| 41 | + | ||
| 42 | +### 1. 开始新功能 | ||
| 43 | + | ||
| 44 | +```bash | ||
| 45 | +# 从 develop 创建功能分支 | ||
| 46 | +git checkout develop | ||
| 47 | +git pull origin develop | ||
| 48 | +git checkout -b feature/your-feature-name | ||
| 49 | + | ||
| 50 | +# 开发... | ||
| 51 | +git add . | ||
| 52 | +git commit -m "feat: 添加用户头像上传功能" | ||
| 53 | + | ||
| 54 | +# 推送到远程 | ||
| 55 | +git push origin feature/your-feature-name | ||
| 56 | +``` | ||
| 57 | + | ||
| 58 | +### 2. 完成 Bug 修复 | ||
| 59 | + | ||
| 60 | +```bash | ||
| 61 | +# 从 develop 创建修复分支 | ||
| 62 | +git checkout develop | ||
| 63 | +git pull origin develop | ||
| 64 | +git checkout -b bugfix/login-error | ||
| 65 | + | ||
| 66 | +# 修复... | ||
| 67 | +git add . | ||
| 68 | +git commit -m "fix: 修复登录页面验证码错误" | ||
| 69 | + | ||
| 70 | +# 推送并创建 PR | ||
| 71 | +git push origin bugfix/login-error | ||
| 72 | +``` | ||
| 73 | + | ||
| 74 | +### 3. 合并到 develop | ||
| 75 | + | ||
| 76 | +```bash | ||
| 77 | +# 创建 Pull Request(GitHub/GitLab) | ||
| 78 | +# 或 Merge Request(GitLab) | ||
| 79 | + | ||
| 80 | +# 审查通过后合并 | ||
| 81 | +git checkout develop | ||
| 82 | +git pull origin develop | ||
| 83 | +git branch -d feature/your-feature-name | ||
| 84 | +``` | ||
| 85 | + | ||
| 86 | +--- | ||
| 87 | + | ||
| 88 | +## 📝 Commit Message 规范 | ||
| 89 | + | ||
| 90 | +### 格式 | ||
| 91 | + | ||
| 92 | +``` | ||
| 93 | +<type>(<scope>): <subject> | ||
| 94 | + | ||
| 95 | +<body> | ||
| 96 | + | ||
| 97 | +<footer> | ||
| 98 | +``` | ||
| 99 | + | ||
| 100 | +### Type(类型) | ||
| 101 | + | ||
| 102 | +| 类型 | 说明 | 示例 | | ||
| 103 | +|------|------|------| | ||
| 104 | +| `feat` | 新功能 | feat(user): 添加用户头像上传 | | ||
| 105 | +| `fix` | Bug 修复 | fix(login): 修复验证码倒计时 | | ||
| 106 | +| `docs` | 文档更新 | docs(readme): 更新安装说明 | | ||
| 107 | +| `style` | 代码格式(不影响功能) | style(component): 统一代码缩进 | | ||
| 108 | +| `refactor` | 重构(不是新功能也不是修复) | refactor(api): 重构请求拦截器 | | ||
| 109 | +| `perf` | 性能优化 | perf(list): 优化长列表渲染 | | ||
| 110 | +| `test` | 测试相关 | test(utils): 添加工具函数测试 | | ||
| 111 | +| `chore` | 构建/工具链相关 | chore(deps): 升级 Taro 版本 | | ||
| 112 | + | ||
| 113 | +### Scope(范围) | ||
| 114 | + | ||
| 115 | +根据项目自定义: | ||
| 116 | +- `user` - 用户相关 | ||
| 117 | +- `family` - 家庭相关 | ||
| 118 | +- `points` - 积分相关 | ||
| 119 | +- `photo` - 照片相关 | ||
| 120 | +- `api` - API 接口 | ||
| 121 | +- `ui` - UI 组件 | ||
| 122 | +- `config` - 配置文件 | ||
| 123 | + | ||
| 124 | +### Subject(主题) | ||
| 125 | + | ||
| 126 | +- 简短描述(不超过 50 字符) | ||
| 127 | +- 使用中文 | ||
| 128 | +- 不以句号结尾 | ||
| 129 | +- 使用祈使句(如 "添加" 而非 "添加了") | ||
| 130 | + | ||
| 131 | +### 示例 | ||
| 132 | + | ||
| 133 | +``` | ||
| 134 | +feat(user): 添加用户头像上传功能 | ||
| 135 | + | ||
| 136 | +- 实现图片选择功能 | ||
| 137 | +- 添加裁剪和压缩 | ||
| 138 | +- 集成到用户设置页面 | ||
| 139 | + | ||
| 140 | +Closes #123 | ||
| 141 | +``` | ||
| 142 | + | ||
| 143 | +``` | ||
| 144 | +fix(login): 修复验证码倒计时问题 | ||
| 145 | + | ||
| 146 | +- 修复页面切换后倒计时停止 | ||
| 147 | +- 添加 onUnmounted 清理定时器 | ||
| 148 | + | ||
| 149 | +Fixes #456 | ||
| 150 | +``` | ||
| 151 | + | ||
| 152 | +--- | ||
| 153 | + | ||
| 154 | +## 🚫 禁止事项 | ||
| 155 | + | ||
| 156 | +### ❌ 禁止直接提交到 master | ||
| 157 | + | ||
| 158 | +```bash | ||
| 159 | +# 错误 | ||
| 160 | +git checkout master | ||
| 161 | +git commit -m "feat: 新功能" | ||
| 162 | + | ||
| 163 | +# 正确 | ||
| 164 | +git checkout develop | ||
| 165 | +git commit -m "feat: 新功能" | ||
| 166 | +# 创建 PR 合并到 master | ||
| 167 | +``` | ||
| 168 | + | ||
| 169 | +### ❌ 禁止推送未测试的代码 | ||
| 170 | + | ||
| 171 | +```bash | ||
| 172 | +# 提交前必须测试 | ||
| 173 | +pnpm run lint # 代码检查 | ||
| 174 | +pnpm run test # 运行测试 | ||
| 175 | +``` | ||
| 176 | + | ||
| 177 | +### ❌ 禁止包含敏感信息 | ||
| 178 | + | ||
| 179 | +```bash | ||
| 180 | +# 检查是否有敏感信息 | ||
| 181 | +git diff | grep -i "password\|token\|secret\|api_key" | ||
| 182 | +``` | ||
| 183 | + | ||
| 184 | +--- | ||
| 185 | + | ||
| 186 | +## ✅ 提交前检查清单 | ||
| 187 | + | ||
| 188 | +在提交代码前,确认: | ||
| 189 | + | ||
| 190 | +- [ ] 代码通过 ESLint 检查 | ||
| 191 | +- [ ] 代码通过 Prettier 格式化 | ||
| 192 | +- [ ] 测试通过(如果有) | ||
| 193 | +- [ ] 无 console.log 或 debugger | ||
| 194 | +- [ ] 无注释掉的代码 | ||
| 195 | +- [ ] 代码注释完整 | ||
| 196 | +- [ ] Commit Message 符合规范 | ||
| 197 | +- [ ] CHANGELOG.md 已更新(如有重大变更) | ||
| 198 | + | ||
| 199 | +--- | ||
| 200 | + | ||
| 201 | +## 🔧 Git Hooks 配置(待添加) | ||
| 202 | + | ||
| 203 | +### Husky + lint-staged | ||
| 204 | + | ||
| 205 | +```bash | ||
| 206 | +# 安装依赖 | ||
| 207 | +pnpm add -D husky lint-staged | ||
| 208 | + | ||
| 209 | +# 初始化 Husky | ||
| 210 | +pnpm prepare | ||
| 211 | + | ||
| 212 | +# 配置 lint-staged | ||
| 213 | +``` | ||
| 214 | + | ||
| 215 | +### .husky/pre-commit | ||
| 216 | + | ||
| 217 | +```bash | ||
| 218 | +#!/bin/sh | ||
| 219 | +. "$(dirname "$0")/_/husky.sh" | ||
| 220 | + | ||
| 221 | +# 代码检查 | ||
| 222 | +pnpm lint | ||
| 223 | + | ||
| 224 | +# 运行测试 | ||
| 225 | +pnpm test | ||
| 226 | +``` | ||
| 227 | + | ||
| 228 | +### package.json | ||
| 229 | + | ||
| 230 | +```json | ||
| 231 | +{ | ||
| 232 | + "scripts": { | ||
| 233 | + "prepare": "husky install" | ||
| 234 | + }, | ||
| 235 | + "lint-staged": { | ||
| 236 | + "*.{js,vue}": [ | ||
| 237 | + "eslint --fix", | ||
| 238 | + "prettier --write" | ||
| 239 | + ] | ||
| 240 | + } | ||
| 241 | +} | ||
| 242 | +``` | ||
| 243 | + | ||
| 244 | +--- | ||
| 245 | + | ||
| 246 | +## 📚 参考资源 | ||
| 247 | + | ||
| 248 | +- [Conventional Commits](https://www.conventionalcommits.org/) | ||
| 249 | +- [Angular Commit Guidelines](https://github.com/angular/angular/blob/master/CONTRIBUTING.md#commit) | ||
| 250 | +- [Commitlint](https://commitlint.js.org/) | ||
| 251 | + | ||
| 252 | +--- | ||
| 253 | + | ||
| 254 | +**维护者**: 开发团队 | ||
| 255 | +**最后更新**: 2026-02-05 |
docs/INITIALIZATION-SUMMARY.md
0 → 100644
| 1 | +# 项目初始化完成总结 | ||
| 2 | + | ||
| 3 | +**完成时间**: 2026-02-05 | ||
| 4 | + | ||
| 5 | +--- | ||
| 6 | + | ||
| 7 | +## ✅ 已完成的工作 | ||
| 8 | + | ||
| 9 | +### 1. 文档系统建立 | ||
| 10 | + | ||
| 11 | +#### 核心文档 | ||
| 12 | +- ✅ **docs/CHANGELOG.md** - 项目变更日志 | ||
| 13 | +- ✅ **docs/PROJECT-STATUS.md** - 项目状态报告 | ||
| 14 | +- ✅ **docs/DEVELOPMENT-GUIDE.md** - 开发指南 | ||
| 15 | +- ✅ **docs/CODING-STANDARDS.md** - 代码规范 | ||
| 16 | +- ✅ **docs/GIT-WORKFLOW.md** - Git 工作流规范 | ||
| 17 | +- ✅ **docs/api-integration-log.md** - API 集成日志 | ||
| 18 | +- ✅ **docs/lessons-learned.md** - 经验教训总结 | ||
| 19 | +- ✅ **docs/README-TEMPLATE.md** - README 模板(可用于替换根目录的简单版本) | ||
| 20 | + | ||
| 21 | +#### 目录结构 | ||
| 22 | +``` | ||
| 23 | +docs/ | ||
| 24 | +├── CHANGELOG.md # 变更日志 | ||
| 25 | +├── PROJECT-STATUS.md # 项目状态 | ||
| 26 | +├── DEVELOPMENT-GUIDE.md # 开发指南 | ||
| 27 | +├── CODING-STANDARDS.md # 代码规范 | ||
| 28 | +├── GIT-WORKFLOW.md # Git 工作流 | ||
| 29 | +├── api-integration-log.md # API 日志 | ||
| 30 | +├── lessons-learned.md # 经验教训 | ||
| 31 | +├── README-TEMPLATE.md # README 模板 | ||
| 32 | +├── reports/ # 代码审查和分析报告 | ||
| 33 | +│ └── YYYY-MM-DD/ # 按日期组织 | ||
| 34 | +└── tasks/ # 任务管理 | ||
| 35 | + ├── done/ # 已完成任务 | ||
| 36 | + ├── plan/ # 进行中任务 | ||
| 37 | + └── ideas/ # 需求池 | ||
| 38 | +``` | ||
| 39 | + | ||
| 40 | +### 2. 测试框架配置 | ||
| 41 | + | ||
| 42 | +#### 测试工具 | ||
| 43 | +- ✅ **vitest.config.js** - Vitest 测试配置 | ||
| 44 | +- ✅ **test/setup.js** - 测试环境设置(Mock Taro API、wx API、axios) | ||
| 45 | +- ✅ **src/utils/tools.test.js** - 工具函数测试示例 | ||
| 46 | +- ✅ **test/components/PrimaryButton.test.js** - 组件测试示例 | ||
| 47 | + | ||
| 48 | +#### 测试脚本(已添加到 package.json) | ||
| 49 | +```bash | ||
| 50 | +pnpm run test # 运行测试 | ||
| 51 | +pnpm run test:ui # 测试 UI 界面 | ||
| 52 | +pnpm run test:coverage # 测试覆盖率 | ||
| 53 | +pnpm run test:run # 运行测试(CI 模式) | ||
| 54 | +``` | ||
| 55 | + | ||
| 56 | +### 3. 代码质量工具 | ||
| 57 | + | ||
| 58 | +#### ESLint 配置 | ||
| 59 | +- ✅ **.eslintrc.js** - 完善的 ESLint 配置 | ||
| 60 | + - 扩展 `taro/vue3` 规则 | ||
| 61 | + - 自定义规则(no-console, prefer-const, eqeqeq 等) | ||
| 62 | + - Taro 全局变量配置(wx, Taro) | ||
| 63 | + | ||
| 64 | +#### Prettier 配置 | ||
| 65 | +- ✅ **.prettierrc** - Prettier 格式化配置 | ||
| 66 | +- ✅ **.prettierignore** - 忽略文件配置 | ||
| 67 | + | ||
| 68 | +#### 脚本命令 | ||
| 69 | +```bash | ||
| 70 | +pnpm run lint # ESLint 检查 | ||
| 71 | +pnpm run format # Prettier 格式化 | ||
| 72 | +``` | ||
| 73 | + | ||
| 74 | +### 4. 项目配置优化 | ||
| 75 | + | ||
| 76 | +#### package.json 更新 | ||
| 77 | +- ✅ 添加测试相关依赖: | ||
| 78 | + - `@vitejs/plugin-vue` | ||
| 79 | + - `@vitest/coverage-v8` | ||
| 80 | + - `@vue/test-utils` | ||
| 81 | + - `vitest` | ||
| 82 | + - `jsdom` | ||
| 83 | + - `prettier` | ||
| 84 | +- ✅ 添加测试和格式化脚本 | ||
| 85 | + | ||
| 86 | +#### .gitignore 优化 | ||
| 87 | +- ✅ 添加测试覆盖率目录(coverage/) | ||
| 88 | +- ✅ 添加缓存文件(.cache, .tsbuildinfo) | ||
| 89 | +- ✅ 添加日志文件(*.log, logs/) | ||
| 90 | +- ✅ 添加编辑器配置(.vscode/, .idea/) | ||
| 91 | + | ||
| 92 | +--- | ||
| 93 | + | ||
| 94 | +## 📦 后续需要安装的依赖 | ||
| 95 | + | ||
| 96 | +运行以下命令安装新增的依赖: | ||
| 97 | + | ||
| 98 | +```bash | ||
| 99 | +# 安装测试依赖 | ||
| 100 | +pnpm add -D vitest @vitejs/plugin-vue @vitest/coverage-v8 @vue/test-utils jsdom | ||
| 101 | + | ||
| 102 | +# 安装代码质量工具 | ||
| 103 | +pnpm add -D prettier | ||
| 104 | +``` | ||
| 105 | + | ||
| 106 | +--- | ||
| 107 | + | ||
| 108 | +## 🎯 后续建议 | ||
| 109 | + | ||
| 110 | +### 短期(1-2 周) | ||
| 111 | + | ||
| 112 | +#### 1. 添加 Git Hooks(推荐) | ||
| 113 | + | ||
| 114 | +```bash | ||
| 115 | +# 安装 Husky 和 lint-staged | ||
| 116 | +pnpm add -D husky lint-staged | ||
| 117 | + | ||
| 118 | +# 初始化 Husky | ||
| 119 | +pnpm prepare | ||
| 120 | + | ||
| 121 | +# 配置 pre-commit hook | ||
| 122 | +``` | ||
| 123 | + | ||
| 124 | +**.husky/pre-commit**: | ||
| 125 | +```bash | ||
| 126 | +#!/bin/sh | ||
| 127 | +. "$(dirname "$0")/_/husky.sh" | ||
| 128 | + | ||
| 129 | +pnpm lint | ||
| 130 | +pnpm test:run | ||
| 131 | +``` | ||
| 132 | + | ||
| 133 | +**package.json**: | ||
| 134 | +```json | ||
| 135 | +{ | ||
| 136 | + "lint-staged": { | ||
| 137 | + "*.{js,vue}": [ | ||
| 138 | + "eslint --fix", | ||
| 139 | + "prettier --write" | ||
| 140 | + ] | ||
| 141 | + } | ||
| 142 | +} | ||
| 143 | +``` | ||
| 144 | + | ||
| 145 | +#### 2. 替换根目录 README | ||
| 146 | + | ||
| 147 | +```bash | ||
| 148 | +# 使用 docs/README-TEMPLATE.md 替换根目录的简单版本 | ||
| 149 | +cp docs/README-TEMPLATE.md ../README.md | ||
| 150 | +``` | ||
| 151 | + | ||
| 152 | +#### 3. 编写核心功能测试 | ||
| 153 | + | ||
| 154 | +优先为以下模块编写测试: | ||
| 155 | +- `src/utils/tools.js` - 工具函数 | ||
| 156 | +- `src/components/PrimaryButton.vue` - 基础组件 | ||
| 157 | +- `src/api/user.js` - 用户 API | ||
| 158 | + | ||
| 159 | +### 中期(1 个月) | ||
| 160 | + | ||
| 161 | +#### 1. 添加 E2E 测试 | ||
| 162 | + | ||
| 163 | +```bash | ||
| 164 | +# 安装 Playwright | ||
| 165 | +pnpm add -D @playwright/test | ||
| 166 | + | ||
| 167 | +# 创建 E2E 测试 | ||
| 168 | +mkdir -p e2e | ||
| 169 | +``` | ||
| 170 | + | ||
| 171 | +**e2e/login.spec.js**: | ||
| 172 | +```javascript | ||
| 173 | +import { test, expect } from '@playwright/test' | ||
| 174 | + | ||
| 175 | +test('should login successfully', async ({ page }) => { | ||
| 176 | + await page.goto('/pages/login/index') | ||
| 177 | + await page.fill('input[name="phone"]', '13800138000') | ||
| 178 | + await page.click('button[type="submit"]') | ||
| 179 | + await expect(page).toHaveURL('/pages/dashboard/index') | ||
| 180 | +}) | ||
| 181 | +``` | ||
| 182 | + | ||
| 183 | +#### 2. 添加 CI/CD 配置 | ||
| 184 | + | ||
| 185 | +创建 `.github/workflows/ci.yml`: | ||
| 186 | +```yaml | ||
| 187 | +name: CI | ||
| 188 | + | ||
| 189 | +on: [push, pull_request] | ||
| 190 | + | ||
| 191 | +jobs: | ||
| 192 | + test: | ||
| 193 | + runs-on: ubuntu-latest | ||
| 194 | + steps: | ||
| 195 | + - uses: actions/checkout@v3 | ||
| 196 | + - uses: pnpm/action-setup@v2 | ||
| 197 | + - uses: actions/setup-node@v3 | ||
| 198 | + - run: pnpm install | ||
| 199 | + - run: pnpm run lint | ||
| 200 | + - run: pnpm run test:run | ||
| 201 | + - run: pnpm run build:weapp | ||
| 202 | +``` | ||
| 203 | + | ||
| 204 | +#### 3. 性能监控 | ||
| 205 | + | ||
| 206 | +```bash | ||
| 207 | +# 安装 web-vitals | ||
| 208 | +pnpm add web-vitals | ||
| 209 | +``` | ||
| 210 | + | ||
| 211 | +在关键页面添加性能监控: | ||
| 212 | +```javascript | ||
| 213 | +import { onLCP, onFID, onCLS } from 'web-vitals' | ||
| 214 | + | ||
| 215 | +onLCP(console.log) | ||
| 216 | +onFID(console.log) | ||
| 217 | +onCLS(console.log) | ||
| 218 | +``` | ||
| 219 | + | ||
| 220 | +### 长期(3 个月) | ||
| 221 | + | ||
| 222 | +#### 1. TypeScript 迁移(可选) | ||
| 223 | + | ||
| 224 | +```bash | ||
| 225 | +# 项目已配置 TypeScript(tsconfig.json) | ||
| 226 | +# 可以逐步迁移 .js 文件到 .ts | ||
| 227 | +``` | ||
| 228 | + | ||
| 229 | +#### 2. 组件库文档化 | ||
| 230 | + | ||
| 231 | +```bash | ||
| 232 | +# 安装文档工具 | ||
| 233 | +pnpm add -D vitepress | ||
| 234 | +``` | ||
| 235 | + | ||
| 236 | +创建组件库文档站点。 | ||
| 237 | + | ||
| 238 | +#### 3. 监控和错误追踪 | ||
| 239 | + | ||
| 240 | +集成错误监控服务(如 Sentry)。 | ||
| 241 | + | ||
| 242 | +--- | ||
| 243 | + | ||
| 244 | +## 📚 文档使用指南 | ||
| 245 | + | ||
| 246 | +### 开发前必读 | ||
| 247 | + | ||
| 248 | +1. **CLAUDE.md** - 项目完整指南 | ||
| 249 | +2. **DEVELOPMENT-GUIDE.md** - 开发规范和最佳实践 | ||
| 250 | +3. **CODING-STANDARDS.md** - 代码风格和命名规范 | ||
| 251 | + | ||
| 252 | +### 开发过程中 | ||
| 253 | + | ||
| 254 | +1. **GIT-WORKFLOW.md** - Git 分支和提交规范 | ||
| 255 | +2. **lessons-learned.md** - 避免重复踩坑 | ||
| 256 | +3. **api-integration-log.md** - API 接口文档 | ||
| 257 | + | ||
| 258 | +### 代码审查 | ||
| 259 | + | ||
| 260 | +1. **CODING-STANDARDS.md** - 代码检查清单 | ||
| 261 | +2. **PROJECT-STATUS.md** - 了解项目规模和架构 | ||
| 262 | + | ||
| 263 | +### 项目维护 | ||
| 264 | + | ||
| 265 | +1. **CHANGELOG.md** - 更新变更日志 | ||
| 266 | +2. **docs/reports/** - 存放代码审查和性能分析报告 | ||
| 267 | + | ||
| 268 | +--- | ||
| 269 | + | ||
| 270 | +## 🎉 总结 | ||
| 271 | + | ||
| 272 | +通过本次初始化,项目已具备: | ||
| 273 | + | ||
| 274 | +1. ✅ **完善的文档体系** - 8 个核心文档 + 目录结构 | ||
| 275 | +2. ✅ **测试框架配置** - Vitest + 测试示例 | ||
| 276 | +3. ✅ **代码质量工具** - ESLint + Prettier | ||
| 277 | +4. ✅ **规范的工作流** - Git 规范 + 代码规范 | ||
| 278 | +5. ✅ **经验教训积累** - lessons-learned.md | ||
| 279 | + | ||
| 280 | +现在可以开始高效开发了!🚀 | ||
| 281 | + | ||
| 282 | +--- | ||
| 283 | + | ||
| 284 | +## 📞 需要帮助? | ||
| 285 | + | ||
| 286 | +- 查看项目文档:`docs/` 目录 | ||
| 287 | +- 查看项目指南:`CLAUDE.md` | ||
| 288 | +- 查看经验教训:`docs/lessons-learned.md` | ||
| 289 | + | ||
| 290 | +--- | ||
| 291 | + | ||
| 292 | +**初始化完成日期**: 2026-02-05 | ||
| 293 | +**维护者**: Claude Code |
docs/PROJECT-STATUS.md
0 → 100644
| 1 | +# 项目状态报告 | ||
| 2 | + | ||
| 3 | +**更新时间**: 2026-02-05 | ||
| 4 | +**项目名称**: lls_program (老来赛) | ||
| 5 | +**技术栈**: Taro 4.1.7 + Vue 3.3 + NutUI 4.3.13 | ||
| 6 | + | ||
| 7 | +--- | ||
| 8 | + | ||
| 9 | +## 📋 项目概述 | ||
| 10 | + | ||
| 11 | +**老来赛** 是一个基于 Taro 4 + Vue 3 的微信小程序,专注于家庭活动和积分奖励管理。 | ||
| 12 | + | ||
| 13 | +**核心功能**: | ||
| 14 | +- 家庭管理(创建、加入、编辑) | ||
| 15 | +- 积分系统(获取、兑换、排行榜) | ||
| 16 | +- 打卡活动(上传照片、分享海报) | ||
| 17 | +- 优惠券系统 | ||
| 18 | + | ||
| 19 | +--- | ||
| 20 | + | ||
| 21 | +## 🎯 开发环境状态 | ||
| 22 | + | ||
| 23 | +### ✅ 已配置 | ||
| 24 | + | ||
| 25 | +| 项目 | 状态 | 说明 | | ||
| 26 | +|------|------|------| | ||
| 27 | +| **构建工具** | ✅ 完成 | Webpack 5 + Taro CLI | | ||
| 28 | +| **UI 组件库** | ✅ 完成 | NutUI Taro 4.3.13(自动导入) | | ||
| 29 | +| **样式方案** | ✅ 完成 | TailwindCSS 3.4 + Less | | ||
| 30 | +| **状态管理** | ✅ 完成 | Pinia 3.0 + taro-plugin-pinia | | ||
| 31 | +| **HTTP 客户端** | ✅ 完成 | axios-miniprogram 2.7.2 | | ||
| 32 | +| **路径别名** | ✅ 完成 | @/utils、@/components 等 | | ||
| 33 | +| **代码规范** | ✅ 完成 | ESLint + EditorConfig | | ||
| 34 | +| **认证系统** | ✅ 完成 | sessionid 认证(静默授权) | | ||
| 35 | + | ||
| 36 | +### ⚠️ 待配置 | ||
| 37 | + | ||
| 38 | +| 项目 | 优先级 | 建议工具 | 说明 | | ||
| 39 | +|------|--------|----------|------| | ||
| 40 | +| **单元测试** | 🔴 高 | Vitest | 测试工具函数、Composables | | ||
| 41 | +| **E2E 测试** | 🟡 中 | Playwright | 关键流程测试 | | ||
| 42 | +| **Git Hooks** | 🟡 中 | Husky + lint-staged | 提交前自动检查 | | ||
| 43 | +| **CI/CD** | 🟢 低 | GitHub Actions | 自动化部署 | | ||
| 44 | + | ||
| 45 | +--- | ||
| 46 | + | ||
| 47 | +## 📊 项目规模统计 | ||
| 48 | + | ||
| 49 | +| 类别 | 数量 | | ||
| 50 | +|------|------| | ||
| 51 | +| **页面** | 36 个 | | ||
| 52 | +| **组件** | 22 个 | | ||
| 53 | +| **API 模块** | 12 个 | | ||
| 54 | +| **Store** | 4 个 | | ||
| 55 | +| **工具函数** | 7 个 | | ||
| 56 | + | ||
| 57 | +--- | ||
| 58 | + | ||
| 59 | +## 🏗️ 架构特点 | ||
| 60 | + | ||
| 61 | +### 双设计宽度配置 | ||
| 62 | + | ||
| 63 | +```javascript | ||
| 64 | +// config/index.js | ||
| 65 | +designWidth (input) { | ||
| 66 | + // NutUI 组件:375px | ||
| 67 | + if (input?.file?.indexOf('@nutui') > -1) { | ||
| 68 | + return 375 | ||
| 69 | + } | ||
| 70 | + // 其他内容:750px(Taro 标准) | ||
| 71 | + return 750 | ||
| 72 | +} | ||
| 73 | +``` | ||
| 74 | + | ||
| 75 | +### 认证机制 | ||
| 76 | + | ||
| 77 | +- **SessionID 存储**:`wx.storage` 中的 `sessionid` | ||
| 78 | +- **请求拦截器**:自动注入 `config.headers.cookie` | ||
| 79 | +- **401 处理**:自动清除 sessionid 并跳转登录 | ||
| 80 | +- **静默授权**:支持无感知登录流程 | ||
| 81 | + | ||
| 82 | +### API 响应格式 | ||
| 83 | + | ||
| 84 | +```javascript | ||
| 85 | +{ | ||
| 86 | + code: 1, // 1 = 成功 | ||
| 87 | + data: {...}, // 响应数据 | ||
| 88 | + msg: "message" // 消息 | ||
| 89 | +} | ||
| 90 | +``` | ||
| 91 | + | ||
| 92 | +**重要**:检查 `res.code === 1` 判断成功(不是 `res.code`) | ||
| 93 | + | ||
| 94 | +--- | ||
| 95 | + | ||
| 96 | +## 📁 目录结构 | ||
| 97 | + | ||
| 98 | +``` | ||
| 99 | +src/ | ||
| 100 | +├── api/ # API 接口(按业务领域组织) | ||
| 101 | +│ ├── common.js # 短信验证码、上传凭证 | ||
| 102 | +│ ├── user.js # 用户认证和个人信息 | ||
| 103 | +│ ├── family.js # 家庭管理 | ||
| 104 | +│ ├── points.js # 积分/奖励系统 | ||
| 105 | +│ ├── photo.js # 照片/媒体处理 | ||
| 106 | +│ └── ... | ||
| 107 | +├── components/ # 可复用组件(22 个) | ||
| 108 | +├── composables/ # Vue 3 组合式函数 | ||
| 109 | +├── pages/ # Taro 页面(36 个) | ||
| 110 | +├── stores/ # Pinia 状态管理 | ||
| 111 | +├── utils/ # 工具函数 | ||
| 112 | +├── assets/ # 静态资源 | ||
| 113 | +├── app.config.js # Taro 应用配置 | ||
| 114 | +├── app.js # 应用入口 | ||
| 115 | +└── app.less # 全局样式 | ||
| 116 | +``` | ||
| 117 | + | ||
| 118 | +--- | ||
| 119 | + | ||
| 120 | +## 🔧 开发命令 | ||
| 121 | + | ||
| 122 | +```bash | ||
| 123 | +# 安装依赖 | ||
| 124 | +pnpm install | ||
| 125 | + | ||
| 126 | +# 开发(微信小程序) | ||
| 127 | +pnpm run dev:weapp | ||
| 128 | + | ||
| 129 | +# 开发(H5) | ||
| 130 | +pnpm run dev:h5 | ||
| 131 | + | ||
| 132 | +# 生产构建 | ||
| 133 | +pnpm run build:weapp | ||
| 134 | + | ||
| 135 | +# 代码检查 | ||
| 136 | +pnpm run lint | ||
| 137 | +``` | ||
| 138 | + | ||
| 139 | +--- | ||
| 140 | + | ||
| 141 | +## 📚 已有文档 | ||
| 142 | + | ||
| 143 | +| 文档 | 路径 | 说明 | | ||
| 144 | +|------|------|------| | ||
| 145 | +| **项目指南** | CLAUDE.md | 完整的开发指南 | | ||
| 146 | +| **迁移指南** | 快速迁移指南.md | 静默授权功能迁移 | | ||
| 147 | +| **合规分析** | 微信小程序审核合规性分析报告.md | 小程序审核要点 | | ||
| 148 | + | ||
| 149 | +--- | ||
| 150 | + | ||
| 151 | +## ⚡ 性能优化建议 | ||
| 152 | + | ||
| 153 | +### 已实施 | ||
| 154 | + | ||
| 155 | +- ✅ NutUI 组件自动导入(按需加载) | ||
| 156 | +- ✅ TailwindCSS Preflight 禁用(小程序不需要) | ||
| 157 | +- ✅ 路径别名配置(避免复杂相对路径) | ||
| 158 | + | ||
| 159 | +### 待优化 | ||
| 160 | + | ||
| 161 | +- ⚠️ 图片 CDN 优化(已使用 cdn.ipadbiz.cn,可添加参数优化) | ||
| 162 | +- ⚠️ 长列表虚拟滚动(如有大量数据列表) | ||
| 163 | +- ⚠️ 路由懒加载(页面级代码分割) | ||
| 164 | + | ||
| 165 | +--- | ||
| 166 | + | ||
| 167 | +## 🚨 已知问题 | ||
| 168 | + | ||
| 169 | +### 1. 测试缺失 | ||
| 170 | + | ||
| 171 | +**影响**:代码质量无保障,重构风险高 | ||
| 172 | + | ||
| 173 | +**解决方案**: | ||
| 174 | +- 添加 Vitest 进行单元测试 | ||
| 175 | +- 添加 Playwright 进行 E2E 测试 | ||
| 176 | +- 目标覆盖率:> 80% | ||
| 177 | + | ||
| 178 | +### 2. 缺少 CHANGELOG | ||
| 179 | + | ||
| 180 | +**影响**:变更历史不清晰,版本管理混乱 | ||
| 181 | + | ||
| 182 | +**解决方案**:✅ 已创建 docs/CHANGELOG.md | ||
| 183 | + | ||
| 184 | +### 3. 缺少开发规范文档 | ||
| 185 | + | ||
| 186 | +**影响**:团队协作效率低,代码风格不统一 | ||
| 187 | + | ||
| 188 | +**解决方案**:✅ 已创建 docs/DEVELOPMENT-GUIDE.md | ||
| 189 | + | ||
| 190 | +--- | ||
| 191 | + | ||
| 192 | +## 📌 开发注意事项 | ||
| 193 | + | ||
| 194 | +### ❌ 禁止使用 Web API | ||
| 195 | + | ||
| 196 | +```javascript | ||
| 197 | +// 错误 - 会导致小程序崩溃 | ||
| 198 | +window.document.getElementById() | ||
| 199 | +localStorage | ||
| 200 | +window.location.href | ||
| 201 | +fetch() | ||
| 202 | +``` | ||
| 203 | + | ||
| 204 | +### ✅ 必须使用 Taro API | ||
| 205 | + | ||
| 206 | +```javascript | ||
| 207 | +// 正确 | ||
| 208 | +Taro.createSelectorQuery() | ||
| 209 | +Taro.getStorage() | ||
| 210 | +Taro.navigateTo() | ||
| 211 | +Taro.request() | ||
| 212 | +``` | ||
| 213 | + | ||
| 214 | +### 🔑 SessionID 管理 | ||
| 215 | + | ||
| 216 | +```javascript | ||
| 217 | +// 请求拦截器自动注入 | ||
| 218 | +service.interceptors.request.use(config => { | ||
| 219 | + const sessionid = getSessionId() // 从 wx.storage 读取 | ||
| 220 | + if (sessionid) { | ||
| 221 | + config.headers.cookie = sessionid | ||
| 222 | + } | ||
| 223 | + return config | ||
| 224 | +}) | ||
| 225 | +``` | ||
| 226 | + | ||
| 227 | +--- | ||
| 228 | + | ||
| 229 | +## 🎯 下一步计划 | ||
| 230 | + | ||
| 231 | +### 短期(1-2周) | ||
| 232 | + | ||
| 233 | +- [ ] 添加 Vitest 单元测试 | ||
| 234 | +- [ ] 添加 Git Hooks(Husky + lint-staged) | ||
| 235 | +- [ ] 完善核心功能的文档 | ||
| 236 | + | ||
| 237 | +### 中期(1个月) | ||
| 238 | + | ||
| 239 | +- [ ] 添加 Playwright E2E 测试 | ||
| 240 | +- [ ] 性能优化(图片、长列表) | ||
| 241 | +- [ ] CI/CD 配置 | ||
| 242 | + | ||
| 243 | +### 长期(3个月) | ||
| 244 | + | ||
| 245 | +- [ ] TypeScript 迁移(可选) | ||
| 246 | +- [ ] 组件库文档化 | ||
| 247 | +- [ ] 监控和错误追踪 | ||
| 248 | + | ||
| 249 | +--- | ||
| 250 | + | ||
| 251 | +**维护者**: 开发团队 | ||
| 252 | +**最后更新**: 2026-02-05 |
docs/README-TEMPLATE.md
0 → 100644
| 1 | +# 老来赛 (lls_program) | ||
| 2 | + | ||
| 3 | +> 基于 Taro 4 + Vue 3 + NutUI 的微信小程序 - 家庭活动和积分奖励管理系统 | ||
| 4 | + | ||
| 5 | +[](https://docs.taro.zone/) | ||
| 6 | +[](https://cn.vuejs.org/) | ||
| 7 | +[](https://nutui.jd.com/4/taro/) | ||
| 8 | + | ||
| 9 | +--- | ||
| 10 | + | ||
| 11 | +## 📖 项目简介 | ||
| 12 | + | ||
| 13 | +**老来赛** 是一个专注于家庭活动和积分奖励管理的微信小程序,提供以下核心功能: | ||
| 14 | + | ||
| 15 | +- 🏠 **家庭管理** - 创建家庭、邀请成员、管理成员权限 | ||
| 16 | +- 💎 **积分系统** - 获取积分、兑换奖励、排行榜竞争 | ||
| 17 | +- 📸 **打卡活动** - 上传照片、生成海报、分享成就 | ||
| 18 | +- 🎁 **优惠券** - 积分兑换、优惠券管理 | ||
| 19 | + | ||
| 20 | +--- | ||
| 21 | + | ||
| 22 | +## 🚀 快速开始 | ||
| 23 | + | ||
| 24 | +### 环境要求 | ||
| 25 | + | ||
| 26 | +- **Node.js** >= 16.x | ||
| 27 | +- **pnpm** >= 8.x(推荐)或 npm >= 8.x | ||
| 28 | +- **微信开发者工具** [下载地址](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html) | ||
| 29 | + | ||
| 30 | +### 安装依赖 | ||
| 31 | + | ||
| 32 | +```bash | ||
| 33 | +# 使用 pnpm(推荐) | ||
| 34 | +pnpm install | ||
| 35 | + | ||
| 36 | +# 或使用 npm | ||
| 37 | +npm install | ||
| 38 | +``` | ||
| 39 | + | ||
| 40 | +### 开发模式 | ||
| 41 | + | ||
| 42 | +```bash | ||
| 43 | +# 微信小程序 | ||
| 44 | +pnpm run dev:weapp | ||
| 45 | + | ||
| 46 | +# H5 | ||
| 47 | +pnpm run dev:h5 | ||
| 48 | + | ||
| 49 | +# 支付宝小程序 | ||
| 50 | +pnpm run dev:alipay | ||
| 51 | + | ||
| 52 | +# 抖音小程序 | ||
| 53 | +pnpm run dev:tt | ||
| 54 | +``` | ||
| 55 | + | ||
| 56 | +### 构建生产版本 | ||
| 57 | + | ||
| 58 | +```bash | ||
| 59 | +# 微信小程序 | ||
| 60 | +pnpm run build:weapp | ||
| 61 | + | ||
| 62 | +# H5 | ||
| 63 | +pnpm run build:h5 | ||
| 64 | +``` | ||
| 65 | + | ||
| 66 | +### 在微信开发者工具中打开 | ||
| 67 | + | ||
| 68 | +1. 打开微信开发者工具 | ||
| 69 | +2. 导入项目,选择 `dist/` 目录 | ||
| 70 | +3. AppID 使用测试号或自己的 AppID | ||
| 71 | + | ||
| 72 | +--- | ||
| 73 | + | ||
| 74 | +## 📚 文档导航 | ||
| 75 | + | ||
| 76 | +### 核心文档 | ||
| 77 | + | ||
| 78 | +- **[CLAUDE.md](../CLAUDE.md)** - 完整的项目开发指南 | ||
| 79 | +- **[项目状态报告](PROJECT-STATUS.md)** - 项目当前状态和规模 | ||
| 80 | +- **[开发指南](DEVELOPMENT-GUIDE.md)** - 开发规范和最佳实践 | ||
| 81 | +- **[代码规范](CODING-STANDARDS.md)** - 命名、注释、测试规范 | ||
| 82 | +- **[Git 工作流](GIT-WORKFLOW.md)** - 分支策略和提交规范 | ||
| 83 | + | ||
| 84 | +### 技术文档 | ||
| 85 | + | ||
| 86 | +- **[API 集成日志](api-integration-log.md)** - API 接口文档和集成经验 | ||
| 87 | +- **[快速迁移指南](../快速迁移指南.md)** - 静默授权功能迁移 | ||
| 88 | +- **[微信小程序审核合规性分析报告](../微信小程序审核合规性分析报告.md)** - 合规性要点 | ||
| 89 | + | ||
| 90 | +--- | ||
| 91 | + | ||
| 92 | +## 🛠️ 技术栈 | ||
| 93 | + | ||
| 94 | +### 核心框架 | ||
| 95 | + | ||
| 96 | +- **Taro 4.1.7** - 跨平台小程序开发框架 | ||
| 97 | +- **Vue 3.3** - 渐进式 JavaScript 框架 | ||
| 98 | +- **Pinia 3.0** - Vue 3 状态管理 | ||
| 99 | + | ||
| 100 | +### UI 组件 | ||
| 101 | + | ||
| 102 | +- **NutUI Taro 4.3.13** - 京东 Vue 3 移动端组件库(自动导入) | ||
| 103 | + | ||
| 104 | +### 样式方案 | ||
| 105 | + | ||
| 106 | +- **TailwindCSS 3.4** - 原子化 CSS 框架 | ||
| 107 | +- **Less** - CSS 预处理器 | ||
| 108 | + | ||
| 109 | +### HTTP 客户端 | ||
| 110 | + | ||
| 111 | +- **axios-miniprogram 2.7.2** - 小程序 HTTP 客户端 | ||
| 112 | + | ||
| 113 | +--- | ||
| 114 | + | ||
| 115 | +## 📁 项目结构 | ||
| 116 | + | ||
| 117 | +``` | ||
| 118 | +src/ | ||
| 119 | +├── api/ # API 接口(按业务领域组织) | ||
| 120 | +├── assets/ # 静态资源(图片、样式) | ||
| 121 | +├── components/ # 可复用组件(22 个) | ||
| 122 | +├── composables/ # Vue 3 组合式函数 | ||
| 123 | +├── pages/ # Taro 页面(36 个) | ||
| 124 | +│ ├── Dashboard/ # 仪表盘(首页) | ||
| 125 | +│ ├── MyFamily/ # 我的家庭 | ||
| 126 | +│ ├── Activities/ # 活动列表 | ||
| 127 | +│ └── ... | ||
| 128 | +├── stores/ # Pinia 状态管理 | ||
| 129 | +├── utils/ # 工具函数 | ||
| 130 | +│ ├── request.js # HTTP 请求拦截器 | ||
| 131 | +│ ├── authRedirect.js # 静默授权 | ||
| 132 | +│ └── tools.js # 通用工具 | ||
| 133 | +├── app.config.js # Taro 应用配置 | ||
| 134 | +├── app.js # 应用入口 | ||
| 135 | +└── app.less # 全局样式 | ||
| 136 | +``` | ||
| 137 | + | ||
| 138 | +--- | ||
| 139 | + | ||
| 140 | +## 🔑 核心特性 | ||
| 141 | + | ||
| 142 | +### 双设计宽度配置 | ||
| 143 | + | ||
| 144 | +```javascript | ||
| 145 | +// NutUI 组件:375px | ||
| 146 | +// 其他内容:750px(Taro 标准) | ||
| 147 | + | ||
| 148 | +designWidth (input) { | ||
| 149 | + if (input?.file?.indexOf('@nutui') > -1) { | ||
| 150 | + return 375 | ||
| 151 | + } | ||
| 152 | + return 750 | ||
| 153 | +} | ||
| 154 | +``` | ||
| 155 | + | ||
| 156 | +### SessionID 认证机制 | ||
| 157 | + | ||
| 158 | +```javascript | ||
| 159 | +// 请求拦截器自动注入 sessionid | ||
| 160 | +service.interceptors.request.use(config => { | ||
| 161 | + const sessionid = getSessionId() // 从 wx.storage 读取 | ||
| 162 | + if (sessionid) { | ||
| 163 | + config.headers.cookie = sessionid | ||
| 164 | + } | ||
| 165 | + return config | ||
| 166 | +}) | ||
| 167 | +``` | ||
| 168 | + | ||
| 169 | +### 401 自动处理 | ||
| 170 | + | ||
| 171 | +```javascript | ||
| 172 | +// 响应拦截器自动处理 401 | ||
| 173 | +service.interceptors.response.use( | ||
| 174 | + response => response, | ||
| 175 | + error => { | ||
| 176 | + if (error.response?.status === 401) { | ||
| 177 | + // 清除 sessionid 并跳转登录 | ||
| 178 | + wx.removeStorageSync('sessionid') | ||
| 179 | + Taro.reLaunch({ url: '/pages/login/index' }) | ||
| 180 | + } | ||
| 181 | + return Promise.reject(error) | ||
| 182 | + } | ||
| 183 | +) | ||
| 184 | +``` | ||
| 185 | + | ||
| 186 | +--- | ||
| 187 | + | ||
| 188 | +## 📋 开发命令 | ||
| 189 | + | ||
| 190 | +```bash | ||
| 191 | +# 开发 | ||
| 192 | +pnpm run dev:weapp # 微信小程序 | ||
| 193 | +pnpm run dev:h5 # H5 | ||
| 194 | +pnpm run dev:alipay # 支付宝小程序 | ||
| 195 | + | ||
| 196 | +# 构建 | ||
| 197 | +pnpm run build:weapp # 微信小程序 | ||
| 198 | +pnpm run build:h5 # H5 | ||
| 199 | + | ||
| 200 | +# 代码检查(待添加) | ||
| 201 | +pnpm run lint # ESLint 检查 | ||
| 202 | +pnpm run format # Prettier 格式化 | ||
| 203 | + | ||
| 204 | +# 测试(待添加) | ||
| 205 | +pnpm run test # 单元测试 | ||
| 206 | +pnpm run test:e2e # E2E 测试 | ||
| 207 | +``` | ||
| 208 | + | ||
| 209 | +--- | ||
| 210 | + | ||
| 211 | +## 🎯 开发注意事项 | ||
| 212 | + | ||
| 213 | +### ❌ 禁止使用 Web API | ||
| 214 | + | ||
| 215 | +```javascript | ||
| 216 | +// 错误 - 会导致小程序崩溃 | ||
| 217 | +window.document.getElementById() | ||
| 218 | +localStorage | ||
| 219 | +window.location.href | ||
| 220 | +fetch() | ||
| 221 | +``` | ||
| 222 | + | ||
| 223 | +### ✅ 必须使用 Taro API | ||
| 224 | + | ||
| 225 | +```javascript | ||
| 226 | +// 正确 | ||
| 227 | +Taro.createSelectorQuery() | ||
| 228 | +Taro.getStorage() | ||
| 229 | +Taro.navigateTo() | ||
| 230 | +Taro.request() | ||
| 231 | +``` | ||
| 232 | + | ||
| 233 | +### API 响应检查 | ||
| 234 | + | ||
| 235 | +```javascript | ||
| 236 | +// ✅ 正确 - 检查 res.code === 1 | ||
| 237 | +if (res.code === 1) { | ||
| 238 | + // 处理成功 | ||
| 239 | +} | ||
| 240 | + | ||
| 241 | +// ❌ 错误 - 不检查或错误检查 | ||
| 242 | +if (res.code) { // 错误 | ||
| 243 | + // ... | ||
| 244 | +} | ||
| 245 | +``` | ||
| 246 | + | ||
| 247 | +--- | ||
| 248 | + | ||
| 249 | +## 📊 项目统计 | ||
| 250 | + | ||
| 251 | +| 类别 | 数量 | | ||
| 252 | +|------|------| | ||
| 253 | +| **页面** | 36 个 | | ||
| 254 | +| **组件** | 22 个 | | ||
| 255 | +| **API 模块** | 12 个 | | ||
| 256 | +| **Store** | 4 个 | | ||
| 257 | +| **工具函数** | 7 个 | | ||
| 258 | + | ||
| 259 | +--- | ||
| 260 | + | ||
| 261 | +## 🤝 贡献指南 | ||
| 262 | + | ||
| 263 | +欢迎贡献代码!请遵循以下步骤: | ||
| 264 | + | ||
| 265 | +1. Fork 本仓库 | ||
| 266 | +2. 创建功能分支 (`git checkout -b feature/AmazingFeature`) | ||
| 267 | +3. 提交更改 (`git commit -m 'feat: 添加某个功能'`) | ||
| 268 | +4. 推送到分支 (`git push origin feature/AmazingFeature`) | ||
| 269 | +5. 创建 Pull Request | ||
| 270 | + | ||
| 271 | +### Commit Message 规范 | ||
| 272 | + | ||
| 273 | +``` | ||
| 274 | +feat: 新功能 | ||
| 275 | +fix: Bug 修复 | ||
| 276 | +docs: 文档更新 | ||
| 277 | +style: 代码格式(不影响功能) | ||
| 278 | +refactor: 重构 | ||
| 279 | +perf: 性能优化 | ||
| 280 | +test: 测试相关 | ||
| 281 | +chore: 构建/工具链相关 | ||
| 282 | +``` | ||
| 283 | + | ||
| 284 | +详见 [Git 工作流规范](GIT-WORKFLOW.md)。 | ||
| 285 | + | ||
| 286 | +--- | ||
| 287 | + | ||
| 288 | +## 📄 许可证 | ||
| 289 | + | ||
| 290 | +[MIT](LICENSE) | ||
| 291 | + | ||
| 292 | +--- | ||
| 293 | + | ||
| 294 | +## 🔗 相关链接 | ||
| 295 | + | ||
| 296 | +- [Taro 官方文档](https://docs.taro.zone/) | ||
| 297 | +- [Vue 3 官方文档](https://cn.vuejs.org/) | ||
| 298 | +- [NutUI Taro 文档](https://nutui.jd.com/4/taro/) | ||
| 299 | +- [TailwindCSS 文档](https://tailwindcss.com/) | ||
| 300 | +- [微信小程序开发文档](https://developers.weixin.qq.com/miniprogram/dev/framework/) | ||
| 301 | + | ||
| 302 | +--- | ||
| 303 | + | ||
| 304 | +## 📞 联系方式 | ||
| 305 | + | ||
| 306 | +如有问题或建议,请提交 Issue 或 Pull Request。 | ||
| 307 | + | ||
| 308 | +--- | ||
| 309 | + | ||
| 310 | +**开发团队** | **最后更新**: 2026-02-05 |
docs/api-integration-log.md
0 → 100644
| 1 | +# API 集成日志 | ||
| 2 | + | ||
| 3 | +**更新时间**: 2026-02-05 | ||
| 4 | + | ||
| 5 | +本文档记录项目 API 集成的历史和经验教训。 | ||
| 6 | + | ||
| 7 | +--- | ||
| 8 | + | ||
| 9 | +## 📡 API 概述 | ||
| 10 | + | ||
| 11 | +### API 基础信息 | ||
| 12 | + | ||
| 13 | +| 项目 | 值 | | ||
| 14 | +|------|-----| | ||
| 15 | +| **Base URL** | (待配置) | | ||
| 16 | +| **认证方式** | sessionid(存储在 wx.storage) | | ||
| 17 | +| **响应格式** | `{ code, data, msg }` | | ||
| 18 | +| **成功标识** | `code === 1` | | ||
| 19 | + | ||
| 20 | +### API 模块结构 | ||
| 21 | + | ||
| 22 | +``` | ||
| 23 | +src/api/ | ||
| 24 | +├── common.js # 短信验证码、上传凭证 | ||
| 25 | +├── user.js # 用户认证和个人信息 | ||
| 26 | +├── family.js # 家庭管理 | ||
| 27 | +├── points.js # 积分/奖励系统 | ||
| 28 | +├── photo.js # 照片/媒体处理 | ||
| 29 | +├── organization.js # 组织管理 | ||
| 30 | +├── coupon.js # 优惠券 | ||
| 31 | +├── feedback.js # 用户反馈 | ||
| 32 | +├── map.js # 地图相关 | ||
| 33 | +└── fn.js # 通用函数 | ||
| 34 | +``` | ||
| 35 | + | ||
| 36 | +--- | ||
| 37 | + | ||
| 38 | +## 🔑 认证机制 | ||
| 39 | + | ||
| 40 | +### SessionID 管理 | ||
| 41 | + | ||
| 42 | +#### 获取 SessionID | ||
| 43 | + | ||
| 44 | +```javascript | ||
| 45 | +// src/utils/request.js | ||
| 46 | +const getSessionId = () => { | ||
| 47 | + try { | ||
| 48 | + return wx.getStorageSync('sessionid') || '' | ||
| 49 | + } catch (e) { | ||
| 50 | + console.error('获取 sessionid 失败', e) | ||
| 51 | + return '' | ||
| 52 | + } | ||
| 53 | +} | ||
| 54 | +``` | ||
| 55 | + | ||
| 56 | +#### 设置 SessionID | ||
| 57 | + | ||
| 58 | +```javascript | ||
| 59 | +// 登录成功后设置 | ||
| 60 | +const loginSuccess = (sessionid) => { | ||
| 61 | + wx.setStorageSync('sessionid', sessionid) | ||
| 62 | +} | ||
| 63 | + | ||
| 64 | +// 小程序授权成功后设置 | ||
| 65 | +const authSuccess = (sessionid) => { | ||
| 66 | + wx.setStorageSync('sessionid', sessionid) | ||
| 67 | +} | ||
| 68 | +``` | ||
| 69 | + | ||
| 70 | +#### 清除 SessionID | ||
| 71 | + | ||
| 72 | +```javascript | ||
| 73 | +// 401 响应时清除 | ||
| 74 | +const clearSessionId = () => { | ||
| 75 | + wx.removeStorageSync('sessionid') | ||
| 76 | +} | ||
| 77 | + | ||
| 78 | +// 用户登出时清除 | ||
| 79 | +const logout = () => { | ||
| 80 | + wx.removeStorageSync('sessionid') | ||
| 81 | + Taro.reLaunch({ url: '/pages/login/index' }) | ||
| 82 | +} | ||
| 83 | +``` | ||
| 84 | + | ||
| 85 | +### 请求拦截器 | ||
| 86 | + | ||
| 87 | +```javascript | ||
| 88 | +// src/utils/request.js | ||
| 89 | +service.interceptors.request.use(config => { | ||
| 90 | + // 动态获取 sessionid 并设置到请求头 | ||
| 91 | + const sessionid = getSessionId() | ||
| 92 | + if (sessionid) { | ||
| 93 | + config.headers.cookie = sessionid | ||
| 94 | + } | ||
| 95 | + return config | ||
| 96 | +}) | ||
| 97 | +``` | ||
| 98 | + | ||
| 99 | +--- | ||
| 100 | + | ||
| 101 | +## 📋 API 列表 | ||
| 102 | + | ||
| 103 | +### 用户相关 (user.js) | ||
| 104 | + | ||
| 105 | +| API | 说明 | 方法 | | ||
| 106 | +|-----|------|------| | ||
| 107 | +| `miniProgramAuthAPI` | 小程序静默授权 | POST | | ||
| 108 | +| `loginAPI` | 用户登录 | POST | | ||
| 109 | +| `getUserInfoAPI` | 获取用户信息 | GET | | ||
| 110 | +| `updateUserInfoAPI` | 更新用户信息 | POST | | ||
| 111 | + | ||
| 112 | +### 家庭相关 (family.js) | ||
| 113 | + | ||
| 114 | +| API | 说明 | 方法 | | ||
| 115 | +|-----|------|------| | ||
| 116 | +| `createFamilyAPI` | 创建家庭 | POST | | ||
| 117 | +| `joinFamilyAPI` | 加入家庭 | POST | | ||
| 118 | +| `getFamilyInfoAPI` | 获取家庭信息 | GET | | ||
| 119 | +| `updateFamilyAPI` | 更新家庭信息 | POST | | ||
| 120 | + | ||
| 121 | +### 积分相关 (points.js) | ||
| 122 | + | ||
| 123 | +| API | 说明 | 方法 | | ||
| 124 | +|-----|------|------| | ||
| 125 | +| `getPointsListAPI` | 获取积分列表 | GET | | ||
| 126 | +| `addPointsAPI` | 添加积分 | POST | | ||
| 127 | +| `deductPointsAPI` | 扣除积分 | POST | | ||
| 128 | + | ||
| 129 | +### 照片相关 (photo.js) | ||
| 130 | + | ||
| 131 | +| API | 说明 | 方法 | | ||
| 132 | +|-----|------|------| | ||
| 133 | +| `uploadPhotoAPI` | 上传照片 | POST | | ||
| 134 | +| `getPhotoListAPI` | 获取照片列表 | GET | | ||
| 135 | +| `deletePhotoAPI` | 删除照片 | POST | | ||
| 136 | + | ||
| 137 | +--- | ||
| 138 | + | ||
| 139 | +## 🔌 API 集成最佳实践 | ||
| 140 | + | ||
| 141 | +### 1. 统一错误处理 | ||
| 142 | + | ||
| 143 | +```javascript | ||
| 144 | +// ✅ 正确 - 完整的错误处理 | ||
| 145 | +const fetchData = async () => { | ||
| 146 | + loading.value = true | ||
| 147 | + try { | ||
| 148 | + const res = await yourAPI() | ||
| 149 | + if (res.code === 1) { | ||
| 150 | + dataList.value = res.data | ||
| 151 | + } else { | ||
| 152 | + Taro.showToast({ | ||
| 153 | + title: res.msg || '请求失败', | ||
| 154 | + icon: 'none' | ||
| 155 | + }) | ||
| 156 | + } | ||
| 157 | + } catch (err) { | ||
| 158 | + console.error('请求失败:', err) | ||
| 159 | + Taro.showToast({ | ||
| 160 | + title: '网络异常', | ||
| 161 | + icon: 'none' | ||
| 162 | + }) | ||
| 163 | + } finally { | ||
| 164 | + loading.value = false | ||
| 165 | + } | ||
| 166 | +} | ||
| 167 | +``` | ||
| 168 | + | ||
| 169 | +### 2. 检查响应格式 | ||
| 170 | + | ||
| 171 | +```javascript | ||
| 172 | +// ✅ 正确 - 检查 res.code === 1 | ||
| 173 | +if (res.code === 1) { | ||
| 174 | + // 处理成功 | ||
| 175 | +} | ||
| 176 | + | ||
| 177 | +// ❌ 错误 - 不检查或错误检查 | ||
| 178 | +if (res.code) { // 错误:应该检查 === 1 | ||
| 179 | + // ... | ||
| 180 | +} | ||
| 181 | +``` | ||
| 182 | + | ||
| 183 | +### 3. 加载状态管理 | ||
| 184 | + | ||
| 185 | +```javascript | ||
| 186 | +const loading = ref(false) | ||
| 187 | +const error = ref(null) | ||
| 188 | + | ||
| 189 | +const fetchData = async () => { | ||
| 190 | + loading.value = true | ||
| 191 | + error.value = null | ||
| 192 | + try { | ||
| 193 | + const res = await yourAPI() | ||
| 194 | + if (res.code === 1) { | ||
| 195 | + dataList.value = res.data | ||
| 196 | + } else { | ||
| 197 | + error.value = res.msg | ||
| 198 | + } | ||
| 199 | + } catch (err) { | ||
| 200 | + error.value = err.message | ||
| 201 | + } finally { | ||
| 202 | + loading.value = false | ||
| 203 | + } | ||
| 204 | +} | ||
| 205 | +``` | ||
| 206 | + | ||
| 207 | +--- | ||
| 208 | + | ||
| 209 | +## ⚠️ 常见问题 | ||
| 210 | + | ||
| 211 | +### 问题 1: 401 未授权 | ||
| 212 | + | ||
| 213 | +**原因**: sessionid 过期或无效 | ||
| 214 | + | ||
| 215 | +**解决方案**: | ||
| 216 | +```javascript | ||
| 217 | +// 响应拦截器自动处理(已实现) | ||
| 218 | +service.interceptors.response.use( | ||
| 219 | + response => response, | ||
| 220 | + error => { | ||
| 221 | + if (error.response?.status === 401) { | ||
| 222 | + // 清除 sessionid | ||
| 223 | + wx.removeStorageSync('sessionid') | ||
| 224 | + // 跳转登录页 | ||
| 225 | + Taro.reLaunch({ url: '/pages/login/index' }) | ||
| 226 | + } | ||
| 227 | + return Promise.reject(error) | ||
| 228 | + } | ||
| 229 | +) | ||
| 230 | +``` | ||
| 231 | + | ||
| 232 | +### 问题 2: 跨域问题 | ||
| 233 | + | ||
| 234 | +**原因**: 域名未在微信小程序后台配置 | ||
| 235 | + | ||
| 236 | +**解决方案**: | ||
| 237 | +1. 登录微信小程序后台 | ||
| 238 | +2. 开发 → 开发管理 → 开发设置 | ||
| 239 | +3. 配置服务器域名白名单 | ||
| 240 | + | ||
| 241 | +### 问题 3: 请求超时 | ||
| 242 | + | ||
| 243 | +**原因**: 网络慢或服务器响应慢 | ||
| 244 | + | ||
| 245 | +**解决方案**: | ||
| 246 | +```javascript | ||
| 247 | +// 设置合理的超时时间 | ||
| 248 | +const request = axios.create({ | ||
| 249 | + timeout: 10000 // 10 秒 | ||
| 250 | +}) | ||
| 251 | +``` | ||
| 252 | + | ||
| 253 | +--- | ||
| 254 | + | ||
| 255 | +## 📝 API 变更日志 | ||
| 256 | + | ||
| 257 | +### 2026-02-05 | ||
| 258 | + | ||
| 259 | +- ✅ 创建 API 集成日志文档 | ||
| 260 | +- ✅ 整理现有 API 模块 | ||
| 261 | +- ✅ 记录认证机制 | ||
| 262 | + | ||
| 263 | +--- | ||
| 264 | + | ||
| 265 | +## 🔗 相关文档 | ||
| 266 | + | ||
| 267 | +- [CLAUDE.md](../CLAUDE.md) - 项目指南 | ||
| 268 | +- [CODING-STANDARDS.md](CODING-STANDARDS.md) - 代码规范 | ||
| 269 | +- [DEVELOPMENT-GUIDE.md](DEVELOPMENT-GUIDE.md) - 开发指南 | ||
| 270 | + | ||
| 271 | +--- | ||
| 272 | + | ||
| 273 | +**维护者**: 开发团队 | ||
| 274 | +**最后更新**: 2026-02-05 |
docs/lessons-learned.md
0 → 100644
| 1 | +# 经验教训总结 | ||
| 2 | + | ||
| 3 | +**更新时间**: 2026-02-05 | ||
| 4 | + | ||
| 5 | +本文档记录项目开发过程中的经验教训,避免重复踩坑。 | ||
| 6 | + | ||
| 7 | +--- | ||
| 8 | + | ||
| 9 | +## 🔥 核心教训 | ||
| 10 | + | ||
| 11 | +### 1. 小程序 ≠ Web + 适配器 | ||
| 12 | + | ||
| 13 | +**教训**: Taro 不是简单的"Web + 适配器",而是完全不同的开发范式。 | ||
| 14 | + | ||
| 15 | +**问题**: | ||
| 16 | +- 直接使用 `localStorage` 导致小程序崩溃 | ||
| 17 | +- 使用 `window.document` 无法操作 DOM | ||
| 18 | +- 使用 `fetch` 发起请求失败 | ||
| 19 | + | ||
| 20 | +**解决方案**: | ||
| 21 | +```javascript | ||
| 22 | +// ❌ 错误 - 使用 Web API | ||
| 23 | +localStorage.setItem('key', 'value') | ||
| 24 | +window.document.getElementById() | ||
| 25 | +fetch('/api/data') | ||
| 26 | + | ||
| 27 | +// ✅ 正确 - 使用 Taro API | ||
| 28 | +Taro.setStorage({ key: 'key', data: 'value' }) | ||
| 29 | +Taro.createSelectorQuery() | ||
| 30 | +Taro.request({ url: '/api/data' }) | ||
| 31 | +``` | ||
| 32 | + | ||
| 33 | +**预防措施**: | ||
| 34 | +- 开发前仔细阅读 [Taro 官方文档](https://docs.taro.zone/) | ||
| 35 | +- 参考项目 [CLAUDE.md](../CLAUDE.md) 中的 API 使用规范 | ||
| 36 | +- 代码审查时检查是否使用了 Web API | ||
| 37 | + | ||
| 38 | +--- | ||
| 39 | + | ||
| 40 | +### 2. SessionID 认证机制的理解偏差 | ||
| 41 | + | ||
| 42 | +**教训**: SessionID 前端不用于判断登录状态,而是传递给后端的凭证。 | ||
| 43 | + | ||
| 44 | +**问题**: | ||
| 45 | +- 前端通过 sessionid 判断用户是否登录(错误) | ||
| 46 | +- sessionid 过期后前端无法及时感知 | ||
| 47 | + | ||
| 48 | +**正确理解**: | ||
| 49 | +```javascript | ||
| 50 | +// ❌ 错误 - 前端判断登录状态 | ||
| 51 | +const isLoggedIn = !!getSessionId() | ||
| 52 | + | ||
| 53 | +// ✅ 正确 - 后端通过 401 判断 | ||
| 54 | +// 前端只需在请求中携带 sessionid | ||
| 55 | +// 后端返回 401 时前端清除 sessionid 并跳转登录 | ||
| 56 | +``` | ||
| 57 | + | ||
| 58 | +**预防措施**: | ||
| 59 | +- 阅读 [API 集成日志](api-integration-log.md) | ||
| 60 | +- 参考 `src/utils/request.js` 中的认证处理 | ||
| 61 | +- 401 响应由后端判断,前端统一处理 | ||
| 62 | + | ||
| 63 | +--- | ||
| 64 | + | ||
| 65 | +### 3. API 响应格式检查错误 | ||
| 66 | + | ||
| 67 | +**教训**: 必须检查 `res.code === 1`,而不是 `res.code` 或 `res.data`。 | ||
| 68 | + | ||
| 69 | +**问题**: | ||
| 70 | +```javascript | ||
| 71 | +// ❌ 错误 - 不检查或错误检查 | ||
| 72 | +const res = await userAPI() | ||
| 73 | +if (res.code) { // 错误:0 也是 truthy | ||
| 74 | + // 处理成功 | ||
| 75 | +} | ||
| 76 | +``` | ||
| 77 | + | ||
| 78 | +**解决方案**: | ||
| 79 | +```javascript | ||
| 80 | +// ✅ 正确 - 严格检查 === 1 | ||
| 81 | +const res = await userAPI() | ||
| 82 | +if (res.code === 1) { | ||
| 83 | + // 处理成功 | ||
| 84 | +} else { | ||
| 85 | + // 处理业务错误 | ||
| 86 | + Taro.showToast({ title: res.msg, icon: 'none' }) | ||
| 87 | +} | ||
| 88 | +``` | ||
| 89 | + | ||
| 90 | +**预防措施**: | ||
| 91 | +- 所有 API 调用都检查 `res.code === 1` | ||
| 92 | +- 代码审查时重点检查此模式 | ||
| 93 | +- 参考 [代码规范](CODING-STANDARDS.md) | ||
| 94 | + | ||
| 95 | +--- | ||
| 96 | + | ||
| 97 | +### 4. 双设计宽度配置的必要性 | ||
| 98 | + | ||
| 99 | +**教训**: NutUI 组件和普通内容需要不同的设计宽度。 | ||
| 100 | + | ||
| 101 | +**问题**: | ||
| 102 | +- NutUI 组件使用 750px 设计稿时尺寸过大 | ||
| 103 | +- 普通内容使用 375px 设计稿时尺寸过小 | ||
| 104 | + | ||
| 105 | +**解决方案**: | ||
| 106 | +```javascript | ||
| 107 | +// config/index.js | ||
| 108 | +designWidth (input) { | ||
| 109 | + // NutUI 组件:375px | ||
| 110 | + if (input?.file?.indexOf('@nutui') > -1) { | ||
| 111 | + return 375 | ||
| 112 | + } | ||
| 113 | + // 其他内容:750px(Taro 标准) | ||
| 114 | + return 750 | ||
| 115 | +} | ||
| 116 | +``` | ||
| 117 | + | ||
| 118 | +**预防措施**: | ||
| 119 | +- 项目初始化时配置好双设计宽度 | ||
| 120 | +- 新增 NutUI 组件时注意尺寸问题 | ||
| 121 | +- 参考项目配置文件 | ||
| 122 | + | ||
| 123 | +--- | ||
| 124 | + | ||
| 125 | +### 5. 生命周期 Hook 的正确使用 | ||
| 126 | + | ||
| 127 | +**教训**: Taro 页面组件必须使用 Taro 生命周期 Hook,而非 Vue 生命周期。 | ||
| 128 | + | ||
| 129 | +**问题**: | ||
| 130 | +```javascript | ||
| 131 | +// ❌ 错误 - 使用 Vue 生命周期 | ||
| 132 | +import { onMounted } from 'vue' | ||
| 133 | +onMounted(() => { | ||
| 134 | + // 可能不按预期工作 | ||
| 135 | +}) | ||
| 136 | +``` | ||
| 137 | + | ||
| 138 | +**解决方案**: | ||
| 139 | +```javascript | ||
| 140 | +// ✅ 正确 - 使用 Taro 生命周期 | ||
| 141 | +import { useLoad, useShow, useReady } from '@tarojs/taro' | ||
| 142 | + | ||
| 143 | +useLoad((options) => { | ||
| 144 | + // 页面加载(只触发一次)- 适合获取路由参数 | ||
| 145 | +}) | ||
| 146 | + | ||
| 147 | +useShow(() => { | ||
| 148 | + // 页面显示(每次显示都触发)- 适合刷新数据 | ||
| 149 | +}) | ||
| 150 | + | ||
| 151 | +useReady(() => { | ||
| 152 | + // 页面首次渲染完成 | ||
| 153 | +}) | ||
| 154 | +``` | ||
| 155 | + | ||
| 156 | +**预防措施**: | ||
| 157 | +- 页面组件始终使用 `useLoad` / `useShow` / `useReady` | ||
| 158 | +- Vue 生命周期仅用于非页面组件 | ||
| 159 | +- 参考项目 [CLAUDE.md](../CLAUDE.md) | ||
| 160 | + | ||
| 161 | +--- | ||
| 162 | + | ||
| 163 | +## 📚 最佳实践总结 | ||
| 164 | + | ||
| 165 | +### 1. 组件拆分原则 | ||
| 166 | + | ||
| 167 | +**原则**: 单一职责、可复用、易测试。 | ||
| 168 | + | ||
| 169 | +**示例**: | ||
| 170 | +``` | ||
| 171 | +✅ 好的组件 | ||
| 172 | +- UserCard.vue - 展示用户信息 | ||
| 173 | +- PointsCollector.vue - 积分收集器 | ||
| 174 | +- FamilyAlbum.vue - 家庭相册 | ||
| 175 | + | ||
| 176 | +❌ 避免的组件 | ||
| 177 | +- UserProfileAndSettingsAndOrders.vue - 职责混乱 | ||
| 178 | +- BigComponent.vue - 难以维护和测试 | ||
| 179 | +``` | ||
| 180 | + | ||
| 181 | +### 2. API 调用封装 | ||
| 182 | + | ||
| 183 | +**原则**: 统一封装、错误处理、加载状态。 | ||
| 184 | + | ||
| 185 | +**示例**: | ||
| 186 | +```javascript | ||
| 187 | +// ✅ 好的封装 | ||
| 188 | +const fetchData = async () => { | ||
| 189 | + loading.value = true | ||
| 190 | + try { | ||
| 191 | + const res = await yourAPI() | ||
| 192 | + if (res.code === 1) { | ||
| 193 | + dataList.value = res.data | ||
| 194 | + } else { | ||
| 195 | + Taro.showToast({ title: res.msg, icon: 'none' }) | ||
| 196 | + } | ||
| 197 | + } catch (err) { | ||
| 198 | + Taro.showToast({ title: '网络异常', icon: 'none' }) | ||
| 199 | + } finally { | ||
| 200 | + loading.value = false | ||
| 201 | + } | ||
| 202 | +} | ||
| 203 | +``` | ||
| 204 | + | ||
| 205 | +### 3. 样式管理 | ||
| 206 | + | ||
| 207 | +**原则**: TailwindCSS 优先(80%)、Less 补充(20%)。 | ||
| 208 | + | ||
| 209 | +**示例**: | ||
| 210 | +```vue | ||
| 211 | +<template> | ||
| 212 | + <!-- TailwindCSS 用于布局、间距、颜色 --> | ||
| 213 | + <view class="flex items-center justify-between p-4 bg-white"> | ||
| 214 | + <text class="text-xl font-bold">标题</text> | ||
| 215 | + </view> | ||
| 216 | +</template> | ||
| 217 | + | ||
| 218 | +<style lang="less" scoped> | ||
| 219 | +/* Less 用于深度选择器、动画 */ | ||
| 220 | +.custom-element :deep(.nut-popup) { | ||
| 221 | + background-color: #fff; | ||
| 222 | +} | ||
| 223 | + | ||
| 224 | +@keyframes slide-in { | ||
| 225 | + from { transform: translateX(-100%); } | ||
| 226 | + to { transform: translateX(0); } | ||
| 227 | +} | ||
| 228 | +</style> | ||
| 229 | +``` | ||
| 230 | + | ||
| 231 | +### 4. 命名规范 | ||
| 232 | + | ||
| 233 | +**原则**: 清晰、一致、符合惯例。 | ||
| 234 | + | ||
| 235 | +**示例**: | ||
| 236 | +```javascript | ||
| 237 | +// 组件:PascalCase | ||
| 238 | +UserCard.vue | ||
| 239 | +PointsCollector.vue | ||
| 240 | + | ||
| 241 | +// 函数:camelCase + 动词开头 | ||
| 242 | +const fetchData = () => {} | ||
| 243 | +const handleSubmit = () => {} | ||
| 244 | +const formatDate = () => {} | ||
| 245 | + | ||
| 246 | +// 变量:camelCase | ||
| 247 | +const userList = ref([]) | ||
| 248 | +const isLoading = ref(false) | ||
| 249 | + | ||
| 250 | +// 常量:UPPER_CASE | ||
| 251 | +const MAX_COUNT = 100 | ||
| 252 | +const API_BASE_URL = 'https://api.example.com' | ||
| 253 | +``` | ||
| 254 | + | ||
| 255 | +--- | ||
| 256 | + | ||
| 257 | +## 🚫 常见陷阱 | ||
| 258 | + | ||
| 259 | +### 陷阱 1: 直接修改 props | ||
| 260 | + | ||
| 261 | +```javascript | ||
| 262 | +// ❌ 错误 | ||
| 263 | +props.userName = 'new name' | ||
| 264 | + | ||
| 265 | +// ✅ 正确 | ||
| 266 | +emit('update:userName', 'new name') | ||
| 267 | +``` | ||
| 268 | + | ||
| 269 | +### 陷阱 2: 解构 props 丢失响应性 | ||
| 270 | + | ||
| 271 | +```javascript | ||
| 272 | +// ❌ 错误 | ||
| 273 | +const { userName } = props | ||
| 274 | + | ||
| 275 | +// ✅ 正确 | ||
| 276 | +const { userName } = toRefs(props) | ||
| 277 | +``` | ||
| 278 | + | ||
| 279 | +### 陷阱 3: 在模板中调用方法 | ||
| 280 | + | ||
| 281 | +```vue | ||
| 282 | +<!-- ❌ 错误 - 每次渲染都执行 --> | ||
| 283 | +<div>{{ formatDate(item.date) }}</div> | ||
| 284 | + | ||
| 285 | +<!-- ✅ 正确 - 使用 computed --> | ||
| 286 | +<div>{{ formattedDate }}</div> | ||
| 287 | +``` | ||
| 288 | + | ||
| 289 | +### 陷阱 4: 滥用 deep: true | ||
| 290 | + | ||
| 291 | +```javascript | ||
| 292 | +// ❌ 性能问题 | ||
| 293 | +watch(largeObject, handler, { deep: true }) | ||
| 294 | + | ||
| 295 | +// ✅ 优化 - 监听具体属性 | ||
| 296 | +watch(() => largeObject.value.nested.prop, handler) | ||
| 297 | +``` | ||
| 298 | + | ||
| 299 | +--- | ||
| 300 | + | ||
| 301 | +## 💡 性能优化建议 | ||
| 302 | + | ||
| 303 | +### 1. 长列表优化 | ||
| 304 | + | ||
| 305 | +```javascript | ||
| 306 | +// 使用虚拟滚动(如有大量数据) | ||
| 307 | +// 或使用分页加载 | ||
| 308 | +const page = ref(1) | ||
| 309 | +const loadMore = async () => { | ||
| 310 | + const res = await getMoreData(page.value) | ||
| 311 | + dataList.value.push(...res.data) | ||
| 312 | + page.value++ | ||
| 313 | +} | ||
| 314 | +``` | ||
| 315 | + | ||
| 316 | +### 2. 图片优化 | ||
| 317 | + | ||
| 318 | +```javascript | ||
| 319 | +// CDN 图片优化 | ||
| 320 | +function optimizeImageUrl(url, width = 750, quality = 70) { | ||
| 321 | + if (!url.includes('cdn.ipadbiz.cn')) return url | ||
| 322 | + return `${url}?imageMogr2/thumbnail/${width}x/quality/${quality}` | ||
| 323 | +} | ||
| 324 | +``` | ||
| 325 | + | ||
| 326 | +### 3. 计算属性缓存 | ||
| 327 | + | ||
| 328 | +```javascript | ||
| 329 | +// ✅ 使用 computed(缓存) | ||
| 330 | +const totalPrice = computed(() => { | ||
| 331 | + return items.value.reduce((sum, item) => sum + item.price, 0) | ||
| 332 | +}) | ||
| 333 | + | ||
| 334 | +// ❌ 避免方法(每次重新计算) | ||
| 335 | +const getTotalPrice = () => { | ||
| 336 | + return items.value.reduce((sum, item) => sum + item.price, 0) | ||
| 337 | +} | ||
| 338 | +``` | ||
| 339 | + | ||
| 340 | +--- | ||
| 341 | + | ||
| 342 | +## 📖 推荐阅读 | ||
| 343 | + | ||
| 344 | +### 项目文档 | ||
| 345 | + | ||
| 346 | +- [CLAUDE.md](../CLAUDE.md) - 完整的开发指南 | ||
| 347 | +- [代码规范](CODING-STANDARDS.md) - 代码风格和命名 | ||
| 348 | +- [开发指南](DEVELOPMENT-GUIDE.md) - 开发最佳实践 | ||
| 349 | + | ||
| 350 | +### 外部资源 | ||
| 351 | + | ||
| 352 | +- [Taro 官方文档](https://docs.taro.zone/) | ||
| 353 | +- [Vue 3 官方文档](https://cn.vuejs.org/) | ||
| 354 | +- [NutUI Taro 文档](https://nutui.jd.com/4/taro/) | ||
| 355 | +- [小程序开发文档](https://developers.weixin.qq.com/miniprogram/dev/framework/) | ||
| 356 | + | ||
| 357 | +--- | ||
| 358 | + | ||
| 359 | +## 🔄 持续更新 | ||
| 360 | + | ||
| 361 | +本文档会持续更新,记录新的经验教训。 | ||
| 362 | + | ||
| 363 | +**更新频率**: 每次遇到重要问题后更新 | ||
| 364 | +**维护者**: 开发团队 | ||
| 365 | +**最后更新**: 2026-02-05 | ||
| 366 | + | ||
| 367 | +--- | ||
| 368 | + | ||
| 369 | +## 📝 如何添加新经验 | ||
| 370 | + | ||
| 371 | +遇到新的问题后,按以下格式添加到本文档: | ||
| 372 | + | ||
| 373 | +```markdown | ||
| 374 | +### 问题标题 | ||
| 375 | + | ||
| 376 | +**教训**: 简短描述 | ||
| 377 | + | ||
| 378 | +**问题**: | ||
| 379 | +- 问题描述 | ||
| 380 | + | ||
| 381 | +**解决方案**: | ||
| 382 | +```javascript | ||
| 383 | +// 代码示例 | ||
| 384 | +``` | ||
| 385 | + | ||
| 386 | +**预防措施**: | ||
| 387 | +- 如何避免 | ||
| 388 | +``` | ||
| 389 | + | ||
| 390 | +--- | ||
| 391 | + | ||
| 392 | +**维护者**: 开发团队 | ||
| 393 | +**最后更新**: 2026-02-05 |
| ... | @@ -26,7 +26,14 @@ | ... | @@ -26,7 +26,14 @@ |
| 26 | "dev:rn": "npm run build:rn -- --watch", | 26 | "dev:rn": "npm run build:rn -- --watch", |
| 27 | "dev:qq": "npm run build:qq -- --watch", | 27 | "dev:qq": "npm run build:qq -- --watch", |
| 28 | "dev:quickapp": "npm run build:quickapp -- --watch", | 28 | "dev:quickapp": "npm run build:quickapp -- --watch", |
| 29 | - "postinstall": "weapp-tw patch" | 29 | + "postinstall": "weapp-tw patch", |
| 30 | + "prepare": "husky install", | ||
| 31 | + "test": "vitest", | ||
| 32 | + "test:ui": "vitest --ui", | ||
| 33 | + "test:coverage": "vitest --coverage", | ||
| 34 | + "test:run": "vitest run", | ||
| 35 | + "lint": "eslint ./src --ext .vue,.js", | ||
| 36 | + "format": "prettier --write \"src/**/*.{js,vue,less}\"" | ||
| 30 | }, | 37 | }, |
| 31 | "browserslist": [ | 38 | "browserslist": [ |
| 32 | "last 3 versions", | 39 | "last 3 versions", |
| ... | @@ -67,20 +74,37 @@ | ... | @@ -67,20 +74,37 @@ |
| 67 | "@tarojs/webpack5-runner": "4.1.7", | 74 | "@tarojs/webpack5-runner": "4.1.7", |
| 68 | "@types/node": "^24.3.0", | 75 | "@types/node": "^24.3.0", |
| 69 | "@types/webpack-env": "^1.13.6", | 76 | "@types/webpack-env": "^1.13.6", |
| 77 | + "@vitejs/plugin-vue": "^5.2.4", | ||
| 78 | + "@vitest/coverage-v8": "^1.6.1", | ||
| 70 | "@vue/babel-plugin-jsx": "^1.0.6", | 79 | "@vue/babel-plugin-jsx": "^1.0.6", |
| 71 | "@vue/compiler-sfc": "^3.0.0", | 80 | "@vue/compiler-sfc": "^3.0.0", |
| 81 | + "@vue/test-utils": "^2.4.6", | ||
| 72 | "autoprefixer": "^10.4.21", | 82 | "autoprefixer": "^10.4.21", |
| 73 | "babel-preset-taro": "4.1.7", | 83 | "babel-preset-taro": "4.1.7", |
| 74 | "css-loader": "3.4.2", | 84 | "css-loader": "3.4.2", |
| 75 | "eslint": "^8.12.0", | 85 | "eslint": "^8.12.0", |
| 76 | "eslint-config-taro": "4.1.7", | 86 | "eslint-config-taro": "4.1.7", |
| 87 | + "husky": "^9.1.7", | ||
| 88 | + "jsdom": "^24.1.3", | ||
| 89 | + "lint-staged": "^16.2.7", | ||
| 77 | "postcss": "^8.5.6", | 90 | "postcss": "^8.5.6", |
| 91 | + "prettier": "^3.0.0", | ||
| 78 | "style-loader": "1.3.0", | 92 | "style-loader": "1.3.0", |
| 79 | "tailwindcss": "^3.4.0", | 93 | "tailwindcss": "^3.4.0", |
| 80 | "typescript": "^5.9.2", | 94 | "typescript": "^5.9.2", |
| 81 | "unplugin-vue-components": "^0.26.0", | 95 | "unplugin-vue-components": "^0.26.0", |
| 96 | + "vitest": "^1.6.1", | ||
| 82 | "vue-loader": "^17.0.0", | 97 | "vue-loader": "^17.0.0", |
| 83 | "weapp-tailwindcss": "^4.1.10", | 98 | "weapp-tailwindcss": "^4.1.10", |
| 84 | "webpack": "5.78.0" | 99 | "webpack": "5.78.0" |
| 100 | + }, | ||
| 101 | + "lint-staged": { | ||
| 102 | + "*.{js,vue}": [ | ||
| 103 | + "eslint --fix", | ||
| 104 | + "prettier --write" | ||
| 105 | + ], | ||
| 106 | + "*.{less,css}": [ | ||
| 107 | + "prettier --write" | ||
| 108 | + ] | ||
| 85 | } | 109 | } |
| 86 | } | 110 | } | ... | ... |
| ... | @@ -28,7 +28,7 @@ importers: | ... | @@ -28,7 +28,7 @@ importers: |
| 28 | version: 4.1.7 | 28 | version: 4.1.7 |
| 29 | '@tarojs/plugin-framework-vue3': | 29 | '@tarojs/plugin-framework-vue3': |
| 30 | specifier: 4.1.7 | 30 | specifier: 4.1.7 |
| 31 | - version: 4.1.7(@tarojs/helper@4.1.7)(@tarojs/runner-utils@4.1.7)(@tarojs/runtime@4.1.7)(@tarojs/shared@4.1.7)(vue-loader@17.4.2(@vue/compiler-sfc@3.5.20)(vue@3.5.20(typescript@5.9.2))(webpack@5.78.0(@swc/core@1.3.96)))(vue@3.5.20(typescript@5.9.2))(webpack@5.78.0(@swc/core@1.3.96)) | 31 | + version: 4.1.7(@tarojs/helper@4.1.7)(@tarojs/runner-utils@4.1.7)(@tarojs/runtime@4.1.7)(@tarojs/shared@4.1.7)(@vitejs/plugin-vue@5.2.4(vue@3.5.20(typescript@5.9.2)))(vue-loader@17.4.2(@vue/compiler-sfc@3.5.20)(vue@3.5.20(typescript@5.9.2))(webpack@5.78.0(@swc/core@1.3.96)))(vue@3.5.20(typescript@5.9.2))(webpack@5.78.0(@swc/core@1.3.96)) |
| 32 | '@tarojs/plugin-html': | 32 | '@tarojs/plugin-html': |
| 33 | specifier: 4.1.7 | 33 | specifier: 4.1.7 |
| 34 | version: 4.1.7(@tarojs/helper@4.1.7)(@tarojs/runtime@4.1.7)(@tarojs/shared@4.1.7) | 34 | version: 4.1.7(@tarojs/helper@4.1.7)(@tarojs/runtime@4.1.7)(@tarojs/shared@4.1.7) |
| ... | @@ -96,12 +96,21 @@ importers: | ... | @@ -96,12 +96,21 @@ importers: |
| 96 | '@types/webpack-env': | 96 | '@types/webpack-env': |
| 97 | specifier: ^1.13.6 | 97 | specifier: ^1.13.6 |
| 98 | version: 1.18.8 | 98 | version: 1.18.8 |
| 99 | + '@vitejs/plugin-vue': | ||
| 100 | + specifier: ^5.2.4 | ||
| 101 | + version: 5.2.4(vue@3.5.20(typescript@5.9.2)) | ||
| 102 | + '@vitest/coverage-v8': | ||
| 103 | + specifier: ^1.6.1 | ||
| 104 | + version: 1.6.1(vitest@1.6.1(@types/node@24.3.0)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.30.1)(sass@1.91.0)(stylus@0.64.0)(terser@5.43.1)) | ||
| 99 | '@vue/babel-plugin-jsx': | 105 | '@vue/babel-plugin-jsx': |
| 100 | specifier: ^1.0.6 | 106 | specifier: ^1.0.6 |
| 101 | version: 1.5.0(@babel/core@7.28.3) | 107 | version: 1.5.0(@babel/core@7.28.3) |
| 102 | '@vue/compiler-sfc': | 108 | '@vue/compiler-sfc': |
| 103 | specifier: ^3.0.0 | 109 | specifier: ^3.0.0 |
| 104 | version: 3.5.20 | 110 | version: 3.5.20 |
| 111 | + '@vue/test-utils': | ||
| 112 | + specifier: ^2.4.6 | ||
| 113 | + version: 2.4.6 | ||
| 105 | autoprefixer: | 114 | autoprefixer: |
| 106 | specifier: ^10.4.21 | 115 | specifier: ^10.4.21 |
| 107 | version: 10.4.21(postcss@8.5.6) | 116 | version: 10.4.21(postcss@8.5.6) |
| ... | @@ -117,9 +126,21 @@ importers: | ... | @@ -117,9 +126,21 @@ importers: |
| 117 | eslint-config-taro: | 126 | eslint-config-taro: |
| 118 | specifier: 4.1.7 | 127 | specifier: 4.1.7 |
| 119 | version: 4.1.7(@babel/core@7.28.3)(eslint@8.57.1)(typescript@5.9.2) | 128 | version: 4.1.7(@babel/core@7.28.3)(eslint@8.57.1)(typescript@5.9.2) |
| 129 | + husky: | ||
| 130 | + specifier: ^9.1.7 | ||
| 131 | + version: 9.1.7 | ||
| 132 | + jsdom: | ||
| 133 | + specifier: ^24.1.3 | ||
| 134 | + version: 24.1.3 | ||
| 135 | + lint-staged: | ||
| 136 | + specifier: ^16.2.7 | ||
| 137 | + version: 16.2.7 | ||
| 120 | postcss: | 138 | postcss: |
| 121 | specifier: ^8.5.6 | 139 | specifier: ^8.5.6 |
| 122 | version: 8.5.6 | 140 | version: 8.5.6 |
| 141 | + prettier: | ||
| 142 | + specifier: ^3.0.0 | ||
| 143 | + version: 3.8.1 | ||
| 123 | style-loader: | 144 | style-loader: |
| 124 | specifier: 1.3.0 | 145 | specifier: 1.3.0 |
| 125 | version: 1.3.0(webpack@5.78.0(@swc/core@1.3.96)) | 146 | version: 1.3.0(webpack@5.78.0(@swc/core@1.3.96)) |
| ... | @@ -132,12 +153,15 @@ importers: | ... | @@ -132,12 +153,15 @@ importers: |
| 132 | unplugin-vue-components: | 153 | unplugin-vue-components: |
| 133 | specifier: ^0.26.0 | 154 | specifier: ^0.26.0 |
| 134 | version: 0.26.0(@babel/parser@7.28.3)(rollup@3.29.5)(vue@3.5.20(typescript@5.9.2)) | 155 | version: 0.26.0(@babel/parser@7.28.3)(rollup@3.29.5)(vue@3.5.20(typescript@5.9.2)) |
| 156 | + vitest: | ||
| 157 | + specifier: ^1.6.1 | ||
| 158 | + version: 1.6.1(@types/node@24.3.0)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.30.1)(sass@1.91.0)(stylus@0.64.0)(terser@5.43.1) | ||
| 135 | vue-loader: | 159 | vue-loader: |
| 136 | specifier: ^17.0.0 | 160 | specifier: ^17.0.0 |
| 137 | version: 17.4.2(@vue/compiler-sfc@3.5.20)(vue@3.5.20(typescript@5.9.2))(webpack@5.78.0(@swc/core@1.3.96)) | 161 | version: 17.4.2(@vue/compiler-sfc@3.5.20)(vue@3.5.20(typescript@5.9.2))(webpack@5.78.0(@swc/core@1.3.96)) |
| 138 | weapp-tailwindcss: | 162 | weapp-tailwindcss: |
| 139 | specifier: ^4.1.10 | 163 | specifier: ^4.1.10 |
| 140 | - version: 4.2.6(tailwindcss@3.4.17)(typescript@5.9.2) | 164 | + version: 4.2.6(magicast@0.3.5)(tailwindcss@3.4.17)(typescript@5.9.2) |
| 141 | webpack: | 165 | webpack: |
| 142 | specifier: 5.78.0 | 166 | specifier: 5.78.0 |
| 143 | version: 5.78.0(@swc/core@1.3.96) | 167 | version: 5.78.0(@swc/core@1.3.96) |
| ... | @@ -716,6 +740,9 @@ packages: | ... | @@ -716,6 +740,9 @@ packages: |
| 716 | resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} | 740 | resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} |
| 717 | engines: {node: '>=6.9.0'} | 741 | engines: {node: '>=6.9.0'} |
| 718 | 742 | ||
| 743 | + '@bcoe/v8-coverage@0.2.3': | ||
| 744 | + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} | ||
| 745 | + | ||
| 719 | '@csstools/cascade-layer-name-parser@2.0.5': | 746 | '@csstools/cascade-layer-name-parser@2.0.5': |
| 720 | resolution: {integrity: sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==} | 747 | resolution: {integrity: sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==} |
| 721 | engines: {node: '>=18'} | 748 | engines: {node: '>=18'} |
| ... | @@ -1351,6 +1378,10 @@ packages: | ... | @@ -1351,6 +1378,10 @@ packages: |
| 1351 | resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} | 1378 | resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} |
| 1352 | engines: {node: '>=18.0.0'} | 1379 | engines: {node: '>=18.0.0'} |
| 1353 | 1380 | ||
| 1381 | + '@istanbuljs/schema@0.1.3': | ||
| 1382 | + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} | ||
| 1383 | + engines: {node: '>=8'} | ||
| 1384 | + | ||
| 1354 | '@jest/schemas@29.6.3': | 1385 | '@jest/schemas@29.6.3': |
| 1355 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} | 1386 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} |
| 1356 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} | 1387 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} |
| ... | @@ -1430,6 +1461,9 @@ packages: | ... | @@ -1430,6 +1461,9 @@ packages: |
| 1430 | unplugin-vue-components: | 1461 | unplugin-vue-components: |
| 1431 | optional: true | 1462 | optional: true |
| 1432 | 1463 | ||
| 1464 | + '@one-ini/wasm@0.1.1': | ||
| 1465 | + resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} | ||
| 1466 | + | ||
| 1433 | '@parcel/watcher-android-arm64@2.5.1': | 1467 | '@parcel/watcher-android-arm64@2.5.1': |
| 1434 | resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} | 1468 | resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} |
| 1435 | engines: {node: '>= 10.0.0'} | 1469 | engines: {node: '>= 10.0.0'} |
| ... | @@ -1459,36 +1493,42 @@ packages: | ... | @@ -1459,36 +1493,42 @@ packages: |
| 1459 | engines: {node: '>= 10.0.0'} | 1493 | engines: {node: '>= 10.0.0'} |
| 1460 | cpu: [arm] | 1494 | cpu: [arm] |
| 1461 | os: [linux] | 1495 | os: [linux] |
| 1496 | + libc: [glibc] | ||
| 1462 | 1497 | ||
| 1463 | '@parcel/watcher-linux-arm-musl@2.5.1': | 1498 | '@parcel/watcher-linux-arm-musl@2.5.1': |
| 1464 | resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} | 1499 | resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} |
| 1465 | engines: {node: '>= 10.0.0'} | 1500 | engines: {node: '>= 10.0.0'} |
| 1466 | cpu: [arm] | 1501 | cpu: [arm] |
| 1467 | os: [linux] | 1502 | os: [linux] |
| 1503 | + libc: [musl] | ||
| 1468 | 1504 | ||
| 1469 | '@parcel/watcher-linux-arm64-glibc@2.5.1': | 1505 | '@parcel/watcher-linux-arm64-glibc@2.5.1': |
| 1470 | resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} | 1506 | resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} |
| 1471 | engines: {node: '>= 10.0.0'} | 1507 | engines: {node: '>= 10.0.0'} |
| 1472 | cpu: [arm64] | 1508 | cpu: [arm64] |
| 1473 | os: [linux] | 1509 | os: [linux] |
| 1510 | + libc: [glibc] | ||
| 1474 | 1511 | ||
| 1475 | '@parcel/watcher-linux-arm64-musl@2.5.1': | 1512 | '@parcel/watcher-linux-arm64-musl@2.5.1': |
| 1476 | resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} | 1513 | resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} |
| 1477 | engines: {node: '>= 10.0.0'} | 1514 | engines: {node: '>= 10.0.0'} |
| 1478 | cpu: [arm64] | 1515 | cpu: [arm64] |
| 1479 | os: [linux] | 1516 | os: [linux] |
| 1517 | + libc: [musl] | ||
| 1480 | 1518 | ||
| 1481 | '@parcel/watcher-linux-x64-glibc@2.5.1': | 1519 | '@parcel/watcher-linux-x64-glibc@2.5.1': |
| 1482 | resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} | 1520 | resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} |
| 1483 | engines: {node: '>= 10.0.0'} | 1521 | engines: {node: '>= 10.0.0'} |
| 1484 | cpu: [x64] | 1522 | cpu: [x64] |
| 1485 | os: [linux] | 1523 | os: [linux] |
| 1524 | + libc: [glibc] | ||
| 1486 | 1525 | ||
| 1487 | '@parcel/watcher-linux-x64-musl@2.5.1': | 1526 | '@parcel/watcher-linux-x64-musl@2.5.1': |
| 1488 | resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} | 1527 | resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} |
| 1489 | engines: {node: '>= 10.0.0'} | 1528 | engines: {node: '>= 10.0.0'} |
| 1490 | cpu: [x64] | 1529 | cpu: [x64] |
| 1491 | os: [linux] | 1530 | os: [linux] |
| 1531 | + libc: [musl] | ||
| 1492 | 1532 | ||
| 1493 | '@parcel/watcher-win32-arm64@2.5.1': | 1533 | '@parcel/watcher-win32-arm64@2.5.1': |
| 1494 | resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} | 1534 | resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} |
| ... | @@ -1544,6 +1584,144 @@ packages: | ... | @@ -1544,6 +1584,144 @@ packages: |
| 1544 | rollup: | 1584 | rollup: |
| 1545 | optional: true | 1585 | optional: true |
| 1546 | 1586 | ||
| 1587 | + '@rollup/rollup-android-arm-eabi@4.57.1': | ||
| 1588 | + resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} | ||
| 1589 | + cpu: [arm] | ||
| 1590 | + os: [android] | ||
| 1591 | + | ||
| 1592 | + '@rollup/rollup-android-arm64@4.57.1': | ||
| 1593 | + resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} | ||
| 1594 | + cpu: [arm64] | ||
| 1595 | + os: [android] | ||
| 1596 | + | ||
| 1597 | + '@rollup/rollup-darwin-arm64@4.57.1': | ||
| 1598 | + resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} | ||
| 1599 | + cpu: [arm64] | ||
| 1600 | + os: [darwin] | ||
| 1601 | + | ||
| 1602 | + '@rollup/rollup-darwin-x64@4.57.1': | ||
| 1603 | + resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} | ||
| 1604 | + cpu: [x64] | ||
| 1605 | + os: [darwin] | ||
| 1606 | + | ||
| 1607 | + '@rollup/rollup-freebsd-arm64@4.57.1': | ||
| 1608 | + resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} | ||
| 1609 | + cpu: [arm64] | ||
| 1610 | + os: [freebsd] | ||
| 1611 | + | ||
| 1612 | + '@rollup/rollup-freebsd-x64@4.57.1': | ||
| 1613 | + resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} | ||
| 1614 | + cpu: [x64] | ||
| 1615 | + os: [freebsd] | ||
| 1616 | + | ||
| 1617 | + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': | ||
| 1618 | + resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} | ||
| 1619 | + cpu: [arm] | ||
| 1620 | + os: [linux] | ||
| 1621 | + libc: [glibc] | ||
| 1622 | + | ||
| 1623 | + '@rollup/rollup-linux-arm-musleabihf@4.57.1': | ||
| 1624 | + resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} | ||
| 1625 | + cpu: [arm] | ||
| 1626 | + os: [linux] | ||
| 1627 | + libc: [musl] | ||
| 1628 | + | ||
| 1629 | + '@rollup/rollup-linux-arm64-gnu@4.57.1': | ||
| 1630 | + resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} | ||
| 1631 | + cpu: [arm64] | ||
| 1632 | + os: [linux] | ||
| 1633 | + libc: [glibc] | ||
| 1634 | + | ||
| 1635 | + '@rollup/rollup-linux-arm64-musl@4.57.1': | ||
| 1636 | + resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} | ||
| 1637 | + cpu: [arm64] | ||
| 1638 | + os: [linux] | ||
| 1639 | + libc: [musl] | ||
| 1640 | + | ||
| 1641 | + '@rollup/rollup-linux-loong64-gnu@4.57.1': | ||
| 1642 | + resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} | ||
| 1643 | + cpu: [loong64] | ||
| 1644 | + os: [linux] | ||
| 1645 | + libc: [glibc] | ||
| 1646 | + | ||
| 1647 | + '@rollup/rollup-linux-loong64-musl@4.57.1': | ||
| 1648 | + resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} | ||
| 1649 | + cpu: [loong64] | ||
| 1650 | + os: [linux] | ||
| 1651 | + libc: [musl] | ||
| 1652 | + | ||
| 1653 | + '@rollup/rollup-linux-ppc64-gnu@4.57.1': | ||
| 1654 | + resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} | ||
| 1655 | + cpu: [ppc64] | ||
| 1656 | + os: [linux] | ||
| 1657 | + libc: [glibc] | ||
| 1658 | + | ||
| 1659 | + '@rollup/rollup-linux-ppc64-musl@4.57.1': | ||
| 1660 | + resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} | ||
| 1661 | + cpu: [ppc64] | ||
| 1662 | + os: [linux] | ||
| 1663 | + libc: [musl] | ||
| 1664 | + | ||
| 1665 | + '@rollup/rollup-linux-riscv64-gnu@4.57.1': | ||
| 1666 | + resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} | ||
| 1667 | + cpu: [riscv64] | ||
| 1668 | + os: [linux] | ||
| 1669 | + libc: [glibc] | ||
| 1670 | + | ||
| 1671 | + '@rollup/rollup-linux-riscv64-musl@4.57.1': | ||
| 1672 | + resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} | ||
| 1673 | + cpu: [riscv64] | ||
| 1674 | + os: [linux] | ||
| 1675 | + libc: [musl] | ||
| 1676 | + | ||
| 1677 | + '@rollup/rollup-linux-s390x-gnu@4.57.1': | ||
| 1678 | + resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} | ||
| 1679 | + cpu: [s390x] | ||
| 1680 | + os: [linux] | ||
| 1681 | + libc: [glibc] | ||
| 1682 | + | ||
| 1683 | + '@rollup/rollup-linux-x64-gnu@4.57.1': | ||
| 1684 | + resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} | ||
| 1685 | + cpu: [x64] | ||
| 1686 | + os: [linux] | ||
| 1687 | + libc: [glibc] | ||
| 1688 | + | ||
| 1689 | + '@rollup/rollup-linux-x64-musl@4.57.1': | ||
| 1690 | + resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} | ||
| 1691 | + cpu: [x64] | ||
| 1692 | + os: [linux] | ||
| 1693 | + libc: [musl] | ||
| 1694 | + | ||
| 1695 | + '@rollup/rollup-openbsd-x64@4.57.1': | ||
| 1696 | + resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} | ||
| 1697 | + cpu: [x64] | ||
| 1698 | + os: [openbsd] | ||
| 1699 | + | ||
| 1700 | + '@rollup/rollup-openharmony-arm64@4.57.1': | ||
| 1701 | + resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} | ||
| 1702 | + cpu: [arm64] | ||
| 1703 | + os: [openharmony] | ||
| 1704 | + | ||
| 1705 | + '@rollup/rollup-win32-arm64-msvc@4.57.1': | ||
| 1706 | + resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} | ||
| 1707 | + cpu: [arm64] | ||
| 1708 | + os: [win32] | ||
| 1709 | + | ||
| 1710 | + '@rollup/rollup-win32-ia32-msvc@4.57.1': | ||
| 1711 | + resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} | ||
| 1712 | + cpu: [ia32] | ||
| 1713 | + os: [win32] | ||
| 1714 | + | ||
| 1715 | + '@rollup/rollup-win32-x64-gnu@4.57.1': | ||
| 1716 | + resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} | ||
| 1717 | + cpu: [x64] | ||
| 1718 | + os: [win32] | ||
| 1719 | + | ||
| 1720 | + '@rollup/rollup-win32-x64-msvc@4.57.1': | ||
| 1721 | + resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} | ||
| 1722 | + cpu: [x64] | ||
| 1723 | + os: [win32] | ||
| 1724 | + | ||
| 1547 | '@rtsao/scc@1.1.0': | 1725 | '@rtsao/scc@1.1.0': |
| 1548 | resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} | 1726 | resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} |
| 1549 | 1727 | ||
| ... | @@ -1599,24 +1777,28 @@ packages: | ... | @@ -1599,24 +1777,28 @@ packages: |
| 1599 | engines: {node: '>=10'} | 1777 | engines: {node: '>=10'} |
| 1600 | cpu: [arm64] | 1778 | cpu: [arm64] |
| 1601 | os: [linux] | 1779 | os: [linux] |
| 1780 | + libc: [glibc] | ||
| 1602 | 1781 | ||
| 1603 | '@swc/core-linux-arm64-musl@1.3.96': | 1782 | '@swc/core-linux-arm64-musl@1.3.96': |
| 1604 | resolution: {integrity: sha512-i5/UTUwmJLri7zhtF6SAo/4QDQJDH2fhYJaBIUhrICmIkRO/ltURmpejqxsM/ye9Jqv5zG7VszMC0v/GYn/7BQ==} | 1783 | resolution: {integrity: sha512-i5/UTUwmJLri7zhtF6SAo/4QDQJDH2fhYJaBIUhrICmIkRO/ltURmpejqxsM/ye9Jqv5zG7VszMC0v/GYn/7BQ==} |
| 1605 | engines: {node: '>=10'} | 1784 | engines: {node: '>=10'} |
| 1606 | cpu: [arm64] | 1785 | cpu: [arm64] |
| 1607 | os: [linux] | 1786 | os: [linux] |
| 1787 | + libc: [musl] | ||
| 1608 | 1788 | ||
| 1609 | '@swc/core-linux-x64-gnu@1.3.96': | 1789 | '@swc/core-linux-x64-gnu@1.3.96': |
| 1610 | resolution: {integrity: sha512-USdaZu8lTIkm4Yf9cogct/j5eqtdZqTgcTib4I+NloUW0E/hySou3eSyp3V2UAA1qyuC72ld1otXuyKBna0YKQ==} | 1790 | resolution: {integrity: sha512-USdaZu8lTIkm4Yf9cogct/j5eqtdZqTgcTib4I+NloUW0E/hySou3eSyp3V2UAA1qyuC72ld1otXuyKBna0YKQ==} |
| 1611 | engines: {node: '>=10'} | 1791 | engines: {node: '>=10'} |
| 1612 | cpu: [x64] | 1792 | cpu: [x64] |
| 1613 | os: [linux] | 1793 | os: [linux] |
| 1794 | + libc: [glibc] | ||
| 1614 | 1795 | ||
| 1615 | '@swc/core-linux-x64-musl@1.3.96': | 1796 | '@swc/core-linux-x64-musl@1.3.96': |
| 1616 | resolution: {integrity: sha512-QYErutd+G2SNaCinUVobfL7jWWjGTI0QEoQ6hqTp7PxCJS/dmKmj3C5ZkvxRYcq7XcZt7ovrYCTwPTHzt6lZBg==} | 1797 | resolution: {integrity: sha512-QYErutd+G2SNaCinUVobfL7jWWjGTI0QEoQ6hqTp7PxCJS/dmKmj3C5ZkvxRYcq7XcZt7ovrYCTwPTHzt6lZBg==} |
| 1617 | engines: {node: '>=10'} | 1798 | engines: {node: '>=10'} |
| 1618 | cpu: [x64] | 1799 | cpu: [x64] |
| 1619 | os: [linux] | 1800 | os: [linux] |
| 1801 | + libc: [musl] | ||
| 1620 | 1802 | ||
| 1621 | '@swc/core-win32-arm64-msvc@1.3.96': | 1803 | '@swc/core-win32-arm64-msvc@1.3.96': |
| 1622 | resolution: {integrity: sha512-hjGvvAduA3Un2cZ9iNP4xvTXOO4jL3G9iakhFsgVhpkU73SGmK7+LN8ZVBEu4oq2SUcHO6caWvnZ881cxGuSpg==} | 1804 | resolution: {integrity: sha512-hjGvvAduA3Un2cZ9iNP4xvTXOO4jL3G9iakhFsgVhpkU73SGmK7+LN8ZVBEu4oq2SUcHO6caWvnZ881cxGuSpg==} |
| ... | @@ -1692,6 +1874,7 @@ packages: | ... | @@ -1692,6 +1874,7 @@ packages: |
| 1692 | engines: {node: '>= 18'} | 1874 | engines: {node: '>= 18'} |
| 1693 | cpu: [x64] | 1875 | cpu: [x64] |
| 1694 | os: [linux] | 1876 | os: [linux] |
| 1877 | + libc: [glibc] | ||
| 1695 | 1878 | ||
| 1696 | '@tarojs/binding-win32-x64-msvc@4.1.7': | 1879 | '@tarojs/binding-win32-x64-msvc@4.1.7': |
| 1697 | resolution: {integrity: sha512-treGgXFwNa9Q6xIsz0NSfI9R2J0s9GW9xb76jcOxMsjT4eIrmQ/NhNS4lHSM5dz6jwmh+Gzv5ow7nS+HEKN+Xw==} | 1880 | resolution: {integrity: sha512-treGgXFwNa9Q6xIsz0NSfI9R2J0s9GW9xb76jcOxMsjT4eIrmQ/NhNS4lHSM5dz6jwmh+Gzv5ow7nS+HEKN+Xw==} |
| ... | @@ -1757,24 +1940,28 @@ packages: | ... | @@ -1757,24 +1940,28 @@ packages: |
| 1757 | engines: {node: '>= 10'} | 1940 | engines: {node: '>= 10'} |
| 1758 | cpu: [arm64] | 1941 | cpu: [arm64] |
| 1759 | os: [linux] | 1942 | os: [linux] |
| 1943 | + libc: [glibc] | ||
| 1760 | 1944 | ||
| 1761 | '@tarojs/plugin-doctor-linux-arm64-musl@0.0.13': | 1945 | '@tarojs/plugin-doctor-linux-arm64-musl@0.0.13': |
| 1762 | resolution: {integrity: sha512-V1HnFITOLgHVyQ+OCa1oPFKOtGFRtP91vlbUGfOwMA4GeOVw9g28W/hfTyucTCkfZWlrssLehgW6L2AGAMXh2w==} | 1946 | resolution: {integrity: sha512-V1HnFITOLgHVyQ+OCa1oPFKOtGFRtP91vlbUGfOwMA4GeOVw9g28W/hfTyucTCkfZWlrssLehgW6L2AGAMXh2w==} |
| 1763 | engines: {node: '>= 10'} | 1947 | engines: {node: '>= 10'} |
| 1764 | cpu: [arm64] | 1948 | cpu: [arm64] |
| 1765 | os: [linux] | 1949 | os: [linux] |
| 1950 | + libc: [musl] | ||
| 1766 | 1951 | ||
| 1767 | '@tarojs/plugin-doctor-linux-x64-gnu@0.0.13': | 1952 | '@tarojs/plugin-doctor-linux-x64-gnu@0.0.13': |
| 1768 | resolution: {integrity: sha512-oetfzBW60uenPBBF4/NE6Mf0Iwkw1YGqIIBiN++aVQynbWrmMzWBsW8kleZ5vN1npxI9aud9EfRU1uM37DrG2A==} | 1953 | resolution: {integrity: sha512-oetfzBW60uenPBBF4/NE6Mf0Iwkw1YGqIIBiN++aVQynbWrmMzWBsW8kleZ5vN1npxI9aud9EfRU1uM37DrG2A==} |
| 1769 | engines: {node: '>= 10'} | 1954 | engines: {node: '>= 10'} |
| 1770 | cpu: [x64] | 1955 | cpu: [x64] |
| 1771 | os: [linux] | 1956 | os: [linux] |
| 1957 | + libc: [glibc] | ||
| 1772 | 1958 | ||
| 1773 | '@tarojs/plugin-doctor-linux-x64-musl@0.0.13': | 1959 | '@tarojs/plugin-doctor-linux-x64-musl@0.0.13': |
| 1774 | resolution: {integrity: sha512-OdIF/kFwwM0kQPDnpkanhvfWRaAI6EtDmpM9rQA/Lu2QcJq86w5d7X/WSN0U2xF1nialAUrfl79NyIaEzp4Fcw==} | 1960 | resolution: {integrity: sha512-OdIF/kFwwM0kQPDnpkanhvfWRaAI6EtDmpM9rQA/Lu2QcJq86w5d7X/WSN0U2xF1nialAUrfl79NyIaEzp4Fcw==} |
| 1775 | engines: {node: '>= 10'} | 1961 | engines: {node: '>= 10'} |
| 1776 | cpu: [x64] | 1962 | cpu: [x64] |
| 1777 | os: [linux] | 1963 | os: [linux] |
| 1964 | + libc: [musl] | ||
| 1778 | 1965 | ||
| 1779 | '@tarojs/plugin-doctor-win32-ia32-msvc@0.0.13': | 1966 | '@tarojs/plugin-doctor-win32-ia32-msvc@0.0.13': |
| 1780 | resolution: {integrity: sha512-nIbG2SliRhRwACLa1kNMskcfjsihp+3tZQMAxl+LoYUq6JRaWgP3vH2nHkDyZHTCheBTDtAaupqXWrYF3w+U6g==} | 1967 | resolution: {integrity: sha512-nIbG2SliRhRwACLa1kNMskcfjsihp+3tZQMAxl+LoYUq6JRaWgP3vH2nHkDyZHTCheBTDtAaupqXWrYF3w+U6g==} |
| ... | @@ -2166,6 +2353,33 @@ packages: | ... | @@ -2166,6 +2353,33 @@ packages: |
| 2166 | '@ungap/structured-clone@1.3.0': | 2353 | '@ungap/structured-clone@1.3.0': |
| 2167 | resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} | 2354 | resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} |
| 2168 | 2355 | ||
| 2356 | + '@vitejs/plugin-vue@5.2.4': | ||
| 2357 | + resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==} | ||
| 2358 | + engines: {node: ^18.0.0 || >=20.0.0} | ||
| 2359 | + peerDependencies: | ||
| 2360 | + vite: ^5.0.0 || ^6.0.0 | ||
| 2361 | + vue: ^3.2.25 | ||
| 2362 | + | ||
| 2363 | + '@vitest/coverage-v8@1.6.1': | ||
| 2364 | + resolution: {integrity: sha512-6YeRZwuO4oTGKxD3bijok756oktHSIm3eczVVzNe3scqzuhLwltIF3S9ZL/vwOVIpURmU6SnZhziXXAfw8/Qlw==} | ||
| 2365 | + peerDependencies: | ||
| 2366 | + vitest: 1.6.1 | ||
| 2367 | + | ||
| 2368 | + '@vitest/expect@1.6.1': | ||
| 2369 | + resolution: {integrity: sha512-jXL+9+ZNIJKruofqXuuTClf44eSpcHlgj3CiuNihUF3Ioujtmc0zIa3UJOW5RjDK1YLBJZnWBlPuqhYycLioog==} | ||
| 2370 | + | ||
| 2371 | + '@vitest/runner@1.6.1': | ||
| 2372 | + resolution: {integrity: sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA==} | ||
| 2373 | + | ||
| 2374 | + '@vitest/snapshot@1.6.1': | ||
| 2375 | + resolution: {integrity: sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ==} | ||
| 2376 | + | ||
| 2377 | + '@vitest/spy@1.6.1': | ||
| 2378 | + resolution: {integrity: sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw==} | ||
| 2379 | + | ||
| 2380 | + '@vitest/utils@1.6.1': | ||
| 2381 | + resolution: {integrity: sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==} | ||
| 2382 | + | ||
| 2169 | '@vue/babel-helper-vue-transform-on@1.5.0': | 2383 | '@vue/babel-helper-vue-transform-on@1.5.0': |
| 2170 | resolution: {integrity: sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==} | 2384 | resolution: {integrity: sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==} |
| 2171 | 2385 | ||
| ... | @@ -2220,6 +2434,9 @@ packages: | ... | @@ -2220,6 +2434,9 @@ packages: |
| 2220 | '@vue/shared@3.5.20': | 2434 | '@vue/shared@3.5.20': |
| 2221 | resolution: {integrity: sha512-SoRGP596KU/ig6TfgkCMbXkr4YJ91n/QSdMuqeP5r3hVIYA3CPHUBCc7Skak0EAKV+5lL4KyIh61VA/pK1CIAA==} | 2435 | resolution: {integrity: sha512-SoRGP596KU/ig6TfgkCMbXkr4YJ91n/QSdMuqeP5r3hVIYA3CPHUBCc7Skak0EAKV+5lL4KyIh61VA/pK1CIAA==} |
| 2222 | 2436 | ||
| 2437 | + '@vue/test-utils@2.4.6': | ||
| 2438 | + resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==} | ||
| 2439 | + | ||
| 2223 | '@weapp-core/escape@4.0.1': | 2440 | '@weapp-core/escape@4.0.1': |
| 2224 | resolution: {integrity: sha512-FuO9zTs/8VMhoZ+sZkMEMipcHd9FZhxstdhg9+Z3JlTgxMFAIvhBFOuFjM2bUyjDJ7O21nr9podHDjVjcVYu4Q==} | 2441 | resolution: {integrity: sha512-FuO9zTs/8VMhoZ+sZkMEMipcHd9FZhxstdhg9+Z3JlTgxMFAIvhBFOuFjM2bUyjDJ7O21nr9podHDjVjcVYu4Q==} |
| 2225 | 2442 | ||
| ... | @@ -2292,6 +2509,10 @@ packages: | ... | @@ -2292,6 +2509,10 @@ packages: |
| 2292 | '@xtuc/long@4.2.2': | 2509 | '@xtuc/long@4.2.2': |
| 2293 | resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} | 2510 | resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} |
| 2294 | 2511 | ||
| 2512 | + abbrev@2.0.0: | ||
| 2513 | + resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} | ||
| 2514 | + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} | ||
| 2515 | + | ||
| 2295 | abortcontroller-polyfill@1.7.8: | 2516 | abortcontroller-polyfill@1.7.8: |
| 2296 | resolution: {integrity: sha512-9f1iZ2uWh92VcrU9Y8x+LdM4DLj75VE0MJB8zuF1iUnroEptStw+DQ8EQPMUdfe5k+PkB1uUfDQfWbhstH8LrQ==} | 2517 | resolution: {integrity: sha512-9f1iZ2uWh92VcrU9Y8x+LdM4DLj75VE0MJB8zuF1iUnroEptStw+DQ8EQPMUdfe5k+PkB1uUfDQfWbhstH8LrQ==} |
| 2297 | 2518 | ||
| ... | @@ -2363,6 +2584,10 @@ packages: | ... | @@ -2363,6 +2584,10 @@ packages: |
| 2363 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} | 2584 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} |
| 2364 | engines: {node: '>=8'} | 2585 | engines: {node: '>=8'} |
| 2365 | 2586 | ||
| 2587 | + ansi-escapes@7.3.0: | ||
| 2588 | + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} | ||
| 2589 | + engines: {node: '>=18'} | ||
| 2590 | + | ||
| 2366 | ansi-html-community@0.0.8: | 2591 | ansi-html-community@0.0.8: |
| 2367 | resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} | 2592 | resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} |
| 2368 | engines: {'0': node >= 0.8.0} | 2593 | engines: {'0': node >= 0.8.0} |
| ... | @@ -2380,6 +2605,10 @@ packages: | ... | @@ -2380,6 +2605,10 @@ packages: |
| 2380 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} | 2605 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} |
| 2381 | engines: {node: '>=8'} | 2606 | engines: {node: '>=8'} |
| 2382 | 2607 | ||
| 2608 | + ansi-styles@5.2.0: | ||
| 2609 | + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} | ||
| 2610 | + engines: {node: '>=10'} | ||
| 2611 | + | ||
| 2383 | ansi-styles@6.2.1: | 2612 | ansi-styles@6.2.1: |
| 2384 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} | 2613 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} |
| 2385 | engines: {node: '>=12'} | 2614 | engines: {node: '>=12'} |
| ... | @@ -2435,6 +2664,9 @@ packages: | ... | @@ -2435,6 +2664,9 @@ packages: |
| 2435 | resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} | 2664 | resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} |
| 2436 | engines: {node: '>= 0.4'} | 2665 | engines: {node: '>= 0.4'} |
| 2437 | 2666 | ||
| 2667 | + assertion-error@1.1.0: | ||
| 2668 | + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} | ||
| 2669 | + | ||
| 2438 | async-function@1.0.0: | 2670 | async-function@1.0.0: |
| 2439 | resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} | 2671 | resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} |
| 2440 | engines: {node: '>= 0.4'} | 2672 | engines: {node: '>= 0.4'} |
| ... | @@ -2664,6 +2896,10 @@ packages: | ... | @@ -2664,6 +2896,10 @@ packages: |
| 2664 | resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==} | 2896 | resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==} |
| 2665 | engines: {node: '>=4'} | 2897 | engines: {node: '>=4'} |
| 2666 | 2898 | ||
| 2899 | + chai@4.5.0: | ||
| 2900 | + resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} | ||
| 2901 | + engines: {node: '>=4'} | ||
| 2902 | + | ||
| 2667 | chalk@3.0.0: | 2903 | chalk@3.0.0: |
| 2668 | resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} | 2904 | resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} |
| 2669 | engines: {node: '>=8'} | 2905 | engines: {node: '>=8'} |
| ... | @@ -2681,6 +2917,9 @@ packages: | ... | @@ -2681,6 +2917,9 @@ packages: |
| 2681 | charenc@0.0.2: | 2917 | charenc@0.0.2: |
| 2682 | resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} | 2918 | resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} |
| 2683 | 2919 | ||
| 2920 | + check-error@1.0.3: | ||
| 2921 | + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} | ||
| 2922 | + | ||
| 2684 | chokidar@3.6.0: | 2923 | chokidar@3.6.0: |
| 2685 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} | 2924 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} |
| 2686 | engines: {node: '>= 8.10.0'} | 2925 | engines: {node: '>= 8.10.0'} |
| ... | @@ -2723,6 +2962,10 @@ packages: | ... | @@ -2723,6 +2962,10 @@ packages: |
| 2723 | resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} | 2962 | resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} |
| 2724 | engines: {node: '>=8'} | 2963 | engines: {node: '>=8'} |
| 2725 | 2964 | ||
| 2965 | + cli-cursor@5.0.0: | ||
| 2966 | + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} | ||
| 2967 | + engines: {node: '>=18'} | ||
| 2968 | + | ||
| 2726 | cli-highlight@2.1.11: | 2969 | cli-highlight@2.1.11: |
| 2727 | resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} | 2970 | resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} |
| 2728 | engines: {node: '>=8.0.0', npm: '>=5.0.0'} | 2971 | engines: {node: '>=8.0.0', npm: '>=5.0.0'} |
| ... | @@ -2732,6 +2975,10 @@ packages: | ... | @@ -2732,6 +2975,10 @@ packages: |
| 2732 | resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} | 2975 | resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} |
| 2733 | engines: {node: '>=6'} | 2976 | engines: {node: '>=6'} |
| 2734 | 2977 | ||
| 2978 | + cli-truncate@5.1.1: | ||
| 2979 | + resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==} | ||
| 2980 | + engines: {node: '>=20'} | ||
| 2981 | + | ||
| 2735 | cli-width@3.0.0: | 2982 | cli-width@3.0.0: |
| 2736 | resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} | 2983 | resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} |
| 2737 | engines: {node: '>= 10'} | 2984 | engines: {node: '>= 10'} |
| ... | @@ -2770,6 +3017,14 @@ packages: | ... | @@ -2770,6 +3017,14 @@ packages: |
| 2770 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} | 3017 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} |
| 2771 | engines: {node: '>= 0.8'} | 3018 | engines: {node: '>= 0.8'} |
| 2772 | 3019 | ||
| 3020 | + commander@10.0.1: | ||
| 3021 | + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} | ||
| 3022 | + engines: {node: '>=14'} | ||
| 3023 | + | ||
| 3024 | + commander@14.0.3: | ||
| 3025 | + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} | ||
| 3026 | + engines: {node: '>=20'} | ||
| 3027 | + | ||
| 2773 | commander@2.20.3: | 3028 | commander@2.20.3: |
| 2774 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} | 3029 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} |
| 2775 | 3030 | ||
| ... | @@ -3093,6 +3348,10 @@ packages: | ... | @@ -3093,6 +3348,10 @@ packages: |
| 3093 | resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==} | 3348 | resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==} |
| 3094 | engines: {node: '>=4'} | 3349 | engines: {node: '>=4'} |
| 3095 | 3350 | ||
| 3351 | + deep-eql@4.1.4: | ||
| 3352 | + resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} | ||
| 3353 | + engines: {node: '>=6'} | ||
| 3354 | + | ||
| 3096 | deep-extend@0.6.0: | 3355 | deep-extend@0.6.0: |
| 3097 | resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} | 3356 | resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} |
| 3098 | engines: {node: '>=4.0.0'} | 3357 | engines: {node: '>=4.0.0'} |
| ... | @@ -3168,6 +3427,10 @@ packages: | ... | @@ -3168,6 +3427,10 @@ packages: |
| 3168 | didyoumean@1.2.2: | 3427 | didyoumean@1.2.2: |
| 3169 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} | 3428 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} |
| 3170 | 3429 | ||
| 3430 | + diff-sequences@29.6.3: | ||
| 3431 | + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} | ||
| 3432 | + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} | ||
| 3433 | + | ||
| 3171 | dingtalk-jsapi@2.15.6: | 3434 | dingtalk-jsapi@2.15.6: |
| 3172 | resolution: {integrity: sha512-804mFz2AFV/H9ysmo7dLqMjSGOQgREsgQIuep+Xg+yNQeQtnUOYntElEzlB798Sj/691e4mMKz9mtQ7v9qdjuA==} | 3435 | resolution: {integrity: sha512-804mFz2AFV/H9ysmo7dLqMjSGOQgREsgQIuep+Xg+yNQeQtnUOYntElEzlB798Sj/691e4mMKz9mtQ7v9qdjuA==} |
| 3173 | 3436 | ||
| ... | @@ -3244,12 +3507,20 @@ packages: | ... | @@ -3244,12 +3507,20 @@ packages: |
| 3244 | eastasianwidth@0.2.0: | 3507 | eastasianwidth@0.2.0: |
| 3245 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} | 3508 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} |
| 3246 | 3509 | ||
| 3510 | + editorconfig@1.0.4: | ||
| 3511 | + resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==} | ||
| 3512 | + engines: {node: '>=14'} | ||
| 3513 | + hasBin: true | ||
| 3514 | + | ||
| 3247 | ee-first@1.1.1: | 3515 | ee-first@1.1.1: |
| 3248 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} | 3516 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} |
| 3249 | 3517 | ||
| 3250 | electron-to-chromium@1.5.211: | 3518 | electron-to-chromium@1.5.211: |
| 3251 | resolution: {integrity: sha512-IGBvimJkotaLzFnwIVgW9/UD/AOJ2tByUmeOrtqBfACSbAw5b1G0XpvdaieKyc7ULmbwXVx+4e4Be8pOPBrYkw==} | 3519 | resolution: {integrity: sha512-IGBvimJkotaLzFnwIVgW9/UD/AOJ2tByUmeOrtqBfACSbAw5b1G0XpvdaieKyc7ULmbwXVx+4e4Be8pOPBrYkw==} |
| 3252 | 3520 | ||
| 3521 | + emoji-regex@10.6.0: | ||
| 3522 | + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} | ||
| 3523 | + | ||
| 3253 | emoji-regex@8.0.0: | 3524 | emoji-regex@8.0.0: |
| 3254 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} | 3525 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} |
| 3255 | 3526 | ||
| ... | @@ -3298,6 +3569,10 @@ packages: | ... | @@ -3298,6 +3569,10 @@ packages: |
| 3298 | engines: {node: '>=4'} | 3569 | engines: {node: '>=4'} |
| 3299 | hasBin: true | 3570 | hasBin: true |
| 3300 | 3571 | ||
| 3572 | + environment@1.1.0: | ||
| 3573 | + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} | ||
| 3574 | + engines: {node: '>=18'} | ||
| 3575 | + | ||
| 3301 | err-code@2.0.3: | 3576 | err-code@2.0.3: |
| 3302 | resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} | 3577 | resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} |
| 3303 | 3578 | ||
| ... | @@ -3473,6 +3748,9 @@ packages: | ... | @@ -3473,6 +3748,9 @@ packages: |
| 3473 | estree-walker@2.0.2: | 3748 | estree-walker@2.0.2: |
| 3474 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} | 3749 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} |
| 3475 | 3750 | ||
| 3751 | + estree-walker@3.0.3: | ||
| 3752 | + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} | ||
| 3753 | + | ||
| 3476 | esutils@2.0.3: | 3754 | esutils@2.0.3: |
| 3477 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} | 3755 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} |
| 3478 | engines: {node: '>=0.10.0'} | 3756 | engines: {node: '>=0.10.0'} |
| ... | @@ -3484,6 +3762,9 @@ packages: | ... | @@ -3484,6 +3762,9 @@ packages: |
| 3484 | eventemitter3@4.0.7: | 3762 | eventemitter3@4.0.7: |
| 3485 | resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} | 3763 | resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} |
| 3486 | 3764 | ||
| 3765 | + eventemitter3@5.0.4: | ||
| 3766 | + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} | ||
| 3767 | + | ||
| 3487 | events@3.3.0: | 3768 | events@3.3.0: |
| 3488 | resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} | 3769 | resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} |
| 3489 | engines: {node: '>=0.8.x'} | 3770 | engines: {node: '>=0.8.x'} |
| ... | @@ -3492,6 +3773,10 @@ packages: | ... | @@ -3492,6 +3773,10 @@ packages: |
| 3492 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} | 3773 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} |
| 3493 | engines: {node: '>=10'} | 3774 | engines: {node: '>=10'} |
| 3494 | 3775 | ||
| 3776 | + execa@8.0.1: | ||
| 3777 | + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} | ||
| 3778 | + engines: {node: '>=16.17'} | ||
| 3779 | + | ||
| 3495 | expr-parser@1.0.0: | 3780 | expr-parser@1.0.0: |
| 3496 | resolution: {integrity: sha512-ncuWTCWH0M5KbaYikXxZ3FG3Q+FTYIEXeXAbxYscdZLFNnR5Le5gRU2r/a/JUZHnxwBDZcxWEWzCoPQlW9Engg==} | 3781 | resolution: {integrity: sha512-ncuWTCWH0M5KbaYikXxZ3FG3Q+FTYIEXeXAbxYscdZLFNnR5Le5gRU2r/a/JUZHnxwBDZcxWEWzCoPQlW9Engg==} |
| 3497 | 3782 | ||
| ... | @@ -3693,6 +3978,13 @@ packages: | ... | @@ -3693,6 +3978,13 @@ packages: |
| 3693 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} | 3978 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} |
| 3694 | engines: {node: 6.* || 8.* || >= 10.*} | 3979 | engines: {node: 6.* || 8.* || >= 10.*} |
| 3695 | 3980 | ||
| 3981 | + get-east-asian-width@1.4.0: | ||
| 3982 | + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} | ||
| 3983 | + engines: {node: '>=18'} | ||
| 3984 | + | ||
| 3985 | + get-func-name@2.0.2: | ||
| 3986 | + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} | ||
| 3987 | + | ||
| 3696 | get-intrinsic@1.3.0: | 3988 | get-intrinsic@1.3.0: |
| 3697 | resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} | 3989 | resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} |
| 3698 | engines: {node: '>= 0.4'} | 3990 | engines: {node: '>= 0.4'} |
| ... | @@ -3725,6 +4017,10 @@ packages: | ... | @@ -3725,6 +4017,10 @@ packages: |
| 3725 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} | 4017 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} |
| 3726 | engines: {node: '>=10'} | 4018 | engines: {node: '>=10'} |
| 3727 | 4019 | ||
| 4020 | + get-stream@8.0.1: | ||
| 4021 | + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} | ||
| 4022 | + engines: {node: '>=16'} | ||
| 4023 | + | ||
| 3728 | get-symbol-description@1.1.0: | 4024 | get-symbol-description@1.1.0: |
| 3729 | resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} | 4025 | resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} |
| 3730 | engines: {node: '>= 0.4'} | 4026 | engines: {node: '>= 0.4'} |
| ... | @@ -3882,6 +4178,9 @@ packages: | ... | @@ -3882,6 +4178,9 @@ packages: |
| 3882 | html-entities@2.6.0: | 4178 | html-entities@2.6.0: |
| 3883 | resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} | 4179 | resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} |
| 3884 | 4180 | ||
| 4181 | + html-escaper@2.0.2: | ||
| 4182 | + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} | ||
| 4183 | + | ||
| 3885 | html-minifier-terser@6.1.0: | 4184 | html-minifier-terser@6.1.0: |
| 3886 | resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} | 4185 | resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} |
| 3887 | engines: {node: '>=12'} | 4186 | engines: {node: '>=12'} |
| ... | @@ -3955,6 +4254,15 @@ packages: | ... | @@ -3955,6 +4254,15 @@ packages: |
| 3955 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} | 4254 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} |
| 3956 | engines: {node: '>=10.17.0'} | 4255 | engines: {node: '>=10.17.0'} |
| 3957 | 4256 | ||
| 4257 | + human-signals@5.0.0: | ||
| 4258 | + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} | ||
| 4259 | + engines: {node: '>=16.17.0'} | ||
| 4260 | + | ||
| 4261 | + husky@9.1.7: | ||
| 4262 | + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} | ||
| 4263 | + engines: {node: '>=18'} | ||
| 4264 | + hasBin: true | ||
| 4265 | + | ||
| 3958 | iconv-lite@0.4.24: | 4266 | iconv-lite@0.4.24: |
| 3959 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} | 4267 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} |
| 3960 | engines: {node: '>=0.10.0'} | 4268 | engines: {node: '>=0.10.0'} |
| ... | @@ -4106,6 +4414,10 @@ packages: | ... | @@ -4106,6 +4414,10 @@ packages: |
| 4106 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} | 4414 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} |
| 4107 | engines: {node: '>=8'} | 4415 | engines: {node: '>=8'} |
| 4108 | 4416 | ||
| 4417 | + is-fullwidth-code-point@5.1.0: | ||
| 4418 | + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} | ||
| 4419 | + engines: {node: '>=18'} | ||
| 4420 | + | ||
| 4109 | is-generator-function@1.1.0: | 4421 | is-generator-function@1.1.0: |
| 4110 | resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} | 4422 | resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} |
| 4111 | engines: {node: '>= 0.4'} | 4423 | engines: {node: '>= 0.4'} |
| ... | @@ -4190,6 +4502,10 @@ packages: | ... | @@ -4190,6 +4502,10 @@ packages: |
| 4190 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} | 4502 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} |
| 4191 | engines: {node: '>=8'} | 4503 | engines: {node: '>=8'} |
| 4192 | 4504 | ||
| 4505 | + is-stream@3.0.0: | ||
| 4506 | + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} | ||
| 4507 | + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} | ||
| 4508 | + | ||
| 4193 | is-string@1.1.1: | 4509 | is-string@1.1.1: |
| 4194 | resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} | 4510 | resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} |
| 4195 | engines: {node: '>= 0.4'} | 4511 | engines: {node: '>= 0.4'} |
| ... | @@ -4242,6 +4558,22 @@ packages: | ... | @@ -4242,6 +4558,22 @@ packages: |
| 4242 | resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} | 4558 | resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} |
| 4243 | engines: {node: '>=0.10.0'} | 4559 | engines: {node: '>=0.10.0'} |
| 4244 | 4560 | ||
| 4561 | + istanbul-lib-coverage@3.2.2: | ||
| 4562 | + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} | ||
| 4563 | + engines: {node: '>=8'} | ||
| 4564 | + | ||
| 4565 | + istanbul-lib-report@3.0.1: | ||
| 4566 | + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} | ||
| 4567 | + engines: {node: '>=10'} | ||
| 4568 | + | ||
| 4569 | + istanbul-lib-source-maps@5.0.6: | ||
| 4570 | + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} | ||
| 4571 | + engines: {node: '>=10'} | ||
| 4572 | + | ||
| 4573 | + istanbul-reports@3.2.0: | ||
| 4574 | + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} | ||
| 4575 | + engines: {node: '>=8'} | ||
| 4576 | + | ||
| 4245 | isurl@1.0.0: | 4577 | isurl@1.0.0: |
| 4246 | resolution: {integrity: sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==} | 4578 | resolution: {integrity: sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==} |
| 4247 | engines: {node: '>= 4'} | 4579 | engines: {node: '>= 4'} |
| ... | @@ -4282,9 +4614,21 @@ packages: | ... | @@ -4282,9 +4614,21 @@ packages: |
| 4282 | joi@17.13.3: | 4614 | joi@17.13.3: |
| 4283 | resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} | 4615 | resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} |
| 4284 | 4616 | ||
| 4617 | + js-beautify@1.15.4: | ||
| 4618 | + resolution: {integrity: sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==} | ||
| 4619 | + engines: {node: '>=14'} | ||
| 4620 | + hasBin: true | ||
| 4621 | + | ||
| 4622 | + js-cookie@3.0.5: | ||
| 4623 | + resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} | ||
| 4624 | + engines: {node: '>=14'} | ||
| 4625 | + | ||
| 4285 | js-tokens@4.0.0: | 4626 | js-tokens@4.0.0: |
| 4286 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} | 4627 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} |
| 4287 | 4628 | ||
| 4629 | + js-tokens@9.0.1: | ||
| 4630 | + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} | ||
| 4631 | + | ||
| 4288 | js-yaml@4.1.0: | 4632 | js-yaml@4.1.0: |
| 4289 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} | 4633 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} |
| 4290 | hasBin: true | 4634 | hasBin: true |
| ... | @@ -4423,24 +4767,28 @@ packages: | ... | @@ -4423,24 +4767,28 @@ packages: |
| 4423 | engines: {node: '>= 12.0.0'} | 4767 | engines: {node: '>= 12.0.0'} |
| 4424 | cpu: [arm64] | 4768 | cpu: [arm64] |
| 4425 | os: [linux] | 4769 | os: [linux] |
| 4770 | + libc: [glibc] | ||
| 4426 | 4771 | ||
| 4427 | lightningcss-linux-arm64-musl@1.30.1: | 4772 | lightningcss-linux-arm64-musl@1.30.1: |
| 4428 | resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} | 4773 | resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} |
| 4429 | engines: {node: '>= 12.0.0'} | 4774 | engines: {node: '>= 12.0.0'} |
| 4430 | cpu: [arm64] | 4775 | cpu: [arm64] |
| 4431 | os: [linux] | 4776 | os: [linux] |
| 4777 | + libc: [musl] | ||
| 4432 | 4778 | ||
| 4433 | lightningcss-linux-x64-gnu@1.30.1: | 4779 | lightningcss-linux-x64-gnu@1.30.1: |
| 4434 | resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} | 4780 | resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} |
| 4435 | engines: {node: '>= 12.0.0'} | 4781 | engines: {node: '>= 12.0.0'} |
| 4436 | cpu: [x64] | 4782 | cpu: [x64] |
| 4437 | os: [linux] | 4783 | os: [linux] |
| 4784 | + libc: [glibc] | ||
| 4438 | 4785 | ||
| 4439 | lightningcss-linux-x64-musl@1.30.1: | 4786 | lightningcss-linux-x64-musl@1.30.1: |
| 4440 | resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} | 4787 | resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} |
| 4441 | engines: {node: '>= 12.0.0'} | 4788 | engines: {node: '>= 12.0.0'} |
| 4442 | cpu: [x64] | 4789 | cpu: [x64] |
| 4443 | os: [linux] | 4790 | os: [linux] |
| 4791 | + libc: [musl] | ||
| 4444 | 4792 | ||
| 4445 | lightningcss-win32-arm64-msvc@1.30.1: | 4793 | lightningcss-win32-arm64-msvc@1.30.1: |
| 4446 | resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} | 4794 | resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} |
| ... | @@ -4465,6 +4813,15 @@ packages: | ... | @@ -4465,6 +4813,15 @@ packages: |
| 4465 | lines-and-columns@1.2.4: | 4813 | lines-and-columns@1.2.4: |
| 4466 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} | 4814 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} |
| 4467 | 4815 | ||
| 4816 | + lint-staged@16.2.7: | ||
| 4817 | + resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==} | ||
| 4818 | + engines: {node: '>=20.17'} | ||
| 4819 | + hasBin: true | ||
| 4820 | + | ||
| 4821 | + listr2@9.0.5: | ||
| 4822 | + resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} | ||
| 4823 | + engines: {node: '>=20.0.0'} | ||
| 4824 | + | ||
| 4468 | loader-runner@4.3.0: | 4825 | loader-runner@4.3.0: |
| 4469 | resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} | 4826 | resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} |
| 4470 | engines: {node: '>=6.11.5'} | 4827 | engines: {node: '>=6.11.5'} |
| ... | @@ -4485,6 +4842,10 @@ packages: | ... | @@ -4485,6 +4842,10 @@ packages: |
| 4485 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} | 4842 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} |
| 4486 | engines: {node: '>=14'} | 4843 | engines: {node: '>=14'} |
| 4487 | 4844 | ||
| 4845 | + local-pkg@0.5.1: | ||
| 4846 | + resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} | ||
| 4847 | + engines: {node: '>=14'} | ||
| 4848 | + | ||
| 4488 | local-pkg@1.1.2: | 4849 | local-pkg@1.1.2: |
| 4489 | resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} | 4850 | resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} |
| 4490 | engines: {node: '>=14'} | 4851 | engines: {node: '>=14'} |
| ... | @@ -4522,6 +4883,10 @@ packages: | ... | @@ -4522,6 +4883,10 @@ packages: |
| 4522 | resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} | 4883 | resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} |
| 4523 | engines: {node: '>=10'} | 4884 | engines: {node: '>=10'} |
| 4524 | 4885 | ||
| 4886 | + log-update@6.1.0: | ||
| 4887 | + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} | ||
| 4888 | + engines: {node: '>=18'} | ||
| 4889 | + | ||
| 4525 | loglevel-plugin-prefix@0.8.4: | 4890 | loglevel-plugin-prefix@0.8.4: |
| 4526 | resolution: {integrity: sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==} | 4891 | resolution: {integrity: sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==} |
| 4527 | 4892 | ||
| ... | @@ -4529,6 +4894,9 @@ packages: | ... | @@ -4529,6 +4894,9 @@ packages: |
| 4529 | resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} | 4894 | resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} |
| 4530 | engines: {node: '>= 0.6.0'} | 4895 | engines: {node: '>= 0.6.0'} |
| 4531 | 4896 | ||
| 4897 | + loupe@2.3.7: | ||
| 4898 | + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} | ||
| 4899 | + | ||
| 4532 | lower-case@1.1.4: | 4900 | lower-case@1.1.4: |
| 4533 | resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} | 4901 | resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} |
| 4534 | 4902 | ||
| ... | @@ -4556,6 +4924,9 @@ packages: | ... | @@ -4556,6 +4924,9 @@ packages: |
| 4556 | magic-string@0.30.18: | 4924 | magic-string@0.30.18: |
| 4557 | resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==} | 4925 | resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==} |
| 4558 | 4926 | ||
| 4927 | + magicast@0.3.5: | ||
| 4928 | + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} | ||
| 4929 | + | ||
| 4559 | make-dir@1.3.0: | 4930 | make-dir@1.3.0: |
| 4560 | resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} | 4931 | resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} |
| 4561 | engines: {node: '>=4'} | 4932 | engines: {node: '>=4'} |
| ... | @@ -4568,6 +4939,10 @@ packages: | ... | @@ -4568,6 +4939,10 @@ packages: |
| 4568 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} | 4939 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} |
| 4569 | engines: {node: '>=8'} | 4940 | engines: {node: '>=8'} |
| 4570 | 4941 | ||
| 4942 | + make-dir@4.0.0: | ||
| 4943 | + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} | ||
| 4944 | + engines: {node: '>=10'} | ||
| 4945 | + | ||
| 4571 | make-fetch-happen@14.0.3: | 4946 | make-fetch-happen@14.0.3: |
| 4572 | resolution: {integrity: sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==} | 4947 | resolution: {integrity: sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==} |
| 4573 | engines: {node: ^18.17.0 || >=20.5.0} | 4948 | engines: {node: ^18.17.0 || >=20.5.0} |
| ... | @@ -4640,6 +5015,14 @@ packages: | ... | @@ -4640,6 +5015,14 @@ packages: |
| 4640 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} | 5015 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} |
| 4641 | engines: {node: '>=6'} | 5016 | engines: {node: '>=6'} |
| 4642 | 5017 | ||
| 5018 | + mimic-fn@4.0.0: | ||
| 5019 | + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} | ||
| 5020 | + engines: {node: '>=12'} | ||
| 5021 | + | ||
| 5022 | + mimic-function@5.0.1: | ||
| 5023 | + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} | ||
| 5024 | + engines: {node: '>=18'} | ||
| 5025 | + | ||
| 4643 | mimic-response@1.0.1: | 5026 | mimic-response@1.0.1: |
| 4644 | resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} | 5027 | resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} |
| 4645 | engines: {node: '>=4'} | 5028 | engines: {node: '>=4'} |
| ... | @@ -4663,6 +5046,10 @@ packages: | ... | @@ -4663,6 +5046,10 @@ packages: |
| 4663 | minimatch@3.1.2: | 5046 | minimatch@3.1.2: |
| 4664 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} | 5047 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} |
| 4665 | 5048 | ||
| 5049 | + minimatch@9.0.1: | ||
| 5050 | + resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} | ||
| 5051 | + engines: {node: '>=16 || 14 >=14.17'} | ||
| 5052 | + | ||
| 4666 | minimatch@9.0.3: | 5053 | minimatch@9.0.3: |
| 4667 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} | 5054 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} |
| 4668 | engines: {node: '>=16 || 14 >=14.17'} | 5055 | engines: {node: '>=16 || 14 >=14.17'} |
| ... | @@ -4765,6 +5152,10 @@ packages: | ... | @@ -4765,6 +5152,10 @@ packages: |
| 4765 | mz@2.7.0: | 5152 | mz@2.7.0: |
| 4766 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} | 5153 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} |
| 4767 | 5154 | ||
| 5155 | + nano-spawn@2.0.0: | ||
| 5156 | + resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==} | ||
| 5157 | + engines: {node: '>=20.17'} | ||
| 5158 | + | ||
| 4768 | nanoid@3.3.11: | 5159 | nanoid@3.3.11: |
| 4769 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} | 5160 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} |
| 4770 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} | 5161 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} |
| ... | @@ -4810,6 +5201,11 @@ packages: | ... | @@ -4810,6 +5201,11 @@ packages: |
| 4810 | node-releases@2.0.19: | 5201 | node-releases@2.0.19: |
| 4811 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} | 5202 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} |
| 4812 | 5203 | ||
| 5204 | + nopt@7.2.1: | ||
| 5205 | + resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} | ||
| 5206 | + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} | ||
| 5207 | + hasBin: true | ||
| 5208 | + | ||
| 4813 | normalize-path@3.0.0: | 5209 | normalize-path@3.0.0: |
| 4814 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} | 5210 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} |
| 4815 | engines: {node: '>=0.10.0'} | 5211 | engines: {node: '>=0.10.0'} |
| ... | @@ -4842,6 +5238,10 @@ packages: | ... | @@ -4842,6 +5238,10 @@ packages: |
| 4842 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} | 5238 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} |
| 4843 | engines: {node: '>=8'} | 5239 | engines: {node: '>=8'} |
| 4844 | 5240 | ||
| 5241 | + npm-run-path@5.3.0: | ||
| 5242 | + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} | ||
| 5243 | + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} | ||
| 5244 | + | ||
| 4845 | nth-check@2.1.1: | 5245 | nth-check@2.1.1: |
| 4846 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} | 5246 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} |
| 4847 | 5247 | ||
| ... | @@ -4906,6 +5306,14 @@ packages: | ... | @@ -4906,6 +5306,14 @@ packages: |
| 4906 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} | 5306 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} |
| 4907 | engines: {node: '>=6'} | 5307 | engines: {node: '>=6'} |
| 4908 | 5308 | ||
| 5309 | + onetime@6.0.0: | ||
| 5310 | + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} | ||
| 5311 | + engines: {node: '>=12'} | ||
| 5312 | + | ||
| 5313 | + onetime@7.0.0: | ||
| 5314 | + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} | ||
| 5315 | + engines: {node: '>=18'} | ||
| 5316 | + | ||
| 4909 | open@8.4.2: | 5317 | open@8.4.2: |
| 4910 | resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} | 5318 | resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} |
| 4911 | engines: {node: '>=12'} | 5319 | engines: {node: '>=12'} |
| ... | @@ -4950,6 +5358,10 @@ packages: | ... | @@ -4950,6 +5358,10 @@ packages: |
| 4950 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} | 5358 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} |
| 4951 | engines: {node: '>=10'} | 5359 | engines: {node: '>=10'} |
| 4952 | 5360 | ||
| 5361 | + p-limit@5.0.0: | ||
| 5362 | + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} | ||
| 5363 | + engines: {node: '>=18'} | ||
| 5364 | + | ||
| 4953 | p-locate@3.0.0: | 5365 | p-locate@3.0.0: |
| 4954 | resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} | 5366 | resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} |
| 4955 | engines: {node: '>=6'} | 5367 | engines: {node: '>=6'} |
| ... | @@ -5033,6 +5445,10 @@ packages: | ... | @@ -5033,6 +5445,10 @@ packages: |
| 5033 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} | 5445 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} |
| 5034 | engines: {node: '>=8'} | 5446 | engines: {node: '>=8'} |
| 5035 | 5447 | ||
| 5448 | + path-key@4.0.0: | ||
| 5449 | + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} | ||
| 5450 | + engines: {node: '>=12'} | ||
| 5451 | + | ||
| 5036 | path-parse@1.0.7: | 5452 | path-parse@1.0.7: |
| 5037 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} | 5453 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} |
| 5038 | 5454 | ||
| ... | @@ -5054,9 +5470,15 @@ packages: | ... | @@ -5054,9 +5470,15 @@ packages: |
| 5054 | resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} | 5470 | resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} |
| 5055 | engines: {node: '>=18'} | 5471 | engines: {node: '>=18'} |
| 5056 | 5472 | ||
| 5473 | + pathe@1.1.2: | ||
| 5474 | + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} | ||
| 5475 | + | ||
| 5057 | pathe@2.0.3: | 5476 | pathe@2.0.3: |
| 5058 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} | 5477 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} |
| 5059 | 5478 | ||
| 5479 | + pathval@1.1.1: | ||
| 5480 | + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} | ||
| 5481 | + | ||
| 5060 | pend@1.2.0: | 5482 | pend@1.2.0: |
| 5061 | resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} | 5483 | resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} |
| 5062 | 5484 | ||
| ... | @@ -5077,6 +5499,11 @@ packages: | ... | @@ -5077,6 +5499,11 @@ packages: |
| 5077 | resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} | 5499 | resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} |
| 5078 | engines: {node: '>=12'} | 5500 | engines: {node: '>=12'} |
| 5079 | 5501 | ||
| 5502 | + pidtree@0.6.0: | ||
| 5503 | + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} | ||
| 5504 | + engines: {node: '>=0.10'} | ||
| 5505 | + hasBin: true | ||
| 5506 | + | ||
| 5080 | pify@2.3.0: | 5507 | pify@2.3.0: |
| 5081 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} | 5508 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} |
| 5082 | engines: {node: '>=0.10.0'} | 5509 | engines: {node: '>=0.10.0'} |
| ... | @@ -5585,6 +6012,11 @@ packages: | ... | @@ -5585,6 +6012,11 @@ packages: |
| 5585 | resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} | 6012 | resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} |
| 5586 | engines: {node: '>=4'} | 6013 | engines: {node: '>=4'} |
| 5587 | 6014 | ||
| 6015 | + prettier@3.8.1: | ||
| 6016 | + resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} | ||
| 6017 | + engines: {node: '>=14'} | ||
| 6018 | + hasBin: true | ||
| 6019 | + | ||
| 5588 | pretty-bytes@5.6.0: | 6020 | pretty-bytes@5.6.0: |
| 5589 | resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} | 6021 | resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} |
| 5590 | engines: {node: '>=6'} | 6022 | engines: {node: '>=6'} |
| ... | @@ -5596,6 +6028,10 @@ packages: | ... | @@ -5596,6 +6028,10 @@ packages: |
| 5596 | resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} | 6028 | resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} |
| 5597 | engines: {node: '>= 10'} | 6029 | engines: {node: '>= 10'} |
| 5598 | 6030 | ||
| 6031 | + pretty-format@29.7.0: | ||
| 6032 | + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} | ||
| 6033 | + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} | ||
| 6034 | + | ||
| 5599 | pretty-time@1.1.0: | 6035 | pretty-time@1.1.0: |
| 5600 | resolution: {integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==} | 6036 | resolution: {integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==} |
| 5601 | engines: {node: '>=4'} | 6037 | engines: {node: '>=4'} |
| ... | @@ -5682,6 +6118,9 @@ packages: | ... | @@ -5682,6 +6118,9 @@ packages: |
| 5682 | react-is@17.0.2: | 6118 | react-is@17.0.2: |
| 5683 | resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} | 6119 | resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} |
| 5684 | 6120 | ||
| 6121 | + react-is@18.3.1: | ||
| 6122 | + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} | ||
| 6123 | + | ||
| 5685 | react@19.1.1: | 6124 | react@19.1.1: |
| 5686 | resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} | 6125 | resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} |
| 5687 | engines: {node: '>=0.10.0'} | 6126 | engines: {node: '>=0.10.0'} |
| ... | @@ -5788,6 +6227,10 @@ packages: | ... | @@ -5788,6 +6227,10 @@ packages: |
| 5788 | resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} | 6227 | resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} |
| 5789 | engines: {node: '>=8'} | 6228 | engines: {node: '>=8'} |
| 5790 | 6229 | ||
| 6230 | + restore-cursor@5.1.0: | ||
| 6231 | + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} | ||
| 6232 | + engines: {node: '>=18'} | ||
| 6233 | + | ||
| 5791 | retry@0.12.0: | 6234 | retry@0.12.0: |
| 5792 | resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} | 6235 | resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} |
| 5793 | engines: {node: '>= 4'} | 6236 | engines: {node: '>= 4'} |
| ... | @@ -5813,6 +6256,11 @@ packages: | ... | @@ -5813,6 +6256,11 @@ packages: |
| 5813 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} | 6256 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} |
| 5814 | hasBin: true | 6257 | hasBin: true |
| 5815 | 6258 | ||
| 6259 | + rollup@4.57.1: | ||
| 6260 | + resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} | ||
| 6261 | + engines: {node: '>=18.0.0', npm: '>=8.0.0'} | ||
| 6262 | + hasBin: true | ||
| 6263 | + | ||
| 5816 | rrweb-cssom@0.7.1: | 6264 | rrweb-cssom@0.7.1: |
| 5817 | resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} | 6265 | resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} |
| 5818 | 6266 | ||
| ... | @@ -6007,6 +6455,9 @@ packages: | ... | @@ -6007,6 +6455,9 @@ packages: |
| 6007 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} | 6455 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} |
| 6008 | engines: {node: '>= 0.4'} | 6456 | engines: {node: '>= 0.4'} |
| 6009 | 6457 | ||
| 6458 | + siginfo@2.0.0: | ||
| 6459 | + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} | ||
| 6460 | + | ||
| 6010 | signal-exit@3.0.7: | 6461 | signal-exit@3.0.7: |
| 6011 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} | 6462 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} |
| 6012 | 6463 | ||
| ... | @@ -6022,6 +6473,10 @@ packages: | ... | @@ -6022,6 +6473,10 @@ packages: |
| 6022 | resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} | 6473 | resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} |
| 6023 | engines: {node: '>=14.16'} | 6474 | engines: {node: '>=14.16'} |
| 6024 | 6475 | ||
| 6476 | + slice-ansi@7.1.2: | ||
| 6477 | + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} | ||
| 6478 | + engines: {node: '>=18'} | ||
| 6479 | + | ||
| 6025 | smart-buffer@4.2.0: | 6480 | smart-buffer@4.2.0: |
| 6026 | resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} | 6481 | resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} |
| 6027 | engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} | 6482 | engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} |
| ... | @@ -6096,6 +6551,9 @@ packages: | ... | @@ -6096,6 +6551,9 @@ packages: |
| 6096 | resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} | 6551 | resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} |
| 6097 | engines: {node: ^18.17.0 || >=20.5.0} | 6552 | engines: {node: ^18.17.0 || >=20.5.0} |
| 6098 | 6553 | ||
| 6554 | + stackback@0.0.2: | ||
| 6555 | + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} | ||
| 6556 | + | ||
| 6099 | statuses@1.5.0: | 6557 | statuses@1.5.0: |
| 6100 | resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} | 6558 | resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} |
| 6101 | engines: {node: '>= 0.6'} | 6559 | engines: {node: '>= 0.6'} |
| ... | @@ -6115,6 +6573,10 @@ packages: | ... | @@ -6115,6 +6573,10 @@ packages: |
| 6115 | resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} | 6573 | resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} |
| 6116 | engines: {node: '>=0.10.0'} | 6574 | engines: {node: '>=0.10.0'} |
| 6117 | 6575 | ||
| 6576 | + string-argv@0.3.2: | ||
| 6577 | + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} | ||
| 6578 | + engines: {node: '>=0.6.19'} | ||
| 6579 | + | ||
| 6118 | string-width@4.2.3: | 6580 | string-width@4.2.3: |
| 6119 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} | 6581 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} |
| 6120 | engines: {node: '>=8'} | 6582 | engines: {node: '>=8'} |
| ... | @@ -6123,6 +6585,14 @@ packages: | ... | @@ -6123,6 +6585,14 @@ packages: |
| 6123 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} | 6585 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} |
| 6124 | engines: {node: '>=12'} | 6586 | engines: {node: '>=12'} |
| 6125 | 6587 | ||
| 6588 | + string-width@7.2.0: | ||
| 6589 | + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} | ||
| 6590 | + engines: {node: '>=18'} | ||
| 6591 | + | ||
| 6592 | + string-width@8.1.1: | ||
| 6593 | + resolution: {integrity: sha512-KpqHIdDL9KwYk22wEOg/VIqYbrnLeSApsKT/bSj6Ez7pn3CftUiLAv2Lccpq1ALcpLV9UX1Ppn92npZWu2w/aw==} | ||
| 6594 | + engines: {node: '>=20'} | ||
| 6595 | + | ||
| 6126 | string.fromcodepoint@0.2.1: | 6596 | string.fromcodepoint@0.2.1: |
| 6127 | resolution: {integrity: sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==} | 6597 | resolution: {integrity: sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==} |
| 6128 | 6598 | ||
| ... | @@ -6163,6 +6633,10 @@ packages: | ... | @@ -6163,6 +6633,10 @@ packages: |
| 6163 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} | 6633 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} |
| 6164 | engines: {node: '>=6'} | 6634 | engines: {node: '>=6'} |
| 6165 | 6635 | ||
| 6636 | + strip-final-newline@3.0.0: | ||
| 6637 | + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} | ||
| 6638 | + engines: {node: '>=12'} | ||
| 6639 | + | ||
| 6166 | strip-json-comments@2.0.1: | 6640 | strip-json-comments@2.0.1: |
| 6167 | resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} | 6641 | resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} |
| 6168 | engines: {node: '>=0.10.0'} | 6642 | engines: {node: '>=0.10.0'} |
| ... | @@ -6171,6 +6645,9 @@ packages: | ... | @@ -6171,6 +6645,9 @@ packages: |
| 6171 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} | 6645 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} |
| 6172 | engines: {node: '>=8'} | 6646 | engines: {node: '>=8'} |
| 6173 | 6647 | ||
| 6648 | + strip-literal@2.1.1: | ||
| 6649 | + resolution: {integrity: sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==} | ||
| 6650 | + | ||
| 6174 | strip-outer@1.0.1: | 6651 | strip-outer@1.0.1: |
| 6175 | resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} | 6652 | resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} |
| 6176 | engines: {node: '>=0.10.0'} | 6653 | engines: {node: '>=0.10.0'} |
| ... | @@ -6305,6 +6782,10 @@ packages: | ... | @@ -6305,6 +6782,10 @@ packages: |
| 6305 | engines: {node: '>=10'} | 6782 | engines: {node: '>=10'} |
| 6306 | hasBin: true | 6783 | hasBin: true |
| 6307 | 6784 | ||
| 6785 | + test-exclude@6.0.0: | ||
| 6786 | + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} | ||
| 6787 | + engines: {node: '>=8'} | ||
| 6788 | + | ||
| 6308 | text-table@0.2.0: | 6789 | text-table@0.2.0: |
| 6309 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} | 6790 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} |
| 6310 | 6791 | ||
| ... | @@ -6328,9 +6809,20 @@ packages: | ... | @@ -6328,9 +6809,20 @@ packages: |
| 6328 | tiny-case@1.0.3: | 6809 | tiny-case@1.0.3: |
| 6329 | resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} | 6810 | resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} |
| 6330 | 6811 | ||
| 6812 | + tinybench@2.9.0: | ||
| 6813 | + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} | ||
| 6814 | + | ||
| 6331 | tinyexec@0.3.2: | 6815 | tinyexec@0.3.2: |
| 6332 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} | 6816 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} |
| 6333 | 6817 | ||
| 6818 | + tinypool@0.8.4: | ||
| 6819 | + resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} | ||
| 6820 | + engines: {node: '>=14.0.0'} | ||
| 6821 | + | ||
| 6822 | + tinyspy@2.2.1: | ||
| 6823 | + resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} | ||
| 6824 | + engines: {node: '>=14.0.0'} | ||
| 6825 | + | ||
| 6334 | to-buffer@1.2.1: | 6826 | to-buffer@1.2.1: |
| 6335 | resolution: {integrity: sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==} | 6827 | resolution: {integrity: sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==} |
| 6336 | engines: {node: '>= 0.4'} | 6828 | engines: {node: '>= 0.4'} |
| ... | @@ -6390,6 +6882,10 @@ packages: | ... | @@ -6390,6 +6882,10 @@ packages: |
| 6390 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} | 6882 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} |
| 6391 | engines: {node: '>= 0.8.0'} | 6883 | engines: {node: '>= 0.8.0'} |
| 6392 | 6884 | ||
| 6885 | + type-detect@4.1.0: | ||
| 6886 | + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} | ||
| 6887 | + engines: {node: '>=4'} | ||
| 6888 | + | ||
| 6393 | type-fest@0.20.2: | 6889 | type-fest@0.20.2: |
| 6394 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} | 6890 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} |
| 6395 | engines: {node: '>=10'} | 6891 | engines: {node: '>=10'} |
| ... | @@ -6570,12 +7066,76 @@ packages: | ... | @@ -6570,12 +7066,76 @@ packages: |
| 6570 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} | 7066 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} |
| 6571 | engines: {node: '>= 0.8'} | 7067 | engines: {node: '>= 0.8'} |
| 6572 | 7068 | ||
| 7069 | + vite-node@1.6.1: | ||
| 7070 | + resolution: {integrity: sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==} | ||
| 7071 | + engines: {node: ^18.0.0 || >=20.0.0} | ||
| 7072 | + hasBin: true | ||
| 7073 | + | ||
| 7074 | + vite@5.4.21: | ||
| 7075 | + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} | ||
| 7076 | + engines: {node: ^18.0.0 || >=20.0.0} | ||
| 7077 | + hasBin: true | ||
| 7078 | + peerDependencies: | ||
| 7079 | + '@types/node': ^18.0.0 || >=20.0.0 | ||
| 7080 | + less: '*' | ||
| 7081 | + lightningcss: ^1.21.0 | ||
| 7082 | + sass: '*' | ||
| 7083 | + sass-embedded: '*' | ||
| 7084 | + stylus: '*' | ||
| 7085 | + sugarss: '*' | ||
| 7086 | + terser: ^5.4.0 | ||
| 7087 | + peerDependenciesMeta: | ||
| 7088 | + '@types/node': | ||
| 7089 | + optional: true | ||
| 7090 | + less: | ||
| 7091 | + optional: true | ||
| 7092 | + lightningcss: | ||
| 7093 | + optional: true | ||
| 7094 | + sass: | ||
| 7095 | + optional: true | ||
| 7096 | + sass-embedded: | ||
| 7097 | + optional: true | ||
| 7098 | + stylus: | ||
| 7099 | + optional: true | ||
| 7100 | + sugarss: | ||
| 7101 | + optional: true | ||
| 7102 | + terser: | ||
| 7103 | + optional: true | ||
| 7104 | + | ||
| 7105 | + vitest@1.6.1: | ||
| 7106 | + resolution: {integrity: sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag==} | ||
| 7107 | + engines: {node: ^18.0.0 || >=20.0.0} | ||
| 7108 | + hasBin: true | ||
| 7109 | + peerDependencies: | ||
| 7110 | + '@edge-runtime/vm': '*' | ||
| 7111 | + '@types/node': ^18.0.0 || >=20.0.0 | ||
| 7112 | + '@vitest/browser': 1.6.1 | ||
| 7113 | + '@vitest/ui': 1.6.1 | ||
| 7114 | + happy-dom: '*' | ||
| 7115 | + jsdom: '*' | ||
| 7116 | + peerDependenciesMeta: | ||
| 7117 | + '@edge-runtime/vm': | ||
| 7118 | + optional: true | ||
| 7119 | + '@types/node': | ||
| 7120 | + optional: true | ||
| 7121 | + '@vitest/browser': | ||
| 7122 | + optional: true | ||
| 7123 | + '@vitest/ui': | ||
| 7124 | + optional: true | ||
| 7125 | + happy-dom: | ||
| 7126 | + optional: true | ||
| 7127 | + jsdom: | ||
| 7128 | + optional: true | ||
| 7129 | + | ||
| 6573 | vm2@3.9.19: | 7130 | vm2@3.9.19: |
| 6574 | resolution: {integrity: sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==} | 7131 | resolution: {integrity: sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==} |
| 6575 | engines: {node: '>=6.0'} | 7132 | engines: {node: '>=6.0'} |
| 6576 | deprecated: The library contains critical security issues and should not be used for production! The maintenance of the project has been discontinued. Consider migrating your code to isolated-vm. | 7133 | deprecated: The library contains critical security issues and should not be used for production! The maintenance of the project has been discontinued. Consider migrating your code to isolated-vm. |
| 6577 | hasBin: true | 7134 | hasBin: true |
| 6578 | 7135 | ||
| 7136 | + vue-component-type-helpers@2.2.12: | ||
| 7137 | + resolution: {integrity: sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==} | ||
| 7138 | + | ||
| 6579 | vue-loader@17.4.2: | 7139 | vue-loader@17.4.2: |
| 6580 | resolution: {integrity: sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==} | 7140 | resolution: {integrity: sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==} |
| 6581 | peerDependencies: | 7141 | peerDependencies: |
| ... | @@ -6688,6 +7248,7 @@ packages: | ... | @@ -6688,6 +7248,7 @@ packages: |
| 6688 | whatwg-encoding@3.1.1: | 7248 | whatwg-encoding@3.1.1: |
| 6689 | resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} | 7249 | resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} |
| 6690 | engines: {node: '>=18'} | 7250 | engines: {node: '>=18'} |
| 7251 | + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation | ||
| 6691 | 7252 | ||
| 6692 | whatwg-fetch@3.6.20: | 7253 | whatwg-fetch@3.6.20: |
| 6693 | resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} | 7254 | resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} |
| ... | @@ -6721,6 +7282,11 @@ packages: | ... | @@ -6721,6 +7282,11 @@ packages: |
| 6721 | engines: {node: '>= 8'} | 7282 | engines: {node: '>= 8'} |
| 6722 | hasBin: true | 7283 | hasBin: true |
| 6723 | 7284 | ||
| 7285 | + why-is-node-running@2.3.0: | ||
| 7286 | + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} | ||
| 7287 | + engines: {node: '>=8'} | ||
| 7288 | + hasBin: true | ||
| 7289 | + | ||
| 6724 | wildcard@2.0.1: | 7290 | wildcard@2.0.1: |
| 6725 | resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} | 7291 | resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} |
| 6726 | 7292 | ||
| ... | @@ -6740,6 +7306,10 @@ packages: | ... | @@ -6740,6 +7306,10 @@ packages: |
| 6740 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} | 7306 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} |
| 6741 | engines: {node: '>=12'} | 7307 | engines: {node: '>=12'} |
| 6742 | 7308 | ||
| 7309 | + wrap-ansi@9.0.2: | ||
| 7310 | + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} | ||
| 7311 | + engines: {node: '>=18'} | ||
| 7312 | + | ||
| 6743 | wrappy@1.0.2: | 7313 | wrappy@1.0.2: |
| 6744 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} | 7314 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} |
| 6745 | 7315 | ||
| ... | @@ -6803,6 +7373,10 @@ packages: | ... | @@ -6803,6 +7373,10 @@ packages: |
| 6803 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} | 7373 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} |
| 6804 | engines: {node: '>=10'} | 7374 | engines: {node: '>=10'} |
| 6805 | 7375 | ||
| 7376 | + yocto-queue@1.2.2: | ||
| 7377 | + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} | ||
| 7378 | + engines: {node: '>=12.20'} | ||
| 7379 | + | ||
| 6806 | yup@1.7.0: | 7380 | yup@1.7.0: |
| 6807 | resolution: {integrity: sha512-VJce62dBd+JQvoc+fCVq+KZfPHr+hXaxCcVgotfwWvlR0Ja3ffYKaJBT8rptPOSKOGJDCUnW2C2JWpud7aRP6Q==} | 7381 | resolution: {integrity: sha512-VJce62dBd+JQvoc+fCVq+KZfPHr+hXaxCcVgotfwWvlR0Ja3ffYKaJBT8rptPOSKOGJDCUnW2C2JWpud7aRP6Q==} |
| 6808 | 7382 | ||
| ... | @@ -7557,6 +8131,8 @@ snapshots: | ... | @@ -7557,6 +8131,8 @@ snapshots: |
| 7557 | '@babel/helper-string-parser': 7.27.1 | 8131 | '@babel/helper-string-parser': 7.27.1 |
| 7558 | '@babel/helper-validator-identifier': 7.27.1 | 8132 | '@babel/helper-validator-identifier': 7.27.1 |
| 7559 | 8133 | ||
| 8134 | + '@bcoe/v8-coverage@0.2.3': {} | ||
| 8135 | + | ||
| 7560 | '@csstools/cascade-layer-name-parser@2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': | 8136 | '@csstools/cascade-layer-name-parser@2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': |
| 7561 | dependencies: | 8137 | dependencies: |
| 7562 | '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) | 8138 | '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) |
| ... | @@ -8065,6 +8641,8 @@ snapshots: | ... | @@ -8065,6 +8641,8 @@ snapshots: |
| 8065 | dependencies: | 8641 | dependencies: |
| 8066 | minipass: 7.1.2 | 8642 | minipass: 7.1.2 |
| 8067 | 8643 | ||
| 8644 | + '@istanbuljs/schema@0.1.3': {} | ||
| 8645 | + | ||
| 8068 | '@jest/schemas@29.6.3': | 8646 | '@jest/schemas@29.6.3': |
| 8069 | dependencies: | 8647 | dependencies: |
| 8070 | '@sinclair/typebox': 0.27.8 | 8648 | '@sinclair/typebox': 0.27.8 |
| ... | @@ -8155,6 +8733,8 @@ snapshots: | ... | @@ -8155,6 +8733,8 @@ snapshots: |
| 8155 | optionalDependencies: | 8733 | optionalDependencies: |
| 8156 | unplugin-vue-components: 0.26.0(@babel/parser@7.28.3)(rollup@3.29.5)(vue@3.5.20(typescript@5.9.2)) | 8734 | unplugin-vue-components: 0.26.0(@babel/parser@7.28.3)(rollup@3.29.5)(vue@3.5.20(typescript@5.9.2)) |
| 8157 | 8735 | ||
| 8736 | + '@one-ini/wasm@0.1.1': {} | ||
| 8737 | + | ||
| 8158 | '@parcel/watcher-android-arm64@2.5.1': | 8738 | '@parcel/watcher-android-arm64@2.5.1': |
| 8159 | optional: true | 8739 | optional: true |
| 8160 | 8740 | ||
| ... | @@ -8240,7 +8820,82 @@ snapshots: | ... | @@ -8240,7 +8820,82 @@ snapshots: |
| 8240 | optionalDependencies: | 8820 | optionalDependencies: |
| 8241 | rollup: 3.29.5 | 8821 | rollup: 3.29.5 |
| 8242 | 8822 | ||
| 8243 | - '@rtsao/scc@1.1.0': {} | 8823 | + '@rollup/rollup-android-arm-eabi@4.57.1': |
| 8824 | + optional: true | ||
| 8825 | + | ||
| 8826 | + '@rollup/rollup-android-arm64@4.57.1': | ||
| 8827 | + optional: true | ||
| 8828 | + | ||
| 8829 | + '@rollup/rollup-darwin-arm64@4.57.1': | ||
| 8830 | + optional: true | ||
| 8831 | + | ||
| 8832 | + '@rollup/rollup-darwin-x64@4.57.1': | ||
| 8833 | + optional: true | ||
| 8834 | + | ||
| 8835 | + '@rollup/rollup-freebsd-arm64@4.57.1': | ||
| 8836 | + optional: true | ||
| 8837 | + | ||
| 8838 | + '@rollup/rollup-freebsd-x64@4.57.1': | ||
| 8839 | + optional: true | ||
| 8840 | + | ||
| 8841 | + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': | ||
| 8842 | + optional: true | ||
| 8843 | + | ||
| 8844 | + '@rollup/rollup-linux-arm-musleabihf@4.57.1': | ||
| 8845 | + optional: true | ||
| 8846 | + | ||
| 8847 | + '@rollup/rollup-linux-arm64-gnu@4.57.1': | ||
| 8848 | + optional: true | ||
| 8849 | + | ||
| 8850 | + '@rollup/rollup-linux-arm64-musl@4.57.1': | ||
| 8851 | + optional: true | ||
| 8852 | + | ||
| 8853 | + '@rollup/rollup-linux-loong64-gnu@4.57.1': | ||
| 8854 | + optional: true | ||
| 8855 | + | ||
| 8856 | + '@rollup/rollup-linux-loong64-musl@4.57.1': | ||
| 8857 | + optional: true | ||
| 8858 | + | ||
| 8859 | + '@rollup/rollup-linux-ppc64-gnu@4.57.1': | ||
| 8860 | + optional: true | ||
| 8861 | + | ||
| 8862 | + '@rollup/rollup-linux-ppc64-musl@4.57.1': | ||
| 8863 | + optional: true | ||
| 8864 | + | ||
| 8865 | + '@rollup/rollup-linux-riscv64-gnu@4.57.1': | ||
| 8866 | + optional: true | ||
| 8867 | + | ||
| 8868 | + '@rollup/rollup-linux-riscv64-musl@4.57.1': | ||
| 8869 | + optional: true | ||
| 8870 | + | ||
| 8871 | + '@rollup/rollup-linux-s390x-gnu@4.57.1': | ||
| 8872 | + optional: true | ||
| 8873 | + | ||
| 8874 | + '@rollup/rollup-linux-x64-gnu@4.57.1': | ||
| 8875 | + optional: true | ||
| 8876 | + | ||
| 8877 | + '@rollup/rollup-linux-x64-musl@4.57.1': | ||
| 8878 | + optional: true | ||
| 8879 | + | ||
| 8880 | + '@rollup/rollup-openbsd-x64@4.57.1': | ||
| 8881 | + optional: true | ||
| 8882 | + | ||
| 8883 | + '@rollup/rollup-openharmony-arm64@4.57.1': | ||
| 8884 | + optional: true | ||
| 8885 | + | ||
| 8886 | + '@rollup/rollup-win32-arm64-msvc@4.57.1': | ||
| 8887 | + optional: true | ||
| 8888 | + | ||
| 8889 | + '@rollup/rollup-win32-ia32-msvc@4.57.1': | ||
| 8890 | + optional: true | ||
| 8891 | + | ||
| 8892 | + '@rollup/rollup-win32-x64-gnu@4.57.1': | ||
| 8893 | + optional: true | ||
| 8894 | + | ||
| 8895 | + '@rollup/rollup-win32-x64-msvc@4.57.1': | ||
| 8896 | + optional: true | ||
| 8897 | + | ||
| 8898 | + '@rtsao/scc@1.1.0': {} | ||
| 8244 | 8899 | ||
| 8245 | '@sideway/address@4.1.5': | 8900 | '@sideway/address@4.1.5': |
| 8246 | dependencies: | 8901 | dependencies: |
| ... | @@ -8323,10 +8978,10 @@ snapshots: | ... | @@ -8323,10 +8978,10 @@ snapshots: |
| 8323 | dependencies: | 8978 | dependencies: |
| 8324 | defer-to-connect: 1.1.3 | 8979 | defer-to-connect: 1.1.3 |
| 8325 | 8980 | ||
| 8326 | - '@tailwindcss-mangle/config@5.1.1': | 8981 | + '@tailwindcss-mangle/config@5.1.1(magicast@0.3.5)': |
| 8327 | dependencies: | 8982 | dependencies: |
| 8328 | '@tailwindcss-mangle/shared': 4.1.1 | 8983 | '@tailwindcss-mangle/shared': 4.1.1 |
| 8329 | - c12: 2.0.4 | 8984 | + c12: 2.0.4(magicast@0.3.5) |
| 8330 | fs-extra: 11.3.1 | 8985 | fs-extra: 11.3.1 |
| 8331 | is-css-request: 1.0.1 | 8986 | is-css-request: 1.0.1 |
| 8332 | pathe: 2.0.3 | 8987 | pathe: 2.0.3 |
| ... | @@ -8506,7 +9161,7 @@ snapshots: | ... | @@ -8506,7 +9161,7 @@ snapshots: |
| 8506 | transitivePeerDependencies: | 9161 | transitivePeerDependencies: |
| 8507 | - supports-color | 9162 | - supports-color |
| 8508 | 9163 | ||
| 8509 | - '@tarojs/plugin-framework-vue3@4.1.7(@tarojs/helper@4.1.7)(@tarojs/runner-utils@4.1.7)(@tarojs/runtime@4.1.7)(@tarojs/shared@4.1.7)(vue-loader@17.4.2(@vue/compiler-sfc@3.5.20)(vue@3.5.20(typescript@5.9.2))(webpack@5.78.0(@swc/core@1.3.96)))(vue@3.5.20(typescript@5.9.2))(webpack@5.78.0(@swc/core@1.3.96))': | 9164 | + '@tarojs/plugin-framework-vue3@4.1.7(@tarojs/helper@4.1.7)(@tarojs/runner-utils@4.1.7)(@tarojs/runtime@4.1.7)(@tarojs/shared@4.1.7)(@vitejs/plugin-vue@5.2.4(vue@3.5.20(typescript@5.9.2)))(vue-loader@17.4.2(@vue/compiler-sfc@3.5.20)(vue@3.5.20(typescript@5.9.2))(webpack@5.78.0(@swc/core@1.3.96)))(vue@3.5.20(typescript@5.9.2))(webpack@5.78.0(@swc/core@1.3.96))': |
| 8510 | dependencies: | 9165 | dependencies: |
| 8511 | '@tarojs/helper': 4.1.7 | 9166 | '@tarojs/helper': 4.1.7 |
| 8512 | '@tarojs/runner-utils': 4.1.7 | 9167 | '@tarojs/runner-utils': 4.1.7 |
| ... | @@ -8517,6 +9172,8 @@ snapshots: | ... | @@ -8517,6 +9172,8 @@ snapshots: |
| 8517 | vue: 3.5.20(typescript@5.9.2) | 9172 | vue: 3.5.20(typescript@5.9.2) |
| 8518 | vue-loader: 17.4.2(@vue/compiler-sfc@3.5.20)(vue@3.5.20(typescript@5.9.2))(webpack@5.78.0(@swc/core@1.3.96)) | 9173 | vue-loader: 17.4.2(@vue/compiler-sfc@3.5.20)(vue@3.5.20(typescript@5.9.2))(webpack@5.78.0(@swc/core@1.3.96)) |
| 8519 | webpack: 5.78.0(@swc/core@1.3.96) | 9174 | webpack: 5.78.0(@swc/core@1.3.96) |
| 9175 | + optionalDependencies: | ||
| 9176 | + '@vitejs/plugin-vue': 5.2.4(vue@3.5.20(typescript@5.9.2)) | ||
| 8520 | 9177 | ||
| 8521 | '@tarojs/plugin-html@4.1.7(@tarojs/helper@4.1.7)(@tarojs/runtime@4.1.7)(@tarojs/shared@4.1.7)': | 9178 | '@tarojs/plugin-html@4.1.7(@tarojs/helper@4.1.7)(@tarojs/runtime@4.1.7)(@tarojs/shared@4.1.7)': |
| 8522 | dependencies: | 9179 | dependencies: |
| ... | @@ -9023,6 +9680,58 @@ snapshots: | ... | @@ -9023,6 +9680,58 @@ snapshots: |
| 9023 | 9680 | ||
| 9024 | '@ungap/structured-clone@1.3.0': {} | 9681 | '@ungap/structured-clone@1.3.0': {} |
| 9025 | 9682 | ||
| 9683 | + '@vitejs/plugin-vue@5.2.4(vue@3.5.20(typescript@5.9.2))': | ||
| 9684 | + dependencies: | ||
| 9685 | + vue: 3.5.20(typescript@5.9.2) | ||
| 9686 | + | ||
| 9687 | + '@vitest/coverage-v8@1.6.1(vitest@1.6.1(@types/node@24.3.0)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.30.1)(sass@1.91.0)(stylus@0.64.0)(terser@5.43.1))': | ||
| 9688 | + dependencies: | ||
| 9689 | + '@ampproject/remapping': 2.3.0 | ||
| 9690 | + '@bcoe/v8-coverage': 0.2.3 | ||
| 9691 | + debug: 4.4.1 | ||
| 9692 | + istanbul-lib-coverage: 3.2.2 | ||
| 9693 | + istanbul-lib-report: 3.0.1 | ||
| 9694 | + istanbul-lib-source-maps: 5.0.6 | ||
| 9695 | + istanbul-reports: 3.2.0 | ||
| 9696 | + magic-string: 0.30.18 | ||
| 9697 | + magicast: 0.3.5 | ||
| 9698 | + picocolors: 1.1.1 | ||
| 9699 | + std-env: 3.9.0 | ||
| 9700 | + strip-literal: 2.1.1 | ||
| 9701 | + test-exclude: 6.0.0 | ||
| 9702 | + vitest: 1.6.1(@types/node@24.3.0)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.30.1)(sass@1.91.0)(stylus@0.64.0)(terser@5.43.1) | ||
| 9703 | + transitivePeerDependencies: | ||
| 9704 | + - supports-color | ||
| 9705 | + | ||
| 9706 | + '@vitest/expect@1.6.1': | ||
| 9707 | + dependencies: | ||
| 9708 | + '@vitest/spy': 1.6.1 | ||
| 9709 | + '@vitest/utils': 1.6.1 | ||
| 9710 | + chai: 4.5.0 | ||
| 9711 | + | ||
| 9712 | + '@vitest/runner@1.6.1': | ||
| 9713 | + dependencies: | ||
| 9714 | + '@vitest/utils': 1.6.1 | ||
| 9715 | + p-limit: 5.0.0 | ||
| 9716 | + pathe: 1.1.2 | ||
| 9717 | + | ||
| 9718 | + '@vitest/snapshot@1.6.1': | ||
| 9719 | + dependencies: | ||
| 9720 | + magic-string: 0.30.18 | ||
| 9721 | + pathe: 1.1.2 | ||
| 9722 | + pretty-format: 29.7.0 | ||
| 9723 | + | ||
| 9724 | + '@vitest/spy@1.6.1': | ||
| 9725 | + dependencies: | ||
| 9726 | + tinyspy: 2.2.1 | ||
| 9727 | + | ||
| 9728 | + '@vitest/utils@1.6.1': | ||
| 9729 | + dependencies: | ||
| 9730 | + diff-sequences: 29.6.3 | ||
| 9731 | + estree-walker: 3.0.3 | ||
| 9732 | + loupe: 2.3.7 | ||
| 9733 | + pretty-format: 29.7.0 | ||
| 9734 | + | ||
| 9026 | '@vue/babel-helper-vue-transform-on@1.5.0': {} | 9735 | '@vue/babel-helper-vue-transform-on@1.5.0': {} |
| 9027 | 9736 | ||
| 9028 | '@vue/babel-plugin-jsx@1.5.0(@babel/core@7.28.3)': | 9737 | '@vue/babel-plugin-jsx@1.5.0(@babel/core@7.28.3)': |
| ... | @@ -9124,6 +9833,11 @@ snapshots: | ... | @@ -9124,6 +9833,11 @@ snapshots: |
| 9124 | 9833 | ||
| 9125 | '@vue/shared@3.5.20': {} | 9834 | '@vue/shared@3.5.20': {} |
| 9126 | 9835 | ||
| 9836 | + '@vue/test-utils@2.4.6': | ||
| 9837 | + dependencies: | ||
| 9838 | + js-beautify: 1.15.4 | ||
| 9839 | + vue-component-type-helpers: 2.2.12 | ||
| 9840 | + | ||
| 9127 | '@weapp-core/escape@4.0.1': {} | 9841 | '@weapp-core/escape@4.0.1': {} |
| 9128 | 9842 | ||
| 9129 | '@weapp-core/regex@1.0.1': {} | 9843 | '@weapp-core/regex@1.0.1': {} |
| ... | @@ -9239,6 +9953,8 @@ snapshots: | ... | @@ -9239,6 +9953,8 @@ snapshots: |
| 9239 | 9953 | ||
| 9240 | '@xtuc/long@4.2.2': {} | 9954 | '@xtuc/long@4.2.2': {} |
| 9241 | 9955 | ||
| 9956 | + abbrev@2.0.0: {} | ||
| 9957 | + | ||
| 9242 | abortcontroller-polyfill@1.7.8: {} | 9958 | abortcontroller-polyfill@1.7.8: {} |
| 9243 | 9959 | ||
| 9244 | accepts@1.3.8: | 9960 | accepts@1.3.8: |
| ... | @@ -9302,6 +10018,10 @@ snapshots: | ... | @@ -9302,6 +10018,10 @@ snapshots: |
| 9302 | dependencies: | 10018 | dependencies: |
| 9303 | type-fest: 0.21.3 | 10019 | type-fest: 0.21.3 |
| 9304 | 10020 | ||
| 10021 | + ansi-escapes@7.3.0: | ||
| 10022 | + dependencies: | ||
| 10023 | + environment: 1.1.0 | ||
| 10024 | + | ||
| 9305 | ansi-html-community@0.0.8: {} | 10025 | ansi-html-community@0.0.8: {} |
| 9306 | 10026 | ||
| 9307 | ansi-regex@5.0.1: {} | 10027 | ansi-regex@5.0.1: {} |
| ... | @@ -9312,6 +10032,8 @@ snapshots: | ... | @@ -9312,6 +10032,8 @@ snapshots: |
| 9312 | dependencies: | 10032 | dependencies: |
| 9313 | color-convert: 2.0.1 | 10033 | color-convert: 2.0.1 |
| 9314 | 10034 | ||
| 10035 | + ansi-styles@5.2.0: {} | ||
| 10036 | + | ||
| 9315 | ansi-styles@6.2.1: {} | 10037 | ansi-styles@6.2.1: {} |
| 9316 | 10038 | ||
| 9317 | any-promise@1.3.0: {} | 10039 | any-promise@1.3.0: {} |
| ... | @@ -9385,6 +10107,8 @@ snapshots: | ... | @@ -9385,6 +10107,8 @@ snapshots: |
| 9385 | get-intrinsic: 1.3.0 | 10107 | get-intrinsic: 1.3.0 |
| 9386 | is-array-buffer: 3.0.5 | 10108 | is-array-buffer: 3.0.5 |
| 9387 | 10109 | ||
| 10110 | + assertion-error@1.1.0: {} | ||
| 10111 | + | ||
| 9388 | async-function@1.0.0: {} | 10112 | async-function@1.0.0: {} |
| 9389 | 10113 | ||
| 9390 | asynckit@0.4.0: {} | 10114 | asynckit@0.4.0: {} |
| ... | @@ -9591,7 +10315,7 @@ snapshots: | ... | @@ -9591,7 +10315,7 @@ snapshots: |
| 9591 | 10315 | ||
| 9592 | bytes@3.1.2: {} | 10316 | bytes@3.1.2: {} |
| 9593 | 10317 | ||
| 9594 | - c12@2.0.4: | 10318 | + c12@2.0.4(magicast@0.3.5): |
| 9595 | dependencies: | 10319 | dependencies: |
| 9596 | chokidar: 4.0.3 | 10320 | chokidar: 4.0.3 |
| 9597 | confbox: 0.1.8 | 10321 | confbox: 0.1.8 |
| ... | @@ -9605,6 +10329,8 @@ snapshots: | ... | @@ -9605,6 +10329,8 @@ snapshots: |
| 9605 | perfect-debounce: 1.0.0 | 10329 | perfect-debounce: 1.0.0 |
| 9606 | pkg-types: 1.3.1 | 10330 | pkg-types: 1.3.1 |
| 9607 | rc9: 2.1.2 | 10331 | rc9: 2.1.2 |
| 10332 | + optionalDependencies: | ||
| 10333 | + magicast: 0.3.5 | ||
| 9608 | 10334 | ||
| 9609 | cac@6.7.14: {} | 10335 | cac@6.7.14: {} |
| 9610 | 10336 | ||
| ... | @@ -9698,6 +10424,16 @@ snapshots: | ... | @@ -9698,6 +10424,16 @@ snapshots: |
| 9698 | tunnel-agent: 0.6.0 | 10424 | tunnel-agent: 0.6.0 |
| 9699 | url-to-options: 1.0.1 | 10425 | url-to-options: 1.0.1 |
| 9700 | 10426 | ||
| 10427 | + chai@4.5.0: | ||
| 10428 | + dependencies: | ||
| 10429 | + assertion-error: 1.1.0 | ||
| 10430 | + check-error: 1.0.3 | ||
| 10431 | + deep-eql: 4.1.4 | ||
| 10432 | + get-func-name: 2.0.2 | ||
| 10433 | + loupe: 2.3.7 | ||
| 10434 | + pathval: 1.1.1 | ||
| 10435 | + type-detect: 4.1.0 | ||
| 10436 | + | ||
| 9701 | chalk@3.0.0: | 10437 | chalk@3.0.0: |
| 9702 | dependencies: | 10438 | dependencies: |
| 9703 | ansi-styles: 4.3.0 | 10439 | ansi-styles: 4.3.0 |
| ... | @@ -9727,6 +10463,10 @@ snapshots: | ... | @@ -9727,6 +10463,10 @@ snapshots: |
| 9727 | 10463 | ||
| 9728 | charenc@0.0.2: {} | 10464 | charenc@0.0.2: {} |
| 9729 | 10465 | ||
| 10466 | + check-error@1.0.3: | ||
| 10467 | + dependencies: | ||
| 10468 | + get-func-name: 2.0.2 | ||
| 10469 | + | ||
| 9730 | chokidar@3.6.0: | 10470 | chokidar@3.6.0: |
| 9731 | dependencies: | 10471 | dependencies: |
| 9732 | anymatch: 3.1.3 | 10472 | anymatch: 3.1.3 |
| ... | @@ -9769,6 +10509,10 @@ snapshots: | ... | @@ -9769,6 +10509,10 @@ snapshots: |
| 9769 | dependencies: | 10509 | dependencies: |
| 9770 | restore-cursor: 3.1.0 | 10510 | restore-cursor: 3.1.0 |
| 9771 | 10511 | ||
| 10512 | + cli-cursor@5.0.0: | ||
| 10513 | + dependencies: | ||
| 10514 | + restore-cursor: 5.1.0 | ||
| 10515 | + | ||
| 9772 | cli-highlight@2.1.11: | 10516 | cli-highlight@2.1.11: |
| 9773 | dependencies: | 10517 | dependencies: |
| 9774 | chalk: 4.1.2 | 10518 | chalk: 4.1.2 |
| ... | @@ -9780,6 +10524,11 @@ snapshots: | ... | @@ -9780,6 +10524,11 @@ snapshots: |
| 9780 | 10524 | ||
| 9781 | cli-spinners@2.9.2: {} | 10525 | cli-spinners@2.9.2: {} |
| 9782 | 10526 | ||
| 10527 | + cli-truncate@5.1.1: | ||
| 10528 | + dependencies: | ||
| 10529 | + slice-ansi: 7.1.2 | ||
| 10530 | + string-width: 8.1.1 | ||
| 10531 | + | ||
| 9783 | cli-width@3.0.0: {} | 10532 | cli-width@3.0.0: {} |
| 9784 | 10533 | ||
| 9785 | cliui@7.0.4: | 10534 | cliui@7.0.4: |
| ... | @@ -9818,6 +10567,10 @@ snapshots: | ... | @@ -9818,6 +10567,10 @@ snapshots: |
| 9818 | dependencies: | 10567 | dependencies: |
| 9819 | delayed-stream: 1.0.0 | 10568 | delayed-stream: 1.0.0 |
| 9820 | 10569 | ||
| 10570 | + commander@10.0.1: {} | ||
| 10571 | + | ||
| 10572 | + commander@14.0.3: {} | ||
| 10573 | + | ||
| 9821 | commander@2.20.3: {} | 10574 | commander@2.20.3: {} |
| 9822 | 10575 | ||
| 9823 | commander@4.1.1: {} | 10576 | commander@4.1.1: {} |
| ... | @@ -10169,6 +10922,10 @@ snapshots: | ... | @@ -10169,6 +10922,10 @@ snapshots: |
| 10169 | pify: 2.3.0 | 10922 | pify: 2.3.0 |
| 10170 | strip-dirs: 2.1.0 | 10923 | strip-dirs: 2.1.0 |
| 10171 | 10924 | ||
| 10925 | + deep-eql@4.1.4: | ||
| 10926 | + dependencies: | ||
| 10927 | + type-detect: 4.1.0 | ||
| 10928 | + | ||
| 10172 | deep-extend@0.6.0: {} | 10929 | deep-extend@0.6.0: {} |
| 10173 | 10930 | ||
| 10174 | deep-is@0.1.4: {} | 10931 | deep-is@0.1.4: {} |
| ... | @@ -10227,6 +10984,8 @@ snapshots: | ... | @@ -10227,6 +10984,8 @@ snapshots: |
| 10227 | 10984 | ||
| 10228 | didyoumean@1.2.2: {} | 10985 | didyoumean@1.2.2: {} |
| 10229 | 10986 | ||
| 10987 | + diff-sequences@29.6.3: {} | ||
| 10988 | + | ||
| 10230 | dingtalk-jsapi@2.15.6: | 10989 | dingtalk-jsapi@2.15.6: |
| 10231 | dependencies: | 10990 | dependencies: |
| 10232 | promise-polyfill: 7.1.2 | 10991 | promise-polyfill: 7.1.2 |
| ... | @@ -10329,10 +11088,19 @@ snapshots: | ... | @@ -10329,10 +11088,19 @@ snapshots: |
| 10329 | 11088 | ||
| 10330 | eastasianwidth@0.2.0: {} | 11089 | eastasianwidth@0.2.0: {} |
| 10331 | 11090 | ||
| 11091 | + editorconfig@1.0.4: | ||
| 11092 | + dependencies: | ||
| 11093 | + '@one-ini/wasm': 0.1.1 | ||
| 11094 | + commander: 10.0.1 | ||
| 11095 | + minimatch: 9.0.1 | ||
| 11096 | + semver: 7.7.2 | ||
| 11097 | + | ||
| 10332 | ee-first@1.1.1: {} | 11098 | ee-first@1.1.1: {} |
| 10333 | 11099 | ||
| 10334 | electron-to-chromium@1.5.211: {} | 11100 | electron-to-chromium@1.5.211: {} |
| 10335 | 11101 | ||
| 11102 | + emoji-regex@10.6.0: {} | ||
| 11103 | + | ||
| 10336 | emoji-regex@8.0.0: {} | 11104 | emoji-regex@8.0.0: {} |
| 10337 | 11105 | ||
| 10338 | emoji-regex@9.2.2: {} | 11106 | emoji-regex@9.2.2: {} |
| ... | @@ -10367,6 +11135,8 @@ snapshots: | ... | @@ -10367,6 +11135,8 @@ snapshots: |
| 10367 | 11135 | ||
| 10368 | envinfo@7.14.0: {} | 11136 | envinfo@7.14.0: {} |
| 10369 | 11137 | ||
| 11138 | + environment@1.1.0: {} | ||
| 11139 | + | ||
| 10370 | err-code@2.0.3: {} | 11140 | err-code@2.0.3: {} |
| 10371 | 11141 | ||
| 10372 | errno@0.1.8: | 11142 | errno@0.1.8: |
| ... | @@ -10717,12 +11487,18 @@ snapshots: | ... | @@ -10717,12 +11487,18 @@ snapshots: |
| 10717 | 11487 | ||
| 10718 | estree-walker@2.0.2: {} | 11488 | estree-walker@2.0.2: {} |
| 10719 | 11489 | ||
| 11490 | + estree-walker@3.0.3: | ||
| 11491 | + dependencies: | ||
| 11492 | + '@types/estree': 1.0.8 | ||
| 11493 | + | ||
| 10720 | esutils@2.0.3: {} | 11494 | esutils@2.0.3: {} |
| 10721 | 11495 | ||
| 10722 | etag@1.8.1: {} | 11496 | etag@1.8.1: {} |
| 10723 | 11497 | ||
| 10724 | eventemitter3@4.0.7: {} | 11498 | eventemitter3@4.0.7: {} |
| 10725 | 11499 | ||
| 11500 | + eventemitter3@5.0.4: {} | ||
| 11501 | + | ||
| 10726 | events@3.3.0: {} | 11502 | events@3.3.0: {} |
| 10727 | 11503 | ||
| 10728 | execa@5.1.1: | 11504 | execa@5.1.1: |
| ... | @@ -10737,6 +11513,18 @@ snapshots: | ... | @@ -10737,6 +11513,18 @@ snapshots: |
| 10737 | signal-exit: 3.0.7 | 11513 | signal-exit: 3.0.7 |
| 10738 | strip-final-newline: 2.0.0 | 11514 | strip-final-newline: 2.0.0 |
| 10739 | 11515 | ||
| 11516 | + execa@8.0.1: | ||
| 11517 | + dependencies: | ||
| 11518 | + cross-spawn: 7.0.6 | ||
| 11519 | + get-stream: 8.0.1 | ||
| 11520 | + human-signals: 5.0.0 | ||
| 11521 | + is-stream: 3.0.0 | ||
| 11522 | + merge-stream: 2.0.0 | ||
| 11523 | + npm-run-path: 5.3.0 | ||
| 11524 | + onetime: 6.0.0 | ||
| 11525 | + signal-exit: 4.1.0 | ||
| 11526 | + strip-final-newline: 3.0.0 | ||
| 11527 | + | ||
| 10740 | expr-parser@1.0.0: {} | 11528 | expr-parser@1.0.0: {} |
| 10741 | 11529 | ||
| 10742 | express@4.21.2: | 11530 | express@4.21.2: |
| ... | @@ -10963,6 +11751,10 @@ snapshots: | ... | @@ -10963,6 +11751,10 @@ snapshots: |
| 10963 | 11751 | ||
| 10964 | get-caller-file@2.0.5: {} | 11752 | get-caller-file@2.0.5: {} |
| 10965 | 11753 | ||
| 11754 | + get-east-asian-width@1.4.0: {} | ||
| 11755 | + | ||
| 11756 | + get-func-name@2.0.2: {} | ||
| 11757 | + | ||
| 10966 | get-intrinsic@1.3.0: | 11758 | get-intrinsic@1.3.0: |
| 10967 | dependencies: | 11759 | dependencies: |
| 10968 | call-bind-apply-helpers: 1.0.2 | 11760 | call-bind-apply-helpers: 1.0.2 |
| ... | @@ -11002,6 +11794,8 @@ snapshots: | ... | @@ -11002,6 +11794,8 @@ snapshots: |
| 11002 | 11794 | ||
| 11003 | get-stream@6.0.1: {} | 11795 | get-stream@6.0.1: {} |
| 11004 | 11796 | ||
| 11797 | + get-stream@8.0.1: {} | ||
| 11798 | + | ||
| 11005 | get-symbol-description@1.1.0: | 11799 | get-symbol-description@1.1.0: |
| 11006 | dependencies: | 11800 | dependencies: |
| 11007 | call-bound: 1.0.4 | 11801 | call-bound: 1.0.4 |
| ... | @@ -11207,6 +12001,8 @@ snapshots: | ... | @@ -11207,6 +12001,8 @@ snapshots: |
| 11207 | 12001 | ||
| 11208 | html-entities@2.6.0: {} | 12002 | html-entities@2.6.0: {} |
| 11209 | 12003 | ||
| 12004 | + html-escaper@2.0.2: {} | ||
| 12005 | + | ||
| 11210 | html-minifier-terser@6.1.0: | 12006 | html-minifier-terser@6.1.0: |
| 11211 | dependencies: | 12007 | dependencies: |
| 11212 | camel-case: 4.1.2 | 12008 | camel-case: 4.1.2 |
| ... | @@ -11310,6 +12106,10 @@ snapshots: | ... | @@ -11310,6 +12106,10 @@ snapshots: |
| 11310 | 12106 | ||
| 11311 | human-signals@2.1.0: {} | 12107 | human-signals@2.1.0: {} |
| 11312 | 12108 | ||
| 12109 | + human-signals@5.0.0: {} | ||
| 12110 | + | ||
| 12111 | + husky@9.1.7: {} | ||
| 12112 | + | ||
| 11313 | iconv-lite@0.4.24: | 12113 | iconv-lite@0.4.24: |
| 11314 | dependencies: | 12114 | dependencies: |
| 11315 | safer-buffer: 2.1.2 | 12115 | safer-buffer: 2.1.2 |
| ... | @@ -11462,6 +12262,10 @@ snapshots: | ... | @@ -11462,6 +12262,10 @@ snapshots: |
| 11462 | 12262 | ||
| 11463 | is-fullwidth-code-point@3.0.0: {} | 12263 | is-fullwidth-code-point@3.0.0: {} |
| 11464 | 12264 | ||
| 12265 | + is-fullwidth-code-point@5.1.0: | ||
| 12266 | + dependencies: | ||
| 12267 | + get-east-asian-width: 1.4.0 | ||
| 12268 | + | ||
| 11465 | is-generator-function@1.1.0: | 12269 | is-generator-function@1.1.0: |
| 11466 | dependencies: | 12270 | dependencies: |
| 11467 | call-bound: 1.0.4 | 12271 | call-bound: 1.0.4 |
| ... | @@ -11525,6 +12329,8 @@ snapshots: | ... | @@ -11525,6 +12329,8 @@ snapshots: |
| 11525 | 12329 | ||
| 11526 | is-stream@2.0.1: {} | 12330 | is-stream@2.0.1: {} |
| 11527 | 12331 | ||
| 12332 | + is-stream@3.0.0: {} | ||
| 12333 | + | ||
| 11528 | is-string@1.1.1: | 12334 | is-string@1.1.1: |
| 11529 | dependencies: | 12335 | dependencies: |
| 11530 | call-bound: 1.0.4 | 12336 | call-bound: 1.0.4 |
| ... | @@ -11569,6 +12375,27 @@ snapshots: | ... | @@ -11569,6 +12375,27 @@ snapshots: |
| 11569 | 12375 | ||
| 11570 | isobject@3.0.1: {} | 12376 | isobject@3.0.1: {} |
| 11571 | 12377 | ||
| 12378 | + istanbul-lib-coverage@3.2.2: {} | ||
| 12379 | + | ||
| 12380 | + istanbul-lib-report@3.0.1: | ||
| 12381 | + dependencies: | ||
| 12382 | + istanbul-lib-coverage: 3.2.2 | ||
| 12383 | + make-dir: 4.0.0 | ||
| 12384 | + supports-color: 7.2.0 | ||
| 12385 | + | ||
| 12386 | + istanbul-lib-source-maps@5.0.6: | ||
| 12387 | + dependencies: | ||
| 12388 | + '@jridgewell/trace-mapping': 0.3.30 | ||
| 12389 | + debug: 4.4.1 | ||
| 12390 | + istanbul-lib-coverage: 3.2.2 | ||
| 12391 | + transitivePeerDependencies: | ||
| 12392 | + - supports-color | ||
| 12393 | + | ||
| 12394 | + istanbul-reports@3.2.0: | ||
| 12395 | + dependencies: | ||
| 12396 | + html-escaper: 2.0.2 | ||
| 12397 | + istanbul-lib-report: 3.0.1 | ||
| 12398 | + | ||
| 11572 | isurl@1.0.0: | 12399 | isurl@1.0.0: |
| 11573 | dependencies: | 12400 | dependencies: |
| 11574 | has-to-string-tag-x: 1.4.1 | 12401 | has-to-string-tag-x: 1.4.1 |
| ... | @@ -11628,8 +12455,20 @@ snapshots: | ... | @@ -11628,8 +12455,20 @@ snapshots: |
| 11628 | '@sideway/formula': 3.0.1 | 12455 | '@sideway/formula': 3.0.1 |
| 11629 | '@sideway/pinpoint': 2.0.0 | 12456 | '@sideway/pinpoint': 2.0.0 |
| 11630 | 12457 | ||
| 12458 | + js-beautify@1.15.4: | ||
| 12459 | + dependencies: | ||
| 12460 | + config-chain: 1.1.13 | ||
| 12461 | + editorconfig: 1.0.4 | ||
| 12462 | + glob: 10.4.5 | ||
| 12463 | + js-cookie: 3.0.5 | ||
| 12464 | + nopt: 7.2.1 | ||
| 12465 | + | ||
| 12466 | + js-cookie@3.0.5: {} | ||
| 12467 | + | ||
| 11631 | js-tokens@4.0.0: {} | 12468 | js-tokens@4.0.0: {} |
| 11632 | 12469 | ||
| 12470 | + js-tokens@9.0.1: {} | ||
| 12471 | + | ||
| 11633 | js-yaml@4.1.0: | 12472 | js-yaml@4.1.0: |
| 11634 | dependencies: | 12473 | dependencies: |
| 11635 | argparse: 2.0.1 | 12474 | argparse: 2.0.1 |
| ... | @@ -11798,6 +12637,25 @@ snapshots: | ... | @@ -11798,6 +12637,25 @@ snapshots: |
| 11798 | 12637 | ||
| 11799 | lines-and-columns@1.2.4: {} | 12638 | lines-and-columns@1.2.4: {} |
| 11800 | 12639 | ||
| 12640 | + lint-staged@16.2.7: | ||
| 12641 | + dependencies: | ||
| 12642 | + commander: 14.0.3 | ||
| 12643 | + listr2: 9.0.5 | ||
| 12644 | + micromatch: 4.0.8 | ||
| 12645 | + nano-spawn: 2.0.0 | ||
| 12646 | + pidtree: 0.6.0 | ||
| 12647 | + string-argv: 0.3.2 | ||
| 12648 | + yaml: 2.8.1 | ||
| 12649 | + | ||
| 12650 | + listr2@9.0.5: | ||
| 12651 | + dependencies: | ||
| 12652 | + cli-truncate: 5.1.1 | ||
| 12653 | + colorette: 2.0.20 | ||
| 12654 | + eventemitter3: 5.0.4 | ||
| 12655 | + log-update: 6.1.0 | ||
| 12656 | + rfdc: 1.4.1 | ||
| 12657 | + wrap-ansi: 9.0.2 | ||
| 12658 | + | ||
| 11801 | loader-runner@4.3.0: {} | 12659 | loader-runner@4.3.0: {} |
| 11802 | 12660 | ||
| 11803 | loader-utils@1.4.2: | 12661 | loader-utils@1.4.2: |
| ... | @@ -11816,6 +12674,11 @@ snapshots: | ... | @@ -11816,6 +12674,11 @@ snapshots: |
| 11816 | 12674 | ||
| 11817 | local-pkg@0.4.3: {} | 12675 | local-pkg@0.4.3: {} |
| 11818 | 12676 | ||
| 12677 | + local-pkg@0.5.1: | ||
| 12678 | + dependencies: | ||
| 12679 | + mlly: 1.8.0 | ||
| 12680 | + pkg-types: 1.3.1 | ||
| 12681 | + | ||
| 11819 | local-pkg@1.1.2: | 12682 | local-pkg@1.1.2: |
| 11820 | dependencies: | 12683 | dependencies: |
| 11821 | mlly: 1.8.0 | 12684 | mlly: 1.8.0 |
| ... | @@ -11850,10 +12713,22 @@ snapshots: | ... | @@ -11850,10 +12713,22 @@ snapshots: |
| 11850 | chalk: 4.1.2 | 12713 | chalk: 4.1.2 |
| 11851 | is-unicode-supported: 0.1.0 | 12714 | is-unicode-supported: 0.1.0 |
| 11852 | 12715 | ||
| 12716 | + log-update@6.1.0: | ||
| 12717 | + dependencies: | ||
| 12718 | + ansi-escapes: 7.3.0 | ||
| 12719 | + cli-cursor: 5.0.0 | ||
| 12720 | + slice-ansi: 7.1.2 | ||
| 12721 | + strip-ansi: 7.1.0 | ||
| 12722 | + wrap-ansi: 9.0.2 | ||
| 12723 | + | ||
| 11853 | loglevel-plugin-prefix@0.8.4: {} | 12724 | loglevel-plugin-prefix@0.8.4: {} |
| 11854 | 12725 | ||
| 11855 | loglevel@1.9.2: {} | 12726 | loglevel@1.9.2: {} |
| 11856 | 12727 | ||
| 12728 | + loupe@2.3.7: | ||
| 12729 | + dependencies: | ||
| 12730 | + get-func-name: 2.0.2 | ||
| 12731 | + | ||
| 11857 | lower-case@1.1.4: {} | 12732 | lower-case@1.1.4: {} |
| 11858 | 12733 | ||
| 11859 | lower-case@2.0.2: | 12734 | lower-case@2.0.2: |
| ... | @@ -11876,6 +12751,12 @@ snapshots: | ... | @@ -11876,6 +12751,12 @@ snapshots: |
| 11876 | dependencies: | 12751 | dependencies: |
| 11877 | '@jridgewell/sourcemap-codec': 1.5.5 | 12752 | '@jridgewell/sourcemap-codec': 1.5.5 |
| 11878 | 12753 | ||
| 12754 | + magicast@0.3.5: | ||
| 12755 | + dependencies: | ||
| 12756 | + '@babel/parser': 7.28.3 | ||
| 12757 | + '@babel/types': 7.28.2 | ||
| 12758 | + source-map-js: 1.2.1 | ||
| 12759 | + | ||
| 11879 | make-dir@1.3.0: | 12760 | make-dir@1.3.0: |
| 11880 | dependencies: | 12761 | dependencies: |
| 11881 | pify: 3.0.0 | 12762 | pify: 3.0.0 |
| ... | @@ -11889,6 +12770,10 @@ snapshots: | ... | @@ -11889,6 +12770,10 @@ snapshots: |
| 11889 | dependencies: | 12770 | dependencies: |
| 11890 | semver: 6.3.1 | 12771 | semver: 6.3.1 |
| 11891 | 12772 | ||
| 12773 | + make-dir@4.0.0: | ||
| 12774 | + dependencies: | ||
| 12775 | + semver: 7.7.2 | ||
| 12776 | + | ||
| 11892 | make-fetch-happen@14.0.3: | 12777 | make-fetch-happen@14.0.3: |
| 11893 | dependencies: | 12778 | dependencies: |
| 11894 | '@npmcli/agent': 3.0.0 | 12779 | '@npmcli/agent': 3.0.0 |
| ... | @@ -11952,6 +12837,10 @@ snapshots: | ... | @@ -11952,6 +12837,10 @@ snapshots: |
| 11952 | 12837 | ||
| 11953 | mimic-fn@2.1.0: {} | 12838 | mimic-fn@2.1.0: {} |
| 11954 | 12839 | ||
| 12840 | + mimic-fn@4.0.0: {} | ||
| 12841 | + | ||
| 12842 | + mimic-function@5.0.1: {} | ||
| 12843 | + | ||
| 11955 | mimic-response@1.0.1: {} | 12844 | mimic-response@1.0.1: {} |
| 11956 | 12845 | ||
| 11957 | mini-css-extract-plugin@2.9.4(webpack@5.78.0(@swc/core@1.3.96)): | 12846 | mini-css-extract-plugin@2.9.4(webpack@5.78.0(@swc/core@1.3.96)): |
| ... | @@ -11974,6 +12863,10 @@ snapshots: | ... | @@ -11974,6 +12863,10 @@ snapshots: |
| 11974 | dependencies: | 12863 | dependencies: |
| 11975 | brace-expansion: 1.1.12 | 12864 | brace-expansion: 1.1.12 |
| 11976 | 12865 | ||
| 12866 | + minimatch@9.0.1: | ||
| 12867 | + dependencies: | ||
| 12868 | + brace-expansion: 2.0.2 | ||
| 12869 | + | ||
| 11977 | minimatch@9.0.3: | 12870 | minimatch@9.0.3: |
| 11978 | dependencies: | 12871 | dependencies: |
| 11979 | brace-expansion: 2.0.2 | 12872 | brace-expansion: 2.0.2 |
| ... | @@ -12077,6 +12970,8 @@ snapshots: | ... | @@ -12077,6 +12970,8 @@ snapshots: |
| 12077 | object-assign: 4.1.1 | 12970 | object-assign: 4.1.1 |
| 12078 | thenify-all: 1.6.0 | 12971 | thenify-all: 1.6.0 |
| 12079 | 12972 | ||
| 12973 | + nano-spawn@2.0.0: {} | ||
| 12974 | + | ||
| 12080 | nanoid@3.3.11: {} | 12975 | nanoid@3.3.11: {} |
| 12081 | 12976 | ||
| 12082 | native-request@1.1.2: | 12977 | native-request@1.1.2: |
| ... | @@ -12110,6 +13005,10 @@ snapshots: | ... | @@ -12110,6 +13005,10 @@ snapshots: |
| 12110 | 13005 | ||
| 12111 | node-releases@2.0.19: {} | 13006 | node-releases@2.0.19: {} |
| 12112 | 13007 | ||
| 13008 | + nopt@7.2.1: | ||
| 13009 | + dependencies: | ||
| 13010 | + abbrev: 2.0.0 | ||
| 13011 | + | ||
| 12113 | normalize-path@3.0.0: {} | 13012 | normalize-path@3.0.0: {} |
| 12114 | 13013 | ||
| 12115 | normalize-range@0.1.2: {} | 13014 | normalize-range@0.1.2: {} |
| ... | @@ -12151,6 +13050,10 @@ snapshots: | ... | @@ -12151,6 +13050,10 @@ snapshots: |
| 12151 | dependencies: | 13050 | dependencies: |
| 12152 | path-key: 3.1.1 | 13051 | path-key: 3.1.1 |
| 12153 | 13052 | ||
| 13053 | + npm-run-path@5.3.0: | ||
| 13054 | + dependencies: | ||
| 13055 | + path-key: 4.0.0 | ||
| 13056 | + | ||
| 12154 | nth-check@2.1.1: | 13057 | nth-check@2.1.1: |
| 12155 | dependencies: | 13058 | dependencies: |
| 12156 | boolbase: 1.0.0 | 13059 | boolbase: 1.0.0 |
| ... | @@ -12221,6 +13124,14 @@ snapshots: | ... | @@ -12221,6 +13124,14 @@ snapshots: |
| 12221 | dependencies: | 13124 | dependencies: |
| 12222 | mimic-fn: 2.1.0 | 13125 | mimic-fn: 2.1.0 |
| 12223 | 13126 | ||
| 13127 | + onetime@6.0.0: | ||
| 13128 | + dependencies: | ||
| 13129 | + mimic-fn: 4.0.0 | ||
| 13130 | + | ||
| 13131 | + onetime@7.0.0: | ||
| 13132 | + dependencies: | ||
| 13133 | + mimic-function: 5.0.1 | ||
| 13134 | + | ||
| 12224 | open@8.4.2: | 13135 | open@8.4.2: |
| 12225 | dependencies: | 13136 | dependencies: |
| 12226 | define-lazy-prop: 2.0.0 | 13137 | define-lazy-prop: 2.0.0 |
| ... | @@ -12274,6 +13185,10 @@ snapshots: | ... | @@ -12274,6 +13185,10 @@ snapshots: |
| 12274 | dependencies: | 13185 | dependencies: |
| 12275 | yocto-queue: 0.1.0 | 13186 | yocto-queue: 0.1.0 |
| 12276 | 13187 | ||
| 13188 | + p-limit@5.0.0: | ||
| 13189 | + dependencies: | ||
| 13190 | + yocto-queue: 1.2.2 | ||
| 13191 | + | ||
| 12277 | p-locate@3.0.0: | 13192 | p-locate@3.0.0: |
| 12278 | dependencies: | 13193 | dependencies: |
| 12279 | p-limit: 2.3.0 | 13194 | p-limit: 2.3.0 |
| ... | @@ -12356,6 +13271,8 @@ snapshots: | ... | @@ -12356,6 +13271,8 @@ snapshots: |
| 12356 | 13271 | ||
| 12357 | path-key@3.1.1: {} | 13272 | path-key@3.1.1: {} |
| 12358 | 13273 | ||
| 13274 | + path-key@4.0.0: {} | ||
| 13275 | + | ||
| 12359 | path-parse@1.0.7: {} | 13276 | path-parse@1.0.7: {} |
| 12360 | 13277 | ||
| 12361 | path-scurry@1.11.1: | 13278 | path-scurry@1.11.1: |
| ... | @@ -12371,8 +13288,12 @@ snapshots: | ... | @@ -12371,8 +13288,12 @@ snapshots: |
| 12371 | 13288 | ||
| 12372 | path-type@6.0.0: {} | 13289 | path-type@6.0.0: {} |
| 12373 | 13290 | ||
| 13291 | + pathe@1.1.2: {} | ||
| 13292 | + | ||
| 12374 | pathe@2.0.3: {} | 13293 | pathe@2.0.3: {} |
| 12375 | 13294 | ||
| 13295 | + pathval@1.1.1: {} | ||
| 13296 | + | ||
| 12376 | pend@1.2.0: {} | 13297 | pend@1.2.0: {} |
| 12377 | 13298 | ||
| 12378 | perfect-debounce@1.0.0: {} | 13299 | perfect-debounce@1.0.0: {} |
| ... | @@ -12385,6 +13306,8 @@ snapshots: | ... | @@ -12385,6 +13306,8 @@ snapshots: |
| 12385 | 13306 | ||
| 12386 | picomatch@4.0.3: {} | 13307 | picomatch@4.0.3: {} |
| 12387 | 13308 | ||
| 13309 | + pidtree@0.6.0: {} | ||
| 13310 | + | ||
| 12388 | pify@2.3.0: {} | 13311 | pify@2.3.0: {} |
| 12389 | 13312 | ||
| 12390 | pify@3.0.0: {} | 13313 | pify@3.0.0: {} |
| ... | @@ -12921,6 +13844,8 @@ snapshots: | ... | @@ -12921,6 +13844,8 @@ snapshots: |
| 12921 | 13844 | ||
| 12922 | prepend-http@2.0.0: {} | 13845 | prepend-http@2.0.0: {} |
| 12923 | 13846 | ||
| 13847 | + prettier@3.8.1: {} | ||
| 13848 | + | ||
| 12924 | pretty-bytes@5.6.0: {} | 13849 | pretty-bytes@5.6.0: {} |
| 12925 | 13850 | ||
| 12926 | pretty-error@4.0.0: | 13851 | pretty-error@4.0.0: |
| ... | @@ -12935,6 +13860,12 @@ snapshots: | ... | @@ -12935,6 +13860,12 @@ snapshots: |
| 12935 | ansi-styles: 4.3.0 | 13860 | ansi-styles: 4.3.0 |
| 12936 | react-is: 17.0.2 | 13861 | react-is: 17.0.2 |
| 12937 | 13862 | ||
| 13863 | + pretty-format@29.7.0: | ||
| 13864 | + dependencies: | ||
| 13865 | + '@jest/schemas': 29.6.3 | ||
| 13866 | + ansi-styles: 5.2.0 | ||
| 13867 | + react-is: 18.3.1 | ||
| 13868 | + | ||
| 12938 | pretty-time@1.1.0: {} | 13869 | pretty-time@1.1.0: {} |
| 12939 | 13870 | ||
| 12940 | proc-log@5.0.0: {} | 13871 | proc-log@5.0.0: {} |
| ... | @@ -13022,6 +13953,8 @@ snapshots: | ... | @@ -13022,6 +13953,8 @@ snapshots: |
| 13022 | 13953 | ||
| 13023 | react-is@17.0.2: {} | 13954 | react-is@17.0.2: {} |
| 13024 | 13955 | ||
| 13956 | + react-is@18.3.1: {} | ||
| 13957 | + | ||
| 13025 | react@19.1.1: {} | 13958 | react@19.1.1: {} |
| 13026 | 13959 | ||
| 13027 | read-cache@1.0.0: | 13960 | read-cache@1.0.0: |
| ... | @@ -13148,6 +14081,11 @@ snapshots: | ... | @@ -13148,6 +14081,11 @@ snapshots: |
| 13148 | onetime: 5.1.2 | 14081 | onetime: 5.1.2 |
| 13149 | signal-exit: 3.0.7 | 14082 | signal-exit: 3.0.7 |
| 13150 | 14083 | ||
| 14084 | + restore-cursor@5.1.0: | ||
| 14085 | + dependencies: | ||
| 14086 | + onetime: 7.0.0 | ||
| 14087 | + signal-exit: 4.1.0 | ||
| 14088 | + | ||
| 13151 | retry@0.12.0: {} | 14089 | retry@0.12.0: {} |
| 13152 | 14090 | ||
| 13153 | retry@0.13.1: {} | 14091 | retry@0.13.1: {} |
| ... | @@ -13164,6 +14102,37 @@ snapshots: | ... | @@ -13164,6 +14102,37 @@ snapshots: |
| 13164 | optionalDependencies: | 14102 | optionalDependencies: |
| 13165 | fsevents: 2.3.3 | 14103 | fsevents: 2.3.3 |
| 13166 | 14104 | ||
| 14105 | + rollup@4.57.1: | ||
| 14106 | + dependencies: | ||
| 14107 | + '@types/estree': 1.0.8 | ||
| 14108 | + optionalDependencies: | ||
| 14109 | + '@rollup/rollup-android-arm-eabi': 4.57.1 | ||
| 14110 | + '@rollup/rollup-android-arm64': 4.57.1 | ||
| 14111 | + '@rollup/rollup-darwin-arm64': 4.57.1 | ||
| 14112 | + '@rollup/rollup-darwin-x64': 4.57.1 | ||
| 14113 | + '@rollup/rollup-freebsd-arm64': 4.57.1 | ||
| 14114 | + '@rollup/rollup-freebsd-x64': 4.57.1 | ||
| 14115 | + '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 | ||
| 14116 | + '@rollup/rollup-linux-arm-musleabihf': 4.57.1 | ||
| 14117 | + '@rollup/rollup-linux-arm64-gnu': 4.57.1 | ||
| 14118 | + '@rollup/rollup-linux-arm64-musl': 4.57.1 | ||
| 14119 | + '@rollup/rollup-linux-loong64-gnu': 4.57.1 | ||
| 14120 | + '@rollup/rollup-linux-loong64-musl': 4.57.1 | ||
| 14121 | + '@rollup/rollup-linux-ppc64-gnu': 4.57.1 | ||
| 14122 | + '@rollup/rollup-linux-ppc64-musl': 4.57.1 | ||
| 14123 | + '@rollup/rollup-linux-riscv64-gnu': 4.57.1 | ||
| 14124 | + '@rollup/rollup-linux-riscv64-musl': 4.57.1 | ||
| 14125 | + '@rollup/rollup-linux-s390x-gnu': 4.57.1 | ||
| 14126 | + '@rollup/rollup-linux-x64-gnu': 4.57.1 | ||
| 14127 | + '@rollup/rollup-linux-x64-musl': 4.57.1 | ||
| 14128 | + '@rollup/rollup-openbsd-x64': 4.57.1 | ||
| 14129 | + '@rollup/rollup-openharmony-arm64': 4.57.1 | ||
| 14130 | + '@rollup/rollup-win32-arm64-msvc': 4.57.1 | ||
| 14131 | + '@rollup/rollup-win32-ia32-msvc': 4.57.1 | ||
| 14132 | + '@rollup/rollup-win32-x64-gnu': 4.57.1 | ||
| 14133 | + '@rollup/rollup-win32-x64-msvc': 4.57.1 | ||
| 14134 | + fsevents: 2.3.3 | ||
| 14135 | + | ||
| 13167 | rrweb-cssom@0.7.1: {} | 14136 | rrweb-cssom@0.7.1: {} |
| 13168 | 14137 | ||
| 13169 | rrweb-cssom@0.8.0: {} | 14138 | rrweb-cssom@0.8.0: {} |
| ... | @@ -13406,6 +14375,8 @@ snapshots: | ... | @@ -13406,6 +14375,8 @@ snapshots: |
| 13406 | side-channel-map: 1.0.1 | 14375 | side-channel-map: 1.0.1 |
| 13407 | side-channel-weakmap: 1.0.2 | 14376 | side-channel-weakmap: 1.0.2 |
| 13408 | 14377 | ||
| 14378 | + siginfo@2.0.0: {} | ||
| 14379 | + | ||
| 13409 | signal-exit@3.0.7: {} | 14380 | signal-exit@3.0.7: {} |
| 13410 | 14381 | ||
| 13411 | signal-exit@4.1.0: {} | 14382 | signal-exit@4.1.0: {} |
| ... | @@ -13414,6 +14385,11 @@ snapshots: | ... | @@ -13414,6 +14385,11 @@ snapshots: |
| 13414 | 14385 | ||
| 13415 | slash@5.1.0: {} | 14386 | slash@5.1.0: {} |
| 13416 | 14387 | ||
| 14388 | + slice-ansi@7.1.2: | ||
| 14389 | + dependencies: | ||
| 14390 | + ansi-styles: 6.2.1 | ||
| 14391 | + is-fullwidth-code-point: 5.1.0 | ||
| 14392 | + | ||
| 13417 | smart-buffer@4.2.0: {} | 14393 | smart-buffer@4.2.0: {} |
| 13418 | 14394 | ||
| 13419 | snake-case@3.0.4: | 14395 | snake-case@3.0.4: |
| ... | @@ -13502,6 +14478,8 @@ snapshots: | ... | @@ -13502,6 +14478,8 @@ snapshots: |
| 13502 | dependencies: | 14478 | dependencies: |
| 13503 | minipass: 7.1.2 | 14479 | minipass: 7.1.2 |
| 13504 | 14480 | ||
| 14481 | + stackback@0.0.2: {} | ||
| 14482 | + | ||
| 13505 | statuses@1.5.0: {} | 14483 | statuses@1.5.0: {} |
| 13506 | 14484 | ||
| 13507 | statuses@2.0.1: {} | 14485 | statuses@2.0.1: {} |
| ... | @@ -13515,6 +14493,8 @@ snapshots: | ... | @@ -13515,6 +14493,8 @@ snapshots: |
| 13515 | 14493 | ||
| 13516 | strict-uri-encode@1.1.0: {} | 14494 | strict-uri-encode@1.1.0: {} |
| 13517 | 14495 | ||
| 14496 | + string-argv@0.3.2: {} | ||
| 14497 | + | ||
| 13518 | string-width@4.2.3: | 14498 | string-width@4.2.3: |
| 13519 | dependencies: | 14499 | dependencies: |
| 13520 | emoji-regex: 8.0.0 | 14500 | emoji-regex: 8.0.0 |
| ... | @@ -13527,6 +14507,17 @@ snapshots: | ... | @@ -13527,6 +14507,17 @@ snapshots: |
| 13527 | emoji-regex: 9.2.2 | 14507 | emoji-regex: 9.2.2 |
| 13528 | strip-ansi: 7.1.0 | 14508 | strip-ansi: 7.1.0 |
| 13529 | 14509 | ||
| 14510 | + string-width@7.2.0: | ||
| 14511 | + dependencies: | ||
| 14512 | + emoji-regex: 10.6.0 | ||
| 14513 | + get-east-asian-width: 1.4.0 | ||
| 14514 | + strip-ansi: 7.1.0 | ||
| 14515 | + | ||
| 14516 | + string-width@8.1.1: | ||
| 14517 | + dependencies: | ||
| 14518 | + get-east-asian-width: 1.4.0 | ||
| 14519 | + strip-ansi: 7.1.0 | ||
| 14520 | + | ||
| 13530 | string.fromcodepoint@0.2.1: {} | 14521 | string.fromcodepoint@0.2.1: {} |
| 13531 | 14522 | ||
| 13532 | string.prototype.trim@1.2.10: | 14523 | string.prototype.trim@1.2.10: |
| ... | @@ -13576,10 +14567,16 @@ snapshots: | ... | @@ -13576,10 +14567,16 @@ snapshots: |
| 13576 | 14567 | ||
| 13577 | strip-final-newline@2.0.0: {} | 14568 | strip-final-newline@2.0.0: {} |
| 13578 | 14569 | ||
| 14570 | + strip-final-newline@3.0.0: {} | ||
| 14571 | + | ||
| 13579 | strip-json-comments@2.0.1: {} | 14572 | strip-json-comments@2.0.1: {} |
| 13580 | 14573 | ||
| 13581 | strip-json-comments@3.1.1: {} | 14574 | strip-json-comments@3.1.1: {} |
| 13582 | 14575 | ||
| 14576 | + strip-literal@2.1.1: | ||
| 14577 | + dependencies: | ||
| 14578 | + js-tokens: 9.0.1 | ||
| 14579 | + | ||
| 13583 | strip-outer@1.0.1: | 14580 | strip-outer@1.0.1: |
| 13584 | dependencies: | 14581 | dependencies: |
| 13585 | escape-string-regexp: 1.0.5 | 14582 | escape-string-regexp: 1.0.5 |
| ... | @@ -13666,13 +14663,13 @@ snapshots: | ... | @@ -13666,13 +14663,13 @@ snapshots: |
| 13666 | jiti: 2.5.1 | 14663 | jiti: 2.5.1 |
| 13667 | lilconfig: 3.1.3 | 14664 | lilconfig: 3.1.3 |
| 13668 | 14665 | ||
| 13669 | - tailwindcss-patch@7.1.4(tailwindcss@3.4.17): | 14666 | + tailwindcss-patch@7.1.4(magicast@0.3.5)(tailwindcss@3.4.17): |
| 13670 | dependencies: | 14667 | dependencies: |
| 13671 | '@babel/generator': 7.28.3 | 14668 | '@babel/generator': 7.28.3 |
| 13672 | '@babel/parser': 7.28.3 | 14669 | '@babel/parser': 7.28.3 |
| 13673 | '@babel/traverse': 7.28.3 | 14670 | '@babel/traverse': 7.28.3 |
| 13674 | '@babel/types': 7.28.2 | 14671 | '@babel/types': 7.28.2 |
| 13675 | - '@tailwindcss-mangle/config': 5.1.1 | 14672 | + '@tailwindcss-mangle/config': 5.1.1(magicast@0.3.5) |
| 13676 | cac: 6.7.14 | 14673 | cac: 6.7.14 |
| 13677 | consola: 3.4.2 | 14674 | consola: 3.4.2 |
| 13678 | fs-extra: 11.3.1 | 14675 | fs-extra: 11.3.1 |
| ... | @@ -13765,6 +14762,12 @@ snapshots: | ... | @@ -13765,6 +14762,12 @@ snapshots: |
| 13765 | commander: 2.20.3 | 14762 | commander: 2.20.3 |
| 13766 | source-map-support: 0.5.21 | 14763 | source-map-support: 0.5.21 |
| 13767 | 14764 | ||
| 14765 | + test-exclude@6.0.0: | ||
| 14766 | + dependencies: | ||
| 14767 | + '@istanbuljs/schema': 0.1.3 | ||
| 14768 | + glob: 7.2.3 | ||
| 14769 | + minimatch: 3.1.2 | ||
| 14770 | + | ||
| 13768 | text-table@0.2.0: {} | 14771 | text-table@0.2.0: {} |
| 13769 | 14772 | ||
| 13770 | thenify-all@1.6.0: | 14773 | thenify-all@1.6.0: |
| ... | @@ -13783,8 +14786,14 @@ snapshots: | ... | @@ -13783,8 +14786,14 @@ snapshots: |
| 13783 | 14786 | ||
| 13784 | tiny-case@1.0.3: {} | 14787 | tiny-case@1.0.3: {} |
| 13785 | 14788 | ||
| 14789 | + tinybench@2.9.0: {} | ||
| 14790 | + | ||
| 13786 | tinyexec@0.3.2: {} | 14791 | tinyexec@0.3.2: {} |
| 13787 | 14792 | ||
| 14793 | + tinypool@0.8.4: {} | ||
| 14794 | + | ||
| 14795 | + tinyspy@2.2.1: {} | ||
| 14796 | + | ||
| 13788 | to-buffer@1.2.1: | 14797 | to-buffer@1.2.1: |
| 13789 | dependencies: | 14798 | dependencies: |
| 13790 | isarray: 2.0.5 | 14799 | isarray: 2.0.5 |
| ... | @@ -13843,6 +14852,8 @@ snapshots: | ... | @@ -13843,6 +14852,8 @@ snapshots: |
| 13843 | dependencies: | 14852 | dependencies: |
| 13844 | prelude-ls: 1.2.1 | 14853 | prelude-ls: 1.2.1 |
| 13845 | 14854 | ||
| 14855 | + type-detect@4.1.0: {} | ||
| 14856 | + | ||
| 13846 | type-fest@0.20.2: {} | 14857 | type-fest@0.20.2: {} |
| 13847 | 14858 | ||
| 13848 | type-fest@0.21.3: {} | 14859 | type-fest@0.21.3: {} |
| ... | @@ -14015,11 +15026,80 @@ snapshots: | ... | @@ -14015,11 +15026,80 @@ snapshots: |
| 14015 | 15026 | ||
| 14016 | vary@1.1.2: {} | 15027 | vary@1.1.2: {} |
| 14017 | 15028 | ||
| 15029 | + vite-node@1.6.1(@types/node@24.3.0)(less@3.13.1)(lightningcss@1.30.1)(sass@1.91.0)(stylus@0.64.0)(terser@5.43.1): | ||
| 15030 | + dependencies: | ||
| 15031 | + cac: 6.7.14 | ||
| 15032 | + debug: 4.4.1 | ||
| 15033 | + pathe: 1.1.2 | ||
| 15034 | + picocolors: 1.1.1 | ||
| 15035 | + vite: 5.4.21(@types/node@24.3.0)(less@3.13.1)(lightningcss@1.30.1)(sass@1.91.0)(stylus@0.64.0)(terser@5.43.1) | ||
| 15036 | + transitivePeerDependencies: | ||
| 15037 | + - '@types/node' | ||
| 15038 | + - less | ||
| 15039 | + - lightningcss | ||
| 15040 | + - sass | ||
| 15041 | + - sass-embedded | ||
| 15042 | + - stylus | ||
| 15043 | + - sugarss | ||
| 15044 | + - supports-color | ||
| 15045 | + - terser | ||
| 15046 | + | ||
| 15047 | + vite@5.4.21(@types/node@24.3.0)(less@3.13.1)(lightningcss@1.30.1)(sass@1.91.0)(stylus@0.64.0)(terser@5.43.1): | ||
| 15048 | + dependencies: | ||
| 15049 | + esbuild: 0.21.5 | ||
| 15050 | + postcss: 8.5.6 | ||
| 15051 | + rollup: 4.57.1 | ||
| 15052 | + optionalDependencies: | ||
| 15053 | + '@types/node': 24.3.0 | ||
| 15054 | + fsevents: 2.3.3 | ||
| 15055 | + less: 3.13.1 | ||
| 15056 | + lightningcss: 1.30.1 | ||
| 15057 | + sass: 1.91.0 | ||
| 15058 | + stylus: 0.64.0 | ||
| 15059 | + terser: 5.43.1 | ||
| 15060 | + | ||
| 15061 | + vitest@1.6.1(@types/node@24.3.0)(jsdom@24.1.3)(less@3.13.1)(lightningcss@1.30.1)(sass@1.91.0)(stylus@0.64.0)(terser@5.43.1): | ||
| 15062 | + dependencies: | ||
| 15063 | + '@vitest/expect': 1.6.1 | ||
| 15064 | + '@vitest/runner': 1.6.1 | ||
| 15065 | + '@vitest/snapshot': 1.6.1 | ||
| 15066 | + '@vitest/spy': 1.6.1 | ||
| 15067 | + '@vitest/utils': 1.6.1 | ||
| 15068 | + acorn-walk: 8.3.4 | ||
| 15069 | + chai: 4.5.0 | ||
| 15070 | + debug: 4.4.1 | ||
| 15071 | + execa: 8.0.1 | ||
| 15072 | + local-pkg: 0.5.1 | ||
| 15073 | + magic-string: 0.30.18 | ||
| 15074 | + pathe: 1.1.2 | ||
| 15075 | + picocolors: 1.1.1 | ||
| 15076 | + std-env: 3.9.0 | ||
| 15077 | + strip-literal: 2.1.1 | ||
| 15078 | + tinybench: 2.9.0 | ||
| 15079 | + tinypool: 0.8.4 | ||
| 15080 | + vite: 5.4.21(@types/node@24.3.0)(less@3.13.1)(lightningcss@1.30.1)(sass@1.91.0)(stylus@0.64.0)(terser@5.43.1) | ||
| 15081 | + vite-node: 1.6.1(@types/node@24.3.0)(less@3.13.1)(lightningcss@1.30.1)(sass@1.91.0)(stylus@0.64.0)(terser@5.43.1) | ||
| 15082 | + why-is-node-running: 2.3.0 | ||
| 15083 | + optionalDependencies: | ||
| 15084 | + '@types/node': 24.3.0 | ||
| 15085 | + jsdom: 24.1.3 | ||
| 15086 | + transitivePeerDependencies: | ||
| 15087 | + - less | ||
| 15088 | + - lightningcss | ||
| 15089 | + - sass | ||
| 15090 | + - sass-embedded | ||
| 15091 | + - stylus | ||
| 15092 | + - sugarss | ||
| 15093 | + - supports-color | ||
| 15094 | + - terser | ||
| 15095 | + | ||
| 14018 | vm2@3.9.19: | 15096 | vm2@3.9.19: |
| 14019 | dependencies: | 15097 | dependencies: |
| 14020 | acorn: 8.15.0 | 15098 | acorn: 8.15.0 |
| 14021 | acorn-walk: 8.3.4 | 15099 | acorn-walk: 8.3.4 |
| 14022 | 15100 | ||
| 15101 | + vue-component-type-helpers@2.2.12: {} | ||
| 15102 | + | ||
| 14023 | vue-loader@17.4.2(@vue/compiler-sfc@3.5.20)(vue@3.5.20(typescript@5.9.2))(webpack@5.78.0(@swc/core@1.3.96)): | 15103 | vue-loader@17.4.2(@vue/compiler-sfc@3.5.20)(vue@3.5.20(typescript@5.9.2))(webpack@5.78.0(@swc/core@1.3.96)): |
| 14024 | dependencies: | 15104 | dependencies: |
| 14025 | chalk: 4.1.2 | 15105 | chalk: 4.1.2 |
| ... | @@ -14057,7 +15137,7 @@ snapshots: | ... | @@ -14057,7 +15137,7 @@ snapshots: |
| 14057 | dependencies: | 15137 | dependencies: |
| 14058 | defaults: 1.0.4 | 15138 | defaults: 1.0.4 |
| 14059 | 15139 | ||
| 14060 | - weapp-tailwindcss@4.2.6(tailwindcss@3.4.17)(typescript@5.9.2): | 15140 | + weapp-tailwindcss@4.2.6(magicast@0.3.5)(tailwindcss@3.4.17)(typescript@5.9.2): |
| 14061 | dependencies: | 15141 | dependencies: |
| 14062 | '@ast-core/escape': 1.0.1 | 15142 | '@ast-core/escape': 1.0.1 |
| 14063 | '@babel/parser': 7.28.3 | 15143 | '@babel/parser': 7.28.3 |
| ... | @@ -14078,7 +15158,7 @@ snapshots: | ... | @@ -14078,7 +15158,7 @@ snapshots: |
| 14078 | lru-cache: 10.4.3 | 15158 | lru-cache: 10.4.3 |
| 14079 | magic-string: 0.30.18 | 15159 | magic-string: 0.30.18 |
| 14080 | semver: 7.7.2 | 15160 | semver: 7.7.2 |
| 14081 | - tailwindcss-patch: 7.1.4(tailwindcss@3.4.17) | 15161 | + tailwindcss-patch: 7.1.4(magicast@0.3.5)(tailwindcss@3.4.17) |
| 14082 | vue: 3.5.20(typescript@5.9.2) | 15162 | vue: 3.5.20(typescript@5.9.2) |
| 14083 | webpack-sources: 3.3.3 | 15163 | webpack-sources: 3.3.3 |
| 14084 | transitivePeerDependencies: | 15164 | transitivePeerDependencies: |
| ... | @@ -14267,6 +15347,11 @@ snapshots: | ... | @@ -14267,6 +15347,11 @@ snapshots: |
| 14267 | dependencies: | 15347 | dependencies: |
| 14268 | isexe: 2.0.0 | 15348 | isexe: 2.0.0 |
| 14269 | 15349 | ||
| 15350 | + why-is-node-running@2.3.0: | ||
| 15351 | + dependencies: | ||
| 15352 | + siginfo: 2.0.0 | ||
| 15353 | + stackback: 0.0.2 | ||
| 15354 | + | ||
| 14270 | wildcard@2.0.1: {} | 15355 | wildcard@2.0.1: {} |
| 14271 | 15356 | ||
| 14272 | word-wrap@1.2.5: {} | 15357 | word-wrap@1.2.5: {} |
| ... | @@ -14289,6 +15374,12 @@ snapshots: | ... | @@ -14289,6 +15374,12 @@ snapshots: |
| 14289 | string-width: 5.1.2 | 15374 | string-width: 5.1.2 |
| 14290 | strip-ansi: 7.1.0 | 15375 | strip-ansi: 7.1.0 |
| 14291 | 15376 | ||
| 15377 | + wrap-ansi@9.0.2: | ||
| 15378 | + dependencies: | ||
| 15379 | + ansi-styles: 6.2.1 | ||
| 15380 | + string-width: 7.2.0 | ||
| 15381 | + strip-ansi: 7.1.0 | ||
| 15382 | + | ||
| 14292 | wrappy@1.0.2: {} | 15383 | wrappy@1.0.2: {} |
| 14293 | 15384 | ||
| 14294 | ws@8.18.3: {} | 15385 | ws@8.18.3: {} |
| ... | @@ -14332,6 +15423,8 @@ snapshots: | ... | @@ -14332,6 +15423,8 @@ snapshots: |
| 14332 | 15423 | ||
| 14333 | yocto-queue@0.1.0: {} | 15424 | yocto-queue@0.1.0: {} |
| 14334 | 15425 | ||
| 15426 | + yocto-queue@1.2.2: {} | ||
| 15427 | + | ||
| 14335 | yup@1.7.0: | 15428 | yup@1.7.0: |
| 14336 | dependencies: | 15429 | dependencies: |
| 14337 | property-expr: 2.0.6 | 15430 | property-expr: 2.0.6 | ... | ... |
src/pages/FeedbackList/CLAUDE.md
0 → 100644
| 1 | +<claude-mem-context> | ||
| 2 | +# Recent Activity | ||
| 3 | + | ||
| 4 | +<!-- This section is auto-generated by claude-mem. Edit content outside the tags. --> | ||
| 5 | + | ||
| 6 | +### Feb 3, 2026 | ||
| 7 | + | ||
| 8 | +| ID | Time | T | Title | Read | | ||
| 9 | +|----|------|---|-------|------| | ||
| 10 | +| #114 | 4:02 PM | 🔵 | FeedbackList page config has standard navigation bar settings | ~169 | | ||
| 11 | +| #110 | " | 🔵 | Examined reference FeedbackList LESS styles showing simple scrolling without scroll-view | ~225 | | ||
| 12 | +| #100 | 3:54 PM | 🔵 | Reference FeedbackList uses simple view without scroll-view component | ~204 | | ||
| 13 | +</claude-mem-context> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
src/pages/PointsList/CLAUDE.md
0 → 100644
| 1 | +<claude-mem-context> | ||
| 2 | +# Recent Activity | ||
| 3 | + | ||
| 4 | +<!-- This section is auto-generated by claude-mem. Edit content outside the tags. --> | ||
| 5 | + | ||
| 6 | +### Feb 3, 2026 | ||
| 7 | + | ||
| 8 | +| ID | Time | T | Title | Read | | ||
| 9 | +|----|------|---|-------|------| | ||
| 10 | +| #101 | 3:55 PM | 🔵 | Found working scroll-view implementation in PointsList reference page | ~278 | | ||
| 11 | +</claude-mem-context> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
src/utils/tools.test.js
0 → 100644
| 1 | +/** | ||
| 2 | + * 工具函数测试示例 | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +import { describe, it, expect, vi } from 'vitest' | ||
| 6 | + | ||
| 7 | +// 示例:日期格式化测试 | ||
| 8 | +describe('formatDate', () => { | ||
| 9 | + it('should format date string correctly', () => { | ||
| 10 | + // 假设 tools.js 中有 formatDate 函数 | ||
| 11 | + // const result = formatDate('2026-02-05') | ||
| 12 | + // expect(result).toBe('2026年02月05日') | ||
| 13 | + | ||
| 14 | + // 临时示例 | ||
| 15 | + const date = '2026-02-05' | ||
| 16 | + expect(date).toBeTruthy() | ||
| 17 | + }) | ||
| 18 | + | ||
| 19 | + it('should handle invalid date', () => { | ||
| 20 | + const invalidDate = 'invalid-date' | ||
| 21 | + expect(invalidDate).toBe('invalid-date') | ||
| 22 | + }) | ||
| 23 | +}) | ||
| 24 | + | ||
| 25 | +// 示例:平台检测测试 | ||
| 26 | +describe('wxInfo', () => { | ||
| 27 | + it('should detect platform correctly', () => { | ||
| 28 | + // Mock Taro.getSystemInfoSync | ||
| 29 | + const mockSystemInfo = { | ||
| 30 | + model: 'iPhone', | ||
| 31 | + system: 'iOS 14.0', | ||
| 32 | + platform: 'ios', | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + expect(mockSystemInfo.platform).toBe('ios') | ||
| 36 | + }) | ||
| 37 | +}) | ||
| 38 | + | ||
| 39 | +// 示例:文本溢出检测测试 | ||
| 40 | +describe('hasEllipsis', () => { | ||
| 41 | + it('should detect text overflow', () => { | ||
| 42 | + const text = 'This is a very long text that might overflow...' | ||
| 43 | + const maxLength = 20 | ||
| 44 | + | ||
| 45 | + const hasOverflow = text.length > maxLength | ||
| 46 | + expect(hasOverflow).toBe(true) | ||
| 47 | + }) | ||
| 48 | +}) |
test/components/PrimaryButton.test.js
0 → 100644
| 1 | +/** | ||
| 2 | + * 组件测试示例 | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +import { describe, it, expect } from 'vitest' | ||
| 6 | +import { mount } from '@vue/test-utils' | ||
| 7 | +import PrimaryButton from '@/components/PrimaryButton.vue' | ||
| 8 | + | ||
| 9 | +describe('PrimaryButton', () => { | ||
| 10 | + it('should render button with text', () => { | ||
| 11 | + const wrapper = mount(PrimaryButton, { | ||
| 12 | + props: { | ||
| 13 | + text: '点击按钮', | ||
| 14 | + }, | ||
| 15 | + }) | ||
| 16 | + | ||
| 17 | + expect(wrapper.text()).toContain('点击按钮') | ||
| 18 | + }) | ||
| 19 | + | ||
| 20 | + it('should emit click event when clicked', async () => { | ||
| 21 | + const wrapper = mount(PrimaryButton, { | ||
| 22 | + props: { | ||
| 23 | + text: '点击', | ||
| 24 | + }, | ||
| 25 | + }) | ||
| 26 | + | ||
| 27 | + await wrapper.trigger('click') | ||
| 28 | + expect(wrapper.emitted('click')).toBeTruthy() | ||
| 29 | + }) | ||
| 30 | + | ||
| 31 | + it('should be disabled when disabled prop is true', () => { | ||
| 32 | + const wrapper = mount(PrimaryButton, { | ||
| 33 | + props: { | ||
| 34 | + text: '点击', | ||
| 35 | + disabled: true, | ||
| 36 | + }, | ||
| 37 | + }) | ||
| 38 | + | ||
| 39 | + const button = wrapper.find('button') | ||
| 40 | + expect(button.attributes('disabled')).toBeDefined() | ||
| 41 | + }) | ||
| 42 | +}) |
test/setup.js
0 → 100644
| 1 | +/** | ||
| 2 | + * Vitest 测试环境设置 | ||
| 3 | + */ | ||
| 4 | + | ||
| 5 | +import { vi } from 'vitest' | ||
| 6 | +import { config } from '@vue/test-utils' | ||
| 7 | + | ||
| 8 | +// 全局 Mock | ||
| 9 | +config.global.mocks = { | ||
| 10 | + $t: key => key, // i18n Mock | ||
| 11 | + $router: { | ||
| 12 | + push: vi.fn(), | ||
| 13 | + replace: vi.fn(), | ||
| 14 | + }, | ||
| 15 | +} | ||
| 16 | + | ||
| 17 | +// Mock localStorage | ||
| 18 | +const localStorageMock = { | ||
| 19 | + getItem: vi.fn(), | ||
| 20 | + setItem: vi.fn(), | ||
| 21 | + removeItem: vi.fn(), | ||
| 22 | + clear: vi.fn(), | ||
| 23 | +} | ||
| 24 | +global.localStorage = localStorageMock | ||
| 25 | + | ||
| 26 | +// Mock Taro API | ||
| 27 | +global.Taro = { | ||
| 28 | + getStorage: vi.fn(), | ||
| 29 | + setStorage: vi.fn(), | ||
| 30 | + removeStorage: vi.fn(), | ||
| 31 | + getStorageSync: vi.fn(() => ''), | ||
| 32 | + setStorageSync: vi.fn(), | ||
| 33 | + removeStorageSync: vi.fn(), | ||
| 34 | + navigateTo: vi.fn(), | ||
| 35 | + redirectTo: vi.fn(), | ||
| 36 | + switchTab: vi.fn(), | ||
| 37 | + navigateBack: vi.fn(), | ||
| 38 | + showToast: vi.fn(), | ||
| 39 | + showLoading: vi.fn(), | ||
| 40 | + hideLoading: vi.fn(), | ||
| 41 | + showModal: vi.fn(), | ||
| 42 | + showActionSheet: vi.fn(), | ||
| 43 | + createSelectorQuery: vi.fn(() => ({ | ||
| 44 | + select: vi.fn().mockReturnThis(), | ||
| 45 | + exec: vi.fn(callback => callback([])), | ||
| 46 | + })), | ||
| 47 | + request: vi.fn(), | ||
| 48 | + getLocation: vi.fn(), | ||
| 49 | + chooseImage: vi.fn(), | ||
| 50 | + previewImage: vi.fn(), | ||
| 51 | + uploadFile: vi.fn(), | ||
| 52 | + downloadFile: vi.fn(), | ||
| 53 | + login: vi.fn(), | ||
| 54 | + getUserInfo: vi.fn(), | ||
| 55 | + openSetting: vi.fn(), | ||
| 56 | + getSystemInfo: vi.fn(), | ||
| 57 | + getSystemInfoSync: vi.fn(() => ({ | ||
| 58 | + model: 'iPhone', | ||
| 59 | + system: 'iOS 14.0', | ||
| 60 | + platform: 'ios', | ||
| 61 | + })), | ||
| 62 | +} | ||
| 63 | + | ||
| 64 | +// Mock wx API | ||
| 65 | +global.wx = { | ||
| 66 | + getStorageSync: vi.fn(() => ''), | ||
| 67 | + setStorageSync: vi.fn(), | ||
| 68 | + removeStorageSync: vi.fn(), | ||
| 69 | + request: vi.fn(), | ||
| 70 | + login: vi.fn(), | ||
| 71 | + getUserInfo: vi.fn(), | ||
| 72 | +} | ||
| 73 | + | ||
| 74 | +// Mock axios | ||
| 75 | +vi.mock('axios-miniprogram', () => ({ | ||
| 76 | + default: { | ||
| 77 | + create: vi.fn(() => ({ | ||
| 78 | + interceptors: { | ||
| 79 | + request: { use: vi.fn() }, | ||
| 80 | + response: { use: vi.fn() }, | ||
| 81 | + }, | ||
| 82 | + get: vi.fn(), | ||
| 83 | + post: vi.fn(), | ||
| 84 | + })), | ||
| 85 | + }, | ||
| 86 | +})) |
vitest.config.js
0 → 100644
| 1 | +import { defineConfig } from 'vitest/config' | ||
| 2 | +import vue from '@vitejs/plugin-vue' | ||
| 3 | +import { resolve } from 'path' | ||
| 4 | + | ||
| 5 | +export default defineConfig({ | ||
| 6 | + plugins: [vue()], | ||
| 7 | + test: { | ||
| 8 | + // 全局 API(describe, it, expect) | ||
| 9 | + globals: true, | ||
| 10 | + // 运行环境 | ||
| 11 | + environment: 'jsdom', | ||
| 12 | + // 设置文件 | ||
| 13 | + setupFiles: ['./test/setup.js'], | ||
| 14 | + // 覆盖率配置 | ||
| 15 | + coverage: { | ||
| 16 | + provider: 'v8', | ||
| 17 | + reporter: ['text', 'json', 'html'], | ||
| 18 | + // 排除文件 | ||
| 19 | + exclude: [ | ||
| 20 | + 'node_modules/', | ||
| 21 | + 'test/', | ||
| 22 | + 'dist/', | ||
| 23 | + '**/*.test.js', | ||
| 24 | + '**/*.spec.js', | ||
| 25 | + '**/*.config.js', | ||
| 26 | + 'src/app.js', | ||
| 27 | + 'src/app.config.js', | ||
| 28 | + ], | ||
| 29 | + }, | ||
| 30 | + // 别名配置(与 Taro 配置保持一致) | ||
| 31 | + alias: { | ||
| 32 | + '@/utils': resolve(__dirname, 'src/utils'), | ||
| 33 | + '@/components': resolve(__dirname, 'src/components'), | ||
| 34 | + '@/images': resolve(__dirname, 'src/assets/images'), | ||
| 35 | + '@/assets': resolve(__dirname, 'src/assets'), | ||
| 36 | + '@/composables': resolve(__dirname, 'src/composables'), | ||
| 37 | + '@/api': resolve(__dirname, 'src/api'), | ||
| 38 | + '@/stores': resolve(__dirname, 'src/stores'), | ||
| 39 | + '@/hooks': resolve(__dirname, 'src/hooks'), | ||
| 40 | + }, | ||
| 41 | + }, | ||
| 42 | + resolve: { | ||
| 43 | + alias: { | ||
| 44 | + '@/utils': resolve(__dirname, 'src/utils'), | ||
| 45 | + '@/components': resolve(__dirname, 'src/components'), | ||
| 46 | + '@/images': resolve(__dirname, 'src/assets/images'), | ||
| 47 | + '@/assets': resolve(__dirname, 'src/assets'), | ||
| 48 | + '@/composables': resolve(__dirname, 'src/composables'), | ||
| 49 | + '@/api': resolve(__dirname, 'src/api'), | ||
| 50 | + '@/stores': resolve(__dirname, 'src/stores'), | ||
| 51 | + '@/hooks': resolve(__dirname, 'src/hooks'), | ||
| 52 | + }, | ||
| 53 | + }, | ||
| 54 | +}) |
-
Please register or login to post a comment