| New file |
| | |
| | | { |
| | | "permissions": { |
| | | "allow": [ |
| | | "Bash(node scripts/build.js --win)", |
| | | "Bash(./jms-connection-service-windows.exe)", |
| | | "Bash(curl -s -o /dev/null -w \"%{http_code}\" http://localhost:3100/)", |
| | | "Bash(netstat -ano)", |
| | | "Bash(powershell *)", |
| | | "Bash(curl -s -o nul -w \"%{http_code}\" http://localhost:3100/)", |
| | | "Bash(node scripts/build.js --linux)" |
| | | ] |
| | | } |
| | | } |
| | |
| | | │ 透析机 N │ └─────────────────┘ └──────────────┘ |
| | | ``` |
| | | |
| | | ## 2. 环境要求 |
| | | ## 2. 部署方式选择 |
| | | |
| | | | 方式 | 适用场景 | 是否需要 Node.js | |
| | | |------|----------|-----------------| |
| | | | **可执行程序部署**(推荐) | 实施部署、生产环境 | **不需要** | |
| | | | **源码部署** | 开发调试、需修改源码 | 需要 Node.js ≥ 18.x | |
| | | |
| | | > 两种方式效果一致。可执行程序已将 Node.js 运行时与依赖打包,省去环境安装步骤。 |
| | | |
| | | --- |
| | | |
| | | ## 3. 可执行程序部署(推荐) |
| | | |
| | | ### 3.1 环境要求 |
| | | |
| | | | 项目 | 要求 | |
| | | |------|------| |
| | | | **操作系统** | Windows Server 2016+ / Windows 10+ 或 Linux(Ubuntu 20.04+ / CentOS 7+) | |
| | | | **内存** | ≥ 256 MB(本服务占用 ~80 MB) | |
| | | | **磁盘** | ≥ 1 GB(含日志滚动保留 30 天) | |
| | | | **网络** | 需与 GC-110N 设备在同一局域网,或能通过路由访问设备 TCP 端口 | |
| | | |
| | | ### 3.2 获取发布包 |
| | | |
| | | 发布包位于项目 `dist/` 目录(或由开发人员交付): |
| | | |
| | | ``` |
| | | dist/ |
| | | ├── jms-connection-service-windows.zip # Windows 部署包(约 18 MB) |
| | | ├── jms-connection-service-linux/ # Linux 部署目录(可自行 tar 打包) |
| | | └── jms-connection-service-windows/ # Windows 部署目录 |
| | | ``` |
| | | |
| | | **Windows 实施人员**:解压 `jms-connection-service-windows.zip` 到目标目录(如 `C:\JMS\`)。 |
| | | |
| | | **Linux 实施人员**:将 `jms-connection-service-linux/` 目录整体拷贝到目标路径(如 `/opt/jms-connection-service/`)。 |
| | | |
| | | ### 3.3 目录结构(解压后) |
| | | |
| | | ``` |
| | | jms-connection-service-windows/ # Linux 对应目录类似 |
| | | ├── jms-connection-service-windows.exe # 主程序(Linux 无 .exe 后缀) |
| | | ├── config.json # 配置文件 ★ |
| | | ├── logs/ # 日志目录(自动创建) |
| | | └── README.txt # 简要说明 |
| | | ``` |
| | | |
| | | ### 3.4 配置 |
| | | |
| | | 编辑 `config.json`,必改项: |
| | | |
| | | - `devices` — 填写实际设备的 IP、端口、序列号 |
| | | - `mqtt.enabled` / `aliyun.enabled` — 按需开启上传通道 |
| | | |
| | | 详细配置项说明见 [第 5 节](#5-配置说明)。 |
| | | |
| | | ### 3.5 验证连通性 |
| | | |
| | | 在启动服务前,确认服务器能连通 GC-110N 设备: |
| | | |
| | | ```bash |
| | | # Windows PowerShell: |
| | | Test-NetConnection -ComputerName 192.168.160.1 -Port 10001 |
| | | |
| | | # Linux: |
| | | nc -zv 192.168.160.1 10001 |
| | | ``` |
| | | |
| | | ### 3.6 启动服务 |
| | | |
| | | **Windows(前台运行):** |
| | | |
| | | ```cmd |
| | | C:\JMS\jms-connection-service-windows.exe |
| | | ``` |
| | | |
| | | **Windows(注册为系统服务,开机自启,以管理员身份运行):** |
| | | |
| | | ```cmd |
| | | sc create JMSConnection binPath= "C:\JMS\jms-connection-service-windows.exe" start= auto |
| | | sc start JMSConnection |
| | | |
| | | :: 停止: sc stop JMSConnection |
| | | :: 删除: sc delete JMSConnection |
| | | ``` |
| | | |
| | | **Linux(前台运行):** |
| | | |
| | | ```bash |
| | | chmod +x jms-connection-service-linux |
| | | ./jms-connection-service-linux |
| | | ``` |
| | | |
| | | **Linux(后台运行,使用 PM2):** |
| | | |
| | | ```bash |
| | | npm install -g pm2 # PM2 本身需要 Node.js |
| | | pm2 start ./jms-connection-service-linux --name jms-connection-service |
| | | pm2 save |
| | | pm2 startup # 设置开机自启 |
| | | ``` |
| | | |
| | | **Linux(使用 systemd,见 [6.1 节](#61-systemd-服务-linux))** |
| | | |
| | | ### 3.7 访问监控面板 |
| | | |
| | | 浏览器打开 `http://<服务器IP>:3100`。 |
| | | |
| | | ### 3.8 停止服务 |
| | | |
| | | - **前台运行**:`Ctrl + C` |
| | | - **Windows 服务**:`sc stop JMSConnection` |
| | | - **PM2**:`pm2 stop jms-connection-service` |
| | | |
| | | --- |
| | | |
| | | ## 4. 源码部署(需 Node.js) |
| | | |
| | | 适用于开发调试或需修改源码的场景。 |
| | | |
| | | ### 4.1 环境要求 |
| | | |
| | | | 项目 | 要求 | |
| | | |------|------| |
| | |
| | | | **磁盘** | ≥ 1 GB(日志滚动保留 30 天) | |
| | | | **网络** | 需与 GC-110N 设备在同一局域网,或能通过路由访问设备 TCP 端口 | |
| | | |
| | | ### 2.1 检查 Node.js 版本 |
| | | |
| | | ```bash |
| | | node -v # 应输出 v18.x 或 v20.x |
| | | npm -v # 应输出 9.x 或 10.x |
| | | ``` |
| | | |
| | | ### 2.2 安装 Node.js(如未安装) |
| | | ### 4.2 安装 Node.js(如未安装) |
| | | |
| | | **Ubuntu/Debian:** |
| | | |
| | | ```bash |
| | | curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - |
| | | sudo apt-get install -y nodejs |
| | | ``` |
| | | |
| | | **CentOS/RHEL:** |
| | | |
| | | ```bash |
| | | curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash - |
| | | sudo yum install -y nodejs |
| | | ``` |
| | | |
| | | **Windows:** |
| | | 从 https://nodejs.org 下载 LTS 安装包,勾选「Add to PATH」。 |
| | | **Windows:** 从 https://nodejs.org 下载 LTS 安装包,勾选「Add to PATH」。 |
| | | |
| | | ## 3. 部署步骤 |
| | | |
| | | ### 3.1 获取代码 |
| | | 验证安装: |
| | | |
| | | ```bash |
| | | # 将部署包解压或从 Git 拉取 |
| | | cd /opt |
| | | tar -xzf jms-connection-service.tar.gz -C /opt/ |
| | | # 或: git clone <repo-url> /opt/jms-connection-service |
| | | node -v # 应输出 v18.x 或 v20.x |
| | | npm -v # 应输出 9.x 或 10.x |
| | | ``` |
| | | |
| | | ### 4.3 获取代码 |
| | | |
| | | ```bash |
| | | cd /opt |
| | | git clone <repo-url> /opt/jms-connection-service |
| | | # 或解压源码包: tar -xzf jms-connection-service.tar.gz -C /opt/ |
| | | cd /opt/jms-connection-service |
| | | ``` |
| | | |
| | | ### 3.2 安装依赖 |
| | | ### 4.4 安装依赖 |
| | | |
| | | ```bash |
| | | npm install --production |
| | |
| | | |
| | | > 仅安装生产依赖(`dependencies`),不安装 devDependencies。 |
| | | |
| | | ### 3.3 配置 |
| | | |
| | | 复制并修改配置文件: |
| | | ### 4.5 配置 |
| | | |
| | | ```bash |
| | | # 如无可直接编辑 config.json(已内置在部署包中) |
| | | vi config.json |
| | | ``` |
| | | |
| | | 详细配置项说明见 [第 4 节](#4-配置说明)。 |
| | | 详细配置项说明见 [第 5 节](#5-配置说明)。 |
| | | |
| | | ### 3.4 验证连通性 |
| | | |
| | | 在启动服务前,确认服务器能连通 GC-110N 设备: |
| | | |
| | | ```bash |
| | | # 测试 TCP 端口(替换为实际 IP 和端口) |
| | | nc -zv 192.168.160.1 10001 |
| | | # 或 Windows: |
| | | # Test-NetConnection -ComputerName 192.168.160.1 -Port 10001 |
| | | ``` |
| | | |
| | | ### 3.5 启动服务 |
| | | ### 4.6 启动服务 |
| | | |
| | | ```bash |
| | | # 前台运行(调试用) |
| | |
| | | npm install -g pm2 |
| | | pm2 start index.js --name jms-connection-service |
| | | pm2 save |
| | | pm2 startup # 设置开机自启 |
| | | pm2 startup |
| | | ``` |
| | | |
| | | 启动成功后控制台输出: |
| | | 启动成功输出: |
| | | |
| | | ``` |
| | | 配置校验通过: 1/1 台设备启用 |
| | |
| | | 日志目录: /opt/jms-connection-service/logs 保留: 30 天 |
| | | 轮询间隔: 10s 重连退避: 3s~60s |
| | | Dashboard 已启动: http://0.0.0.0:3100 |
| | | |
| | | 联机服务已启动 → Dashboard: http://localhost:3100 |
| | | ``` |
| | | |
| | | ### 3.6 访问监控面板 |
| | | ### 4.7 访问监控面板 |
| | | |
| | | 浏览器打开 `http://<服务器IP>:3100`,可看到设备连接状态、实时数据和上传状态。 |
| | | 浏览器打开 `http://<服务器IP>:3100`。 |
| | | |
| | | ## 4. 配置说明 |
| | | --- |
| | | |
| | | 配置文件为根目录下的 `config.json`,格式如下: |
| | | ## 5. 配置说明 |
| | | |
| | | 配置文件为 `config.json`(位于程序同目录),格式: |
| | | |
| | | ```jsonc |
| | | { |
| | | // ── 全局参数 ── |
| | | "pollIntervalMs": 10000, // K 轮询间隔(毫秒),默认 10000 = 10s |
| | | "pollIntervalMs": 10000, // K 轮询间隔(毫秒),默认 10s |
| | | "connectTimeoutMs": 5000, // TCP 握手超时(毫秒) |
| | | "reconnectBaseMs": 3000, // 重连退避基数(毫秒) |
| | | "reconnectMaxMs": 60000, // 重连退避上限(毫秒),实际延迟 = min(base*2^(n-1), max) |
| | | "logDir": "./logs", // 日志目录(相对路径基于项目根目录) |
| | | "reconnectMaxMs": 60000, // 重连退避上限(毫秒) |
| | | "logDir": "./logs", // 日志目录(相对路径基于程序工作目录) |
| | | "logRetentionDays": 30, // 日志保留天数 |
| | | "dashboardPort": 3100, // 监控大屏 HTTP 端口 |
| | | |
| | | // ── MQTT 上传(可选) ── |
| | | "mqtt": { |
| | | "enabled": false, // 是否启用 MQTT 上传 |
| | | "brokerUrl": "mqtt.ihemodialysis.com", // MQTT Broker 地址(不含协议前缀) |
| | | "port": 62283, // MQTT 端口 |
| | | "username": "data", // 认证用户名 |
| | | "password": "data#2018", // 认证密码 |
| | | "reconnectPeriod": 5000, // MQTT 重连间隔(毫秒) |
| | | "clientCode": "CLIENT9227100800901fcKB", // 客户端标识 |
| | | "defaultTopicPrefix": "touxiji", // 默认 Topic 前缀,发布 topic = {prefix}/{deviceNo} |
| | | "qos": 1 // MQTT QoS 级别 |
| | | "enabled": false, |
| | | "brokerUrl": "mqtt.ihemodialysis.com", |
| | | "port": 62283, |
| | | "username": "data", |
| | | "password": "data#2018", |
| | | "reconnectPeriod": 5000, |
| | | "clientCode": "CLIENT9227100800901fcKB", |
| | | "defaultTopicPrefix": "touxiji", |
| | | "qos": 1 |
| | | }, |
| | | |
| | | // ── 阿里云 IoT 上传(可选) ── |
| | | "aliyun": { |
| | | "enabled": true, // 是否启用阿里云上传 |
| | | "autoRegister": true, // 是否自动注册设备(三元组不存在时自动创建) |
| | | "tupleApiBaseUrl": "https://things.icoldchain.cn/", // 三元组 API 地址 |
| | | "tupleApiPath": "device/info/getAliyunDeviceSecret", // 三元组 API 路径 |
| | | "tupleRetryCooldownMs": 60000 // 三元组请求失败后冷却时间(毫秒) |
| | | "enabled": true, |
| | | "autoRegister": true, |
| | | "tupleApiBaseUrl": "https://things.icoldchain.cn/", |
| | | "tupleApiPath": "device/info/getAliyunDeviceSecret", |
| | | "tupleRetryCooldownMs": 60000 |
| | | }, |
| | | |
| | | // ── 设备列表 ── |
| | | "devices": [ |
| | | { |
| | | "ip": "192.168.160.1", // 设备 IP 地址(必填) |
| | | "port": 10001, // 设备 TCP 端口(必填,GC-110N 默认 10001) |
| | | "serialNumber": "xy123", // 设备序列号(必填,用于上传标识) |
| | | "enabled": true // 是否启用(false 则跳过此设备) |
| | | "ip": "192.168.160.1", // 设备 IP(必填) |
| | | "port": 10001, // 设备端口(必填,GC-110N 默认 10001) |
| | | "serialNumber": "xy123", // 序列号(必填) |
| | | "enabled": true // 是否启用 |
| | | } |
| | | // 可添加多台设备... |
| | | ] |
| | | } |
| | | ``` |
| | | |
| | | ### 4.1 重连退避说明 |
| | | ### 5.1 重连退避 |
| | | |
| | | 服务使用指数退避策略处理断线重连: |
| | | 断线后使用指数退避,连接成功后计数器重置: |
| | | |
| | | | 断开次数 | 延迟时间(base=3000, max=60000) | |
| | | |----------|--------------------------------| |
| | | | 断开次数 | 延迟(base=3000, max=60000) | |
| | | |----------|---------------------------| |
| | | | 第 1 次 | 3s | |
| | | | 第 2 次 | 6s | |
| | | | 第 3 次 | 12s | |
| | |
| | | | 第 5 次 | 48s | |
| | | | 第 6 次+ | 60s(达到上限) | |
| | | |
| | | 连接成功后计数器重置。 |
| | | |
| | | ### 4.2 设备配置示例 |
| | | ### 5.2 多设备配置示例 |
| | | |
| | | ```json |
| | | "devices": [ |
| | |
| | | ] |
| | | ``` |
| | | |
| | | ## 5. 运行管理 |
| | | --- |
| | | |
| | | ### 5.1 PM2 常用命令 |
| | | ## 6. 运行管理 |
| | | |
| | | ### 6.1 systemd 服务(Linux) |
| | | |
| | | 创建 systemd 服务文件实现开机自启和进程守护: |
| | | |
| | | ```bash |
| | | sudo vi /etc/systemd/system/jms-connection.service |
| | | ``` |
| | | |
| | | ```ini |
| | | [Unit] |
| | | Description=JMS GC-110N Dialysis Connection Service |
| | | After=network.target |
| | | |
| | | [Service] |
| | | Type=simple |
| | | WorkingDirectory=/opt/jms-connection-service |
| | | ExecStart=/opt/jms-connection-service/jms-connection-service-linux |
| | | Restart=always |
| | | RestartSec=10 |
| | | StandardOutput=journal |
| | | StandardError=journal |
| | | SyslogIdentifier=jms-connection |
| | | |
| | | [Install] |
| | | WantedBy=multi-user.target |
| | | ``` |
| | | |
| | | ```bash |
| | | sudo systemctl daemon-reload |
| | | sudo systemctl enable jms-connection |
| | | sudo systemctl start jms-connection |
| | | |
| | | # 常用命令 |
| | | sudo systemctl status jms-connection # 查看状态 |
| | | sudo systemctl restart jms-connection # 重启 |
| | | sudo systemctl stop jms-connection # 停止 |
| | | journalctl -u jms-connection -f # 查看日志 |
| | | ``` |
| | | |
| | | ### 6.2 Windows 服务管理 |
| | | |
| | | ```cmd |
| | | :: 创建服务(管理员权限) |
| | | sc create JMSConnection binPath= "C:\JMS\jms-connection-service-windows.exe" start= auto |
| | | |
| | | :: 启动 / 停止 / 查询 |
| | | sc start JMSConnection |
| | | sc stop JMSConnection |
| | | sc query JMSConnection |
| | | |
| | | :: 删除服务(先停止) |
| | | sc stop JMSConnection |
| | | sc delete JMSConnection |
| | | ``` |
| | | |
| | | ### 6.3 PM2 常用命令 |
| | | |
| | | ```bash |
| | | pm2 status # 查看进程状态 |
| | | pm2 logs jms-connection-service # 查看实时日志 |
| | | pm2 restart jms-connection-service # 重启服务 |
| | | pm2 stop jms-connection-service # 停止服务 |
| | | pm2 delete jms-connection-service # 从 PM2 移除 |
| | | pm2 restart jms-connection-service # 重启 |
| | | pm2 stop jms-connection-service # 停止 |
| | | pm2 delete jms-connection-service # 移除 |
| | | ``` |
| | | |
| | | ### 5.2 日志查看 |
| | | ### 6.4 日志查看 |
| | | |
| | | 日志文件位于 `logDir` 配置的目录中(默认 `./logs`),按天滚动: |
| | | 日志按天滚动,位于 `logDir` 配置的目录(默认 `./logs`): |
| | | |
| | | ``` |
| | | logs/ |
| | | ├── service.2026-05-10.log |
| | | ├── service.2026-05-11.log |
| | | └── service.2026-05-12.log # 最多保留 30 天 |
| | | ├── service.2026-05-12.log |
| | | └── service.2026-05-13.log # 最多保留 30 天 |
| | | ``` |
| | | |
| | | 日志中的关键符号: |
| | | 日志符号含义: |
| | | |
| | | | 符号 | 含义 | |
| | | |------|------| |
| | | | `→` | 发送 K 请求 | |
| | | | `←` | 收到 K 响应(含原始报文) | |
| | | | `✓` | TCP 连接成功 / 上传通道连接成功 | |
| | | | `←` | 收到 K 响应 | |
| | | | `✓` | TCP 连接成功 / 上传通道就绪 | |
| | | | `✂` | TCP 断开 | |
| | | | `↻` | 计划重连 | |
| | | | `↑` | 上传成功 | |
| | | | `✗` | 错误 | |
| | | | `!` | 警告 | |
| | | |
| | | ### 5.3 优雅停止 |
| | | ### 6.5 优雅停止 |
| | | |
| | | 服务收到 SIGINT / SIGTERM 后会依次关闭:设备连接 → 上传模块 → Dashboard → 日志清理定时器。 |
| | | |
| | | ```bash |
| | | # PM2 方式 |
| | | # PM2 |
| | | pm2 stop jms-connection-service |
| | | |
| | | # 直接进程方式(发送 SIGINT) |
| | | kill -2 $(pgrep -f "node index.js") |
| | | # systemd |
| | | sudo systemctl stop jms-connection |
| | | |
| | | # 直接进程 |
| | | kill -2 $(pgrep -f "jms-connection-service") |
| | | ``` |
| | | |
| | | 服务会依次关闭:设备连接 → 上传模块 → Dashboard → 日志清理定时器。 |
| | | --- |
| | | |
| | | ## 6. 网络与防火墙 |
| | | ## 7. 网络与防火墙 |
| | | |
| | | ### 6.1 出站连接 |
| | | |
| | | 服务作为 TCP 客户端,需要访问以下目标: |
| | | ### 7.1 出站连接 |
| | | |
| | | | 目标 | 协议 | 端口 | 用途 | |
| | | |------|------|------|------| |
| | | | GC-110N 设备 IP | TCP | 10001(可配置) | K 指令轮询 | |
| | | | GC-110N 设备 | TCP | 10001(可配置) | K 指令轮询 | |
| | | | MQTT Broker | TCP | 62283(可配置) | MQTT 上传 | |
| | | | 阿里云 IoT SDK | TCP | 443 (TLS) | 阿里云属性上报 | |
| | | | 三元组 API | HTTPS | 443 | 获取设备三元组 | |
| | | | 阿里云 IoT | TCP | 443 (TLS) | 属性上报 | |
| | | | 三元组 API | HTTPS | 443 | 获取设备凭证 | |
| | | |
| | | ### 6.2 入站连接 |
| | | ### 7.2 入站连接 |
| | | |
| | | | 来源 | 协议 | 端口 | 用途 | |
| | | |------|------|------|------| |
| | | | 浏览器(局域网) | HTTP | 3100(可配置) | 监控大屏 | |
| | | | 浏览器(局域网) | WebSocket | 3100(同 HTTP) | 实时数据推送 | |
| | | | 局域网浏览器 | HTTP | 3100(可配置) | 监控大屏 | |
| | | | 局域网浏览器 | WebSocket | 3100 | 实时数据推送 | |
| | | |
| | | ### 6.3 防火墙配置示例(Linux iptables) |
| | | ### 7.3 Linux iptables |
| | | |
| | | ```bash |
| | | # 允许 Dashboard 入站(仅内网) |
| | | # 允许内网访问 Dashboard |
| | | iptables -A INPUT -s 192.168.0.0/16 -p tcp --dport 3100 -j ACCEPT |
| | | iptables -A INPUT -p tcp --dport 3100 -j DROP |
| | | |
| | | # 出站一般默认为 ACCEPT,无需额外配置 |
| | | ``` |
| | | |
| | | ### 6.4 Windows 防火墙 |
| | | ### 7.4 Windows 防火墙 |
| | | |
| | | ```powershell |
| | | # 允许 Dashboard 端口入站 |
| | | New-NetFirewallRule -DisplayName "JMS Dashboard" -Direction Inbound -Protocol TCP -LocalPort 3100 -Action Allow |
| | | ``` |
| | | |
| | | ## 7. 监控面板使用 |
| | | --- |
| | | |
| | | ### 7.1 面板概览 |
| | | ## 8. 监控面板使用 |
| | | |
| | | 访问 `http://<服务器IP>:3100` 进入监控大屏: |
| | | 访问 `http://<服务器IP>:3100`: |
| | | |
| | | - **顶部状态栏**:协议版本、WebSocket 连接状态、轮询间隔 |
| | | - **汇总卡片**:设备总数、在线数、数据正常数、异常数、MQTT/阿里云上传状态、最近上传结果 |
| | | - **设备列表**:每台设备的 IP、序列号、连接状态、最后数据时间、最后上传时间、字段数、重连次数、错误信息 |
| | | - **顶部**:协议版本、WebSocket 状态、轮询间隔 |
| | | - **汇总卡片**:设备总数、在线数、数据正常数、异常数、MQTT/阿里云上传状态、最近上传 |
| | | - **设备列表**:IP、序列号、状态、最后数据时间、最后上传时间、字段数、重连次数、错误信息 |
| | | - **点击设备行**:展开详情面板,显示 32 项参数的实时值及原始 K 报文 |
| | | |
| | | ### 7.2 查看设备详情 |
| | | |
| | | 点击设备行可展开详情面板,显示: |
| | | |
| | | - 32 项治疗参数的实时值(字段 ID、中文名称、数值、单位) |
| | | - 原始 K 格式报文(如 `K0000A00010B00005...`) |
| | | |
| | | 再次点击收起。 |
| | | |
| | | ### 7.3 状态指示灯 |
| | | 状态指示灯: |
| | | |
| | | | 颜色 | 含义 | |
| | | |------|------| |
| | |
| | | | 🟡 黄色 | 连接中 | |
| | | | 🔵 蓝色 | 等待轮询 | |
| | | | 🔴 红色 | 断线 / 异常 | |
| | | | ⚫ 灰色 | 已禁用 / 等待 | |
| | | | ⚫ 灰色 | 已禁用 | |
| | | |
| | | ## 8. 常见问题排查 |
| | | --- |
| | | |
| | | ### 8.1 设备显示「断线」 |
| | | ## 9. 常见问题排查 |
| | | |
| | | 1. **检查网络连通性**:`ping <设备IP>` 和 `nc -zv <设备IP> <端口>` |
| | | 2. **检查设备是否开机**:GC-110N 设备需处于治疗或待机状态 |
| | | 3. **检查防火墙**:确认服务器到设备的 TCP 端口未被拦截 |
| | | 4. **查看日志**:`logs/service.YYYY-MM-DD.log` 搜索 `✂` 和 `✗` |
| | | ### 9.1 设备显示「断线」 |
| | | |
| | | ### 8.2 收不到数据 / 字段数为 0 |
| | | 1. `ping <设备IP>` 和 `nc -zv <设备IP> <端口>` 检查连通性 |
| | | 2. 确认 GC-110N 设备已开机 |
| | | 3. 检查防火墙是否拦截 TCP 端口 |
| | | 4. 查看 `logs/service.YYYY-MM-DD.log` 搜索 `✂` 和 `✗` |
| | | |
| | | 1. 确认设备已进入治疗状态(待机状态下 K 指令返回数据可能有限) |
| | | 2. 查看日志中 `←` 行,检查原始报文格式是否正确(应以 `K` 开头 + 4 位状态码) |
| | | ### 9.2 收不到数据 / 字段数为 0 |
| | | |
| | | 1. 确认设备已进入治疗状态(待机状态可能返回有限数据) |
| | | 2. 查看日志中 `←` 行,确认报文以 `K` 开头 + 4 位状态码 |
| | | 3. 确认设备固件支持 K 格式协议 |
| | | |
| | | ### 8.3 阿里云上传失败 |
| | | ### 9.3 阿里云上传失败 |
| | | |
| | | 1. **三元组获取失败**:检查 `aliyun.tupleApiBaseUrl` 能否从服务器访问(`curl <url>`) |
| | | 2. **属性上报超时**:检查服务器到阿里云 IoT 的 443 端口连通性 |
| | | 3. **设备未注册**:设置 `aliyun.autoRegister: true` 自动注册,或先在阿里云 IoT 平台创建设备 |
| | | 4. **冷却期**:三元组请求失败后进入 60s 冷却期,期间不重试,查看日志 `tuple` 事件 |
| | | 1. 检查 `aliyun.tupleApiBaseUrl` 可达性:`curl <url>` |
| | | 2. 检查服务器到阿里云 IoT 443 端口连通性 |
| | | 3. 设置 `aliyun.autoRegister: true` 自动注册设备 |
| | | 4. 三元组失败后进入 60s 冷却期,期间不重试 |
| | | |
| | | ### 8.4 MQTT 上传不工作 |
| | | ### 9.4 MQTT 上传不工作 |
| | | |
| | | 1. 确认 `mqtt.enabled: true` |
| | | 2. 检查 MQTT Broker 地址和端口是否可达 |
| | | 3. 确认用户名密码正确 |
| | | 4. Dashboard 的 MQTT 卡片会显示当前连接状态 |
| | | 2. 检查 MQTT Broker 地址端口可达性 |
| | | 3. 确认认证凭据正确 |
| | | 4. Dashboard 的 MQTT 卡片会显示连接状态 |
| | | |
| | | ### 8.5 Dashboard 打不开 |
| | | ### 9.5 Dashboard 打不开 |
| | | |
| | | 1. 确认 `dashboardPort` 未被占用:`netstat -tlnp | grep 3100` |
| | | 2. 确认防火墙允许对应端口入站 |
| | | 3. 确认服务已正常启动(查看控制台输出) |
| | | 1. 确认端口未被占用:`netstat -tlnp | grep 3100` |
| | | 2. 确认防火墙允许入站 |
| | | 3. 确认服务已正常启动 |
| | | |
| | | ### 8.6 日志文件过大 |
| | | ### 9.6 可执行程序启动报错 |
| | | |
| | | 服务内置了日志清理机制,每小时检查一次并删除超过保留天数的日志。如需手动清理: |
| | | 1. **Windows**:确认已安装 [Visual C++ Redistributable](https://aka.ms/vs/17/release/vc_redist.x64.exe) |
| | | 2. **Linux**:确认已赋予执行权限 `chmod +x` |
| | | 3. 确认 `config.json` 与可执行文件在同一目录 |
| | | |
| | | ```bash |
| | | # 删除 30 天前的日志 |
| | | find ./logs -name "*.log" -mtime +30 -delete |
| | | ``` |
| | | --- |
| | | |
| | | ## 9. 目录结构 |
| | | ## 10. 目录结构 |
| | | |
| | | ``` |
| | | jms-connection-service/ |
| | | ├── index.js # 入口文件 |
| | | ├── config.json # 配置文件 ★ |
| | | ├── package.json # 依赖声明 |
| | | ├── scripts/ |
| | | │ └── build.js # 打包构建脚本 |
| | | ├── lib/ |
| | | │ ├── logger.js # 日志模块(按天滚动,控制台彩色 + 文件纯文本) |
| | | │ ├── logger.js # 日志模块(按天滚动) |
| | | │ ├── data-cache.js # 内存数据缓存(Map<ip, deviceData>) |
| | | │ ├── device-manager.js # 设备管理(遍历 config.devices 创建连接) |
| | | │ ├── device-manager.js # 设备管理(遍历创建连接) |
| | | │ ├── device-connection.js # 单设备 TCP 长连接 + K 轮询 + 重连 |
| | | │ ├── protocol.js # GC-110N K 格式解析器 |
| | | │ └── upload/ |
| | | │ ├── index.js # 上传总控(顺序执行 MQTT → 阿里云) |
| | | │ ├── index.js # 上传总控(顺序:MQTT → 阿里云) |
| | | │ ├── mqtt-uploader.js # MQTT 单例客户端 |
| | | │ ├── aliyun-uploader.js # 阿里云 IoT SDK 设备实例池 |
| | | │ ├── tuple-api.js # 三元组 API HTTP 请求 |
| | |
| | | └── index.html # 监控大屏单页 |
| | | ``` |
| | | |
| | | ## 10. 附录:GC-110N K 格式字段表 |
| | | --- |
| | | |
| | | ## 11. 开发者打包 |
| | | |
| | | 如需从源码重新打包可执行程序: |
| | | |
| | | ```bash |
| | | # 安装开发依赖(含 pkg) |
| | | npm install |
| | | |
| | | # 打包 Windows + Linux |
| | | npm run build |
| | | |
| | | # 仅打包 Windows |
| | | npm run build:win |
| | | |
| | | # 仅打包 Linux |
| | | npm run build:linux |
| | | ``` |
| | | |
| | | 打包产物输出到 `dist/` 目录: |
| | | |
| | | ``` |
| | | dist/ |
| | | ├── jms-connection-service-windows.zip # Windows 部署包 |
| | | ├── jms-connection-service-windows/ # Windows 部署目录 |
| | | └── jms-connection-service-linux/ # Linux 部署目录 |
| | | ``` |
| | | |
| | | > 打包使用 [pkg](https://github.com/vercel/pkg) 将 Node.js 运行时与应用代码合并为独立可执行文件。首次打包需下载 Node.js 二进制(~30 MB),后续打包使用缓存。 |
| | | |
| | | --- |
| | | |
| | | ## 12. 附录:GC-110N K 格式字段表 |
| | | |
| | | | ID | 中文名称 | 单位 | 宽度(字节) | |
| | | |----|----------|------|-------------| |
| | |
| | | const { UploadManager } = require("./lib/upload"); |
| | | const { createDashboard } = require("./dashboard/server"); |
| | | |
| | | const configPath = path.join(__dirname, "config.json"); |
| | | // 配置读取:优先从工作目录(CWD),便于打包后用户编辑;开发时回退到 __dirname |
| | | let configPath = path.resolve(process.cwd(), "config.json"); |
| | | if (!fs.existsSync(configPath)) { |
| | | console.error("缺少 config.json,请先创建配置文件"); |
| | | configPath = path.join(__dirname, "config.json"); |
| | | } |
| | | if (!fs.existsSync(configPath)) { |
| | | console.error("缺少 config.json,请先创建配置文件(放置于当前工作目录或程序目录)"); |
| | | process.exit(1); |
| | | } |
| | | |
| | |
| | | const activeDevices = config.devices.filter((d) => d.enabled !== false); |
| | | console.log(`配置校验通过: ${activeDevices.length}/${config.devices.length} 台设备启用`); |
| | | |
| | | const logDir = path.resolve(__dirname, config.logDir || "./logs"); |
| | | const logDir = path.resolve(process.cwd(), config.logDir || "./logs"); |
| | | const logger = createLogger({ |
| | | logDir, |
| | | retentionDays: config.logRetentionDays || 30, |
| | |
| | | "mqtt": "^5.6.0", |
| | | "qs": "^6.12.0", |
| | | "ws": "^8.16.0" |
| | | }, |
| | | "bin": { |
| | | "jms-connection-service": "index.js" |
| | | }, |
| | | "devDependencies": { |
| | | "pkg": "^5.8.1" |
| | | } |
| | | }, |
| | | "node_modules/@babel/generator": { |
| | | "version": "7.18.2", |
| | | "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.18.2.tgz", |
| | | "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "@babel/types": "^7.18.2", |
| | | "@jridgewell/gen-mapping": "^0.3.0", |
| | | "jsesc": "^2.5.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=6.9.0" |
| | | } |
| | | }, |
| | | "node_modules/@babel/helper-string-parser": { |
| | | "version": "7.27.1", |
| | | "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", |
| | | "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=6.9.0" |
| | | } |
| | | }, |
| | | "node_modules/@babel/helper-validator-identifier": { |
| | | "version": "7.28.5", |
| | | "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", |
| | | "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=6.9.0" |
| | | } |
| | | }, |
| | | "node_modules/@babel/parser": { |
| | | "version": "7.18.4", |
| | | "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.18.4.tgz", |
| | | "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "bin": { |
| | | "parser": "bin/babel-parser.js" |
| | | }, |
| | | "engines": { |
| | | "node": ">=6.0.0" |
| | | } |
| | | }, |
| | | "node_modules/@babel/runtime": { |
| | |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=6.9.0" |
| | | } |
| | | }, |
| | | "node_modules/@babel/types": { |
| | | "version": "7.19.0", |
| | | "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.19.0.tgz", |
| | | "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "@babel/helper-string-parser": "^7.18.10", |
| | | "@babel/helper-validator-identifier": "^7.18.6", |
| | | "to-fast-properties": "^2.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=6.9.0" |
| | | } |
| | | }, |
| | | "node_modules/@jridgewell/gen-mapping": { |
| | | "version": "0.3.13", |
| | | "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", |
| | | "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "@jridgewell/sourcemap-codec": "^1.5.0", |
| | | "@jridgewell/trace-mapping": "^0.3.24" |
| | | } |
| | | }, |
| | | "node_modules/@jridgewell/resolve-uri": { |
| | | "version": "3.1.2", |
| | | "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", |
| | | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=6.0.0" |
| | | } |
| | | }, |
| | | "node_modules/@jridgewell/sourcemap-codec": { |
| | | "version": "1.5.5", |
| | | "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", |
| | | "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", |
| | | "dev": true, |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/@jridgewell/trace-mapping": { |
| | | "version": "0.3.31", |
| | | "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", |
| | | "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "@jridgewell/resolve-uri": "^3.1.0", |
| | | "@jridgewell/sourcemap-codec": "^1.4.14" |
| | | } |
| | | }, |
| | | "node_modules/@nodelib/fs.scandir": { |
| | | "version": "2.1.5", |
| | | "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", |
| | | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "@nodelib/fs.stat": "2.0.5", |
| | | "run-parallel": "^1.1.9" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 8" |
| | | } |
| | | }, |
| | | "node_modules/@nodelib/fs.stat": { |
| | | "version": "2.0.5", |
| | | "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", |
| | | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">= 8" |
| | | } |
| | | }, |
| | | "node_modules/@nodelib/fs.walk": { |
| | | "version": "1.2.8", |
| | | "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", |
| | | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "@nodelib/fs.scandir": "2.1.5", |
| | | "fastq": "^1.6.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 8" |
| | | } |
| | | }, |
| | | "node_modules/@types/node": { |
| | |
| | | }, |
| | | "engines": { |
| | | "node": ">=6.5" |
| | | } |
| | | }, |
| | | "node_modules/agent-base": { |
| | | "version": "6.0.2", |
| | | "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", |
| | | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "debug": "4" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 6.0.0" |
| | | } |
| | | }, |
| | | "node_modules/alibabacloud-iot-device-sdk": { |
| | |
| | | "safe-buffer": "~5.1.0" |
| | | } |
| | | }, |
| | | "node_modules/ansi-regex": { |
| | | "version": "5.0.1", |
| | | "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", |
| | | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/ansi-styles": { |
| | | "version": "4.3.0", |
| | | "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", |
| | | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "color-convert": "^2.0.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/chalk/ansi-styles?sponsor=1" |
| | | } |
| | | }, |
| | | "node_modules/array-union": { |
| | | "version": "2.1.0", |
| | | "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", |
| | | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/async-limiter": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmmirror.com/async-limiter/-/async-limiter-1.0.1.tgz", |
| | |
| | | "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", |
| | | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/at-least-node": { |
| | | "version": "1.0.0", |
| | | "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", |
| | | "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", |
| | | "dev": true, |
| | | "license": "ISC", |
| | | "engines": { |
| | | "node": ">= 4.0.0" |
| | | } |
| | | }, |
| | | "node_modules/axios": { |
| | | "version": "1.16.0", |
| | |
| | | "dependencies": { |
| | | "balanced-match": "^1.0.0", |
| | | "concat-map": "0.0.1" |
| | | } |
| | | }, |
| | | "node_modules/braces": { |
| | | "version": "3.0.3", |
| | | "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", |
| | | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "fill-range": "^7.1.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/broker-factory": { |
| | |
| | | "safe-buffer": "~5.1.0" |
| | | } |
| | | }, |
| | | "node_modules/chalk": { |
| | | "version": "4.1.2", |
| | | "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", |
| | | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "ansi-styles": "^4.1.0", |
| | | "supports-color": "^7.1.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/chalk/chalk?sponsor=1" |
| | | } |
| | | }, |
| | | "node_modules/chownr": { |
| | | "version": "1.1.4", |
| | | "resolved": "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz", |
| | | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", |
| | | "dev": true, |
| | | "license": "ISC" |
| | | }, |
| | | "node_modules/cliui": { |
| | | "version": "7.0.4", |
| | | "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", |
| | | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", |
| | | "dev": true, |
| | | "license": "ISC", |
| | | "dependencies": { |
| | | "string-width": "^4.2.0", |
| | | "strip-ansi": "^6.0.0", |
| | | "wrap-ansi": "^7.0.0" |
| | | } |
| | | }, |
| | | "node_modules/color-convert": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", |
| | | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "color-name": "~1.1.4" |
| | | }, |
| | | "engines": { |
| | | "node": ">=7.0.0" |
| | | } |
| | | }, |
| | | "node_modules/color-name": { |
| | | "version": "1.1.4", |
| | | "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", |
| | | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", |
| | | "dev": true, |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/combined-stream": { |
| | | "version": "1.0.8", |
| | | "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", |
| | |
| | | } |
| | | } |
| | | }, |
| | | "node_modules/decompress-response": { |
| | | "version": "6.0.0", |
| | | "resolved": "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz", |
| | | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "mimic-response": "^3.1.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/sindresorhus" |
| | | } |
| | | }, |
| | | "node_modules/deep-extend": { |
| | | "version": "0.6.0", |
| | | "resolved": "https://registry.npmmirror.com/deep-extend/-/deep-extend-0.6.0.tgz", |
| | | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=4.0.0" |
| | | } |
| | | }, |
| | | "node_modules/delayed-stream": { |
| | | "version": "1.0.0", |
| | | "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", |
| | |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=0.4.0" |
| | | } |
| | | }, |
| | | "node_modules/detect-libc": { |
| | | "version": "2.1.2", |
| | | "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.2.tgz", |
| | | "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", |
| | | "dev": true, |
| | | "license": "Apache-2.0", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/dir-glob": { |
| | | "version": "3.0.1", |
| | | "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", |
| | | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "path-type": "^4.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/dunder-proto": { |
| | |
| | | "dependencies": { |
| | | "safe-buffer": "~5.1.0" |
| | | } |
| | | }, |
| | | "node_modules/emoji-regex": { |
| | | "version": "8.0.0", |
| | | "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", |
| | | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", |
| | | "dev": true, |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/end-of-stream": { |
| | | "version": "1.4.5", |
| | |
| | | "node": ">=0.12" |
| | | } |
| | | }, |
| | | "node_modules/escalade": { |
| | | "version": "3.2.0", |
| | | "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", |
| | | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=6" |
| | | } |
| | | }, |
| | | "node_modules/esniff": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmmirror.com/esniff/-/esniff-2.0.1.tgz", |
| | |
| | | "node": ">=0.8.x" |
| | | } |
| | | }, |
| | | "node_modules/expand-template": { |
| | | "version": "2.0.3", |
| | | "resolved": "https://registry.npmmirror.com/expand-template/-/expand-template-2.0.3.tgz", |
| | | "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", |
| | | "dev": true, |
| | | "license": "(MIT OR WTFPL)", |
| | | "engines": { |
| | | "node": ">=6" |
| | | } |
| | | }, |
| | | "node_modules/ext": { |
| | | "version": "1.7.0", |
| | | "resolved": "https://registry.npmmirror.com/ext/-/ext-1.7.0.tgz", |
| | |
| | | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/fast-glob": { |
| | | "version": "3.3.3", |
| | | "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz", |
| | | "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "@nodelib/fs.stat": "^2.0.2", |
| | | "@nodelib/fs.walk": "^1.2.3", |
| | | "glob-parent": "^5.1.2", |
| | | "merge2": "^1.3.0", |
| | | "micromatch": "^4.0.8" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8.6.0" |
| | | } |
| | | }, |
| | | "node_modules/fast-glob/node_modules/glob-parent": { |
| | | "version": "5.1.2", |
| | | "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", |
| | | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", |
| | | "dev": true, |
| | | "license": "ISC", |
| | | "dependencies": { |
| | | "is-glob": "^4.0.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 6" |
| | | } |
| | | }, |
| | | "node_modules/fast-glob/node_modules/is-glob": { |
| | | "version": "4.0.3", |
| | | "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", |
| | | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "is-extglob": "^2.1.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/fast-unique-numbers": { |
| | | "version": "9.0.27", |
| | | "resolved": "https://registry.npmmirror.com/fast-unique-numbers/-/fast-unique-numbers-9.0.27.tgz", |
| | |
| | | }, |
| | | "engines": { |
| | | "node": ">=18.2.0" |
| | | } |
| | | }, |
| | | "node_modules/fastq": { |
| | | "version": "1.20.1", |
| | | "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.20.1.tgz", |
| | | "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", |
| | | "dev": true, |
| | | "license": "ISC", |
| | | "dependencies": { |
| | | "reusify": "^1.0.4" |
| | | } |
| | | }, |
| | | "node_modules/fill-range": { |
| | | "version": "7.1.1", |
| | | "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", |
| | | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "to-regex-range": "^5.0.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/follow-redirects": { |
| | |
| | | "node": ">= 6" |
| | | } |
| | | }, |
| | | "node_modules/from2": { |
| | | "version": "2.3.0", |
| | | "resolved": "https://registry.npmmirror.com/from2/-/from2-2.3.0.tgz", |
| | | "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "inherits": "^2.0.1", |
| | | "readable-stream": "^2.0.0" |
| | | } |
| | | }, |
| | | "node_modules/from2/node_modules/readable-stream": { |
| | | "version": "2.3.8", |
| | | "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", |
| | | "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "core-util-is": "~1.0.0", |
| | | "inherits": "~2.0.3", |
| | | "isarray": "~1.0.0", |
| | | "process-nextick-args": "~2.0.0", |
| | | "safe-buffer": "~5.1.1", |
| | | "string_decoder": "~1.1.1", |
| | | "util-deprecate": "~1.0.1" |
| | | } |
| | | }, |
| | | "node_modules/from2/node_modules/safe-buffer": { |
| | | "version": "5.1.2", |
| | | "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", |
| | | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", |
| | | "dev": true, |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/from2/node_modules/string_decoder": { |
| | | "version": "1.1.1", |
| | | "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", |
| | | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "safe-buffer": "~5.1.0" |
| | | } |
| | | }, |
| | | "node_modules/fs-constants": { |
| | | "version": "1.0.0", |
| | | "resolved": "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz", |
| | | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", |
| | | "dev": true, |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/fs-extra": { |
| | | "version": "9.1.0", |
| | | "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", |
| | | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "at-least-node": "^1.0.0", |
| | | "graceful-fs": "^4.2.0", |
| | | "jsonfile": "^6.0.1", |
| | | "universalify": "^2.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/fs.realpath": { |
| | | "version": "1.0.0", |
| | | "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", |
| | |
| | | "license": "MIT", |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/ljharb" |
| | | } |
| | | }, |
| | | "node_modules/get-caller-file": { |
| | | "version": "2.0.5", |
| | | "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", |
| | | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", |
| | | "dev": true, |
| | | "license": "ISC", |
| | | "engines": { |
| | | "node": "6.* || 8.* || >= 10.*" |
| | | } |
| | | }, |
| | | "node_modules/get-intrinsic": { |
| | |
| | | "engines": { |
| | | "node": ">= 0.4" |
| | | } |
| | | }, |
| | | "node_modules/github-from-package": { |
| | | "version": "0.0.0", |
| | | "resolved": "https://registry.npmmirror.com/github-from-package/-/github-from-package-0.0.0.tgz", |
| | | "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", |
| | | "dev": true, |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/glob": { |
| | | "version": "7.2.3", |
| | |
| | | "safe-buffer": "~5.1.0" |
| | | } |
| | | }, |
| | | "node_modules/globby": { |
| | | "version": "11.1.0", |
| | | "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", |
| | | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "array-union": "^2.1.0", |
| | | "dir-glob": "^3.0.1", |
| | | "fast-glob": "^3.2.9", |
| | | "ignore": "^5.2.0", |
| | | "merge2": "^1.4.1", |
| | | "slash": "^3.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/sindresorhus" |
| | | } |
| | | }, |
| | | "node_modules/gopd": { |
| | | "version": "1.2.0", |
| | | "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", |
| | |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/ljharb" |
| | | } |
| | | }, |
| | | "node_modules/graceful-fs": { |
| | | "version": "4.2.11", |
| | | "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", |
| | | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", |
| | | "dev": true, |
| | | "license": "ISC" |
| | | }, |
| | | "node_modules/has": { |
| | | "version": "1.0.4", |
| | | "resolved": "https://registry.npmmirror.com/has/-/has-1.0.4.tgz", |
| | | "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">= 0.4.0" |
| | | } |
| | | }, |
| | | "node_modules/has-flag": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", |
| | | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/has-symbols": { |
| | |
| | | "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/https-proxy-agent": { |
| | | "version": "5.0.1", |
| | | "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", |
| | | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "agent-base": "6", |
| | | "debug": "4" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 6" |
| | | } |
| | | }, |
| | | "node_modules/ieee754": { |
| | | "version": "1.2.1", |
| | | "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", |
| | |
| | | ], |
| | | "license": "BSD-3-Clause" |
| | | }, |
| | | "node_modules/ignore": { |
| | | "version": "5.3.2", |
| | | "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz", |
| | | "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">= 4" |
| | | } |
| | | }, |
| | | "node_modules/inflight": { |
| | | "version": "1.0.6", |
| | | "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", |
| | |
| | | "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", |
| | | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", |
| | | "license": "ISC" |
| | | }, |
| | | "node_modules/ini": { |
| | | "version": "1.3.8", |
| | | "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", |
| | | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", |
| | | "dev": true, |
| | | "license": "ISC" |
| | | }, |
| | | "node_modules/into-stream": { |
| | | "version": "6.0.0", |
| | | "resolved": "https://registry.npmmirror.com/into-stream/-/into-stream-6.0.0.tgz", |
| | | "integrity": "sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "from2": "^2.3.0", |
| | | "p-is-promise": "^3.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/sindresorhus" |
| | | } |
| | | }, |
| | | "node_modules/ip-address": { |
| | | "version": "10.2.0", |
| | |
| | | "node": ">=4" |
| | | } |
| | | }, |
| | | "node_modules/is-core-module": { |
| | | "version": "2.9.0", |
| | | "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.9.0.tgz", |
| | | "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "has": "^1.0.3" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/ljharb" |
| | | } |
| | | }, |
| | | "node_modules/is-extglob": { |
| | | "version": "2.1.1", |
| | | "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", |
| | |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/is-fullwidth-code-point": { |
| | | "version": "3.0.0", |
| | | "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", |
| | | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/is-glob": { |
| | |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/is-number": { |
| | | "version": "7.0.0", |
| | | "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", |
| | | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=0.12.0" |
| | | } |
| | | }, |
| | | "node_modules/is-relative": { |
| | |
| | | "url": "https://opencollective.com/js-sdsl" |
| | | } |
| | | }, |
| | | "node_modules/jsesc": { |
| | | "version": "2.5.2", |
| | | "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz", |
| | | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "bin": { |
| | | "jsesc": "bin/jsesc" |
| | | }, |
| | | "engines": { |
| | | "node": ">=4" |
| | | } |
| | | }, |
| | | "node_modules/json-stable-stringify-without-jsonify": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", |
| | | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/jsonfile": { |
| | | "version": "6.2.1", |
| | | "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.1.tgz", |
| | | "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "universalify": "^2.0.0" |
| | | }, |
| | | "optionalDependencies": { |
| | | "graceful-fs": "^4.1.6" |
| | | } |
| | | }, |
| | | "node_modules/leven": { |
| | | "version": "2.1.0", |
| | |
| | | "node": ">= 0.4" |
| | | } |
| | | }, |
| | | "node_modules/merge2": { |
| | | "version": "1.4.1", |
| | | "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", |
| | | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">= 8" |
| | | } |
| | | }, |
| | | "node_modules/micromatch": { |
| | | "version": "4.0.8", |
| | | "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", |
| | | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "braces": "^3.0.3", |
| | | "picomatch": "^2.3.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8.6" |
| | | } |
| | | }, |
| | | "node_modules/mime-db": { |
| | | "version": "1.52.0", |
| | | "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", |
| | |
| | | }, |
| | | "engines": { |
| | | "node": ">= 0.6" |
| | | } |
| | | }, |
| | | "node_modules/mimic-response": { |
| | | "version": "3.1.0", |
| | | "resolved": "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz", |
| | | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=10" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/sindresorhus" |
| | | } |
| | | }, |
| | | "node_modules/minimatch": { |
| | |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/ljharb" |
| | | } |
| | | }, |
| | | "node_modules/mkdirp-classic": { |
| | | "version": "0.5.3", |
| | | "resolved": "https://registry.npmmirror.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", |
| | | "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", |
| | | "dev": true, |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/mqtt": { |
| | | "version": "5.15.1", |
| | |
| | | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/multistream": { |
| | | "version": "4.1.0", |
| | | "resolved": "https://registry.npmmirror.com/multistream/-/multistream-4.1.0.tgz", |
| | | "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==", |
| | | "dev": true, |
| | | "funding": [ |
| | | { |
| | | "type": "github", |
| | | "url": "https://github.com/sponsors/feross" |
| | | }, |
| | | { |
| | | "type": "patreon", |
| | | "url": "https://www.patreon.com/feross" |
| | | }, |
| | | { |
| | | "type": "consulting", |
| | | "url": "https://feross.org/support" |
| | | } |
| | | ], |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "once": "^1.4.0", |
| | | "readable-stream": "^3.6.0" |
| | | } |
| | | }, |
| | | "node_modules/multistream/node_modules/readable-stream": { |
| | | "version": "3.6.2", |
| | | "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", |
| | | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "inherits": "^2.0.3", |
| | | "string_decoder": "^1.1.1", |
| | | "util-deprecate": "^1.0.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 6" |
| | | } |
| | | }, |
| | | "node_modules/napi-build-utils": { |
| | | "version": "1.0.2", |
| | | "resolved": "https://registry.npmmirror.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz", |
| | | "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", |
| | | "dev": true, |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/next-tick": { |
| | | "version": "1.1.0", |
| | | "resolved": "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz", |
| | | "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", |
| | | "license": "ISC" |
| | | }, |
| | | "node_modules/node-abi": { |
| | | "version": "3.92.0", |
| | | "resolved": "https://registry.npmmirror.com/node-abi/-/node-abi-3.92.0.tgz", |
| | | "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "semver": "^7.3.5" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/node-fetch": { |
| | | "version": "2.7.0", |
| | | "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz", |
| | | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "whatwg-url": "^5.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": "4.x || >=6.0.0" |
| | | }, |
| | | "peerDependencies": { |
| | | "encoding": "^0.1.0" |
| | | }, |
| | | "peerDependenciesMeta": { |
| | | "encoding": { |
| | | "optional": true |
| | | } |
| | | } |
| | | }, |
| | | "node_modules/number-allocator": { |
| | | "version": "1.0.14", |
| | |
| | | "safe-buffer": "~5.1.0" |
| | | } |
| | | }, |
| | | "node_modules/p-is-promise": { |
| | | "version": "3.0.0", |
| | | "resolved": "https://registry.npmmirror.com/p-is-promise/-/p-is-promise-3.0.0.tgz", |
| | | "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/path-dirname": { |
| | | "version": "1.0.2", |
| | | "resolved": "https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz", |
| | |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/path-parse": { |
| | | "version": "1.0.7", |
| | | "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", |
| | | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", |
| | | "dev": true, |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/path-type": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", |
| | | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/picomatch": { |
| | | "version": "2.3.2", |
| | | "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.2.tgz", |
| | | "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=8.6" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/jonschlinkert" |
| | | } |
| | | }, |
| | | "node_modules/pkg": { |
| | | "version": "5.8.1", |
| | | "resolved": "https://registry.npmmirror.com/pkg/-/pkg-5.8.1.tgz", |
| | | "integrity": "sha512-CjBWtFStCfIiT4Bde9QpJy0KeH19jCfwZRJqHFDFXfhUklCx8JoFmMj3wgnEYIwGmZVNkhsStPHEOnrtrQhEXA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "@babel/generator": "7.18.2", |
| | | "@babel/parser": "7.18.4", |
| | | "@babel/types": "7.19.0", |
| | | "chalk": "^4.1.2", |
| | | "fs-extra": "^9.1.0", |
| | | "globby": "^11.1.0", |
| | | "into-stream": "^6.0.0", |
| | | "is-core-module": "2.9.0", |
| | | "minimist": "^1.2.6", |
| | | "multistream": "^4.1.0", |
| | | "pkg-fetch": "3.4.2", |
| | | "prebuild-install": "7.1.1", |
| | | "resolve": "^1.22.0", |
| | | "stream-meter": "^1.0.4" |
| | | }, |
| | | "bin": { |
| | | "pkg": "lib-es5/bin.js" |
| | | }, |
| | | "peerDependencies": { |
| | | "node-notifier": ">=9.0.1" |
| | | }, |
| | | "peerDependenciesMeta": { |
| | | "node-notifier": { |
| | | "optional": true |
| | | } |
| | | } |
| | | }, |
| | | "node_modules/pkg-fetch": { |
| | | "version": "3.4.2", |
| | | "resolved": "https://registry.npmmirror.com/pkg-fetch/-/pkg-fetch-3.4.2.tgz", |
| | | "integrity": "sha512-0+uijmzYcnhC0hStDjm/cl2VYdrmVVBpe7Q8k9YBojxmR5tG8mvR9/nooQq3QSXiQqORDVOTY3XqMEqJVIzkHA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "chalk": "^4.1.2", |
| | | "fs-extra": "^9.1.0", |
| | | "https-proxy-agent": "^5.0.0", |
| | | "node-fetch": "^2.6.6", |
| | | "progress": "^2.0.3", |
| | | "semver": "^7.3.5", |
| | | "tar-fs": "^2.1.1", |
| | | "yargs": "^16.2.0" |
| | | }, |
| | | "bin": { |
| | | "pkg-fetch": "lib-es5/bin.js" |
| | | } |
| | | }, |
| | | "node_modules/prebuild-install": { |
| | | "version": "7.1.1", |
| | | "resolved": "https://registry.npmmirror.com/prebuild-install/-/prebuild-install-7.1.1.tgz", |
| | | "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "detect-libc": "^2.0.0", |
| | | "expand-template": "^2.0.3", |
| | | "github-from-package": "0.0.0", |
| | | "minimist": "^1.2.3", |
| | | "mkdirp-classic": "^0.5.3", |
| | | "napi-build-utils": "^1.0.1", |
| | | "node-abi": "^3.3.0", |
| | | "pump": "^3.0.0", |
| | | "rc": "^1.2.7", |
| | | "simple-get": "^4.0.0", |
| | | "tar-fs": "^2.0.0", |
| | | "tunnel-agent": "^0.6.0" |
| | | }, |
| | | "bin": { |
| | | "prebuild-install": "bin.js" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/process": { |
| | |
| | | "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", |
| | | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/progress": { |
| | | "version": "2.0.3", |
| | | "resolved": "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz", |
| | | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=0.4.0" |
| | | } |
| | | }, |
| | | "node_modules/proxy-from-env": { |
| | | "version": "2.1.0", |
| | |
| | | "url": "https://github.com/sponsors/ljharb" |
| | | } |
| | | }, |
| | | "node_modules/queue-microtask": { |
| | | "version": "1.2.3", |
| | | "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", |
| | | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", |
| | | "dev": true, |
| | | "funding": [ |
| | | { |
| | | "type": "github", |
| | | "url": "https://github.com/sponsors/feross" |
| | | }, |
| | | { |
| | | "type": "patreon", |
| | | "url": "https://www.patreon.com/feross" |
| | | }, |
| | | { |
| | | "type": "consulting", |
| | | "url": "https://feross.org/support" |
| | | } |
| | | ], |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/rc": { |
| | | "version": "1.2.8", |
| | | "resolved": "https://registry.npmmirror.com/rc/-/rc-1.2.8.tgz", |
| | | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", |
| | | "dev": true, |
| | | "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", |
| | | "dependencies": { |
| | | "deep-extend": "^0.6.0", |
| | | "ini": "~1.3.0", |
| | | "minimist": "^1.2.0", |
| | | "strip-json-comments": "~2.0.1" |
| | | }, |
| | | "bin": { |
| | | "rc": "cli.js" |
| | | } |
| | | }, |
| | | "node_modules/readable-stream": { |
| | | "version": "4.7.0", |
| | | "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-4.7.0.tgz", |
| | |
| | | "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", |
| | | "license": "ISC" |
| | | }, |
| | | "node_modules/require-directory": { |
| | | "version": "2.1.1", |
| | | "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", |
| | | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/resolve": { |
| | | "version": "1.22.12", |
| | | "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.12.tgz", |
| | | "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "es-errors": "^1.3.0", |
| | | "is-core-module": "^2.16.1", |
| | | "path-parse": "^1.0.7", |
| | | "supports-preserve-symlinks-flag": "^1.0.0" |
| | | }, |
| | | "bin": { |
| | | "resolve": "bin/resolve" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 0.4" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/ljharb" |
| | | } |
| | | }, |
| | | "node_modules/resolve/node_modules/is-core-module": { |
| | | "version": "2.16.2", |
| | | "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.2.tgz", |
| | | "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "hasown": "^2.0.3" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 0.4" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/ljharb" |
| | | } |
| | | }, |
| | | "node_modules/reusify": { |
| | | "version": "1.1.0", |
| | | "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz", |
| | | "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "iojs": ">=1.0.0", |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/rfdc": { |
| | | "version": "1.4.1", |
| | | "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz", |
| | | "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/run-parallel": { |
| | | "version": "1.2.0", |
| | | "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", |
| | | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", |
| | | "dev": true, |
| | | "funding": [ |
| | | { |
| | | "type": "github", |
| | | "url": "https://github.com/sponsors/feross" |
| | | }, |
| | | { |
| | | "type": "patreon", |
| | | "url": "https://www.patreon.com/feross" |
| | | }, |
| | | { |
| | | "type": "consulting", |
| | | "url": "https://feross.org/support" |
| | | } |
| | | ], |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "queue-microtask": "^1.2.2" |
| | | } |
| | | }, |
| | | "node_modules/safe-buffer": { |
| | | "version": "5.2.1", |
| | |
| | | } |
| | | ], |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/semver": { |
| | | "version": "7.8.0", |
| | | "resolved": "https://registry.npmmirror.com/semver/-/semver-7.8.0.tgz", |
| | | "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", |
| | | "dev": true, |
| | | "license": "ISC", |
| | | "bin": { |
| | | "semver": "bin/semver.js" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/side-channel": { |
| | | "version": "1.1.0", |
| | |
| | | "url": "https://github.com/sponsors/ljharb" |
| | | } |
| | | }, |
| | | "node_modules/simple-concat": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmmirror.com/simple-concat/-/simple-concat-1.0.1.tgz", |
| | | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", |
| | | "dev": true, |
| | | "funding": [ |
| | | { |
| | | "type": "github", |
| | | "url": "https://github.com/sponsors/feross" |
| | | }, |
| | | { |
| | | "type": "patreon", |
| | | "url": "https://www.patreon.com/feross" |
| | | }, |
| | | { |
| | | "type": "consulting", |
| | | "url": "https://feross.org/support" |
| | | } |
| | | ], |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/simple-get": { |
| | | "version": "4.0.1", |
| | | "resolved": "https://registry.npmmirror.com/simple-get/-/simple-get-4.0.1.tgz", |
| | | "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", |
| | | "dev": true, |
| | | "funding": [ |
| | | { |
| | | "type": "github", |
| | | "url": "https://github.com/sponsors/feross" |
| | | }, |
| | | { |
| | | "type": "patreon", |
| | | "url": "https://www.patreon.com/feross" |
| | | }, |
| | | { |
| | | "type": "consulting", |
| | | "url": "https://feross.org/support" |
| | | } |
| | | ], |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "decompress-response": "^6.0.0", |
| | | "once": "^1.3.1", |
| | | "simple-concat": "^1.0.0" |
| | | } |
| | | }, |
| | | "node_modules/slash": { |
| | | "version": "3.0.0", |
| | | "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", |
| | | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/smart-buffer": { |
| | | "version": "4.2.0", |
| | | "resolved": "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz", |
| | |
| | | "node": ">= 10.x" |
| | | } |
| | | }, |
| | | "node_modules/stream-meter": { |
| | | "version": "1.0.4", |
| | | "resolved": "https://registry.npmmirror.com/stream-meter/-/stream-meter-1.0.4.tgz", |
| | | "integrity": "sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "readable-stream": "^2.1.4" |
| | | } |
| | | }, |
| | | "node_modules/stream-meter/node_modules/readable-stream": { |
| | | "version": "2.3.8", |
| | | "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", |
| | | "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "core-util-is": "~1.0.0", |
| | | "inherits": "~2.0.3", |
| | | "isarray": "~1.0.0", |
| | | "process-nextick-args": "~2.0.0", |
| | | "safe-buffer": "~5.1.1", |
| | | "string_decoder": "~1.1.1", |
| | | "util-deprecate": "~1.0.1" |
| | | } |
| | | }, |
| | | "node_modules/stream-meter/node_modules/safe-buffer": { |
| | | "version": "5.1.2", |
| | | "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", |
| | | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", |
| | | "dev": true, |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/stream-meter/node_modules/string_decoder": { |
| | | "version": "1.1.1", |
| | | "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", |
| | | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "safe-buffer": "~5.1.0" |
| | | } |
| | | }, |
| | | "node_modules/stream-shift": { |
| | | "version": "1.0.3", |
| | | "resolved": "https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.3.tgz", |
| | |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "safe-buffer": "~5.2.0" |
| | | } |
| | | }, |
| | | "node_modules/string-width": { |
| | | "version": "4.2.3", |
| | | "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", |
| | | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "emoji-regex": "^8.0.0", |
| | | "is-fullwidth-code-point": "^3.0.0", |
| | | "strip-ansi": "^6.0.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/strip-ansi": { |
| | | "version": "6.0.1", |
| | | "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", |
| | | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "ansi-regex": "^5.0.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/strip-json-comments": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz", |
| | | "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/supports-color": { |
| | | "version": "7.2.0", |
| | | "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", |
| | | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "has-flag": "^4.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/supports-preserve-symlinks-flag": { |
| | | "version": "1.0.0", |
| | | "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", |
| | | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">= 0.4" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/ljharb" |
| | | } |
| | | }, |
| | | "node_modules/tar-fs": { |
| | | "version": "2.1.4", |
| | | "resolved": "https://registry.npmmirror.com/tar-fs/-/tar-fs-2.1.4.tgz", |
| | | "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "chownr": "^1.1.1", |
| | | "mkdirp-classic": "^0.5.2", |
| | | "pump": "^3.0.0", |
| | | "tar-stream": "^2.1.4" |
| | | } |
| | | }, |
| | | "node_modules/tar-stream": { |
| | | "version": "2.2.0", |
| | | "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz", |
| | | "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "bl": "^4.0.3", |
| | | "end-of-stream": "^1.4.1", |
| | | "fs-constants": "^1.0.0", |
| | | "inherits": "^2.0.3", |
| | | "readable-stream": "^3.1.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=6" |
| | | } |
| | | }, |
| | | "node_modules/tar-stream/node_modules/bl": { |
| | | "version": "4.1.0", |
| | | "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", |
| | | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "buffer": "^5.5.0", |
| | | "inherits": "^2.0.4", |
| | | "readable-stream": "^3.4.0" |
| | | } |
| | | }, |
| | | "node_modules/tar-stream/node_modules/buffer": { |
| | | "version": "5.7.1", |
| | | "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", |
| | | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", |
| | | "dev": true, |
| | | "funding": [ |
| | | { |
| | | "type": "github", |
| | | "url": "https://github.com/sponsors/feross" |
| | | }, |
| | | { |
| | | "type": "patreon", |
| | | "url": "https://www.patreon.com/feross" |
| | | }, |
| | | { |
| | | "type": "consulting", |
| | | "url": "https://feross.org/support" |
| | | } |
| | | ], |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "base64-js": "^1.3.1", |
| | | "ieee754": "^1.1.13" |
| | | } |
| | | }, |
| | | "node_modules/tar-stream/node_modules/readable-stream": { |
| | | "version": "3.6.2", |
| | | "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", |
| | | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "inherits": "^2.0.3", |
| | | "string_decoder": "^1.1.1", |
| | | "util-deprecate": "^1.0.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 6" |
| | | } |
| | | }, |
| | | "node_modules/through2": { |
| | |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/to-fast-properties": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz", |
| | | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=4" |
| | | } |
| | | }, |
| | | "node_modules/to-regex-range": { |
| | | "version": "5.0.1", |
| | | "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", |
| | | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "is-number": "^7.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8.0" |
| | | } |
| | | }, |
| | | "node_modules/tr46": { |
| | | "version": "0.0.3", |
| | | "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", |
| | | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", |
| | | "dev": true, |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/tslib": { |
| | | "version": "2.8.1", |
| | | "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", |
| | | "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", |
| | | "license": "0BSD" |
| | | }, |
| | | "node_modules/tunnel-agent": { |
| | | "version": "0.6.0", |
| | | "resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz", |
| | | "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", |
| | | "dev": true, |
| | | "license": "Apache-2.0", |
| | | "dependencies": { |
| | | "safe-buffer": "^5.0.1" |
| | | }, |
| | | "engines": { |
| | | "node": "*" |
| | | } |
| | | }, |
| | | "node_modules/type": { |
| | | "version": "2.7.3", |
| | |
| | | "through2-filter": "3.0.0" |
| | | } |
| | | }, |
| | | "node_modules/universalify": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", |
| | | "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">= 10.0.0" |
| | | } |
| | | }, |
| | | "node_modules/util-deprecate": { |
| | | "version": "1.0.2", |
| | | "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", |
| | | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/webidl-conversions": { |
| | | "version": "3.0.1", |
| | | "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", |
| | | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", |
| | | "dev": true, |
| | | "license": "BSD-2-Clause" |
| | | }, |
| | | "node_modules/websocket-stream": { |
| | | "version": "5.5.2", |
| | |
| | | "ultron": "~1.1.0" |
| | | } |
| | | }, |
| | | "node_modules/whatwg-url": { |
| | | "version": "5.0.0", |
| | | "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", |
| | | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "tr46": "~0.0.3", |
| | | "webidl-conversions": "^3.0.0" |
| | | } |
| | | }, |
| | | "node_modules/worker-factory": { |
| | | "version": "7.0.49", |
| | | "resolved": "https://registry.npmmirror.com/worker-factory/-/worker-factory-7.0.49.tgz", |
| | |
| | | "worker-factory": "^7.0.49" |
| | | } |
| | | }, |
| | | "node_modules/wrap-ansi": { |
| | | "version": "7.0.0", |
| | | "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", |
| | | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "ansi-styles": "^4.0.0", |
| | | "string-width": "^4.1.0", |
| | | "strip-ansi": "^6.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" |
| | | } |
| | | }, |
| | | "node_modules/wrappy": { |
| | | "version": "1.0.2", |
| | | "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", |
| | |
| | | "engines": { |
| | | "node": ">=0.4" |
| | | } |
| | | }, |
| | | "node_modules/y18n": { |
| | | "version": "5.0.8", |
| | | "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", |
| | | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", |
| | | "dev": true, |
| | | "license": "ISC", |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/yargs": { |
| | | "version": "16.2.0", |
| | | "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz", |
| | | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "cliui": "^7.0.2", |
| | | "escalade": "^3.1.1", |
| | | "get-caller-file": "^2.0.5", |
| | | "require-directory": "^2.1.1", |
| | | "string-width": "^4.2.0", |
| | | "y18n": "^5.0.5", |
| | | "yargs-parser": "^20.2.2" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/yargs-parser": { |
| | | "version": "20.2.9", |
| | | "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz", |
| | | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", |
| | | "dev": true, |
| | | "license": "ISC", |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | "version": "1.0.0", |
| | | "description": "JMS 透析机 TCP 联机服务 - 管理与监控多台 GC-110N 设备", |
| | | "main": "index.js", |
| | | "bin": "index.js", |
| | | "scripts": { |
| | | "dev": "node index.js" |
| | | "dev": "node index.js", |
| | | "build": "node scripts/build.js", |
| | | "build:win": "node scripts/build.js --win", |
| | | "build:linux": "node scripts/build.js --linux" |
| | | }, |
| | | "pkg": { |
| | | "assets": [ |
| | | "dashboard/public/**/*", |
| | | "lib/**/*.js" |
| | | ], |
| | | "targets": [ |
| | | "node18-win-x64", |
| | | "node18-linux-x64" |
| | | ], |
| | | "outputPath": "dist" |
| | | }, |
| | | "dependencies": { |
| | | "alibabacloud-iot-device-sdk": "^1.2.7", |
| | |
| | | "mqtt": "^5.6.0", |
| | | "qs": "^6.12.0", |
| | | "ws": "^8.16.0" |
| | | }, |
| | | "devDependencies": { |
| | | "pkg": "^5.8.1" |
| | | } |
| | | } |
| New file |
| | |
| | | "use strict"; |
| | | |
| | | const { execSync } = require("child_process"); |
| | | const fs = require("fs"); |
| | | const path = require("path"); |
| | | |
| | | const ROOT = path.resolve(__dirname, ".."); |
| | | const DIST = path.join(ROOT, "dist"); |
| | | const PKG_CACHE = path.join(ROOT, ".pkg-cache"); |
| | | |
| | | const TARGETS = { |
| | | win: { id: "node18-win-x64", ext: ".exe", os: "windows" }, |
| | | linux:{ id: "node18-linux-x64", ext: "", os: "linux" }, |
| | | }; |
| | | |
| | | const args = process.argv.slice(2); |
| | | const winOnly = args.includes("--win"); |
| | | const linuxOnly = args.includes("--linux"); |
| | | const targets = winOnly ? ["win"] |
| | | : linuxOnly ? ["linux"] |
| | | : ["win", "linux"]; |
| | | |
| | | // ── 1. 清理 ── |
| | | console.log("[1/5] 清理输出目录..."); |
| | | fs.mkdirSync(DIST, { recursive: true }); |
| | | for (const key of targets) { |
| | | const t = TARGETS[key]; |
| | | const outDir = path.join(DIST, `jms-connection-service-${t.os}`); |
| | | try { |
| | | fs.rmSync(outDir, { recursive: true, force: true, maxRetries: 5, retryDelay: 500 }); |
| | | } catch { |
| | | console.log(` ⚠ ${t.os} 目录清理失败(可能被占用),尝试增量覆盖...`); |
| | | } |
| | | } |
| | | |
| | | // ── 2. 检查 pkg ── |
| | | console.log("[2/5] 检查 pkg..."); |
| | | const pkgBin = path.join(ROOT, "node_modules", ".bin", "pkg"); |
| | | if (!fs.existsSync(pkgBin) && !fs.existsSync(pkgBin + ".cmd")) { |
| | | console.log(" pkg 未安装,正在安装..."); |
| | | execSync("npm install --save-dev pkg", { cwd: ROOT, stdio: "inherit" }); |
| | | } |
| | | |
| | | // ── 3. pkg 编译 ── |
| | | console.log("[3/5] 编译可执行文件..."); |
| | | const builtFiles = []; |
| | | |
| | | for (const key of targets) { |
| | | const t = TARGETS[key]; |
| | | const baseName = `jms-connection-service-${t.os}`; |
| | | const outDir = path.join(DIST, `jms-connection-service-${t.os}`); |
| | | fs.mkdirSync(outDir, { recursive: true }); |
| | | |
| | | const outPath = path.join(outDir, baseName); |
| | | console.log(` 编译 ${t.id} → ${path.relative(ROOT, outPath)}${t.ext}`); |
| | | |
| | | try { |
| | | execSync( |
| | | `npx pkg . --targets ${t.id} --output "${outPath}"`, |
| | | { cwd: ROOT, stdio: "inherit", env: { ...process.env, PKG_CACHE_PATH: PKG_CACHE } } |
| | | ); |
| | | builtFiles.push({ key, outDir, baseName, ext: t.ext, os: t.os }); |
| | | } catch (err) { |
| | | console.error(` ✗ ${t.id} 编译失败: ${err.message}`); |
| | | process.exit(1); |
| | | } |
| | | } |
| | | |
| | | // ── 4. 组装发布包 ── |
| | | console.log("[4/5] 组装发布包..."); |
| | | |
| | | for (const item of builtFiles) { |
| | | const { outDir } = item; |
| | | |
| | | // 复制配置模板 |
| | | const configSrc = path.join(ROOT, "config.json"); |
| | | const configDst = path.join(outDir, "config.json"); |
| | | fs.copyFileSync(configSrc, configDst); |
| | | |
| | | // 创建 logs 目录 |
| | | fs.mkdirSync(path.join(outDir, "logs"), { recursive: true }); |
| | | |
| | | // 写入使用说明 |
| | | const readme = [ |
| | | "JMS 透析机 TCP 联机服务", |
| | | "========================", |
| | | "", |
| | | "快速开始:", |
| | | " 1. 编辑 config.json,配置设备 IP、端口、序列号", |
| | | " 2. 命令行启动:", |
| | | ` Windows: .\\jms-connection-service-windows.exe`, |
| | | ` Linux: ./jms-connection-service-linux`, |
| | | " 3. 浏览器访问 http://localhost:3100 查看监控大屏", |
| | | "", |
| | | "目录结构:", |
| | | ` jms-connection-service-${item.os}/`, |
| | | ` ├── jms-connection-service-${item.os}${item.ext} # 主程序`, |
| | | " ├── config.json # 配置文件(可编辑)", |
| | | " └── logs/ # 日志目录(自动创建)", |
| | | "", |
| | | "注册为系统服务(推荐生产环境):", |
| | | ` Windows: sc create JMSConnection binPath= "完整路径\\jms-connection-service-windows.exe" start= auto`, |
| | | " Linux: 参考 DEPLOY.md 中的 PM2 / systemd 章节", |
| | | "", |
| | | "详细文档见 DEPLOY.md", |
| | | ].join("\n"); |
| | | fs.writeFileSync(path.join(outDir, "README.txt"), readme, "utf-8"); |
| | | |
| | | console.log(` ${item.os}: ${path.relative(ROOT, outDir)}/ 组装完成`); |
| | | } |
| | | |
| | | // ── 5. 打包归档 ── |
| | | console.log("[5/5] 打包归档..."); |
| | | |
| | | for (const item of builtFiles) { |
| | | const { outDir, baseName, os } = item; |
| | | const dirName = path.basename(outDir); |
| | | |
| | | if (os === "windows") { |
| | | const zipPath = path.join(DIST, `${baseName}.zip`); |
| | | try { |
| | | // 清除旧 zip |
| | | try { fs.unlinkSync(zipPath); } catch {} |
| | | execSync( |
| | | `powershell -Command "Compress-Archive -Path '${outDir}' -DestinationPath '${zipPath}' -Force"`, |
| | | { stdio: "ignore" } |
| | | ); |
| | | console.log(` ${path.basename(zipPath)} (${formatSize(fs.statSync(zipPath).size)})`); |
| | | } catch { |
| | | console.log(` ⚠ PowerShell 不可用,跳过 zip (文件在 ${path.relative(ROOT, outDir)}/)`); |
| | | } |
| | | } else { |
| | | const tgzPath = path.join(DIST, `${baseName}.tar.gz`); |
| | | try { |
| | | try { fs.unlinkSync(tgzPath); } catch {} |
| | | // 用相对路径避免 Windows 盘符问题 |
| | | execSync( |
| | | `tar -czf "${tgzPath}" -C "${DIST}" "${dirName}"`, |
| | | { stdio: "ignore", cwd: DIST } |
| | | ); |
| | | console.log(` ${path.basename(tgzPath)} (${formatSize(fs.statSync(tgzPath).size)})`); |
| | | } catch { |
| | | console.log(` ⚠ tar 不可用,跳过归档 (文件在 ${path.relative(ROOT, outDir)}/)`); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // ── 汇总 ── |
| | | console.log("\n======== 打包完成 ========"); |
| | | console.log(`输出目录: ${path.relative(ROOT, DIST)}/`); |
| | | const distFiles = fs.readdirSync(DIST); |
| | | for (const f of distFiles) { |
| | | const full = path.join(DIST, f); |
| | | const stat = fs.statSync(full); |
| | | if (stat.isDirectory()) { |
| | | const contents = fs.readdirSync(full); |
| | | const exe = contents.find(x => x.endsWith(".exe") || x.startsWith("jms-connection-service-")); |
| | | console.log(` ${f}/ (${exe ? exe + "、" : ""}config.json、logs/、README.txt)`); |
| | | } else { |
| | | console.log(` ${f} (${formatSize(stat.size)})`); |
| | | } |
| | | } |
| | | console.log("\n下一步: 进入 dist/ 对应目录,编辑 config.json 后启动程序验证。"); |
| | | |
| | | // ── helpers ── |
| | | function formatSize(bytes) { |
| | | if (bytes >= 1048576) return (bytes / 1048576).toFixed(1) + " MB"; |
| | | if (bytes >= 1024) return (bytes / 1024).toFixed(1) + " KB"; |
| | | return bytes + " B"; |
| | | } |