From 7ab290fffa64ff47a15e93acc94f2edb6dc80c33 Mon Sep 17 00:00:00 2001 From: wxf Date: Thu, 16 Jul 2026 14:45:15 +0800 Subject: [PATCH] =?UTF-8?q?codex=E9=A2=9D=E5=BA=A6=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E5=BC=80=E5=8F=91=E5=AE=8C=E6=88=901.0?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 + README.md | 40 + build/icon-preview.png | Bin 0 -> 10496 bytes build/icon.ico | Bin 0 -> 23902 bytes build/icon.svg | 6 + dock-preview.png | Bin 0 -> 393 bytes electron/main.js | 344 ++ electron/preload.cjs | 16 + electron/usage-reader.js | 193 ++ findings.md | 47 + index.html | 13 + package-lock.json | 5571 +++++++++++++++++++++++++++++++++ package.json | 49 + preview.png | Bin 0 -> 1875 bytes progress.md | 51 + scripts/generate-icon.cjs | 83 + src/App.vue | 10 + src/assets/main.css | 26 + src/components/OrbitGauge.vue | 148 + src/components/QuotaTile.vue | 149 + src/components/UsagePanel.vue | 148 + src/composables/useUsage.js | 56 + src/main.js | 5 + task_plan.md | 67 + tests/usage-reader.test.js | 56 + unpacked-preview.png | Bin 0 -> 68374 bytes vite.config.js | 17 + 27 files changed, 7100 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 build/icon-preview.png create mode 100644 build/icon.ico create mode 100644 build/icon.svg create mode 100644 dock-preview.png create mode 100644 electron/main.js create mode 100644 electron/preload.cjs create mode 100644 electron/usage-reader.js create mode 100644 findings.md create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 preview.png create mode 100644 progress.md create mode 100644 scripts/generate-icon.cjs create mode 100644 src/App.vue create mode 100644 src/assets/main.css create mode 100644 src/components/OrbitGauge.vue create mode 100644 src/components/QuotaTile.vue create mode 100644 src/components/UsagePanel.vue create mode 100644 src/composables/useUsage.js create mode 100644 src/main.js create mode 100644 task_plan.md create mode 100644 tests/usage-reader.test.js create mode 100644 unpacked-preview.png create mode 100644 vite.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..63f9a0c --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules/ +dist/ +release/ +*.log +.DS_Store diff --git a/README.md b/README.md new file mode 100644 index 0000000..6f7d961 --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# Codex Halo + +使用 Vue 3、JavaScript 与 Electron 开发的 Windows Codex 本地额度悬浮仪表。 + +## 功能 + +- 从 `%USERPROFILE%\.codex\sessions` 读取 5 小时与 7 天额度快照 +- 监听 Codex JSONL 日志变化并自动刷新 +- 透明无边框、始终置顶、可拖动悬浮窗口 +- 系统托盘、手动刷新和窗口位置记忆 +- 纯 SVG/CSS 原创界面,不依赖图片资源 +- 完全本地运行,不需要服务器或数据库 + +## 开发 + +```powershell +npm install +npm run dev +``` + +浏览器单独预览页面: + +```powershell +npm run dev:web +``` + +生成真实 Electron 窗口预览图: + +```powershell +npm run capture +``` + +## 测试与构建 + +```powershell +npm test +npm run build +``` + +构建产物会生成在 `release` 目录。 diff --git a/build/icon-preview.png b/build/icon-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..d0310fa02b3ed682328a793beb9aa305089ad061 GIT binary patch literal 10496 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 PGMz9D7C8RTkEQ<$F$j@k literal 0 HcmV?d00001 diff --git a/build/icon.svg b/build/icon.svg new file mode 100644 index 0000000..eeeced1 --- /dev/null +++ b/build/icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/dock-preview.png b/dock-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..1e4f5042e5f454d3c1febc6d4e2955cbe3f43cd6 GIT binary patch literal 393 zcmV;40e1e0P)Px$LrFwIR7i>Kmc2>?Q4oc{xd|Z=%+Drjp%}5Sm9(jXU?V9NECl;>zDRrq>pX&B zX>DmCL_~}HxSQP+YJxjf8(g!iDQuKI&7I4gZ{~2T1AkMF;}nBh;+neMZnj*?ogmT_ zrKYeM3yhsXL&a|aM_=FO0LSU=rbOEydr`y8=ZkIIg_Pkeu6YhH=4~J4G_DyS9rkBt zlO6jR&vVJ=3zV#K^ag=?P*(0oYi5<@jJ4Z7EQtptJh1pAEf50^cbC5+DH*AORBKcL7z+fDRW1L}UW;1aNzw znl)6{Ug9k&Tmvj+m1f-optds!0ikd*8ubqi+F8gFfbXX-5iS-6EX#6@&pB`v2Sf*~ n@u0!GwiNw2UnA literal 0 HcmV?d00001 diff --git a/electron/main.js b/electron/main.js new file mode 100644 index 0000000..9997c2c --- /dev/null +++ b/electron/main.js @@ -0,0 +1,344 @@ +import { app, BrowserWindow, ipcMain, Menu, nativeImage, screen, systemPreferences, Tray } from 'electron' +import { readFileSync, writeFileSync } from 'node:fs' +import os from 'node:os' +import path from 'node:path' +import { fileURLToPath } from 'node:url' +import { UsageReader } from './usage-reader.js' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const SINGLE_TILE_WIDTH = 120 +const DOUBLE_TILE_WIDTH = 236 +const WINDOW_HEIGHT = 60 +const DOCK_WIDTH = 12 +const DOCK_TRIGGER_DISTANCE = 16 +const DOCK_ANIMATION_DURATION = 210 +const screenshotArgument = process.argv.find((argument) => argument.startsWith('--screenshot=')) +const screenshotPath = screenshotArgument?.slice('--screenshot='.length) + +if (screenshotPath) { + app.setPath('userData', path.join(os.tmpdir(), `codex-halo-preview-${process.pid}`)) +} + +let mainWindow +let tray +let usageReader +let isQuitting = false +let saveBoundsTimer +let dragState = null +let normalWindowWidth = SINGLE_TILE_WIDTH +let isDocked = false +let isDockCollapsed = false +let dockTimer +let dockAnimationTimer + +function settingsPath() { + return path.join(app.getPath('userData'), 'window-state.json') +} + +function readWindowState() { + try { + return JSON.parse(readFileSync(settingsPath(), 'utf8')) + } catch { + return null + } +} + +function isVisibleOnAnyDisplay(bounds) { + return screen.getAllDisplays().some(({ workArea }) => { + const horizontal = bounds.x < workArea.x + workArea.width && bounds.x + bounds.width > workArea.x + const vertical = bounds.y < workArea.y + workArea.height && bounds.y + bounds.height > workArea.y + return horizontal && vertical + }) +} + +function initialBounds() { + const saved = readWindowState() + if (saved && isVisibleOnAnyDisplay(saved)) { + return { + width: SINGLE_TILE_WIDTH, + height: WINDOW_HEIGHT, + x: saved.x + Math.max(0, saved.width - SINGLE_TILE_WIDTH), + y: saved.y, + } + } + + const { workArea } = screen.getPrimaryDisplay() + return { + width: SINGLE_TILE_WIDTH, + height: WINDOW_HEIGHT, + x: workArea.x + workArea.width - SINGLE_TILE_WIDTH - 28, + y: workArea.y + 28, + } +} + +function resizeForSnapshot(snapshot) { + if (!mainWindow || mainWindow.isDestroyed()) return + const now = Date.now() + const hasShortWindow = snapshot.shortWindow?.resetsAt > now + const hasWeekWindow = snapshot.weekWindow?.resetsAt > now + const width = hasShortWindow && hasWeekWindow ? DOUBLE_TILE_WIDTH : SINGLE_TILE_WIDTH + const bounds = mainWindow.getBounds() + normalWindowWidth = width + + if (isDocked) { + clearInterval(dockAnimationTimer) + const { workArea } = screen.getDisplayMatching(bounds) + const dockWidth = isDockCollapsed ? DOCK_WIDTH : normalWindowWidth + mainWindow.setBounds({ + x: workArea.x + workArea.width - dockWidth, + y: bounds.y, + width: dockWidth, + height: WINDOW_HEIGHT, + }) + return + } + + if (bounds.width !== width || bounds.height !== WINDOW_HEIGHT) { + mainWindow.setBounds({ + x: bounds.x + bounds.width - width, + y: bounds.y, + width, + height: WINDOW_HEIGHT, + }) + } +} + +function saveWindowState() { + if (!mainWindow || mainWindow.isDestroyed() || isDocked) return + clearTimeout(saveBoundsTimer) + saveBoundsTimer = setTimeout(() => { + if (isDocked) return + writeFileSync(settingsPath(), JSON.stringify(mainWindow.getBounds())) + }, 250) +} + +function setDockCollapsed(collapsed, animated = true) { + if (!isDocked || !mainWindow || mainWindow.isDestroyed()) return + const bounds = mainWindow.getBounds() + const { workArea } = screen.getDisplayMatching(bounds) + const targetWidth = collapsed ? DOCK_WIDTH : normalWindowWidth + const rightEdge = workArea.x + workArea.width + const y = Math.max( + workArea.y, + Math.min(bounds.y, workArea.y + workArea.height - WINDOW_HEIGHT), + ) + isDockCollapsed = collapsed + clearInterval(dockAnimationTimer) + + if (!animated || systemPreferences.getAnimationSettings().prefersReducedMotion) { + mainWindow.setBounds({ x: rightEdge - targetWidth, y, width: targetWidth, height: WINDOW_HEIGHT }) + return + } + + const startWidth = bounds.width + const startedAt = Date.now() + dockAnimationTimer = setInterval(() => { + if (!mainWindow || mainWindow.isDestroyed()) { + clearInterval(dockAnimationTimer) + return + } + + const elapsed = Math.min(1, (Date.now() - startedAt) / DOCK_ANIMATION_DURATION) + const eased = 1 - Math.pow(1 - elapsed, 3) + const width = Math.round(startWidth + (targetWidth - startWidth) * eased) + mainWindow.setBounds({ x: rightEdge - width, y, width, height: WINDOW_HEIGHT }) + + if (elapsed === 1) clearInterval(dockAnimationTimer) + }, 16) +} + +function dockAtRightEdge() { + const bounds = mainWindow.getBounds() + const { workArea } = screen.getDisplayMatching(bounds) + const rightEdge = workArea.x + workArea.width + if (bounds.x + bounds.width < rightEdge - DOCK_TRIGGER_DISTANCE) return + isDocked = true + setDockCollapsed(true) +} + +function createTrayImage() { + const size = 40 + const bitmap = Buffer.alloc(size * size * 4) + + function isInsideRoundedRect(x, y, left, top, right, bottom, radius) { + const nearestX = Math.max(left + radius, Math.min(x, right - radius)) + const nearestY = Math.max(top + radius, Math.min(y, bottom - radius)) + return Math.hypot(x - nearestX, y - nearestY) <= radius + } + + for (let y = 0; y < size; y += 1) { + for (let x = 0; x < size; x += 1) { + const offset = (y * size + x) * 4 + const isTile = isInsideRoundedRect(x + 0.5, y + 0.5, 4, 4, 36, 36, 9) + const isTallBar = isInsideRoundedRect(x + 0.5, y + 0.5, 13, 12, 18, 29, 2.5) + const isShortBar = isInsideRoundedRect(x + 0.5, y + 0.5, 23, 19, 28, 29, 2.5) + + if (isTile) { + // Bitmap pixels use BGRA order. This matches the widget's cobalt-blue identity. + bitmap[offset] = 246 + bitmap[offset + 1] = 87 + bitmap[offset + 2] = 49 + bitmap[offset + 3] = 255 + } + + if (isTallBar || isShortBar) { + bitmap[offset] = 255 + bitmap[offset + 1] = 255 + bitmap[offset + 2] = 255 + bitmap[offset + 3] = 255 + } + } + } + + return nativeImage + .createFromBitmap(bitmap, { width: size, height: size, scaleFactor: 1 }) + .resize({ width: 20, height: 20, quality: 'best' }) +} + +function showWindow() { + if (!mainWindow) return + mainWindow.showInactive() + mainWindow.moveTop() +} + +function trayMenu() { + return Menu.buildFromTemplate([ + { label: '重新读取', click: () => usageReader.refresh() }, + { + label: '始终置顶', + type: 'checkbox', + checked: mainWindow?.isAlwaysOnTop() ?? true, + click: ({ checked }) => mainWindow?.setAlwaysOnTop(checked, 'floating'), + }, + { type: 'separator' }, + { + label: '退出', + click: () => { + isQuitting = true + app.quit() + }, + }, + ]) +} + +function createWindow() { + mainWindow = new BrowserWindow({ + ...initialBounds(), + frame: false, + transparent: true, + backgroundColor: '#00000000', + alwaysOnTop: true, + skipTaskbar: true, + show: false, + resizable: false, + hasShadow: false, + webPreferences: { + preload: path.join(__dirname, 'preload.cjs'), + contextIsolation: true, + nodeIntegration: false, + sandbox: true, + }, + }) + + mainWindow.setAlwaysOnTop(true, 'floating') + mainWindow.setVisibleOnAllWorkspaces(true, { visibleOnFullScreen: false }) + + if (process.env.VITE_DEV_SERVER_URL) mainWindow.loadURL(process.env.VITE_DEV_SERVER_URL) + else mainWindow.loadFile(path.join(__dirname, '..', 'dist', 'index.html')) + + mainWindow.once('ready-to-show', () => { + showWindow() + usageReader.refresh() + }) + + mainWindow.webContents.once('did-finish-load', async () => { + if (screenshotPath) { + showWindow() + await new Promise((resolve) => setTimeout(resolve, 1200)) + mainWindow.webContents.invalidate() + const image = await mainWindow.webContents.capturePage() + writeFileSync(path.resolve(screenshotPath), image.toPNG()) + isQuitting = true + app.quit() + } + }) + + mainWindow.on('move', saveWindowState) + mainWindow.on('close', (event) => { + if (!isQuitting) { + event.preventDefault() + mainWindow.hide() + } + }) + + mainWindow.webContents.on('context-menu', () => trayMenu().popup({ window: mainWindow })) +} + +function createTray() { + tray = new Tray(createTrayImage()) + tray.setToolTip('Codex Halo · 本地额度仪表') + tray.setContextMenu(trayMenu()) + tray.on('double-click', showWindow) +} + +const hasSingleInstanceLock = screenshotPath || app.requestSingleInstanceLock() +if (!hasSingleInstanceLock) app.quit() + +app.on('second-instance', showWindow) +app.on('before-quit', () => { + isQuitting = true + clearInterval(dockAnimationTimer) + usageReader?.stop() +}) + +app.whenReady().then(() => { + const sessionsPath = path.join(os.homedir(), '.codex', 'sessions') + usageReader = new UsageReader(sessionsPath) + usageReader.on('snapshot', (snapshot) => { + if (mainWindow && !mainWindow.isDestroyed()) { + resizeForSnapshot(snapshot) + mainWindow.webContents.send('usage:snapshot', snapshot) + } + }) + usageReader.start() + + ipcMain.handle('usage:get', () => usageReader.readLatest()) + ipcMain.handle('usage:refresh', () => usageReader.refresh()) + ipcMain.on('window:drag-start', (event, point) => { + if (event.sender !== mainWindow?.webContents) return + clearTimeout(dockTimer) + if (isDocked) setDockCollapsed(false, false) + isDocked = false + isDockCollapsed = false + const bounds = mainWindow.getBounds() + dragState = { pointerX: point.x, pointerY: point.y, windowX: bounds.x, windowY: bounds.y } + }) + ipcMain.on('window:drag-move', (event, point) => { + if (event.sender !== mainWindow?.webContents || !dragState) return + mainWindow.setPosition( + Math.round(dragState.windowX + point.x - dragState.pointerX), + Math.round(dragState.windowY + point.y - dragState.pointerY), + ) + }) + ipcMain.on('window:drag-end', () => { + dragState = null + dockAtRightEdge() + }) + ipcMain.on('window:dock-expand', (event) => { + if (event.sender !== mainWindow?.webContents || !isDocked) return + clearTimeout(dockTimer) + setDockCollapsed(false) + }) + ipcMain.on('window:dock-collapse', (event) => { + if (event.sender !== mainWindow?.webContents || !isDocked || dragState) return + clearTimeout(dockTimer) + dockTimer = setTimeout(() => setDockCollapsed(true), 180) + }) + + createWindow() + if (!screenshotPath) createTray() +}) + +app.on('window-all-closed', () => { + // The tray owns the application lifecycle on Windows. +}) diff --git a/electron/preload.cjs b/electron/preload.cjs new file mode 100644 index 0000000..ffb1d56 --- /dev/null +++ b/electron/preload.cjs @@ -0,0 +1,16 @@ +const { contextBridge, ipcRenderer } = require('electron') + +contextBridge.exposeInMainWorld('codexHalo', { + getUsage: () => ipcRenderer.invoke('usage:get'), + refreshUsage: () => ipcRenderer.invoke('usage:refresh'), + startWindowDrag: (point) => ipcRenderer.send('window:drag-start', point), + moveWindowDrag: (point) => ipcRenderer.send('window:drag-move', point), + endWindowDrag: () => ipcRenderer.send('window:drag-end'), + expandDock: () => ipcRenderer.send('window:dock-expand'), + collapseDock: () => ipcRenderer.send('window:dock-collapse'), + onUsage: (callback) => { + const listener = (_event, snapshot) => callback(snapshot) + ipcRenderer.on('usage:snapshot', listener) + return () => ipcRenderer.removeListener('usage:snapshot', listener) + }, +}) diff --git a/electron/usage-reader.js b/electron/usage-reader.js new file mode 100644 index 0000000..61179e3 --- /dev/null +++ b/electron/usage-reader.js @@ -0,0 +1,193 @@ +import { EventEmitter } from 'node:events' +import { closeSync, existsSync, fstatSync, openSync, readSync, readdirSync, statSync, watch } from 'node:fs' +import path from 'node:path' + +export const SHORT_WINDOW_MINUTES = 300 +export const WEEK_WINDOW_MINUTES = 10080 + +const MAX_FILES_TO_SCAN = 160 +const TAIL_BYTES_PER_FILE = 2 * 1024 * 1024 + +function clamp(value, min, max) { + return Math.min(max, Math.max(min, value)) +} + +export function parseUsageLine(line, sourceFile = '') { + if (!line.includes('"rate_limits"') || !line.includes('"token_count"')) return [] + + try { + const root = JSON.parse(line) + if (root?.type !== 'event_msg' || root?.payload?.type !== 'token_count') return [] + + const observedAt = Number.isNaN(Date.parse(root.timestamp)) + ? Date.now() + : Date.parse(root.timestamp) + + return ['primary', 'secondary'].flatMap((key) => { + const window = root.payload.rate_limits?.[key] + const windowMinutes = Number(window?.window_minutes) + const usedPercent = Number(window?.used_percent) + const resetsAtSeconds = Number(window?.resets_at) + + if (![SHORT_WINDOW_MINUTES, WEEK_WINDOW_MINUTES].includes(windowMinutes)) return [] + if (![usedPercent, resetsAtSeconds].every(Number.isFinite)) return [] + + return [{ + windowMinutes, + usedPercent: clamp(usedPercent, 0, 100), + remainingPercent: clamp(100 - usedPercent, 0, 100), + resetsAt: resetsAtSeconds * 1000, + observedAt, + sourceFile, + }] + }) + } catch { + return [] + } +} + +function collectRolloutFiles(rootPath) { + const results = [] + const pending = [rootPath] + + while (pending.length > 0) { + const directory = pending.pop() + let entries + + try { + entries = readdirSync(directory, { withFileTypes: true }) + } catch { + continue + } + + for (const entry of entries) { + const fullPath = path.join(directory, entry.name) + if (entry.isDirectory()) pending.push(fullPath) + else if (entry.isFile() && /^rollout-.*\.jsonl$/i.test(entry.name)) results.push(fullPath) + } + } + + return results + .map((filePath) => { + try { + return { filePath, modifiedAt: statSync(filePath).mtimeMs } + } catch { + return null + } + }) + .filter(Boolean) + .sort((a, b) => b.modifiedAt - a.modifiedAt) + .slice(0, MAX_FILES_TO_SCAN) +} + +function readFileTail(filePath) { + let descriptor + + try { + descriptor = openSync(filePath, 'r') + const size = fstatSync(descriptor).size + const start = Math.max(0, size - TAIL_BYTES_PER_FILE) + const length = size - start + const buffer = Buffer.alloc(length) + readSync(descriptor, buffer, 0, length, start) + + const lines = buffer.toString('utf8').split(/\r?\n/).filter(Boolean) + if (start > 0) lines.shift() + return lines + } catch { + return [] + } finally { + if (descriptor !== undefined) closeSync(descriptor) + } +} + +export function readLatestUsage(sessionsPath) { + if (!existsSync(sessionsPath)) { + return { + shortWindow: null, + weekWindow: null, + status: '未找到 Codex 会话目录', + updatedAt: Date.now(), + } + } + + let shortWindow = null + let weekWindow = null + + for (const { filePath, modifiedAt } of collectRolloutFiles(sessionsPath)) { + for (const line of readFileTail(filePath)) { + for (const snapshot of parseUsageLine(line, filePath)) { + if (snapshot.windowMinutes === SHORT_WINDOW_MINUTES && + (!shortWindow || snapshot.observedAt > shortWindow.observedAt)) { + shortWindow = snapshot + } + + if (snapshot.windowMinutes === WEEK_WINDOW_MINUTES && + (!weekWindow || snapshot.observedAt > weekWindow.observedAt)) { + weekWindow = snapshot + } + } + } + + if (shortWindow && weekWindow && + modifiedAt < shortWindow.observedAt && modifiedAt < weekWindow.observedAt) break + } + + const now = Date.now() + if (shortWindow?.resetsAt <= now) shortWindow = null + if (weekWindow?.resetsAt <= now) weekWindow = null + + return { + shortWindow, + weekWindow, + status: shortWindow || weekWindow ? '已从本地日志同步' : '本地日志中暂无额度快照', + updatedAt: Date.now(), + } +} + +export class UsageReader extends EventEmitter { + constructor(sessionsPath) { + super() + this.sessionsPath = sessionsPath + this.fileWatcher = null + this.refreshTimer = null + this.safetyTimer = null + } + + readLatest() { + return readLatestUsage(this.sessionsPath) + } + + refresh() { + const snapshot = this.readLatest() + this.emit('snapshot', snapshot) + return snapshot + } + + requestRefresh() { + clearTimeout(this.refreshTimer) + this.refreshTimer = setTimeout(() => this.refresh(), 250) + } + + start() { + if (existsSync(this.sessionsPath)) { + try { + this.fileWatcher = watch(this.sessionsPath, { recursive: true }, (_event, fileName) => { + if (!fileName || /(^|[\\/])rollout-.*\.jsonl$/i.test(fileName)) this.requestRefresh() + }) + this.fileWatcher.on('error', () => this.requestRefresh()) + } catch { + this.fileWatcher = null + } + } + + this.safetyTimer = setInterval(() => this.requestRefresh(), 15_000) + } + + stop() { + clearTimeout(this.refreshTimer) + clearInterval(this.safetyTimer) + this.fileWatcher?.close() + this.fileWatcher = null + } +} diff --git a/findings.md b/findings.md new file mode 100644 index 0000000..4a0f99c --- /dev/null +++ b/findings.md @@ -0,0 +1,47 @@ +# 发现与决策 + +## 需求 + +- 参考桌面 `codexorbit-1.2.3` 的功能开发 Vue 版本。 +- 使用前端技术和 JavaScript。 +- 样式重新设计,不使用原项目图片。 +- 最终可构建为 Windows EXE。 + +## 原项目发现 + +- 原项目为 C#、WPF、.NET Framework 4.8、x64 WinExe。 +- 读取 `%USERPROFILE%\.codex\sessions` 下的 `rollout-*.jsonl`。 +- 从 `event_msg` / `token_count` / `rate_limits` 记录提取 primary 与 secondary 时间窗口。 +- 5 小时窗口为 300 分钟,周窗口为 10080 分钟。 +- 使用文件监听器更新额度;窗口位置写入本地配置文件。 +- 不需要服务器或数据库。 + +## 组件地图 + +| 模块 | 单一职责 | 数据契约 | +|------|----------|----------| +| `App.vue` | 组合应用外壳与额度面板 | 使用 `useUsage`,向面板传入快照 | +| `QuotaTile.vue` | 以悬浮标签展示单个周期百分比和垂直刻度 | props: `value`, `label`, `tone` | +| `UsagePanel.vue` | 展示双窗口额度、状态与重置时间 | props: `snapshot`; emit: `refresh` | +| `useUsage.js` | 管理 IPC 订阅、刷新和演示数据 | 返回只读快照、连接状态和刷新动作 | +| Electron main | 窗口、托盘、日志解析和文件监听 | 通过 `usage:snapshot` IPC 推送快照 | +| Electron preload | 仅暴露受限桌面 API | `getUsage`, `refreshUsage`, `onUsage` | + +## 视觉方向(第二版) + +- “瑞士编辑排版 × 工业仪表”:奶油纸张色、炭黑信息块、朱红和酸绿色功能色。 +- 去掉发光圆环,改为大数字、分段刻度和两种材质并置,提升扫读效率。 +- 使用纯 CSS 几何元素,不使用图片;保留非对称圆角作为识别特征。 + +## 视觉方向(最终精简版) + +- 去掉外层卡片、阴影、边框、标题、状态、重置时间与刷新按钮。 +- 只保留圆形额度表盘、百分比和 `5h/7d` 标签。 +- 5 小时快照已经过期时视为不存在,界面只显示周额度。 +- Electron 窗口根据一枚或两枚表盘自动调整宽度,避免透明区域拦截桌面操作。 + +## 视觉方向(独立原创版) + +- 放弃圆环参考,改为无边框、无阴影的悬浮额度标签。 +- 以大号百分比、单色信号点和右侧垂直刻度表达额度,不增加业务文案。 +- 周额度使用酸绿色,5小时额度使用珊瑚红;两者存在时并列,不存在时自动收缩。 diff --git a/index.html b/index.html new file mode 100644 index 0000000..cf6eaef --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Codex Halo + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..938f5c8 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5571 @@ +{ + "name": "codex-halo", + "version": "1.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "codex-halo", + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "vue": "^3.5.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.0", + "concurrently": "^9.0.0", + "cross-env": "^7.0.3", + "electron": "^37.0.0", + "electron-builder": "^26.0.0", + "vite": "^7.0.0", + "wait-on": "^8.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "http://cnpm.800best.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "http://cnpm.800best.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "http://cnpm.800best.com/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "http://cnpm.800best.com/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@electron/asar": { + "version": "3.4.1", + "resolved": "http://cnpm.800best.com/@electron/asar/-/asar-3.4.1.tgz", + "integrity": "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@electron/asar/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "http://cnpm.800best.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@electron/asar/node_modules/brace-expansion": { + "version": "1.1.16", + "resolved": "http://cnpm.800best.com/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@electron/asar/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "http://cnpm.800best.com/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@electron/fuses": { + "version": "1.8.0", + "resolved": "http://cnpm.800best.com/@electron/fuses/-/fuses-1.8.0.tgz", + "integrity": "sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.1", + "fs-extra": "^9.0.1", + "minimist": "^1.2.5" + }, + "bin": { + "electron-fuses": "dist/bin.js" + } + }, + "node_modules/@electron/fuses/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "http://cnpm.800best.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/@electron/fuses/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "http://cnpm.800best.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/@electron/fuses/node_modules/universalify": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/get": { + "version": "2.0.3", + "resolved": "http://cnpm.800best.com/@electron/get/-/get-2.0.3.tgz", + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/@electron/notarize": { + "version": "2.5.0", + "resolved": "http://cnpm.800best.com/@electron/notarize/-/notarize-2.5.0.tgz", + "integrity": "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.1", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/notarize/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "http://cnpm.800best.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/@electron/notarize/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "http://cnpm.800best.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/@electron/notarize/node_modules/universalify": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/osx-sign": { + "version": "1.3.3", + "resolved": "http://cnpm.800best.com/@electron/osx-sign/-/osx-sign-1.3.3.tgz", + "integrity": "sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "compare-version": "^0.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "isbinaryfile": "^4.0.8", + "minimist": "^1.2.6", + "plist": "^3.0.5" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@electron/osx-sign/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "http://cnpm.800best.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "http://cnpm.800best.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/@electron/osx-sign/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "http://cnpm.800best.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/@electron/osx-sign/node_modules/universalify": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/rebuild": { + "version": "4.2.0", + "resolved": "http://cnpm.800best.com/@electron/rebuild/-/rebuild-4.2.0.tgz", + "integrity": "sha512-RKL/O+jGoXJMxrx/5771y1n0xTKmFuOYGO3gMmwypBM6rsH0kou0mswwdXA2JrhIkE4xyC7v9vGk0n6NPzgOxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@malept/cross-spawn-promise": "^2.0.0", + "debug": "^4.1.1", + "node-abi": "^4.2.0", + "node-api-version": "^0.2.1", + "node-gyp": "^12.2.0", + "read-binary-file-arch": "^1.0.6" + }, + "bin": { + "electron-rebuild": "lib/cli.js" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@electron/universal": { + "version": "2.0.3", + "resolved": "http://cnpm.800best.com/@electron/universal/-/universal-2.0.3.tgz", + "integrity": "sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron/asar": "^3.3.1", + "@malept/cross-spawn-promise": "^2.0.0", + "debug": "^4.3.1", + "dir-compare": "^4.2.0", + "fs-extra": "^11.1.1", + "minimatch": "^9.0.3", + "plist": "^3.1.0" + }, + "engines": { + "node": ">=16.4" + } + }, + "node_modules/@electron/universal/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "http://cnpm.800best.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@electron/universal/node_modules/brace-expansion": { + "version": "2.1.2", + "resolved": "http://cnpm.800best.com/brace-expansion/-/brace-expansion-2.1.2.tgz", + "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@electron/universal/node_modules/fs-extra": { + "version": "11.3.6", + "resolved": "http://cnpm.800best.com/fs-extra/-/fs-extra-11.3.6.tgz", + "integrity": "sha512-w8ZNZr2mKIc7qeNaQ9AVPT1+iFaI+Avd4xudVOvdDJ8VytREi1Ft5Ih7hd9jjehod8vAM5GMsfQ/TpPf4EyoEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@electron/universal/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "http://cnpm.800best.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/@electron/universal/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "http://cnpm.800best.com/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@electron/universal/node_modules/universalify": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/windows-sign": { + "version": "1.2.2", + "resolved": "http://cnpm.800best.com/@electron/windows-sign/-/windows-sign-1.2.2.tgz", + "integrity": "sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "dependencies": { + "cross-dirname": "^0.1.0", + "debug": "^4.3.4", + "fs-extra": "^11.1.1", + "minimist": "^1.2.8", + "postject": "^1.0.0-alpha.6" + }, + "bin": { + "electron-windows-sign": "bin/electron-windows-sign.js" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@electron/windows-sign/node_modules/fs-extra": { + "version": "11.3.6", + "resolved": "http://cnpm.800best.com/fs-extra/-/fs-extra-11.3.6.tgz", + "integrity": "sha512-w8ZNZr2mKIc7qeNaQ9AVPT1+iFaI+Avd4xudVOvdDJ8VytREi1Ft5Ih7hd9jjehod8vAM5GMsfQ/TpPf4EyoEA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@electron/windows-sign/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "http://cnpm.800best.com/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/windows-sign/node_modules/universalify": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@hapi/address": { + "version": "5.1.1", + "resolved": "http://cnpm.800best.com/@hapi/address/-/address-5.1.1.tgz", + "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^11.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/formula": { + "version": "3.0.2", + "resolved": "http://cnpm.800best.com/@hapi/formula/-/formula-3.0.2.tgz", + "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/hoek": { + "version": "11.0.7", + "resolved": "http://cnpm.800best.com/@hapi/hoek/-/hoek-11.0.7.tgz", + "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/pinpoint": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", + "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/tlds": { + "version": "1.1.7", + "resolved": "http://cnpm.800best.com/@hapi/tlds/-/tlds-1.1.7.tgz", + "integrity": "sha512-MgNjRwy9Ti92yVAixLmDc8dd1bJIKwO9qlWCfFQRwRmUEDPQHYn4G6hwPFvFGUTzAa0FsS+inMjLin7GnyBRhA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/topo": { + "version": "6.0.2", + "resolved": "http://cnpm.800best.com/@hapi/topo/-/topo-6.0.2.tgz", + "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^11.0.2" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "http://cnpm.800best.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "http://cnpm.800best.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@malept/cross-spawn-promise": { + "version": "2.0.0", + "resolved": "http://cnpm.800best.com/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", + "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "license": "Apache-2.0", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "http://cnpm.800best.com/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "http://cnpm.800best.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/@malept/flatpak-bundler/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "http://cnpm.800best.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/@malept/flatpak-bundler/node_modules/universalify": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@noble/hashes": { + "version": "2.2.0", + "resolved": "http://cnpm.800best.com/@noble/hashes/-/hashes-2.2.0.tgz", + "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.8.0", + "resolved": "http://cnpm.800best.com/@peculiar/asn1-schema/-/asn1-schema-2.8.0.tgz", + "integrity": "sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/json-schema": { + "version": "1.1.12", + "resolved": "http://cnpm.800best.com/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@peculiar/utils": { + "version": "2.0.3", + "resolved": "http://cnpm.800best.com/@peculiar/utils/-/utils-2.0.3.tgz", + "integrity": "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/webcrypto": { + "version": "1.7.1", + "resolved": "http://cnpm.800best.com/@peculiar/webcrypto/-/webcrypto-1.7.1.tgz", + "integrity": "sha512-ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/json-schema": "^1.1.12", + "@peculiar/utils": "^2.0.2", + "tslib": "^2.8.1", + "webcrypto-core": "^1.9.2" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "http://cnpm.800best.com/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", + "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", + "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", + "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", + "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", + "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", + "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", + "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", + "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", + "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", + "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", + "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", + "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", + "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", + "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", + "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", + "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", + "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", + "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", + "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", + "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", + "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", + "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", + "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", + "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", + "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "http://cnpm.800best.com/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "http://cnpm.800best.com/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "http://cnpm.800best.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "http://cnpm.800best.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "http://cnpm.800best.com/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "http://cnpm.800best.com/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "http://cnpm.800best.com/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.2.0", + "resolved": "http://cnpm.800best.com/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "http://cnpm.800best.com/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "http://cnpm.800best.com/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.20.1", + "resolved": "http://cnpm.800best.com/@types/node/-/node-22.20.1.tgz", + "integrity": "sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "http://cnpm.800best.com/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "http://cnpm.800best.com/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.7", + "resolved": "http://cnpm.800best.com/@vitejs/plugin-vue/-/plugin-vue-6.0.7.tgz", + "integrity": "sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.39", + "resolved": "http://cnpm.800best.com/@vue/compiler-core/-/compiler-core-3.5.39.tgz", + "integrity": "sha512-16KBTEXAJCpDr0mwlw+AZyhu8iyC7R3S2vBwsI7QnWJU6X3WKc9VKeNEZpiMdZ569qWhz9574L3vV55qRL0Vtw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@vue/shared": "3.5.39", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.39", + "resolved": "http://cnpm.800best.com/@vue/compiler-dom/-/compiler-dom-3.5.39.tgz", + "integrity": "sha512-oQPigALqYbNxTNPvNgSOe+czwVExfbVF02lz8jP0S3AXJiu3jxYDygNUiqSep4ezzW8XgnubqH63My2A7JR/vg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.39", + "@vue/shared": "3.5.39" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.39", + "resolved": "http://cnpm.800best.com/@vue/compiler-sfc/-/compiler-sfc-3.5.39.tgz", + "integrity": "sha512-d0ki86iOyN8LoZPBmk5SJWNwHP19CnDDCfuo//+2WJa2g5Ke0Jay983PIBIcSSzldC68I8DrD5GrHV3OSDfodg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@vue/compiler-core": "3.5.39", + "@vue/compiler-dom": "3.5.39", + "@vue/compiler-ssr": "3.5.39", + "@vue/shared": "3.5.39", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.15", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.39", + "resolved": "http://cnpm.800best.com/@vue/compiler-ssr/-/compiler-ssr-3.5.39.tgz", + "integrity": "sha512-Ce7/wvwMHai74bdszfXExdazFigYnlF9zgCmEQUcM1j0fOymlouZ7XilTYNo8oUjhlnjYOZbGrcYKuqjz89Ucw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.39", + "@vue/shared": "3.5.39" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.39", + "resolved": "http://cnpm.800best.com/@vue/reactivity/-/reactivity-3.5.39.tgz", + "integrity": "sha512-TpsuBJ9gGlZa5d23XcM2y8EXanz9dZeVDQBXRwzy46ItgvM+rWpzs+UVM0wcRLxGvcav0HE5jz2gNL53xlRAog==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.39" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.39", + "resolved": "http://cnpm.800best.com/@vue/runtime-core/-/runtime-core-3.5.39.tgz", + "integrity": "sha512-9GLtNyRvPAUMbX+7ono0RC2j0guo2LXVi8LvcmAooImACUKm0oFf0jjwbX8/H0AE/t1nxhAkn8RSl9PMCzzxZw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.39", + "@vue/shared": "3.5.39" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.39", + "resolved": "http://cnpm.800best.com/@vue/runtime-dom/-/runtime-dom-3.5.39.tgz", + "integrity": "sha512-7Y6aAGboKcXAZ3ECuUy7RrS5yy2r47dhTp2SKaJmYxjopImaVFaNa5Ne66NwGovsrxVAl5S5rwc7m22UG7Lmww==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.39", + "@vue/runtime-core": "3.5.39", + "@vue/shared": "3.5.39", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.39", + "resolved": "http://cnpm.800best.com/@vue/server-renderer/-/server-renderer-3.5.39.tgz", + "integrity": "sha512-yZSakiAGw85rZfG7UM8akMnIF+FmeiNk47uvHf2nVBBSe+dIKUhZuZq9+XgJhbV3nS5Z4ALH23/MpXofW+mbcw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.39", + "@vue/shared": "3.5.39" + }, + "peerDependencies": { + "vue": "3.5.39" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.39", + "resolved": "http://cnpm.800best.com/@vue/shared/-/shared-3.5.39.tgz", + "integrity": "sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==", + "license": "MIT" + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.13", + "resolved": "http://cnpm.800best.com/@xmldom/xmldom/-/xmldom-0.8.13.tgz", + "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/abbrev": { + "version": "4.0.0", + "resolved": "http://cnpm.800best.com/abbrev/-/abbrev-4.0.0.tgz", + "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "http://cnpm.800best.com/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "http://cnpm.800best.com/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "http://cnpm.800best.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": "http://cnpm.800best.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/app-builder-lib": { + "version": "26.15.3", + "resolved": "http://cnpm.800best.com/app-builder-lib/-/app-builder-lib-26.15.3.tgz", + "integrity": "sha512-2VnyWkqsP5v5XbBhL3tD5Syx8iNPBYsoU7kY4S2fz7wg8Rj/nztWKCUzGKaFRTv0Xwf3/H058CR1Kvtd/3lRow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron/asar": "3.4.1", + "@electron/fuses": "^1.8.0", + "@electron/get": "^3.0.0", + "@electron/notarize": "2.5.0", + "@electron/osx-sign": "1.3.3", + "@electron/rebuild": "^4.0.4", + "@electron/universal": "2.0.3", + "@malept/flatpak-bundler": "^0.4.0", + "@noble/hashes": "^2.2.0", + "@peculiar/webcrypto": "^1.7.1", + "@types/fs-extra": "9.0.13", + "ajv": "^8.18.0", + "asn1js": "^3.0.10", + "async-exit-hook": "^2.0.1", + "builder-util": "26.15.3", + "builder-util-runtime": "9.7.0", + "chromium-pickle-js": "^0.2.0", + "ci-info": "4.3.1", + "debug": "^4.3.4", + "dotenv": "^16.4.5", + "dotenv-expand": "^11.0.6", + "ejs": "^3.1.8", + "electron-publish": "26.15.3", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "isbinaryfile": "^5.0.0", + "jiti": "^2.4.2", + "js-yaml": "^4.1.0", + "json5": "^2.2.3", + "lazy-val": "^1.0.5", + "minimatch": "^10.2.5", + "pkijs": "^3.4.0", + "plist": "3.1.0", + "proper-lockfile": "^4.1.2", + "resedit": "^1.7.0", + "semver": "~7.7.3", + "tar": "^7.5.7", + "temp-file": "^3.4.0", + "tiny-async-pool": "1.3.0", + "unzipper": "^0.12.3", + "which": "^5.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "dmg-builder": "26.15.3", + "electron-builder-squirrel-windows": "26.15.3" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/get": { + "version": "3.1.0", + "resolved": "http://cnpm.800best.com/@electron/get/-/get-3.1.0.tgz", + "integrity": "sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/get/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "http://cnpm.800best.com/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/get/node_modules/semver": { + "version": "6.3.1", + "resolved": "http://cnpm.800best.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/app-builder-lib/node_modules/ci-info": { + "version": "4.3.1", + "resolved": "http://cnpm.800best.com/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/app-builder-lib/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "http://cnpm.800best.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/app-builder-lib/node_modules/fs-extra/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "http://cnpm.800best.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/app-builder-lib/node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/isexe": { + "version": "3.1.5", + "resolved": "http://cnpm.800best.com/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/app-builder-lib/node_modules/semver": { + "version": "7.7.4", + "resolved": "http://cnpm.800best.com/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/app-builder-lib/node_modules/which": { + "version": "5.0.0", + "resolved": "http://cnpm.800best.com/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/asn1js": { + "version": "3.0.10", + "resolved": "http://cnpm.800best.com/asn1js/-/asn1js-3.0.10.tgz", + "integrity": "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "http://cnpm.800best.com/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "http://cnpm.800best.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "http://cnpm.800best.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/aws4": { + "version": "1.13.2", + "resolved": "http://cnpm.800best.com/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.18.1", + "resolved": "http://cnpm.800best.com/axios/-/axios-1.18.1.tgz", + "integrity": "sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/axios/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "http://cnpm.800best.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/axios/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "http://cnpm.800best.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/balanced-match": { + "version": "4.0.4", + "resolved": "http://cnpm.800best.com/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "http://cnpm.800best.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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/bluebird": { + "version": "3.7.2", + "resolved": "http://cnpm.800best.com/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "http://cnpm.800best.com/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/brace-expansion": { + "version": "5.0.7", + "resolved": "http://cnpm.800best.com/brace-expansion/-/brace-expansion-5.0.7.tgz", + "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "http://cnpm.800best.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "http://cnpm.800best.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/builder-util": { + "version": "26.15.3", + "resolved": "http://cnpm.800best.com/builder-util/-/builder-util-26.15.3.tgz", + "integrity": "sha512-q2hn7Mbo2nFNkVekPiHFx6Nfo3hURmES3tfBn+k5Pqxl2RkmP3QGqZUhH/q9Pch/4G05NRhPjDlVj1O8q4Txvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/debug": "^4.1.6", + "builder-util-runtime": "9.7.0", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.6", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "js-yaml": "^4.1.0", + "sanitize-filename": "^1.6.3", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0", + "tiny-async-pool": "1.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.7.0", + "resolved": "http://cnpm.800best.com/builder-util-runtime/-/builder-util-runtime-9.7.0.tgz", + "integrity": "sha512-g/kR520giAFYkSXTzcmF3kqQq7wi8F6N6SzeDgZrqTBN+VHdmgWOyTdD1yD7AATDId/yXLvuP34CxW46/BwCdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "http://cnpm.800best.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/builder-util/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "http://cnpm.800best.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/builder-util/node_modules/universalify": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bytestreamjs": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/bytestreamjs/-/bytestreamjs-2.0.1.tgz", + "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "http://cnpm.800best.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "http://cnpm.800best.com/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "http://cnpm.800best.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "http://cnpm.800best.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/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "http://cnpm.800best.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/chownr": { + "version": "3.0.0", + "resolved": "http://cnpm.800best.com/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "http://cnpm.800best.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "http://cnpm.800best.com/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "http://cnpm.800best.com/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "http://cnpm.800best.com/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.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": "http://cnpm.800best.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": "http://cnpm.800best.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "http://cnpm.800best.com/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "http://cnpm.800best.com/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "http://cnpm.800best.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/concurrently": { + "version": "9.2.3", + "resolved": "http://cnpm.800best.com/concurrently/-/concurrently-9.2.3.tgz", + "integrity": "sha512-ihjs0E2SxvDgq/MK418hX6YycQgKhsqxpbZuZbHo0yKfqDWdymWMjWYIpCIzqDDLLKClHlXev8whW/8WXmJ0BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.4", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "http://cnpm.800best.com/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-dirname": { + "version": "0.1.0", + "resolved": "http://cnpm.800best.com/cross-dirname/-/cross-dirname-0.1.0.tgz", + "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "http://cnpm.800best.com/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "http://cnpm.800best.com/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "http://cnpm.800best.com/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "http://cnpm.800best.com/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "http://cnpm.800best.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/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "http://cnpm.800best.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/defer-to-connect": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "http://cnpm.800best.com/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "http://cnpm.800best.com/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "http://cnpm.800best.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "http://cnpm.800best.com/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/dir-compare": { + "version": "4.2.0", + "resolved": "http://cnpm.800best.com/dir-compare/-/dir-compare-4.2.0.tgz", + "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5", + "p-limit": "^3.1.0 " + } + }, + "node_modules/dir-compare/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "http://cnpm.800best.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/dir-compare/node_modules/brace-expansion": { + "version": "1.1.16", + "resolved": "http://cnpm.800best.com/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/dir-compare/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "http://cnpm.800best.com/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dmg-builder": { + "version": "26.15.3", + "resolved": "http://cnpm.800best.com/dmg-builder/-/dmg-builder-26.15.3.tgz", + "integrity": "sha512-O3zJUFUYHJKgzPqioHxfxzBzlSC1eXCSr79gMSBKBP5AgjjpmrydMsMLotEg9fAJF36vdUncb+4ndRNxoPdlSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "26.15.3", + "builder-util": "26.15.3", + "fs-extra": "^10.1.0", + "js-yaml": "^4.1.0" + } + }, + "node_modules/dmg-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "http://cnpm.800best.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dmg-builder/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "http://cnpm.800best.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/dmg-builder/node_modules/universalify": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "http://cnpm.800best.com/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "http://cnpm.800best.com/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "http://cnpm.800best.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "http://cnpm.800best.com/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "http://cnpm.800best.com/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron": { + "version": "37.10.3", + "resolved": "http://cnpm.800best.com/electron/-/electron-37.10.3.tgz", + "integrity": "sha512-3IjCGSjQmH50IbW2PFveaTzK+KwcFX9PEhE7KXb9v5IT8cLAiryAN7qezm/XzODhDRlLu0xKG1j8xWBtZ/bx/g==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@electron/get": "^2.0.0", + "@types/node": "^22.7.7", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 12.20.55" + } + }, + "node_modules/electron-builder": { + "version": "26.15.3", + "resolved": "http://cnpm.800best.com/electron-builder/-/electron-builder-26.15.3.tgz", + "integrity": "sha512-a1KM5heqS3gQCZzizXEI8RjJy3QVogULPdeSknt76uLDpBIW/HDGsMg/XgP0riP6PI9COsRvFITKKGDqA8fJxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "26.15.3", + "builder-util": "26.15.3", + "builder-util-runtime": "9.7.0", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "dmg-builder": "26.15.3", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "simple-update-notifier": "2.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/electron-builder-squirrel-windows": { + "version": "26.15.3", + "resolved": "http://cnpm.800best.com/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.15.3.tgz", + "integrity": "sha512-Jc19XPV9y9+2bAdZPkXuVNGNIEFBq9poHC61l8Kv6FdK7DRG3+Ic0rerC0DXOaeHNz8yW0fg/JnF8GQROOF5MA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "app-builder-lib": "26.15.3", + "builder-util": "26.15.3", + "electron-winstaller": "5.4.0" + } + }, + "node_modules/electron-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "http://cnpm.800best.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-builder/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "http://cnpm.800best.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/electron-builder/node_modules/universalify": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-publish": { + "version": "26.15.3", + "resolved": "http://cnpm.800best.com/electron-publish/-/electron-publish-26.15.3.tgz", + "integrity": "sha512-g/2bn8YTavY4cuS5F+jOS7zmZbXXBV8KZ8yHKfJjFPoKtzBqrpCdNPxBd3tqdBwP7BVd0lGzf7Bk2s0KesWZ4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/fs-extra": "^9.0.11", + "aws4": "^1.13.2", + "builder-util": "26.15.3", + "builder-util-runtime": "9.7.0", + "chalk": "^4.1.2", + "form-data": "^4.0.5", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + } + }, + "node_modules/electron-publish/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "http://cnpm.800best.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-publish/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "http://cnpm.800best.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/electron-publish/node_modules/universalify": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-winstaller": { + "version": "5.4.0", + "resolved": "http://cnpm.800best.com/electron-winstaller/-/electron-winstaller-5.4.0.tgz", + "integrity": "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@electron/asar": "^3.2.1", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.21", + "temp": "^0.9.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "@electron/windows-sign": "^1.1.2" + } + }, + "node_modules/electron-winstaller/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "http://cnpm.800best.com/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "http://cnpm.800best.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", + "resolved": "http://cnpm.800best.com/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "http://cnpm.800best.com/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "http://cnpm.800best.com/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "http://cnpm.800best.com/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "http://cnpm.800best.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "http://cnpm.800best.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "http://cnpm.800best.com/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "http://cnpm.800best.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "http://cnpm.800best.com/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/esbuild": { + "version": "0.28.1", + "resolved": "http://cnpm.800best.com/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "http://cnpm.800best.com/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "http://cnpm.800best.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "http://cnpm.800best.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "http://cnpm.800best.com/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "http://cnpm.800best.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.3", + "resolved": "http://cnpm.800best.com/fast-uri/-/fast-uri-3.1.3.tgz", + "integrity": "sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "http://cnpm.800best.com/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "http://cnpm.800best.com/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/filelist": { + "version": "1.0.6", + "resolved": "http://cnpm.800best.com/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "http://cnpm.800best.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.1.2", + "resolved": "http://cnpm.800best.com/brace-expansion/-/brace-expansion-2.1.2.tgz", + "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "http://cnpm.800best.com/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "http://cnpm.800best.com/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "http://cnpm.800best.com/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "http://cnpm.800best.com/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "http://cnpm.800best.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "http://cnpm.800best.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "http://cnpm.800best.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "http://cnpm.800best.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": { + "version": "1.3.0", + "resolved": "http://cnpm.800best.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "http://cnpm.800best.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "http://cnpm.800best.com/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "http://cnpm.800best.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "http://cnpm.800best.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.16", + "resolved": "http://cnpm.800best.com/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "http://cnpm.800best.com/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "http://cnpm.800best.com/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-agent/node_modules/semver": { + "version": "7.8.5", + "resolved": "http://cnpm.800best.com/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "http://cnpm.800best.com/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "http://cnpm.800best.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "http://cnpm.800best.com/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "http://cnpm.800best.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-flag": { + "version": "4.0.0", + "resolved": "http://cnpm.800best.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "http://cnpm.800best.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "http://cnpm.800best.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "http://cnpm.800best.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "http://cnpm.800best.com/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "http://cnpm.800best.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "http://cnpm.800best.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "http://cnpm.800best.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "http://cnpm.800best.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "http://cnpm.800best.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "http://cnpm.800best.com/inflight/-/inflight-1.0.6.tgz", + "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.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "http://cnpm.800best.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "http://cnpm.800best.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/isarray": { + "version": "1.0.0", + "resolved": "http://cnpm.800best.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isbinaryfile": { + "version": "5.0.7", + "resolved": "http://cnpm.800best.com/isbinaryfile/-/isbinaryfile-5.0.7.tgz", + "integrity": "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "http://cnpm.800best.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "http://cnpm.800best.com/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "http://cnpm.800best.com/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/joi": { + "version": "18.2.3", + "resolved": "http://cnpm.800best.com/joi/-/joi-18.2.3.tgz", + "integrity": "sha512-N5A3KTWQpPWT4ExxxPlUx7WmykGXRzhNidWhV41d6Abu9YfI2NyWCJuxdPnslJCPWtbRpSVOWSnSS6GakLM/Rg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/address": "^5.1.1", + "@hapi/formula": "^3.0.2", + "@hapi/hoek": "^11.0.7", + "@hapi/pinpoint": "^2.0.1", + "@hapi/tlds": "^1.1.1", + "@hapi/topo": "^6.0.2", + "@standard-schema/spec": "^1.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/js-yaml": { + "version": "4.3.0", + "resolved": "http://cnpm.800best.com/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "http://cnpm.800best.com/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "http://cnpm.800best.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "http://cnpm.800best.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "http://cnpm.800best.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "http://cnpm.800best.com/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "http://cnpm.800best.com/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lazy-val": { + "version": "1.0.5", + "resolved": "http://cnpm.800best.com/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "http://cnpm.800best.com/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "http://cnpm.800best.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "http://cnpm.800best.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "http://cnpm.800best.com/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "http://cnpm.800best.com/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "http://cnpm.800best.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "http://cnpm.800best.com/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "http://cnpm.800best.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "http://cnpm.800best.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "http://cnpm.800best.com/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "http://cnpm.800best.com/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "http://cnpm.800best.com/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "http://cnpm.800best.com/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "http://cnpm.800best.com/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "http://cnpm.800best.com/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "http://cnpm.800best.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.15", + "resolved": "http://cnpm.800best.com/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-abi": { + "version": "4.33.0", + "resolved": "http://cnpm.800best.com/node-abi/-/node-abi-4.33.0.tgz", + "integrity": "sha512-vLBWCKb+7LWsX+TbfzWOkw0W81m377tyx3hOweBTjO43CXZnRGS1/JPWs20fr0PgZyDXk6ROYrylsEycK8raDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.6.3" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "7.8.5", + "resolved": "http://cnpm.800best.com/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-api-version": { + "version": "0.2.1", + "resolved": "http://cnpm.800best.com/node-api-version/-/node-api-version-0.2.1.tgz", + "integrity": "sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + } + }, + "node_modules/node-api-version/node_modules/semver": { + "version": "7.8.5", + "resolved": "http://cnpm.800best.com/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-gyp": { + "version": "12.4.0", + "resolved": "http://cnpm.800best.com/node-gyp/-/node-gyp-12.4.0.tgz", + "integrity": "sha512-OMcPNvqTCFUnNaBlmdgq+lfNqY7gTiSmNRDjY3uAXRyudeKZEZxu3CLtjMQrx4zZxCX2b/mpNqTtwuCJgXhHkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.4", + "tinyglobby": "^0.2.12", + "undici": "^6.25.0", + "which": "^6.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "4.0.0", + "resolved": "http://cnpm.800best.com/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/node-gyp/node_modules/semver": { + "version": "7.8.5", + "resolved": "http://cnpm.800best.com/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "6.0.1", + "resolved": "http://cnpm.800best.com/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "http://cnpm.800best.com/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "9.0.0", + "resolved": "http://cnpm.800best.com/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "http://cnpm.800best.com/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "http://cnpm.800best.com/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "http://cnpm.800best.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "http://cnpm.800best.com/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "http://cnpm.800best.com/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "http://cnpm.800best.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "http://cnpm.800best.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pe-library": { + "version": "0.4.1", + "resolved": "http://cnpm.800best.com/pe-library/-/pe-library-0.4.1.tgz", + "integrity": "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "http://cnpm.800best.com/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "http://cnpm.800best.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "http://cnpm.800best.com/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkijs": { + "version": "3.4.0", + "resolved": "http://cnpm.800best.com/pkijs/-/pkijs-3.4.0.tgz", + "integrity": "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@noble/hashes": "1.4.0", + "asn1js": "^3.0.6", + "bytestreamjs": "^2.0.1", + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/pkijs/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "http://cnpm.800best.com/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "http://cnpm.800best.com/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/postcss": { + "version": "8.5.16", + "resolved": "http://cnpm.800best.com/postcss/-/postcss-8.5.16.tgz", + "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postject": { + "version": "1.0.0-alpha.6", + "resolved": "http://cnpm.800best.com/postject/-/postject-1.0.0-alpha.6.tgz", + "integrity": "sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "commander": "^9.4.0" + }, + "bin": { + "postject": "dist/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/postject/node_modules/commander": { + "version": "9.5.0", + "resolved": "http://cnpm.800best.com/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/proc-log": { + "version": "6.1.0", + "resolved": "http://cnpm.800best.com/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "http://cnpm.800best.com/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "http://cnpm.800best.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "http://cnpm.800best.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "http://cnpm.800best.com/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "http://cnpm.800best.com/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/pvutils": { + "version": "1.1.5", + "resolved": "http://cnpm.800best.com/pvutils/-/pvutils-1.1.5.tgz", + "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "http://cnpm.800best.com/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-binary-file-arch": { + "version": "1.0.6", + "resolved": "http://cnpm.800best.com/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", + "integrity": "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "bin": { + "read-binary-file-arch": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "http://cnpm.800best.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/require-directory": { + "version": "2.1.1", + "resolved": "http://cnpm.800best.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/require-from-string": { + "version": "2.0.2", + "resolved": "http://cnpm.800best.com/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resedit": { + "version": "1.7.2", + "resolved": "http://cnpm.800best.com/resedit/-/resedit-1.7.2.tgz", + "integrity": "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pe-library": "^0.4.1" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "http://cnpm.800best.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "http://cnpm.800best.com/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "2.6.3", + "resolved": "http://cnpm.800best.com/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "http://cnpm.800best.com/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/rollup": { + "version": "4.62.2", + "resolved": "http://cnpm.800best.com/rollup/-/rollup-4.62.2.tgz", + "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.62.2", + "@rollup/rollup-android-arm64": "4.62.2", + "@rollup/rollup-darwin-arm64": "4.62.2", + "@rollup/rollup-darwin-x64": "4.62.2", + "@rollup/rollup-freebsd-arm64": "4.62.2", + "@rollup/rollup-freebsd-x64": "4.62.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", + "@rollup/rollup-linux-arm-musleabihf": "4.62.2", + "@rollup/rollup-linux-arm64-gnu": "4.62.2", + "@rollup/rollup-linux-arm64-musl": "4.62.2", + "@rollup/rollup-linux-loong64-gnu": "4.62.2", + "@rollup/rollup-linux-loong64-musl": "4.62.2", + "@rollup/rollup-linux-ppc64-gnu": "4.62.2", + "@rollup/rollup-linux-ppc64-musl": "4.62.2", + "@rollup/rollup-linux-riscv64-gnu": "4.62.2", + "@rollup/rollup-linux-riscv64-musl": "4.62.2", + "@rollup/rollup-linux-s390x-gnu": "4.62.2", + "@rollup/rollup-linux-x64-gnu": "4.62.2", + "@rollup/rollup-linux-x64-musl": "4.62.2", + "@rollup/rollup-openbsd-x64": "4.62.2", + "@rollup/rollup-openharmony-arm64": "4.62.2", + "@rollup/rollup-win32-arm64-msvc": "4.62.2", + "@rollup/rollup-win32-ia32-msvc": "4.62.2", + "@rollup/rollup-win32-x64-gnu": "4.62.2", + "@rollup/rollup-win32-x64-msvc": "4.62.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "http://cnpm.800best.com/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "http://cnpm.800best.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/sanitize-filename": { + "version": "1.6.4", + "resolved": "http://cnpm.800best.com/sanitize-filename/-/sanitize-filename-1.6.4.tgz", + "integrity": "sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==", + "dev": true, + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "http://cnpm.800best.com/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "http://cnpm.800best.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "http://cnpm.800best.com/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "http://cnpm.800best.com/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "http://cnpm.800best.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "http://cnpm.800best.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.4", + "resolved": "http://cnpm.800best.com/shell-quote/-/shell-quote-1.8.4.tgz", + "integrity": "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "http://cnpm.800best.com/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "http://cnpm.800best.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.8.5", + "resolved": "http://cnpm.800best.com/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "http://cnpm.800best.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "http://cnpm.800best.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "http://cnpm.800best.com/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "http://cnpm.800best.com/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/stat-mode": { + "version": "1.0.0", + "resolved": "http://cnpm.800best.com/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "http://cnpm.800best.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/string-width": { + "version": "4.2.3", + "resolved": "http://cnpm.800best.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": "http://cnpm.800best.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/sumchecker": { + "version": "3.0.1", + "resolved": "http://cnpm.800best.com/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "http://cnpm.800best.com/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tar": { + "version": "7.5.19", + "resolved": "http://cnpm.800best.com/tar/-/tar-7.5.19.tgz", + "integrity": "sha512-4LeEWl96twnS2Q7Bz4MGqgazLqO+hJN63GZxXoIqh1T3VweYD997gbU1ItNsQafqqXTXd5WFyFdReLtwvRBNiw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "http://cnpm.800best.com/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/temp": { + "version": "0.9.4", + "resolved": "http://cnpm.800best.com/temp/-/temp-0.9.4.tgz", + "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^0.5.1", + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/temp-file": { + "version": "3.4.0", + "resolved": "http://cnpm.800best.com/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + } + }, + "node_modules/temp-file/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "http://cnpm.800best.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/temp-file/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "http://cnpm.800best.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/temp-file/node_modules/universalify": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/tiny-async-pool": { + "version": "1.3.0", + "resolved": "http://cnpm.800best.com/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz", + "integrity": "sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^5.5.0" + } + }, + "node_modules/tiny-async-pool/node_modules/semver": { + "version": "5.7.2", + "resolved": "http://cnpm.800best.com/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "http://cnpm.800best.com/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tmp": { + "version": "0.2.7", + "resolved": "http://cnpm.800best.com/tmp/-/tmp-0.2.7.tgz", + "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "http://cnpm.800best.com/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "http://cnpm.800best.com/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "http://cnpm.800best.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dev": true, + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "http://cnpm.800best.com/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "http://cnpm.800best.com/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/undici": { + "version": "6.27.0", + "resolved": "http://cnpm.800best.com/undici/-/undici-6.27.0.tgz", + "integrity": "sha512-YmfV3YnEDzXRC5lZ2jWtWWHKGUm1zIt8AhesR1tens+HTNv+YZlN/dp6G727LOvMJ8xjP9Be7Y2Sdr96LDm+pg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "http://cnpm.800best.com/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "http://cnpm.800best.com/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unzipper": { + "version": "0.12.5", + "resolved": "http://cnpm.800best.com/unzipper/-/unzipper-0.12.5.tgz", + "integrity": "sha512-tXYOi9R57Uj/2Z25SOs5RRSzq886MBQj2gY8dPL+xl/kv6s6SvByoKfAtvfVeEuhntWDgjd2o9p2lb4TVPAz0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "bluebird": "~3.7.2", + "duplexer2": "~0.1.4", + "fs-extra": "11.3.1", + "graceful-fs": "^4.2.2", + "node-int64": "^0.4.0" + } + }, + "node_modules/unzipper/node_modules/fs-extra": { + "version": "11.3.1", + "resolved": "http://cnpm.800best.com/fs-extra/-/fs-extra-11.3.1.tgz", + "integrity": "sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/unzipper/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "http://cnpm.800best.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/unzipper/node_modules/universalify": { + "version": "2.0.1", + "resolved": "http://cnpm.800best.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "http://cnpm.800best.com/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "http://cnpm.800best.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "7.3.6", + "resolved": "http://cnpm.800best.com/vite/-/vite-7.3.6.tgz", + "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.27.0 || ^0.28.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.39", + "resolved": "http://cnpm.800best.com/vue/-/vue-3.5.39.tgz", + "integrity": "sha512-xmZCYabFGcirU8r0fTuvl/LICc1OU620rnqepaJDL/a141ZigkG7AyaxQLdqJ02ZRYzWe6YPaDHeQx7MfknQfA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.5.39", + "@vue/compiler-sfc": "3.5.39", + "@vue/runtime-dom": "3.5.39", + "@vue/server-renderer": "3.5.39", + "@vue/shared": "3.5.39" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/wait-on": { + "version": "8.0.5", + "resolved": "http://cnpm.800best.com/wait-on/-/wait-on-8.0.5.tgz", + "integrity": "sha512-J3WlS0txVHkhLRb2FsmRg3dkMTCV1+M6Xra3Ho7HzZDHpE7DCOnoSoCJsZotrmW3uRMhvIJGSKUKrh/MeF4iag==", + "dev": true, + "license": "MIT", + "dependencies": { + "axios": "^1.12.1", + "joi": "^18.0.1", + "lodash": "^4.17.21", + "minimist": "^1.2.8", + "rxjs": "^7.8.2" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/webcrypto-core": { + "version": "1.9.2", + "resolved": "http://cnpm.800best.com/webcrypto-core/-/webcrypto-core-1.9.2.tgz", + "integrity": "sha512-gsXecm82UQNlTBURJGuqOWy1Ww08S3kZUcr3aOJS02Pk0xLtkfeUAVC0u0xhgdonFme80edSJUIJyuvL/7250Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/json-schema": "^1.1.12", + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "http://cnpm.800best.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "http://cnpm.800best.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": "http://cnpm.800best.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "http://cnpm.800best.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "http://cnpm.800best.com/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "http://cnpm.800best.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "http://cnpm.800best.com/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "http://cnpm.800best.com/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "http://cnpm.800best.com/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "http://cnpm.800best.com/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..357d358 --- /dev/null +++ b/package.json @@ -0,0 +1,49 @@ +{ + "name": "codex-halo", + "version": "1.0.1", + "description": "A lightweight Codex usage orbit for Windows.", + "type": "module", + "main": "electron/main.js", + "author": "Local", + "license": "MIT", + "scripts": { + "dev": "concurrently -k \"vite --host 127.0.0.1\" \"wait-on tcp:5173 && cross-env VITE_DEV_SERVER_URL=http://127.0.0.1:5173 electron .\"", + "dev:web": "vite --host 127.0.0.1", + "test": "node --test", + "icon": "electron scripts/generate-icon.cjs", + "build:web": "vite build", + "capture": "vite build && electron . --screenshot=preview.png", + "build": "npm run test && npm run icon && vite build && electron-builder --win portable", + "pack": "npm run icon && vite build && electron-builder --win dir" + }, + "build": { + "appId": "dev.codexhalo.desktop", + "productName": "Codex Halo", + "directories": { + "output": "release" + }, + "files": [ + "dist/**/*", + "electron/**/*", + "package.json" + ], + "asar": true, + "win": { + "target": "portable", + "icon": "build/icon.ico", + "artifactName": "CodexHalo-${version}.exe" + } + }, + "dependencies": { + "vue": "^3.5.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.0", + "concurrently": "^9.0.0", + "cross-env": "^7.0.3", + "electron": "^37.0.0", + "electron-builder": "^26.0.0", + "vite": "^7.0.0", + "wait-on": "^8.0.0" + } +} diff --git a/preview.png b/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..9abb0bc1ee417edb308a4af7eeb35c602ffe0185 GIT binary patch literal 1875 zcmV-Z2dwysP)Px+4M{{nRCt{2oPBH)=N-pCk1vi{iC;o6rez3d+K6q85mK~esH3oKqoQa)(Y7M~ zs7R}3SgIBzNTsyh)Q+{R(vY^91_=;j&=*>b(MlQGD1;SA>6F1T*3z^Y%QPxXUhQa* z*m0iy5j$}+z<2iD*-q~Bm!IdJm#^;Y=kB@Zx%+{Ig@uKMg+(?HdNma84X%}fDj}#q zQVL81Y5|CZF1P*X zLX?DWRVZzP!@XBGA;b>L*sRlqly$D+nfq>bFfD^aeZhc$%^6Fx&jropxj8-X{caG_1nMPPzOWikBg2Pm5}oL2qt$$FOm@EA8=&zsLv zjfbed8|Xa2mUUZsyEFNC{u+$nTnp)ATHq2dJ|3VQ;QFV0(0Pk?@)1d?npyO;R0Y~PY&_F2Mf0Ut3$YkH z(=dg$4s9D$gD2kL?ZJ3rfuCb7O`JXTM=mzM#A;_e|H@I`x;R$HyLbhaUj4LZk!fnq zR?0GgH;pwnK`b`Xmli(w+xw%xSJ!N!G%<9GSKxnaZamS=`479{j{A6_v6-{4)UwQ@ zqwwru%Xq)`Osn0H%kr(b(57g*RENWnvBWr;j-)B(weTQ#=Tm-np&l}GhKvn9*@H2mMlXAXtJ{iDBUxExGGGB)_)C*~WhrOz*xFB$!PYX3pn6ZhlZ6YSmJ9Z!@{ z{)G~qRptgMpMz6zt=Igwam**39oT{ldsJ;NNkqL z*c~$_R~hx``z}A;n&jS4Kb^_u0*-YnsLc4Uo|{aHm*PsR4{`R_Nh?+bg-OrBbE$oF z$t~;VJEr_^pZ&$>Saa7{`f}3^9&RXL_g*_orp7a)l1oidw(gB_#Q+W7s#*?I)s7@S z4zPUnKK=tx^*9^nXlSV0!Jpe*zSl3rFLRON%zMd9k+YMGiqv zNKmBMIPjL>`)h7cWQb6GFy#{c+?E?Whr%x#6zCi#aGSD@JB-!Ryg$C~418zf8nmrQ zMp^Zw;Ld--+%7xSrBPm=ZHP?WFmD8ZSz(?Bu3Q1_cm6|Q>gn{5x@N?cclyRt3d~WM%et&0Qb&@zkX!MGhfNr;2Fi~y$F|Yeda3}8@%8i z^S6_-(PzGrvBAqL%s<)L=rdo**x;oLqbw>j?}RTZ)8|F_$$}b#Q{M3W>jzAk_$bOq zUlytvR%38assd$mhIzimSd$e6p07#&>xM~6&xHPT5xo4`GFh+jSVkI}TED13glmRCzs zBVkv{eJ&w6j?iZC(uGlLB9sFN$?=r;;CMu}E^{R5%i0HS;B`k-lr$HwC&IVy8#|?m zOSH~(xr%*9RDJpz>bv?=fvDG8frW8MS_ELZW&eG+yVD$F8dB ( + insideRoundedRect(x + 0.5, y + 0.5, left, top, right, bottom, radius) + )) + if (bar) { + const opacity = bar[5] / 255 + bitmap[offset] = Math.round(246 + (255 - 246) * opacity) + bitmap[offset + 1] = Math.round(87 + (255 - 87) * opacity) + bitmap[offset + 2] = Math.round(49 + (255 - 49) * opacity) + bitmap[offset + 3] = 255 + } + } + } + + return nativeImage.createFromBitmap(bitmap, { width: size, height: size, scaleFactor: 1 }) +} + +function generateIcon() { + const source = createSourceImage() + const images = sizes.map((size) => source.resize({ width: size, height: size, quality: 'best' }).toPNG()) + const headerSize = 6 + images.length * 16 + const header = Buffer.alloc(headerSize) + header.writeUInt16LE(0, 0) + header.writeUInt16LE(1, 2) + header.writeUInt16LE(images.length, 4) + + let imageOffset = headerSize + images.forEach((image, index) => { + const entryOffset = 6 + index * 16 + const size = sizes[index] + header.writeUInt8(size === 256 ? 0 : size, entryOffset) + header.writeUInt8(size === 256 ? 0 : size, entryOffset + 1) + header.writeUInt8(0, entryOffset + 2) + header.writeUInt8(0, entryOffset + 3) + header.writeUInt16LE(1, entryOffset + 4) + header.writeUInt16LE(32, entryOffset + 6) + header.writeUInt32LE(image.length, entryOffset + 8) + header.writeUInt32LE(imageOffset, entryOffset + 12) + imageOffset += image.length + }) + + writeFileSync(path.join(projectRoot, 'build', 'icon-preview.png'), images.at(-1)) + writeFileSync(path.join(projectRoot, 'build', 'icon.ico'), Buffer.concat([header, ...images])) +} + +app.whenReady() + .then(generateIcon) + .then(() => app.quit()) + .catch((error) => { + console.error(error) + app.exit(1) + }) diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..db113ee --- /dev/null +++ b/src/App.vue @@ -0,0 +1,10 @@ + + + diff --git a/src/assets/main.css b/src/assets/main.css new file mode 100644 index 0000000..eceae79 --- /dev/null +++ b/src/assets/main.css @@ -0,0 +1,26 @@ +:root { + font-family: 'Microsoft YaHei UI', 'Segoe UI', sans-serif; + color-scheme: dark; + font-synthesis: none; + text-rendering: geometricPrecision; +} + +* { + box-sizing: border-box; +} + +html, +body, +#app { + width: 100%; + height: 100%; + margin: 0; + overflow: hidden; + background: transparent; + user-select: none; +} + +button, +input { + font: inherit; +} diff --git a/src/components/OrbitGauge.vue b/src/components/OrbitGauge.vue new file mode 100644 index 0000000..c495b57 --- /dev/null +++ b/src/components/OrbitGauge.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/src/components/QuotaTile.vue b/src/components/QuotaTile.vue new file mode 100644 index 0000000..8534937 --- /dev/null +++ b/src/components/QuotaTile.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/src/components/UsagePanel.vue b/src/components/UsagePanel.vue new file mode 100644 index 0000000..983fc79 --- /dev/null +++ b/src/components/UsagePanel.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/src/composables/useUsage.js b/src/composables/useUsage.js new file mode 100644 index 0000000..a57b6d1 --- /dev/null +++ b/src/composables/useUsage.js @@ -0,0 +1,56 @@ +import { onMounted, onUnmounted, readonly, shallowRef } from 'vue' + +function demoSnapshot() { + const now = Date.now() + return { + shortWindow: null, + weekWindow: { + remainingPercent: 21, + usedPercent: 79, + resetsAt: now + 3 * 24 * 60 * 60 * 1000 + 8 * 60 * 60 * 1000, + }, + status: '浏览器预览数据', + updatedAt: now, + } +} + +export function useUsage() { + const snapshot = shallowRef(null) + const isRefreshing = shallowRef(false) + let unsubscribe + + async function refresh() { + if (!window.codexHalo) { + snapshot.value = demoSnapshot() + return + } + + isRefreshing.value = true + try { + snapshot.value = await window.codexHalo.refreshUsage() + } finally { + isRefreshing.value = false + } + } + + onMounted(async () => { + if (!window.codexHalo) { + snapshot.value = demoSnapshot() + return + } + + unsubscribe = window.codexHalo.onUsage((nextSnapshot) => { + snapshot.value = nextSnapshot + isRefreshing.value = false + }) + snapshot.value = await window.codexHalo.getUsage() + }) + + onUnmounted(() => unsubscribe?.()) + + return { + snapshot: readonly(snapshot), + isRefreshing: readonly(isRefreshing), + refresh, + } +} diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..7ebb8d9 --- /dev/null +++ b/src/main.js @@ -0,0 +1,5 @@ +import { createApp } from 'vue' +import App from './App.vue' +import './assets/main.css' + +createApp(App).mount('#app') diff --git a/task_plan.md b/task_plan.md new file mode 100644 index 0000000..86c29a7 --- /dev/null +++ b/task_plan.md @@ -0,0 +1,67 @@ +# Codex Orbit Vue 开发计划 + +## 目标 +使用 Vue 3、JavaScript 与 Electron 开发一个原创视觉的 Windows Codex 额度悬浮工具,不复用 C# 版本的图片资源。 + +## 当前阶段 +阶段 6:视觉重构完成 + +## 阶段 + +### 阶段 1:需求与发现 +- [x] 确认技术栈与用户约束 +- [x] 检查原 C# 项目的日志读取方式 +- [x] 记录组件边界与技术方案 +- **状态:** complete + +### 阶段 2:项目与界面实现 +- [x] 创建 Vue 3 + Vite + Electron 工程 +- [x] 实现原创悬浮仪表界面 +- [x] 实现演示模式与响应式状态 +- **状态:** complete + +### 阶段 3:桌面能力实现 +- [x] 解析 Codex 本地 JSONL 日志 +- [x] 监听日志并通过 IPC 更新 Vue +- [x] 实现托盘、置顶、拖动、保存位置 +- **状态:** in_progress + +### 阶段 4:构建与验证 +- [ ] 安装依赖并运行静态检查 +- [ ] 构建前端与 Windows EXE +- [ ] 启动应用并进行视觉验证 +- **状态:** pending + +### 阶段 5:交付 +- [ ] 检查输出文件和使用说明 +- [ ] 更新进度与最终结果 +- **状态:** pending + +### 阶段 6:视觉重构 +- [x] 确定新的编辑式工业仪表方向 +- [x] 将圆环组件替换为分段额度组件 +- [x] 重构面板排版、颜色、字体和动效 +- [x] 根据用户参考进一步精简为纯额度表盘 +- [x] 修复过期5小时额度仍然显示的问题 +- [x] 构建并进行真实窗口视觉验证 +- **状态:** complete + +## 已做决策 + +| 决策 | 理由 | +|------|------| +| Vue 3 Composition API + JavaScript | 用户已确认希望使用 JavaScript | +| Electron + electron-builder | 提供透明窗口、托盘、本地文件和 EXE 打包能力 | +| SVG + CSS 原创建图 | 不复用原项目图片,保持界面轻量清晰 | +| 无服务器、无数据库 | 数据来自本机 Codex 会话日志 | + +## 遇到的错误 + +| 错误 | 尝试次数 | 解决方案 | +|------|---------|---------| +| 首次 `npm install` 在 120 秒工具时限内未完成 | 1 | 保留已下载内容并使用更长时限继续安装 | +| 系统与内置 Python 均缺少 Playwright 模块 | 2 | 改用工作区已提供的 Node Playwright 包 | +| 内置 Playwright 缺少默认浏览器二进制 | 1 | 指定系统已安装的 Chrome 作为测试浏览器 | +| 系统 Chrome 无头视觉会话未正常退出 | 1 | 改用 Electron 自身的 `capturePage` 验证真实窗口 | +| electron-builder 重命名临时发布目录时遇到 Windows `EPERM` | 1 | 检查残留进程和发布目录锁后清理临时产物重试 | +| 从临时目录生成的首个 portable 仅含 Electron 空运行时 | 1 | 不交付该文件;补齐应用 `app.asar` 和产品 EXE 后重新封装验证 | diff --git a/tests/usage-reader.test.js b/tests/usage-reader.test.js new file mode 100644 index 0000000..80fd7da --- /dev/null +++ b/tests/usage-reader.test.js @@ -0,0 +1,56 @@ +import test from 'node:test' +import assert from 'node:assert/strict' +import { mkdtempSync, rmSync, writeFileSync } from 'node:fs' +import os from 'node:os' +import path from 'node:path' +import { parseUsageLine, readLatestUsage } from '../electron/usage-reader.js' + +test('parses primary and secondary Codex rate limit windows', () => { + const line = JSON.stringify({ + timestamp: '2026-07-16T08:00:00.000Z', + type: 'event_msg', + payload: { + type: 'token_count', + rate_limits: { + primary: { window_minutes: 300, used_percent: 32, resets_at: 1784203200 }, + secondary: { window_minutes: 10080, used_percent: 59, resets_at: 1784808000 }, + }, + }, + }) + + const snapshots = parseUsageLine(line, 'rollout-test.jsonl') + assert.equal(snapshots.length, 2) + assert.equal(snapshots[0].remainingPercent, 68) + assert.equal(snapshots[1].remainingPercent, 41) + assert.equal(snapshots[0].sourceFile, 'rollout-test.jsonl') +}) + +test('ignores malformed or unrelated lines', () => { + assert.deepEqual(parseUsageLine('{broken'), []) + assert.deepEqual(parseUsageLine(JSON.stringify({ type: 'event_msg', payload: { type: 'message' } })), []) +}) + +test('does not expose an expired five-hour window', () => { + const sessionsPath = mkdtempSync(path.join(os.tmpdir(), 'codex-halo-test-')) + const now = Date.now() + const line = JSON.stringify({ + timestamp: new Date(now).toISOString(), + type: 'event_msg', + payload: { + type: 'token_count', + rate_limits: { + primary: { window_minutes: 300, used_percent: 31, resets_at: Math.floor(now / 1000) - 30 }, + secondary: { window_minutes: 10080, used_percent: 79, resets_at: Math.floor(now / 1000) + 3600 }, + }, + }, + }) + + try { + writeFileSync(path.join(sessionsPath, 'rollout-test.jsonl'), line) + const snapshot = readLatestUsage(sessionsPath) + assert.equal(snapshot.shortWindow, null) + assert.equal(snapshot.weekWindow.remainingPercent, 21) + } finally { + rmSync(sessionsPath, { recursive: true, force: true }) + } +}) diff --git a/unpacked-preview.png b/unpacked-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..e80ea98f984865c976a61035f1ee2420be3b887e GIT binary patch literal 68374 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
j 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