diff --git a/.env b/.env
index 53bacce..1caeecb 100644
--- a/.env
+++ b/.env
@@ -1,5 +1,5 @@
JWT_SECRET=5270e53a05600cb1f19b287a915b1c792d7552cbaae261afb6dcaf988d0db10f
-SERVER_HOST='192.144.32.178'
+SERVER_HOST='45.130.23.71'
SERVER_PORT=3306
SERVER_USER='golc'
PASSWORD='Lichao1314!'
diff --git a/GENERATE_LICENSE_GUIDE.md b/GENERATE_LICENSE_GUIDE.md
new file mode 100644
index 0000000..6b2a3b5
--- /dev/null
+++ b/GENERATE_LICENSE_GUIDE.md
@@ -0,0 +1,418 @@
+# 生成卡密操作指南
+
+## 概述
+
+现在系统已经实现了完整的管理员权限验证。管理员可以通过 API 生成卡密,普通用户无法访问生成接口。
+
+## 管理员权限规则
+
+系统会自动识别以下用户为管理员:
+1. 用户名为 `admin`
+2. 邮箱包含 `admin`(如 `admin@example.com`)
+3. 用户名以 `admin_` 开头(如 `admin_user`)
+
+## 方法一:注册管理员账号(推荐)
+
+### 步骤 1: 注册管理员账号
+
+```bash
+curl -X POST http://localhost:3030/user/register \
+ -H "Content-Type: application/json" \
+ -d '{
+ "username": "admin",
+ "password": "your_secure_password",
+ "email": "admin@example.com"
+ }'
+```
+
+**响应示例:**
+```json
+{
+ "message": "User registered successfully",
+ "user": {
+ "id": 1,
+ "username": "admin",
+ "email": "admin@example.com",
+ "isActive": true,
+ "provider": "local"
+ },
+ "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
+ "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
+}
+```
+
+**保存 `access_token`,后续生成卡密时需要使用!**
+
+### 步骤 2: 使用管理员账号生成卡密
+
+#### 生成单个月卡
+
+```bash
+curl -X POST http://localhost:3030/license/generate \
+ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "type": "monthly",
+ "validDays": 30,
+ "count": 1,
+ "remarks": "测试月卡"
+ }'
+```
+
+#### 批量生成卡密
+
+```bash
+# 生成 10 个月卡
+curl -X POST http://localhost:3030/license/generate \
+ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "type": "monthly",
+ "validDays": 30,
+ "count": 10,
+ "remarks": "批量生成月卡"
+ }'
+```
+
+#### 生成不同类型的卡密
+
+```bash
+# 试用卡 (7天)
+curl -X POST http://localhost:3030/license/generate \
+ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "type": "trial",
+ "validDays": 7,
+ "count": 5,
+ "remarks": "试用卡"
+ }'
+
+# 年卡 (365天)
+curl -X POST http://localhost:3030/license/generate \
+ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "type": "yearly",
+ "validDays": 365,
+ "count": 2,
+ "remarks": "年度授权"
+ }'
+
+# 终身卡
+curl -X POST http://localhost:3030/license/generate \
+ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "type": "lifetime",
+ "validDays": 36500,
+ "count": 1,
+ "remarks": "VIP终身授权"
+ }'
+```
+
+**响应示例:**
+```json
+[
+ {
+ "id": 1,
+ "code": "ABCD-1234-EFGH-5678",
+ "type": "monthly",
+ "status": "unused",
+ "validDays": 30,
+ "remarks": "测试月卡",
+ "createdAt": "2025-12-13T10:00:00.000Z"
+ }
+]
+```
+
+### 步骤 3: 将卡密分发给用户
+
+将生成的 `code` 发送给用户,用户可以使用以下方式激活:
+
+```bash
+curl -X POST http://localhost:3030/license/activate \
+ -H "Authorization: Bearer USER_ACCESS_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "code": "ABCD-1234-EFGH-5678"
+ }'
+```
+
+## 方法二:使用 Swagger UI
+
+### 步骤 1: 访问 Swagger
+
+打开浏览器访问:http://localhost:3030/api
+
+### 步骤 2: 注册管理员账号
+
+1. 找到 `POST /user/register` 接口
+2. 点击 "Try it out"
+3. 输入管理员信息:
+ ```json
+ {
+ "username": "admin",
+ "password": "admin123",
+ "email": "admin@example.com"
+ }
+ ```
+4. 点击 "Execute"
+5. 复制响应中的 `access_token`
+
+### 步骤 3: 授权 Swagger
+
+1. 点击页面右上角的 "Authorize" 按钮
+2. 在弹出框中输入:`Bearer YOUR_ACCESS_TOKEN`
+3. 点击 "Authorize"
+4. 点击 "Close"
+
+### 步骤 4: 生成卡密
+
+1. 找到 `POST /license/generate` 接口
+2. 点击 "Try it out"
+3. 输入生成参数:
+ ```json
+ {
+ "type": "monthly",
+ "validDays": 30,
+ "count": 1,
+ "remarks": "测试卡密"
+ }
+ ```
+4. 点击 "Execute"
+5. 在响应中复制生成的卡密码
+
+### 步骤 5: 查看已生成的卡密
+
+1. 找到 `GET /license` 接口
+2. 点击 "Try it out"
+3. 可选:筛选条件
+ - status: unused (查看未使用的)
+ - type: monthly (查看月卡)
+4. 点击 "Execute"
+5. 查看所有卡密列表
+
+## 方法三:直接插入数据库(临时方案)
+
+如果还没有管理员账号,可以直接在数据库中插入卡密:
+
+```sql
+-- 插入测试卡密
+INSERT INTO `license` (
+ `code`,
+ `type`,
+ `status`,
+ `validDays`,
+ `remarks`,
+ `createdAt`,
+ `updatedAt`
+) VALUES
+ ('ABCD-1234-EFGH-5678', 'monthly', 'unused', 30, '测试月卡', NOW(), NOW()),
+ ('WXYZ-9876-IJKL-5432', 'yearly', 'unused', 365, '测试年卡', NOW(), NOW()),
+ ('TEST-0000-FREE-TRIAL', 'trial', 'unused', 7, '试用卡', NOW(), NOW());
+```
+
+**注意:** 卡密格式必须是 `XXXX-XXXX-XXXX-XXXX`(19个字符,包含3个连字符)
+
+## 管理员其他操作
+
+### 查看卡密统计
+
+```bash
+curl -X GET http://localhost:3030/license/statistics \
+ -H "Authorization: Bearer ADMIN_TOKEN"
+```
+
+**响应示例:**
+```json
+{
+ "total": 100,
+ "unused": 50,
+ "active": 30,
+ "expired": 15,
+ "revoked": 5
+}
+```
+
+### 查询所有卡密
+
+```bash
+# 查询所有卡密
+curl -X GET http://localhost:3030/license \
+ -H "Authorization: Bearer ADMIN_TOKEN"
+
+# 查询未使用的卡密
+curl -X GET "http://localhost:3030/license?status=unused" \
+ -H "Authorization: Bearer ADMIN_TOKEN"
+
+# 查询已激活的月卡
+curl -X GET "http://localhost:3030/license?status=active&type=monthly" \
+ -H "Authorization: Bearer ADMIN_TOKEN"
+```
+
+### 查询单个卡密详情
+
+```bash
+curl -X GET http://localhost:3030/license/1 \
+ -H "Authorization: Bearer ADMIN_TOKEN"
+```
+
+### 撤销卡密
+
+```bash
+curl -X POST http://localhost:3030/license/1/revoke \
+ -H "Authorization: Bearer ADMIN_TOKEN"
+```
+
+### 删除卡密
+
+```bash
+curl -X DELETE http://localhost:3030/license/1 \
+ -H "Authorization: Bearer ADMIN_TOKEN"
+```
+
+## 常见问题
+
+### Q: 非管理员用户能生成卡密吗?
+A: 不能。系统会返回 403 错误:
+```json
+{
+ "statusCode": 403,
+ "message": "需要管理员权限",
+ "error": "Forbidden"
+}
+```
+
+### Q: 如何修改管理员权限规则?
+A: 编辑 [src/common/services/admin.service.ts](src/common/services/admin.service.ts:23-30),修改 `isAdmin` 方法中的判断逻辑。
+
+### Q: 可以有多个管理员吗?
+A: 可以。所有满足管理员规则的用户都拥有管理员权限。
+
+### Q: 生成的卡密可以重复使用吗?
+A: 不可以。每个卡密只能激活一次,激活后状态变为 `active`。
+
+### Q: 如何批量生成大量卡密?
+A: 使用 `count` 参数,建议每次不超过 100 个:
+```json
+{
+ "type": "monthly",
+ "count": 100
+}
+```
+
+## 完整示例流程
+
+### 场景:销售100个月卡
+
+```bash
+# 1. 使用管理员账号登录
+curl -X POST http://localhost:3030/user/login \
+ -H "Content-Type: application/json" \
+ -d '{
+ "username": "admin",
+ "password": "admin123"
+ }'
+# 获取 access_token
+
+# 2. 批量生成 100 个月卡
+curl -X POST http://localhost:3030/license/generate \
+ -H "Authorization: Bearer ADMIN_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "type": "monthly",
+ "validDays": 30,
+ "count": 100,
+ "remarks": "2025年1月批次"
+ }'
+
+# 3. 查询已生成的卡密
+curl -X GET "http://localhost:3030/license?status=unused&type=monthly" \
+ -H "Authorization: Bearer ADMIN_TOKEN"
+
+# 4. 导出卡密(可以通过数据库查询或API获取)
+# SQL 查询未使用的卡密
+# SELECT code FROM license WHERE status = 'unused' AND type = 'monthly'
+
+# 5. 将卡密分发给客户
+
+# 6. 监控卡密使用情况
+curl -X GET http://localhost:3030/license/statistics \
+ -H "Authorization: Bearer ADMIN_TOKEN"
+```
+
+## 数据库直接查询卡密
+
+### 查询所有未使用的卡密
+
+```sql
+SELECT
+ id, code, type, validDays, remarks, createdAt
+FROM license
+WHERE status = 'unused'
+ORDER BY createdAt DESC;
+```
+
+### 导出卡密列表(用于分发)
+
+```sql
+SELECT
+ code as '卡密码',
+ CASE type
+ WHEN 'trial' THEN '试用版'
+ WHEN 'monthly' THEN '月卡'
+ WHEN 'yearly' THEN '年卡'
+ WHEN 'lifetime' THEN '终身版'
+ END as '类型',
+ validDays as '有效天数',
+ remarks as '备注'
+FROM license
+WHERE status = 'unused'
+ORDER BY type, createdAt DESC;
+```
+
+### 统计卡密使用情况
+
+```sql
+SELECT
+ type as '类型',
+ COUNT(*) as '总数',
+ SUM(CASE WHEN status = 'unused' THEN 1 ELSE 0 END) as '未使用',
+ SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) as '已激活',
+ SUM(CASE WHEN status = 'expired' THEN 1 ELSE 0 END) as '已过期',
+ SUM(CASE WHEN status = 'revoked' THEN 1 ELSE 0 END) as '已撤销'
+FROM license
+GROUP BY type;
+```
+
+## 安全建议
+
+1. **保护管理员账号**
+ - 使用强密码
+ - 定期更换密码
+ - 不要分享管理员凭证
+
+2. **卡密分发**
+ - 通过安全渠道发送(邮件、加密通讯)
+ - 记录卡密分发情况
+ - 及时撤销未使用的卡密
+
+3. **监控使用**
+ - 定期查看统计信息
+ - 检查异常激活
+ - 审计管理员操作日志
+
+## 下一步
+
+完成卡密生成后,可以:
+1. 将卡密分发给用户
+2. 用户使用 `POST /license/activate` 激活
+3. 激活后用户可以使用任务功能
+4. 管理员可以通过统计接口监控使用情况
+
+## 相关文档
+
+- [LICENSE_SYSTEM.md](LICENSE_SYSTEM.md) - 卡密系统详细说明
+- [QUICKSTART.md](QUICKSTART.md) - 快速开始指南
+- [Swagger API](http://localhost:3030/api) - 在线 API 文档
diff --git a/HOW_TO_GENERATE.md b/HOW_TO_GENERATE.md
new file mode 100644
index 0000000..7a65792
--- /dev/null
+++ b/HOW_TO_GENERATE.md
@@ -0,0 +1,82 @@
+# 如何生成卡密 - 快速指南
+
+## 🎯 三种生成方式
+
+### 方式一:使用自动化脚本(最简单)⭐
+
+```bash
+bash generate-licenses.sh
+```
+
+脚本会自动引导你完成:
+1. 注册/登录管理员账号
+2. 选择卡密类型
+3. 输入生成数量
+4. 自动生成并显示卡密
+5. 可选保存到文件
+
+### 方式二:使用 Swagger UI(可视化)
+
+1. 启动项目后访问:http://localhost:3030/api
+
+2. 注册管理员账号 `POST /user/register`
+ ```json
+ {
+ "username": "admin",
+ "password": "admin123",
+ "email": "admin@example.com"
+ }
+ ```
+
+3. 点击右上角 "Authorize",输入 Token
+
+4. 调用 `POST /license/generate` 生成卡密
+ ```json
+ {
+ "type": "monthly",
+ "validDays": 30,
+ "count": 10
+ }
+ ```
+
+### 方式三:使用 curl 命令
+
+```bash
+# 1. 注册管理员
+curl -X POST http://localhost:3030/user/register \
+ -H "Content-Type: application/json" \
+ -d '{"username":"admin","password":"admin123","email":"admin@example.com"}'
+
+# 2. 使用返回的 token 生成卡密
+curl -X POST http://localhost:3030/license/generate \
+ -H "Authorization: Bearer YOUR_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{"type":"monthly","validDays":30,"count":10}'
+```
+
+## 📋 管理员权限规则
+
+系统自动识别以下用户为管理员:
+- 用户名为 `admin`
+- 邮箱包含 `admin`
+- 用户名以 `admin_` 开头
+
+## 📚 详细文档
+
+- [GENERATE_LICENSE_GUIDE.md](GENERATE_LICENSE_GUIDE.md) - 完整生成指南
+- [LICENSE_SYSTEM.md](LICENSE_SYSTEM.md) - 卡密系统说明
+- [QUICKSTART.md](QUICKSTART.md) - 快速开始
+
+## 🚀 快速开始
+
+```bash
+# 1. 启动项目
+npm run start:dev
+
+# 2. 运行生成脚本
+bash generate-licenses.sh
+
+# 3. 按照提示操作即可
+```
+
+就这么简单!🎉
diff --git a/LICENSE_IMPLEMENTATION.md b/LICENSE_IMPLEMENTATION.md
new file mode 100644
index 0000000..5b3063a
--- /dev/null
+++ b/LICENSE_IMPLEMENTATION.md
@@ -0,0 +1,355 @@
+# 卡密商业化系统实现总结
+
+## 项目概述
+
+成功为 Task 任务管理模块添加了完整的卡密商业化授权系统。用户需要激活有效的卡密才能使用任务管理功能。
+
+## 实现的功能
+
+### 1. 核心功能
+- ✅ 卡密生成(批量、唯一性保证)
+- ✅ 卡密激活(自动验证、防重复)
+- ✅ 授权延期(多卡密叠加)
+- ✅ 授权验证(守卫拦截)
+- ✅ 授权查询(剩余天数)
+- ✅ 卡密撤销
+- ✅ 统计分析
+
+### 2. 卡密类型
+- 试用版 (7天)
+- 月度订阅 (30天)
+- 年度订阅 (365天)
+- 终身授权 (100年)
+
+### 3. 安全机制
+- 卡密格式: `XXXX-XXXX-XXXX-XXXX`
+- 随机生成算法(去除易混淆字符)
+- 全局唯一性检查
+- 状态机管理(unused → active → expired/revoked)
+- 守卫层面统一拦截
+
+## 文件结构
+
+```
+src/
+├── license/
+│ ├── entities/
+│ │ └── license.entity.ts # 卡密实体
+│ ├── dto/
+│ │ ├── generate-license.dto.ts # 生成卡密 DTO
+│ │ ├── activate-license.dto.ts # 激活卡密 DTO
+│ │ └── query-license.dto.ts # 查询卡密 DTO
+│ ├── decorators/
+│ │ └── require-license.decorator.ts # 授权装饰器
+│ ├── guards/
+│ │ └── license.guard.ts # 授权守卫
+│ ├── license.service.ts # 卡密服务
+│ ├── license.controller.ts # 卡密控制器
+│ └── license.module.ts # 卡密模块
+│
+├── task/
+│ └── task.controller.ts # 已添加卡密验证
+│
+├── common/
+│ └── dto/
+│ └── error-response.dto.ts # 统一错误响应
+│
+└── app.module.ts # 注册 License Module
+```
+
+## API 接口
+
+### 用户接口
+
+| 接口 | 方法 | 说明 |
+|------|------|------|
+| `/license/activate` | POST | 激活卡密 |
+| `/license/my` | GET | 查询我的授权 |
+| `/license/my/history` | GET | 查询卡密历史 |
+
+### 管理员接口
+
+| 接口 | 方法 | 说明 |
+|------|------|------|
+| `/license/generate` | POST | 生成卡密 |
+| `/license` | GET | 查询所有卡密 |
+| `/license/statistics` | GET | 获取统计信息 |
+| `/license/:id` | GET | 查询单个卡密 |
+| `/license/:id/revoke` | POST | 撤销卡密 |
+| `/license/:id` | DELETE | 删除卡密 |
+
+### 受保护的接口
+
+所有 `/task/*` 接口都需要有效授权:
+- `POST /task` - 创建任务
+- `GET /task` - 获取任务列表
+- `GET /task/:id` - 获取单个任务
+- `PATCH /task/:id` - 更新任务
+- `PATCH /task/reorder` - 重新排序
+- `DELETE /task/:id` - 删除任务
+
+## 数据库变更
+
+### 新增表: license
+
+```sql
+CREATE TABLE `license` (
+ `id` INT PRIMARY KEY AUTO_INCREMENT,
+ `code` VARCHAR(32) UNIQUE NOT NULL,
+ `type` ENUM('trial', 'monthly', 'yearly', 'lifetime') DEFAULT 'monthly',
+ `status` ENUM('unused', 'active', 'expired', 'revoked') DEFAULT 'unused',
+ `validDays` INT DEFAULT 30,
+ `activatedAt` DATETIME NULL,
+ `expiresAt` DATETIME NULL,
+ `userId` INT NULL,
+ `remarks` TEXT NULL,
+ `createdAt` DATETIME DEFAULT CURRENT_TIMESTAMP,
+ `updatedAt` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ FOREIGN KEY (`userId`) REFERENCES `user`(`id`)
+);
+```
+
+## 使用流程
+
+### 管理员生成卡密
+
+```bash
+curl -X POST http://localhost:3030/license/generate \
+ -H "Authorization: Bearer {admin_token}" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "type": "monthly",
+ "validDays": 30,
+ "count": 10,
+ "remarks": "批量生成月卡"
+ }'
+```
+
+### 用户激活卡密
+
+```bash
+curl -X POST http://localhost:3030/license/activate \
+ -H "Authorization: Bearer {user_token}" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "code": "ABCD-1234-EFGH-5678"
+ }'
+```
+
+### 用户查询授权
+
+```bash
+curl -X GET http://localhost:3030/license/my \
+ -H "Authorization: Bearer {user_token}"
+```
+
+### 使用任务功能
+
+```bash
+curl -X POST http://localhost:3030/task \
+ -H "Authorization: Bearer {user_token}" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "title": "完成项目文档",
+ "description": "编写 API 文档",
+ "priority": "high"
+ }'
+```
+
+## 测试
+
+### 1. 运行测试脚本
+
+```bash
+bash test-license-system.sh
+```
+
+### 2. 手动测试步骤
+
+1. 启动项目: `npm run start:dev`
+2. 访问 Swagger: `http://localhost:3030/api`
+3. 注册用户
+4. 生成卡密(管理员)
+5. 激活卡密
+6. 测试任务接口
+
+### 3. 测试场景
+
+- ✅ 未授权访问任务接口 → 返回 403
+- ✅ 激活卡密后访问 → 正常使用
+- ✅ 重复激活同一卡密 → 返回 409
+- ✅ 激活第二个卡密 → 自动延期
+- ✅ 授权过期后访问 → 返回 403
+- ✅ 查询剩余天数 → 正确显示
+- ✅ 撤销卡密 → 无法再使用
+
+## Swagger 文档
+
+所有接口都已添加完整的 Swagger 注释,包括:
+- 接口描述
+- 请求参数说明
+- 响应示例
+- 错误码说明
+
+访问地址: `http://localhost:3030/api`
+
+## 技术亮点
+
+### 1. 安全性
+- 卡密随机生成,去除易混淆字符
+- 全局唯一性保证
+- 状态机防止重复激活
+- 守卫层面统一验证
+
+### 2. 用户体验
+- 支持授权延期(多卡密叠加)
+- 清晰的错误提示
+- 剩余天数实时查询
+- 授权历史记录
+
+### 3. 可维护性
+- 模块化设计
+- 装饰器 + 守卫模式
+- 完整的 TypeScript 类型
+- 详细的代码注释
+
+### 4. 可扩展性
+- 支持多种卡密类型
+- 可配置有效天数
+- 易于添加新的授权模块
+- 支持批量生成
+
+## 后续优化建议
+
+### 功能扩展
+1. 支持不同模块的独立授权
+2. 添加授权转让功能
+3. 实现自动续费机制
+4. 添加授权即将过期提醒
+5. 支持授权使用日志
+
+### 性能优化
+1. 卡密验证结果缓存(Redis)
+2. 批量生成优化
+3. 数据库索引优化
+4. 添加分页查询
+
+### 安全增强
+1. 添加 IP 白名单限制
+2. 实现设备绑定
+3. 添加异常登录检测
+4. 卡密使用频率限制
+
+## 前端集成建议
+
+### 1. 授权状态管理
+
+```typescript
+// 存储授权信息
+interface LicenseState {
+ hasValidLicense: boolean;
+ remainingDays: number;
+ expiresAt: string;
+ type: string;
+}
+
+// 在应用启动时查询
+const checkLicense = async () => {
+ const response = await api.get('/license/my');
+ return response.data;
+};
+```
+
+### 2. 路由守卫
+
+```typescript
+// 需要授权的路由添加守卫
+const ProtectedRoute = ({ children }) => {
+ const { hasValidLicense } = useLicense();
+
+ if (!hasValidLicense) {
+ return ;
+ }
+
+ return children;
+};
+```
+
+### 3. 激活页面
+
+```typescript
+const ActivatePage = () => {
+ const [code, setCode] = useState('');
+
+ const handleActivate = async () => {
+ try {
+ const response = await api.post('/license/activate', { code });
+ toast.success(response.data.message);
+ navigate('/tasks');
+ } catch (error) {
+ toast.error(error.response.data.message);
+ }
+ };
+
+ return (
+
+ setCode(e.target.value)}
+ placeholder="输入卡密: XXXX-XXXX-XXXX-XXXX"
+ />
+
+
+ );
+};
+```
+
+### 4. 授权状态显示
+
+```typescript
+const LicenseStatus = () => {
+ const { license, remainingDays } = useLicense();
+
+ return (
+
+
授权类型: {license.type}
+
剩余天数: {remainingDays} 天
+
到期时间: {new Date(license.expiresAt).toLocaleDateString()}
+
+ );
+};
+```
+
+## 常见问题
+
+### Q: 如何生成第一个管理员卡密?
+A: 可以直接在数据库中插入一条记录,或者临时修改代码去除权限验证。
+
+### Q: 卡密格式有什么要求?
+A: 必须是 `XXXX-XXXX-XXXX-XXXX` 格式,共19个字符(包含连字符)。
+
+### Q: 用户激活多个卡密会怎样?
+A: 如果已有有效授权,新卡密的时间会在原有基础上累加延期。
+
+### Q: 授权过期后数据会丢失吗?
+A: 不会,数据仍然保留,只是无法访问。重新激活后可以继续使用。
+
+### Q: 如何撤销已发放的卡密?
+A: 使用管理员接口 `POST /license/:id/revoke` 撤销指定卡密。
+
+## 相关文档
+
+- [LICENSE_SYSTEM.md](LICENSE_SYSTEM.md) - 详细使用说明
+- [Swagger API 文档](http://localhost:3030/api) - 在线接口文档
+- `test-license-system.sh` - 测试脚本
+
+## 总结
+
+本次实现完成了一个功能完整、安全可靠的卡密商业化授权系统。系统具有以下特点:
+
+1. **功能完整**: 涵盖生成、激活、验证、查询、统计等全流程
+2. **安全可靠**: 多层验证,状态机管理,防止滥用
+3. **易于使用**: 清晰的 API 设计,完整的文档和测试
+4. **易于扩展**: 模块化设计,支持多种授权类型和场景
+
+系统已经可以直接投入使用,后续可根据实际需求进行功能扩展和优化。
diff --git a/LICENSE_SYSTEM.md b/LICENSE_SYSTEM.md
new file mode 100644
index 0000000..57fc75e
--- /dev/null
+++ b/LICENSE_SYSTEM.md
@@ -0,0 +1,329 @@
+# 卡密系统使用说明
+
+## 概述
+
+本项目实现了完整的卡密商业化授权系统,用户需要激活有效的卡密才能使用任务管理(Task)模块的功能。
+
+## 功能特性
+
+### 1. 卡密类型
+
+- **试用版 (trial)**: 7天有效期
+- **月度订阅 (monthly)**: 30天有效期
+- **年度订阅 (yearly)**: 365天有效期
+- **终身授权 (lifetime)**: 100年有效期
+
+### 2. 卡密状态
+
+- **未使用 (unused)**: 卡密已生成但未被激活
+- **已激活 (active)**: 卡密正在使用中
+- **已过期 (expired)**: 卡密有效期已过
+- **已撤销 (revoked)**: 卡密被管理员撤销
+
+### 3. 卡密格式
+
+卡密采用 `XXXX-XXXX-XXXX-XXXX` 格式,例如:`ABCD-1234-EFGH-5678`
+
+## API 接口
+
+### 用户接口
+
+#### 1. 激活卡密
+```http
+POST /license/activate
+Authorization: Bearer {access_token}
+Content-Type: application/json
+
+{
+ "code": "ABCD-1234-EFGH-5678"
+}
+```
+
+**响应示例:**
+```json
+{
+ "message": "卡密激活成功,有效期至 2026-01-13 10:00:00",
+ "license": {
+ "id": 1,
+ "code": "ABCD-1234-EFGH-5678",
+ "type": "monthly",
+ "status": "active",
+ "validDays": 30,
+ "activatedAt": "2025-12-13T10:00:00.000Z",
+ "expiresAt": "2026-01-13T10:00:00.000Z",
+ "userId": 1
+ }
+}
+```
+
+**特殊说明:**
+- 如果用户已有有效授权,新卡密的时间会在原有基础上累加延期
+- 已激活、已过期或已撤销的卡密无法重复使用
+
+#### 2. 查询我的授权信息
+```http
+GET /license/my
+Authorization: Bearer {access_token}
+```
+
+**响应示例:**
+```json
+{
+ "hasValidLicense": true,
+ "license": {
+ "id": 1,
+ "code": "ABCD-1234-EFGH-5678",
+ "type": "monthly",
+ "status": "active",
+ "validDays": 30,
+ "activatedAt": "2025-12-13T10:00:00.000Z",
+ "expiresAt": "2026-01-13T10:00:00.000Z",
+ "remainingDays": 31
+ }
+}
+```
+
+#### 3. 查询我的卡密历史
+```http
+GET /license/my/history
+Authorization: Bearer {access_token}
+```
+
+### 管理员接口
+
+#### 1. 生成卡密
+```http
+POST /license/generate
+Authorization: Bearer {admin_token}
+Content-Type: application/json
+
+{
+ "type": "monthly",
+ "validDays": 30,
+ "count": 10,
+ "remarks": "批量生成月卡"
+}
+```
+
+**响应示例:**
+```json
+[
+ {
+ "id": 1,
+ "code": "ABCD-1234-EFGH-5678",
+ "type": "monthly",
+ "status": "unused",
+ "validDays": 30,
+ "remarks": "批量生成月卡",
+ "createdAt": "2025-12-13T10:00:00.000Z"
+ },
+ ...
+]
+```
+
+#### 2. 查询所有卡密
+```http
+GET /license?status=active&type=monthly
+Authorization: Bearer {admin_token}
+```
+
+#### 3. 获取统计信息
+```http
+GET /license/statistics
+Authorization: Bearer {admin_token}
+```
+
+**响应示例:**
+```json
+{
+ "total": 100,
+ "unused": 50,
+ "active": 30,
+ "expired": 15,
+ "revoked": 5
+}
+```
+
+#### 4. 撤销卡密
+```http
+POST /license/:id/revoke
+Authorization: Bearer {admin_token}
+```
+
+#### 5. 删除卡密
+```http
+DELETE /license/:id
+Authorization: Bearer {admin_token}
+```
+
+## 使用流程
+
+### 用户激活流程
+
+1. **用户注册/登录**
+ ```http
+ POST /user/register 或 POST /user/login
+ ```
+
+2. **获取卡密**
+ - 从管理员处获取卡密码
+
+3. **激活卡密**
+ ```http
+ POST /license/activate
+ {
+ "code": "获取到的卡密"
+ }
+ ```
+
+4. **开始使用任务功能**
+ - 激活成功后,所有 Task 相关接口均可正常使用
+ - 未激活或授权过期时,Task 接口会返回 403 错误
+
+### 管理员操作流程
+
+1. **生成卡密**
+ ```bash
+ # 生成 10 个月卡
+ POST /license/generate
+ {
+ "type": "monthly",
+ "count": 10
+ }
+ ```
+
+2. **查看卡密列表**
+ ```bash
+ GET /license
+ ```
+
+3. **分发卡密给用户**
+ - 将生成的卡密码发给用户
+
+4. **监控卡密使用情况**
+ ```bash
+ GET /license/statistics
+ ```
+
+## 任务模块授权保护
+
+所有任务相关接口都需要有效的卡密授权:
+
+- `POST /task` - 创建任务
+- `GET /task` - 获取任务列表
+- `GET /task/:id` - 获取单个任务
+- `PATCH /task/:id` - 更新任务
+- `PATCH /task/reorder` - 重新排序
+- `DELETE /task/:id` - 删除任务
+
+**未授权时的响应:**
+```json
+{
+ "statusCode": 403,
+ "message": "您的授权已过期或未激活,请联系管理员获取卡密",
+ "error": "Forbidden"
+}
+```
+
+## 数据库表结构
+
+### license 表
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INT | 主键 |
+| code | VARCHAR(32) | 卡密码(唯一) |
+| type | ENUM | 卡密类型 |
+| status | ENUM | 卡密状态 |
+| validDays | INT | 有效天数 |
+| activatedAt | DATETIME | 激活时间 |
+| expiresAt | DATETIME | 过期时间 |
+| userId | INT | 激活用户ID(外键) |
+| remarks | TEXT | 备注信息 |
+| createdAt | DATETIME | 创建时间 |
+| updatedAt | DATETIME | 更新时间 |
+
+## 技术实现
+
+### 核心组件
+
+1. **LicenseService** - 卡密业务逻辑
+ - 生成卡密(确保唯一性)
+ - 验证卡密
+ - 激活卡密(支持延期)
+ - 查询统计
+
+2. **LicenseGuard** - 授权守卫
+ - 拦截需要授权的请求
+ - 验证用户授权状态
+ - 返回 403 错误(未授权)
+
+3. **@RequireLicense** - 装饰器
+ - 标记需要卡密授权的 Controller/Method
+
+### 代码示例
+
+在需要授权保护的 Controller 上添加:
+
+```typescript
+import { UseGuards } from '@nestjs/common';
+import { RequireLicense } from '../license/decorators/require-license.decorator';
+import { LicenseGuard } from '../license/guards/license.guard';
+
+@Controller('task')
+@UseGuards(LicenseGuard)
+@RequireLicense()
+export class TaskController {
+ // ... 所有接口都需要有效授权
+}
+```
+
+## 注意事项
+
+1. **安全性**
+ - 卡密使用随机生成算法,去除易混淆字符
+ - 每个卡密全局唯一
+ - 卡密验证在守卫层面统一拦截
+
+2. **用户体验**
+ - 支持授权延期(多个卡密叠加)
+ - 提供剩余天数查询
+ - 清晰的错误提示
+
+3. **管理维护**
+ - 支持卡密撤销(无需删除记录)
+ - 提供统计接口
+ - 支持按状态和类型筛选
+
+## Swagger 文档
+
+启动项目后访问:`http://localhost:3030/api`
+
+在 Swagger 文档中可以查看所有卡密相关接口的详细说明和测试。
+
+## 测试建议
+
+1. **测试用户激活流程**
+ ```bash
+ # 1. 注册用户
+ # 2. 生成测试卡密
+ # 3. 激活卡密
+ # 4. 访问任务接口
+ ```
+
+2. **测试授权过期**
+ - 修改数据库中的 expiresAt 为过去时间
+ - 访问任务接口应返回 403
+
+3. **测试延期功能**
+ - 激活第一个卡密
+ - 再激活第二个卡密
+ - 验证有效期是否累加
+
+## 未来扩展
+
+1. 支持不同模块的独立授权
+2. 支持授权转让
+3. 添加卡密使用日志
+4. 支持自动续费
+5. 添加授权即将过期提醒
diff --git a/QUICKSTART.md b/QUICKSTART.md
new file mode 100644
index 0000000..af4c789
--- /dev/null
+++ b/QUICKSTART.md
@@ -0,0 +1,303 @@
+# 快速开始 - 卡密系统
+
+## 前置要求
+
+- Node.js 16+
+- MySQL 5.7+
+- 已配置好的数据库连接
+
+## 安装步骤
+
+### 1. 安装依赖
+
+```bash
+npm install
+# 或
+pnpm install
+```
+
+### 2. 启动项目
+
+```bash
+npm run start:dev
+```
+
+### 3. 访问 Swagger 文档
+
+打开浏览器访问: http://localhost:3030/api
+
+## 快速测试
+
+### 方式一: 使用测试脚本
+
+```bash
+# 1. 运行测试脚本
+bash test-license-system.sh
+
+# 2. 按照提示输入卡密
+```
+
+### 方式二: 使用 Swagger UI
+
+#### Step 1: 注册用户
+
+1. 找到 `POST /user/register` 接口
+2. 点击 "Try it out"
+3. 输入用户信息:
+```json
+{
+ "username": "testuser",
+ "password": "password123",
+ "email": "test@example.com"
+}
+```
+4. 点击 "Execute"
+5. 复制返回的 `access_token`
+
+#### Step 2: 生成卡密(需要管理员权限)
+
+**临时方案 - 直接插入数据库:**
+
+```sql
+INSERT INTO `license` (`code`, `type`, `status`, `validDays`, `remarks`)
+VALUES
+ ('ABCD-1234-EFGH-5678', 'monthly', 'unused', 30, '测试卡密'),
+ ('WXYZ-9876-IJKL-5432', 'yearly', 'unused', 365, '年度测试卡');
+```
+
+**或使用 API(需要管理员 Token):**
+
+1. 找到 `POST /license/generate` 接口
+2. 点击右上角 "Authorize",输入 access_token
+3. 输入生成参数:
+```json
+{
+ "type": "monthly",
+ "validDays": 30,
+ "count": 1,
+ "remarks": "测试卡密"
+}
+```
+4. 复制生成的卡密码
+
+#### Step 3: 激活卡密
+
+1. 找到 `POST /license/activate` 接口
+2. 点击 "Authorize",输入你的 access_token
+3. 输入卡密:
+```json
+{
+ "code": "ABCD-1234-EFGH-5678"
+}
+```
+4. 点击 "Execute"
+5. 验证激活成功
+
+#### Step 4: 查询授权状态
+
+1. 找到 `GET /license/my` 接口
+2. 点击 "Try it out"
+3. 点击 "Execute"
+4. 查看授权信息和剩余天数
+
+#### Step 5: 测试任务功能
+
+1. 找到 `POST /task` 接口
+2. 输入任务信息:
+```json
+{
+ "title": "测试任务",
+ "description": "这是一个测试任务",
+ "priority": "high"
+}
+```
+3. 点击 "Execute"
+4. 应该创建成功(之前会返回 403)
+
+## 常用 curl 命令
+
+### 注册用户
+```bash
+curl -X POST http://localhost:3030/user/register \
+ -H "Content-Type: application/json" \
+ -d '{
+ "username": "testuser",
+ "password": "password123",
+ "email": "test@example.com"
+ }'
+```
+
+### 激活卡密
+```bash
+curl -X POST http://localhost:3030/license/activate \
+ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "code": "ABCD-1234-EFGH-5678"
+ }'
+```
+
+### 查询授权
+```bash
+curl -X GET http://localhost:3030/license/my \
+ -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
+```
+
+### 创建任务(需要有效授权)
+```bash
+curl -X POST http://localhost:3030/task \
+ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "title": "完成项目文档",
+ "priority": "high"
+ }'
+```
+
+## 验证授权保护
+
+### 测试未授权访问(应该返回 403)
+
+```bash
+# 使用未激活卡密的用户 Token
+curl -X GET http://localhost:3030/task \
+ -H "Authorization: Bearer UNAUTHORIZED_TOKEN"
+
+# 预期响应:
+# {
+# "statusCode": 403,
+# "message": "您的授权已过期或未激活,请联系管理员获取卡密",
+# "error": "Forbidden"
+# }
+```
+
+### 测试授权后访问(应该成功)
+
+```bash
+# 使用已激活卡密的用户 Token
+curl -X GET http://localhost:3030/task \
+ -H "Authorization: Bearer AUTHORIZED_TOKEN"
+
+# 预期响应: 任务列表数组
+```
+
+## 管理员操作
+
+### 生成批量卡密
+
+```bash
+curl -X POST http://localhost:3030/license/generate \
+ -H "Authorization: Bearer ADMIN_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "type": "monthly",
+ "validDays": 30,
+ "count": 10,
+ "remarks": "批量生成月卡"
+ }'
+```
+
+### 查看统计信息
+
+```bash
+curl -X GET http://localhost:3030/license/statistics \
+ -H "Authorization: Bearer ADMIN_TOKEN"
+```
+
+### 查询所有卡密
+
+```bash
+# 查询所有未使用的月卡
+curl -X GET "http://localhost:3030/license?status=unused&type=monthly" \
+ -H "Authorization: Bearer ADMIN_TOKEN"
+```
+
+### 撤销卡密
+
+```bash
+curl -X POST http://localhost:3030/license/1/revoke \
+ -H "Authorization: Bearer ADMIN_TOKEN"
+```
+
+## 数据库快速查看
+
+### 查看所有卡密
+
+```sql
+SELECT
+ id, code, type, status, validDays,
+ activatedAt, expiresAt, userId, remarks
+FROM license
+ORDER BY createdAt DESC;
+```
+
+### 查看有效授权
+
+```sql
+SELECT
+ l.code, l.type, l.status,
+ u.username, u.email,
+ l.activatedAt, l.expiresAt,
+ DATEDIFF(l.expiresAt, NOW()) as remainingDays
+FROM license l
+LEFT JOIN user u ON l.userId = u.id
+WHERE l.status = 'active' AND l.expiresAt > NOW()
+ORDER BY l.expiresAt;
+```
+
+### 查看即将过期的授权(7天内)
+
+```sql
+SELECT
+ l.code, u.username, u.email,
+ l.expiresAt,
+ DATEDIFF(l.expiresAt, NOW()) as remainingDays
+FROM license l
+LEFT JOIN user u ON l.userId = u.id
+WHERE
+ l.status = 'active'
+ AND l.expiresAt > NOW()
+ AND l.expiresAt < DATE_ADD(NOW(), INTERVAL 7 DAY)
+ORDER BY l.expiresAt;
+```
+
+## 故障排查
+
+### 问题: 激活卡密时返回 403
+**原因**: 未登录或 Token 过期
+**解决**: 重新登录获取新的 access_token
+
+### 问题: 激活卡密时返回 409
+**原因**: 卡密已被激活
+**解决**: 使用其他未激活的卡密
+
+### 问题: 任务接口返回 403
+**原因**: 授权已过期或未激活
+**解决**: 激活新的卡密或检查授权状态
+
+### 问题: 生成卡密返回 401
+**原因**: 需要管理员权限
+**解决**: 使用管理员账号或临时从数据库插入
+
+## 下一步
+
+1. 根据实际业务需求调整卡密类型和有效期
+2. 实现管理员权限验证机制
+3. 添加前端授权管理页面
+4. 配置授权即将过期的邮件提醒
+5. 实现授权使用统计和分析
+
+## 相关文档
+
+- [LICENSE_SYSTEM.md](LICENSE_SYSTEM.md) - 详细功能说明
+- [LICENSE_IMPLEMENTATION.md](LICENSE_IMPLEMENTATION.md) - 实现总结
+- [Swagger API](http://localhost:3030/api) - 在线 API 文档
+
+## 技术支持
+
+如有问题,请查看:
+1. Swagger 文档中的接口说明
+2. LICENSE_SYSTEM.md 中的详细文档
+3. 数据库中的卡密状态
+
+祝使用愉快!
diff --git a/generate-licenses.sh b/generate-licenses.sh
new file mode 100755
index 0000000..6bf4521
--- /dev/null
+++ b/generate-licenses.sh
@@ -0,0 +1,179 @@
+#!/bin/bash
+
+# 卡密生成快速脚本
+# 使用方法: bash generate-licenses.sh
+
+BASE_URL="http://localhost:3030"
+
+# 颜色定义
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+RED='\033[0;31m'
+NC='\033[0m'
+
+echo -e "${GREEN}====== 卡密生成工具 ======${NC}"
+echo ""
+
+# 检查是否已有管理员账号
+read -p "是否已有管理员账号?(y/n): " has_admin
+
+if [ "$has_admin" != "y" ]; then
+ echo -e "${YELLOW}步骤 1: 注册管理员账号${NC}"
+ read -p "请输入管理员用户名 (默认: admin): " admin_username
+ admin_username=${admin_username:-admin}
+
+ read -sp "请输入管理员密码: " admin_password
+ echo ""
+
+ read -p "请输入管理员邮箱 (默认: admin@example.com): " admin_email
+ admin_email=${admin_email:-admin@example.com}
+
+ echo -e "${YELLOW}正在注册管理员账号...${NC}"
+
+ REGISTER_RESPONSE=$(curl -s -X POST "$BASE_URL/user/register" \
+ -H "Content-Type: application/json" \
+ -d "{
+ \"username\": \"$admin_username\",
+ \"password\": \"$admin_password\",
+ \"email\": \"$admin_email\"
+ }")
+
+ ADMIN_TOKEN=$(echo $REGISTER_RESPONSE | jq -r '.access_token')
+
+ if [ "$ADMIN_TOKEN" = "null" ] || [ -z "$ADMIN_TOKEN" ]; then
+ echo -e "${RED}注册失败!${NC}"
+ echo "$REGISTER_RESPONSE" | jq '.'
+ exit 1
+ fi
+
+ echo -e "${GREEN}管理员账号注册成功!${NC}"
+ echo "管理员 Token: $ADMIN_TOKEN"
+ echo ""
+else
+ echo -e "${YELLOW}步骤 1: 管理员登录${NC}"
+ read -p "请输入管理员用户名: " admin_username
+ read -sp "请输入管理员密码: " admin_password
+ echo ""
+
+ echo -e "${YELLOW}正在登录...${NC}"
+
+ LOGIN_RESPONSE=$(curl -s -X POST "$BASE_URL/user/login" \
+ -H "Content-Type: application/json" \
+ -d "{
+ \"username\": \"$admin_username\",
+ \"password\": \"$admin_password\"
+ }")
+
+ ADMIN_TOKEN=$(echo $LOGIN_RESPONSE | jq -r '.access_token')
+
+ if [ "$ADMIN_TOKEN" = "null" ] || [ -z "$ADMIN_TOKEN" ]; then
+ echo -e "${RED}登录失败!请检查用户名和密码${NC}"
+ echo "$LOGIN_RESPONSE" | jq '.'
+ exit 1
+ fi
+
+ echo -e "${GREEN}登录成功!${NC}"
+ echo ""
+fi
+
+# 生成卡密
+echo -e "${YELLOW}步骤 2: 选择要生成的卡密类型${NC}"
+echo "1. 试用卡 (7天)"
+echo "2. 月卡 (30天)"
+echo "3. 年卡 (365天)"
+echo "4. 终身卡"
+read -p "请选择 (1-4): " license_choice
+
+case $license_choice in
+ 1)
+ LICENSE_TYPE="trial"
+ VALID_DAYS=7
+ ;;
+ 2)
+ LICENSE_TYPE="monthly"
+ VALID_DAYS=30
+ ;;
+ 3)
+ LICENSE_TYPE="yearly"
+ VALID_DAYS=365
+ ;;
+ 4)
+ LICENSE_TYPE="lifetime"
+ VALID_DAYS=36500
+ ;;
+ *)
+ echo -e "${RED}无效的选择${NC}"
+ exit 1
+ ;;
+esac
+
+read -p "请输入生成数量 (默认: 1): " count
+count=${count:-1}
+
+read -p "请输入备注信息 (可选): " remarks
+
+echo ""
+echo -e "${YELLOW}正在生成 $count 个 $LICENSE_TYPE 卡密...${NC}"
+
+GENERATE_RESPONSE=$(curl -s -X POST "$BASE_URL/license/generate" \
+ -H "Authorization: Bearer $ADMIN_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d "{
+ \"type\": \"$LICENSE_TYPE\",
+ \"validDays\": $VALID_DAYS,
+ \"count\": $count,
+ \"remarks\": \"$remarks\"
+ }")
+
+# 检查是否成功
+if echo "$GENERATE_RESPONSE" | jq -e '.[0].code' > /dev/null 2>&1; then
+ echo -e "${GREEN}卡密生成成功!${NC}"
+ echo ""
+ echo "生成的卡密:"
+ echo "$GENERATE_RESPONSE" | jq -r '.[] | " \(.code) - \(.type) (\(.validDays)天) - \(.remarks // "无备注")"'
+ echo ""
+
+ # 询问是否保存到文件
+ read -p "是否将卡密保存到文件?(y/n): " save_to_file
+
+ if [ "$save_to_file" = "y" ]; then
+ FILENAME="licenses_$(date +%Y%m%d_%H%M%S).txt"
+ echo "生成时间: $(date)" > "$FILENAME"
+ echo "类型: $LICENSE_TYPE" >> "$FILENAME"
+ echo "有效天数: $VALID_DAYS" >> "$FILENAME"
+ echo "数量: $count" >> "$FILENAME"
+ echo "备注: $remarks" >> "$FILENAME"
+ echo "" >> "$FILENAME"
+ echo "卡密列表:" >> "$FILENAME"
+ echo "$GENERATE_RESPONSE" | jq -r '.[] | .code' >> "$FILENAME"
+
+ echo -e "${GREEN}卡密已保存到: $FILENAME${NC}"
+ fi
+
+ # 显示统计信息
+ echo ""
+ read -p "是否查看卡密统计信息?(y/n): " show_stats
+
+ if [ "$show_stats" = "y" ]; then
+ echo -e "${YELLOW}查询统计信息...${NC}"
+ STATS=$(curl -s -X GET "$BASE_URL/license/statistics" \
+ -H "Authorization: Bearer $ADMIN_TOKEN")
+
+ echo "$STATS" | jq '.'
+ fi
+
+else
+ echo -e "${RED}生成失败!${NC}"
+ echo "$GENERATE_RESPONSE" | jq '.'
+ exit 1
+fi
+
+echo ""
+echo -e "${GREEN}====== 操作完成 ======${NC}"
+echo ""
+echo "提示:"
+echo "1. 管理员 Token 已保存(有效期内可继续使用)"
+echo "2. 可以将卡密分发给用户进行激活"
+echo "3. 用户激活接口: POST /license/activate"
+echo "4. 查看所有卡密: GET /license"
+echo ""
diff --git a/package.json b/package.json
index 88127c9..1d59895 100644
--- a/package.json
+++ b/package.json
@@ -93,5 +93,6 @@
],
"coverageDirectory": "../coverage",
"testEnvironment": "node"
- }
+ },
+ "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0"
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 86b77da..2ceea17 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,178 +1,180 @@
-lockfileVersion: '6.0'
+lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
-dependencies:
- '@nestjs/cache-manager':
- specifier: 2.1.0
- version: 2.1.0(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)(cache-manager@4.1.0)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- '@nestjs/common':
- specifier: ^10.0.0
- version: 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- '@nestjs/config':
- specifier: ^3.3.0
- version: 3.3.0(@nestjs/common@10.4.20)(rxjs@7.8.2)
- '@nestjs/core':
- specifier: ^10.0.0
- version: 10.4.20(@nestjs/common@10.4.20)(@nestjs/platform-express@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- '@nestjs/jwt':
- specifier: ^10.2.0
- version: 10.2.0(@nestjs/common@10.4.20)
- '@nestjs/mapped-types':
- specifier: '*'
- version: 2.1.0(@nestjs/common@10.4.20)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)
- '@nestjs/passport':
- specifier: ^10.0.0
- version: 10.0.3(@nestjs/common@10.4.20)(passport@0.6.0)
- '@nestjs/platform-express':
- specifier: ^10.0.0
- version: 10.4.20(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)
- '@nestjs/swagger':
- specifier: ^11.0.2
- version: 11.2.0(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)
- '@nestjs/typeorm':
- specifier: ^10.0.2
- version: 10.0.2(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2)(typeorm@0.3.27)
- '@types/bcrypt':
- specifier: ^5.0.2
- version: 5.0.2
- '@types/passport-github2':
- specifier: ^1.2.9
- version: 1.2.9
- '@types/uuid':
- specifier: ^10.0.0
- version: 10.0.0
- axios:
- specifier: ^1.7.9
- version: 1.12.2
- bcrypt:
- specifier: ^5.1.1
- version: 5.1.1
- bcryptjs:
- specifier: ^2.4.3
- version: 2.4.3
- body-parser:
- specifier: ^1.20.3
- version: 1.20.3
- cache-manager:
- specifier: 4.1.0
- version: 4.1.0
- class-transformer:
- specifier: ^0.5.1
- version: 0.5.1
- class-validator:
- specifier: ^0.14.2
- version: 0.14.2
- dotenv:
- specifier: ^16.4.7
- version: 16.6.1
- install:
- specifier: ^0.13.0
- version: 0.13.0
- mysql2:
- specifier: ^3.12.0
- version: 3.15.2
- passport:
- specifier: ^0.6.0
- version: 0.6.0
- passport-github2:
- specifier: ^0.1.12
- version: 0.1.12
- passport-jwt:
- specifier: ^4.0.1
- version: 4.0.1
- passport-local:
- specifier: ^1.0.0
- version: 1.0.0
- reflect-metadata:
- specifier: ^0.1.13
- version: 0.1.14
- rxjs:
- specifier: ^7.8.1
- version: 7.8.2
- swagger-ui-express:
- specifier: ^5.0.1
- version: 5.0.1(express@5.1.0)
- typeorm:
- specifier: ^0.3.20
- version: 0.3.27(mysql2@3.15.2)(reflect-metadata@0.1.14)(ts-node@10.9.2)
- uuid:
- specifier: ^11.0.4
- version: 11.1.0
+importers:
-devDependencies:
- '@nestjs/cli':
- specifier: ^10.0.0
- version: 10.4.9
- '@nestjs/schematics':
- specifier: ^10.0.0
- version: 10.2.3(typescript@5.9.3)
- '@nestjs/testing':
- specifier: ^10.0.0
- version: 10.4.20(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)(@nestjs/platform-express@10.4.20)
- '@types/express':
- specifier: ^4.17.17
- version: 4.17.23
- '@types/jest':
- specifier: ^29.5.2
- version: 29.5.14
- '@types/node':
- specifier: ^20.3.1
- version: 20.19.20
- '@types/passport-jwt':
- specifier: ^3.0.9
- version: 3.0.13
- '@types/supertest':
- specifier: ^6.0.0
- version: 6.0.3
- '@typescript-eslint/eslint-plugin':
- specifier: ^6.0.0
- version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.9.3)
- '@typescript-eslint/parser':
- specifier: ^6.0.0
- version: 6.21.0(eslint@8.57.1)(typescript@5.9.3)
- eslint:
- specifier: ^8.42.0
- version: 8.57.1
- eslint-config-prettier:
- specifier: ^9.0.0
- version: 9.1.2(eslint@8.57.1)
- eslint-plugin-prettier:
- specifier: ^5.0.0
- version: 5.5.4(eslint-config-prettier@9.1.2)(eslint@8.57.1)(prettier@3.6.2)
- jest:
- specifier: ^29.5.0
- version: 29.7.0(@types/node@20.19.20)(ts-node@10.9.2)
- prettier:
- specifier: ^3.0.0
- version: 3.6.2
- source-map-support:
- specifier: ^0.5.21
- version: 0.5.21
- supertest:
- specifier: ^6.3.3
- version: 6.3.4
- ts-jest:
- specifier: ^29.1.0
- version: 29.4.5(@babel/core@7.28.4)(jest@29.7.0)(typescript@5.9.3)
- ts-loader:
- specifier: ^9.4.3
- version: 9.5.4(typescript@5.9.3)(webpack@5.102.1)
- ts-node:
- specifier: ^10.9.1
- version: 10.9.2(@types/node@20.19.20)(typescript@5.9.3)
- tsconfig-paths:
- specifier: ^4.2.0
- version: 4.2.0
- typescript:
- specifier: ^5.1.3
- version: 5.9.3
+ .:
+ dependencies:
+ '@nestjs/cache-manager':
+ specifier: 2.1.0
+ version: 2.1.0(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)(cache-manager@4.1.0)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ '@nestjs/common':
+ specifier: ^10.0.0
+ version: 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ '@nestjs/config':
+ specifier: ^3.3.0
+ version: 3.3.0(@nestjs/common@10.4.20)(rxjs@7.8.2)
+ '@nestjs/core':
+ specifier: ^10.0.0
+ version: 10.4.20(@nestjs/common@10.4.20)(@nestjs/platform-express@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ '@nestjs/jwt':
+ specifier: ^10.2.0
+ version: 10.2.0(@nestjs/common@10.4.20)
+ '@nestjs/mapped-types':
+ specifier: '*'
+ version: 2.1.0(@nestjs/common@10.4.20)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)
+ '@nestjs/passport':
+ specifier: ^10.0.0
+ version: 10.0.3(@nestjs/common@10.4.20)(passport@0.6.0)
+ '@nestjs/platform-express':
+ specifier: ^10.0.0
+ version: 10.4.20(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)
+ '@nestjs/swagger':
+ specifier: ^11.0.2
+ version: 11.2.0(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)
+ '@nestjs/typeorm':
+ specifier: ^10.0.2
+ version: 10.0.2(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2)(typeorm@0.3.27)
+ '@types/bcrypt':
+ specifier: ^5.0.2
+ version: 5.0.2
+ '@types/passport-github2':
+ specifier: ^1.2.9
+ version: 1.2.9
+ '@types/uuid':
+ specifier: ^10.0.0
+ version: 10.0.0
+ axios:
+ specifier: ^1.7.9
+ version: 1.12.2
+ bcrypt:
+ specifier: ^5.1.1
+ version: 5.1.1
+ bcryptjs:
+ specifier: ^2.4.3
+ version: 2.4.3
+ body-parser:
+ specifier: ^1.20.3
+ version: 1.20.3
+ cache-manager:
+ specifier: 4.1.0
+ version: 4.1.0
+ class-transformer:
+ specifier: ^0.5.1
+ version: 0.5.1
+ class-validator:
+ specifier: ^0.14.2
+ version: 0.14.2
+ dotenv:
+ specifier: ^16.4.7
+ version: 16.6.1
+ install:
+ specifier: ^0.13.0
+ version: 0.13.0
+ mysql2:
+ specifier: ^3.12.0
+ version: 3.15.2
+ passport:
+ specifier: ^0.6.0
+ version: 0.6.0
+ passport-github2:
+ specifier: ^0.1.12
+ version: 0.1.12
+ passport-jwt:
+ specifier: ^4.0.1
+ version: 4.0.1
+ passport-local:
+ specifier: ^1.0.0
+ version: 1.0.0
+ reflect-metadata:
+ specifier: ^0.1.13
+ version: 0.1.14
+ rxjs:
+ specifier: ^7.8.1
+ version: 7.8.2
+ swagger-ui-express:
+ specifier: ^5.0.1
+ version: 5.0.1(express@5.1.0)
+ typeorm:
+ specifier: ^0.3.20
+ version: 0.3.27(mysql2@3.15.2)(reflect-metadata@0.1.14)(ts-node@10.9.2)
+ uuid:
+ specifier: ^11.0.4
+ version: 11.1.0
+ devDependencies:
+ '@nestjs/cli':
+ specifier: ^10.0.0
+ version: 10.4.9
+ '@nestjs/schematics':
+ specifier: ^10.0.0
+ version: 10.2.3(typescript@5.9.3)
+ '@nestjs/testing':
+ specifier: ^10.0.0
+ version: 10.4.20(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)(@nestjs/platform-express@10.4.20)
+ '@types/express':
+ specifier: ^4.17.17
+ version: 4.17.23
+ '@types/jest':
+ specifier: ^29.5.2
+ version: 29.5.14
+ '@types/node':
+ specifier: ^20.3.1
+ version: 20.19.20
+ '@types/passport-jwt':
+ specifier: ^3.0.9
+ version: 3.0.13
+ '@types/supertest':
+ specifier: ^6.0.0
+ version: 6.0.3
+ '@typescript-eslint/eslint-plugin':
+ specifier: ^6.0.0
+ version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.9.3)
+ '@typescript-eslint/parser':
+ specifier: ^6.0.0
+ version: 6.21.0(eslint@8.57.1)(typescript@5.9.3)
+ eslint:
+ specifier: ^8.42.0
+ version: 8.57.1
+ eslint-config-prettier:
+ specifier: ^9.0.0
+ version: 9.1.2(eslint@8.57.1)
+ eslint-plugin-prettier:
+ specifier: ^5.0.0
+ version: 5.5.4(eslint-config-prettier@9.1.2)(eslint@8.57.1)(prettier@3.6.2)
+ jest:
+ specifier: ^29.5.0
+ version: 29.7.0(@types/node@20.19.20)(ts-node@10.9.2)
+ prettier:
+ specifier: ^3.0.0
+ version: 3.6.2
+ source-map-support:
+ specifier: ^0.5.21
+ version: 0.5.21
+ supertest:
+ specifier: ^6.3.3
+ version: 6.3.4
+ ts-jest:
+ specifier: ^29.1.0
+ version: 29.4.5(@babel/core@7.28.4)(jest@29.7.0)(typescript@5.9.3)
+ ts-loader:
+ specifier: ^9.4.3
+ version: 9.5.4(typescript@5.9.3)(webpack@5.102.1)
+ ts-node:
+ specifier: ^10.9.1
+ version: 10.9.2(@types/node@20.19.20)(typescript@5.9.3)
+ tsconfig-paths:
+ specifier: ^4.2.0
+ version: 4.2.0
+ typescript:
+ specifier: ^5.1.3
+ version: 5.9.3
packages:
- /@angular-devkit/core@17.3.11(chokidar@3.6.0):
+ '@angular-devkit/core@17.3.11':
resolution: {integrity: sha512-vTNDYNsLIWpYk2I969LMQFH29GTsLzxNk/0cLw5q56ARF0v5sIWfHYwGTS88jdDqIpuuettcSczbxeA7EuAmqQ==}
engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
peerDependencies:
@@ -180,478 +182,240 @@ packages:
peerDependenciesMeta:
chokidar:
optional: true
- dependencies:
- ajv: 8.12.0
- ajv-formats: 2.1.1(ajv@8.12.0)
- chokidar: 3.6.0
- jsonc-parser: 3.2.1
- picomatch: 4.0.1
- rxjs: 7.8.1
- source-map: 0.7.4
- dev: true
- /@angular-devkit/schematics-cli@17.3.11(chokidar@3.6.0):
+ '@angular-devkit/schematics-cli@17.3.11':
resolution: {integrity: sha512-kcOMqp+PHAKkqRad7Zd7PbpqJ0LqLaNZdY1+k66lLWmkEBozgq8v4ASn/puPWf9Bo0HpCiK+EzLf0VHE8Z/y6Q==}
engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
hasBin: true
- dependencies:
- '@angular-devkit/core': 17.3.11(chokidar@3.6.0)
- '@angular-devkit/schematics': 17.3.11(chokidar@3.6.0)
- ansi-colors: 4.1.3
- inquirer: 9.2.15
- symbol-observable: 4.0.0
- yargs-parser: 21.1.1
- transitivePeerDependencies:
- - chokidar
- dev: true
- /@angular-devkit/schematics@17.3.11(chokidar@3.6.0):
+ '@angular-devkit/schematics@17.3.11':
resolution: {integrity: sha512-I5wviiIqiFwar9Pdk30Lujk8FczEEc18i22A5c6Z9lbmhPQdTroDnEQdsfXjy404wPe8H62s0I15o4pmMGfTYQ==}
engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
- dependencies:
- '@angular-devkit/core': 17.3.11(chokidar@3.6.0)
- jsonc-parser: 3.2.1
- magic-string: 0.30.8
- ora: 5.4.1
- rxjs: 7.8.1
- transitivePeerDependencies:
- - chokidar
- dev: true
- /@babel/code-frame@7.27.1:
+ '@babel/code-frame@7.27.1':
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-validator-identifier': 7.27.1
- js-tokens: 4.0.0
- picocolors: 1.1.1
- dev: true
- /@babel/compat-data@7.28.4:
+ '@babel/compat-data@7.28.4':
resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/core@7.28.4:
+ '@babel/core@7.28.4':
resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.3
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
- '@babel/helpers': 7.28.4
- '@babel/parser': 7.28.4
- '@babel/template': 7.27.2
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
- '@jridgewell/remapping': 2.3.5
- convert-source-map: 2.0.0
- debug: 4.4.3
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@babel/generator@7.28.3:
+ '@babel/generator@7.28.3':
resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
- jsesc: 3.1.0
- dev: true
- /@babel/helper-compilation-targets@7.27.2:
+ '@babel/helper-compilation-targets@7.27.2':
resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/compat-data': 7.28.4
- '@babel/helper-validator-option': 7.27.1
- browserslist: 4.26.3
- lru-cache: 5.1.1
- semver: 6.3.1
- dev: true
- /@babel/helper-globals@7.28.0:
+ '@babel/helper-globals@7.28.0':
resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/helper-module-imports@7.27.1:
+ '@babel/helper-module-imports@7.27.1':
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4):
+ '@babel/helper-module-transforms@7.28.3':
resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-module-imports': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
- '@babel/traverse': 7.28.4
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@babel/helper-plugin-utils@7.27.1:
+ '@babel/helper-plugin-utils@7.27.1':
resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/helper-string-parser@7.27.1:
+ '@babel/helper-string-parser@7.27.1':
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/helper-validator-identifier@7.27.1:
+ '@babel/helper-validator-identifier@7.27.1':
resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/helper-validator-option@7.27.1:
+ '@babel/helper-validator-option@7.27.1':
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/helpers@7.28.4:
+ '@babel/helpers@7.28.4':
resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/template': 7.27.2
- '@babel/types': 7.28.4
- dev: true
- /@babel/parser@7.28.4:
+ '@babel/parser@7.28.4':
resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==}
engines: {node: '>=6.0.0'}
hasBin: true
- dependencies:
- '@babel/types': 7.28.4
- dev: true
- /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.4):
+ '@babel/plugin-syntax-async-generators@7.8.4':
resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
- dev: true
- /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.4):
+ '@babel/plugin-syntax-bigint@7.8.3':
resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
- dev: true
- /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.4):
+ '@babel/plugin-syntax-class-properties@7.12.13':
resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
- dev: true
- /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.4):
+ '@babel/plugin-syntax-class-static-block@7.14.5':
resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
- dev: true
- /@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4):
+ '@babel/plugin-syntax-import-attributes@7.27.1':
resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
- dev: true
- /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.4):
+ '@babel/plugin-syntax-import-meta@7.10.4':
resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
- dev: true
- /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.4):
+ '@babel/plugin-syntax-json-strings@7.8.3':
resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
- dev: true
- /@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4):
+ '@babel/plugin-syntax-jsx@7.27.1':
resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
- dev: true
- /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.4):
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4':
resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
- dev: true
- /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.4):
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3':
resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
- dev: true
- /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.4):
+ '@babel/plugin-syntax-numeric-separator@7.10.4':
resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
- dev: true
- /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.4):
+ '@babel/plugin-syntax-object-rest-spread@7.8.3':
resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
- dev: true
- /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.4):
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3':
resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
- dev: true
- /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.4):
+ '@babel/plugin-syntax-optional-chaining@7.8.3':
resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
- dev: true
- /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.4):
+ '@babel/plugin-syntax-private-property-in-object@7.14.5':
resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
- dev: true
- /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.4):
+ '@babel/plugin-syntax-top-level-await@7.14.5':
resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
- dev: true
- /@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4):
+ '@babel/plugin-syntax-typescript@7.27.1':
resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-plugin-utils': 7.27.1
- dev: true
- /@babel/template@7.27.2:
+ '@babel/template@7.27.2':
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
- dev: true
- /@babel/traverse@7.28.4:
+ '@babel/traverse@7.28.4':
resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.3
- '@babel/helper-globals': 7.28.0
- '@babel/parser': 7.28.4
- '@babel/template': 7.27.2
- '@babel/types': 7.28.4
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@babel/types@7.28.4:
+ '@babel/types@7.28.4':
resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
- dev: true
- /@bcoe/v8-coverage@0.2.3:
+ '@bcoe/v8-coverage@0.2.3':
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
- dev: true
- /@borewit/text-codec@0.1.1:
+ '@borewit/text-codec@0.1.1':
resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==}
- /@colors/colors@1.5.0:
+ '@colors/colors@1.5.0':
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
engines: {node: '>=0.1.90'}
- requiresBuild: true
- dev: true
- optional: true
- /@cspotcode/source-map-support@0.8.1:
+ '@cspotcode/source-map-support@0.8.1':
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
engines: {node: '>=12'}
- dependencies:
- '@jridgewell/trace-mapping': 0.3.9
- /@eslint-community/eslint-utils@4.9.0(eslint@8.57.1):
+ '@eslint-community/eslint-utils@4.9.0':
resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
- dependencies:
- eslint: 8.57.1
- eslint-visitor-keys: 3.4.3
- dev: true
- /@eslint-community/regexpp@4.12.1:
+ '@eslint-community/regexpp@4.12.1':
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- dev: true
- /@eslint/eslintrc@2.1.4:
+ '@eslint/eslintrc@2.1.4':
resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dependencies:
- ajv: 6.12.6
- debug: 4.4.3
- espree: 9.6.1
- globals: 13.24.0
- ignore: 5.3.2
- import-fresh: 3.3.1
- js-yaml: 4.1.0
- minimatch: 3.1.2
- strip-json-comments: 3.1.1
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@eslint/js@8.57.1:
+ '@eslint/js@8.57.1':
resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dev: true
- /@humanwhocodes/config-array@0.13.0:
+ '@humanwhocodes/config-array@0.13.0':
resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==}
engines: {node: '>=10.10.0'}
deprecated: Use @eslint/config-array instead
- dependencies:
- '@humanwhocodes/object-schema': 2.0.3
- debug: 4.4.3
- minimatch: 3.1.2
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@humanwhocodes/module-importer@1.0.1:
+ '@humanwhocodes/module-importer@1.0.1':
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
engines: {node: '>=12.22'}
- dev: true
- /@humanwhocodes/object-schema@2.0.3:
+ '@humanwhocodes/object-schema@2.0.3':
resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
deprecated: Use @eslint/object-schema instead
- dev: true
- /@isaacs/cliui@8.0.2:
+ '@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
- dependencies:
- string-width: 5.1.2
- string-width-cjs: /string-width@4.2.3
- strip-ansi: 7.1.2
- strip-ansi-cjs: /strip-ansi@6.0.1
- wrap-ansi: 8.1.0
- wrap-ansi-cjs: /wrap-ansi@7.0.0
- /@istanbuljs/load-nyc-config@1.1.0:
+ '@istanbuljs/load-nyc-config@1.1.0':
resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
engines: {node: '>=8'}
- dependencies:
- camelcase: 5.3.1
- find-up: 4.1.0
- get-package-type: 0.1.0
- js-yaml: 3.14.1
- resolve-from: 5.0.0
- dev: true
- /@istanbuljs/schema@0.1.3:
+ '@istanbuljs/schema@0.1.3':
resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
engines: {node: '>=8'}
- dev: true
- /@jest/console@29.7.0:
+ '@jest/console@29.7.0':
resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/types': 29.6.3
- '@types/node': 20.19.20
- chalk: 4.1.2
- jest-message-util: 29.7.0
- jest-util: 29.7.0
- slash: 3.0.0
- dev: true
- /@jest/core@29.7.0(ts-node@10.9.2):
+ '@jest/core@29.7.0':
resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
@@ -659,93 +423,28 @@ packages:
peerDependenciesMeta:
node-notifier:
optional: true
- dependencies:
- '@jest/console': 29.7.0
- '@jest/reporters': 29.7.0
- '@jest/test-result': 29.7.0
- '@jest/transform': 29.7.0
- '@jest/types': 29.6.3
- '@types/node': 20.19.20
- ansi-escapes: 4.3.2
- chalk: 4.1.2
- ci-info: 3.9.0
- exit: 0.1.2
- graceful-fs: 4.2.11
- jest-changed-files: 29.7.0
- jest-config: 29.7.0(@types/node@20.19.20)(ts-node@10.9.2)
- jest-haste-map: 29.7.0
- jest-message-util: 29.7.0
- jest-regex-util: 29.6.3
- jest-resolve: 29.7.0
- jest-resolve-dependencies: 29.7.0
- jest-runner: 29.7.0
- jest-runtime: 29.7.0
- jest-snapshot: 29.7.0
- jest-util: 29.7.0
- jest-validate: 29.7.0
- jest-watcher: 29.7.0
- micromatch: 4.0.8
- pretty-format: 29.7.0
- slash: 3.0.0
- strip-ansi: 6.0.1
- transitivePeerDependencies:
- - babel-plugin-macros
- - supports-color
- - ts-node
- dev: true
- /@jest/environment@29.7.0:
+ '@jest/environment@29.7.0':
resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/fake-timers': 29.7.0
- '@jest/types': 29.6.3
- '@types/node': 20.19.20
- jest-mock: 29.7.0
- dev: true
- /@jest/expect-utils@29.7.0:
+ '@jest/expect-utils@29.7.0':
resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- jest-get-type: 29.6.3
- dev: true
- /@jest/expect@29.7.0:
+ '@jest/expect@29.7.0':
resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- expect: 29.7.0
- jest-snapshot: 29.7.0
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@jest/fake-timers@29.7.0:
+ '@jest/fake-timers@29.7.0':
resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/types': 29.6.3
- '@sinonjs/fake-timers': 10.3.0
- '@types/node': 20.19.20
- jest-message-util: 29.7.0
- jest-mock: 29.7.0
- jest-util: 29.7.0
- dev: true
- /@jest/globals@29.7.0:
+ '@jest/globals@29.7.0':
resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/environment': 29.7.0
- '@jest/expect': 29.7.0
- '@jest/types': 29.6.3
- jest-mock: 29.7.0
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@jest/reporters@29.7.0:
+ '@jest/reporters@29.7.0':
resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
@@ -753,181 +452,69 @@ packages:
peerDependenciesMeta:
node-notifier:
optional: true
- dependencies:
- '@bcoe/v8-coverage': 0.2.3
- '@jest/console': 29.7.0
- '@jest/test-result': 29.7.0
- '@jest/transform': 29.7.0
- '@jest/types': 29.6.3
- '@jridgewell/trace-mapping': 0.3.31
- '@types/node': 20.19.20
- chalk: 4.1.2
- collect-v8-coverage: 1.0.2
- exit: 0.1.2
- glob: 7.2.3
- graceful-fs: 4.2.11
- istanbul-lib-coverage: 3.2.2
- istanbul-lib-instrument: 6.0.3
- istanbul-lib-report: 3.0.1
- istanbul-lib-source-maps: 4.0.1
- istanbul-reports: 3.2.0
- jest-message-util: 29.7.0
- jest-util: 29.7.0
- jest-worker: 29.7.0
- slash: 3.0.0
- string-length: 4.0.2
- strip-ansi: 6.0.1
- v8-to-istanbul: 9.3.0
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@jest/schemas@29.6.3:
+ '@jest/schemas@29.6.3':
resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@sinclair/typebox': 0.27.8
- dev: true
- /@jest/source-map@29.6.3:
+ '@jest/source-map@29.6.3':
resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jridgewell/trace-mapping': 0.3.31
- callsites: 3.1.0
- graceful-fs: 4.2.11
- dev: true
- /@jest/test-result@29.7.0:
+ '@jest/test-result@29.7.0':
resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/console': 29.7.0
- '@jest/types': 29.6.3
- '@types/istanbul-lib-coverage': 2.0.6
- collect-v8-coverage: 1.0.2
- dev: true
- /@jest/test-sequencer@29.7.0:
+ '@jest/test-sequencer@29.7.0':
resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/test-result': 29.7.0
- graceful-fs: 4.2.11
- jest-haste-map: 29.7.0
- slash: 3.0.0
- dev: true
- /@jest/transform@29.7.0:
+ '@jest/transform@29.7.0':
resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@babel/core': 7.28.4
- '@jest/types': 29.6.3
- '@jridgewell/trace-mapping': 0.3.31
- babel-plugin-istanbul: 6.1.1
- chalk: 4.1.2
- convert-source-map: 2.0.0
- fast-json-stable-stringify: 2.1.0
- graceful-fs: 4.2.11
- jest-haste-map: 29.7.0
- jest-regex-util: 29.6.3
- jest-util: 29.7.0
- micromatch: 4.0.8
- pirates: 4.0.7
- slash: 3.0.0
- write-file-atomic: 4.0.2
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@jest/types@29.6.3:
+ '@jest/types@29.6.3':
resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/schemas': 29.6.3
- '@types/istanbul-lib-coverage': 2.0.6
- '@types/istanbul-reports': 3.0.4
- '@types/node': 20.19.20
- '@types/yargs': 17.0.33
- chalk: 4.1.2
- dev: true
- /@jridgewell/gen-mapping@0.3.13:
+ '@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
- '@jridgewell/trace-mapping': 0.3.31
- dev: true
- /@jridgewell/remapping@2.3.5:
+ '@jridgewell/remapping@2.3.5':
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
- dependencies:
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
- dev: true
- /@jridgewell/resolve-uri@3.1.2:
+ '@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
- /@jridgewell/source-map@0.3.11:
+ '@jridgewell/source-map@0.3.11':
resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
- dependencies:
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
- dev: true
- /@jridgewell/sourcemap-codec@1.5.5:
+ '@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
- /@jridgewell/trace-mapping@0.3.31:
+ '@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.5
- dev: true
- /@jridgewell/trace-mapping@0.3.9:
+ '@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.5
- /@ljharb/through@2.3.14:
+ '@ljharb/through@2.3.14':
resolution: {integrity: sha512-ajBvlKpWucBB17FuQYUShqpqy8GRgYEpJW0vWJbUu1CV9lWyrDCapy0lScU8T8Z6qn49sSwJB3+M+evYIdGg+A==}
engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.8
- dev: true
- /@lukeed/csprng@1.1.0:
+ '@lukeed/csprng@1.1.0':
resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==}
engines: {node: '>=8'}
- /@mapbox/node-pre-gyp@1.0.11:
+ '@mapbox/node-pre-gyp@1.0.11':
resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==}
hasBin: true
- dependencies:
- detect-libc: 2.1.2
- https-proxy-agent: 5.0.1
- make-dir: 3.1.0
- node-fetch: 2.7.0
- nopt: 5.0.0
- npmlog: 5.0.1
- rimraf: 3.0.2
- semver: 7.7.3
- tar: 6.2.1
- transitivePeerDependencies:
- - encoding
- - supports-color
- dev: false
- /@microsoft/tsdoc@0.15.1:
+ '@microsoft/tsdoc@0.15.1':
resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==}
- dev: false
- /@nestjs/cache-manager@2.1.0(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)(cache-manager@4.1.0)(reflect-metadata@0.1.14)(rxjs@7.8.2):
+ '@nestjs/cache-manager@2.1.0':
resolution: {integrity: sha512-9kep3a8Mq5cMuXN/anGhSYc0P48CRBXk5wyJJRBFxhNkCH8AIzZF4CASGVDIEMmm3OjVcEUHojjyJwCODS17Qw==}
peerDependencies:
'@nestjs/common': ^9.0.0 || ^10.0.0
@@ -935,15 +522,8 @@ packages:
cache-manager: <=5
reflect-metadata: ^0.1.12
rxjs: ^7.0.0
- dependencies:
- '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- '@nestjs/core': 10.4.20(@nestjs/common@10.4.20)(@nestjs/platform-express@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- cache-manager: 4.1.0
- reflect-metadata: 0.1.14
- rxjs: 7.8.2
- dev: false
- /@nestjs/cli@10.4.9:
+ '@nestjs/cli@10.4.9':
resolution: {integrity: sha512-s8qYd97bggqeK7Op3iD49X2MpFtW4LVNLAwXFkfbRxKME6IYT7X0muNTJ2+QfI8hpbNx9isWkrLWIp+g5FOhiA==}
engines: {node: '>= 16.14'}
hasBin: true
@@ -955,33 +535,8 @@ packages:
optional: true
'@swc/core':
optional: true
- dependencies:
- '@angular-devkit/core': 17.3.11(chokidar@3.6.0)
- '@angular-devkit/schematics': 17.3.11(chokidar@3.6.0)
- '@angular-devkit/schematics-cli': 17.3.11(chokidar@3.6.0)
- '@nestjs/schematics': 10.2.3(chokidar@3.6.0)(typescript@5.7.2)
- chalk: 4.1.2
- chokidar: 3.6.0
- cli-table3: 0.6.5
- commander: 4.1.1
- fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.7.2)(webpack@5.97.1)
- glob: 10.4.5
- inquirer: 8.2.6
- node-emoji: 1.11.0
- ora: 5.4.1
- tree-kill: 1.2.2
- tsconfig-paths: 4.2.0
- tsconfig-paths-webpack-plugin: 4.2.0
- typescript: 5.7.2
- webpack: 5.97.1
- webpack-node-externals: 3.0.0
- transitivePeerDependencies:
- - esbuild
- - uglify-js
- - webpack-cli
- dev: true
- /@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2):
+ '@nestjs/common@10.4.20':
resolution: {integrity: sha512-hxJxZF7jcKGuUzM9EYbuES80Z/36piJbiqmPy86mk8qOn5gglFebBTvcx7PWVbRNSb4gngASYnefBj/Y2HAzpQ==}
peerDependencies:
class-transformer: '*'
@@ -993,34 +548,15 @@ packages:
optional: true
class-validator:
optional: true
- dependencies:
- class-transformer: 0.5.1
- class-validator: 0.14.2
- file-type: 20.4.1
- iterare: 1.2.1
- reflect-metadata: 0.1.14
- rxjs: 7.8.2
- tslib: 2.8.1
- uid: 2.0.2
- transitivePeerDependencies:
- - supports-color
- /@nestjs/config@3.3.0(@nestjs/common@10.4.20)(rxjs@7.8.2):
+ '@nestjs/config@3.3.0':
resolution: {integrity: sha512-pdGTp8m9d0ZCrjTpjkUbZx6gyf2IKf+7zlkrPNMsJzYZ4bFRRTpXrnj+556/5uiI6AfL5mMrJc2u7dB6bvM+VA==}
peerDependencies:
'@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0
rxjs: ^7.1.0
- dependencies:
- '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- dotenv: 16.4.5
- dotenv-expand: 10.0.0
- lodash: 4.17.21
- rxjs: 7.8.2
- dev: false
- /@nestjs/core@10.4.20(@nestjs/common@10.4.20)(@nestjs/platform-express@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2):
+ '@nestjs/core@10.4.20':
resolution: {integrity: sha512-kRdtyKA3+Tu70N3RQ4JgmO1E3LzAMs/eppj7SfjabC7TgqNWoS4RLhWl4BqmsNVmjj6D5jgfPVtHtgYkU3AfpQ==}
- requiresBuild: true
peerDependencies:
'@nestjs/common': ^10.0.0
'@nestjs/microservices': ^10.0.0
@@ -1035,31 +571,13 @@ packages:
optional: true
'@nestjs/websockets':
optional: true
- dependencies:
- '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- '@nestjs/platform-express': 10.4.20(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)
- '@nuxtjs/opencollective': 0.3.2
- fast-safe-stringify: 2.1.1
- iterare: 1.2.1
- path-to-regexp: 3.3.0
- reflect-metadata: 0.1.14
- rxjs: 7.8.2
- tslib: 2.8.1
- uid: 2.0.2
- transitivePeerDependencies:
- - encoding
- /@nestjs/jwt@10.2.0(@nestjs/common@10.4.20):
+ '@nestjs/jwt@10.2.0':
resolution: {integrity: sha512-x8cG90SURkEiLOehNaN2aRlotxT0KZESUliOPKKnjWiyJOcWurkF3w345WOX0P4MgFzUjGoZ1Sy0aZnxeihT0g==}
peerDependencies:
'@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0
- dependencies:
- '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- '@types/jsonwebtoken': 9.0.5
- jsonwebtoken: 9.0.2
- dev: false
- /@nestjs/mapped-types@2.1.0(@nestjs/common@10.4.20)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14):
+ '@nestjs/mapped-types@2.1.0':
resolution: {integrity: sha512-W+n+rM69XsFdwORF11UqJahn4J3xi4g/ZEOlJNL6KoW5ygWSmBB2p0S2BZ4FQeS/NDH72e6xIcu35SfJnE8bXw==}
peerDependencies:
'@nestjs/common': ^10.0.0 || ^11.0.0
@@ -1071,70 +589,25 @@ packages:
optional: true
class-validator:
optional: true
- dependencies:
- '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- class-transformer: 0.5.1
- class-validator: 0.14.2
- reflect-metadata: 0.1.14
- dev: false
- /@nestjs/passport@10.0.3(@nestjs/common@10.4.20)(passport@0.6.0):
+ '@nestjs/passport@10.0.3':
resolution: {integrity: sha512-znJ9Y4S8ZDVY+j4doWAJ8EuuVO7SkQN3yOBmzxbGaXbvcSwFDAdGJ+OMCg52NdzIO4tQoN4pYKx8W6M0ArfFRQ==}
peerDependencies:
'@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0
passport: ^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0
- dependencies:
- '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- passport: 0.6.0
- dev: false
- /@nestjs/platform-express@10.4.20(@nestjs/common@10.4.20)(@nestjs/core@10.4.20):
+ '@nestjs/platform-express@10.4.20':
resolution: {integrity: sha512-rh97mX3rimyf4xLMLHuTOBKe6UD8LOJ14VlJ1F/PTd6C6ZK9Ak6EHuJvdaGcSFQhd3ZMBh3I6CuujKGW9pNdIg==}
peerDependencies:
'@nestjs/common': ^10.0.0
'@nestjs/core': ^10.0.0
- dependencies:
- '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- '@nestjs/core': 10.4.20(@nestjs/common@10.4.20)(@nestjs/platform-express@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- body-parser: 1.20.3
- cors: 2.8.5
- express: 4.21.2
- multer: 2.0.2
- tslib: 2.8.1
- transitivePeerDependencies:
- - supports-color
- /@nestjs/schematics@10.2.3(chokidar@3.6.0)(typescript@5.7.2):
+ '@nestjs/schematics@10.2.3':
resolution: {integrity: sha512-4e8gxaCk7DhBxVUly2PjYL4xC2ifDFexCqq1/u4TtivLGXotVk0wHdYuPYe1tHTHuR1lsOkRbfOCpkdTnigLVg==}
peerDependencies:
typescript: '>=4.8.2'
- dependencies:
- '@angular-devkit/core': 17.3.11(chokidar@3.6.0)
- '@angular-devkit/schematics': 17.3.11(chokidar@3.6.0)
- comment-json: 4.2.5
- jsonc-parser: 3.3.1
- pluralize: 8.0.0
- typescript: 5.7.2
- transitivePeerDependencies:
- - chokidar
- dev: true
- /@nestjs/schematics@10.2.3(typescript@5.9.3):
- resolution: {integrity: sha512-4e8gxaCk7DhBxVUly2PjYL4xC2ifDFexCqq1/u4TtivLGXotVk0wHdYuPYe1tHTHuR1lsOkRbfOCpkdTnigLVg==}
- peerDependencies:
- typescript: '>=4.8.2'
- dependencies:
- '@angular-devkit/core': 17.3.11(chokidar@3.6.0)
- '@angular-devkit/schematics': 17.3.11(chokidar@3.6.0)
- comment-json: 4.2.5
- jsonc-parser: 3.3.1
- pluralize: 8.0.0
- typescript: 5.9.3
- transitivePeerDependencies:
- - chokidar
- dev: true
-
- /@nestjs/swagger@11.2.0(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14):
+ '@nestjs/swagger@11.2.0':
resolution: {integrity: sha512-5wolt8GmpNcrQv34tIPUtPoV1EeFbCetm40Ij3+M0FNNnf2RJ3FyWfuQvI8SBlcJyfaounYVTKzKHreFXsUyOg==}
peerDependencies:
'@fastify/static': ^8.0.0
@@ -1150,21 +623,8 @@ packages:
optional: true
class-validator:
optional: true
- dependencies:
- '@microsoft/tsdoc': 0.15.1
- '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- '@nestjs/core': 10.4.20(@nestjs/common@10.4.20)(@nestjs/platform-express@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- '@nestjs/mapped-types': 2.1.0(@nestjs/common@10.4.20)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)
- class-transformer: 0.5.1
- class-validator: 0.14.2
- js-yaml: 4.1.0
- lodash: 4.17.21
- path-to-regexp: 8.2.0
- reflect-metadata: 0.1.14
- swagger-ui-dist: 5.21.0
- dev: false
- /@nestjs/testing@10.4.20(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)(@nestjs/platform-express@10.4.20):
+ '@nestjs/testing@10.4.20':
resolution: {integrity: sha512-nMkRDukDKskdPruM6EsgMq7yJua+CPZM6I6FrLP8yXw8BiVSPv9Nm0CtcGGwt3kgZF9hfxKjGqLjsvVBsv6Vfw==}
peerDependencies:
'@nestjs/common': ^10.0.0
@@ -1176,14 +636,8 @@ packages:
optional: true
'@nestjs/platform-express':
optional: true
- dependencies:
- '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- '@nestjs/core': 10.4.20(@nestjs/common@10.4.20)(@nestjs/platform-express@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- '@nestjs/platform-express': 10.4.20(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)
- tslib: 2.8.1
- dev: true
- /@nestjs/typeorm@10.0.2(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2)(typeorm@0.3.27):
+ '@nestjs/typeorm@10.0.2':
resolution: {integrity: sha512-H738bJyydK4SQkRCTeh1aFBxoO1E9xdL/HaLGThwrqN95os5mEyAtK7BLADOS+vldP4jDZ2VQPLj4epWwRqCeQ==}
peerDependencies:
'@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0
@@ -1191,376 +645,209 @@ packages:
reflect-metadata: ^0.1.13 || ^0.2.0
rxjs: ^7.2.0
typeorm: ^0.3.0
- dependencies:
- '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- '@nestjs/core': 10.4.20(@nestjs/common@10.4.20)(@nestjs/platform-express@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2)
- reflect-metadata: 0.1.14
- rxjs: 7.8.2
- typeorm: 0.3.27(mysql2@3.15.2)(reflect-metadata@0.1.14)(ts-node@10.9.2)
- uuid: 9.0.1
- dev: false
- /@noble/hashes@1.8.0:
+ '@noble/hashes@1.8.0':
resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
engines: {node: ^14.21.3 || >=16}
- dev: true
- /@nodelib/fs.scandir@2.1.5:
+ '@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- run-parallel: 1.2.0
- dev: true
- /@nodelib/fs.stat@2.0.5:
+ '@nodelib/fs.stat@2.0.5':
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
engines: {node: '>= 8'}
- dev: true
- /@nodelib/fs.walk@1.2.8:
+ '@nodelib/fs.walk@1.2.8':
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- dependencies:
- '@nodelib/fs.scandir': 2.1.5
- fastq: 1.19.1
- dev: true
- /@nuxtjs/opencollective@0.3.2:
+ '@nuxtjs/opencollective@0.3.2':
resolution: {integrity: sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==}
engines: {node: '>=8.0.0', npm: '>=5.0.0'}
hasBin: true
- dependencies:
- chalk: 4.1.2
- consola: 2.15.3
- node-fetch: 2.7.0
- transitivePeerDependencies:
- - encoding
- /@paralleldrive/cuid2@2.2.2:
+ '@paralleldrive/cuid2@2.2.2':
resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==}
- dependencies:
- '@noble/hashes': 1.8.0
- dev: true
- /@pkgjs/parseargs@0.11.0:
+ '@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
- requiresBuild: true
- optional: true
- /@pkgr/core@0.2.9:
+ '@pkgr/core@0.2.9':
resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
- dev: true
- /@scarf/scarf@1.4.0:
+ '@scarf/scarf@1.4.0':
resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==}
- requiresBuild: true
- dev: false
- /@sinclair/typebox@0.27.8:
+ '@sinclair/typebox@0.27.8':
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
- dev: true
- /@sinonjs/commons@3.0.1:
+ '@sinonjs/commons@3.0.1':
resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
- dependencies:
- type-detect: 4.0.8
- dev: true
- /@sinonjs/fake-timers@10.3.0:
+ '@sinonjs/fake-timers@10.3.0':
resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
- dependencies:
- '@sinonjs/commons': 3.0.1
- dev: true
- /@sqltools/formatter@1.2.5:
+ '@sqltools/formatter@1.2.5':
resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==}
- dev: false
- /@tokenizer/inflate@0.2.7:
+ '@tokenizer/inflate@0.2.7':
resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==}
engines: {node: '>=18'}
- dependencies:
- debug: 4.4.3
- fflate: 0.8.2
- token-types: 6.1.1
- transitivePeerDependencies:
- - supports-color
- /@tokenizer/token@0.3.0:
+ '@tokenizer/token@0.3.0':
resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==}
- /@tsconfig/node10@1.0.11:
+ '@tsconfig/node10@1.0.11':
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
- /@tsconfig/node12@1.0.11:
+ '@tsconfig/node12@1.0.11':
resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
- /@tsconfig/node14@1.0.3:
+ '@tsconfig/node14@1.0.3':
resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
- /@tsconfig/node16@1.0.4:
+ '@tsconfig/node16@1.0.4':
resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
- /@types/babel__core@7.20.5:
+ '@types/babel__core@7.20.5':
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
- dependencies:
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
- '@types/babel__generator': 7.27.0
- '@types/babel__template': 7.4.4
- '@types/babel__traverse': 7.28.0
- dev: true
- /@types/babel__generator@7.27.0:
+ '@types/babel__generator@7.27.0':
resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
- dependencies:
- '@babel/types': 7.28.4
- dev: true
- /@types/babel__template@7.4.4:
+ '@types/babel__template@7.4.4':
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
- dependencies:
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
- dev: true
- /@types/babel__traverse@7.28.0:
+ '@types/babel__traverse@7.28.0':
resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
- dependencies:
- '@babel/types': 7.28.4
- dev: true
- /@types/bcrypt@5.0.2:
+ '@types/bcrypt@5.0.2':
resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==}
- dependencies:
- '@types/node': 20.19.20
- dev: false
- /@types/body-parser@1.19.6:
+ '@types/body-parser@1.19.6':
resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==}
- dependencies:
- '@types/connect': 3.4.38
- '@types/node': 20.19.20
- /@types/connect@3.4.38:
+ '@types/connect@3.4.38':
resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
- dependencies:
- '@types/node': 20.19.20
- /@types/cookiejar@2.1.5:
+ '@types/cookiejar@2.1.5':
resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==}
- dev: true
- /@types/eslint-scope@3.7.7:
+ '@types/eslint-scope@3.7.7':
resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
- dependencies:
- '@types/eslint': 9.6.1
- '@types/estree': 1.0.8
- dev: true
- /@types/eslint@9.6.1:
+ '@types/eslint@9.6.1':
resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
- dependencies:
- '@types/estree': 1.0.8
- '@types/json-schema': 7.0.15
- dev: true
- /@types/estree@1.0.8:
+ '@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
- dev: true
- /@types/express-serve-static-core@4.19.7:
+ '@types/express-serve-static-core@4.19.7':
resolution: {integrity: sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==}
- dependencies:
- '@types/node': 20.19.20
- '@types/qs': 6.14.0
- '@types/range-parser': 1.2.7
- '@types/send': 1.2.0
- /@types/express@4.17.23:
+ '@types/express@4.17.23':
resolution: {integrity: sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==}
- dependencies:
- '@types/body-parser': 1.19.6
- '@types/express-serve-static-core': 4.19.7
- '@types/qs': 6.14.0
- '@types/serve-static': 1.15.9
- /@types/graceful-fs@4.1.9:
+ '@types/graceful-fs@4.1.9':
resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
- dependencies:
- '@types/node': 20.19.20
- dev: true
- /@types/http-errors@2.0.5:
+ '@types/http-errors@2.0.5':
resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==}
- /@types/istanbul-lib-coverage@2.0.6:
+ '@types/istanbul-lib-coverage@2.0.6':
resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
- dev: true
- /@types/istanbul-lib-report@3.0.3:
+ '@types/istanbul-lib-report@3.0.3':
resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
- dependencies:
- '@types/istanbul-lib-coverage': 2.0.6
- dev: true
- /@types/istanbul-reports@3.0.4:
+ '@types/istanbul-reports@3.0.4':
resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
- dependencies:
- '@types/istanbul-lib-report': 3.0.3
- dev: true
- /@types/jest@29.5.14:
+ '@types/jest@29.5.14':
resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==}
- dependencies:
- expect: 29.7.0
- pretty-format: 29.7.0
- dev: true
- /@types/json-schema@7.0.15:
+ '@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
- dev: true
- /@types/jsonwebtoken@9.0.10:
+ '@types/jsonwebtoken@9.0.10':
resolution: {integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==}
- dependencies:
- '@types/ms': 2.1.0
- '@types/node': 20.19.20
- dev: true
- /@types/jsonwebtoken@9.0.5:
+ '@types/jsonwebtoken@9.0.5':
resolution: {integrity: sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==}
- dependencies:
- '@types/node': 20.19.20
- dev: false
- /@types/methods@1.1.4:
+ '@types/methods@1.1.4':
resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==}
- dev: true
- /@types/mime@1.3.5:
+ '@types/mime@1.3.5':
resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
- /@types/ms@2.1.0:
+ '@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
- dev: true
- /@types/node@20.19.20:
+ '@types/node@20.19.20':
resolution: {integrity: sha512-2Q7WS25j4pS1cS8yw3d6buNCVJukOTeQ39bAnwR6sOJbaxvyCGebzTMypDFN82CxBLnl+lSWVdCCWbRY6y9yZQ==}
- dependencies:
- undici-types: 6.21.0
- /@types/oauth@0.9.6:
+ '@types/oauth@0.9.6':
resolution: {integrity: sha512-H9TRCVKBNOhZZmyHLqFt9drPM9l+ShWiqqJijU1B8P3DX3ub84NjxDuy+Hjrz+fEca5Kwip3qPMKNyiLgNJtIA==}
- dependencies:
- '@types/node': 20.19.20
- dev: false
- /@types/passport-github2@1.2.9:
+ '@types/passport-github2@1.2.9':
resolution: {integrity: sha512-/nMfiPK2E6GKttwBzwj0Wjaot8eHrM57hnWxu52o6becr5/kXlH/4yE2v2rh234WGvSgEEzIII02Nc5oC5xEHA==}
- dependencies:
- '@types/express': 4.17.23
- '@types/passport': 1.0.17
- '@types/passport-oauth2': 1.8.0
- dev: false
- /@types/passport-jwt@3.0.13:
+ '@types/passport-jwt@3.0.13':
resolution: {integrity: sha512-fjHaC6Bv8EpMMqzTnHP32SXlZGaNfBPC/Po5dmRGYi2Ky7ljXPbGnOy+SxZqa6iZvFgVhoJ1915Re3m93zmcfA==}
- dependencies:
- '@types/express': 4.17.23
- '@types/jsonwebtoken': 9.0.10
- '@types/passport-strategy': 0.2.38
- dev: true
- /@types/passport-oauth2@1.8.0:
+ '@types/passport-oauth2@1.8.0':
resolution: {integrity: sha512-6//z+4orIOy/g3zx17HyQ71GSRK4bs7Sb+zFasRoc2xzlv7ZCJ+vkDBYFci8U6HY+or6Zy7ajf4mz4rK7nsWJQ==}
- dependencies:
- '@types/express': 4.17.23
- '@types/oauth': 0.9.6
- '@types/passport': 1.0.17
- dev: false
- /@types/passport-strategy@0.2.38:
+ '@types/passport-strategy@0.2.38':
resolution: {integrity: sha512-GC6eMqqojOooq993Tmnmp7AUTbbQSgilyvpCYQjT+H6JfG/g6RGc7nXEniZlp0zyKJ0WUdOiZWLBZft9Yug1uA==}
- dependencies:
- '@types/express': 4.17.23
- '@types/passport': 1.0.17
- dev: true
- /@types/passport@1.0.17:
+ '@types/passport@1.0.17':
resolution: {integrity: sha512-aciLyx+wDwT2t2/kJGJR2AEeBz0nJU4WuRX04Wu9Dqc5lSUtwu0WERPHYsLhF9PtseiAMPBGNUOtFjxZ56prsg==}
- dependencies:
- '@types/express': 4.17.23
- /@types/qs@6.14.0:
+ '@types/qs@6.14.0':
resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==}
- /@types/range-parser@1.2.7:
+ '@types/range-parser@1.2.7':
resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
- /@types/semver@7.7.1:
+ '@types/semver@7.7.1':
resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==}
- dev: true
- /@types/send@0.17.5:
+ '@types/send@0.17.5':
resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==}
- dependencies:
- '@types/mime': 1.3.5
- '@types/node': 20.19.20
- /@types/send@1.2.0:
+ '@types/send@1.2.0':
resolution: {integrity: sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ==}
- dependencies:
- '@types/node': 20.19.20
- /@types/serve-static@1.15.9:
+ '@types/serve-static@1.15.9':
resolution: {integrity: sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==}
- dependencies:
- '@types/http-errors': 2.0.5
- '@types/node': 20.19.20
- '@types/send': 0.17.5
- /@types/stack-utils@2.0.3:
+ '@types/stack-utils@2.0.3':
resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
- dev: true
- /@types/superagent@8.1.9:
+ '@types/superagent@8.1.9':
resolution: {integrity: sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==}
- dependencies:
- '@types/cookiejar': 2.1.5
- '@types/methods': 1.1.4
- '@types/node': 20.19.20
- form-data: 4.0.4
- dev: true
- /@types/supertest@6.0.3:
+ '@types/supertest@6.0.3':
resolution: {integrity: sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==}
- dependencies:
- '@types/methods': 1.1.4
- '@types/superagent': 8.1.9
- dev: true
- /@types/uuid@10.0.0:
+ '@types/uuid@10.0.0':
resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==}
- dev: false
- /@types/validator@13.15.3:
+ '@types/validator@13.15.3':
resolution: {integrity: sha512-7bcUmDyS6PN3EuD9SlGGOxM77F8WLVsrwkxyWxKnxzmXoequ6c7741QBrANq6htVRGOITJ7z72mTP6Z4XyuG+Q==}
- /@types/yargs-parser@21.0.3:
+ '@types/yargs-parser@21.0.3':
resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
- dev: true
- /@types/yargs@17.0.33:
+ '@types/yargs@17.0.33':
resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
- dependencies:
- '@types/yargs-parser': 21.0.3
- dev: true
- /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.9.3):
+ '@typescript-eslint/eslint-plugin@6.21.0':
resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@@ -1570,26 +857,8 @@ packages:
peerDependenciesMeta:
typescript:
optional: true
- dependencies:
- '@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 6.21.0
- '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3)
- '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 6.21.0
- debug: 4.4.3
- eslint: 8.57.1
- graphemer: 1.4.0
- ignore: 5.3.2
- natural-compare: 1.4.0
- semver: 7.7.3
- ts-api-utils: 1.4.3(typescript@5.9.3)
- typescript: 5.9.3
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3):
+ '@typescript-eslint/parser@6.21.0':
resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@@ -1598,27 +867,12 @@ packages:
peerDependenciesMeta:
typescript:
optional: true
- dependencies:
- '@typescript-eslint/scope-manager': 6.21.0
- '@typescript-eslint/types': 6.21.0
- '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 6.21.0
- debug: 4.4.3
- eslint: 8.57.1
- typescript: 5.9.3
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@typescript-eslint/scope-manager@6.21.0:
+ '@typescript-eslint/scope-manager@6.21.0':
resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==}
engines: {node: ^16.0.0 || >=18.0.0}
- dependencies:
- '@typescript-eslint/types': 6.21.0
- '@typescript-eslint/visitor-keys': 6.21.0
- dev: true
- /@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.9.3):
+ '@typescript-eslint/type-utils@6.21.0':
resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@@ -1627,23 +881,12 @@ packages:
peerDependenciesMeta:
typescript:
optional: true
- dependencies:
- '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3)
- '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3)
- debug: 4.4.3
- eslint: 8.57.1
- ts-api-utils: 1.4.3(typescript@5.9.3)
- typescript: 5.9.3
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@typescript-eslint/types@6.21.0:
+ '@typescript-eslint/types@6.21.0':
resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==}
engines: {node: ^16.0.0 || >=18.0.0}
- dev: true
- /@typescript-eslint/typescript-estree@6.21.0(typescript@5.9.3):
+ '@typescript-eslint/typescript-estree@6.21.0':
resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@@ -1651,928 +894,514 @@ packages:
peerDependenciesMeta:
typescript:
optional: true
- dependencies:
- '@typescript-eslint/types': 6.21.0
- '@typescript-eslint/visitor-keys': 6.21.0
- debug: 4.4.3
- globby: 11.1.0
- is-glob: 4.0.3
- minimatch: 9.0.3
- semver: 7.7.3
- ts-api-utils: 1.4.3(typescript@5.9.3)
- typescript: 5.9.3
- transitivePeerDependencies:
- - supports-color
- dev: true
- /@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.9.3):
+ '@typescript-eslint/utils@6.21.0':
resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
- dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1)
- '@types/json-schema': 7.0.15
- '@types/semver': 7.7.1
- '@typescript-eslint/scope-manager': 6.21.0
- '@typescript-eslint/types': 6.21.0
- '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3)
- eslint: 8.57.1
- semver: 7.7.3
- transitivePeerDependencies:
- - supports-color
- - typescript
- dev: true
- /@typescript-eslint/visitor-keys@6.21.0:
+ '@typescript-eslint/visitor-keys@6.21.0':
resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==}
engines: {node: ^16.0.0 || >=18.0.0}
- dependencies:
- '@typescript-eslint/types': 6.21.0
- eslint-visitor-keys: 3.4.3
- dev: true
- /@ungap/structured-clone@1.3.0:
+ '@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
- dev: true
- /@webassemblyjs/ast@1.14.1:
+ '@webassemblyjs/ast@1.14.1':
resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
- dependencies:
- '@webassemblyjs/helper-numbers': 1.13.2
- '@webassemblyjs/helper-wasm-bytecode': 1.13.2
- dev: true
- /@webassemblyjs/floating-point-hex-parser@1.13.2:
+ '@webassemblyjs/floating-point-hex-parser@1.13.2':
resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==}
- dev: true
- /@webassemblyjs/helper-api-error@1.13.2:
+ '@webassemblyjs/helper-api-error@1.13.2':
resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==}
- dev: true
- /@webassemblyjs/helper-buffer@1.14.1:
+ '@webassemblyjs/helper-buffer@1.14.1':
resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==}
- dev: true
- /@webassemblyjs/helper-numbers@1.13.2:
+ '@webassemblyjs/helper-numbers@1.13.2':
resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==}
- dependencies:
- '@webassemblyjs/floating-point-hex-parser': 1.13.2
- '@webassemblyjs/helper-api-error': 1.13.2
- '@xtuc/long': 4.2.2
- dev: true
- /@webassemblyjs/helper-wasm-bytecode@1.13.2:
+ '@webassemblyjs/helper-wasm-bytecode@1.13.2':
resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==}
- dev: true
- /@webassemblyjs/helper-wasm-section@1.14.1:
+ '@webassemblyjs/helper-wasm-section@1.14.1':
resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==}
- dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/helper-buffer': 1.14.1
- '@webassemblyjs/helper-wasm-bytecode': 1.13.2
- '@webassemblyjs/wasm-gen': 1.14.1
- dev: true
- /@webassemblyjs/ieee754@1.13.2:
+ '@webassemblyjs/ieee754@1.13.2':
resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==}
- dependencies:
- '@xtuc/ieee754': 1.2.0
- dev: true
- /@webassemblyjs/leb128@1.13.2:
+ '@webassemblyjs/leb128@1.13.2':
resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==}
- dependencies:
- '@xtuc/long': 4.2.2
- dev: true
- /@webassemblyjs/utf8@1.13.2:
+ '@webassemblyjs/utf8@1.13.2':
resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==}
- dev: true
- /@webassemblyjs/wasm-edit@1.14.1:
+ '@webassemblyjs/wasm-edit@1.14.1':
resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==}
- dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/helper-buffer': 1.14.1
- '@webassemblyjs/helper-wasm-bytecode': 1.13.2
- '@webassemblyjs/helper-wasm-section': 1.14.1
- '@webassemblyjs/wasm-gen': 1.14.1
- '@webassemblyjs/wasm-opt': 1.14.1
- '@webassemblyjs/wasm-parser': 1.14.1
- '@webassemblyjs/wast-printer': 1.14.1
- dev: true
- /@webassemblyjs/wasm-gen@1.14.1:
+ '@webassemblyjs/wasm-gen@1.14.1':
resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==}
- dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/helper-wasm-bytecode': 1.13.2
- '@webassemblyjs/ieee754': 1.13.2
- '@webassemblyjs/leb128': 1.13.2
- '@webassemblyjs/utf8': 1.13.2
- dev: true
- /@webassemblyjs/wasm-opt@1.14.1:
+ '@webassemblyjs/wasm-opt@1.14.1':
resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==}
- dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/helper-buffer': 1.14.1
- '@webassemblyjs/wasm-gen': 1.14.1
- '@webassemblyjs/wasm-parser': 1.14.1
- dev: true
- /@webassemblyjs/wasm-parser@1.14.1:
+ '@webassemblyjs/wasm-parser@1.14.1':
resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==}
- dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/helper-api-error': 1.13.2
- '@webassemblyjs/helper-wasm-bytecode': 1.13.2
- '@webassemblyjs/ieee754': 1.13.2
- '@webassemblyjs/leb128': 1.13.2
- '@webassemblyjs/utf8': 1.13.2
- dev: true
- /@webassemblyjs/wast-printer@1.14.1:
+ '@webassemblyjs/wast-printer@1.14.1':
resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==}
- dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@xtuc/long': 4.2.2
- dev: true
- /@xtuc/ieee754@1.2.0:
+ '@xtuc/ieee754@1.2.0':
resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
- dev: true
- /@xtuc/long@4.2.2:
+ '@xtuc/long@4.2.2':
resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
- dev: true
- /abbrev@1.1.1:
+ abbrev@1.1.1:
resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
- dev: false
- /accepts@1.3.8:
+ accepts@1.3.8:
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
engines: {node: '>= 0.6'}
- dependencies:
- mime-types: 2.1.35
- negotiator: 0.6.3
- /accepts@2.0.0:
+ accepts@2.0.0:
resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
engines: {node: '>= 0.6'}
- dependencies:
- mime-types: 3.0.1
- negotiator: 1.0.0
- dev: false
- /acorn-import-phases@1.0.4(acorn@8.15.0):
+ acorn-import-phases@1.0.4:
resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==}
engines: {node: '>=10.13.0'}
peerDependencies:
acorn: ^8.14.0
- dependencies:
- acorn: 8.15.0
- dev: true
- /acorn-jsx@5.3.2(acorn@8.15.0):
+ acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- dependencies:
- acorn: 8.15.0
- dev: true
- /acorn-walk@8.3.4:
+ acorn-walk@8.3.4:
resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
engines: {node: '>=0.4.0'}
- dependencies:
- acorn: 8.15.0
- /acorn@8.15.0:
+ acorn@8.15.0:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
hasBin: true
- /agent-base@6.0.2:
+ agent-base@6.0.2:
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
engines: {node: '>= 6.0.0'}
- dependencies:
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
- dev: false
- /ajv-formats@2.1.1(ajv@8.12.0):
+ ajv-formats@2.1.1:
resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
peerDependencies:
ajv: ^8.0.0
peerDependenciesMeta:
ajv:
optional: true
- dependencies:
- ajv: 8.12.0
- dev: true
- /ajv-formats@2.1.1(ajv@8.17.1):
- resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
- peerDependencies:
- ajv: ^8.0.0
- peerDependenciesMeta:
- ajv:
- optional: true
- dependencies:
- ajv: 8.17.1
- dev: true
-
- /ajv-keywords@3.5.2(ajv@6.12.6):
+ ajv-keywords@3.5.2:
resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
peerDependencies:
ajv: ^6.9.1
- dependencies:
- ajv: 6.12.6
- dev: true
- /ajv-keywords@5.1.0(ajv@8.17.1):
+ ajv-keywords@5.1.0:
resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
peerDependencies:
ajv: ^8.8.2
- dependencies:
- ajv: 8.17.1
- fast-deep-equal: 3.1.3
- dev: true
- /ajv@6.12.6:
+ ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
- dependencies:
- fast-deep-equal: 3.1.3
- fast-json-stable-stringify: 2.1.0
- json-schema-traverse: 0.4.1
- uri-js: 4.4.1
- dev: true
- /ajv@8.12.0:
+ ajv@8.12.0:
resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
- dependencies:
- fast-deep-equal: 3.1.3
- json-schema-traverse: 1.0.0
- require-from-string: 2.0.2
- uri-js: 4.4.1
- dev: true
- /ajv@8.17.1:
+ ajv@8.17.1:
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
- dependencies:
- fast-deep-equal: 3.1.3
- fast-uri: 3.1.0
- json-schema-traverse: 1.0.0
- require-from-string: 2.0.2
- dev: true
- /ansi-colors@4.1.3:
+ ansi-colors@4.1.3:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
- dev: true
- /ansi-escapes@4.3.2:
+ ansi-escapes@4.3.2:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
engines: {node: '>=8'}
- dependencies:
- type-fest: 0.21.3
- dev: true
- /ansi-regex@5.0.1:
+ ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
- /ansi-regex@6.2.2:
+ ansi-regex@6.2.2:
resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
engines: {node: '>=12'}
- /ansi-styles@4.3.0:
+ ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
- dependencies:
- color-convert: 2.0.1
- /ansi-styles@5.2.0:
+ ansi-styles@5.2.0:
resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
engines: {node: '>=10'}
- dev: true
- /ansi-styles@6.2.3:
+ ansi-styles@6.2.3:
resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
engines: {node: '>=12'}
- /ansis@3.17.0:
+ ansis@3.17.0:
resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==}
engines: {node: '>=14'}
- dev: false
- /anymatch@3.1.3:
+ anymatch@3.1.3:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'}
- dependencies:
- normalize-path: 3.0.0
- picomatch: 2.3.1
- dev: true
- /app-root-path@3.1.0:
+ app-root-path@3.1.0:
resolution: {integrity: sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==}
engines: {node: '>= 6.0.0'}
- dev: false
- /append-field@1.0.0:
+ append-field@1.0.0:
resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==}
- /aproba@2.1.0:
+ aproba@2.1.0:
resolution: {integrity: sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==}
- dev: false
- /are-we-there-yet@2.0.0:
+ are-we-there-yet@2.0.0:
resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==}
engines: {node: '>=10'}
deprecated: This package is no longer supported.
- dependencies:
- delegates: 1.0.0
- readable-stream: 3.6.2
- dev: false
- /arg@4.1.3:
+ arg@4.1.3:
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
- /argparse@1.0.10:
+ argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
- dependencies:
- sprintf-js: 1.0.3
- dev: true
- /argparse@2.0.1:
+ argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
- /array-flatten@1.1.1:
+ array-flatten@1.1.1:
resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
- /array-timsort@1.0.3:
+ array-timsort@1.0.3:
resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==}
- dev: true
- /array-union@2.1.0:
+ array-union@2.1.0:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
- dev: true
- /asap@2.0.6:
+ asap@2.0.6:
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
- dev: true
- /async@3.2.3:
+ async@3.2.3:
resolution: {integrity: sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==}
- dev: false
- /asynckit@0.4.0:
+ asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
- /available-typed-arrays@1.0.7:
+ available-typed-arrays@1.0.7:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
- dependencies:
- possible-typed-array-names: 1.1.0
- dev: false
- /aws-ssl-profiles@1.1.2:
+ aws-ssl-profiles@1.1.2:
resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==}
engines: {node: '>= 6.0.0'}
- dev: false
- /axios@1.12.2:
+ axios@1.12.2:
resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==}
- dependencies:
- follow-redirects: 1.15.11
- form-data: 4.0.4
- proxy-from-env: 1.1.0
- transitivePeerDependencies:
- - debug
- dev: false
- /babel-jest@29.7.0(@babel/core@7.28.4):
+ babel-jest@29.7.0:
resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
'@babel/core': ^7.8.0
- dependencies:
- '@babel/core': 7.28.4
- '@jest/transform': 29.7.0
- '@types/babel__core': 7.20.5
- babel-plugin-istanbul: 6.1.1
- babel-preset-jest: 29.6.3(@babel/core@7.28.4)
- chalk: 4.1.2
- graceful-fs: 4.2.11
- slash: 3.0.0
- transitivePeerDependencies:
- - supports-color
- dev: true
- /babel-plugin-istanbul@6.1.1:
+ babel-plugin-istanbul@6.1.1:
resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
engines: {node: '>=8'}
- dependencies:
- '@babel/helper-plugin-utils': 7.27.1
- '@istanbuljs/load-nyc-config': 1.1.0
- '@istanbuljs/schema': 0.1.3
- istanbul-lib-instrument: 5.2.1
- test-exclude: 6.0.0
- transitivePeerDependencies:
- - supports-color
- dev: true
- /babel-plugin-jest-hoist@29.6.3:
+ babel-plugin-jest-hoist@29.6.3:
resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@babel/template': 7.27.2
- '@babel/types': 7.28.4
- '@types/babel__core': 7.20.5
- '@types/babel__traverse': 7.28.0
- dev: true
- /babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.4):
+ babel-preset-current-node-syntax@1.2.0:
resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==}
peerDependencies:
'@babel/core': ^7.0.0 || ^8.0.0-0
- dependencies:
- '@babel/core': 7.28.4
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.4)
- '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.4)
- '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.4)
- '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.4)
- '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.4)
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.4)
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.4)
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.4)
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.4)
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.4)
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.4)
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.4)
- '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.4)
- '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.4)
- dev: true
- /babel-preset-jest@29.6.3(@babel/core@7.28.4):
+ babel-preset-jest@29.6.3:
resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
'@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.28.4
- babel-plugin-jest-hoist: 29.6.3
- babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.4)
- dev: true
- /balanced-match@1.0.2:
+ balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- /base64-js@1.5.1:
+ base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- /base64url@3.0.1:
+ base64url@3.0.1:
resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==}
engines: {node: '>=6.0.0'}
- dev: false
- /baseline-browser-mapping@2.8.16:
+ baseline-browser-mapping@2.8.16:
resolution: {integrity: sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==}
hasBin: true
- dev: true
- /bcrypt@5.1.1:
+ bcrypt@5.1.1:
resolution: {integrity: sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==}
engines: {node: '>= 10.0.0'}
- requiresBuild: true
- dependencies:
- '@mapbox/node-pre-gyp': 1.0.11
- node-addon-api: 5.1.0
- transitivePeerDependencies:
- - encoding
- - supports-color
- dev: false
- /bcryptjs@2.4.3:
+ bcryptjs@2.4.3:
resolution: {integrity: sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==}
- dev: false
- /binary-extensions@2.3.0:
+ binary-extensions@2.3.0:
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines: {node: '>=8'}
- dev: true
- /bl@4.1.0:
+ bl@4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
- dependencies:
- buffer: 5.7.1
- inherits: 2.0.4
- readable-stream: 3.6.2
- dev: true
- /body-parser@1.20.3:
+ body-parser@1.20.3:
resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
- dependencies:
- bytes: 3.1.2
- content-type: 1.0.5
- debug: 2.6.9
- depd: 2.0.0
- destroy: 1.2.0
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- on-finished: 2.4.1
- qs: 6.13.0
- raw-body: 2.5.2
- type-is: 1.6.18
- unpipe: 1.0.0
- transitivePeerDependencies:
- - supports-color
- /body-parser@2.2.0:
+ body-parser@2.2.0:
resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
engines: {node: '>=18'}
- dependencies:
- bytes: 3.1.2
- content-type: 1.0.5
- debug: 4.4.3
- http-errors: 2.0.0
- iconv-lite: 0.6.3
- on-finished: 2.4.1
- qs: 6.14.0
- raw-body: 3.0.1
- type-is: 2.0.1
- transitivePeerDependencies:
- - supports-color
- dev: false
- /brace-expansion@1.1.12:
+ brace-expansion@1.1.12:
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
- dependencies:
- balanced-match: 1.0.2
- concat-map: 0.0.1
- /brace-expansion@2.0.2:
+ brace-expansion@2.0.2:
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
- dependencies:
- balanced-match: 1.0.2
- /braces@3.0.3:
+ braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
- dependencies:
- fill-range: 7.1.1
- dev: true
- /browserslist@4.26.3:
+ browserslist@4.26.3:
resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
- dependencies:
- baseline-browser-mapping: 2.8.16
- caniuse-lite: 1.0.30001749
- electron-to-chromium: 1.5.234
- node-releases: 2.0.23
- update-browserslist-db: 1.1.3(browserslist@4.26.3)
- dev: true
- /bs-logger@0.2.6:
+ bs-logger@0.2.6:
resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==}
engines: {node: '>= 6'}
- dependencies:
- fast-json-stable-stringify: 2.1.0
- dev: true
- /bser@2.1.1:
+ bser@2.1.1:
resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
- dependencies:
- node-int64: 0.4.0
- dev: true
- /buffer-equal-constant-time@1.0.1:
+ buffer-equal-constant-time@1.0.1:
resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==}
- dev: false
- /buffer-from@1.1.2:
+ buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
- /buffer@5.7.1:
+ buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
- dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
- dev: true
- /buffer@6.0.3:
+ buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
- dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
- dev: false
- /busboy@1.6.0:
+ busboy@1.6.0:
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
engines: {node: '>=10.16.0'}
- dependencies:
- streamsearch: 1.1.0
- /bytes@3.1.2:
+ bytes@3.1.2:
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
engines: {node: '>= 0.8'}
- /cache-manager@4.1.0:
+ cache-manager@4.1.0:
resolution: {integrity: sha512-ZGM6dLxrP65bfOZmcviWMadUOCICqpLs92+P/S5tj8onz+k+tB7Gr+SAgOUHCQtfm2gYEQDHiKeul4+tYPOJ8A==}
- dependencies:
- async: 3.2.3
- lodash.clonedeep: 4.5.0
- lru-cache: 7.18.3
- dev: false
- /call-bind-apply-helpers@1.0.2:
+ call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
- dependencies:
- es-errors: 1.3.0
- function-bind: 1.1.2
- /call-bind@1.0.8:
+ call-bind@1.0.8:
resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
engines: {node: '>= 0.4'}
- dependencies:
- call-bind-apply-helpers: 1.0.2
- es-define-property: 1.0.1
- get-intrinsic: 1.3.0
- set-function-length: 1.2.2
- /call-bound@1.0.4:
+ call-bound@1.0.4:
resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
engines: {node: '>= 0.4'}
- dependencies:
- call-bind-apply-helpers: 1.0.2
- get-intrinsic: 1.3.0
- /callsites@3.1.0:
+ callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- dev: true
- /camelcase@5.3.1:
+ camelcase@5.3.1:
resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
engines: {node: '>=6'}
- dev: true
- /camelcase@6.3.0:
+ camelcase@6.3.0:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
engines: {node: '>=10'}
- dev: true
- /caniuse-lite@1.0.30001749:
+ caniuse-lite@1.0.30001749:
resolution: {integrity: sha512-0rw2fJOmLfnzCRbkm8EyHL8SvI2Apu5UbnQuTsJ0ClgrH8hcwFooJ1s5R0EP8o8aVrFu8++ae29Kt9/gZAZp/Q==}
- dev: true
- /chalk@4.1.2:
+ chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
- dependencies:
- ansi-styles: 4.3.0
- supports-color: 7.2.0
- /chalk@5.6.2:
+ chalk@5.6.2:
resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
- dev: true
- /char-regex@1.0.2:
+ char-regex@1.0.2:
resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
engines: {node: '>=10'}
- dev: true
- /chardet@0.7.0:
+ chardet@0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
- dev: true
- /chokidar@3.6.0:
+ chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
- dependencies:
- anymatch: 3.1.3
- braces: 3.0.3
- glob-parent: 5.1.2
- is-binary-path: 2.1.0
- is-glob: 4.0.3
- normalize-path: 3.0.0
- readdirp: 3.6.0
- optionalDependencies:
- fsevents: 2.3.3
- dev: true
- /chownr@2.0.0:
+ chownr@2.0.0:
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
engines: {node: '>=10'}
- dev: false
- /chrome-trace-event@1.0.4:
+ chrome-trace-event@1.0.4:
resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
engines: {node: '>=6.0'}
- dev: true
- /ci-info@3.9.0:
+ ci-info@3.9.0:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
- dev: true
- /cjs-module-lexer@1.4.3:
+ cjs-module-lexer@1.4.3:
resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==}
- dev: true
- /class-transformer@0.5.1:
+ class-transformer@0.5.1:
resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==}
- /class-validator@0.14.2:
+ class-validator@0.14.2:
resolution: {integrity: sha512-3kMVRF2io8N8pY1IFIXlho9r8IPUUIfHe2hYVtiebvAzU2XeQFXTv+XI4WX+TnXmtwXMDcjngcpkiPM0O9PvLw==}
- dependencies:
- '@types/validator': 13.15.3
- libphonenumber-js: 1.12.24
- validator: 13.15.15
- /cli-cursor@3.1.0:
+ cli-cursor@3.1.0:
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
engines: {node: '>=8'}
- dependencies:
- restore-cursor: 3.1.0
- dev: true
- /cli-spinners@2.9.2:
+ cli-spinners@2.9.2:
resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'}
- dev: true
- /cli-table3@0.6.5:
+ cli-table3@0.6.5:
resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==}
engines: {node: 10.* || >= 12.*}
- dependencies:
- string-width: 4.2.3
- optionalDependencies:
- '@colors/colors': 1.5.0
- dev: true
- /cli-width@3.0.0:
+ cli-width@3.0.0:
resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
engines: {node: '>= 10'}
- dev: true
- /cli-width@4.1.0:
+ cli-width@4.1.0:
resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
engines: {node: '>= 12'}
- dev: true
- /cliui@8.0.1:
+ cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
- dependencies:
- string-width: 4.2.3
- strip-ansi: 6.0.1
- wrap-ansi: 7.0.0
- /clone@1.0.4:
+ clone@1.0.4:
resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
engines: {node: '>=0.8'}
- dev: true
- /co@4.6.0:
+ co@4.6.0:
resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
- dev: true
- /collect-v8-coverage@1.0.2:
+ collect-v8-coverage@1.0.2:
resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==}
- dev: true
- /color-convert@2.0.1:
+ color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
- dependencies:
- color-name: 1.1.4
- /color-name@1.1.4:
+ color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
- /color-support@1.1.3:
+ color-support@1.1.3:
resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
hasBin: true
- dev: false
- /combined-stream@1.0.8:
+ combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
- dependencies:
- delayed-stream: 1.0.0
- /commander@2.20.3:
+ commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
- dev: true
- /commander@4.1.1:
+ commander@4.1.1:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines: {node: '>= 6'}
- dev: true
- /comment-json@4.2.5:
+ comment-json@4.2.5:
resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==}
engines: {node: '>= 6'}
- dependencies:
- array-timsort: 1.0.3
- core-util-is: 1.0.3
- esprima: 4.0.1
- has-own-prop: 2.0.0
- repeat-string: 1.6.1
- dev: true
- /component-emitter@1.3.1:
+ component-emitter@1.3.1:
resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==}
- dev: true
- /concat-map@0.0.1:
+ concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
- /concat-stream@2.0.0:
+ concat-stream@2.0.0:
resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==}
engines: {'0': node >= 6.0}
- dependencies:
- buffer-from: 1.1.2
- inherits: 2.0.4
- readable-stream: 3.6.2
- typedarray: 0.0.6
- /consola@2.15.3:
+ consola@2.15.3:
resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==}
- /console-control-strings@1.1.0:
+ console-control-strings@1.1.0:
resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
- dev: false
- /content-disposition@0.5.4:
+ content-disposition@0.5.4:
resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
engines: {node: '>= 0.6'}
- dependencies:
- safe-buffer: 5.2.1
- /content-disposition@1.0.0:
+ content-disposition@1.0.0:
resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==}
engines: {node: '>= 0.6'}
- dependencies:
- safe-buffer: 5.2.1
- dev: false
- /content-type@1.0.5:
+ content-type@1.0.5:
resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
engines: {node: '>= 0.6'}
- /convert-source-map@2.0.0:
+ convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
- dev: true
- /cookie-signature@1.0.6:
+ cookie-signature@1.0.6:
resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
- /cookie-signature@1.2.2:
+ cookie-signature@1.2.2:
resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
engines: {node: '>=6.6.0'}
- dev: false
- /cookie@0.7.1:
+ cookie@0.7.1:
resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==}
engines: {node: '>= 0.6'}
- /cookie@0.7.2:
+ cookie@0.7.2:
resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
engines: {node: '>= 0.6'}
- dev: false
- /cookiejar@2.1.4:
+ cookiejar@2.1.4:
resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==}
- dev: true
- /core-util-is@1.0.3:
+ core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
- dev: true
- /cors@2.8.5:
+ cors@2.8.5:
resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
engines: {node: '>= 0.10'}
- dependencies:
- object-assign: 4.1.1
- vary: 1.1.2
- /cosmiconfig@8.3.6(typescript@5.7.2):
+ cosmiconfig@8.3.6:
resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
engines: {node: '>=14'}
peerDependencies:
@@ -2580,59 +1409,31 @@ packages:
peerDependenciesMeta:
typescript:
optional: true
- dependencies:
- import-fresh: 3.3.1
- js-yaml: 4.1.0
- parse-json: 5.2.0
- path-type: 4.0.0
- typescript: 5.7.2
- dev: true
- /create-jest@29.7.0(@types/node@20.19.20)(ts-node@10.9.2):
+ create-jest@29.7.0:
resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
- dependencies:
- '@jest/types': 29.6.3
- chalk: 4.1.2
- exit: 0.1.2
- graceful-fs: 4.2.11
- jest-config: 29.7.0(@types/node@20.19.20)(ts-node@10.9.2)
- jest-util: 29.7.0
- prompts: 2.4.2
- transitivePeerDependencies:
- - '@types/node'
- - babel-plugin-macros
- - supports-color
- - ts-node
- dev: true
- /create-require@1.1.1:
+ create-require@1.1.1:
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
- /cross-spawn@7.0.6:
+ cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
- dependencies:
- path-key: 3.1.1
- shebang-command: 2.0.0
- which: 2.0.2
- /dayjs@1.11.18:
+ dayjs@1.11.18:
resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==}
- dev: false
- /debug@2.6.9:
+ debug@2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
- dependencies:
- ms: 2.0.0
- /debug@4.4.3:
+ debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
peerDependencies:
@@ -2640,10 +1441,8 @@ packages:
peerDependenciesMeta:
supports-color:
optional: true
- dependencies:
- ms: 2.1.3
- /dedent@1.7.0:
+ dedent@1.7.0:
resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==}
peerDependencies:
babel-plugin-macros: ^3.1.0
@@ -2651,221 +1450,164 @@ packages:
babel-plugin-macros:
optional: true
- /deep-is@0.1.4:
+ deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
- dev: true
- /deepmerge@4.3.1:
+ deepmerge@4.3.1:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
- dev: true
- /defaults@1.0.4:
+ defaults@1.0.4:
resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
- dependencies:
- clone: 1.0.4
- dev: true
- /define-data-property@1.1.4:
+ define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
- dependencies:
- es-define-property: 1.0.1
- es-errors: 1.3.0
- gopd: 1.2.0
- /delayed-stream@1.0.0:
+ delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
- /delegates@1.0.0:
+ delegates@1.0.0:
resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
- dev: false
- /denque@2.1.0:
+ denque@2.1.0:
resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
engines: {node: '>=0.10'}
- dev: false
- /depd@2.0.0:
+ depd@2.0.0:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
- /destroy@1.2.0:
+ destroy@1.2.0:
resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
- /detect-libc@2.1.2:
+ detect-libc@2.1.2:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
- dev: false
- /detect-newline@3.1.0:
+ detect-newline@3.1.0:
resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
engines: {node: '>=8'}
- dev: true
- /dezalgo@1.0.4:
+ dezalgo@1.0.4:
resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==}
- dependencies:
- asap: 2.0.6
- wrappy: 1.0.2
- dev: true
- /diff-sequences@29.6.3:
+ diff-sequences@29.6.3:
resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dev: true
- /diff@4.0.2:
+ diff@4.0.2:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
engines: {node: '>=0.3.1'}
- /dir-glob@3.0.1:
+ dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
- dependencies:
- path-type: 4.0.0
- dev: true
- /doctrine@3.0.0:
+ doctrine@3.0.0:
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
engines: {node: '>=6.0.0'}
- dependencies:
- esutils: 2.0.3
- dev: true
- /dotenv-expand@10.0.0:
+ dotenv-expand@10.0.0:
resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==}
engines: {node: '>=12'}
- dev: false
- /dotenv@16.4.5:
+ dotenv@16.4.5:
resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==}
engines: {node: '>=12'}
- dev: false
- /dotenv@16.6.1:
+ dotenv@16.6.1:
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
engines: {node: '>=12'}
- dev: false
- /dunder-proto@1.0.1:
+ dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
- dependencies:
- call-bind-apply-helpers: 1.0.2
- es-errors: 1.3.0
- gopd: 1.2.0
- /eastasianwidth@0.2.0:
+ eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
- /ecdsa-sig-formatter@1.0.11:
+ ecdsa-sig-formatter@1.0.11:
resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
- dependencies:
- safe-buffer: 5.2.1
- dev: false
- /ee-first@1.1.1:
+ ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
- /electron-to-chromium@1.5.234:
+ electron-to-chromium@1.5.234:
resolution: {integrity: sha512-RXfEp2x+VRYn8jbKfQlRImzoJU01kyDvVPBmG39eU2iuRVhuS6vQNocB8J0/8GrIMLnPzgz4eW6WiRnJkTuNWg==}
- dev: true
- /emittery@0.13.1:
+ emittery@0.13.1:
resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
engines: {node: '>=12'}
- dev: true
- /emoji-regex@8.0.0:
+ emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
- /emoji-regex@9.2.2:
+ emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
- /encodeurl@1.0.2:
+ encodeurl@1.0.2:
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
engines: {node: '>= 0.8'}
- /encodeurl@2.0.0:
+ encodeurl@2.0.0:
resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
engines: {node: '>= 0.8'}
- /enhanced-resolve@5.18.3:
+ enhanced-resolve@5.18.3:
resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
engines: {node: '>=10.13.0'}
- dependencies:
- graceful-fs: 4.2.11
- tapable: 2.3.0
- dev: true
- /error-ex@1.3.4:
+ error-ex@1.3.4:
resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
- dependencies:
- is-arrayish: 0.2.1
- dev: true
- /es-define-property@1.0.1:
+ es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines: {node: '>= 0.4'}
- /es-errors@1.3.0:
+ es-errors@1.3.0:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
- /es-module-lexer@1.7.0:
+ es-module-lexer@1.7.0:
resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
- dev: true
- /es-object-atoms@1.1.1:
+ es-object-atoms@1.1.1:
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
engines: {node: '>= 0.4'}
- dependencies:
- es-errors: 1.3.0
- /es-set-tostringtag@2.1.0:
+ es-set-tostringtag@2.1.0:
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
engines: {node: '>= 0.4'}
- dependencies:
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
- has-tostringtag: 1.0.2
- hasown: 2.0.2
- /escalade@3.2.0:
+ escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
- /escape-html@1.0.3:
+ escape-html@1.0.3:
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
- /escape-string-regexp@1.0.5:
+ escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
- dev: true
- /escape-string-regexp@2.0.0:
+ escape-string-regexp@2.0.0:
resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
engines: {node: '>=8'}
- dev: true
- /escape-string-regexp@4.0.0:
+ escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
- dev: true
- /eslint-config-prettier@9.1.2(eslint@8.57.1):
+ eslint-config-prettier@9.1.2:
resolution: {integrity: sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0'
- dependencies:
- eslint: 8.57.1
- dev: true
- /eslint-plugin-prettier@5.5.4(eslint-config-prettier@9.1.2)(eslint@8.57.1)(prettier@3.6.2):
+ eslint-plugin-prettier@5.5.4:
resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
@@ -2878,388 +1620,157 @@ packages:
optional: true
eslint-config-prettier:
optional: true
- dependencies:
- eslint: 8.57.1
- eslint-config-prettier: 9.1.2(eslint@8.57.1)
- prettier: 3.6.2
- prettier-linter-helpers: 1.0.0
- synckit: 0.11.11
- dev: true
- /eslint-scope@5.1.1:
+ eslint-scope@5.1.1:
resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
engines: {node: '>=8.0.0'}
- dependencies:
- esrecurse: 4.3.0
- estraverse: 4.3.0
- dev: true
- /eslint-scope@7.2.2:
+ eslint-scope@7.2.2:
resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dependencies:
- esrecurse: 4.3.0
- estraverse: 5.3.0
- dev: true
- /eslint-visitor-keys@3.4.3:
+ eslint-visitor-keys@3.4.3:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dev: true
- /eslint@8.57.1:
+ eslint@8.57.1:
resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
hasBin: true
- dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1)
- '@eslint-community/regexpp': 4.12.1
- '@eslint/eslintrc': 2.1.4
- '@eslint/js': 8.57.1
- '@humanwhocodes/config-array': 0.13.0
- '@humanwhocodes/module-importer': 1.0.1
- '@nodelib/fs.walk': 1.2.8
- '@ungap/structured-clone': 1.3.0
- ajv: 6.12.6
- chalk: 4.1.2
- cross-spawn: 7.0.6
- debug: 4.4.3
- doctrine: 3.0.0
- escape-string-regexp: 4.0.0
- eslint-scope: 7.2.2
- eslint-visitor-keys: 3.4.3
- espree: 9.6.1
- esquery: 1.6.0
- esutils: 2.0.3
- fast-deep-equal: 3.1.3
- file-entry-cache: 6.0.1
- find-up: 5.0.0
- glob-parent: 6.0.2
- globals: 13.24.0
- graphemer: 1.4.0
- ignore: 5.3.2
- imurmurhash: 0.1.4
- is-glob: 4.0.3
- is-path-inside: 3.0.3
- js-yaml: 4.1.0
- json-stable-stringify-without-jsonify: 1.0.1
- levn: 0.4.1
- lodash.merge: 4.6.2
- minimatch: 3.1.2
- natural-compare: 1.4.0
- optionator: 0.9.4
- strip-ansi: 6.0.1
- text-table: 0.2.0
- transitivePeerDependencies:
- - supports-color
- dev: true
- /espree@9.6.1:
+ espree@9.6.1:
resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dependencies:
- acorn: 8.15.0
- acorn-jsx: 5.3.2(acorn@8.15.0)
- eslint-visitor-keys: 3.4.3
- dev: true
- /esprima@4.0.1:
+ esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
hasBin: true
- dev: true
- /esquery@1.6.0:
+ esquery@1.6.0:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'}
- dependencies:
- estraverse: 5.3.0
- dev: true
- /esrecurse@4.3.0:
+ esrecurse@4.3.0:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines: {node: '>=4.0'}
- dependencies:
- estraverse: 5.3.0
- dev: true
- /estraverse@4.3.0:
+ estraverse@4.3.0:
resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
engines: {node: '>=4.0'}
- dev: true
- /estraverse@5.3.0:
+ estraverse@5.3.0:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
- dev: true
- /esutils@2.0.3:
+ esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
- dev: true
- /etag@1.8.1:
+ etag@1.8.1:
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
engines: {node: '>= 0.6'}
- /events@3.3.0:
+ events@3.3.0:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
- dev: true
- /execa@5.1.1:
+ execa@5.1.1:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
- dependencies:
- cross-spawn: 7.0.6
- get-stream: 6.0.1
- human-signals: 2.1.0
- is-stream: 2.0.1
- merge-stream: 2.0.0
- npm-run-path: 4.0.1
- onetime: 5.1.2
- signal-exit: 3.0.7
- strip-final-newline: 2.0.0
- dev: true
- /exit@0.1.2:
+ exit@0.1.2:
resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
engines: {node: '>= 0.8.0'}
- dev: true
- /expect@29.7.0:
+ expect@29.7.0:
resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/expect-utils': 29.7.0
- jest-get-type: 29.6.3
- jest-matcher-utils: 29.7.0
- jest-message-util: 29.7.0
- jest-util: 29.7.0
- dev: true
- /express@4.21.2:
+ express@4.21.2:
resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==}
engines: {node: '>= 0.10.0'}
- dependencies:
- accepts: 1.3.8
- array-flatten: 1.1.1
- body-parser: 1.20.3
- content-disposition: 0.5.4
- content-type: 1.0.5
- cookie: 0.7.1
- cookie-signature: 1.0.6
- debug: 2.6.9
- depd: 2.0.0
- encodeurl: 2.0.0
- escape-html: 1.0.3
- etag: 1.8.1
- finalhandler: 1.3.1
- fresh: 0.5.2
- http-errors: 2.0.0
- merge-descriptors: 1.0.3
- methods: 1.1.2
- on-finished: 2.4.1
- parseurl: 1.3.3
- path-to-regexp: 0.1.12
- proxy-addr: 2.0.7
- qs: 6.13.0
- range-parser: 1.2.1
- safe-buffer: 5.2.1
- send: 0.19.0
- serve-static: 1.16.2
- setprototypeof: 1.2.0
- statuses: 2.0.1
- type-is: 1.6.18
- utils-merge: 1.0.1
- vary: 1.1.2
- transitivePeerDependencies:
- - supports-color
- /express@5.1.0:
+ express@5.1.0:
resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==}
engines: {node: '>= 18'}
- dependencies:
- accepts: 2.0.0
- body-parser: 2.2.0
- content-disposition: 1.0.0
- content-type: 1.0.5
- cookie: 0.7.2
- cookie-signature: 1.2.2
- debug: 4.4.3
- encodeurl: 2.0.0
- escape-html: 1.0.3
- etag: 1.8.1
- finalhandler: 2.1.0
- fresh: 2.0.0
- http-errors: 2.0.0
- merge-descriptors: 2.0.0
- mime-types: 3.0.1
- on-finished: 2.4.1
- once: 1.4.0
- parseurl: 1.3.3
- proxy-addr: 2.0.7
- qs: 6.14.0
- range-parser: 1.2.1
- router: 2.2.0
- send: 1.2.0
- serve-static: 2.2.0
- statuses: 2.0.2
- type-is: 2.0.1
- vary: 1.1.2
- transitivePeerDependencies:
- - supports-color
- dev: false
- /external-editor@3.1.0:
+ external-editor@3.1.0:
resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
engines: {node: '>=4'}
- dependencies:
- chardet: 0.7.0
- iconv-lite: 0.4.24
- tmp: 0.0.33
- dev: true
- /fast-deep-equal@3.1.3:
+ fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
- dev: true
- /fast-diff@1.3.0:
+ fast-diff@1.3.0:
resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
- dev: true
- /fast-glob@3.3.3:
+ fast-glob@3.3.3:
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
engines: {node: '>=8.6.0'}
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- '@nodelib/fs.walk': 1.2.8
- glob-parent: 5.1.2
- merge2: 1.4.1
- micromatch: 4.0.8
- dev: true
- /fast-json-stable-stringify@2.1.0:
+ fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
- dev: true
- /fast-levenshtein@2.0.6:
+ fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
- dev: true
- /fast-safe-stringify@2.1.1:
+ fast-safe-stringify@2.1.1:
resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
- /fast-uri@3.1.0:
+ fast-uri@3.1.0:
resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
- dev: true
- /fastq@1.19.1:
+ fastq@1.19.1:
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
- dependencies:
- reusify: 1.1.0
- dev: true
- /fb-watchman@2.0.2:
+ fb-watchman@2.0.2:
resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
- dependencies:
- bser: 2.1.1
- dev: true
- /fflate@0.8.2:
+ fflate@0.8.2:
resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
- /figures@3.2.0:
+ figures@3.2.0:
resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
engines: {node: '>=8'}
- dependencies:
- escape-string-regexp: 1.0.5
- dev: true
- /file-entry-cache@6.0.1:
+ file-entry-cache@6.0.1:
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
engines: {node: ^10.12.0 || >=12.0.0}
- dependencies:
- flat-cache: 3.2.0
- dev: true
- /file-type@20.4.1:
+ file-type@20.4.1:
resolution: {integrity: sha512-hw9gNZXUfZ02Jo0uafWLaFVPter5/k2rfcrjFJJHX/77xtSDOfJuEFb6oKlFV86FLP1SuyHMW1PSk0U9M5tKkQ==}
engines: {node: '>=18'}
- dependencies:
- '@tokenizer/inflate': 0.2.7
- strtok3: 10.3.4
- token-types: 6.1.1
- uint8array-extras: 1.5.0
- transitivePeerDependencies:
- - supports-color
- /fill-range@7.1.1:
+ fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
- dependencies:
- to-regex-range: 5.0.1
- dev: true
- /finalhandler@1.3.1:
+ finalhandler@1.3.1:
resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==}
engines: {node: '>= 0.8'}
- dependencies:
- debug: 2.6.9
- encodeurl: 2.0.0
- escape-html: 1.0.3
- on-finished: 2.4.1
- parseurl: 1.3.3
- statuses: 2.0.1
- unpipe: 1.0.0
- transitivePeerDependencies:
- - supports-color
- /finalhandler@2.1.0:
+ finalhandler@2.1.0:
resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==}
engines: {node: '>= 0.8'}
- dependencies:
- debug: 4.4.3
- encodeurl: 2.0.0
- escape-html: 1.0.3
- on-finished: 2.4.1
- parseurl: 1.3.3
- statuses: 2.0.2
- transitivePeerDependencies:
- - supports-color
- dev: false
- /find-up@4.1.0:
+ find-up@4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
engines: {node: '>=8'}
- dependencies:
- locate-path: 5.0.0
- path-exists: 4.0.0
- dev: true
- /find-up@5.0.0:
+ find-up@5.0.0:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
- dependencies:
- locate-path: 6.0.0
- path-exists: 4.0.0
- dev: true
- /flat-cache@3.2.0:
+ flat-cache@3.2.0:
resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
engines: {node: ^10.12.0 || >=12.0.0}
- dependencies:
- flatted: 3.3.3
- keyv: 4.5.4
- rimraf: 3.0.2
- dev: true
- /flatted@3.3.3:
+ flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
- dev: true
- /follow-redirects@1.15.11:
+ follow-redirects@1.15.11:
resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
engines: {node: '>=4.0'}
peerDependencies:
@@ -3267,632 +1778,340 @@ packages:
peerDependenciesMeta:
debug:
optional: true
- dev: false
- /for-each@0.3.5:
+ for-each@0.3.5:
resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
engines: {node: '>= 0.4'}
- dependencies:
- is-callable: 1.2.7
- dev: false
- /foreground-child@3.3.1:
+ foreground-child@3.3.1:
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
engines: {node: '>=14'}
- dependencies:
- cross-spawn: 7.0.6
- signal-exit: 4.1.0
- /fork-ts-checker-webpack-plugin@9.0.2(typescript@5.7.2)(webpack@5.97.1):
+ fork-ts-checker-webpack-plugin@9.0.2:
resolution: {integrity: sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==}
engines: {node: '>=12.13.0', yarn: '>=1.0.0'}
peerDependencies:
typescript: '>3.6.0'
webpack: ^5.11.0
- dependencies:
- '@babel/code-frame': 7.27.1
- chalk: 4.1.2
- chokidar: 3.6.0
- cosmiconfig: 8.3.6(typescript@5.7.2)
- deepmerge: 4.3.1
- fs-extra: 10.1.0
- memfs: 3.5.3
- minimatch: 3.1.2
- node-abort-controller: 3.1.1
- schema-utils: 3.3.0
- semver: 7.7.3
- tapable: 2.3.0
- typescript: 5.7.2
- webpack: 5.97.1
- dev: true
- /form-data@4.0.4:
+ form-data@4.0.4:
resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==}
engines: {node: '>= 6'}
- dependencies:
- asynckit: 0.4.0
- combined-stream: 1.0.8
- es-set-tostringtag: 2.1.0
- hasown: 2.0.2
- mime-types: 2.1.35
- /formidable@2.1.5:
+ formidable@2.1.5:
resolution: {integrity: sha512-Oz5Hwvwak/DCaXVVUtPn4oLMLLy1CdclLKO1LFgU7XzDpVMUU5UjlSLpGMocyQNNk8F6IJW9M/YdooSn2MRI+Q==}
- dependencies:
- '@paralleldrive/cuid2': 2.2.2
- dezalgo: 1.0.4
- once: 1.4.0
- qs: 6.14.0
- dev: true
- /forwarded@0.2.0:
+ forwarded@0.2.0:
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
engines: {node: '>= 0.6'}
- /fresh@0.5.2:
+ fresh@0.5.2:
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
engines: {node: '>= 0.6'}
- /fresh@2.0.0:
+ fresh@2.0.0:
resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
engines: {node: '>= 0.8'}
- dev: false
- /fs-extra@10.1.0:
+ fs-extra@10.1.0:
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
engines: {node: '>=12'}
- dependencies:
- graceful-fs: 4.2.11
- jsonfile: 6.2.0
- universalify: 2.0.1
- dev: true
- /fs-minipass@2.1.0:
+ fs-minipass@2.1.0:
resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
engines: {node: '>= 8'}
- dependencies:
- minipass: 3.3.6
- dev: false
- /fs-monkey@1.1.0:
+ fs-monkey@1.1.0:
resolution: {integrity: sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==}
- dev: true
- /fs.realpath@1.0.0:
+ fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
- /fsevents@2.3.3:
+ fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
- /function-bind@1.1.2:
+ function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
- /gauge@3.0.2:
+ gauge@3.0.2:
resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==}
engines: {node: '>=10'}
deprecated: This package is no longer supported.
- dependencies:
- aproba: 2.1.0
- color-support: 1.1.3
- console-control-strings: 1.1.0
- has-unicode: 2.0.1
- object-assign: 4.1.1
- signal-exit: 3.0.7
- string-width: 4.2.3
- strip-ansi: 6.0.1
- wide-align: 1.1.5
- dev: false
- /generate-function@2.3.1:
+ generate-function@2.3.1:
resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==}
- dependencies:
- is-property: 1.0.2
- dev: false
- /gensync@1.0.0-beta.2:
+ gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
- dev: true
- /get-caller-file@2.0.5:
+ get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
- /get-intrinsic@1.3.0:
+ get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
- dependencies:
- call-bind-apply-helpers: 1.0.2
- es-define-property: 1.0.1
- es-errors: 1.3.0
- es-object-atoms: 1.1.1
- function-bind: 1.1.2
- get-proto: 1.0.1
- gopd: 1.2.0
- has-symbols: 1.1.0
- hasown: 2.0.2
- math-intrinsics: 1.1.0
- /get-package-type@0.1.0:
+ get-package-type@0.1.0:
resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
engines: {node: '>=8.0.0'}
- dev: true
- /get-proto@1.0.1:
+ get-proto@1.0.1:
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
- dependencies:
- dunder-proto: 1.0.1
- es-object-atoms: 1.1.1
- /get-stream@6.0.1:
+ get-stream@6.0.1:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
- dev: true
- /glob-parent@5.1.2:
+ glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
- dependencies:
- is-glob: 4.0.3
- dev: true
- /glob-parent@6.0.2:
+ glob-parent@6.0.2:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
- dependencies:
- is-glob: 4.0.3
- dev: true
- /glob-to-regexp@0.4.1:
+ glob-to-regexp@0.4.1:
resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
- dev: true
- /glob@10.4.5:
+ glob@10.4.5:
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
hasBin: true
- dependencies:
- foreground-child: 3.3.1
- jackspeak: 3.4.3
- minimatch: 9.0.5
- minipass: 7.1.2
- package-json-from-dist: 1.0.1
- path-scurry: 1.11.1
- /glob@7.2.3:
+ glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
- dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 3.1.2
- once: 1.4.0
- path-is-absolute: 1.0.1
- /globals@13.24.0:
+ globals@13.24.0:
resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
engines: {node: '>=8'}
- dependencies:
- type-fest: 0.20.2
- dev: true
- /globby@11.1.0:
+ globby@11.1.0:
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
engines: {node: '>=10'}
- dependencies:
- array-union: 2.1.0
- dir-glob: 3.0.1
- fast-glob: 3.3.3
- ignore: 5.3.2
- merge2: 1.4.1
- slash: 3.0.0
- dev: true
- /gopd@1.2.0:
+ gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
- /graceful-fs@4.2.11:
+ graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
- dev: true
- /graphemer@1.4.0:
+ graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
- dev: true
- /handlebars@4.7.8:
+ handlebars@4.7.8:
resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==}
engines: {node: '>=0.4.7'}
hasBin: true
- dependencies:
- minimist: 1.2.8
- neo-async: 2.6.2
- source-map: 0.6.1
- wordwrap: 1.0.0
- optionalDependencies:
- uglify-js: 3.19.3
- dev: true
- /has-flag@4.0.0:
+ has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
- /has-own-prop@2.0.0:
+ has-own-prop@2.0.0:
resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==}
engines: {node: '>=8'}
- dev: true
- /has-property-descriptors@1.0.2:
+ has-property-descriptors@1.0.2:
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
- dependencies:
- es-define-property: 1.0.1
- /has-symbols@1.1.0:
+ has-symbols@1.1.0:
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
engines: {node: '>= 0.4'}
- /has-tostringtag@1.0.2:
+ has-tostringtag@1.0.2:
resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
engines: {node: '>= 0.4'}
- dependencies:
- has-symbols: 1.1.0
- /has-unicode@2.0.1:
+ has-unicode@2.0.1:
resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
- dev: false
- /hasown@2.0.2:
+ hasown@2.0.2:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
- dependencies:
- function-bind: 1.1.2
- /html-escaper@2.0.2:
+ html-escaper@2.0.2:
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
- dev: true
- /http-errors@2.0.0:
+ http-errors@2.0.0:
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
engines: {node: '>= 0.8'}
- dependencies:
- depd: 2.0.0
- inherits: 2.0.4
- setprototypeof: 1.2.0
- statuses: 2.0.1
- toidentifier: 1.0.1
- /https-proxy-agent@5.0.1:
+ https-proxy-agent@5.0.1:
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
engines: {node: '>= 6'}
- dependencies:
- agent-base: 6.0.2
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
- dev: false
- /human-signals@2.1.0:
+ human-signals@2.1.0:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
- dev: true
- /iconv-lite@0.4.24:
+ iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
- dependencies:
- safer-buffer: 2.1.2
- /iconv-lite@0.6.3:
+ iconv-lite@0.6.3:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
- dependencies:
- safer-buffer: 2.1.2
- dev: false
- /iconv-lite@0.7.0:
+ iconv-lite@0.7.0:
resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==}
engines: {node: '>=0.10.0'}
- dependencies:
- safer-buffer: 2.1.2
- dev: false
- /ieee754@1.2.1:
+ ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
- /ignore@5.3.2:
+ ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
- dev: true
- /import-fresh@3.3.1:
+ import-fresh@3.3.1:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
- dependencies:
- parent-module: 1.0.1
- resolve-from: 4.0.0
- dev: true
- /import-local@3.2.0:
+ import-local@3.2.0:
resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
engines: {node: '>=8'}
hasBin: true
- dependencies:
- pkg-dir: 4.2.0
- resolve-cwd: 3.0.0
- dev: true
- /imurmurhash@0.1.4:
+ imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
- dev: true
- /inflight@1.0.6:
+ inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
- dependencies:
- once: 1.4.0
- wrappy: 1.0.2
- /inherits@2.0.4:
+ inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
- /inquirer@8.2.6:
+ inquirer@8.2.6:
resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==}
engines: {node: '>=12.0.0'}
- dependencies:
- ansi-escapes: 4.3.2
- chalk: 4.1.2
- cli-cursor: 3.1.0
- cli-width: 3.0.0
- external-editor: 3.1.0
- figures: 3.2.0
- lodash: 4.17.21
- mute-stream: 0.0.8
- ora: 5.4.1
- run-async: 2.4.1
- rxjs: 7.8.2
- string-width: 4.2.3
- strip-ansi: 6.0.1
- through: 2.3.8
- wrap-ansi: 6.2.0
- dev: true
- /inquirer@9.2.15:
+ inquirer@9.2.15:
resolution: {integrity: sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==}
engines: {node: '>=18'}
- dependencies:
- '@ljharb/through': 2.3.14
- ansi-escapes: 4.3.2
- chalk: 5.6.2
- cli-cursor: 3.1.0
- cli-width: 4.1.0
- external-editor: 3.1.0
- figures: 3.2.0
- lodash: 4.17.21
- mute-stream: 1.0.0
- ora: 5.4.1
- run-async: 3.0.0
- rxjs: 7.8.2
- string-width: 4.2.3
- strip-ansi: 6.0.1
- wrap-ansi: 6.2.0
- dev: true
- /install@0.13.0:
+ install@0.13.0:
resolution: {integrity: sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==}
engines: {node: '>= 0.10'}
- dev: false
- /ipaddr.js@1.9.1:
+ ipaddr.js@1.9.1:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
- /is-arrayish@0.2.1:
+ is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
- dev: true
- /is-binary-path@2.1.0:
+ is-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
- dependencies:
- binary-extensions: 2.3.0
- dev: true
- /is-callable@1.2.7:
+ is-callable@1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
- dev: false
- /is-core-module@2.16.1:
+ is-core-module@2.16.1:
resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
engines: {node: '>= 0.4'}
- dependencies:
- hasown: 2.0.2
- dev: true
- /is-extglob@2.1.1:
+ is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
- dev: true
- /is-fullwidth-code-point@3.0.0:
+ is-fullwidth-code-point@3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
- /is-generator-fn@2.1.0:
+ is-generator-fn@2.1.0:
resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
engines: {node: '>=6'}
- dev: true
- /is-glob@4.0.3:
+ is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
- dependencies:
- is-extglob: 2.1.1
- dev: true
- /is-interactive@1.0.0:
+ is-interactive@1.0.0:
resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
engines: {node: '>=8'}
- dev: true
- /is-number@7.0.0:
+ is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
- dev: true
- /is-path-inside@3.0.3:
+ is-path-inside@3.0.3:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'}
- dev: true
- /is-promise@4.0.0:
+ is-promise@4.0.0:
resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
- dev: false
- /is-property@1.0.2:
+ is-property@1.0.2:
resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==}
- dev: false
- /is-stream@2.0.1:
+ is-stream@2.0.1:
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
engines: {node: '>=8'}
- dev: true
- /is-typed-array@1.1.15:
+ is-typed-array@1.1.15:
resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
engines: {node: '>= 0.4'}
- dependencies:
- which-typed-array: 1.1.19
- dev: false
- /is-unicode-supported@0.1.0:
+ is-unicode-supported@0.1.0:
resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
engines: {node: '>=10'}
- dev: true
- /isarray@2.0.5:
+ isarray@2.0.5:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
- dev: false
- /isexe@2.0.0:
+ isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
- /istanbul-lib-coverage@3.2.2:
+ istanbul-lib-coverage@3.2.2:
resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
engines: {node: '>=8'}
- dev: true
- /istanbul-lib-instrument@5.2.1:
+ istanbul-lib-instrument@5.2.1:
resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
engines: {node: '>=8'}
- dependencies:
- '@babel/core': 7.28.4
- '@babel/parser': 7.28.4
- '@istanbuljs/schema': 0.1.3
- istanbul-lib-coverage: 3.2.2
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
- dev: true
- /istanbul-lib-instrument@6.0.3:
+ istanbul-lib-instrument@6.0.3:
resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==}
engines: {node: '>=10'}
- dependencies:
- '@babel/core': 7.28.4
- '@babel/parser': 7.28.4
- '@istanbuljs/schema': 0.1.3
- istanbul-lib-coverage: 3.2.2
- semver: 7.7.3
- transitivePeerDependencies:
- - supports-color
- dev: true
- /istanbul-lib-report@3.0.1:
+ istanbul-lib-report@3.0.1:
resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
engines: {node: '>=10'}
- dependencies:
- istanbul-lib-coverage: 3.2.2
- make-dir: 4.0.0
- supports-color: 7.2.0
- dev: true
- /istanbul-lib-source-maps@4.0.1:
+ istanbul-lib-source-maps@4.0.1:
resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
engines: {node: '>=10'}
- dependencies:
- debug: 4.4.3
- istanbul-lib-coverage: 3.2.2
- source-map: 0.6.1
- transitivePeerDependencies:
- - supports-color
- dev: true
- /istanbul-reports@3.2.0:
+ istanbul-reports@3.2.0:
resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==}
engines: {node: '>=8'}
- dependencies:
- html-escaper: 2.0.2
- istanbul-lib-report: 3.0.1
- dev: true
- /iterare@1.2.1:
+ iterare@1.2.1:
resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==}
engines: {node: '>=6'}
- /jackspeak@3.4.3:
+ jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
- dependencies:
- '@isaacs/cliui': 8.0.2
- optionalDependencies:
- '@pkgjs/parseargs': 0.11.0
- /jest-changed-files@29.7.0:
+ jest-changed-files@29.7.0:
resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- execa: 5.1.1
- jest-util: 29.7.0
- p-limit: 3.1.0
- dev: true
- /jest-circus@29.7.0:
+ jest-circus@29.7.0:
resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/environment': 29.7.0
- '@jest/expect': 29.7.0
- '@jest/test-result': 29.7.0
- '@jest/types': 29.6.3
- '@types/node': 20.19.20
- chalk: 4.1.2
- co: 4.6.0
- dedent: 1.7.0
- is-generator-fn: 2.1.0
- jest-each: 29.7.0
- jest-matcher-utils: 29.7.0
- jest-message-util: 29.7.0
- jest-runtime: 29.7.0
- jest-snapshot: 29.7.0
- jest-util: 29.7.0
- p-limit: 3.1.0
- pretty-format: 29.7.0
- pure-rand: 6.1.0
- slash: 3.0.0
- stack-utils: 2.0.6
- transitivePeerDependencies:
- - babel-plugin-macros
- - supports-color
- dev: true
- /jest-cli@29.7.0(@types/node@20.19.20)(ts-node@10.9.2):
+ jest-cli@29.7.0:
resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
@@ -3901,26 +2120,8 @@ packages:
peerDependenciesMeta:
node-notifier:
optional: true
- dependencies:
- '@jest/core': 29.7.0(ts-node@10.9.2)
- '@jest/test-result': 29.7.0
- '@jest/types': 29.6.3
- chalk: 4.1.2
- create-jest: 29.7.0(@types/node@20.19.20)(ts-node@10.9.2)
- exit: 0.1.2
- import-local: 3.2.0
- jest-config: 29.7.0(@types/node@20.19.20)(ts-node@10.9.2)
- jest-util: 29.7.0
- jest-validate: 29.7.0
- yargs: 17.7.2
- transitivePeerDependencies:
- - '@types/node'
- - babel-plugin-macros
- - supports-color
- - ts-node
- dev: true
- /jest-config@29.7.0(@types/node@20.19.20)(ts-node@10.9.2):
+ jest-config@29.7.0:
resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
@@ -3931,143 +2132,48 @@ packages:
optional: true
ts-node:
optional: true
- dependencies:
- '@babel/core': 7.28.4
- '@jest/test-sequencer': 29.7.0
- '@jest/types': 29.6.3
- '@types/node': 20.19.20
- babel-jest: 29.7.0(@babel/core@7.28.4)
- chalk: 4.1.2
- ci-info: 3.9.0
- deepmerge: 4.3.1
- glob: 7.2.3
- graceful-fs: 4.2.11
- jest-circus: 29.7.0
- jest-environment-node: 29.7.0
- jest-get-type: 29.6.3
- jest-regex-util: 29.6.3
- jest-resolve: 29.7.0
- jest-runner: 29.7.0
- jest-util: 29.7.0
- jest-validate: 29.7.0
- micromatch: 4.0.8
- parse-json: 5.2.0
- pretty-format: 29.7.0
- slash: 3.0.0
- strip-json-comments: 3.1.1
- ts-node: 10.9.2(@types/node@20.19.20)(typescript@5.9.3)
- transitivePeerDependencies:
- - babel-plugin-macros
- - supports-color
- dev: true
- /jest-diff@29.7.0:
+ jest-diff@29.7.0:
resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- chalk: 4.1.2
- diff-sequences: 29.6.3
- jest-get-type: 29.6.3
- pretty-format: 29.7.0
- dev: true
- /jest-docblock@29.7.0:
+ jest-docblock@29.7.0:
resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- detect-newline: 3.1.0
- dev: true
- /jest-each@29.7.0:
+ jest-each@29.7.0:
resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/types': 29.6.3
- chalk: 4.1.2
- jest-get-type: 29.6.3
- jest-util: 29.7.0
- pretty-format: 29.7.0
- dev: true
- /jest-environment-node@29.7.0:
+ jest-environment-node@29.7.0:
resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/environment': 29.7.0
- '@jest/fake-timers': 29.7.0
- '@jest/types': 29.6.3
- '@types/node': 20.19.20
- jest-mock: 29.7.0
- jest-util: 29.7.0
- dev: true
- /jest-get-type@29.6.3:
+ jest-get-type@29.6.3:
resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dev: true
- /jest-haste-map@29.7.0:
+ jest-haste-map@29.7.0:
resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/types': 29.6.3
- '@types/graceful-fs': 4.1.9
- '@types/node': 20.19.20
- anymatch: 3.1.3
- fb-watchman: 2.0.2
- graceful-fs: 4.2.11
- jest-regex-util: 29.6.3
- jest-util: 29.7.0
- jest-worker: 29.7.0
- micromatch: 4.0.8
- walker: 1.0.8
- optionalDependencies:
- fsevents: 2.3.3
- dev: true
- /jest-leak-detector@29.7.0:
+ jest-leak-detector@29.7.0:
resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- jest-get-type: 29.6.3
- pretty-format: 29.7.0
- dev: true
- /jest-matcher-utils@29.7.0:
+ jest-matcher-utils@29.7.0:
resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- chalk: 4.1.2
- jest-diff: 29.7.0
- jest-get-type: 29.6.3
- pretty-format: 29.7.0
- dev: true
- /jest-message-util@29.7.0:
+ jest-message-util@29.7.0:
resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@babel/code-frame': 7.27.1
- '@jest/types': 29.6.3
- '@types/stack-utils': 2.0.3
- chalk: 4.1.2
- graceful-fs: 4.2.11
- micromatch: 4.0.8
- pretty-format: 29.7.0
- slash: 3.0.0
- stack-utils: 2.0.6
- dev: true
- /jest-mock@29.7.0:
+ jest-mock@29.7.0:
resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/types': 29.6.3
- '@types/node': 20.19.20
- jest-util: 29.7.0
- dev: true
- /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
+ jest-pnp-resolver@1.2.3:
resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
engines: {node: '>=6'}
peerDependencies:
@@ -4075,185 +2181,52 @@ packages:
peerDependenciesMeta:
jest-resolve:
optional: true
- dependencies:
- jest-resolve: 29.7.0
- dev: true
- /jest-regex-util@29.6.3:
+ jest-regex-util@29.6.3:
resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dev: true
- /jest-resolve-dependencies@29.7.0:
+ jest-resolve-dependencies@29.7.0:
resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- jest-regex-util: 29.6.3
- jest-snapshot: 29.7.0
- transitivePeerDependencies:
- - supports-color
- dev: true
- /jest-resolve@29.7.0:
+ jest-resolve@29.7.0:
resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- chalk: 4.1.2
- graceful-fs: 4.2.11
- jest-haste-map: 29.7.0
- jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0)
- jest-util: 29.7.0
- jest-validate: 29.7.0
- resolve: 1.22.10
- resolve.exports: 2.0.3
- slash: 3.0.0
- dev: true
- /jest-runner@29.7.0:
+ jest-runner@29.7.0:
resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/console': 29.7.0
- '@jest/environment': 29.7.0
- '@jest/test-result': 29.7.0
- '@jest/transform': 29.7.0
- '@jest/types': 29.6.3
- '@types/node': 20.19.20
- chalk: 4.1.2
- emittery: 0.13.1
- graceful-fs: 4.2.11
- jest-docblock: 29.7.0
- jest-environment-node: 29.7.0
- jest-haste-map: 29.7.0
- jest-leak-detector: 29.7.0
- jest-message-util: 29.7.0
- jest-resolve: 29.7.0
- jest-runtime: 29.7.0
- jest-util: 29.7.0
- jest-watcher: 29.7.0
- jest-worker: 29.7.0
- p-limit: 3.1.0
- source-map-support: 0.5.13
- transitivePeerDependencies:
- - supports-color
- dev: true
- /jest-runtime@29.7.0:
+ jest-runtime@29.7.0:
resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/environment': 29.7.0
- '@jest/fake-timers': 29.7.0
- '@jest/globals': 29.7.0
- '@jest/source-map': 29.6.3
- '@jest/test-result': 29.7.0
- '@jest/transform': 29.7.0
- '@jest/types': 29.6.3
- '@types/node': 20.19.20
- chalk: 4.1.2
- cjs-module-lexer: 1.4.3
- collect-v8-coverage: 1.0.2
- glob: 7.2.3
- graceful-fs: 4.2.11
- jest-haste-map: 29.7.0
- jest-message-util: 29.7.0
- jest-mock: 29.7.0
- jest-regex-util: 29.6.3
- jest-resolve: 29.7.0
- jest-snapshot: 29.7.0
- jest-util: 29.7.0
- slash: 3.0.0
- strip-bom: 4.0.0
- transitivePeerDependencies:
- - supports-color
- dev: true
- /jest-snapshot@29.7.0:
+ jest-snapshot@29.7.0:
resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@babel/core': 7.28.4
- '@babel/generator': 7.28.3
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4)
- '@babel/types': 7.28.4
- '@jest/expect-utils': 29.7.0
- '@jest/transform': 29.7.0
- '@jest/types': 29.6.3
- babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.4)
- chalk: 4.1.2
- expect: 29.7.0
- graceful-fs: 4.2.11
- jest-diff: 29.7.0
- jest-get-type: 29.6.3
- jest-matcher-utils: 29.7.0
- jest-message-util: 29.7.0
- jest-util: 29.7.0
- natural-compare: 1.4.0
- pretty-format: 29.7.0
- semver: 7.7.3
- transitivePeerDependencies:
- - supports-color
- dev: true
- /jest-util@29.7.0:
+ jest-util@29.7.0:
resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/types': 29.6.3
- '@types/node': 20.19.20
- chalk: 4.1.2
- ci-info: 3.9.0
- graceful-fs: 4.2.11
- picomatch: 2.3.1
- dev: true
- /jest-validate@29.7.0:
+ jest-validate@29.7.0:
resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/types': 29.6.3
- camelcase: 6.3.0
- chalk: 4.1.2
- jest-get-type: 29.6.3
- leven: 3.1.0
- pretty-format: 29.7.0
- dev: true
- /jest-watcher@29.7.0:
+ jest-watcher@29.7.0:
resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/test-result': 29.7.0
- '@jest/types': 29.6.3
- '@types/node': 20.19.20
- ansi-escapes: 4.3.2
- chalk: 4.1.2
- emittery: 0.13.1
- jest-util: 29.7.0
- string-length: 4.0.2
- dev: true
- /jest-worker@27.5.1:
+ jest-worker@27.5.1:
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
engines: {node: '>= 10.13.0'}
- dependencies:
- '@types/node': 20.19.20
- merge-stream: 2.0.0
- supports-color: 8.1.1
- dev: true
- /jest-worker@29.7.0:
+ jest-worker@29.7.0:
resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@types/node': 20.19.20
- jest-util: 29.7.0
- merge-stream: 2.0.0
- supports-color: 8.1.1
- dev: true
- /jest@29.7.0(@types/node@20.19.20)(ts-node@10.9.2):
+ jest@29.7.0:
resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
@@ -4262,494 +2235,323 @@ packages:
peerDependenciesMeta:
node-notifier:
optional: true
- dependencies:
- '@jest/core': 29.7.0(ts-node@10.9.2)
- '@jest/types': 29.6.3
- import-local: 3.2.0
- jest-cli: 29.7.0(@types/node@20.19.20)(ts-node@10.9.2)
- transitivePeerDependencies:
- - '@types/node'
- - babel-plugin-macros
- - supports-color
- - ts-node
- dev: true
- /js-tokens@4.0.0:
+ js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
- dev: true
- /js-yaml@3.14.1:
+ js-yaml@3.14.1:
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
hasBin: true
- dependencies:
- argparse: 1.0.10
- esprima: 4.0.1
- dev: true
- /js-yaml@4.1.0:
+ js-yaml@4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
- dependencies:
- argparse: 2.0.1
- /jsesc@3.1.0:
+ jsesc@3.1.0:
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
engines: {node: '>=6'}
hasBin: true
- dev: true
- /json-buffer@3.0.1:
+ json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
- dev: true
- /json-parse-even-better-errors@2.3.1:
+ json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
- dev: true
- /json-schema-traverse@0.4.1:
+ json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
- dev: true
- /json-schema-traverse@1.0.0:
+ json-schema-traverse@1.0.0:
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
- dev: true
- /json-stable-stringify-without-jsonify@1.0.1:
+ json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
- dev: true
- /json5@2.2.3:
+ json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
hasBin: true
- dev: true
- /jsonc-parser@3.2.1:
+ jsonc-parser@3.2.1:
resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==}
- dev: true
- /jsonc-parser@3.3.1:
+ jsonc-parser@3.3.1:
resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==}
- dev: true
- /jsonfile@6.2.0:
+ jsonfile@6.2.0:
resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
- dependencies:
- universalify: 2.0.1
- optionalDependencies:
- graceful-fs: 4.2.11
- dev: true
- /jsonwebtoken@9.0.2:
+ jsonwebtoken@9.0.2:
resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==}
engines: {node: '>=12', npm: '>=6'}
- dependencies:
- jws: 3.2.2
- lodash.includes: 4.3.0
- lodash.isboolean: 3.0.3
- lodash.isinteger: 4.0.4
- lodash.isnumber: 3.0.3
- lodash.isplainobject: 4.0.6
- lodash.isstring: 4.0.1
- lodash.once: 4.1.1
- ms: 2.1.3
- semver: 7.7.3
- dev: false
- /jwa@1.4.2:
+ jwa@1.4.2:
resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==}
- dependencies:
- buffer-equal-constant-time: 1.0.1
- ecdsa-sig-formatter: 1.0.11
- safe-buffer: 5.2.1
- dev: false
- /jws@3.2.2:
+ jws@3.2.2:
resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==}
- dependencies:
- jwa: 1.4.2
- safe-buffer: 5.2.1
- dev: false
- /keyv@4.5.4:
+ keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
- dependencies:
- json-buffer: 3.0.1
- dev: true
- /kleur@3.0.3:
+ kleur@3.0.3:
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
engines: {node: '>=6'}
- dev: true
- /leven@3.1.0:
+ leven@3.1.0:
resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
engines: {node: '>=6'}
- dev: true
- /levn@0.4.1:
+ levn@0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
- dependencies:
- prelude-ls: 1.2.1
- type-check: 0.4.0
- dev: true
- /libphonenumber-js@1.12.24:
+ libphonenumber-js@1.12.24:
resolution: {integrity: sha512-l5IlyL9AONj4voSd7q9xkuQOL4u8Ty44puTic7J88CmdXkxfGsRfoVLXHCxppwehgpb/Chdb80FFehHqjN3ItQ==}
- /lines-and-columns@1.2.4:
+ lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
- dev: true
- /loader-runner@4.3.1:
+ loader-runner@4.3.1:
resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==}
engines: {node: '>=6.11.5'}
- dev: true
- /locate-path@5.0.0:
+ locate-path@5.0.0:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
- dependencies:
- p-locate: 4.1.0
- dev: true
- /locate-path@6.0.0:
+ locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
- dependencies:
- p-locate: 5.0.0
- dev: true
- /lodash.clonedeep@4.5.0:
+ lodash.clonedeep@4.5.0:
resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
- dev: false
- /lodash.includes@4.3.0:
+ lodash.includes@4.3.0:
resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==}
- dev: false
- /lodash.isboolean@3.0.3:
+ lodash.isboolean@3.0.3:
resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==}
- dev: false
- /lodash.isinteger@4.0.4:
+ lodash.isinteger@4.0.4:
resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==}
- dev: false
- /lodash.isnumber@3.0.3:
+ lodash.isnumber@3.0.3:
resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==}
- dev: false
- /lodash.isplainobject@4.0.6:
+ lodash.isplainobject@4.0.6:
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
- dev: false
- /lodash.isstring@4.0.1:
+ lodash.isstring@4.0.1:
resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==}
- dev: false
- /lodash.memoize@4.1.2:
+ lodash.memoize@4.1.2:
resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
- dev: true
- /lodash.merge@4.6.2:
+ lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
- dev: true
- /lodash.once@4.1.1:
+ lodash.once@4.1.1:
resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
- dev: false
- /lodash@4.17.21:
+ lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
- /log-symbols@4.1.0:
+ log-symbols@4.1.0:
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
engines: {node: '>=10'}
- dependencies:
- chalk: 4.1.2
- is-unicode-supported: 0.1.0
- dev: true
- /long@5.3.2:
+ long@5.3.2:
resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==}
- dev: false
- /lru-cache@10.4.3:
+ lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
- /lru-cache@5.1.1:
+ lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
- dependencies:
- yallist: 3.1.1
- dev: true
- /lru-cache@7.18.3:
+ lru-cache@7.18.3:
resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
engines: {node: '>=12'}
- dev: false
- /lru.min@1.1.2:
+ lru.min@1.1.2:
resolution: {integrity: sha512-Nv9KddBcQSlQopmBHXSsZVY5xsdlZkdH/Iey0BlcBYggMd4two7cZnKOK9vmy3nY0O5RGH99z1PCeTpPqszUYg==}
engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'}
- dev: false
- /magic-string@0.30.8:
+ magic-string@0.30.8:
resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==}
engines: {node: '>=12'}
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
- dev: true
- /make-dir@3.1.0:
+ make-dir@3.1.0:
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
engines: {node: '>=8'}
- dependencies:
- semver: 6.3.1
- dev: false
- /make-dir@4.0.0:
+ make-dir@4.0.0:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
engines: {node: '>=10'}
- dependencies:
- semver: 7.7.3
- dev: true
- /make-error@1.3.6:
+ make-error@1.3.6:
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
- /makeerror@1.0.12:
+ makeerror@1.0.12:
resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
- dependencies:
- tmpl: 1.0.5
- dev: true
- /math-intrinsics@1.1.0:
+ math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
- /media-typer@0.3.0:
+ media-typer@0.3.0:
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
engines: {node: '>= 0.6'}
- /media-typer@1.1.0:
+ media-typer@1.1.0:
resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
engines: {node: '>= 0.8'}
- dev: false
- /memfs@3.5.3:
+ memfs@3.5.3:
resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==}
engines: {node: '>= 4.0.0'}
- dependencies:
- fs-monkey: 1.1.0
- dev: true
- /merge-descriptors@1.0.3:
+ merge-descriptors@1.0.3:
resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
- /merge-descriptors@2.0.0:
+ merge-descriptors@2.0.0:
resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
engines: {node: '>=18'}
- dev: false
- /merge-stream@2.0.0:
+ merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
- dev: true
- /merge2@1.4.1:
+ merge2@1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
- dev: true
- /methods@1.1.2:
+ methods@1.1.2:
resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
engines: {node: '>= 0.6'}
- /micromatch@4.0.8:
+ micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
- dependencies:
- braces: 3.0.3
- picomatch: 2.3.1
- dev: true
- /mime-db@1.52.0:
+ mime-db@1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
- /mime-db@1.54.0:
+ mime-db@1.54.0:
resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
engines: {node: '>= 0.6'}
- dev: false
- /mime-types@2.1.35:
+ mime-types@2.1.35:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
- dependencies:
- mime-db: 1.52.0
- /mime-types@3.0.1:
+ mime-types@3.0.1:
resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==}
engines: {node: '>= 0.6'}
- dependencies:
- mime-db: 1.54.0
- dev: false
- /mime@1.6.0:
+ mime@1.6.0:
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
engines: {node: '>=4'}
hasBin: true
- /mime@2.6.0:
+ mime@2.6.0:
resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==}
engines: {node: '>=4.0.0'}
hasBin: true
- dev: true
- /mimic-fn@2.1.0:
+ mimic-fn@2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
- dev: true
- /minimatch@3.1.2:
+ minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
- dependencies:
- brace-expansion: 1.1.12
- /minimatch@9.0.3:
+ minimatch@9.0.3:
resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
engines: {node: '>=16 || 14 >=14.17'}
- dependencies:
- brace-expansion: 2.0.2
- dev: true
- /minimatch@9.0.5:
+ minimatch@9.0.5:
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
engines: {node: '>=16 || 14 >=14.17'}
- dependencies:
- brace-expansion: 2.0.2
- /minimist@1.2.8:
+ minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
- /minipass@3.3.6:
+ minipass@3.3.6:
resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
engines: {node: '>=8'}
- dependencies:
- yallist: 4.0.0
- dev: false
- /minipass@5.0.0:
+ minipass@5.0.0:
resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
engines: {node: '>=8'}
- dev: false
- /minipass@7.1.2:
+ minipass@7.1.2:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
- /minizlib@2.1.2:
+ minizlib@2.1.2:
resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
engines: {node: '>= 8'}
- dependencies:
- minipass: 3.3.6
- yallist: 4.0.0
- dev: false
- /mkdirp@0.5.6:
+ mkdirp@0.5.6:
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
hasBin: true
- dependencies:
- minimist: 1.2.8
- /mkdirp@1.0.4:
+ mkdirp@1.0.4:
resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
engines: {node: '>=10'}
hasBin: true
- dev: false
- /ms@2.0.0:
+ ms@2.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
- /ms@2.1.3:
+ ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
- /multer@2.0.2:
+ multer@2.0.2:
resolution: {integrity: sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==}
engines: {node: '>= 10.16.0'}
- dependencies:
- append-field: 1.0.0
- busboy: 1.6.0
- concat-stream: 2.0.0
- mkdirp: 0.5.6
- object-assign: 4.1.1
- type-is: 1.6.18
- xtend: 4.0.2
- /mute-stream@0.0.8:
+ mute-stream@0.0.8:
resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
- dev: true
- /mute-stream@1.0.0:
+ mute-stream@1.0.0:
resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
- dev: true
- /mysql2@3.15.2:
+ mysql2@3.15.2:
resolution: {integrity: sha512-kFm5+jbwR5mC+lo+3Cy46eHiykWSpUtTLOH3GE+AR7GeLq8PgfJcvpMiyVWk9/O53DjQsqm6a3VOOfq7gYWFRg==}
engines: {node: '>= 8.0'}
- dependencies:
- aws-ssl-profiles: 1.1.2
- denque: 2.1.0
- generate-function: 2.3.1
- iconv-lite: 0.7.0
- long: 5.3.2
- lru.min: 1.1.2
- named-placeholders: 1.1.3
- seq-queue: 0.0.5
- sqlstring: 2.3.3
- dev: false
- /named-placeholders@1.1.3:
+ named-placeholders@1.1.3:
resolution: {integrity: sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==}
engines: {node: '>=12.0.0'}
- dependencies:
- lru-cache: 7.18.3
- dev: false
- /natural-compare@1.4.0:
+ natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
- dev: true
- /negotiator@0.6.3:
+ negotiator@0.6.3:
resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
engines: {node: '>= 0.6'}
- /negotiator@1.0.0:
+ negotiator@1.0.0:
resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
engines: {node: '>= 0.6'}
- dev: false
- /neo-async@2.6.2:
+ neo-async@2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
- dev: true
- /node-abort-controller@3.1.1:
+ node-abort-controller@3.1.1:
resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
- dev: true
- /node-addon-api@5.1.0:
+ node-addon-api@5.1.0:
resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==}
- dev: false
- /node-emoji@1.11.0:
+ node-emoji@1.11.0:
resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==}
- dependencies:
- lodash: 4.17.21
- dev: true
- /node-fetch@2.7.0:
+ node-fetch@2.7.0:
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
engines: {node: 4.x || >=6.0.0}
peerDependencies:
@@ -4757,950 +2559,567 @@ packages:
peerDependenciesMeta:
encoding:
optional: true
- dependencies:
- whatwg-url: 5.0.0
- /node-int64@0.4.0:
+ node-int64@0.4.0:
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
- dev: true
- /node-releases@2.0.23:
+ node-releases@2.0.23:
resolution: {integrity: sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==}
- dev: true
- /nopt@5.0.0:
+ nopt@5.0.0:
resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
engines: {node: '>=6'}
hasBin: true
- dependencies:
- abbrev: 1.1.1
- dev: false
- /normalize-path@3.0.0:
+ normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
- dev: true
- /npm-run-path@4.0.1:
+ npm-run-path@4.0.1:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
- dependencies:
- path-key: 3.1.1
- dev: true
- /npmlog@5.0.1:
+ npmlog@5.0.1:
resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==}
deprecated: This package is no longer supported.
- dependencies:
- are-we-there-yet: 2.0.0
- console-control-strings: 1.1.0
- gauge: 3.0.2
- set-blocking: 2.0.0
- dev: false
- /oauth@0.10.2:
+ oauth@0.10.2:
resolution: {integrity: sha512-JtFnB+8nxDEXgNyniwz573xxbKSOu3R8D40xQKqcjwJ2CDkYqUDI53o6IuzDJBx60Z8VKCm271+t8iFjakrl8Q==}
- dev: false
- /object-assign@4.1.1:
+ object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
- /object-inspect@1.13.4:
+ object-inspect@1.13.4:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
- /on-finished@2.4.1:
+ on-finished@2.4.1:
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
engines: {node: '>= 0.8'}
- dependencies:
- ee-first: 1.1.1
- /once@1.4.0:
+ once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
- dependencies:
- wrappy: 1.0.2
- /onetime@5.1.2:
+ onetime@5.1.2:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
- dependencies:
- mimic-fn: 2.1.0
- dev: true
- /optionator@0.9.4:
+ optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
- dependencies:
- deep-is: 0.1.4
- fast-levenshtein: 2.0.6
- levn: 0.4.1
- prelude-ls: 1.2.1
- type-check: 0.4.0
- word-wrap: 1.2.5
- dev: true
- /ora@5.4.1:
+ ora@5.4.1:
resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
engines: {node: '>=10'}
- dependencies:
- bl: 4.1.0
- chalk: 4.1.2
- cli-cursor: 3.1.0
- cli-spinners: 2.9.2
- is-interactive: 1.0.0
- is-unicode-supported: 0.1.0
- log-symbols: 4.1.0
- strip-ansi: 6.0.1
- wcwidth: 1.0.1
- dev: true
- /os-tmpdir@1.0.2:
+ os-tmpdir@1.0.2:
resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
engines: {node: '>=0.10.0'}
- dev: true
- /p-limit@2.3.0:
+ p-limit@2.3.0:
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
engines: {node: '>=6'}
- dependencies:
- p-try: 2.2.0
- dev: true
- /p-limit@3.1.0:
+ p-limit@3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
- dependencies:
- yocto-queue: 0.1.0
- dev: true
- /p-locate@4.1.0:
+ p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
- dependencies:
- p-limit: 2.3.0
- dev: true
- /p-locate@5.0.0:
+ p-locate@5.0.0:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
- dependencies:
- p-limit: 3.1.0
- dev: true
- /p-try@2.2.0:
+ p-try@2.2.0:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
- dev: true
- /package-json-from-dist@1.0.1:
+ package-json-from-dist@1.0.1:
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
- /parent-module@1.0.1:
+ parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
- dependencies:
- callsites: 3.1.0
- dev: true
- /parse-json@5.2.0:
+ parse-json@5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
- dependencies:
- '@babel/code-frame': 7.27.1
- error-ex: 1.3.4
- json-parse-even-better-errors: 2.3.1
- lines-and-columns: 1.2.4
- dev: true
- /parseurl@1.3.3:
+ parseurl@1.3.3:
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
engines: {node: '>= 0.8'}
- /passport-github2@0.1.12:
+ passport-github2@0.1.12:
resolution: {integrity: sha512-3nPUCc7ttF/3HSP/k9sAXjz3SkGv5Nki84I05kSQPo01Jqq1NzJACgMblCK0fGcv9pKCG/KXU3AJRDGLqHLoIw==}
engines: {node: '>= 0.8.0'}
- dependencies:
- passport-oauth2: 1.8.0
- dev: false
- /passport-jwt@4.0.1:
+ passport-jwt@4.0.1:
resolution: {integrity: sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==}
- dependencies:
- jsonwebtoken: 9.0.2
- passport-strategy: 1.0.0
- dev: false
- /passport-local@1.0.0:
+ passport-local@1.0.0:
resolution: {integrity: sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==}
engines: {node: '>= 0.4.0'}
- dependencies:
- passport-strategy: 1.0.0
- dev: false
- /passport-oauth2@1.8.0:
+ passport-oauth2@1.8.0:
resolution: {integrity: sha512-cjsQbOrXIDE4P8nNb3FQRCCmJJ/utnFKEz2NX209f7KOHPoX18gF7gBzBbLLsj2/je4KrgiwLLGjf0lm9rtTBA==}
engines: {node: '>= 0.4.0'}
- dependencies:
- base64url: 3.0.1
- oauth: 0.10.2
- passport-strategy: 1.0.0
- uid2: 0.0.4
- utils-merge: 1.0.1
- dev: false
- /passport-strategy@1.0.0:
+ passport-strategy@1.0.0:
resolution: {integrity: sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==}
engines: {node: '>= 0.4.0'}
- dev: false
- /passport@0.6.0:
+ passport@0.6.0:
resolution: {integrity: sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==}
engines: {node: '>= 0.4.0'}
- dependencies:
- passport-strategy: 1.0.0
- pause: 0.0.1
- utils-merge: 1.0.1
- dev: false
- /path-exists@4.0.0:
+ path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
- dev: true
- /path-is-absolute@1.0.1:
+ path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
- /path-key@3.1.1:
+ path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
- /path-parse@1.0.7:
+ path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
- dev: true
- /path-scurry@1.11.1:
+ path-scurry@1.11.1:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
- dependencies:
- lru-cache: 10.4.3
- minipass: 7.1.2
- /path-to-regexp@0.1.12:
+ path-to-regexp@0.1.12:
resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==}
- /path-to-regexp@3.3.0:
+ path-to-regexp@3.3.0:
resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==}
- /path-to-regexp@8.2.0:
+ path-to-regexp@8.2.0:
resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==}
engines: {node: '>=16'}
- dev: false
- /path-to-regexp@8.3.0:
+ path-to-regexp@8.3.0:
resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==}
- dev: false
- /path-type@4.0.0:
+ path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
- dev: true
- /pause@0.0.1:
+ pause@0.0.1:
resolution: {integrity: sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==}
- dev: false
- /picocolors@1.1.1:
+ picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
- dev: true
- /picomatch@2.3.1:
+ picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
- dev: true
- /picomatch@4.0.1:
+ picomatch@4.0.1:
resolution: {integrity: sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==}
engines: {node: '>=12'}
- dev: true
- /pirates@4.0.7:
+ pirates@4.0.7:
resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
engines: {node: '>= 6'}
- dev: true
- /pkg-dir@4.2.0:
+ pkg-dir@4.2.0:
resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
engines: {node: '>=8'}
- dependencies:
- find-up: 4.1.0
- dev: true
- /pluralize@8.0.0:
+ pluralize@8.0.0:
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
engines: {node: '>=4'}
- dev: true
- /possible-typed-array-names@1.1.0:
+ possible-typed-array-names@1.1.0:
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines: {node: '>= 0.4'}
- dev: false
- /prelude-ls@1.2.1:
+ prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
- dev: true
- /prettier-linter-helpers@1.0.0:
+ prettier-linter-helpers@1.0.0:
resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
engines: {node: '>=6.0.0'}
- dependencies:
- fast-diff: 1.3.0
- dev: true
- /prettier@3.6.2:
+ prettier@3.6.2:
resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==}
engines: {node: '>=14'}
hasBin: true
- dev: true
- /pretty-format@29.7.0:
+ pretty-format@29.7.0:
resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/schemas': 29.6.3
- ansi-styles: 5.2.0
- react-is: 18.3.1
- dev: true
- /prompts@2.4.2:
+ prompts@2.4.2:
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
engines: {node: '>= 6'}
- dependencies:
- kleur: 3.0.3
- sisteransi: 1.0.5
- dev: true
- /proxy-addr@2.0.7:
+ proxy-addr@2.0.7:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
engines: {node: '>= 0.10'}
- dependencies:
- forwarded: 0.2.0
- ipaddr.js: 1.9.1
- /proxy-from-env@1.1.0:
+ proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
- dev: false
- /punycode@2.3.1:
+ punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
- dev: true
- /pure-rand@6.1.0:
+ pure-rand@6.1.0:
resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==}
- dev: true
- /qs@6.13.0:
+ qs@6.13.0:
resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
engines: {node: '>=0.6'}
- dependencies:
- side-channel: 1.1.0
- /qs@6.14.0:
+ qs@6.14.0:
resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
engines: {node: '>=0.6'}
- dependencies:
- side-channel: 1.1.0
- /queue-microtask@1.2.3:
+ queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
- dev: true
- /randombytes@2.1.0:
+ randombytes@2.1.0:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
- dependencies:
- safe-buffer: 5.2.1
- dev: true
- /range-parser@1.2.1:
+ range-parser@1.2.1:
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
engines: {node: '>= 0.6'}
- /raw-body@2.5.2:
+ raw-body@2.5.2:
resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
engines: {node: '>= 0.8'}
- dependencies:
- bytes: 3.1.2
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- unpipe: 1.0.0
- /raw-body@3.0.1:
+ raw-body@3.0.1:
resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==}
engines: {node: '>= 0.10'}
- dependencies:
- bytes: 3.1.2
- http-errors: 2.0.0
- iconv-lite: 0.7.0
- unpipe: 1.0.0
- dev: false
- /react-is@18.3.1:
+ react-is@18.3.1:
resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
- dev: true
- /readable-stream@3.6.2:
+ readable-stream@3.6.2:
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
engines: {node: '>= 6'}
- dependencies:
- inherits: 2.0.4
- string_decoder: 1.3.0
- util-deprecate: 1.0.2
- /readdirp@3.6.0:
+ readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
- dependencies:
- picomatch: 2.3.1
- dev: true
- /reflect-metadata@0.1.14:
+ reflect-metadata@0.1.14:
resolution: {integrity: sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==}
- /repeat-string@1.6.1:
+ repeat-string@1.6.1:
resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
engines: {node: '>=0.10'}
- dev: true
- /require-directory@2.1.1:
+ require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
- /require-from-string@2.0.2:
+ require-from-string@2.0.2:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
- dev: true
- /resolve-cwd@3.0.0:
+ resolve-cwd@3.0.0:
resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
engines: {node: '>=8'}
- dependencies:
- resolve-from: 5.0.0
- dev: true
- /resolve-from@4.0.0:
+ resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
- dev: true
- /resolve-from@5.0.0:
+ resolve-from@5.0.0:
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
engines: {node: '>=8'}
- dev: true
- /resolve.exports@2.0.3:
+ resolve.exports@2.0.3:
resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==}
engines: {node: '>=10'}
- dev: true
- /resolve@1.22.10:
+ resolve@1.22.10:
resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
engines: {node: '>= 0.4'}
hasBin: true
- dependencies:
- is-core-module: 2.16.1
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
- dev: true
- /restore-cursor@3.1.0:
+ restore-cursor@3.1.0:
resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
engines: {node: '>=8'}
- dependencies:
- onetime: 5.1.2
- signal-exit: 3.0.7
- dev: true
- /reusify@1.1.0:
+ reusify@1.1.0:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
- dev: true
- /rimraf@3.0.2:
+ rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
- dependencies:
- glob: 7.2.3
- /router@2.2.0:
+ router@2.2.0:
resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
engines: {node: '>= 18'}
- dependencies:
- debug: 4.4.3
- depd: 2.0.0
- is-promise: 4.0.0
- parseurl: 1.3.3
- path-to-regexp: 8.3.0
- transitivePeerDependencies:
- - supports-color
- dev: false
- /run-async@2.4.1:
+ run-async@2.4.1:
resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
engines: {node: '>=0.12.0'}
- dev: true
- /run-async@3.0.0:
+ run-async@3.0.0:
resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==}
engines: {node: '>=0.12.0'}
- dev: true
- /run-parallel@1.2.0:
+ run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
- dependencies:
- queue-microtask: 1.2.3
- dev: true
- /rxjs@7.8.1:
+ rxjs@7.8.1:
resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
- dependencies:
- tslib: 2.8.1
- dev: true
- /rxjs@7.8.2:
+ rxjs@7.8.2:
resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
- dependencies:
- tslib: 2.8.1
- /safe-buffer@5.2.1:
+ safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
- /safer-buffer@2.1.2:
+ safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
- /schema-utils@3.3.0:
+ schema-utils@3.3.0:
resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
engines: {node: '>= 10.13.0'}
- dependencies:
- '@types/json-schema': 7.0.15
- ajv: 6.12.6
- ajv-keywords: 3.5.2(ajv@6.12.6)
- dev: true
- /schema-utils@4.3.3:
+ schema-utils@4.3.3:
resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==}
engines: {node: '>= 10.13.0'}
- dependencies:
- '@types/json-schema': 7.0.15
- ajv: 8.17.1
- ajv-formats: 2.1.1(ajv@8.17.1)
- ajv-keywords: 5.1.0(ajv@8.17.1)
- dev: true
- /semver@6.3.1:
+ semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
- /semver@7.7.3:
+ semver@7.7.3:
resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
engines: {node: '>=10'}
hasBin: true
- /send@0.19.0:
+ send@0.19.0:
resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
engines: {node: '>= 0.8.0'}
- dependencies:
- debug: 2.6.9
- depd: 2.0.0
- destroy: 1.2.0
- encodeurl: 1.0.2
- escape-html: 1.0.3
- etag: 1.8.1
- fresh: 0.5.2
- http-errors: 2.0.0
- mime: 1.6.0
- ms: 2.1.3
- on-finished: 2.4.1
- range-parser: 1.2.1
- statuses: 2.0.1
- transitivePeerDependencies:
- - supports-color
- /send@1.2.0:
+ send@1.2.0:
resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
engines: {node: '>= 18'}
- dependencies:
- debug: 4.4.3
- encodeurl: 2.0.0
- escape-html: 1.0.3
- etag: 1.8.1
- fresh: 2.0.0
- http-errors: 2.0.0
- mime-types: 3.0.1
- ms: 2.1.3
- on-finished: 2.4.1
- range-parser: 1.2.1
- statuses: 2.0.2
- transitivePeerDependencies:
- - supports-color
- dev: false
- /seq-queue@0.0.5:
+ seq-queue@0.0.5:
resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==}
- dev: false
- /serialize-javascript@6.0.2:
+ serialize-javascript@6.0.2:
resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
- dependencies:
- randombytes: 2.1.0
- dev: true
- /serve-static@1.16.2:
+ serve-static@1.16.2:
resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
engines: {node: '>= 0.8.0'}
- dependencies:
- encodeurl: 2.0.0
- escape-html: 1.0.3
- parseurl: 1.3.3
- send: 0.19.0
- transitivePeerDependencies:
- - supports-color
- /serve-static@2.2.0:
+ serve-static@2.2.0:
resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==}
engines: {node: '>= 18'}
- dependencies:
- encodeurl: 2.0.0
- escape-html: 1.0.3
- parseurl: 1.3.3
- send: 1.2.0
- transitivePeerDependencies:
- - supports-color
- dev: false
- /set-blocking@2.0.0:
+ set-blocking@2.0.0:
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
- dev: false
- /set-function-length@1.2.2:
+ set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
- dependencies:
- define-data-property: 1.1.4
- es-errors: 1.3.0
- function-bind: 1.1.2
- get-intrinsic: 1.3.0
- gopd: 1.2.0
- has-property-descriptors: 1.0.2
- /setprototypeof@1.2.0:
+ setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
- /sha.js@2.4.12:
+ sha.js@2.4.12:
resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==}
engines: {node: '>= 0.10'}
hasBin: true
- dependencies:
- inherits: 2.0.4
- safe-buffer: 5.2.1
- to-buffer: 1.2.2
- dev: false
- /shebang-command@2.0.0:
+ shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
- dependencies:
- shebang-regex: 3.0.0
- /shebang-regex@3.0.0:
+ shebang-regex@3.0.0:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
- /side-channel-list@1.0.0:
+ side-channel-list@1.0.0:
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
engines: {node: '>= 0.4'}
- dependencies:
- es-errors: 1.3.0
- object-inspect: 1.13.4
- /side-channel-map@1.0.1:
+ side-channel-map@1.0.1:
resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
engines: {node: '>= 0.4'}
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
- object-inspect: 1.13.4
- /side-channel-weakmap@1.0.2:
+ side-channel-weakmap@1.0.2:
resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
engines: {node: '>= 0.4'}
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
- object-inspect: 1.13.4
- side-channel-map: 1.0.1
- /side-channel@1.1.0:
+ side-channel@1.1.0:
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
engines: {node: '>= 0.4'}
- dependencies:
- es-errors: 1.3.0
- object-inspect: 1.13.4
- side-channel-list: 1.0.0
- side-channel-map: 1.0.1
- side-channel-weakmap: 1.0.2
- /signal-exit@3.0.7:
+ signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
- /signal-exit@4.1.0:
+ signal-exit@4.1.0:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
- /sisteransi@1.0.5:
+ sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
- dev: true
- /slash@3.0.0:
+ slash@3.0.0:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
- dev: true
- /source-map-support@0.5.13:
+ source-map-support@0.5.13:
resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
- dependencies:
- buffer-from: 1.1.2
- source-map: 0.6.1
- dev: true
- /source-map-support@0.5.21:
+ source-map-support@0.5.21:
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
- dependencies:
- buffer-from: 1.1.2
- source-map: 0.6.1
- dev: true
- /source-map@0.6.1:
+ source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
- dev: true
- /source-map@0.7.4:
+ source-map@0.7.4:
resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
engines: {node: '>= 8'}
- dev: true
- /source-map@0.7.6:
+ source-map@0.7.6:
resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
engines: {node: '>= 12'}
- dev: true
- /sprintf-js@1.0.3:
+ sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
- dev: true
- /sql-highlight@6.1.0:
+ sql-highlight@6.1.0:
resolution: {integrity: sha512-ed7OK4e9ywpE7pgRMkMQmZDPKSVdm0oX5IEtZiKnFucSF0zu6c80GZBe38UqHuVhTWJ9xsKgSMjCG2bml86KvA==}
engines: {node: '>=14'}
- dev: false
- /sqlstring@2.3.3:
+ sqlstring@2.3.3:
resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==}
engines: {node: '>= 0.6'}
- dev: false
- /stack-utils@2.0.6:
+ stack-utils@2.0.6:
resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
engines: {node: '>=10'}
- dependencies:
- escape-string-regexp: 2.0.0
- dev: true
- /statuses@2.0.1:
+ statuses@2.0.1:
resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
engines: {node: '>= 0.8'}
- /statuses@2.0.2:
+ statuses@2.0.2:
resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
engines: {node: '>= 0.8'}
- dev: false
- /streamsearch@1.1.0:
+ streamsearch@1.1.0:
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
engines: {node: '>=10.0.0'}
- /string-length@4.0.2:
+ string-length@4.0.2:
resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
engines: {node: '>=10'}
- dependencies:
- char-regex: 1.0.2
- strip-ansi: 6.0.1
- dev: true
- /string-width@4.2.3:
+ string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
- dependencies:
- emoji-regex: 8.0.0
- is-fullwidth-code-point: 3.0.0
- strip-ansi: 6.0.1
- /string-width@5.1.2:
+ string-width@5.1.2:
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
engines: {node: '>=12'}
- dependencies:
- eastasianwidth: 0.2.0
- emoji-regex: 9.2.2
- strip-ansi: 7.1.2
- /string_decoder@1.3.0:
+ string_decoder@1.3.0:
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
- dependencies:
- safe-buffer: 5.2.1
- /strip-ansi@6.0.1:
+ strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
- dependencies:
- ansi-regex: 5.0.1
- /strip-ansi@7.1.2:
+ strip-ansi@7.1.2:
resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
engines: {node: '>=12'}
- dependencies:
- ansi-regex: 6.2.2
- /strip-bom@3.0.0:
+ strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
- dev: true
- /strip-bom@4.0.0:
+ strip-bom@4.0.0:
resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
engines: {node: '>=8'}
- dev: true
- /strip-final-newline@2.0.0:
+ strip-final-newline@2.0.0:
resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
engines: {node: '>=6'}
- dev: true
- /strip-json-comments@3.1.1:
+ strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
- dev: true
- /strtok3@10.3.4:
+ strtok3@10.3.4:
resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==}
engines: {node: '>=18'}
- dependencies:
- '@tokenizer/token': 0.3.0
- /superagent@8.1.2:
+ superagent@8.1.2:
resolution: {integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==}
engines: {node: '>=6.4.0 <13 || >=14'}
deprecated: Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net
- dependencies:
- component-emitter: 1.3.1
- cookiejar: 2.1.4
- debug: 4.4.3
- fast-safe-stringify: 2.1.1
- form-data: 4.0.4
- formidable: 2.1.5
- methods: 1.1.2
- mime: 2.6.0
- qs: 6.14.0
- semver: 7.7.3
- transitivePeerDependencies:
- - supports-color
- dev: true
- /supertest@6.3.4:
+ supertest@6.3.4:
resolution: {integrity: sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==}
engines: {node: '>=6.4.0'}
deprecated: Please upgrade to supertest v7.1.3+, see release notes at https://github.com/forwardemail/supertest/releases/tag/v7.1.3 - maintenance is supported by Forward Email @ https://forwardemail.net
- dependencies:
- methods: 1.1.2
- superagent: 8.1.2
- transitivePeerDependencies:
- - supports-color
- dev: true
- /supports-color@7.2.0:
+ supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
- dependencies:
- has-flag: 4.0.0
- /supports-color@8.1.1:
+ supports-color@8.1.1:
resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
engines: {node: '>=10'}
- dependencies:
- has-flag: 4.0.0
- dev: true
- /supports-preserve-symlinks-flag@1.0.0:
+ supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- dev: true
- /swagger-ui-dist@5.21.0:
+ swagger-ui-dist@5.21.0:
resolution: {integrity: sha512-E0K3AB6HvQd8yQNSMR7eE5bk+323AUxjtCz/4ZNKiahOlPhPJxqn3UPIGs00cyY/dhrTDJ61L7C/a8u6zhGrZg==}
- dependencies:
- '@scarf/scarf': 1.4.0
- dev: false
- /swagger-ui-dist@5.29.4:
+ swagger-ui-dist@5.29.4:
resolution: {integrity: sha512-gJFDz/gyLOCQtWwAgqs6Rk78z9ONnqTnlW11gimG9nLap8drKa3AJBKpzIQMIjl5PD2Ix+Tn+mc/tfoT2tgsng==}
- dependencies:
- '@scarf/scarf': 1.4.0
- dev: false
- /swagger-ui-express@5.0.1(express@5.1.0):
+ swagger-ui-express@5.0.1:
resolution: {integrity: sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA==}
engines: {node: '>= v0.10.32'}
peerDependencies:
express: '>=4.0.0 || >=5.0.0-beta'
- dependencies:
- express: 5.1.0
- swagger-ui-dist: 5.29.4
- dev: false
- /symbol-observable@4.0.0:
+ symbol-observable@4.0.0:
resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==}
engines: {node: '>=0.10'}
- dev: true
- /synckit@0.11.11:
+ synckit@0.11.11:
resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==}
engines: {node: ^14.18.0 || >=16.0.0}
- dependencies:
- '@pkgr/core': 0.2.9
- dev: true
- /tapable@2.3.0:
+ tapable@2.3.0:
resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
engines: {node: '>=6'}
- dev: true
- /tar@6.2.1:
+ tar@6.2.1:
resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
engines: {node: '>=10'}
- dependencies:
- chownr: 2.0.0
- fs-minipass: 2.1.0
- minipass: 5.0.0
- minizlib: 2.1.2
- mkdirp: 1.0.4
- yallist: 4.0.0
- dev: false
- /terser-webpack-plugin@5.3.14(webpack@5.102.1):
+ terser-webpack-plugin@5.3.14:
resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==}
engines: {node: '>= 10.13.0'}
peerDependencies:
@@ -5715,124 +3134,59 @@ packages:
optional: true
uglify-js:
optional: true
- dependencies:
- '@jridgewell/trace-mapping': 0.3.31
- jest-worker: 27.5.1
- schema-utils: 4.3.3
- serialize-javascript: 6.0.2
- terser: 5.44.0
- webpack: 5.102.1
- dev: true
- /terser-webpack-plugin@5.3.14(webpack@5.97.1):
- resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==}
- engines: {node: '>= 10.13.0'}
- peerDependencies:
- '@swc/core': '*'
- esbuild: '*'
- uglify-js: '*'
- webpack: ^5.1.0
- peerDependenciesMeta:
- '@swc/core':
- optional: true
- esbuild:
- optional: true
- uglify-js:
- optional: true
- dependencies:
- '@jridgewell/trace-mapping': 0.3.31
- jest-worker: 27.5.1
- schema-utils: 4.3.3
- serialize-javascript: 6.0.2
- terser: 5.44.0
- webpack: 5.97.1
- dev: true
-
- /terser@5.44.0:
+ terser@5.44.0:
resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==}
engines: {node: '>=10'}
hasBin: true
- dependencies:
- '@jridgewell/source-map': 0.3.11
- acorn: 8.15.0
- commander: 2.20.3
- source-map-support: 0.5.21
- dev: true
- /test-exclude@6.0.0:
+ test-exclude@6.0.0:
resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
engines: {node: '>=8'}
- dependencies:
- '@istanbuljs/schema': 0.1.3
- glob: 7.2.3
- minimatch: 3.1.2
- dev: true
- /text-table@0.2.0:
+ text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
- dev: true
- /through@2.3.8:
+ through@2.3.8:
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
- dev: true
- /tmp@0.0.33:
+ tmp@0.0.33:
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
engines: {node: '>=0.6.0'}
- dependencies:
- os-tmpdir: 1.0.2
- dev: true
- /tmpl@1.0.5:
+ tmpl@1.0.5:
resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
- dev: true
- /to-buffer@1.2.2:
+ to-buffer@1.2.2:
resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==}
engines: {node: '>= 0.4'}
- dependencies:
- isarray: 2.0.5
- safe-buffer: 5.2.1
- typed-array-buffer: 1.0.3
- dev: false
- /to-regex-range@5.0.1:
+ to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
- dependencies:
- is-number: 7.0.0
- dev: true
- /toidentifier@1.0.1:
+ toidentifier@1.0.1:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'}
- /token-types@6.1.1:
+ token-types@6.1.1:
resolution: {integrity: sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==}
engines: {node: '>=14.16'}
- dependencies:
- '@borewit/text-codec': 0.1.1
- '@tokenizer/token': 0.3.0
- ieee754: 1.2.1
- /tr46@0.0.3:
+ tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
- /tree-kill@1.2.2:
+ tree-kill@1.2.2:
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
hasBin: true
- dev: true
- /ts-api-utils@1.4.3(typescript@5.9.3):
+ ts-api-utils@1.4.3:
resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==}
engines: {node: '>=16'}
peerDependencies:
typescript: '>=4.2.0'
- dependencies:
- typescript: 5.9.3
- dev: true
- /ts-jest@29.4.5(@babel/core@7.28.4)(jest@29.7.0)(typescript@5.9.3):
+ ts-jest@29.4.5:
resolution: {integrity: sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q==}
engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0}
hasBin: true
@@ -5858,38 +3212,15 @@ packages:
optional: true
jest-util:
optional: true
- dependencies:
- '@babel/core': 7.28.4
- bs-logger: 0.2.6
- fast-json-stable-stringify: 2.1.0
- handlebars: 4.7.8
- jest: 29.7.0(@types/node@20.19.20)(ts-node@10.9.2)
- json5: 2.2.3
- lodash.memoize: 4.1.2
- make-error: 1.3.6
- semver: 7.7.3
- type-fest: 4.41.0
- typescript: 5.9.3
- yargs-parser: 21.1.1
- dev: true
- /ts-loader@9.5.4(typescript@5.9.3)(webpack@5.102.1):
+ ts-loader@9.5.4:
resolution: {integrity: sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==}
engines: {node: '>=12.0.0'}
peerDependencies:
typescript: '*'
webpack: ^5.0.0
- dependencies:
- chalk: 4.1.2
- enhanced-resolve: 5.18.3
- micromatch: 4.0.8
- semver: 7.7.3
- source-map: 0.7.6
- typescript: 5.9.3
- webpack: 5.102.1
- dev: true
- /ts-node@10.9.2(@types/node@20.19.20)(typescript@5.9.3):
+ ts-node@10.9.2:
resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
hasBin: true
peerDependencies:
@@ -5902,101 +3233,54 @@ packages:
optional: true
'@swc/wasm':
optional: true
- dependencies:
- '@cspotcode/source-map-support': 0.8.1
- '@tsconfig/node10': 1.0.11
- '@tsconfig/node12': 1.0.11
- '@tsconfig/node14': 1.0.3
- '@tsconfig/node16': 1.0.4
- '@types/node': 20.19.20
- acorn: 8.15.0
- acorn-walk: 8.3.4
- arg: 4.1.3
- create-require: 1.1.1
- diff: 4.0.2
- make-error: 1.3.6
- typescript: 5.9.3
- v8-compile-cache-lib: 3.0.1
- yn: 3.1.1
- /tsconfig-paths-webpack-plugin@4.2.0:
+ tsconfig-paths-webpack-plugin@4.2.0:
resolution: {integrity: sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==}
engines: {node: '>=10.13.0'}
- dependencies:
- chalk: 4.1.2
- enhanced-resolve: 5.18.3
- tapable: 2.3.0
- tsconfig-paths: 4.2.0
- dev: true
- /tsconfig-paths@4.2.0:
+ tsconfig-paths@4.2.0:
resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
engines: {node: '>=6'}
- dependencies:
- json5: 2.2.3
- minimist: 1.2.8
- strip-bom: 3.0.0
- dev: true
- /tslib@2.8.1:
+ tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
- /type-check@0.4.0:
+ type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
- dependencies:
- prelude-ls: 1.2.1
- dev: true
- /type-detect@4.0.8:
+ type-detect@4.0.8:
resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
engines: {node: '>=4'}
- dev: true
- /type-fest@0.20.2:
+ type-fest@0.20.2:
resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
engines: {node: '>=10'}
- dev: true
- /type-fest@0.21.3:
+ type-fest@0.21.3:
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
engines: {node: '>=10'}
- dev: true
- /type-fest@4.41.0:
+ type-fest@4.41.0:
resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
engines: {node: '>=16'}
- dev: true
- /type-is@1.6.18:
+ type-is@1.6.18:
resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
engines: {node: '>= 0.6'}
- dependencies:
- media-typer: 0.3.0
- mime-types: 2.1.35
- /type-is@2.0.1:
+ type-is@2.0.1:
resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
engines: {node: '>= 0.6'}
- dependencies:
- content-type: 1.0.5
- media-typer: 1.1.0
- mime-types: 3.0.1
- dev: false
- /typed-array-buffer@1.0.3:
+ typed-array-buffer@1.0.3:
resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
engines: {node: '>= 0.4'}
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- is-typed-array: 1.1.15
- dev: false
- /typedarray@0.0.6:
+ typedarray@0.0.6:
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
- /typeorm@0.3.27(mysql2@3.15.2)(reflect-metadata@0.1.14)(ts-node@10.9.2):
+ typeorm@0.3.27:
resolution: {integrity: sha512-pNV1bn+1n8qEe8tUNsNdD8ejuPcMAg47u2lUGnbsajiNUr3p2Js1XLKQjBMH0yMRMDfdX8T+fIRejFmIwy9x4A==}
engines: {node: '>=16.13.0'}
hasBin: true
@@ -6051,6 +3335,3847 @@ packages:
optional: true
typeorm-aurora-data-api-driver:
optional: true
+
+ typescript@5.7.2:
+ resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ uglify-js@3.19.3:
+ resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
+ engines: {node: '>=0.8.0'}
+ hasBin: true
+
+ uid2@0.0.4:
+ resolution: {integrity: sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==}
+
+ uid@2.0.2:
+ resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==}
+ engines: {node: '>=8'}
+
+ uint8array-extras@1.5.0:
+ resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==}
+ engines: {node: '>=18'}
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+
+ unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+
+ update-browserslist-db@1.1.3:
+ resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ utils-merge@1.0.1:
+ resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+ engines: {node: '>= 0.4.0'}
+
+ uuid@11.1.0:
+ resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
+ hasBin: true
+
+ uuid@9.0.1:
+ resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
+ hasBin: true
+
+ v8-compile-cache-lib@3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+
+ v8-to-istanbul@9.3.0:
+ resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
+ engines: {node: '>=10.12.0'}
+
+ validator@13.15.15:
+ resolution: {integrity: sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==}
+ engines: {node: '>= 0.10'}
+
+ vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
+ walker@1.0.8:
+ resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
+
+ watchpack@2.4.4:
+ resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==}
+ engines: {node: '>=10.13.0'}
+
+ wcwidth@1.0.1:
+ resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ webpack-node-externals@3.0.0:
+ resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==}
+ engines: {node: '>=6'}
+
+ webpack-sources@3.3.3:
+ resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==}
+ engines: {node: '>=10.13.0'}
+
+ webpack@5.102.1:
+ resolution: {integrity: sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ peerDependencies:
+ webpack-cli: '*'
+ peerDependenciesMeta:
+ webpack-cli:
+ optional: true
+
+ webpack@5.97.1:
+ resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ peerDependencies:
+ webpack-cli: '*'
+ peerDependenciesMeta:
+ webpack-cli:
+ optional: true
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which-typed-array@1.1.19:
+ resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
+ engines: {node: '>= 0.4'}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ wide-align@1.1.5:
+ resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
+ wordwrap@1.0.0:
+ resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+
+ wrap-ansi@6.2.0:
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
+ engines: {node: '>=8'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ write-file-atomic@4.0.2:
+ resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+
+ xtend@4.0.2:
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yn@3.1.1:
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@angular-devkit/core@17.3.11(chokidar@3.6.0)':
+ dependencies:
+ ajv: 8.12.0
+ ajv-formats: 2.1.1(ajv@8.12.0)
+ chokidar: 3.6.0
+ jsonc-parser: 3.2.1
+ picomatch: 4.0.1
+ rxjs: 7.8.1
+ source-map: 0.7.4
+
+ '@angular-devkit/schematics-cli@17.3.11(chokidar@3.6.0)':
+ dependencies:
+ '@angular-devkit/core': 17.3.11(chokidar@3.6.0)
+ '@angular-devkit/schematics': 17.3.11(chokidar@3.6.0)
+ ansi-colors: 4.1.3
+ inquirer: 9.2.15
+ symbol-observable: 4.0.0
+ yargs-parser: 21.1.1
+ transitivePeerDependencies:
+ - chokidar
+
+ '@angular-devkit/schematics@17.3.11(chokidar@3.6.0)':
+ dependencies:
+ '@angular-devkit/core': 17.3.11(chokidar@3.6.0)
+ jsonc-parser: 3.2.1
+ magic-string: 0.30.8
+ ora: 5.4.1
+ rxjs: 7.8.1
+ transitivePeerDependencies:
+ - chokidar
+
+ '@babel/code-frame@7.27.1':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.27.1
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.28.4': {}
+
+ '@babel/core@7.28.4':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.28.3
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
+ '@babel/helpers': 7.28.4
+ '@babel/parser': 7.28.4
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.28.4
+ '@babel/types': 7.28.4
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.28.3':
+ dependencies:
+ '@babel/parser': 7.28.4
+ '@babel/types': 7.28.4
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/helper-compilation-targets@7.27.2':
+ dependencies:
+ '@babel/compat-data': 7.28.4
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.26.3
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-globals@7.28.0': {}
+
+ '@babel/helper-module-imports@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.28.4
+ '@babel/types': 7.28.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
+ '@babel/traverse': 7.28.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-plugin-utils@7.27.1': {}
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-validator-identifier@7.27.1': {}
+
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helpers@7.28.4':
+ dependencies:
+ '@babel/template': 7.27.2
+ '@babel/types': 7.28.4
+
+ '@babel/parser@7.28.4':
+ dependencies:
+ '@babel/types': 7.28.4
+
+ '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/template@7.27.2':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/parser': 7.28.4
+ '@babel/types': 7.28.4
+
+ '@babel/traverse@7.28.4':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.28.3
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.28.4
+ '@babel/template': 7.27.2
+ '@babel/types': 7.28.4
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.28.4':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
+
+ '@bcoe/v8-coverage@0.2.3': {}
+
+ '@borewit/text-codec@0.1.1': {}
+
+ '@colors/colors@1.5.0':
+ optional: true
+
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+
+ '@eslint-community/eslint-utils@4.9.0(eslint@8.57.1)':
+ dependencies:
+ eslint: 8.57.1
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.12.1': {}
+
+ '@eslint/eslintrc@2.1.4':
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.4.3
+ espree: 9.6.1
+ globals: 13.24.0
+ ignore: 5.3.2
+ import-fresh: 3.3.1
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/js@8.57.1': {}
+
+ '@humanwhocodes/config-array@0.13.0':
+ dependencies:
+ '@humanwhocodes/object-schema': 2.0.3
+ debug: 4.4.3
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/object-schema@2.0.3': {}
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.2
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@istanbuljs/load-nyc-config@1.1.0':
+ dependencies:
+ camelcase: 5.3.1
+ find-up: 4.1.0
+ get-package-type: 0.1.0
+ js-yaml: 3.14.1
+ resolve-from: 5.0.0
+
+ '@istanbuljs/schema@0.1.3': {}
+
+ '@jest/console@29.7.0':
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/node': 20.19.20
+ chalk: 4.1.2
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+ slash: 3.0.0
+
+ '@jest/core@29.7.0(ts-node@10.9.2)':
+ dependencies:
+ '@jest/console': 29.7.0
+ '@jest/reporters': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 20.19.20
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ exit: 0.1.2
+ graceful-fs: 4.2.11
+ jest-changed-files: 29.7.0
+ jest-config: 29.7.0(@types/node@20.19.20)(ts-node@10.9.2)
+ jest-haste-map: 29.7.0
+ jest-message-util: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-resolve: 29.7.0
+ jest-resolve-dependencies: 29.7.0
+ jest-runner: 29.7.0
+ jest-runtime: 29.7.0
+ jest-snapshot: 29.7.0
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ jest-watcher: 29.7.0
+ micromatch: 4.0.8
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ strip-ansi: 6.0.1
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ '@jest/environment@29.7.0':
+ dependencies:
+ '@jest/fake-timers': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 20.19.20
+ jest-mock: 29.7.0
+
+ '@jest/expect-utils@29.7.0':
+ dependencies:
+ jest-get-type: 29.6.3
+
+ '@jest/expect@29.7.0':
+ dependencies:
+ expect: 29.7.0
+ jest-snapshot: 29.7.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/fake-timers@29.7.0':
+ dependencies:
+ '@jest/types': 29.6.3
+ '@sinonjs/fake-timers': 10.3.0
+ '@types/node': 20.19.20
+ jest-message-util: 29.7.0
+ jest-mock: 29.7.0
+ jest-util: 29.7.0
+
+ '@jest/globals@29.7.0':
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/expect': 29.7.0
+ '@jest/types': 29.6.3
+ jest-mock: 29.7.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/reporters@29.7.0':
+ dependencies:
+ '@bcoe/v8-coverage': 0.2.3
+ '@jest/console': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ '@jridgewell/trace-mapping': 0.3.31
+ '@types/node': 20.19.20
+ chalk: 4.1.2
+ collect-v8-coverage: 1.0.2
+ exit: 0.1.2
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-instrument: 6.0.3
+ istanbul-lib-report: 3.0.1
+ istanbul-lib-source-maps: 4.0.1
+ istanbul-reports: 3.2.0
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+ jest-worker: 29.7.0
+ slash: 3.0.0
+ string-length: 4.0.2
+ strip-ansi: 6.0.1
+ v8-to-istanbul: 9.3.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/schemas@29.6.3':
+ dependencies:
+ '@sinclair/typebox': 0.27.8
+
+ '@jest/source-map@29.6.3':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ callsites: 3.1.0
+ graceful-fs: 4.2.11
+
+ '@jest/test-result@29.7.0':
+ dependencies:
+ '@jest/console': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/istanbul-lib-coverage': 2.0.6
+ collect-v8-coverage: 1.0.2
+
+ '@jest/test-sequencer@29.7.0':
+ dependencies:
+ '@jest/test-result': 29.7.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ slash: 3.0.0
+
+ '@jest/transform@29.7.0':
+ dependencies:
+ '@babel/core': 7.28.4
+ '@jest/types': 29.6.3
+ '@jridgewell/trace-mapping': 0.3.31
+ babel-plugin-istanbul: 6.1.1
+ chalk: 4.1.2
+ convert-source-map: 2.0.0
+ fast-json-stable-stringify: 2.1.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-util: 29.7.0
+ micromatch: 4.0.8
+ pirates: 4.0.7
+ slash: 3.0.0
+ write-file-atomic: 4.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/types@29.6.3':
+ dependencies:
+ '@jest/schemas': 29.6.3
+ '@types/istanbul-lib-coverage': 2.0.6
+ '@types/istanbul-reports': 3.0.4
+ '@types/node': 20.19.20
+ '@types/yargs': 17.0.33
+ chalk: 4.1.2
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/source-map@0.3.11':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@ljharb/through@2.3.14':
+ dependencies:
+ call-bind: 1.0.8
+
+ '@lukeed/csprng@1.1.0': {}
+
+ '@mapbox/node-pre-gyp@1.0.11':
+ dependencies:
+ detect-libc: 2.1.2
+ https-proxy-agent: 5.0.1
+ make-dir: 3.1.0
+ node-fetch: 2.7.0
+ nopt: 5.0.0
+ npmlog: 5.0.1
+ rimraf: 3.0.2
+ semver: 7.7.3
+ tar: 6.2.1
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ '@microsoft/tsdoc@0.15.1': {}
+
+ '@nestjs/cache-manager@2.1.0(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)(cache-manager@4.1.0)(reflect-metadata@0.1.14)(rxjs@7.8.2)':
+ dependencies:
+ '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ '@nestjs/core': 10.4.20(@nestjs/common@10.4.20)(@nestjs/platform-express@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ cache-manager: 4.1.0
+ reflect-metadata: 0.1.14
+ rxjs: 7.8.2
+
+ '@nestjs/cli@10.4.9':
+ dependencies:
+ '@angular-devkit/core': 17.3.11(chokidar@3.6.0)
+ '@angular-devkit/schematics': 17.3.11(chokidar@3.6.0)
+ '@angular-devkit/schematics-cli': 17.3.11(chokidar@3.6.0)
+ '@nestjs/schematics': 10.2.3(chokidar@3.6.0)(typescript@5.7.2)
+ chalk: 4.1.2
+ chokidar: 3.6.0
+ cli-table3: 0.6.5
+ commander: 4.1.1
+ fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.7.2)(webpack@5.97.1)
+ glob: 10.4.5
+ inquirer: 8.2.6
+ node-emoji: 1.11.0
+ ora: 5.4.1
+ tree-kill: 1.2.2
+ tsconfig-paths: 4.2.0
+ tsconfig-paths-webpack-plugin: 4.2.0
+ typescript: 5.7.2
+ webpack: 5.97.1
+ webpack-node-externals: 3.0.0
+ transitivePeerDependencies:
+ - esbuild
+ - uglify-js
+ - webpack-cli
+
+ '@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)':
+ dependencies:
+ class-transformer: 0.5.1
+ class-validator: 0.14.2
+ file-type: 20.4.1
+ iterare: 1.2.1
+ reflect-metadata: 0.1.14
+ rxjs: 7.8.2
+ tslib: 2.8.1
+ uid: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@nestjs/config@3.3.0(@nestjs/common@10.4.20)(rxjs@7.8.2)':
+ dependencies:
+ '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ dotenv: 16.4.5
+ dotenv-expand: 10.0.0
+ lodash: 4.17.21
+ rxjs: 7.8.2
+
+ '@nestjs/core@10.4.20(@nestjs/common@10.4.20)(@nestjs/platform-express@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2)':
+ dependencies:
+ '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ '@nestjs/platform-express': 10.4.20(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)
+ '@nuxtjs/opencollective': 0.3.2
+ fast-safe-stringify: 2.1.1
+ iterare: 1.2.1
+ path-to-regexp: 3.3.0
+ reflect-metadata: 0.1.14
+ rxjs: 7.8.2
+ tslib: 2.8.1
+ uid: 2.0.2
+ transitivePeerDependencies:
+ - encoding
+
+ '@nestjs/jwt@10.2.0(@nestjs/common@10.4.20)':
+ dependencies:
+ '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ '@types/jsonwebtoken': 9.0.5
+ jsonwebtoken: 9.0.2
+
+ '@nestjs/mapped-types@2.1.0(@nestjs/common@10.4.20)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)':
+ dependencies:
+ '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ class-transformer: 0.5.1
+ class-validator: 0.14.2
+ reflect-metadata: 0.1.14
+
+ '@nestjs/passport@10.0.3(@nestjs/common@10.4.20)(passport@0.6.0)':
+ dependencies:
+ '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ passport: 0.6.0
+
+ '@nestjs/platform-express@10.4.20(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)':
+ dependencies:
+ '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ '@nestjs/core': 10.4.20(@nestjs/common@10.4.20)(@nestjs/platform-express@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ body-parser: 1.20.3
+ cors: 2.8.5
+ express: 4.21.2
+ multer: 2.0.2
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@nestjs/schematics@10.2.3(chokidar@3.6.0)(typescript@5.7.2)':
+ dependencies:
+ '@angular-devkit/core': 17.3.11(chokidar@3.6.0)
+ '@angular-devkit/schematics': 17.3.11(chokidar@3.6.0)
+ comment-json: 4.2.5
+ jsonc-parser: 3.3.1
+ pluralize: 8.0.0
+ typescript: 5.7.2
+ transitivePeerDependencies:
+ - chokidar
+
+ '@nestjs/schematics@10.2.3(typescript@5.9.3)':
+ dependencies:
+ '@angular-devkit/core': 17.3.11(chokidar@3.6.0)
+ '@angular-devkit/schematics': 17.3.11(chokidar@3.6.0)
+ comment-json: 4.2.5
+ jsonc-parser: 3.3.1
+ pluralize: 8.0.0
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - chokidar
+
+ '@nestjs/swagger@11.2.0(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)':
+ dependencies:
+ '@microsoft/tsdoc': 0.15.1
+ '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ '@nestjs/core': 10.4.20(@nestjs/common@10.4.20)(@nestjs/platform-express@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ '@nestjs/mapped-types': 2.1.0(@nestjs/common@10.4.20)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)
+ class-transformer: 0.5.1
+ class-validator: 0.14.2
+ js-yaml: 4.1.0
+ lodash: 4.17.21
+ path-to-regexp: 8.2.0
+ reflect-metadata: 0.1.14
+ swagger-ui-dist: 5.21.0
+
+ '@nestjs/testing@10.4.20(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)(@nestjs/platform-express@10.4.20)':
+ dependencies:
+ '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ '@nestjs/core': 10.4.20(@nestjs/common@10.4.20)(@nestjs/platform-express@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ '@nestjs/platform-express': 10.4.20(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)
+ tslib: 2.8.1
+
+ '@nestjs/typeorm@10.0.2(@nestjs/common@10.4.20)(@nestjs/core@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2)(typeorm@0.3.27)':
+ dependencies:
+ '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ '@nestjs/core': 10.4.20(@nestjs/common@10.4.20)(@nestjs/platform-express@10.4.20)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ reflect-metadata: 0.1.14
+ rxjs: 7.8.2
+ typeorm: 0.3.27(mysql2@3.15.2)(reflect-metadata@0.1.14)(ts-node@10.9.2)
+ uuid: 9.0.1
+
+ '@noble/hashes@1.8.0': {}
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.19.1
+
+ '@nuxtjs/opencollective@0.3.2':
+ dependencies:
+ chalk: 4.1.2
+ consola: 2.15.3
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - encoding
+
+ '@paralleldrive/cuid2@2.2.2':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@pkgr/core@0.2.9': {}
+
+ '@scarf/scarf@1.4.0': {}
+
+ '@sinclair/typebox@0.27.8': {}
+
+ '@sinonjs/commons@3.0.1':
+ dependencies:
+ type-detect: 4.0.8
+
+ '@sinonjs/fake-timers@10.3.0':
+ dependencies:
+ '@sinonjs/commons': 3.0.1
+
+ '@sqltools/formatter@1.2.5': {}
+
+ '@tokenizer/inflate@0.2.7':
+ dependencies:
+ debug: 4.4.3
+ fflate: 0.8.2
+ token-types: 6.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@tokenizer/token@0.3.0': {}
+
+ '@tsconfig/node10@1.0.11': {}
+
+ '@tsconfig/node12@1.0.11': {}
+
+ '@tsconfig/node14@1.0.3': {}
+
+ '@tsconfig/node16@1.0.4': {}
+
+ '@types/babel__core@7.20.5':
+ dependencies:
+ '@babel/parser': 7.28.4
+ '@babel/types': 7.28.4
+ '@types/babel__generator': 7.27.0
+ '@types/babel__template': 7.4.4
+ '@types/babel__traverse': 7.28.0
+
+ '@types/babel__generator@7.27.0':
+ dependencies:
+ '@babel/types': 7.28.4
+
+ '@types/babel__template@7.4.4':
+ dependencies:
+ '@babel/parser': 7.28.4
+ '@babel/types': 7.28.4
+
+ '@types/babel__traverse@7.28.0':
+ dependencies:
+ '@babel/types': 7.28.4
+
+ '@types/bcrypt@5.0.2':
+ dependencies:
+ '@types/node': 20.19.20
+
+ '@types/body-parser@1.19.6':
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 20.19.20
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.19.20
+
+ '@types/cookiejar@2.1.5': {}
+
+ '@types/eslint-scope@3.7.7':
+ dependencies:
+ '@types/eslint': 9.6.1
+ '@types/estree': 1.0.8
+
+ '@types/eslint@9.6.1':
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/json-schema': 7.0.15
+
+ '@types/estree@1.0.8': {}
+
+ '@types/express-serve-static-core@4.19.7':
+ dependencies:
+ '@types/node': 20.19.20
+ '@types/qs': 6.14.0
+ '@types/range-parser': 1.2.7
+ '@types/send': 1.2.0
+
+ '@types/express@4.17.23':
+ dependencies:
+ '@types/body-parser': 1.19.6
+ '@types/express-serve-static-core': 4.19.7
+ '@types/qs': 6.14.0
+ '@types/serve-static': 1.15.9
+
+ '@types/graceful-fs@4.1.9':
+ dependencies:
+ '@types/node': 20.19.20
+
+ '@types/http-errors@2.0.5': {}
+
+ '@types/istanbul-lib-coverage@2.0.6': {}
+
+ '@types/istanbul-lib-report@3.0.3':
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.6
+
+ '@types/istanbul-reports@3.0.4':
+ dependencies:
+ '@types/istanbul-lib-report': 3.0.3
+
+ '@types/jest@29.5.14':
+ dependencies:
+ expect: 29.7.0
+ pretty-format: 29.7.0
+
+ '@types/json-schema@7.0.15': {}
+
+ '@types/jsonwebtoken@9.0.10':
+ dependencies:
+ '@types/ms': 2.1.0
+ '@types/node': 20.19.20
+
+ '@types/jsonwebtoken@9.0.5':
+ dependencies:
+ '@types/node': 20.19.20
+
+ '@types/methods@1.1.4': {}
+
+ '@types/mime@1.3.5': {}
+
+ '@types/ms@2.1.0': {}
+
+ '@types/node@20.19.20':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/oauth@0.9.6':
+ dependencies:
+ '@types/node': 20.19.20
+
+ '@types/passport-github2@1.2.9':
+ dependencies:
+ '@types/express': 4.17.23
+ '@types/passport': 1.0.17
+ '@types/passport-oauth2': 1.8.0
+
+ '@types/passport-jwt@3.0.13':
+ dependencies:
+ '@types/express': 4.17.23
+ '@types/jsonwebtoken': 9.0.10
+ '@types/passport-strategy': 0.2.38
+
+ '@types/passport-oauth2@1.8.0':
+ dependencies:
+ '@types/express': 4.17.23
+ '@types/oauth': 0.9.6
+ '@types/passport': 1.0.17
+
+ '@types/passport-strategy@0.2.38':
+ dependencies:
+ '@types/express': 4.17.23
+ '@types/passport': 1.0.17
+
+ '@types/passport@1.0.17':
+ dependencies:
+ '@types/express': 4.17.23
+
+ '@types/qs@6.14.0': {}
+
+ '@types/range-parser@1.2.7': {}
+
+ '@types/semver@7.7.1': {}
+
+ '@types/send@0.17.5':
+ dependencies:
+ '@types/mime': 1.3.5
+ '@types/node': 20.19.20
+
+ '@types/send@1.2.0':
+ dependencies:
+ '@types/node': 20.19.20
+
+ '@types/serve-static@1.15.9':
+ dependencies:
+ '@types/http-errors': 2.0.5
+ '@types/node': 20.19.20
+ '@types/send': 0.17.5
+
+ '@types/stack-utils@2.0.3': {}
+
+ '@types/superagent@8.1.9':
+ dependencies:
+ '@types/cookiejar': 2.1.5
+ '@types/methods': 1.1.4
+ '@types/node': 20.19.20
+ form-data: 4.0.4
+
+ '@types/supertest@6.0.3':
+ dependencies:
+ '@types/methods': 1.1.4
+ '@types/superagent': 8.1.9
+
+ '@types/uuid@10.0.0': {}
+
+ '@types/validator@13.15.3': {}
+
+ '@types/yargs-parser@21.0.3': {}
+
+ '@types/yargs@17.0.33':
+ dependencies:
+ '@types/yargs-parser': 21.0.3
+
+ '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.9.3)':
+ dependencies:
+ '@eslint-community/regexpp': 4.12.1
+ '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 6.21.0
+ '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3)
+ '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 6.21.0
+ debug: 4.4.3
+ eslint: 8.57.1
+ graphemer: 1.4.0
+ ignore: 5.3.2
+ natural-compare: 1.4.0
+ semver: 7.7.3
+ ts-api-utils: 1.4.3(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 6.21.0
+ '@typescript-eslint/types': 6.21.0
+ '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 6.21.0
+ debug: 4.4.3
+ eslint: 8.57.1
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/scope-manager@6.21.0':
+ dependencies:
+ '@typescript-eslint/types': 6.21.0
+ '@typescript-eslint/visitor-keys': 6.21.0
+
+ '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.9.3)':
+ dependencies:
+ '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3)
+ debug: 4.4.3
+ eslint: 8.57.1
+ ts-api-utils: 1.4.3(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/types@6.21.0': {}
+
+ '@typescript-eslint/typescript-estree@6.21.0(typescript@5.9.3)':
+ dependencies:
+ '@typescript-eslint/types': 6.21.0
+ '@typescript-eslint/visitor-keys': 6.21.0
+ debug: 4.4.3
+ globby: 11.1.0
+ is-glob: 4.0.3
+ minimatch: 9.0.3
+ semver: 7.7.3
+ ts-api-utils: 1.4.3(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.9.3)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1)
+ '@types/json-schema': 7.0.15
+ '@types/semver': 7.7.1
+ '@typescript-eslint/scope-manager': 6.21.0
+ '@typescript-eslint/types': 6.21.0
+ '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3)
+ eslint: 8.57.1
+ semver: 7.7.3
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ '@typescript-eslint/visitor-keys@6.21.0':
+ dependencies:
+ '@typescript-eslint/types': 6.21.0
+ eslint-visitor-keys: 3.4.3
+
+ '@ungap/structured-clone@1.3.0': {}
+
+ '@webassemblyjs/ast@1.14.1':
+ dependencies:
+ '@webassemblyjs/helper-numbers': 1.13.2
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+
+ '@webassemblyjs/floating-point-hex-parser@1.13.2': {}
+
+ '@webassemblyjs/helper-api-error@1.13.2': {}
+
+ '@webassemblyjs/helper-buffer@1.14.1': {}
+
+ '@webassemblyjs/helper-numbers@1.13.2':
+ dependencies:
+ '@webassemblyjs/floating-point-hex-parser': 1.13.2
+ '@webassemblyjs/helper-api-error': 1.13.2
+ '@xtuc/long': 4.2.2
+
+ '@webassemblyjs/helper-wasm-bytecode@1.13.2': {}
+
+ '@webassemblyjs/helper-wasm-section@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/wasm-gen': 1.14.1
+
+ '@webassemblyjs/ieee754@1.13.2':
+ dependencies:
+ '@xtuc/ieee754': 1.2.0
+
+ '@webassemblyjs/leb128@1.13.2':
+ dependencies:
+ '@xtuc/long': 4.2.2
+
+ '@webassemblyjs/utf8@1.13.2': {}
+
+ '@webassemblyjs/wasm-edit@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/helper-wasm-section': 1.14.1
+ '@webassemblyjs/wasm-gen': 1.14.1
+ '@webassemblyjs/wasm-opt': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+ '@webassemblyjs/wast-printer': 1.14.1
+
+ '@webassemblyjs/wasm-gen@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/ieee754': 1.13.2
+ '@webassemblyjs/leb128': 1.13.2
+ '@webassemblyjs/utf8': 1.13.2
+
+ '@webassemblyjs/wasm-opt@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/wasm-gen': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+
+ '@webassemblyjs/wasm-parser@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-api-error': 1.13.2
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/ieee754': 1.13.2
+ '@webassemblyjs/leb128': 1.13.2
+ '@webassemblyjs/utf8': 1.13.2
+
+ '@webassemblyjs/wast-printer@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@xtuc/long': 4.2.2
+
+ '@xtuc/ieee754@1.2.0': {}
+
+ '@xtuc/long@4.2.2': {}
+
+ abbrev@1.1.1: {}
+
+ accepts@1.3.8:
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+
+ accepts@2.0.0:
+ dependencies:
+ mime-types: 3.0.1
+ negotiator: 1.0.0
+
+ acorn-import-phases@1.0.4(acorn@8.15.0):
+ dependencies:
+ acorn: 8.15.0
+
+ acorn-jsx@5.3.2(acorn@8.15.0):
+ dependencies:
+ acorn: 8.15.0
+
+ acorn-walk@8.3.4:
+ dependencies:
+ acorn: 8.15.0
+
+ acorn@8.15.0: {}
+
+ agent-base@6.0.2:
+ dependencies:
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ ajv-formats@2.1.1(ajv@8.12.0):
+ dependencies:
+ ajv: 8.12.0
+
+ ajv-formats@2.1.1(ajv@8.17.1):
+ dependencies:
+ ajv: 8.17.1
+
+ ajv-keywords@3.5.2(ajv@6.12.6):
+ dependencies:
+ ajv: 6.12.6
+
+ ajv-keywords@5.1.0(ajv@8.17.1):
+ dependencies:
+ ajv: 8.17.1
+ fast-deep-equal: 3.1.3
+
+ ajv@6.12.6:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
+ ajv@8.12.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ uri-js: 4.4.1
+
+ ajv@8.17.1:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.1.0
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
+ ansi-colors@4.1.3: {}
+
+ ansi-escapes@4.3.2:
+ dependencies:
+ type-fest: 0.21.3
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.2.2: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@5.2.0: {}
+
+ ansi-styles@6.2.3: {}
+
+ ansis@3.17.0: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ app-root-path@3.1.0: {}
+
+ append-field@1.0.0: {}
+
+ aproba@2.1.0: {}
+
+ are-we-there-yet@2.0.0:
+ dependencies:
+ delegates: 1.0.0
+ readable-stream: 3.6.2
+
+ arg@4.1.3: {}
+
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
+ argparse@2.0.1: {}
+
+ array-flatten@1.1.1: {}
+
+ array-timsort@1.0.3: {}
+
+ array-union@2.1.0: {}
+
+ asap@2.0.6: {}
+
+ async@3.2.3: {}
+
+ asynckit@0.4.0: {}
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.1.0
+
+ aws-ssl-profiles@1.1.2: {}
+
+ axios@1.12.2:
+ dependencies:
+ follow-redirects: 1.15.11
+ form-data: 4.0.4
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
+ babel-jest@29.7.0(@babel/core@7.28.4):
+ dependencies:
+ '@babel/core': 7.28.4
+ '@jest/transform': 29.7.0
+ '@types/babel__core': 7.20.5
+ babel-plugin-istanbul: 6.1.1
+ babel-preset-jest: 29.6.3(@babel/core@7.28.4)
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ slash: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-istanbul@6.1.1:
+ dependencies:
+ '@babel/helper-plugin-utils': 7.27.1
+ '@istanbuljs/load-nyc-config': 1.1.0
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-instrument: 5.2.1
+ test-exclude: 6.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-jest-hoist@29.6.3:
+ dependencies:
+ '@babel/template': 7.27.2
+ '@babel/types': 7.28.4
+ '@types/babel__core': 7.20.5
+ '@types/babel__traverse': 7.28.0
+
+ babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.4):
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.4)
+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.4)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.4)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.4)
+ '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.4)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.4)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.4)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.4)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.4)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.4)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.4)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.4)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.4)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.4)
+
+ babel-preset-jest@29.6.3(@babel/core@7.28.4):
+ dependencies:
+ '@babel/core': 7.28.4
+ babel-plugin-jest-hoist: 29.6.3
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.4)
+
+ balanced-match@1.0.2: {}
+
+ base64-js@1.5.1: {}
+
+ base64url@3.0.1: {}
+
+ baseline-browser-mapping@2.8.16: {}
+
+ bcrypt@5.1.1:
+ dependencies:
+ '@mapbox/node-pre-gyp': 1.0.11
+ node-addon-api: 5.1.0
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ bcryptjs@2.4.3: {}
+
+ binary-extensions@2.3.0: {}
+
+ bl@4.1.0:
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ body-parser@1.20.3:
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ on-finished: 2.4.1
+ qs: 6.13.0
+ raw-body: 2.5.2
+ type-is: 1.6.18
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ body-parser@2.2.0:
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 4.4.3
+ http-errors: 2.0.0
+ iconv-lite: 0.6.3
+ on-finished: 2.4.1
+ qs: 6.14.0
+ raw-body: 3.0.1
+ type-is: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ brace-expansion@1.1.12:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ brace-expansion@2.0.2:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browserslist@4.26.3:
+ dependencies:
+ baseline-browser-mapping: 2.8.16
+ caniuse-lite: 1.0.30001749
+ electron-to-chromium: 1.5.234
+ node-releases: 2.0.23
+ update-browserslist-db: 1.1.3(browserslist@4.26.3)
+
+ bs-logger@0.2.6:
+ dependencies:
+ fast-json-stable-stringify: 2.1.0
+
+ bser@2.1.1:
+ dependencies:
+ node-int64: 0.4.0
+
+ buffer-equal-constant-time@1.0.1: {}
+
+ buffer-from@1.1.2: {}
+
+ buffer@5.7.1:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ busboy@1.6.0:
+ dependencies:
+ streamsearch: 1.1.0
+
+ bytes@3.1.2: {}
+
+ cache-manager@4.1.0:
+ dependencies:
+ async: 3.2.3
+ lodash.clonedeep: 4.5.0
+ lru-cache: 7.18.3
+
+ call-bind-apply-helpers@1.0.2:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
+ call-bind@1.0.8:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ get-intrinsic: 1.3.0
+ set-function-length: 1.2.2
+
+ call-bound@1.0.4:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ get-intrinsic: 1.3.0
+
+ callsites@3.1.0: {}
+
+ camelcase@5.3.1: {}
+
+ camelcase@6.3.0: {}
+
+ caniuse-lite@1.0.30001749: {}
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.6.2: {}
+
+ char-regex@1.0.2: {}
+
+ chardet@0.7.0: {}
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ chownr@2.0.0: {}
+
+ chrome-trace-event@1.0.4: {}
+
+ ci-info@3.9.0: {}
+
+ cjs-module-lexer@1.4.3: {}
+
+ class-transformer@0.5.1: {}
+
+ class-validator@0.14.2:
+ dependencies:
+ '@types/validator': 13.15.3
+ libphonenumber-js: 1.12.24
+ validator: 13.15.15
+
+ cli-cursor@3.1.0:
+ dependencies:
+ restore-cursor: 3.1.0
+
+ cli-spinners@2.9.2: {}
+
+ cli-table3@0.6.5:
+ dependencies:
+ string-width: 4.2.3
+ optionalDependencies:
+ '@colors/colors': 1.5.0
+
+ cli-width@3.0.0: {}
+
+ cli-width@4.1.0: {}
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ clone@1.0.4: {}
+
+ co@4.6.0: {}
+
+ collect-v8-coverage@1.0.2: {}
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ color-support@1.1.3: {}
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ commander@2.20.3: {}
+
+ commander@4.1.1: {}
+
+ comment-json@4.2.5:
+ dependencies:
+ array-timsort: 1.0.3
+ core-util-is: 1.0.3
+ esprima: 4.0.1
+ has-own-prop: 2.0.0
+ repeat-string: 1.6.1
+
+ component-emitter@1.3.1: {}
+
+ concat-map@0.0.1: {}
+
+ concat-stream@2.0.0:
+ dependencies:
+ buffer-from: 1.1.2
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ typedarray: 0.0.6
+
+ consola@2.15.3: {}
+
+ console-control-strings@1.1.0: {}
+
+ content-disposition@0.5.4:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ content-disposition@1.0.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ content-type@1.0.5: {}
+
+ convert-source-map@2.0.0: {}
+
+ cookie-signature@1.0.6: {}
+
+ cookie-signature@1.2.2: {}
+
+ cookie@0.7.1: {}
+
+ cookie@0.7.2: {}
+
+ cookiejar@2.1.4: {}
+
+ core-util-is@1.0.3: {}
+
+ cors@2.8.5:
+ dependencies:
+ object-assign: 4.1.1
+ vary: 1.1.2
+
+ cosmiconfig@8.3.6(typescript@5.7.2):
+ dependencies:
+ import-fresh: 3.3.1
+ js-yaml: 4.1.0
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ typescript: 5.7.2
+
+ create-jest@29.7.0(@types/node@20.19.20)(ts-node@10.9.2):
+ dependencies:
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ exit: 0.1.2
+ graceful-fs: 4.2.11
+ jest-config: 29.7.0(@types/node@20.19.20)(ts-node@10.9.2)
+ jest-util: 29.7.0
+ prompts: 2.4.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ create-require@1.1.1: {}
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ dayjs@1.11.18: {}
+
+ debug@2.6.9:
+ dependencies:
+ ms: 2.0.0
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ dedent@1.7.0: {}
+
+ deep-is@0.1.4: {}
+
+ deepmerge@4.3.1: {}
+
+ defaults@1.0.4:
+ dependencies:
+ clone: 1.0.4
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ delayed-stream@1.0.0: {}
+
+ delegates@1.0.0: {}
+
+ denque@2.1.0: {}
+
+ depd@2.0.0: {}
+
+ destroy@1.2.0: {}
+
+ detect-libc@2.1.2: {}
+
+ detect-newline@3.1.0: {}
+
+ dezalgo@1.0.4:
+ dependencies:
+ asap: 2.0.6
+ wrappy: 1.0.2
+
+ diff-sequences@29.6.3: {}
+
+ diff@4.0.2: {}
+
+ dir-glob@3.0.1:
+ dependencies:
+ path-type: 4.0.0
+
+ doctrine@3.0.0:
+ dependencies:
+ esutils: 2.0.3
+
+ dotenv-expand@10.0.0: {}
+
+ dotenv@16.4.5: {}
+
+ dotenv@16.6.1: {}
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ eastasianwidth@0.2.0: {}
+
+ ecdsa-sig-formatter@1.0.11:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ ee-first@1.1.1: {}
+
+ electron-to-chromium@1.5.234: {}
+
+ emittery@0.13.1: {}
+
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ encodeurl@1.0.2: {}
+
+ encodeurl@2.0.0: {}
+
+ enhanced-resolve@5.18.3:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.3.0
+
+ error-ex@1.3.4:
+ dependencies:
+ is-arrayish: 0.2.1
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-module-lexer@1.7.0: {}
+
+ es-object-atoms@1.1.1:
+ dependencies:
+ es-errors: 1.3.0
+
+ es-set-tostringtag@2.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ escalade@3.2.0: {}
+
+ escape-html@1.0.3: {}
+
+ escape-string-regexp@1.0.5: {}
+
+ escape-string-regexp@2.0.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eslint-config-prettier@9.1.2(eslint@8.57.1):
+ dependencies:
+ eslint: 8.57.1
+
+ eslint-plugin-prettier@5.5.4(eslint-config-prettier@9.1.2)(eslint@8.57.1)(prettier@3.6.2):
+ dependencies:
+ eslint: 8.57.1
+ eslint-config-prettier: 9.1.2(eslint@8.57.1)
+ prettier: 3.6.2
+ prettier-linter-helpers: 1.0.0
+ synckit: 0.11.11
+
+ eslint-scope@5.1.1:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 4.3.0
+
+ eslint-scope@7.2.2:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint@8.57.1:
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1)
+ '@eslint-community/regexpp': 4.12.1
+ '@eslint/eslintrc': 2.1.4
+ '@eslint/js': 8.57.1
+ '@humanwhocodes/config-array': 0.13.0
+ '@humanwhocodes/module-importer': 1.0.1
+ '@nodelib/fs.walk': 1.2.8
+ '@ungap/structured-clone': 1.3.0
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.3
+ doctrine: 3.0.0
+ escape-string-regexp: 4.0.0
+ eslint-scope: 7.2.2
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ esquery: 1.6.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 6.0.1
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ globals: 13.24.0
+ graphemer: 1.4.0
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ is-path-inside: 3.0.3
+ js-yaml: 4.1.0
+ json-stable-stringify-without-jsonify: 1.0.1
+ levn: 0.4.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ strip-ansi: 6.0.1
+ text-table: 0.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ espree@9.6.1:
+ dependencies:
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ eslint-visitor-keys: 3.4.3
+
+ esprima@4.0.1: {}
+
+ esquery@1.6.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ esrecurse@4.3.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ estraverse@4.3.0: {}
+
+ estraverse@5.3.0: {}
+
+ esutils@2.0.3: {}
+
+ etag@1.8.1: {}
+
+ events@3.3.0: {}
+
+ execa@5.1.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+
+ exit@0.1.2: {}
+
+ expect@29.7.0:
+ dependencies:
+ '@jest/expect-utils': 29.7.0
+ jest-get-type: 29.6.3
+ jest-matcher-utils: 29.7.0
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+
+ express@4.21.2:
+ dependencies:
+ accepts: 1.3.8
+ array-flatten: 1.1.1
+ body-parser: 1.20.3
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookie: 0.7.1
+ cookie-signature: 1.0.6
+ debug: 2.6.9
+ depd: 2.0.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 1.3.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ merge-descriptors: 1.0.3
+ methods: 1.1.2
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ path-to-regexp: 0.1.12
+ proxy-addr: 2.0.7
+ qs: 6.13.0
+ range-parser: 1.2.1
+ safe-buffer: 5.2.1
+ send: 0.19.0
+ serve-static: 1.16.2
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ type-is: 1.6.18
+ utils-merge: 1.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ express@5.1.0:
+ dependencies:
+ accepts: 2.0.0
+ body-parser: 2.2.0
+ content-disposition: 1.0.0
+ content-type: 1.0.5
+ cookie: 0.7.2
+ cookie-signature: 1.2.2
+ debug: 4.4.3
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 2.1.0
+ fresh: 2.0.0
+ http-errors: 2.0.0
+ merge-descriptors: 2.0.0
+ mime-types: 3.0.1
+ on-finished: 2.4.1
+ once: 1.4.0
+ parseurl: 1.3.3
+ proxy-addr: 2.0.7
+ qs: 6.14.0
+ range-parser: 1.2.1
+ router: 2.2.0
+ send: 1.2.0
+ serve-static: 2.2.0
+ statuses: 2.0.2
+ type-is: 2.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ external-editor@3.1.0:
+ dependencies:
+ chardet: 0.7.0
+ iconv-lite: 0.4.24
+ tmp: 0.0.33
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-diff@1.3.0: {}
+
+ fast-glob@3.3.3:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-levenshtein@2.0.6: {}
+
+ fast-safe-stringify@2.1.1: {}
+
+ fast-uri@3.1.0: {}
+
+ fastq@1.19.1:
+ dependencies:
+ reusify: 1.1.0
+
+ fb-watchman@2.0.2:
+ dependencies:
+ bser: 2.1.1
+
+ fflate@0.8.2: {}
+
+ figures@3.2.0:
+ dependencies:
+ escape-string-regexp: 1.0.5
+
+ file-entry-cache@6.0.1:
+ dependencies:
+ flat-cache: 3.2.0
+
+ file-type@20.4.1:
+ dependencies:
+ '@tokenizer/inflate': 0.2.7
+ strtok3: 10.3.4
+ token-types: 6.1.1
+ uint8array-extras: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ finalhandler@1.3.1:
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.1
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ finalhandler@2.1.0:
+ dependencies:
+ debug: 4.4.3
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ find-up@4.1.0:
+ dependencies:
+ locate-path: 5.0.0
+ path-exists: 4.0.0
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat-cache@3.2.0:
+ dependencies:
+ flatted: 3.3.3
+ keyv: 4.5.4
+ rimraf: 3.0.2
+
+ flatted@3.3.3: {}
+
+ follow-redirects@1.15.11: {}
+
+ for-each@0.3.5:
+ dependencies:
+ is-callable: 1.2.7
+
+ foreground-child@3.3.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
+
+ fork-ts-checker-webpack-plugin@9.0.2(typescript@5.7.2)(webpack@5.97.1):
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ chalk: 4.1.2
+ chokidar: 3.6.0
+ cosmiconfig: 8.3.6(typescript@5.7.2)
+ deepmerge: 4.3.1
+ fs-extra: 10.1.0
+ memfs: 3.5.3
+ minimatch: 3.1.2
+ node-abort-controller: 3.1.1
+ schema-utils: 3.3.0
+ semver: 7.7.3
+ tapable: 2.3.0
+ typescript: 5.7.2
+ webpack: 5.97.1
+
+ form-data@4.0.4:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ es-set-tostringtag: 2.1.0
+ hasown: 2.0.2
+ mime-types: 2.1.35
+
+ formidable@2.1.5:
+ dependencies:
+ '@paralleldrive/cuid2': 2.2.2
+ dezalgo: 1.0.4
+ once: 1.4.0
+ qs: 6.14.0
+
+ forwarded@0.2.0: {}
+
+ fresh@0.5.2: {}
+
+ fresh@2.0.0: {}
+
+ fs-extra@10.1.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
+ fs-minipass@2.1.0:
+ dependencies:
+ minipass: 3.3.6
+
+ fs-monkey@1.1.0: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ gauge@3.0.2:
+ dependencies:
+ aproba: 2.1.0
+ color-support: 1.1.3
+ console-control-strings: 1.1.0
+ has-unicode: 2.0.1
+ object-assign: 4.1.1
+ signal-exit: 3.0.7
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wide-align: 1.1.5
+
+ generate-function@2.3.1:
+ dependencies:
+ is-property: 1.0.2
+
+ gensync@1.0.0-beta.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-intrinsic@1.3.0:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ function-bind: 1.1.2
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ math-intrinsics: 1.1.0
+
+ get-package-type@0.1.0: {}
+
+ get-proto@1.0.1:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.1
+
+ get-stream@6.0.1: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-to-regexp@0.4.1: {}
+
+ glob@10.4.5:
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
+
+ glob@7.2.3:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ globals@13.24.0:
+ dependencies:
+ type-fest: 0.20.2
+
+ globby@11.1.0:
+ dependencies:
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.3.3
+ ignore: 5.3.2
+ merge2: 1.4.1
+ slash: 3.0.0
+
+ gopd@1.2.0: {}
+
+ graceful-fs@4.2.11: {}
+
+ graphemer@1.4.0: {}
+
+ handlebars@4.7.8:
+ dependencies:
+ minimist: 1.2.8
+ neo-async: 2.6.2
+ source-map: 0.6.1
+ wordwrap: 1.0.0
+ optionalDependencies:
+ uglify-js: 3.19.3
+
+ has-flag@4.0.0: {}
+
+ has-own-prop@2.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.1
+
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
+ has-unicode@2.0.1: {}
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ html-escaper@2.0.2: {}
+
+ http-errors@2.0.0:
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+
+ https-proxy-agent@5.0.1:
+ dependencies:
+ agent-base: 6.0.2
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ human-signals@2.1.0: {}
+
+ iconv-lite@0.4.24:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ iconv-lite@0.6.3:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ iconv-lite@0.7.0:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ ieee754@1.2.1: {}
+
+ ignore@5.3.2: {}
+
+ import-fresh@3.3.1:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
+ import-local@3.2.0:
+ dependencies:
+ pkg-dir: 4.2.0
+ resolve-cwd: 3.0.0
+
+ imurmurhash@0.1.4: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ inquirer@8.2.6:
+ dependencies:
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-width: 3.0.0
+ external-editor: 3.1.0
+ figures: 3.2.0
+ lodash: 4.17.21
+ mute-stream: 0.0.8
+ ora: 5.4.1
+ run-async: 2.4.1
+ rxjs: 7.8.2
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ through: 2.3.8
+ wrap-ansi: 6.2.0
+
+ inquirer@9.2.15:
+ dependencies:
+ '@ljharb/through': 2.3.14
+ ansi-escapes: 4.3.2
+ chalk: 5.6.2
+ cli-cursor: 3.1.0
+ cli-width: 4.1.0
+ external-editor: 3.1.0
+ figures: 3.2.0
+ lodash: 4.17.21
+ mute-stream: 1.0.0
+ ora: 5.4.1
+ run-async: 3.0.0
+ rxjs: 7.8.2
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 6.2.0
+
+ install@0.13.0: {}
+
+ ipaddr.js@1.9.1: {}
+
+ is-arrayish@0.2.1: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-callable@1.2.7: {}
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-generator-fn@2.1.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-interactive@1.0.0: {}
+
+ is-number@7.0.0: {}
+
+ is-path-inside@3.0.3: {}
+
+ is-promise@4.0.0: {}
+
+ is-property@1.0.2: {}
+
+ is-stream@2.0.1: {}
+
+ is-typed-array@1.1.15:
+ dependencies:
+ which-typed-array: 1.1.19
+
+ is-unicode-supported@0.1.0: {}
+
+ isarray@2.0.5: {}
+
+ isexe@2.0.0: {}
+
+ istanbul-lib-coverage@3.2.2: {}
+
+ istanbul-lib-instrument@5.2.1:
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/parser': 7.28.4
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-coverage: 3.2.2
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ istanbul-lib-instrument@6.0.3:
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/parser': 7.28.4
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-coverage: 3.2.2
+ semver: 7.7.3
+ transitivePeerDependencies:
+ - supports-color
+
+ istanbul-lib-report@3.0.1:
+ dependencies:
+ istanbul-lib-coverage: 3.2.2
+ make-dir: 4.0.0
+ supports-color: 7.2.0
+
+ istanbul-lib-source-maps@4.0.1:
+ dependencies:
+ debug: 4.4.3
+ istanbul-lib-coverage: 3.2.2
+ source-map: 0.6.1
+ transitivePeerDependencies:
+ - supports-color
+
+ istanbul-reports@3.2.0:
+ dependencies:
+ html-escaper: 2.0.2
+ istanbul-lib-report: 3.0.1
+
+ iterare@1.2.1: {}
+
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ jest-changed-files@29.7.0:
+ dependencies:
+ execa: 5.1.1
+ jest-util: 29.7.0
+ p-limit: 3.1.0
+
+ jest-circus@29.7.0:
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/expect': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 20.19.20
+ chalk: 4.1.2
+ co: 4.6.0
+ dedent: 1.7.0
+ is-generator-fn: 2.1.0
+ jest-each: 29.7.0
+ jest-matcher-utils: 29.7.0
+ jest-message-util: 29.7.0
+ jest-runtime: 29.7.0
+ jest-snapshot: 29.7.0
+ jest-util: 29.7.0
+ p-limit: 3.1.0
+ pretty-format: 29.7.0
+ pure-rand: 6.1.0
+ slash: 3.0.0
+ stack-utils: 2.0.6
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+
+ jest-cli@29.7.0(@types/node@20.19.20)(ts-node@10.9.2):
+ dependencies:
+ '@jest/core': 29.7.0(ts-node@10.9.2)
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ create-jest: 29.7.0(@types/node@20.19.20)(ts-node@10.9.2)
+ exit: 0.1.2
+ import-local: 3.2.0
+ jest-config: 29.7.0(@types/node@20.19.20)(ts-node@10.9.2)
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ jest-config@29.7.0(@types/node@20.19.20)(ts-node@10.9.2):
+ dependencies:
+ '@babel/core': 7.28.4
+ '@jest/test-sequencer': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 20.19.20
+ babel-jest: 29.7.0(@babel/core@7.28.4)
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ deepmerge: 4.3.1
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ jest-circus: 29.7.0
+ jest-environment-node: 29.7.0
+ jest-get-type: 29.6.3
+ jest-regex-util: 29.6.3
+ jest-resolve: 29.7.0
+ jest-runner: 29.7.0
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ micromatch: 4.0.8
+ parse-json: 5.2.0
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ strip-json-comments: 3.1.1
+ ts-node: 10.9.2(@types/node@20.19.20)(typescript@5.9.3)
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+
+ jest-diff@29.7.0:
+ dependencies:
+ chalk: 4.1.2
+ diff-sequences: 29.6.3
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+
+ jest-docblock@29.7.0:
+ dependencies:
+ detect-newline: 3.1.0
+
+ jest-each@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ chalk: 4.1.2
+ jest-get-type: 29.6.3
+ jest-util: 29.7.0
+ pretty-format: 29.7.0
+
+ jest-environment-node@29.7.0:
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/fake-timers': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 20.19.20
+ jest-mock: 29.7.0
+ jest-util: 29.7.0
+
+ jest-get-type@29.6.3: {}
+
+ jest-haste-map@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/graceful-fs': 4.1.9
+ '@types/node': 20.19.20
+ anymatch: 3.1.3
+ fb-watchman: 2.0.2
+ graceful-fs: 4.2.11
+ jest-regex-util: 29.6.3
+ jest-util: 29.7.0
+ jest-worker: 29.7.0
+ micromatch: 4.0.8
+ walker: 1.0.8
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ jest-leak-detector@29.7.0:
+ dependencies:
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+
+ jest-matcher-utils@29.7.0:
+ dependencies:
+ chalk: 4.1.2
+ jest-diff: 29.7.0
+ jest-get-type: 29.6.3
+ pretty-format: 29.7.0
+
+ jest-message-util@29.7.0:
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@jest/types': 29.6.3
+ '@types/stack-utils': 2.0.3
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ micromatch: 4.0.8
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ stack-utils: 2.0.6
+
+ jest-mock@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/node': 20.19.20
+ jest-util: 29.7.0
+
+ jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
+ dependencies:
+ jest-resolve: 29.7.0
+
+ jest-regex-util@29.6.3: {}
+
+ jest-resolve-dependencies@29.7.0:
+ dependencies:
+ jest-regex-util: 29.6.3
+ jest-snapshot: 29.7.0
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-resolve@29.7.0:
+ dependencies:
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0)
+ jest-util: 29.7.0
+ jest-validate: 29.7.0
+ resolve: 1.22.10
+ resolve.exports: 2.0.3
+ slash: 3.0.0
+
+ jest-runner@29.7.0:
+ dependencies:
+ '@jest/console': 29.7.0
+ '@jest/environment': 29.7.0
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 20.19.20
+ chalk: 4.1.2
+ emittery: 0.13.1
+ graceful-fs: 4.2.11
+ jest-docblock: 29.7.0
+ jest-environment-node: 29.7.0
+ jest-haste-map: 29.7.0
+ jest-leak-detector: 29.7.0
+ jest-message-util: 29.7.0
+ jest-resolve: 29.7.0
+ jest-runtime: 29.7.0
+ jest-util: 29.7.0
+ jest-watcher: 29.7.0
+ jest-worker: 29.7.0
+ p-limit: 3.1.0
+ source-map-support: 0.5.13
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-runtime@29.7.0:
+ dependencies:
+ '@jest/environment': 29.7.0
+ '@jest/fake-timers': 29.7.0
+ '@jest/globals': 29.7.0
+ '@jest/source-map': 29.6.3
+ '@jest/test-result': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 20.19.20
+ chalk: 4.1.2
+ cjs-module-lexer: 1.4.3
+ collect-v8-coverage: 1.0.2
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-message-util: 29.7.0
+ jest-mock: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-resolve: 29.7.0
+ jest-snapshot: 29.7.0
+ jest-util: 29.7.0
+ slash: 3.0.0
+ strip-bom: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-snapshot@29.7.0:
+ dependencies:
+ '@babel/core': 7.28.4
+ '@babel/generator': 7.28.3
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4)
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4)
+ '@babel/types': 7.28.4
+ '@jest/expect-utils': 29.7.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.4)
+ chalk: 4.1.2
+ expect: 29.7.0
+ graceful-fs: 4.2.11
+ jest-diff: 29.7.0
+ jest-get-type: 29.6.3
+ jest-matcher-utils: 29.7.0
+ jest-message-util: 29.7.0
+ jest-util: 29.7.0
+ natural-compare: 1.4.0
+ pretty-format: 29.7.0
+ semver: 7.7.3
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-util@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/node': 20.19.20
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ graceful-fs: 4.2.11
+ picomatch: 2.3.1
+
+ jest-validate@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ camelcase: 6.3.0
+ chalk: 4.1.2
+ jest-get-type: 29.6.3
+ leven: 3.1.0
+ pretty-format: 29.7.0
+
+ jest-watcher@29.7.0:
+ dependencies:
+ '@jest/test-result': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 20.19.20
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ emittery: 0.13.1
+ jest-util: 29.7.0
+ string-length: 4.0.2
+
+ jest-worker@27.5.1:
+ dependencies:
+ '@types/node': 20.19.20
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ jest-worker@29.7.0:
+ dependencies:
+ '@types/node': 20.19.20
+ jest-util: 29.7.0
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ jest@29.7.0(@types/node@20.19.20)(ts-node@10.9.2):
+ dependencies:
+ '@jest/core': 29.7.0(ts-node@10.9.2)
+ '@jest/types': 29.6.3
+ import-local: 3.2.0
+ jest-cli: 29.7.0(@types/node@20.19.20)(ts-node@10.9.2)
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
+ js-tokens@4.0.0: {}
+
+ js-yaml@3.14.1:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ jsesc@3.1.0: {}
+
+ json-buffer@3.0.1: {}
+
+ json-parse-even-better-errors@2.3.1: {}
+
+ json-schema-traverse@0.4.1: {}
+
+ json-schema-traverse@1.0.0: {}
+
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
+ json5@2.2.3: {}
+
+ jsonc-parser@3.2.1: {}
+
+ jsonc-parser@3.3.1: {}
+
+ jsonfile@6.2.0:
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
+ jsonwebtoken@9.0.2:
+ dependencies:
+ jws: 3.2.2
+ lodash.includes: 4.3.0
+ lodash.isboolean: 3.0.3
+ lodash.isinteger: 4.0.4
+ lodash.isnumber: 3.0.3
+ lodash.isplainobject: 4.0.6
+ lodash.isstring: 4.0.1
+ lodash.once: 4.1.1
+ ms: 2.1.3
+ semver: 7.7.3
+
+ jwa@1.4.2:
+ dependencies:
+ buffer-equal-constant-time: 1.0.1
+ ecdsa-sig-formatter: 1.0.11
+ safe-buffer: 5.2.1
+
+ jws@3.2.2:
+ dependencies:
+ jwa: 1.4.2
+ safe-buffer: 5.2.1
+
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
+ kleur@3.0.3: {}
+
+ leven@3.1.0: {}
+
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+
+ libphonenumber-js@1.12.24: {}
+
+ lines-and-columns@1.2.4: {}
+
+ loader-runner@4.3.1: {}
+
+ locate-path@5.0.0:
+ dependencies:
+ p-locate: 4.1.0
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ lodash.clonedeep@4.5.0: {}
+
+ lodash.includes@4.3.0: {}
+
+ lodash.isboolean@3.0.3: {}
+
+ lodash.isinteger@4.0.4: {}
+
+ lodash.isnumber@3.0.3: {}
+
+ lodash.isplainobject@4.0.6: {}
+
+ lodash.isstring@4.0.1: {}
+
+ lodash.memoize@4.1.2: {}
+
+ lodash.merge@4.6.2: {}
+
+ lodash.once@4.1.1: {}
+
+ lodash@4.17.21: {}
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ long@5.3.2: {}
+
+ lru-cache@10.4.3: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ lru-cache@7.18.3: {}
+
+ lru.min@1.1.2: {}
+
+ magic-string@0.30.8:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ make-dir@3.1.0:
+ dependencies:
+ semver: 6.3.1
+
+ make-dir@4.0.0:
+ dependencies:
+ semver: 7.7.3
+
+ make-error@1.3.6: {}
+
+ makeerror@1.0.12:
+ dependencies:
+ tmpl: 1.0.5
+
+ math-intrinsics@1.1.0: {}
+
+ media-typer@0.3.0: {}
+
+ media-typer@1.1.0: {}
+
+ memfs@3.5.3:
+ dependencies:
+ fs-monkey: 1.1.0
+
+ merge-descriptors@1.0.3: {}
+
+ merge-descriptors@2.0.0: {}
+
+ merge-stream@2.0.0: {}
+
+ merge2@1.4.1: {}
+
+ methods@1.1.2: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ mime-db@1.52.0: {}
+
+ mime-db@1.54.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ mime-types@3.0.1:
+ dependencies:
+ mime-db: 1.54.0
+
+ mime@1.6.0: {}
+
+ mime@2.6.0: {}
+
+ mimic-fn@2.1.0: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.12
+
+ minimatch@9.0.3:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minimist@1.2.8: {}
+
+ minipass@3.3.6:
+ dependencies:
+ yallist: 4.0.0
+
+ minipass@5.0.0: {}
+
+ minipass@7.1.2: {}
+
+ minizlib@2.1.2:
+ dependencies:
+ minipass: 3.3.6
+ yallist: 4.0.0
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mkdirp@1.0.4: {}
+
+ ms@2.0.0: {}
+
+ ms@2.1.3: {}
+
+ multer@2.0.2:
+ dependencies:
+ append-field: 1.0.0
+ busboy: 1.6.0
+ concat-stream: 2.0.0
+ mkdirp: 0.5.6
+ object-assign: 4.1.1
+ type-is: 1.6.18
+ xtend: 4.0.2
+
+ mute-stream@0.0.8: {}
+
+ mute-stream@1.0.0: {}
+
+ mysql2@3.15.2:
+ dependencies:
+ aws-ssl-profiles: 1.1.2
+ denque: 2.1.0
+ generate-function: 2.3.1
+ iconv-lite: 0.7.0
+ long: 5.3.2
+ lru.min: 1.1.2
+ named-placeholders: 1.1.3
+ seq-queue: 0.0.5
+ sqlstring: 2.3.3
+
+ named-placeholders@1.1.3:
+ dependencies:
+ lru-cache: 7.18.3
+
+ natural-compare@1.4.0: {}
+
+ negotiator@0.6.3: {}
+
+ negotiator@1.0.0: {}
+
+ neo-async@2.6.2: {}
+
+ node-abort-controller@3.1.1: {}
+
+ node-addon-api@5.1.0: {}
+
+ node-emoji@1.11.0:
+ dependencies:
+ lodash: 4.17.21
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-int64@0.4.0: {}
+
+ node-releases@2.0.23: {}
+
+ nopt@5.0.0:
+ dependencies:
+ abbrev: 1.1.1
+
+ normalize-path@3.0.0: {}
+
+ npm-run-path@4.0.1:
+ dependencies:
+ path-key: 3.1.1
+
+ npmlog@5.0.1:
+ dependencies:
+ are-we-there-yet: 2.0.0
+ console-control-strings: 1.1.0
+ gauge: 3.0.2
+ set-blocking: 2.0.0
+
+ oauth@0.10.2: {}
+
+ object-assign@4.1.1: {}
+
+ object-inspect@1.13.4: {}
+
+ on-finished@2.4.1:
+ dependencies:
+ ee-first: 1.1.1
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ optionator@0.9.4:
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
+
+ ora@5.4.1:
+ dependencies:
+ bl: 4.1.0
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-spinners: 2.9.2
+ is-interactive: 1.0.0
+ is-unicode-supported: 0.1.0
+ log-symbols: 4.1.0
+ strip-ansi: 6.0.1
+ wcwidth: 1.0.1
+
+ os-tmpdir@1.0.2: {}
+
+ p-limit@2.3.0:
+ dependencies:
+ p-try: 2.2.0
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@4.1.0:
+ dependencies:
+ p-limit: 2.3.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ p-try@2.2.0: {}
+
+ package-json-from-dist@1.0.1: {}
+
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
+
+ parse-json@5.2.0:
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ error-ex: 1.3.4
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
+ parseurl@1.3.3: {}
+
+ passport-github2@0.1.12:
+ dependencies:
+ passport-oauth2: 1.8.0
+
+ passport-jwt@4.0.1:
+ dependencies:
+ jsonwebtoken: 9.0.2
+ passport-strategy: 1.0.0
+
+ passport-local@1.0.0:
+ dependencies:
+ passport-strategy: 1.0.0
+
+ passport-oauth2@1.8.0:
+ dependencies:
+ base64url: 3.0.1
+ oauth: 0.10.2
+ passport-strategy: 1.0.0
+ uid2: 0.0.4
+ utils-merge: 1.0.1
+
+ passport-strategy@1.0.0: {}
+
+ passport@0.6.0:
+ dependencies:
+ passport-strategy: 1.0.0
+ pause: 0.0.1
+ utils-merge: 1.0.1
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ path-key@3.1.1: {}
+
+ path-parse@1.0.7: {}
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.2
+
+ path-to-regexp@0.1.12: {}
+
+ path-to-regexp@3.3.0: {}
+
+ path-to-regexp@8.2.0: {}
+
+ path-to-regexp@8.3.0: {}
+
+ path-type@4.0.0: {}
+
+ pause@0.0.1: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ picomatch@4.0.1: {}
+
+ pirates@4.0.7: {}
+
+ pkg-dir@4.2.0:
+ dependencies:
+ find-up: 4.1.0
+
+ pluralize@8.0.0: {}
+
+ possible-typed-array-names@1.1.0: {}
+
+ prelude-ls@1.2.1: {}
+
+ prettier-linter-helpers@1.0.0:
+ dependencies:
+ fast-diff: 1.3.0
+
+ prettier@3.6.2: {}
+
+ pretty-format@29.7.0:
+ dependencies:
+ '@jest/schemas': 29.6.3
+ ansi-styles: 5.2.0
+ react-is: 18.3.1
+
+ prompts@2.4.2:
+ dependencies:
+ kleur: 3.0.3
+ sisteransi: 1.0.5
+
+ proxy-addr@2.0.7:
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+
+ proxy-from-env@1.1.0: {}
+
+ punycode@2.3.1: {}
+
+ pure-rand@6.1.0: {}
+
+ qs@6.13.0:
+ dependencies:
+ side-channel: 1.1.0
+
+ qs@6.14.0:
+ dependencies:
+ side-channel: 1.1.0
+
+ queue-microtask@1.2.3: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ range-parser@1.2.1: {}
+
+ raw-body@2.5.2:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ unpipe: 1.0.0
+
+ raw-body@3.0.1:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.7.0
+ unpipe: 1.0.0
+
+ react-is@18.3.1: {}
+
+ readable-stream@3.6.2:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ reflect-metadata@0.1.14: {}
+
+ repeat-string@1.6.1: {}
+
+ require-directory@2.1.1: {}
+
+ require-from-string@2.0.2: {}
+
+ resolve-cwd@3.0.0:
+ dependencies:
+ resolve-from: 5.0.0
+
+ resolve-from@4.0.0: {}
+
+ resolve-from@5.0.0: {}
+
+ resolve.exports@2.0.3: {}
+
+ resolve@1.22.10:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ restore-cursor@3.1.0:
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+
+ reusify@1.1.0: {}
+
+ rimraf@3.0.2:
+ dependencies:
+ glob: 7.2.3
+
+ router@2.2.0:
+ dependencies:
+ debug: 4.4.3
+ depd: 2.0.0
+ is-promise: 4.0.0
+ parseurl: 1.3.3
+ path-to-regexp: 8.3.0
+ transitivePeerDependencies:
+ - supports-color
+
+ run-async@2.4.1: {}
+
+ run-async@3.0.0: {}
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ rxjs@7.8.1:
+ dependencies:
+ tslib: 2.8.1
+
+ rxjs@7.8.2:
+ dependencies:
+ tslib: 2.8.1
+
+ safe-buffer@5.2.1: {}
+
+ safer-buffer@2.1.2: {}
+
+ schema-utils@3.3.0:
+ dependencies:
+ '@types/json-schema': 7.0.15
+ ajv: 6.12.6
+ ajv-keywords: 3.5.2(ajv@6.12.6)
+
+ schema-utils@4.3.3:
+ dependencies:
+ '@types/json-schema': 7.0.15
+ ajv: 8.17.1
+ ajv-formats: 2.1.1(ajv@8.17.1)
+ ajv-keywords: 5.1.0(ajv@8.17.1)
+
+ semver@6.3.1: {}
+
+ semver@7.7.3: {}
+
+ send@0.19.0:
+ dependencies:
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ mime: 1.6.0
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ send@1.2.0:
+ dependencies:
+ debug: 4.4.3
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 2.0.0
+ http-errors: 2.0.0
+ mime-types: 3.0.1
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ seq-queue@0.0.5: {}
+
+ serialize-javascript@6.0.2:
+ dependencies:
+ randombytes: 2.1.0
+
+ serve-static@1.16.2:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.19.0
+ transitivePeerDependencies:
+ - supports-color
+
+ serve-static@2.2.0:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 1.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ set-blocking@2.0.0: {}
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.3.0
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+
+ setprototypeof@1.2.0: {}
+
+ sha.js@2.4.12:
+ dependencies:
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+ to-buffer: 1.2.2
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ side-channel-list@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-map@1.0.1:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-weakmap@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-map: 1.0.1
+
+ side-channel@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-list: 1.0.0
+ side-channel-map: 1.0.1
+ side-channel-weakmap: 1.0.2
+
+ signal-exit@3.0.7: {}
+
+ signal-exit@4.1.0: {}
+
+ sisteransi@1.0.5: {}
+
+ slash@3.0.0: {}
+
+ source-map-support@0.5.13:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ source-map@0.7.4: {}
+
+ source-map@0.7.6: {}
+
+ sprintf-js@1.0.3: {}
+
+ sql-highlight@6.1.0: {}
+
+ sqlstring@2.3.3: {}
+
+ stack-utils@2.0.6:
+ dependencies:
+ escape-string-regexp: 2.0.0
+
+ statuses@2.0.1: {}
+
+ statuses@2.0.2: {}
+
+ streamsearch@1.1.0: {}
+
+ string-length@4.0.2:
+ dependencies:
+ char-regex: 1.0.2
+ strip-ansi: 6.0.1
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.2
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.1.2:
+ dependencies:
+ ansi-regex: 6.2.2
+
+ strip-bom@3.0.0: {}
+
+ strip-bom@4.0.0: {}
+
+ strip-final-newline@2.0.0: {}
+
+ strip-json-comments@3.1.1: {}
+
+ strtok3@10.3.4:
+ dependencies:
+ '@tokenizer/token': 0.3.0
+
+ superagent@8.1.2:
+ dependencies:
+ component-emitter: 1.3.1
+ cookiejar: 2.1.4
+ debug: 4.4.3
+ fast-safe-stringify: 2.1.1
+ form-data: 4.0.4
+ formidable: 2.1.5
+ methods: 1.1.2
+ mime: 2.6.0
+ qs: 6.14.0
+ semver: 7.7.3
+ transitivePeerDependencies:
+ - supports-color
+
+ supertest@6.3.4:
+ dependencies:
+ methods: 1.1.2
+ superagent: 8.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ swagger-ui-dist@5.21.0:
+ dependencies:
+ '@scarf/scarf': 1.4.0
+
+ swagger-ui-dist@5.29.4:
+ dependencies:
+ '@scarf/scarf': 1.4.0
+
+ swagger-ui-express@5.0.1(express@5.1.0):
+ dependencies:
+ express: 5.1.0
+ swagger-ui-dist: 5.29.4
+
+ symbol-observable@4.0.0: {}
+
+ synckit@0.11.11:
+ dependencies:
+ '@pkgr/core': 0.2.9
+
+ tapable@2.3.0: {}
+
+ tar@6.2.1:
+ dependencies:
+ chownr: 2.0.0
+ fs-minipass: 2.1.0
+ minipass: 5.0.0
+ minizlib: 2.1.2
+ mkdirp: 1.0.4
+ yallist: 4.0.0
+
+ terser-webpack-plugin@5.3.14(webpack@5.102.1):
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ jest-worker: 27.5.1
+ schema-utils: 4.3.3
+ serialize-javascript: 6.0.2
+ terser: 5.44.0
+ webpack: 5.102.1
+
+ terser-webpack-plugin@5.3.14(webpack@5.97.1):
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ jest-worker: 27.5.1
+ schema-utils: 4.3.3
+ serialize-javascript: 6.0.2
+ terser: 5.44.0
+ webpack: 5.97.1
+
+ terser@5.44.0:
+ dependencies:
+ '@jridgewell/source-map': 0.3.11
+ acorn: 8.15.0
+ commander: 2.20.3
+ source-map-support: 0.5.21
+
+ test-exclude@6.0.0:
+ dependencies:
+ '@istanbuljs/schema': 0.1.3
+ glob: 7.2.3
+ minimatch: 3.1.2
+
+ text-table@0.2.0: {}
+
+ through@2.3.8: {}
+
+ tmp@0.0.33:
+ dependencies:
+ os-tmpdir: 1.0.2
+
+ tmpl@1.0.5: {}
+
+ to-buffer@1.2.2:
+ dependencies:
+ isarray: 2.0.5
+ safe-buffer: 5.2.1
+ typed-array-buffer: 1.0.3
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toidentifier@1.0.1: {}
+
+ token-types@6.1.1:
+ dependencies:
+ '@borewit/text-codec': 0.1.1
+ '@tokenizer/token': 0.3.0
+ ieee754: 1.2.1
+
+ tr46@0.0.3: {}
+
+ tree-kill@1.2.2: {}
+
+ ts-api-utils@1.4.3(typescript@5.9.3):
+ dependencies:
+ typescript: 5.9.3
+
+ ts-jest@29.4.5(@babel/core@7.28.4)(jest@29.7.0)(typescript@5.9.3):
+ dependencies:
+ '@babel/core': 7.28.4
+ bs-logger: 0.2.6
+ fast-json-stable-stringify: 2.1.0
+ handlebars: 4.7.8
+ jest: 29.7.0(@types/node@20.19.20)(ts-node@10.9.2)
+ json5: 2.2.3
+ lodash.memoize: 4.1.2
+ make-error: 1.3.6
+ semver: 7.7.3
+ type-fest: 4.41.0
+ typescript: 5.9.3
+ yargs-parser: 21.1.1
+
+ ts-loader@9.5.4(typescript@5.9.3)(webpack@5.102.1):
+ dependencies:
+ chalk: 4.1.2
+ enhanced-resolve: 5.18.3
+ micromatch: 4.0.8
+ semver: 7.7.3
+ source-map: 0.7.6
+ typescript: 5.9.3
+ webpack: 5.102.1
+
+ ts-node@10.9.2(@types/node@20.19.20)(typescript@5.9.3):
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.11
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 20.19.20
+ acorn: 8.15.0
+ acorn-walk: 8.3.4
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.9.3
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+
+ tsconfig-paths-webpack-plugin@4.2.0:
+ dependencies:
+ chalk: 4.1.2
+ enhanced-resolve: 5.18.3
+ tapable: 2.3.0
+ tsconfig-paths: 4.2.0
+
+ tsconfig-paths@4.2.0:
+ dependencies:
+ json5: 2.2.3
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+
+ tslib@2.8.1: {}
+
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+
+ type-detect@4.0.8: {}
+
+ type-fest@0.20.2: {}
+
+ type-fest@0.21.3: {}
+
+ type-fest@4.41.0: {}
+
+ type-is@1.6.18:
+ dependencies:
+ media-typer: 0.3.0
+ mime-types: 2.1.35
+
+ type-is@2.0.1:
+ dependencies:
+ content-type: 1.0.5
+ media-typer: 1.1.0
+ mime-types: 3.0.1
+
+ typed-array-buffer@1.0.3:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-typed-array: 1.1.15
+
+ typedarray@0.0.6: {}
+
+ typeorm@0.3.27(mysql2@3.15.2)(reflect-metadata@0.1.14)(ts-node@10.9.2):
dependencies:
'@sqltools/formatter': 1.2.5
ansis: 3.17.0
@@ -6072,149 +7197,78 @@ packages:
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
- dev: false
- /typescript@5.7.2:
- resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==}
- engines: {node: '>=14.17'}
- hasBin: true
- dev: true
+ typescript@5.7.2: {}
- /typescript@5.9.3:
- resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
- engines: {node: '>=14.17'}
- hasBin: true
+ typescript@5.9.3: {}
- /uglify-js@3.19.3:
- resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
- engines: {node: '>=0.8.0'}
- hasBin: true
- requiresBuild: true
- dev: true
+ uglify-js@3.19.3:
optional: true
- /uid2@0.0.4:
- resolution: {integrity: sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==}
- dev: false
+ uid2@0.0.4: {}
- /uid@2.0.2:
- resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==}
- engines: {node: '>=8'}
+ uid@2.0.2:
dependencies:
'@lukeed/csprng': 1.1.0
- /uint8array-extras@1.5.0:
- resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==}
- engines: {node: '>=18'}
+ uint8array-extras@1.5.0: {}
- /undici-types@6.21.0:
- resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+ undici-types@6.21.0: {}
- /universalify@2.0.1:
- resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
- engines: {node: '>= 10.0.0'}
- dev: true
+ universalify@2.0.1: {}
- /unpipe@1.0.0:
- resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
- engines: {node: '>= 0.8'}
+ unpipe@1.0.0: {}
- /update-browserslist-db@1.1.3(browserslist@4.26.3):
- resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
- hasBin: true
- peerDependencies:
- browserslist: '>= 4.21.0'
+ update-browserslist-db@1.1.3(browserslist@4.26.3):
dependencies:
browserslist: 4.26.3
escalade: 3.2.0
picocolors: 1.1.1
- dev: true
- /uri-js@4.4.1:
- resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ uri-js@4.4.1:
dependencies:
punycode: 2.3.1
- dev: true
- /util-deprecate@1.0.2:
- resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ util-deprecate@1.0.2: {}
- /utils-merge@1.0.1:
- resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
- engines: {node: '>= 0.4.0'}
+ utils-merge@1.0.1: {}
- /uuid@11.1.0:
- resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
- hasBin: true
- dev: false
+ uuid@11.1.0: {}
- /uuid@9.0.1:
- resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
- hasBin: true
- dev: false
+ uuid@9.0.1: {}
- /v8-compile-cache-lib@3.0.1:
- resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+ v8-compile-cache-lib@3.0.1: {}
- /v8-to-istanbul@9.3.0:
- resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
- engines: {node: '>=10.12.0'}
+ v8-to-istanbul@9.3.0:
dependencies:
'@jridgewell/trace-mapping': 0.3.31
'@types/istanbul-lib-coverage': 2.0.6
convert-source-map: 2.0.0
- dev: true
- /validator@13.15.15:
- resolution: {integrity: sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==}
- engines: {node: '>= 0.10'}
+ validator@13.15.15: {}
- /vary@1.1.2:
- resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
- engines: {node: '>= 0.8'}
+ vary@1.1.2: {}
- /walker@1.0.8:
- resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
+ walker@1.0.8:
dependencies:
makeerror: 1.0.12
- dev: true
- /watchpack@2.4.4:
- resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==}
- engines: {node: '>=10.13.0'}
+ watchpack@2.4.4:
dependencies:
glob-to-regexp: 0.4.1
graceful-fs: 4.2.11
- dev: true
- /wcwidth@1.0.1:
- resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+ wcwidth@1.0.1:
dependencies:
defaults: 1.0.4
- dev: true
- /webidl-conversions@3.0.1:
- resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+ webidl-conversions@3.0.1: {}
- /webpack-node-externals@3.0.0:
- resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==}
- engines: {node: '>=6'}
- dev: true
+ webpack-node-externals@3.0.0: {}
- /webpack-sources@3.3.3:
- resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==}
- engines: {node: '>=10.13.0'}
- dev: true
+ webpack-sources@3.3.3: {}
- /webpack@5.102.1:
- resolution: {integrity: sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==}
- engines: {node: '>=10.13.0'}
- hasBin: true
- peerDependencies:
- webpack-cli: '*'
- peerDependenciesMeta:
- webpack-cli:
- optional: true
+ webpack@5.102.1:
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.8
@@ -6245,17 +7299,8 @@ packages:
- '@swc/core'
- esbuild
- uglify-js
- dev: true
- /webpack@5.97.1:
- resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==}
- engines: {node: '>=10.13.0'}
- hasBin: true
- peerDependencies:
- webpack-cli: '*'
- peerDependenciesMeta:
- webpack-cli:
- optional: true
+ webpack@5.97.1:
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.8
@@ -6284,17 +7329,13 @@ packages:
- '@swc/core'
- esbuild
- uglify-js
- dev: true
- /whatwg-url@5.0.0:
- resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+ whatwg-url@5.0.0:
dependencies:
tr46: 0.0.3
webidl-conversions: 3.0.1
- /which-typed-array@1.1.19:
- resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
- engines: {node: '>= 0.4'}
+ which-typed-array@1.1.19:
dependencies:
available-typed-arrays: 1.0.7
call-bind: 1.0.8
@@ -6303,89 +7344,55 @@ packages:
get-proto: 1.0.1
gopd: 1.2.0
has-tostringtag: 1.0.2
- dev: false
- /which@2.0.2:
- resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
- engines: {node: '>= 8'}
- hasBin: true
+ which@2.0.2:
dependencies:
isexe: 2.0.0
- /wide-align@1.1.5:
- resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
+ wide-align@1.1.5:
dependencies:
string-width: 4.2.3
- dev: false
- /word-wrap@1.2.5:
- resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
- engines: {node: '>=0.10.0'}
- dev: true
+ word-wrap@1.2.5: {}
- /wordwrap@1.0.0:
- resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
- dev: true
+ wordwrap@1.0.0: {}
- /wrap-ansi@6.2.0:
- resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
- engines: {node: '>=8'}
- dependencies:
- ansi-styles: 4.3.0
- string-width: 4.2.3
- strip-ansi: 6.0.1
- dev: true
-
- /wrap-ansi@7.0.0:
- resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
- engines: {node: '>=10'}
+ wrap-ansi@6.2.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
- /wrap-ansi@8.1.0:
- resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
- engines: {node: '>=12'}
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
dependencies:
ansi-styles: 6.2.3
string-width: 5.1.2
strip-ansi: 7.1.2
- /wrappy@1.0.2:
- resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ wrappy@1.0.2: {}
- /write-file-atomic@4.0.2:
- resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
- engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ write-file-atomic@4.0.2:
dependencies:
imurmurhash: 0.1.4
signal-exit: 3.0.7
- dev: true
- /xtend@4.0.2:
- resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
- engines: {node: '>=0.4'}
+ xtend@4.0.2: {}
- /y18n@5.0.8:
- resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
- engines: {node: '>=10'}
+ y18n@5.0.8: {}
- /yallist@3.1.1:
- resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
- dev: true
+ yallist@3.1.1: {}
- /yallist@4.0.0:
- resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
- dev: false
+ yallist@4.0.0: {}
- /yargs-parser@21.1.1:
- resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
- engines: {node: '>=12'}
+ yargs-parser@21.1.1: {}
- /yargs@17.7.2:
- resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
- engines: {node: '>=12'}
+ yargs@17.7.2:
dependencies:
cliui: 8.0.1
escalade: 3.2.0
@@ -6395,11 +7402,6 @@ packages:
y18n: 5.0.8
yargs-parser: 21.1.1
- /yn@3.1.1:
- resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
- engines: {node: '>=6'}
+ yn@3.1.1: {}
- /yocto-queue@0.1.0:
- resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
- engines: {node: '>=10'}
- dev: true
+ yocto-queue@0.1.0: {}
diff --git a/src/app.controller.ts b/src/app.controller.ts
index cce879e..651c0d4 100644
--- a/src/app.controller.ts
+++ b/src/app.controller.ts
@@ -1,11 +1,25 @@
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
+import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';
+@ApiTags('根路由')
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
+ @ApiOperation({
+ summary: '健康检查',
+ description: '返回应用程序的基本欢迎信息,用于验证服务是否正常运行',
+ })
+ @ApiResponse({
+ status: 200,
+ description: '服务运行正常',
+ schema: {
+ type: 'string',
+ example: 'Hello World!',
+ },
+ })
getHello(): string {
return this.appService.getHello();
}
diff --git a/src/app.module.ts b/src/app.module.ts
index 2d37b53..85e50d8 100644
--- a/src/app.module.ts
+++ b/src/app.module.ts
@@ -10,6 +10,8 @@ import { LarkModule } from './lark/lark.module';
import { GitHubModule } from './github/github.module';
import { DeepseekModule } from './deepseek/deepseek.module';
import { TaskModule } from './task/task.module';
+import { LicenseModule } from './license/license.module';
+import { CommonModule } from './common/common.module';
@Module({
imports: [
@@ -32,12 +34,14 @@ import { TaskModule } from './task/task.module';
}),
inject: [ConfigService],
}),
+ CommonModule,
UserModule,
AuthModule,
LarkModule,
GitHubModule,
DeepseekModule,
TaskModule,
+ LicenseModule,
],
controllers: [AppController],
providers: [AppService],
diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts
index 88d3f7a..b0feec2 100644
--- a/src/auth/auth.controller.ts
+++ b/src/auth/auth.controller.ts
@@ -2,26 +2,68 @@ import { Controller, Get, Req, Res, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { UserService } from '../user/user.service';
import { Response } from 'express';
-import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';
+import {
+ ApiTags,
+ ApiOperation,
+ ApiResponse,
+} from '@nestjs/swagger';
+import { ErrorResponseDto } from '../common/dto/error-response.dto';
@ApiTags('认证模块')
@Controller('auth')
export class AuthController {
constructor(private readonly userService: UserService) {}
+
@Get('github')
@UseGuards(AuthGuard('github'))
- @ApiOperation({ summary: 'Github 登录' })
- @ApiResponse({ status: 302, description: '重定向到 Github 授权页面' })
+ @ApiOperation({
+ summary: 'GitHub 登录',
+ description:
+ '启动 GitHub OAuth 登录流程,重定向用户到 GitHub 授权页面进行身份验证',
+ })
+ @ApiResponse({
+ status: 302,
+ description: '重定向到 GitHub 授权页面',
+ schema: {
+ example: {
+ url: 'https://github.com/login/oauth/authorize?client_id=xxx&redirect_uri=xxx',
+ },
+ },
+ })
+ @ApiResponse({
+ status: 500,
+ description: '服务器内部错误',
+ type: ErrorResponseDto,
+ })
async githubLogin() {
// GitHub 登录重定向
}
@Get('github/callback')
@UseGuards(AuthGuard('github'))
- @ApiOperation({ summary: 'Github 登录回调' })
+ @ApiOperation({
+ summary: 'GitHub 登录回调',
+ description:
+ 'GitHub OAuth 回调端点。在用户授权后,GitHub 会重定向到此端点,携带授权码。系统将验证用户身份,生成 JWT Token,并重定向到前端页面',
+ })
@ApiResponse({
status: 302,
- description: '重定向到前端页面,并携带 token',
+ description: '登录成功,重定向到前端页面并携带 JWT Token 和用户信息',
+ schema: {
+ example: {
+ url: 'http://localhost:8000/test-github-sso.html?userId=1&username=johndoe&email=john@example.com&provider=github&providerUsername=johndoe&access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
+ },
+ },
+ })
+ @ApiResponse({
+ status: 401,
+ description: 'GitHub 授权失败或用户取消授权',
+ type: ErrorResponseDto,
+ })
+ @ApiResponse({
+ status: 500,
+ description: '服务器内部错误',
+ type: ErrorResponseDto,
})
async githubCallback(@Req() req: any, @Res() res: Response) {
const oauthUser = req.user;
diff --git a/src/common/common.module.ts b/src/common/common.module.ts
new file mode 100644
index 0000000..58efb0e
--- /dev/null
+++ b/src/common/common.module.ts
@@ -0,0 +1,13 @@
+import { Module, Global } from '@nestjs/common';
+import { TypeOrmModule } from '@nestjs/typeorm';
+import { User } from '../user/entities/user.entity';
+import { AdminService } from './services/admin.service';
+import { AdminGuard } from './guards/admin.guard';
+
+@Global()
+@Module({
+ imports: [TypeOrmModule.forFeature([User])],
+ providers: [AdminService, AdminGuard],
+ exports: [AdminService, AdminGuard],
+})
+export class CommonModule {}
diff --git a/src/common/dto/error-response.dto.ts b/src/common/dto/error-response.dto.ts
new file mode 100644
index 0000000..9ba1123
--- /dev/null
+++ b/src/common/dto/error-response.dto.ts
@@ -0,0 +1,130 @@
+import { ApiProperty } from '@nestjs/swagger';
+
+/**
+ * 统一错误响应 DTO
+ */
+export class ErrorResponseDto {
+ @ApiProperty({
+ description: 'HTTP 状态码',
+ example: 400,
+ })
+ statusCode: number;
+
+ @ApiProperty({
+ description: '错误消息',
+ example: '请求参数错误',
+ })
+ message: string;
+
+ @ApiProperty({
+ description: '错误详情(可选)',
+ required: false,
+ example: ['用户名不能为空', '邮箱格式不正确'],
+ })
+ error?: string | string[];
+
+ @ApiProperty({
+ description: '请求路径',
+ example: '/api/user/register',
+ })
+ path: string;
+
+ @ApiProperty({
+ description: '时间戳',
+ example: '2025-12-13T10:30:00.000Z',
+ })
+ timestamp: string;
+}
+
+/**
+ * 认证失败响应 DTO
+ */
+export class UnauthorizedResponseDto {
+ @ApiProperty({
+ description: 'HTTP 状态码',
+ example: 401,
+ })
+ statusCode: number;
+
+ @ApiProperty({
+ description: '错误消息',
+ example: '未授权访问',
+ })
+ message: string;
+
+ @ApiProperty({
+ description: '错误类型',
+ example: 'Unauthorized',
+ })
+ error: string;
+}
+
+/**
+ * 资源未找到响应 DTO
+ */
+export class NotFoundResponseDto {
+ @ApiProperty({
+ description: 'HTTP 状态码',
+ example: 404,
+ })
+ statusCode: number;
+
+ @ApiProperty({
+ description: '错误消息',
+ example: '资源未找到',
+ })
+ message: string;
+
+ @ApiProperty({
+ description: '错误类型',
+ example: 'Not Found',
+ })
+ error: string;
+}
+
+/**
+ * 冲突响应 DTO(如用户已存在)
+ */
+export class ConflictResponseDto {
+ @ApiProperty({
+ description: 'HTTP 状态码',
+ example: 409,
+ })
+ statusCode: number;
+
+ @ApiProperty({
+ description: '错误消息',
+ example: '用户名已存在',
+ })
+ message: string;
+
+ @ApiProperty({
+ description: '错误类型',
+ example: 'Conflict',
+ })
+ error: string;
+}
+
+/**
+ * 验证失败响应 DTO
+ */
+export class ValidationErrorResponseDto {
+ @ApiProperty({
+ description: 'HTTP 状态码',
+ example: 422,
+ })
+ statusCode: number;
+
+ @ApiProperty({
+ description: '错误消息列表',
+ example: ['用户名不能为空', '密码长度必须在6到20之间'],
+ type: [String],
+ })
+ message: string[];
+
+ @ApiProperty({
+ description: '错误类型',
+ example: 'Unprocessable Entity',
+ })
+ error: string;
+}
diff --git a/src/common/guards/admin.guard.ts b/src/common/guards/admin.guard.ts
new file mode 100644
index 0000000..546054a
--- /dev/null
+++ b/src/common/guards/admin.guard.ts
@@ -0,0 +1,29 @@
+import {
+ Injectable,
+ CanActivate,
+ ExecutionContext,
+ ForbiddenException,
+} from '@nestjs/common';
+import { AdminService } from '../services/admin.service';
+
+@Injectable()
+export class AdminGuard implements CanActivate {
+ constructor(private adminService: AdminService) {}
+
+ async canActivate(context: ExecutionContext): Promise {
+ const request = context.switchToHttp().getRequest();
+ const user = request.user;
+
+ if (!user || !user.userId) {
+ throw new ForbiddenException('请先登录');
+ }
+
+ const isAdmin = await this.adminService.isAdmin(user.userId);
+
+ if (!isAdmin) {
+ throw new ForbiddenException('需要管理员权限');
+ }
+
+ return true;
+ }
+}
diff --git a/src/common/services/admin.service.ts b/src/common/services/admin.service.ts
new file mode 100644
index 0000000..6cc5f85
--- /dev/null
+++ b/src/common/services/admin.service.ts
@@ -0,0 +1,54 @@
+import { Injectable } from '@nestjs/common';
+import { InjectRepository } from '@nestjs/typeorm';
+import { Repository } from 'typeorm';
+import { User } from '../user/entities/user.entity';
+
+@Injectable()
+export class AdminService {
+ constructor(
+ @InjectRepository(User)
+ private readonly userRepository: Repository,
+ ) {}
+
+ /**
+ * 检查用户是否是管理员
+ * 简单实现:检查用户名是否为 admin 或邮箱包含 admin
+ * 生产环境应该使用更复杂的角色系统
+ */
+ async isAdmin(userId: number): Promise {
+ const user = await this.userRepository.findOne({
+ where: { id: userId },
+ });
+
+ if (!user) {
+ return false;
+ }
+
+ // 简单的管理员判断逻辑(可根据实际需求调整)
+ return (
+ user.username === 'admin' ||
+ user.email.includes('admin') ||
+ user.username.startsWith('admin_')
+ );
+ }
+
+ /**
+ * 获取所有管理员用户
+ */
+ async getAdminUsers(): Promise {
+ const users = await this.userRepository.find();
+ const admins: User[] = [];
+
+ for (const user of users) {
+ if (
+ user.username === 'admin' ||
+ user.email.includes('admin') ||
+ user.username.startsWith('admin_')
+ ) {
+ admins.push(user);
+ }
+ }
+
+ return admins;
+ }
+}
diff --git a/src/deepseek/deepseek.controller.ts b/src/deepseek/deepseek.controller.ts
index 1be61f4..64b8654 100644
--- a/src/deepseek/deepseek.controller.ts
+++ b/src/deepseek/deepseek.controller.ts
@@ -3,25 +3,58 @@ import { DeepseekService } from './deepseek.service';
import { Public } from 'src/auth/decorators/public.decorator';
import { PROVIDER_TYPE } from 'src/constants/providerType';
import { ApiBody, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
+import { ErrorResponseDto } from '../common/dto/error-response.dto';
-@ApiTags('Deepseek 模块')
+@ApiTags('DeepSeek AI 模块')
@Controller('deepSeek')
export class DeepseekController {
constructor(private readonly deepseekService: DeepseekService) {}
@Public()
@Post('chat-flow')
- @ApiOperation({ summary: '与 Flow 模型聊天' })
+ @ApiOperation({
+ summary: '与 DeepSeek Flow 模型对话',
+ description:
+ '使用 DeepSeek Flow 模型进行对话交互。Flow 模型擅长快速响应和流式输出,适合实时对话场景',
+ })
@ApiBody({
schema: {
type: 'object',
properties: {
- message: { type: 'string', description: '发送给模型的消息' },
+ message: {
+ type: 'string',
+ description: '发送给 AI 模型的消息内容',
+ example: '你好,请介绍一下你自己',
+ },
},
required: ['message'],
},
})
- @ApiResponse({ status: 200, description: '成功返回模型的响应' })
+ @ApiResponse({
+ status: 200,
+ description: '成功返回 AI 模型的响应',
+ schema: {
+ example: {
+ model: 'deepseek-flow',
+ message: '你好!我是 DeepSeek Flow,一个 AI 助手。我可以帮助你回答问题、提供建议和进行对话。',
+ usage: {
+ prompt_tokens: 10,
+ completion_tokens: 25,
+ total_tokens: 35,
+ },
+ },
+ },
+ })
+ @ApiResponse({
+ status: 400,
+ description: '请求参数错误(消息内容为空等)',
+ type: ErrorResponseDto,
+ })
+ @ApiResponse({
+ status: 500,
+ description: 'AI 服务调用失败',
+ type: ErrorResponseDto,
+ })
async chatFlow(@Body() body: { message: string }) {
const response = await this.deepseekService.chatRequest(
body.message,
@@ -32,17 +65,50 @@ export class DeepseekController {
@Public()
@Post('chat-deep')
- @ApiOperation({ summary: '与 Deep 模型聊天' })
+ @ApiOperation({
+ summary: '与 DeepSeek Deep 模型对话',
+ description:
+ '使用 DeepSeek Deep 模型进行对话交互。Deep 模型提供更深入的推理能力,适合复杂问题解答和深度分析',
+ })
@ApiBody({
schema: {
type: 'object',
properties: {
- message: { type: 'string', description: '发送给模型的消息' },
+ message: {
+ type: 'string',
+ description: '发送给 AI 模型的消息内容',
+ example: '请解释一下量子计算的基本原理',
+ },
},
required: ['message'],
},
})
- @ApiResponse({ status: 200, description: '成功返回模型的响应' })
+ @ApiResponse({
+ status: 200,
+ description: '成功返回 AI 模型的响应',
+ schema: {
+ example: {
+ model: 'deepseek-deep',
+ message:
+ '量子计算是一种利用量子力学原理进行信息处理的计算方式...',
+ usage: {
+ prompt_tokens: 15,
+ completion_tokens: 150,
+ total_tokens: 165,
+ },
+ },
+ },
+ })
+ @ApiResponse({
+ status: 400,
+ description: '请求参数错误(消息内容为空等)',
+ type: ErrorResponseDto,
+ })
+ @ApiResponse({
+ status: 500,
+ description: 'AI 服务调用失败',
+ type: ErrorResponseDto,
+ })
async chatDeep(@Body() body: { message: string }) {
const response = await this.deepseekService.chatRequest(
body.message,
@@ -53,17 +119,49 @@ export class DeepseekController {
@Public()
@Post('chat-grok')
- @ApiOperation({ summary: '与 Grok 模型聊天' })
+ @ApiOperation({
+ summary: '与 Grok 模型对话',
+ description:
+ '使用 Grok 模型进行对话交互。Grok 模型具有幽默风格和实时信息获取能力,适合需要最新信息的场景',
+ })
@ApiBody({
schema: {
type: 'object',
properties: {
- message: { type: 'string', description: '发送给模型的消息' },
+ message: {
+ type: 'string',
+ description: '发送给 AI 模型的消息内容',
+ example: '最近有什么科技新闻?',
+ },
},
required: ['message'],
},
})
- @ApiResponse({ status: 200, description: '成功返回模型的响应' })
+ @ApiResponse({
+ status: 200,
+ description: '成功返回 AI 模型的响应',
+ schema: {
+ example: {
+ model: 'grok',
+ message: '最近的科技新闻包括...',
+ usage: {
+ prompt_tokens: 12,
+ completion_tokens: 80,
+ total_tokens: 92,
+ },
+ },
+ },
+ })
+ @ApiResponse({
+ status: 400,
+ description: '请求参数错误(消息内容为空等)',
+ type: ErrorResponseDto,
+ })
+ @ApiResponse({
+ status: 500,
+ description: 'AI 服务调用失败',
+ type: ErrorResponseDto,
+ })
async chatGrok(@Body() body: { message: string }) {
const response = await this.deepseekService.chatRequest(
body.message,
diff --git a/src/github/github.controller.ts b/src/github/github.controller.ts
index 589e021..bc97e35 100644
--- a/src/github/github.controller.ts
+++ b/src/github/github.controller.ts
@@ -4,8 +4,9 @@ import { UserService } from '../user/user.service';
import { Response } from 'express';
import { Public } from '../auth/decorators/public.decorator';
import { ApiTags, ApiOperation, ApiResponse, ApiQuery } from '@nestjs/swagger';
+import { ErrorResponseDto } from '../common/dto/error-response.dto';
-@ApiTags('Github 模块')
+@ApiTags('GitHub OAuth 模块')
@Controller('github')
export class GitHubController {
constructor(
@@ -15,13 +16,31 @@ export class GitHubController {
@Get('login')
@Public()
- @ApiOperation({ summary: 'Github 登录' })
+ @ApiOperation({
+ summary: 'GitHub OAuth 登录',
+ description:
+ '启动 GitHub OAuth 2.0 登录流程。接收前端重定向地址,生成 GitHub 授权 URL 并重定向用户到 GitHub 授权页面',
+ })
@ApiQuery({
name: 'redirectUri',
- description: '登录成功后的重定向地址',
+ description: '登录成功后的前端重定向地址(URL编码)',
required: true,
+ example: 'http://localhost:8000/callback',
+ })
+ @ApiResponse({
+ status: 302,
+ description: '重定向到 GitHub 授权页面',
+ schema: {
+ example: {
+ url: 'https://github.com/login/oauth/authorize?client_id=xxx&redirect_uri=xxx&scope=read:user user:email',
+ },
+ },
+ })
+ @ApiResponse({
+ status: 400,
+ description: '缺少必需的重定向地址参数',
+ type: ErrorResponseDto,
})
- @ApiResponse({ status: 302, description: '重定向到 Github 授权页面' })
async login(@Query('redirectUri') redirectUri: string, @Res() res: Response) {
const loginUrl = await this.githubService.getLoginUrl(redirectUri);
return res.redirect(loginUrl);
@@ -29,12 +48,51 @@ export class GitHubController {
@Get('callback')
@Public()
- @ApiOperation({ summary: 'Github 登录回调' })
- @ApiQuery({ name: 'code', description: 'Github 返回的授权码' })
- @ApiQuery({ name: 'state', description: 'Github 返回的状态' })
- @ApiResponse({ status: 200, description: '登录成功,返回用户信息和 token' })
- @ApiResponse({ status: 400, description: '授权码缺失' })
- @ApiResponse({ status: 500, description: 'Github 认证失败' })
+ @ApiOperation({
+ summary: 'GitHub OAuth 回调处理',
+ description:
+ 'GitHub OAuth 回调端点。GitHub 授权完成后会重定向到此端点,携带授权码。系统会用授权码换取访问令牌,获取用户信息,创建或更新用户记录,并生成 JWT Token 返回给前端',
+ })
+ @ApiQuery({
+ name: 'code',
+ description: 'GitHub 返回的授权码(用于换取访问令牌)',
+ required: true,
+ example: 'ghu_xxxxxxxxxxxxxxxxxxxxx',
+ })
+ @ApiQuery({
+ name: 'state',
+ description: 'GitHub 返回的状态参数(用于防止 CSRF 攻击)',
+ required: false,
+ example: 'random_state_string',
+ })
+ @ApiResponse({
+ status: 200,
+ description: 'GitHub 登录成功,返回用户信息和 JWT Token',
+ schema: {
+ example: {
+ message: 'GitHub login successful',
+ user: {
+ id: 1,
+ username: 'johndoe',
+ email: 'john@example.com',
+ provider: 'github',
+ providerUsername: 'johndoe',
+ },
+ access_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
+ refresh_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
+ },
+ },
+ })
+ @ApiResponse({
+ status: 400,
+ description: '授权码缺失或获取访问令牌失败',
+ type: ErrorResponseDto,
+ })
+ @ApiResponse({
+ status: 500,
+ description: 'GitHub 认证过程中发生服务器错误',
+ type: ErrorResponseDto,
+ })
async callback(
@Query('code') code: string,
@Query('state') _state: string,
diff --git a/src/lark/lark.controller.ts b/src/lark/lark.controller.ts
index 95c8e7a..fd1e2e2 100644
--- a/src/lark/lark.controller.ts
+++ b/src/lark/lark.controller.ts
@@ -4,8 +4,9 @@ import { UserService } from '../user/user.service';
import { Response } from 'express';
import { Public } from '../auth/decorators/public.decorator';
import { ApiTags, ApiOperation, ApiQuery, ApiResponse } from '@nestjs/swagger';
+import { ErrorResponseDto } from '../common/dto/error-response.dto';
-@ApiTags('Lark 模块')
+@ApiTags('飞书 OAuth 模块')
@Controller('lark')
export class LarkController {
constructor(
@@ -15,13 +16,31 @@ export class LarkController {
@Get('login')
@Public()
- @ApiOperation({ summary: 'Lark 登录' })
+ @ApiOperation({
+ summary: '飞书 OAuth 登录',
+ description:
+ '启动飞书(Lark/Feishu)OAuth 2.0 登录流程。接收前端重定向地址,生成飞书授权 URL 并重定向用户到飞书授权页面',
+ })
@ApiQuery({
name: 'redirectUri',
- description: '登录成功后的重定向地址',
+ description: '登录成功后的前端重定向地址(URL编码)',
required: true,
+ example: 'http://localhost:8000/callback',
+ })
+ @ApiResponse({
+ status: 302,
+ description: '重定向到飞书授权页面',
+ schema: {
+ example: {
+ url: 'https://open.feishu.cn/open-apis/authen/v1/index?app_id=xxx&redirect_uri=xxx',
+ },
+ },
+ })
+ @ApiResponse({
+ status: 400,
+ description: '缺少必需的重定向地址参数',
+ type: ErrorResponseDto,
})
- @ApiResponse({ status: 302, description: '重定向到 Lark 授权页面' })
async login(@Query('redirectUri') redirectUri: string, @Res() res: Response) {
const loginUrl = await this.larkService.getLoginUrl(redirectUri);
return res.redirect(loginUrl);
@@ -29,11 +48,45 @@ export class LarkController {
@Get('callback')
@Public()
- @ApiOperation({ summary: 'Lark 登录回调' })
- @ApiQuery({ name: 'code', description: 'Lark 返回的授权码' })
- @ApiResponse({ status: 200, description: '登录成功,返回用户信息和 token' })
- @ApiResponse({ status: 400, description: '授权码缺失' })
- @ApiResponse({ status: 500, description: 'Lark 认证失败' })
+ @ApiOperation({
+ summary: '飞书 OAuth 回调处理',
+ description:
+ '飞书 OAuth 回调端点。飞书授权完成后会重定向到此端点,携带授权码。系统会用授权码换取访问令牌,获取用户信息,创建或更新用户记录,并生成 JWT Token 返回给前端',
+ })
+ @ApiQuery({
+ name: 'code',
+ description: '飞书返回的授权码(用于换取访问令牌)',
+ required: true,
+ example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
+ })
+ @ApiResponse({
+ status: 200,
+ description: '飞书登录成功,返回用户信息和 JWT Token',
+ schema: {
+ example: {
+ message: 'Lark login successful',
+ user: {
+ id: 1,
+ username: '张三',
+ email: 'zhangsan@example.com',
+ provider: 'lark',
+ providerUsername: '张三',
+ },
+ access_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
+ refresh_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
+ },
+ },
+ })
+ @ApiResponse({
+ status: 400,
+ description: '授权码缺失或获取访问令牌失败',
+ type: ErrorResponseDto,
+ })
+ @ApiResponse({
+ status: 500,
+ description: '飞书认证过程中发生服务器错误',
+ type: ErrorResponseDto,
+ })
async callback(@Query('code') code: string, @Res() res: Response) {
if (!code) {
return res.status(400).send('Authorization code is missing');
diff --git a/src/license/decorators/require-license.decorator.ts b/src/license/decorators/require-license.decorator.ts
new file mode 100644
index 0000000..3f8c225
--- /dev/null
+++ b/src/license/decorators/require-license.decorator.ts
@@ -0,0 +1,4 @@
+import { SetMetadata } from '@nestjs/common';
+
+export const REQUIRE_LICENSE_KEY = 'requireLicense';
+export const RequireLicense = () => SetMetadata(REQUIRE_LICENSE_KEY, true);
diff --git a/src/license/dto/activate-license.dto.ts b/src/license/dto/activate-license.dto.ts
new file mode 100644
index 0000000..0569ea8
--- /dev/null
+++ b/src/license/dto/activate-license.dto.ts
@@ -0,0 +1,18 @@
+import { ApiProperty } from '@nestjs/swagger';
+import { IsString, IsNotEmpty, Length } from 'class-validator';
+
+/**
+ * 激活卡密 DTO
+ */
+export class ActivateLicenseDto {
+ @ApiProperty({
+ description: '卡密码',
+ example: 'ABCD-1234-EFGH-5678',
+ minLength: 19,
+ maxLength: 19,
+ })
+ @IsString()
+ @IsNotEmpty({ message: '卡密不能为空' })
+ @Length(19, 19, { message: '卡密格式不正确' })
+ code: string;
+}
diff --git a/src/license/dto/generate-license.dto.ts b/src/license/dto/generate-license.dto.ts
new file mode 100644
index 0000000..ae446d5
--- /dev/null
+++ b/src/license/dto/generate-license.dto.ts
@@ -0,0 +1,45 @@
+import { ApiProperty } from '@nestjs/swagger';
+import { IsEnum, IsOptional, IsInt, Min, IsString } from 'class-validator';
+import { LicenseType } from '../entities/license.entity';
+
+/**
+ * 生成卡密 DTO
+ */
+export class GenerateLicenseDto {
+ @ApiProperty({
+ description: '卡密类型',
+ enum: LicenseType,
+ example: LicenseType.MONTHLY,
+ })
+ @IsEnum(LicenseType)
+ type: LicenseType;
+
+ @ApiProperty({
+ description: '有效天数',
+ example: 30,
+ default: 30,
+ })
+ @IsInt()
+ @Min(1)
+ @IsOptional()
+ validDays?: number;
+
+ @ApiProperty({
+ description: '生成数量',
+ example: 1,
+ default: 1,
+ })
+ @IsInt()
+ @Min(1)
+ @IsOptional()
+ count?: number;
+
+ @ApiProperty({
+ description: '备注信息',
+ required: false,
+ example: '批量生成月卡',
+ })
+ @IsString()
+ @IsOptional()
+ remarks?: string;
+}
diff --git a/src/license/dto/query-license.dto.ts b/src/license/dto/query-license.dto.ts
new file mode 100644
index 0000000..d8c5cd1
--- /dev/null
+++ b/src/license/dto/query-license.dto.ts
@@ -0,0 +1,26 @@
+import { ApiProperty } from '@nestjs/swagger';
+import { IsEnum, IsOptional } from 'class-validator';
+import { LicenseStatus, LicenseType } from '../entities/license.entity';
+
+/**
+ * 查询卡密 DTO
+ */
+export class QueryLicenseDto {
+ @ApiProperty({
+ description: '卡密状态',
+ enum: LicenseStatus,
+ required: false,
+ })
+ @IsEnum(LicenseStatus)
+ @IsOptional()
+ status?: LicenseStatus;
+
+ @ApiProperty({
+ description: '卡密类型',
+ enum: LicenseType,
+ required: false,
+ })
+ @IsEnum(LicenseType)
+ @IsOptional()
+ type?: LicenseType;
+}
diff --git a/src/license/entities/license.entity.ts b/src/license/entities/license.entity.ts
new file mode 100644
index 0000000..adebd6f
--- /dev/null
+++ b/src/license/entities/license.entity.ts
@@ -0,0 +1,132 @@
+import {
+ Entity,
+ PrimaryGeneratedColumn,
+ Column,
+ CreateDateColumn,
+ UpdateDateColumn,
+ ManyToOne,
+ JoinColumn,
+} from 'typeorm';
+import { ApiProperty } from '@nestjs/swagger';
+import { User } from '../../user/entities/user.entity';
+
+/**
+ * 卡密类型枚举
+ */
+export enum LicenseType {
+ TRIAL = 'trial', // 试用版
+ MONTHLY = 'monthly', // 月度订阅
+ YEARLY = 'yearly', // 年度订阅
+ LIFETIME = 'lifetime', // 终身授权
+}
+
+/**
+ * 卡密状态枚举
+ */
+export enum LicenseStatus {
+ UNUSED = 'unused', // 未使用
+ ACTIVE = 'active', // 已激活
+ EXPIRED = 'expired', // 已过期
+ REVOKED = 'revoked', // 已撤销
+}
+
+/**
+ * 卡密实体
+ */
+@Entity('license')
+export class License {
+ @PrimaryGeneratedColumn()
+ @ApiProperty({ description: '卡密ID' })
+ id: number;
+
+ @Column({ unique: true, length: 32 })
+ @ApiProperty({ description: '卡密码', example: 'XXXX-XXXX-XXXX-XXXX' })
+ code: string;
+
+ @Column({
+ type: 'enum',
+ enum: LicenseType,
+ default: LicenseType.MONTHLY,
+ })
+ @ApiProperty({
+ description: '卡密类型',
+ enum: LicenseType,
+ example: LicenseType.MONTHLY,
+ })
+ type: LicenseType;
+
+ @Column({
+ type: 'enum',
+ enum: LicenseStatus,
+ default: LicenseStatus.UNUSED,
+ })
+ @ApiProperty({
+ description: '卡密状态',
+ enum: LicenseStatus,
+ example: LicenseStatus.UNUSED,
+ })
+ status: LicenseStatus;
+
+ @Column({ type: 'int', default: 30 })
+ @ApiProperty({ description: '有效天数', example: 30 })
+ validDays: number;
+
+ @Column({ type: 'datetime', nullable: true })
+ @ApiProperty({ description: '激活时间', required: false })
+ activatedAt?: Date;
+
+ @Column({ type: 'datetime', nullable: true })
+ @ApiProperty({ description: '过期时间', required: false })
+ expiresAt?: Date;
+
+ @Column({ nullable: true })
+ @ApiProperty({ description: '激活用户ID', required: false })
+ userId?: number;
+
+ @ManyToOne(() => User, { nullable: true })
+ @JoinColumn({ name: 'userId' })
+ @ApiProperty({ description: '激活用户信息', required: false, type: () => User })
+ user?: User;
+
+ @Column({ type: 'text', nullable: true })
+ @ApiProperty({ description: '备注信息', required: false })
+ remarks?: string;
+
+ @CreateDateColumn()
+ @ApiProperty({ description: '创建时间' })
+ createdAt: Date;
+
+ @UpdateDateColumn()
+ @ApiProperty({ description: '更新时间' })
+ updatedAt: Date;
+
+ /**
+ * 检查卡密是否有效
+ */
+ isValid(): boolean {
+ if (this.status !== LicenseStatus.ACTIVE) {
+ return false;
+ }
+
+ if (!this.expiresAt) {
+ return false;
+ }
+
+ return new Date() < new Date(this.expiresAt);
+ }
+
+ /**
+ * 获取剩余天数
+ */
+ getRemainingDays(): number {
+ if (!this.expiresAt || this.status !== LicenseStatus.ACTIVE) {
+ return 0;
+ }
+
+ const now = new Date();
+ const expiry = new Date(this.expiresAt);
+ const diff = expiry.getTime() - now.getTime();
+
+ return Math.max(0, Math.ceil(diff / (1000 * 60 * 60 * 24)));
+ }
+}
diff --git a/src/license/guards/license.guard.ts b/src/license/guards/license.guard.ts
new file mode 100644
index 0000000..3637dde
--- /dev/null
+++ b/src/license/guards/license.guard.ts
@@ -0,0 +1,47 @@
+import {
+ Injectable,
+ CanActivate,
+ ExecutionContext,
+ ForbiddenException,
+} from '@nestjs/common';
+import { Reflector } from '@nestjs/core';
+import { LicenseService } from '../license.service';
+import { REQUIRE_LICENSE_KEY } from '../decorators/require-license.decorator';
+
+@Injectable()
+export class LicenseGuard implements CanActivate {
+ constructor(
+ private reflector: Reflector,
+ private licenseService: LicenseService,
+ ) {}
+
+ async canActivate(context: ExecutionContext): Promise {
+ const requireLicense = this.reflector.getAllAndOverride(
+ REQUIRE_LICENSE_KEY,
+ [context.getHandler(), context.getClass()],
+ );
+
+ if (!requireLicense) {
+ return true;
+ }
+
+ const request = context.switchToHttp().getRequest();
+ const user = request.user;
+
+ if (!user || !user.userId) {
+ throw new ForbiddenException('请先登录');
+ }
+
+ const hasValidLicense = await this.licenseService.verifyUserLicense(
+ user.userId,
+ );
+
+ if (!hasValidLicense) {
+ throw new ForbiddenException(
+ '您的授权已过期或未激活,请联系管理员获取卡密',
+ );
+ }
+
+ return true;
+ }
+}
diff --git a/src/license/license.controller.ts b/src/license/license.controller.ts
new file mode 100644
index 0000000..96f17d1
--- /dev/null
+++ b/src/license/license.controller.ts
@@ -0,0 +1,385 @@
+import {
+ Controller,
+ Get,
+ Post,
+ Body,
+ Param,
+ Delete,
+ Query,
+ Req,
+ UseGuards,
+} from '@nestjs/common';
+import {
+ ApiTags,
+ ApiOperation,
+ ApiResponse,
+ ApiBearerAuth,
+ ApiBody,
+ ApiParam,
+ ApiQuery,
+} from '@nestjs/swagger';
+import { LicenseService } from './license.service';
+import { GenerateLicenseDto } from './dto/generate-license.dto';
+import { ActivateLicenseDto } from './dto/activate-license.dto';
+import { QueryLicenseDto } from './dto/query-license.dto';
+import { License } from './entities/license.entity';
+import {
+ ErrorResponseDto,
+ UnauthorizedResponseDto,
+ NotFoundResponseDto,
+ ConflictResponseDto,
+ ValidationErrorResponseDto,
+} from '../common/dto/error-response.dto';
+import { AdminGuard } from '../common/guards/admin.guard';
+
+@ApiTags('卡密管理模块')
+@ApiBearerAuth()
+@Controller('license')
+export class LicenseController {
+ constructor(private readonly licenseService: LicenseService) {}
+
+ @Post('generate')
+ @UseGuards(AdminGuard)
+ @ApiOperation({
+ summary: '生成卡密(管理员)',
+ description:
+ '批量生成卡密,可指定卡密类型、有效天数和数量。仅管理员可访问(用户名为 admin 或邮箱包含 admin)',
+ })
+ @ApiBody({ type: GenerateLicenseDto })
+ @ApiResponse({
+ status: 201,
+ description: '卡密生成成功',
+ type: [License],
+ schema: {
+ example: [
+ {
+ id: 1,
+ code: 'ABCD-1234-EFGH-5678',
+ type: 'monthly',
+ status: 'unused',
+ validDays: 30,
+ remarks: '月卡批量生成',
+ createdAt: '2025-12-13T10:00:00.000Z',
+ },
+ ],
+ },
+ })
+ @ApiResponse({
+ status: 400,
+ description: '请求参数错误',
+ type: ErrorResponseDto,
+ })
+ @ApiResponse({
+ status: 401,
+ description: '未授权,需要管理员权限',
+ type: UnauthorizedResponseDto,
+ })
+ @ApiResponse({
+ status: 422,
+ description: '数据验证失败',
+ type: ValidationErrorResponseDto,
+ })
+ async generate(@Body() dto: GenerateLicenseDto): Promise {
+ return this.licenseService.generate(dto);
+ }
+
+ @Post('activate')
+ @ApiOperation({
+ summary: '激活卡密',
+ description:
+ '用户使用卡密激活授权。如果用户已有有效授权,则在原有基础上延期',
+ })
+ @ApiBody({ type: ActivateLicenseDto })
+ @ApiResponse({
+ status: 200,
+ description: '卡密激活成功',
+ schema: {
+ example: {
+ message: '卡密激活成功,有效期至 2026-01-13 10:00:00',
+ license: {
+ id: 1,
+ code: 'ABCD-1234-EFGH-5678',
+ type: 'monthly',
+ status: 'active',
+ validDays: 30,
+ activatedAt: '2025-12-13T10:00:00.000Z',
+ expiresAt: '2026-01-13T10:00:00.000Z',
+ userId: 1,
+ },
+ },
+ },
+ })
+ @ApiResponse({
+ status: 400,
+ description: '卡密无效、已过期或已撤销',
+ type: ErrorResponseDto,
+ })
+ @ApiResponse({
+ status: 401,
+ description: '未授权,需要登录',
+ type: UnauthorizedResponseDto,
+ })
+ @ApiResponse({
+ status: 404,
+ description: '卡密不存在',
+ type: NotFoundResponseDto,
+ })
+ @ApiResponse({
+ status: 409,
+ description: '卡密已被激活',
+ type: ConflictResponseDto,
+ })
+ @ApiResponse({
+ status: 422,
+ description: '卡密格式不正确',
+ type: ValidationErrorResponseDto,
+ })
+ async activate(
+ @Req() req: any,
+ @Body() dto: ActivateLicenseDto,
+ ): Promise<{ message: string; license: License }> {
+ const userId = req.user?.userId || req.user?.id;
+ return this.licenseService.activate(userId, dto);
+ }
+
+ @Get('my')
+ @ApiOperation({
+ summary: '查询我的授权信息',
+ description: '获取当前用户的有效授权信息,包括剩余天数等',
+ })
+ @ApiResponse({
+ status: 200,
+ description: '查询成功',
+ schema: {
+ example: {
+ hasValidLicense: true,
+ license: {
+ id: 1,
+ code: 'ABCD-1234-EFGH-5678',
+ type: 'monthly',
+ status: 'active',
+ validDays: 30,
+ activatedAt: '2025-12-13T10:00:00.000Z',
+ expiresAt: '2026-01-13T10:00:00.000Z',
+ remainingDays: 31,
+ },
+ },
+ },
+ })
+ @ApiResponse({
+ status: 401,
+ description: '未授权,需要登录',
+ type: UnauthorizedResponseDto,
+ })
+ async getMyLicense(@Req() req: any): Promise<{
+ hasValidLicense: boolean;
+ license?: any;
+ }> {
+ const userId = req.user?.userId || req.user?.id;
+ const license = await this.licenseService.getUserActiveLicense(userId);
+
+ if (!license) {
+ return { hasValidLicense: false };
+ }
+
+ return {
+ hasValidLicense: true,
+ license: {
+ id: license.id,
+ code: license.code,
+ type: license.type,
+ status: license.status,
+ validDays: license.validDays,
+ activatedAt: license.activatedAt,
+ expiresAt: license.expiresAt,
+ remainingDays: license.getRemainingDays(),
+ },
+ };
+ }
+
+ @Get('my/history')
+ @ApiOperation({
+ summary: '查询我的卡密历史',
+ description: '获取当前用户激活过的所有卡密记录',
+ })
+ @ApiResponse({
+ status: 200,
+ description: '查询成功',
+ type: [License],
+ })
+ @ApiResponse({
+ status: 401,
+ description: '未授权,需要登录',
+ type: UnauthorizedResponseDto,
+ })
+ async getMyLicenseHistory(@Req() req: any): Promise {
+ const userId = req.user?.userId || req.user?.id;
+ return this.licenseService.findByUser(userId);
+ }
+
+ @Get('statistics')
+ @UseGuards(AdminGuard)
+ @ApiOperation({
+ summary: '获取卡密统计信息(管理员)',
+ description: '获取卡密的统计数据,包括总数、已激活、未使用等。仅管理员可访问',
+ })
+ @ApiResponse({
+ status: 200,
+ description: '查询成功',
+ schema: {
+ example: {
+ total: 100,
+ unused: 50,
+ active: 30,
+ expired: 15,
+ revoked: 5,
+ },
+ },
+ })
+ @ApiResponse({
+ status: 401,
+ description: '未授权,需要管理员权限',
+ type: UnauthorizedResponseDto,
+ })
+ async getStatistics(): Promise<{
+ total: number;
+ unused: number;
+ active: number;
+ expired: number;
+ revoked: number;
+ }> {
+ return this.licenseService.getStatistics();
+ }
+
+ @Get()
+ @UseGuards(AdminGuard)
+ @ApiOperation({
+ summary: '查询所有卡密(管理员)',
+ description: '获取所有卡密列表,支持按状态和类型筛选。仅管理员可访问',
+ })
+ @ApiQuery({
+ name: 'status',
+ required: false,
+ description: '按状态筛选',
+ enum: ['unused', 'active', 'expired', 'revoked'],
+ })
+ @ApiQuery({
+ name: 'type',
+ required: false,
+ description: '按类型筛选',
+ enum: ['trial', 'monthly', 'yearly', 'lifetime'],
+ })
+ @ApiResponse({
+ status: 200,
+ description: '查询成功',
+ type: [License],
+ })
+ @ApiResponse({
+ status: 401,
+ description: '未授权,需要管理员权限',
+ type: UnauthorizedResponseDto,
+ })
+ async findAll(@Query() query: QueryLicenseDto): Promise {
+ return this.licenseService.findAll(query);
+ }
+
+ @Get(':id')
+ @UseGuards(AdminGuard)
+ @ApiOperation({
+ summary: '查询单个卡密(管理员)',
+ description: '根据 ID 查询卡密详细信息。仅管理员可访问',
+ })
+ @ApiParam({
+ name: 'id',
+ description: '卡密ID',
+ type: Number,
+ })
+ @ApiResponse({
+ status: 200,
+ description: '查询成功',
+ type: License,
+ })
+ @ApiResponse({
+ status: 401,
+ description: '未授权,需要管理员权限',
+ type: UnauthorizedResponseDto,
+ })
+ @ApiResponse({
+ status: 404,
+ description: '卡密不存在',
+ type: NotFoundResponseDto,
+ })
+ async findOne(@Param('id') id: string): Promise {
+ return this.licenseService.findOne(+id);
+ }
+
+ @Post(':id/revoke')
+ @UseGuards(AdminGuard)
+ @ApiOperation({
+ summary: '撤销卡密(管理员)',
+ description: '将指定卡密标记为已撤销状态,撤销后无法再使用。仅管理员可访问',
+ })
+ @ApiParam({
+ name: 'id',
+ description: '卡密ID',
+ type: Number,
+ })
+ @ApiResponse({
+ status: 200,
+ description: '撤销成功',
+ type: License,
+ })
+ @ApiResponse({
+ status: 400,
+ description: '卡密已被撤销',
+ type: ErrorResponseDto,
+ })
+ @ApiResponse({
+ status: 401,
+ description: '未授权,需要管理员权限',
+ type: UnauthorizedResponseDto,
+ })
+ @ApiResponse({
+ status: 404,
+ description: '卡密不存在',
+ type: NotFoundResponseDto,
+ })
+ async revoke(@Param('id') id: string): Promise {
+ return this.licenseService.revoke(+id);
+ }
+
+ @Delete(':id')
+ @UseGuards(AdminGuard)
+ @ApiOperation({
+ summary: '删除卡密(管理员)',
+ description: '永久删除指定的卡密记录。仅管理员可访问',
+ })
+ @ApiParam({
+ name: 'id',
+ description: '卡密ID',
+ type: Number,
+ })
+ @ApiResponse({
+ status: 200,
+ description: '删除成功',
+ schema: {
+ example: {
+ message: 'License deleted successfully',
+ },
+ },
+ })
+ @ApiResponse({
+ status: 401,
+ description: '未授权,需要管理员权限',
+ type: UnauthorizedResponseDto,
+ })
+ @ApiResponse({
+ status: 404,
+ description: '卡密不存在',
+ type: NotFoundResponseDto,
+ })
+ async remove(@Param('id') id: string): Promise<{ message: string }> {
+ await this.licenseService.remove(+id);
+ return { message: 'License deleted successfully' };
+ }
+}
diff --git a/src/license/license.module.ts b/src/license/license.module.ts
new file mode 100644
index 0000000..07cf5d0
--- /dev/null
+++ b/src/license/license.module.ts
@@ -0,0 +1,14 @@
+import { Module } from '@nestjs/common';
+import { TypeOrmModule } from '@nestjs/typeorm';
+import { LicenseController } from './license.controller';
+import { LicenseService } from './license.service';
+import { License } from './entities/license.entity';
+import { LicenseGuard } from './guards/license.guard';
+
+@Module({
+ imports: [TypeOrmModule.forFeature([License])],
+ controllers: [LicenseController],
+ providers: [LicenseService, LicenseGuard],
+ exports: [LicenseService, LicenseGuard],
+})
+export class LicenseModule {}
diff --git a/src/license/license.service.ts b/src/license/license.service.ts
new file mode 100644
index 0000000..8dc4b83
--- /dev/null
+++ b/src/license/license.service.ts
@@ -0,0 +1,320 @@
+import {
+ Injectable,
+ BadRequestException,
+ NotFoundException,
+ ConflictException,
+} from '@nestjs/common';
+import { InjectRepository } from '@nestjs/typeorm';
+import { Repository } from 'typeorm';
+import { License, LicenseStatus, LicenseType } from './entities/license.entity';
+import { GenerateLicenseDto } from './dto/generate-license.dto';
+import { ActivateLicenseDto } from './dto/activate-license.dto';
+import { QueryLicenseDto } from './dto/query-license.dto';
+import * as crypto from 'crypto';
+
+@Injectable()
+export class LicenseService {
+ constructor(
+ @InjectRepository(License)
+ private readonly licenseRepository: Repository,
+ ) {}
+
+ /**
+ * 生成卡密码(格式:XXXX-XXXX-XXXX-XXXX)
+ */
+ private generateLicenseCode(): string {
+ const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; // 去除易混淆字符
+ let code = '';
+
+ for (let i = 0; i < 4; i++) {
+ for (let j = 0; j < 4; j++) {
+ const randomIndex = crypto.randomInt(0, chars.length);
+ code += chars[randomIndex];
+ }
+ if (i < 3) {
+ code += '-';
+ }
+ }
+
+ return code;
+ }
+
+ /**
+ * 获取默认有效天数
+ */
+ private getDefaultValidDays(type: LicenseType): number {
+ switch (type) {
+ case LicenseType.TRIAL:
+ return 7; // 试用 7 天
+ case LicenseType.MONTHLY:
+ return 30; // 月卡 30 天
+ case LicenseType.YEARLY:
+ return 365; // 年卡 365 天
+ case LicenseType.LIFETIME:
+ return 36500; // 终身 100 年
+ default:
+ return 30;
+ }
+ }
+
+ /**
+ * 生成卡密
+ */
+ async generate(dto: GenerateLicenseDto): Promise {
+ const count = dto.count || 1;
+ const validDays = dto.validDays || this.getDefaultValidDays(dto.type);
+ const licenses: License[] = [];
+
+ for (let i = 0; i < count; i++) {
+ let code: string;
+ let attempts = 0;
+ const maxAttempts = 10;
+
+ // 生成唯一卡密码,最多尝试 10 次
+ do {
+ code = this.generateLicenseCode();
+ attempts++;
+
+ if (attempts >= maxAttempts) {
+ throw new BadRequestException('生成卡密失败,请重试');
+ }
+
+ const existing = await this.licenseRepository.findOne({
+ where: { code },
+ });
+
+ if (!existing) {
+ break;
+ }
+ } while (true);
+
+ const license = this.licenseRepository.create({
+ code,
+ type: dto.type,
+ validDays,
+ status: LicenseStatus.UNUSED,
+ remarks: dto.remarks,
+ });
+
+ licenses.push(await this.licenseRepository.save(license));
+ }
+
+ return licenses;
+ }
+
+ /**
+ * 激活卡密
+ */
+ async activate(
+ userId: number,
+ dto: ActivateLicenseDto,
+ ): Promise<{ license: License; message: string }> {
+ // 查找卡密
+ const license = await this.licenseRepository.findOne({
+ where: { code: dto.code.toUpperCase() },
+ relations: ['user'],
+ });
+
+ if (!license) {
+ throw new NotFoundException('卡密不存在');
+ }
+
+ // 检查卡密状态
+ if (license.status === LicenseStatus.ACTIVE) {
+ throw new ConflictException('该卡密已被激活');
+ }
+
+ if (license.status === LicenseStatus.REVOKED) {
+ throw new BadRequestException('该卡密已被撤销');
+ }
+
+ if (license.status === LicenseStatus.EXPIRED) {
+ throw new BadRequestException('该卡密已过期');
+ }
+
+ // 检查用户是否已有有效授权
+ const existingLicense = await this.getUserActiveLicense(userId);
+ if (existingLicense) {
+ // 如果已有有效授权,则在现有基础上延期
+ const remainingTime =
+ new Date(existingLicense.expiresAt).getTime() - new Date().getTime();
+ const additionalDays = license.validDays;
+ const additionalTime = additionalDays * 24 * 60 * 60 * 1000;
+
+ existingLicense.expiresAt = new Date(
+ Date.now() + remainingTime + additionalTime,
+ );
+
+ await this.licenseRepository.save(existingLicense);
+
+ // 将新卡密标记为已使用
+ license.status = LicenseStatus.EXPIRED;
+ license.userId = userId;
+ license.activatedAt = new Date();
+ await this.licenseRepository.save(license);
+
+ return {
+ license: existingLicense,
+ message: `成功延期 ${additionalDays} 天,当前授权到期时间:${existingLicense.expiresAt.toLocaleString('zh-CN')}`,
+ };
+ }
+
+ // 激活新卡密
+ const now = new Date();
+ const expiresAt = new Date(
+ now.getTime() + license.validDays * 24 * 60 * 60 * 1000,
+ );
+
+ license.status = LicenseStatus.ACTIVE;
+ license.userId = userId;
+ license.activatedAt = now;
+ license.expiresAt = expiresAt;
+
+ await this.licenseRepository.save(license);
+
+ return {
+ license,
+ message: `卡密激活成功,有效期至 ${expiresAt.toLocaleString('zh-CN')}`,
+ };
+ }
+
+ /**
+ * 获取用户当前有效的授权
+ */
+ async getUserActiveLicense(userId: number): Promise {
+ const license = await this.licenseRepository.findOne({
+ where: {
+ userId,
+ status: LicenseStatus.ACTIVE,
+ },
+ order: {
+ expiresAt: 'DESC',
+ },
+ });
+
+ if (!license) {
+ return null;
+ }
+
+ // 检查是否过期
+ if (license.expiresAt && new Date() > new Date(license.expiresAt)) {
+ license.status = LicenseStatus.EXPIRED;
+ await this.licenseRepository.save(license);
+ return null;
+ }
+
+ return license;
+ }
+
+ /**
+ * 验证用户授权
+ */
+ async verifyUserLicense(userId: number): Promise {
+ const license = await this.getUserActiveLicense(userId);
+ return license !== null && license.isValid();
+ }
+
+ /**
+ * 查询所有卡密(管理员)
+ */
+ async findAll(query?: QueryLicenseDto): Promise {
+ const where: any = {};
+
+ if (query?.status) {
+ where.status = query.status;
+ }
+
+ if (query?.type) {
+ where.type = query.type;
+ }
+
+ return this.licenseRepository.find({
+ where,
+ relations: ['user'],
+ order: {
+ createdAt: 'DESC',
+ },
+ });
+ }
+
+ /**
+ * 查询用户的所有卡密
+ */
+ async findByUser(userId: number): Promise {
+ return this.licenseRepository.find({
+ where: { userId },
+ order: {
+ createdAt: 'DESC',
+ },
+ });
+ }
+
+ /**
+ * 根据ID查询卡密
+ */
+ async findOne(id: number): Promise {
+ const license = await this.licenseRepository.findOne({
+ where: { id },
+ relations: ['user'],
+ });
+
+ if (!license) {
+ throw new NotFoundException('卡密不存在');
+ }
+
+ return license;
+ }
+
+ /**
+ * 撤销卡密(管理员)
+ */
+ async revoke(id: number): Promise {
+ const license = await this.findOne(id);
+
+ if (license.status === LicenseStatus.REVOKED) {
+ throw new BadRequestException('该卡密已被撤销');
+ }
+
+ license.status = LicenseStatus.REVOKED;
+ return this.licenseRepository.save(license);
+ }
+
+ /**
+ * 删除卡密(管理员)
+ */
+ async remove(id: number): Promise {
+ const license = await this.findOne(id);
+ await this.licenseRepository.remove(license);
+ }
+
+ /**
+ * 获取统计信息(管理员)
+ */
+ async getStatistics(): Promise<{
+ total: number;
+ unused: number;
+ active: number;
+ expired: number;
+ revoked: number;
+ }> {
+ const [total, unused, active, expired, revoked] = await Promise.all([
+ this.licenseRepository.count(),
+ this.licenseRepository.count({ where: { status: LicenseStatus.UNUSED } }),
+ this.licenseRepository.count({ where: { status: LicenseStatus.ACTIVE } }),
+ this.licenseRepository.count({
+ where: { status: LicenseStatus.EXPIRED },
+ }),
+ this.licenseRepository.count({
+ where: { status: LicenseStatus.REVOKED },
+ }),
+ ]);
+
+ return {
+ total,
+ unused,
+ active,
+ expired,
+ revoked,
+ };
+ }
+}
diff --git a/src/task/task.controller.ts b/src/task/task.controller.ts
index d984712..0e30f23 100644
--- a/src/task/task.controller.ts
+++ b/src/task/task.controller.ts
@@ -6,60 +6,279 @@ import {
Patch,
Param,
Delete,
+ UseGuards,
} from '@nestjs/common';
import { TaskService } from './task.service';
import { CreateTaskDto } from './dto/create-task.dto';
import { UpdateTaskDto } from './dto/update-task.dto';
import { ReorderTasksDto } from './dto/reorder-tasks.dto';
-import { ApiTags, ApiOperation, ApiResponse, ApiParam } from '@nestjs/swagger';
+import {
+ ApiTags,
+ ApiOperation,
+ ApiResponse,
+ ApiParam,
+ ApiBearerAuth,
+} from '@nestjs/swagger';
import { Task } from './entities/task.entity';
+import {
+ ErrorResponseDto,
+ UnauthorizedResponseDto,
+ NotFoundResponseDto,
+ ValidationErrorResponseDto,
+} from '../common/dto/error-response.dto';
+import { RequireLicense } from '../license/decorators/require-license.decorator';
+import { LicenseGuard } from '../license/guards/license.guard';
@ApiTags('任务模块')
+@ApiBearerAuth()
@Controller('task')
+@UseGuards(LicenseGuard)
+@RequireLicense()
export class TaskController {
constructor(private readonly taskService: TaskService) {}
@Post()
- @ApiOperation({ summary: '创建任务' })
- @ApiResponse({ status: 201, description: '创建成功', type: Task })
+ @ApiOperation({
+ summary: '创建任务',
+ description: '创建一个新的任务,需要提供任务标题,可选提供描述、截止日期和优先级。需要有效的授权卡密',
+ })
+ @ApiResponse({
+ status: 201,
+ description: '任务创建成功',
+ type: Task,
+ schema: {
+ example: {
+ id: 1,
+ title: '完成项目文档',
+ description: '编写项目的 API 文档和使用说明',
+ isCompleted: false,
+ position: 1,
+ dueDate: '2025-12-31T23:59:59.000Z',
+ priority: 'high',
+ },
+ },
+ })
+ @ApiResponse({
+ status: 400,
+ description: '请求参数错误',
+ type: ErrorResponseDto,
+ })
+ @ApiResponse({
+ status: 401,
+ description: '未授权,需要登录',
+ type: UnauthorizedResponseDto,
+ })
+ @ApiResponse({
+ status: 403,
+ description: '授权已过期或未激活,请联系管理员获取卡密',
+ type: ErrorResponseDto,
+ })
+ @ApiResponse({
+ status: 422,
+ description: '数据验证失败',
+ type: ValidationErrorResponseDto,
+ })
create(@Body() createTaskDto: CreateTaskDto) {
return this.taskService.create(createTaskDto);
}
@Get()
- @ApiOperation({ summary: '获取所有任务' })
- @ApiResponse({ status: 200, description: '获取成功', type: [Task] })
+ @ApiOperation({
+ summary: '获取所有任务',
+ description: '获取当前用户的所有任务列表,按照 position 字段排序',
+ })
+ @ApiResponse({
+ status: 200,
+ description: '获取成功,返回任务列表',
+ type: [Task],
+ schema: {
+ example: [
+ {
+ id: 1,
+ title: '完成项目文档',
+ description: '编写项目的 API 文档和使用说明',
+ isCompleted: false,
+ position: 1,
+ dueDate: '2025-12-31T23:59:59.000Z',
+ priority: 'high',
+ },
+ {
+ id: 2,
+ title: '修复 Bug',
+ description: '修复登录页面的显示问题',
+ isCompleted: true,
+ position: 2,
+ dueDate: null,
+ priority: 'medium',
+ },
+ ],
+ },
+ })
+ @ApiResponse({
+ status: 401,
+ description: '未授权,需要登录',
+ type: UnauthorizedResponseDto,
+ })
findAll() {
return this.taskService.findAll();
}
@Get(':id')
- @ApiOperation({ summary: '获取单个任务' })
- @ApiParam({ name: 'id', description: '任务ID' })
- @ApiResponse({ status: 200, description: '获取成功', type: Task })
+ @ApiOperation({
+ summary: '获取单个任务',
+ description: '根据任务 ID 获取任务的详细信息',
+ })
+ @ApiParam({
+ name: 'id',
+ description: '任务ID',
+ type: Number,
+ example: 1,
+ })
+ @ApiResponse({
+ status: 200,
+ description: '获取成功,返回任务详情',
+ type: Task,
+ schema: {
+ example: {
+ id: 1,
+ title: '完成项目文档',
+ description: '编写项目的 API 文档和使用说明',
+ isCompleted: false,
+ position: 1,
+ dueDate: '2025-12-31T23:59:59.000Z',
+ priority: 'high',
+ },
+ },
+ })
+ @ApiResponse({
+ status: 401,
+ description: '未授权,需要登录',
+ type: UnauthorizedResponseDto,
+ })
+ @ApiResponse({
+ status: 404,
+ description: '任务不存在',
+ type: NotFoundResponseDto,
+ })
findOne(@Param('id') id: string) {
return this.taskService.findOne(+id);
}
@Patch('reorder')
- @ApiOperation({ summary: '对任务进行重新排序' })
- @ApiResponse({ status: 200, description: '排序成功' })
+ @ApiOperation({
+ summary: '对任务进行重新排序',
+ description:
+ '批量更新任务的排序位置,传入按新顺序排列的任务 ID 数组,系统会自动更新每个任务的 position 值',
+ })
+ @ApiResponse({
+ status: 200,
+ description: '排序成功',
+ schema: {
+ example: {
+ message: 'Tasks reordered successfully',
+ },
+ },
+ })
+ @ApiResponse({
+ status: 400,
+ description: '请求参数错误',
+ type: ErrorResponseDto,
+ })
+ @ApiResponse({
+ status: 401,
+ description: '未授权,需要登录',
+ type: UnauthorizedResponseDto,
+ })
+ @ApiResponse({
+ status: 422,
+ description: '数据验证失败',
+ type: ValidationErrorResponseDto,
+ })
reorder(@Body() reorderTasksDto: ReorderTasksDto) {
return this.taskService.reorder(reorderTasksDto.taskIds);
}
@Patch(':id')
- @ApiOperation({ summary: '更新任务' })
- @ApiParam({ name: 'id', description: '任务ID' })
- @ApiResponse({ status: 200, description: '更新成功', type: Task })
+ @ApiOperation({
+ summary: '更新任务',
+ description: '更新指定任务的信息,可以更新标题、描述、完成状态、截止日期和优先级',
+ })
+ @ApiParam({
+ name: 'id',
+ description: '任务ID',
+ type: Number,
+ example: 1,
+ })
+ @ApiResponse({
+ status: 200,
+ description: '更新成功,返回更新后的任务信息',
+ type: Task,
+ schema: {
+ example: {
+ id: 1,
+ title: '完成项目文档(已更新)',
+ description: '编写项目的 API 文档和使用说明',
+ isCompleted: true,
+ position: 1,
+ dueDate: '2025-12-31T23:59:59.000Z',
+ priority: 'high',
+ },
+ },
+ })
+ @ApiResponse({
+ status: 400,
+ description: '请求参数错误',
+ type: ErrorResponseDto,
+ })
+ @ApiResponse({
+ status: 401,
+ description: '未授权,需要登录',
+ type: UnauthorizedResponseDto,
+ })
+ @ApiResponse({
+ status: 404,
+ description: '任务不存在',
+ type: NotFoundResponseDto,
+ })
+ @ApiResponse({
+ status: 422,
+ description: '数据验证失败',
+ type: ValidationErrorResponseDto,
+ })
update(@Param('id') id: string, @Body() updateTaskDto: UpdateTaskDto) {
return this.taskService.update(+id, updateTaskDto);
}
@Delete(':id')
- @ApiOperation({ summary: '删除任务' })
- @ApiParam({ name: 'id', description: '任务ID' })
- @ApiResponse({ status: 200, description: '删除成功' })
+ @ApiOperation({
+ summary: '删除任务',
+ description: '根据任务 ID 删除指定的任务',
+ })
+ @ApiParam({
+ name: 'id',
+ description: '任务ID',
+ type: Number,
+ example: 1,
+ })
+ @ApiResponse({
+ status: 200,
+ description: '删除成功',
+ schema: {
+ example: {
+ message: 'Task deleted successfully',
+ },
+ },
+ })
+ @ApiResponse({
+ status: 401,
+ description: '未授权,需要登录',
+ type: UnauthorizedResponseDto,
+ })
+ @ApiResponse({
+ status: 404,
+ description: '任务不存在',
+ type: NotFoundResponseDto,
+ })
remove(@Param('id') id: string) {
return this.taskService.remove(+id);
}
diff --git a/src/task/task.module.ts b/src/task/task.module.ts
index 1e9183f..14f73cb 100644
--- a/src/task/task.module.ts
+++ b/src/task/task.module.ts
@@ -3,9 +3,10 @@ import { TaskService } from './task.service';
import { TaskController } from './task.controller';
import { Task } from './entities/task.entity';
import { TypeOrmModule } from '@nestjs/typeorm';
+import { LicenseModule } from '../license/license.module';
@Module({
- imports: [TypeOrmModule.forFeature([Task])],
+ imports: [TypeOrmModule.forFeature([Task]), LicenseModule],
controllers: [TaskController],
providers: [TaskService],
})
diff --git a/src/user/user.controller.ts b/src/user/user.controller.ts
index 4a1a7aa..32b19d5 100644
--- a/src/user/user.controller.ts
+++ b/src/user/user.controller.ts
@@ -8,7 +8,12 @@ import {
import { UserService } from '../user/user.service';
import { Public } from '../auth/decorators/public.decorator';
import { ApiTags, ApiOperation, ApiResponse, ApiBody } from '@nestjs/swagger';
-import { User } from './entities/user.entity';
+import {
+ ErrorResponseDto,
+ UnauthorizedResponseDto,
+ ConflictResponseDto,
+ ValidationErrorResponseDto,
+} from '../common/dto/error-response.dto';
@ApiTags('用户模块')
@Controller('user')
@@ -17,20 +22,66 @@ export class UserController {
@Public()
@Post('register')
- @ApiOperation({ summary: '用户注册' })
+ @ApiOperation({
+ summary: '用户注册',
+ description: '创建新用户账号,需要提供用户名、密码和邮箱。注册成功后自动返回 JWT Token',
+ })
@ApiBody({
schema: {
type: 'object',
properties: {
- username: { type: 'string', description: '用户名' },
- password: { type: 'string', description: '密码' },
- email: { type: 'string', description: '邮箱' },
+ username: {
+ type: 'string',
+ description: '用户名(唯一)',
+ example: 'johndoe',
+ },
+ password: {
+ type: 'string',
+ description: '密码(6-20位)',
+ example: 'password123',
+ },
+ email: {
+ type: 'string',
+ description: '邮箱地址',
+ example: 'john@example.com',
+ },
},
required: ['username', 'password', 'email'],
},
})
- @ApiResponse({ status: 201, description: '注册成功', type: User })
- @ApiResponse({ status: 400, description: '参数错误' })
+ @ApiResponse({
+ status: 201,
+ description: '注册成功,返回用户信息和 JWT Token',
+ schema: {
+ example: {
+ message: 'User registered successfully',
+ user: {
+ id: 1,
+ username: 'johndoe',
+ email: 'john@example.com',
+ isActive: true,
+ provider: 'local',
+ },
+ access_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
+ refresh_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
+ },
+ },
+ })
+ @ApiResponse({
+ status: 400,
+ description: '请求参数错误(密码为空等)',
+ type: ErrorResponseDto,
+ })
+ @ApiResponse({
+ status: 409,
+ description: '用户名或邮箱已存在',
+ type: ConflictResponseDto,
+ })
+ @ApiResponse({
+ status: 422,
+ description: '数据验证失败',
+ type: ValidationErrorResponseDto,
+ })
async register(
@Body() body: { username: string; password: string; email: string },
) {
@@ -49,19 +100,56 @@ export class UserController {
@Public()
@Post('login')
- @ApiOperation({ summary: '用户登录' })
+ @ApiOperation({
+ summary: '用户登录',
+ description: '使用用户名和密码进行身份验证,登录成功后返回 JWT Token',
+ })
@ApiBody({
schema: {
type: 'object',
properties: {
- username: { type: 'string', description: '用户名' },
- password: { type: 'string', description: '密码' },
+ username: {
+ type: 'string',
+ description: '用户名',
+ example: 'johndoe',
+ },
+ password: {
+ type: 'string',
+ description: '密码',
+ example: 'password123',
+ },
},
required: ['username', 'password'],
},
})
- @ApiResponse({ status: 200, description: '登录成功' })
- @ApiResponse({ status: 401, description: '认证失败' })
+ @ApiResponse({
+ status: 200,
+ description: '登录成功,返回用户信息和 JWT Token',
+ schema: {
+ example: {
+ message: 'Login successful',
+ user: {
+ id: 1,
+ username: 'johndoe',
+ email: 'john@example.com',
+ isActive: true,
+ provider: 'local',
+ },
+ access_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
+ refresh_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
+ },
+ },
+ })
+ @ApiResponse({
+ status: 401,
+ description: '认证失败(用户不存在或密码错误)',
+ type: UnauthorizedResponseDto,
+ })
+ @ApiResponse({
+ status: 400,
+ description: '请求参数错误',
+ type: ErrorResponseDto,
+ })
async login(@Body() body: { username: string; password: string }) {
const { username, password } = body;
const user = await this.userService.findUserByUsername(username);
@@ -85,17 +173,43 @@ export class UserController {
@Public()
@Post('refresh-token')
- @ApiOperation({ summary: '刷新-token' })
+ @ApiOperation({
+ summary: '刷新访问令牌',
+ description: '使用 refresh_token 刷新获取新的 access_token,延长用户登录状态',
+ })
@ApiBody({
schema: {
type: 'object',
properties: {
- refresh_token: { type: 'string', description: 'Refresh Token' },
+ refresh_token: {
+ type: 'string',
+ description: 'Refresh Token(从登录或注册接口获取)',
+ example: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
+ },
},
required: ['refresh_token'],
},
})
- @ApiResponse({ status: 200, description: '刷新成功' })
+ @ApiResponse({
+ status: 200,
+ description: '刷新成功,返回新的访问令牌',
+ schema: {
+ example: {
+ access_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
+ refresh_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
+ },
+ },
+ })
+ @ApiResponse({
+ status: 401,
+ description: 'Refresh Token 无效或已过期',
+ type: UnauthorizedResponseDto,
+ })
+ @ApiResponse({
+ status: 400,
+ description: '请求参数错误',
+ type: ErrorResponseDto,
+ })
async refreshToken(@Body() body: { refresh_token: string }) {
return this.userService.refreshAccessToken(body.refresh_token);
}
diff --git a/test-license-system.sh b/test-license-system.sh
new file mode 100755
index 0000000..9682f8e
--- /dev/null
+++ b/test-license-system.sh
@@ -0,0 +1,124 @@
+#!/bin/bash
+
+# 卡密系统测试脚本
+# 使用方法: bash test-license-system.sh
+
+BASE_URL="http://localhost:3030"
+ADMIN_TOKEN=""
+USER_TOKEN=""
+LICENSE_CODE=""
+
+echo "====== 卡密系统测试 ======"
+echo ""
+
+# 颜色定义
+GREEN='\033[0;32m'
+RED='\033[0;31m'
+YELLOW='\033[1;33m'
+NC='\033[0m' # No Color
+
+# 测试函数
+test_api() {
+ local name=$1
+ local method=$2
+ local endpoint=$3
+ local data=$4
+ local token=$5
+
+ echo -e "${YELLOW}测试: ${name}${NC}"
+
+ if [ -n "$token" ]; then
+ if [ -n "$data" ]; then
+ response=$(curl -s -X $method "$BASE_URL$endpoint" \
+ -H "Authorization: Bearer $token" \
+ -H "Content-Type: application/json" \
+ -d "$data")
+ else
+ response=$(curl -s -X $method "$BASE_URL$endpoint" \
+ -H "Authorization: Bearer $token")
+ fi
+ else
+ if [ -n "$data" ]; then
+ response=$(curl -s -X $METHOD "$BASE_URL$endpoint" \
+ -H "Content-Type: application/json" \
+ -d "$data")
+ else
+ response=$(curl -s -X $method "$BASE_URL$endpoint")
+ fi
+ fi
+
+ echo "$response" | jq '.'
+ echo ""
+}
+
+# 1. 注册测试用户
+echo -e "${GREEN}步骤 1: 注册测试用户${NC}"
+REGISTER_RESPONSE=$(curl -s -X POST "$BASE_URL/user/register" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "username": "testuser_'$(date +%s)'",
+ "password": "password123",
+ "email": "test'$(date +%s)'@example.com"
+ }')
+
+USER_TOKEN=$(echo $REGISTER_RESPONSE | jq -r '.access_token')
+echo "用户Token: $USER_TOKEN"
+echo ""
+
+# 2. 测试未授权时访问任务接口(应该返回403)
+echo -e "${GREEN}步骤 2: 测试未授权访问任务接口 (预期 403)${NC}"
+test_api "创建任务 (无授权)" "POST" "/task" '{
+ "title": "测试任务",
+ "description": "这应该失败"
+}' "$USER_TOKEN"
+
+# 3. 生成测试卡密(需要管理员权限,这里模拟)
+echo -e "${GREEN}步骤 3: 生成测试卡密${NC}"
+echo -e "${RED}注意: 此步骤需要管理员权限,请手动生成卡密或直接从数据库插入${NC}"
+echo "示例 API 调用:"
+echo 'POST /license/generate'
+echo '{
+ "type": "monthly",
+ "validDays": 30,
+ "count": 1
+}'
+echo ""
+
+# 提示用户输入卡密
+read -p "请输入生成的卡密码 (格式: XXXX-XXXX-XXXX-XXXX): " LICENSE_CODE
+echo ""
+
+# 4. 激活卡密
+echo -e "${GREEN}步骤 4: 激活卡密${NC}"
+test_api "激活卡密" "POST" "/license/activate" "{
+ \"code\": \"$LICENSE_CODE\"
+}" "$USER_TOKEN"
+
+# 5. 查询授权信息
+echo -e "${GREEN}步骤 5: 查询我的授权信息${NC}"
+test_api "查询授权" "GET" "/license/my" "" "$USER_TOKEN"
+
+# 6. 测试授权后访问任务接口
+echo -e "${GREEN}步骤 6: 测试授权后访问任务接口 (应该成功)${NC}"
+test_api "创建任务 (有授权)" "POST" "/task" '{
+ "title": "测试任务",
+ "description": "这应该成功",
+ "priority": "high"
+}' "$USER_TOKEN"
+
+# 7. 获取任务列表
+echo -e "${GREEN}步骤 7: 获取任务列表${NC}"
+test_api "获取任务列表" "GET" "/task" "" "$USER_TOKEN"
+
+echo -e "${GREEN}====== 测试完成 ======${NC}"
+echo ""
+echo "测试总结:"
+echo "1. 用户注册成功"
+echo "2. 未授权时无法访问任务功能 (403)"
+echo "3. 卡密激活成功"
+echo "4. 授权后可以正常使用任务功能"
+echo ""
+echo "后续测试建议:"
+echo "- 测试卡密延期功能(激活第二个卡密)"
+echo "- 测试卡密过期后的访问"
+echo "- 测试管理员接口(统计、查询、撤销等)"