From 38857aa622e32c8c732ed4274ccc0abccc834431 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E7=BA=B8=E5=BF=98=E5=BF=A7?= <54543761+ikxin@users.noreply.github.com> Date: Sun, 31 May 2026 16:55:49 +0800 Subject: [PATCH 01/19] =?UTF-8?q?feat:=20=E7=9B=91=E6=8E=A7=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E8=B0=83=E5=BA=A6=E5=B9=B6=E6=B7=BB=E5=8A=A0=20Cloudf?= =?UTF-8?q?lare=20=E9=83=A8=E7=BD=B2=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ nuxt.config.ts | 32 ++++++++++++++++------------ package.json | 2 +- server/tasks/monitor.ts | 46 ++++++++++++++--------------------------- 4 files changed, 37 insertions(+), 45 deletions(-) diff --git a/.gitignore b/.gitignore index 4a7f73a2..a0837e43 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,5 @@ logs .env .env.* !.env.example + +.wrangler diff --git a/nuxt.config.ts b/nuxt.config.ts index 575b76b3..d38c3828 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -1,17 +1,6 @@ // https://nuxt.com/docs/api/configuration/nuxt-config -const getMonitorCron = () => { - const raw = parseInt( - process.env.NUXT_MONITOR_INTERVAL || process.env.MONITOR_INTERVAL || '30', - 60 - ) - const seconds = isNaN(raw) || raw <= 0 ? 10 : raw - if (seconds < 60) { - return `*/${seconds} * * * * *` - } - const minutes = Math.floor(seconds / 60) - return `0 */${minutes} * * * *` -} +const nitroPreset = process.env.NITRO_PRESET export default defineNuxtConfig({ compatibilityDate: '2024-11-01', @@ -24,7 +13,24 @@ export default defineNuxtConfig({ tasks: true }, scheduledTasks: { - [getMonitorCron()]: ['monitor'] + '*/10 * * * *': ['monitor'] + }, + storage: + nitroPreset === 'cloudflare_module' + ? { + data: { + driver: 'cloudflare-kv-binding', + binding: 'MONITOR_KV' + } + } + : undefined, + cloudflare: { + deployConfig: true, + wrangler: { + triggers: { + crons: ['*/10 * * * *'] + } + } } }, app: { diff --git a/package.json b/package.json index f3514bf8..44e69cdb 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "packageManager": "pnpm@10.32.1", "scripts": { "build": "nuxt build", - "dev": "nuxt dev --host 0.0.0.0", + "dev": "nuxt dev", "generate": "nuxt generate", "preview": "nuxt preview", "format": "oxfmt", diff --git a/server/tasks/monitor.ts b/server/tasks/monitor.ts index 219e53aa..f341ba13 100644 --- a/server/tasks/monitor.ts +++ b/server/tasks/monitor.ts @@ -4,43 +4,27 @@ export default defineTask({ description: 'Run KMS server monitoring.' }, async run() { - const results = await Promise.all( - getMonitorList().map(async host => { - let monitorData = await storage.getItem(`${host}.json`) + for (const host of getMonitorList()) { + let monitorData = await storage.getItem(`${host}.json`) - if (!Array.isArray(monitorData)) { - monitorData = [] - } - - if (monitorData.length >= 120) { - monitorData.shift() - } - - const { status, delay } = await runVlmcs({ host }) + if (!Array.isArray(monitorData)) { + monitorData = [] + } - monitorData.push({ - status, - time: Date.now(), - delay - }) + if (monitorData.length >= 120) { + monitorData.shift() + } - await storage.setItem(`${host}.json`, monitorData) + const { status, delay } = await runVlmcs({ host }) - return { host, status } + monitorData.push({ + status, + time: Date.now(), + delay }) - ) - - const count = results.filter(item => { - if (!item.status) { - // console.log('Monitor failed:', item.host) - } - return item.status - }).length - console.log( - new Date().toISOString(), - `Monitor task completed, successful: ${count}` - ) + await storage.setItem(`${host}.json`, monitorData) + } return { result: 'Done' } } From 77f3b540ef604744361e7379b40e1625774dab2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E7=BA=B8=E5=BF=98=E5=BF=A7?= <54543761+ikxin@users.noreply.github.com> Date: Sun, 31 May 2026 22:34:40 +0800 Subject: [PATCH 02/19] =?UTF-8?q?chore:=20=E4=BF=AE=E6=94=B9=20Cloudflare?= =?UTF-8?q?=20KV=20=E7=BB=91=E5=AE=9A=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nuxt.config.ts | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/nuxt.config.ts b/nuxt.config.ts index d38c3828..eaa39d67 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -1,9 +1,7 @@ // https://nuxt.com/docs/api/configuration/nuxt-config -const nitroPreset = process.env.NITRO_PRESET - export default defineNuxtConfig({ - compatibilityDate: '2024-11-01', + compatibilityDate: '2026-05-31', devtools: { enabled: true }, future: { compatibilityVersion: 4 @@ -15,18 +13,27 @@ export default defineNuxtConfig({ scheduledTasks: { '*/10 * * * *': ['monitor'] }, - storage: - nitroPreset === 'cloudflare_module' - ? { - data: { - driver: 'cloudflare-kv-binding', - binding: 'MONITOR_KV' - } - } - : undefined, + storage: { + data: { + driver: 'cloudflare-kv-binding', + binding: 'KV' + } + }, cloudflare: { deployConfig: true, wrangler: { + kv_namespaces: [ + { + binding: 'KV', + id: 'bddb55671f0d4ebcaddf268c1134d27e' + } + ], + observability: { + logs: { + enabled: true, + invocation_logs: true + } + }, triggers: { crons: ['*/10 * * * *'] } From 09b0593d27253427cc289949e1171cf82d7c43b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E7=BA=B8=E5=BF=98=E5=BF=A7?= <54543761+ikxin@users.noreply.github.com> Date: Sun, 31 May 2026 23:22:05 +0800 Subject: [PATCH 03/19] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=BF=80?= =?UTF-8?q?=E6=B4=BB=E9=A1=B5=E9=9D=A2=20URL.createObjectURL()=20=E6=9C=AA?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/CommonActivate.vue | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/components/CommonActivate.vue b/app/components/CommonActivate.vue index 40b5e772..0c8193ff 100644 --- a/app/components/CommonActivate.vue +++ b/app/components/CommonActivate.vue @@ -55,12 +55,10 @@ const content = computed(() => { return generateScript(formData.value) }) -const file = computed(() => { - return new File([content.value], 'kms.bat', { type: 'application/txt' }) +const fileUrl = computed(() => { + return `data:text/plain;charset=utf-8,${encodeURIComponent(content.value)}` }) -const fileUrl = useObjectUrl(file) - const { copy, copied } = useClipboard({ legacy: true, source: content @@ -140,7 +138,7 @@ const { copy, copied } = useClipboard({ - + {{ t('label.download') }} From 0f8f9d2c417dbe1ff7711a2a62ed0296a43d0deb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E7=BA=B8=E5=BF=98=E5=BF=A7?= Date: Mon, 1 Jun 2026 12:53:23 +0800 Subject: [PATCH 04/19] =?UTF-8?q?fix:=20=E6=9B=BF=E6=8D=A2=20BigInt=20?= =?UTF-8?q?=E5=AD=97=E9=9D=A2=E9=87=8F=E4=BB=A5=E5=85=BC=E5=AE=B9=20ES2019?= =?UTF-8?q?=20=E6=89=93=E5=8C=85=E7=9B=AE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- node-vlmcs/src/kms.ts | 996 +++++++++++++++---------------- node-vlmcs/src/rpc.ts | 1252 +++++++++++++++++++-------------------- node-vlmcs/src/types.ts | 302 +++++----- package.json | 3 +- pnpm-lock.yaml | 780 ++++++++++++++++++++++++ 5 files changed, 2057 insertions(+), 1276 deletions(-) diff --git a/node-vlmcs/src/kms.ts b/node-vlmcs/src/kms.ts index 8a5413aa..c6e13607 100644 --- a/node-vlmcs/src/kms.ts +++ b/node-vlmcs/src/kms.ts @@ -1,498 +1,498 @@ -/** - * KMS 协议实现 — 处理 V4/V5/V6 请求创建和响应解密 - * - * 参考原版源码: - * - src/kms.c (CreateRequestV4, CreateRequestV6, DecryptResponseV4, DecryptResponseV6) - * - src/kms.h (REQUEST, RESPONSE, RESPONSE_RESULT 等结构定义) - */ - -import { - AesCtx, - AES_BLOCK_BYTES, - AES_KEY_BYTES, - AesKeyV5, - AesKeyV6, - xorBlock, - aesCmacV4, - aesEncryptCbc, - aesDecryptCbc, - sha256, - sha256Hmac, - get16RandomBytes -} from './crypto' - -import { PID_BUFFER_SIZE, ResponseResult } from './types' - -// 重新导出时间工具函数 -export { - unixTimeToFileTime as getUnixTimeAsFileTime, - fileTimeToUnixTime -} from './types' - -// ─── 协议大小常量 (参考 src/kms.h 中的结构体大小) ────────────────────────── - -// REQUEST 结构: Version(4) + VMInfo(4) + LicenseStatus(4) + BindingExpiration(4) + -// AppID(16) + ActID(16) + KMSID(16) + CMID(16) + N_Policy(4) + -// ClientTime(8) + CMID_prev(16) + WorkstationName(128) = 236 字节 -const REQUEST_SIZE = 236 -/** V4 请求大小: REQUEST(236) + AES-CMAC(16) = 252 字节 */ -const REQUEST_V4_SIZE = 252 -/** V5/V6 请求大小: Version(4) + IV(16) + REQUEST(236) + Pad(4) = 260 字节 */ -const REQUEST_V6_SIZE = 260 - -/** V4 响应中 ePID 前面的字段大小: Version(4) + PIDSize(4) = 8 字节 */ -const V4_PRE_EPID_SIZE = 8 -/** V4 响应中 ePID 后面的字段大小: CMID(16) + ClientTime(8) + Count(4) + VLActivation(4) + VLRenewal(4) = 36 字节 */ -const V4_POST_EPID_SIZE = 36 -/** V6 未加密部分大小: Version(4) + IV(16) = 20 字节 */ -const V6_UNENCRYPTED_SIZE = 20 -/** V6 响应中 ePID 前面的字段大小: V6未加密(20) + ResponseBase.Version(4) + PIDSize(4) = 28 字节 */ -const V6_PRE_EPID_SIZE = 28 -/** V5 响应中 ePID 后面的额外字段: V4后(36) + RandomXoredIVs(16) + Hash(32) = 84 字节 */ -const V5_POST_EPID_SIZE = 84 -/** V6 响应中 ePID 后面的额外字段: V5后(84) + HwId(8) + XoredIVs(16) + HMAC(16) = 124 字节 */ -const V6_POST_EPID_SIZE = 124 -/** V6 解密大小: IV(16) + REQUEST(236) + Pad(4) = 256 字节 */ -const V6_DECRYPT_SIZE = 256 - -const HMAC_SIZE = 16 -const HASH_SIZE = 32 -const HALF_HASH_SIZE = HASH_SIZE >> 1 -/** PID 最大字节数: PID_BUFFER_SIZE * 2 = 128 字节 (UCS-2 编码) */ -const KMS_PID_MAX_BYTES = PID_BUFFER_SIZE * 2 - -// 最大结构体大小(使用完整 PID_BUFFER_SIZE 时) -/** V4 响应最大大小: RESPONSE(172) + MAC(16) = 188 字节 */ -const SIZEOF_RESPONSE_V4 = 188 -/** V5 响应最大大小: Version(4) + IV(16) + RESPONSE(172) + RandomXoredIVs(16) + Hash(32) = 240 字节 */ -const SIZEOF_RESPONSE_V5 = 240 -/** V6 响应最大大小: V5(240) + HwId(8) + XoredIVs(16) + HMAC(16) = 280 字节 */ -const SIZEOF_RESPONSE_V6 = 280 - -// V6 时间槽常量(每个时间槽约 4.11 小时) -// 用于 HMAC 计算,参考 src/kms.c 中的 CreateV6Hmac() -const TIME_C1 = 0x00000022816889bdn -const TIME_C2 = 0x000000208cbab5edn -const TIME_C3 = 0x3156cd5ac628477an -const UINT64_MASK = 0xffffffffffffffffn - -// ─── 导出类型 ─────────────────────────────────────────────────────────────── - -/** 解析后的 KMS 响应,对应 src/kms.h 中的 RESPONSE 结构 */ -export interface ParsedResponse { - majorVer: number // 主版本号 - minorVer: number // 次版本号 - pidSize: number // PID 大小(字节) - kmsPID: Buffer // KMS ePID (UCS-2 编码) - cmid: Buffer // 客户端机器 ID (16 字节 GUID) - clientTime: Buffer // 客户端请求时间 (8 字节 FILETIME) - count: number // 当前活跃客户端数 - vlActivationInterval: number // 激活间隔(分钟) - vlRenewalInterval: number // 续期间隔(分钟) -} - -// ─── 内部工具函数 ─────────────────────────────────────────────────────────── - -/** - * 从 ResponseResult 各字段计算位掩码 - * 参考: src/kms.c 中结果掩码的构建方式 - */ -function computeMask(r: ResponseResult): number { - let mask = 0 - if (r.hashOK) mask |= 1 << 0 - if (r.timeStampOK) mask |= 1 << 1 - if (r.clientMachineIDOK) mask |= 1 << 2 - if (r.versionOK) mask |= 1 << 3 - if (r.ivsOK) mask |= 1 << 4 - if (r.decryptSuccess) mask |= 1 << 5 - if (r.hmacSha256OK) mask |= 1 << 6 - if (r.pidLengthOK) mask |= 1 << 7 - if (r.rpcOK) mask |= 1 << 8 - if (r.ivNotSuspicious) mask |= 1 << 9 - mask |= (r.effectiveResponseSize & 0x1ff) << 14 - mask |= (r.correctResponseSize & 0x1ff) << 23 - return mask >>> 0 -} - -/** 创建空的 ParsedResponse(用于解密失败时的早期返回) */ -function emptyParsedResponse(): ParsedResponse { - return { - majorVer: 0, - minorVer: 0, - pidSize: 0, - kmsPID: Buffer.alloc(0), - cmid: Buffer.alloc(16), - clientTime: Buffer.alloc(8), - count: 0, - vlActivationInterval: 0, - vlRenewalInterval: 0 - } -} - -/** - * 验证 PID 长度 - * 检查: pidSize <= 128,最后一个 WCHAR 为 0,倒数第二个之前的字符都非零 - * - * 参考: src/kms.c 中的 checkPidLength() - */ -function checkPidLength(data: Buffer, pidSizeOffset: number): boolean { - const pidSize = data.readUInt32LE(pidSizeOffset) - if (pidSize > KMS_PID_MAX_BYTES) return false - - const pidOffset = pidSizeOffset + 4 - const numChars = pidSize >>> 1 - if (numChars < 1) return false - - // 最后一个 WCHAR 必须是空终止符 - if (data.readUInt16LE(pidOffset + (numChars - 1) * 2) !== 0) return false - - // 倒数第二个之前的所有 WCHAR 必须非零 - for (let i = 0; i < numChars - 2; i++) { - if (data.readUInt16LE(pidOffset + i * 2) === 0) return false - } - - return true -} - -/** - * 从解密后的数据中解析可变大小的响应基本字段 - * 参考: src/kms.c 中的响应解析逻辑 - */ -function parseResponseBase( - data: Buffer, - verOff: number, - pidSize: number, - postEpid: Buffer -): ParsedResponse { - const clampedPidSize = Math.min(pidSize, KMS_PID_MAX_BYTES) - - return { - minorVer: data.readUInt16LE(verOff), - majorVer: data.readUInt16LE(verOff + 2), - pidSize, - kmsPID: Buffer.from(data.subarray(verOff + 8, verOff + 8 + clampedPidSize)), - cmid: Buffer.from(postEpid.subarray(0, 16)), - clientTime: Buffer.from(postEpid.subarray(16, 24)), - count: postEpid.readUInt32LE(24), - vlActivationInterval: postEpid.readUInt32LE(28), - vlRenewalInterval: postEpid.readUInt32LE(32) - } -} - -/** - * 计算并写入 V6 HMAC - * 从响应中读取 ClientTime 来派生基于时间槽的密钥, - * 然后将 16 字节 HMAC 写入加密区域的末尾 - * - * 参考: src/kms.c 中的 CreateV6Hmac() - */ -function createV6Hmac( - encryptStart: Buffer, - encryptSize: number, - tolerance: number -): void { - // ClientTime 位于: 加密区域末尾 - V6_POST_EPID_SIZE + sizeof(CMID) - const ftOffset = encryptSize - V6_POST_EPID_SIZE + 16 - const clientTime = encryptStart.readBigUInt64LE(ftOffset) - - // 时间槽 ≈ 4.11 小时粒度 - const timeSlot = - ((clientTime / TIME_C1) * TIME_C2 + TIME_C3 + BigInt(tolerance) * TIME_C1) & - UINT64_MASK - - const timeSlotBuf = Buffer.alloc(8) - timeSlotBuf.writeBigUInt64LE(timeSlot) - const hash = sha256(timeSlotBuf) - - // HMAC 密钥 = SHA256(timeSlot) 的后 16 字节 - const hmacKey = hash.subarray(HALF_HASH_SIZE) - const hmacData = encryptStart.subarray(0, encryptSize - HMAC_SIZE) - const hmacResult = sha256Hmac(hmacKey, hmacData) - - // 将 HMAC 结果的后 16 字节写入 HMAC 字段 - hmacResult.copy( - encryptStart, - encryptSize - HMAC_SIZE, - HALF_HASH_SIZE, - HASH_SIZE - ) -} - -// ─── 创建 V4 请求 (参考 src/kms.c 中的 CreateRequestV4) ──────────────────── - -/** - * 构建 252 字节的 V4 KMS 请求: REQUEST(236) + AES-CMAC(16) - */ -export function createRequestV4(requestBase: Buffer): Buffer { - const request = Buffer.alloc(REQUEST_V4_SIZE) - requestBase.copy(request, 0, 0, REQUEST_SIZE) - - // 计算 AES-CMAC 并附加到请求末尾 - const mac = aesCmacV4(request, REQUEST_SIZE) - mac.copy(request, REQUEST_SIZE) - - return request -} - -// ─── 创建 V5/V6 请求 (参考 src/kms.c 中的 CreateRequestV6) ───────────────── - -/** - * 构建 260 字节的 V5/V6 KMS 请求: Version(4) + IV(16) + 加密的请求(240) - */ -export function createRequestV6(requestBase: Buffer): Buffer { - const request = Buffer.alloc(REQUEST_V6_SIZE) - - // 外层版本号 = requestBase 版本号 - requestBase.copy(request, 0, 0, 4) - - // 随机 16 字节 IV - const iv = get16RandomBytes() - iv.copy(request, 4) - - // 将基础请求复制到加密区域 - requestBase.copy(request, 20, 0, REQUEST_SIZE) - - // 根据主版本号选择密钥(V6 使用 AesKeyV6,V5 使用 AesKeyV5) - const majorVer = request.readUInt16LE(2) - const isV6 = majorVer > 5 - - const ctx = new AesCtx() - ctx.initKey(isV6 ? AesKeyV6 : AesKeyV5, isV6, AES_KEY_BYTES) - - // 加密请求(236 字节 → 240 字节,含 PKCS#7 填充) - const plaintext = Buffer.from(request.subarray(20, 20 + REQUEST_SIZE)) - const { encrypted } = aesEncryptCbc(ctx, iv, plaintext) - encrypted.copy(request, 20) - - return request -} - -// ─── 解密 V4 响应 (参考 src/kms.c 中的 DecryptResponseV4) ────────────────── - -/** - * 解密并验证 V4 KMS 响应 - * 线路格式: Version(4) + PIDSize(4) + PID(变长) + CMID(16) + - * ClientTime(8) + Count(4) + Intervals(8) + MAC(16) - */ -export function decryptResponseV4( - rawResponse: Buffer, - rawRequest: Buffer -): { result: ResponseResult; response: ParsedResponse } { - const responseSize = rawResponse.length - - // 确定变长 PID 大小 - const pidSize = rawResponse.readUInt32LE(4) - const clampedPidSize = Math.min(pidSize, KMS_PID_MAX_BYTES) - const copySize = V4_PRE_EPID_SIZE + clampedPidSize - const messageSize = copySize + V4_POST_EPID_SIZE - - // 提取 ePID 后面的区域(CMID、ClientTime、Count、Intervals) - const postEpid = Buffer.from( - rawResponse.subarray(copySize, copySize + V4_POST_EPID_SIZE) - ) - const parsed = parseResponseBase(rawResponse, 0, pidSize, postEpid) - - // 计算 CMAC 并与接收到的 MAC 比较 - const computedMac = aesCmacV4(rawResponse, messageSize) - const receivedMac = rawResponse.subarray(messageSize, messageSize + 16) - - // 与请求字段进行验证 - const reqVersion = rawRequest.readUInt32LE(0) - const reqClientTime = rawRequest.subarray(84, 92) // REQUEST.ClientTime - const reqCMID = rawRequest.subarray(64, 80) // REQUEST.CMID - - const result: ResponseResult = { - mask: 0, - hashOK: computedMac.equals(receivedMac), - timeStampOK: parsed.clientTime.equals(reqClientTime), - clientMachineIDOK: parsed.cmid.equals(reqCMID), - versionOK: rawResponse.readUInt32LE(0) === reqVersion, - ivsOK: true, - decryptSuccess: true, - hmacSha256OK: true, - pidLengthOK: checkPidLength(rawResponse, 4), - rpcOK: true, - ivNotSuspicious: true, - effectiveResponseSize: responseSize, - correctResponseSize: SIZEOF_RESPONSE_V4 - KMS_PID_MAX_BYTES + pidSize - } - result.mask = computeMask(result) - - return { result, response: parsed } -} - -// ─── 解密 V5/V6 响应 (参考 src/kms.c 中的 DecryptResponseV6) ─────────────── - -/** - * 解密并验证 V5/V6 KMS 响应 - * - * 线路格式(Version 之后的部分为加密): - * Version(4) + [IV(16) + ResponseBase(变长) + RandomXoredIVs(16) + Hash(32) - * + HwId(8, 仅V6) + XoredIVs(16, 仅V6) + HMAC(16, 仅V6) - * + PKCS填充] - */ -export function decryptResponseV6( - rawResponse: Buffer, - rawRequest: Buffer -): { result: ResponseResult; response: ParsedResponse; hwid: Buffer } { - const totalSize = rawResponse.length - const hwid = Buffer.alloc(8) - - // 创建可变工作副本(解密是就地操作) - const response = Buffer.from(rawResponse) - const request = Buffer.from(rawRequest) - - // 初始假设所有验证通过 - const result: ResponseResult = { - mask: 0, - hashOK: true, - timeStampOK: true, - clientMachineIDOK: true, - versionOK: true, - ivsOK: true, - decryptSuccess: true, - hmacSha256OK: true, - pidLengthOK: true, - rpcOK: true, - ivNotSuspicious: true, - effectiveResponseSize: totalSize, - correctResponseSize: 0 - } - - // 从外层(未加密)版本字段确定协议版本 - const majorVer = response.readUInt16LE(2) - const isV6 = majorVer > 5 - - // 解密 4 字节 Version 之后的所有内容 - const ctx = new AesCtx() - ctx.initKey(isV6 ? AesKeyV6 : AesKeyV5, isV6, AES_KEY_BYTES) - - const encryptedLen = totalSize - 4 - aesDecryptCbc(ctx, null, response.subarray(4), encryptedLen) - - // ── 验证 PKCS#7 填充 ── - const lastByte = response[totalSize - 1] - if (lastByte === 0 || lastByte > AES_BLOCK_BYTES) { - result.decryptSuccess = false - result.mask = computeMask(result) - return { result, response: emptyParsedResponse(), hwid } - } - for (let i = totalSize - lastByte; i < totalSize - 1; i++) { - if (response[i] !== lastByte) { - result.decryptSuccess = false - result.mask = computeMask(result) - return { result, response: emptyParsedResponse(), hwid } - } - } - - // ── 解析解密后的响应 ── - const pidSize = response.readUInt32LE(V6_PRE_EPID_SIZE - 4) // ResponseBase.PIDSize - const clampedPidSize = Math.min(pidSize, KMS_PID_MAX_BYTES) - const copySize1 = V6_PRE_EPID_SIZE + clampedPidSize - - const postEpidSize = isV6 ? V6_POST_EPID_SIZE : V5_POST_EPID_SIZE - const postEpid = Buffer.from( - response.subarray(copySize1, copySize1 + postEpidSize) - ) - - const parsed = parseResponseBase( - response, - V6_UNENCRYPTED_SIZE, - pidSize, - postEpid - ) - - // ── 解密请求的 IV + RequestBase + Pad(用于验证) ── - aesDecryptCbc(ctx, null, request.subarray(4), V6_DECRYPT_SIZE) - - // ── 版本一致性检查 ── - const outerReqVersion = request.readUInt32LE(0) - const innerReqVersion = request.readUInt32LE(20) // RequestBase.Version - const outerRespVersion = response.readUInt32LE(0) - const innerRespVersion = response.readUInt32LE(V6_UNENCRYPTED_SIZE) // ResponseBase.Version - - result.versionOK = - outerReqVersion === innerRespVersion && - outerReqVersion === outerRespVersion && - outerReqVersion === innerReqVersion - - // ── PID、时间戳、CMID 检查 ── - result.pidLengthOK = checkPidLength(response, V6_PRE_EPID_SIZE - 4) - - const reqClientTime = request.subarray(20 + 84, 20 + 92) // RequestBase.ClientTime - result.timeStampOK = parsed.clientTime.equals(reqClientTime) - - const reqCMID = request.subarray(20 + 64, 20 + 80) // RequestBase.CMID - result.clientMachineIDOK = parsed.cmid.equals(reqCMID) - - // ── 哈希验证 (RandomXoredIVs / Hash) ── - const decryptedReqIV = Buffer.from(request.subarray(4, 20)) - const randomXoredIVs = postEpid.subarray( - V4_POST_EPID_SIZE, - V4_POST_EPID_SIZE + 16 - ) - const receivedHash = postEpid.subarray( - V4_POST_EPID_SIZE + 16, - V4_POST_EPID_SIZE + 16 + HASH_SIZE - ) - - // 恢复原始随机字节: random = decryptedReqIV XOR RandomXoredIVs - const randomKey = Buffer.from(decryptedReqIV) - xorBlock(randomXoredIVs, randomKey) - const hashVerify = sha256(randomKey) - result.hashOK = hashVerify.equals(receivedHash) - - // ── 计算正确的响应大小(不含 PKCS 填充) ── - const sizeofStruct = isV6 ? SIZEOF_RESPONSE_V6 : SIZEOF_RESPONSE_V5 - result.correctResponseSize = sizeofStruct - KMS_PID_MAX_BYTES + pidSize - - // ── 版本特定验证 ── - if (isV6) { - // 提取 HwId - postEpid.copy(hwid, 0, V5_POST_EPID_SIZE, V5_POST_EPID_SIZE + 8) - - // XoredIVs 必须等于解密后的请求 IV - const xoredIVs = postEpid.subarray( - V5_POST_EPID_SIZE + 8, - V5_POST_EPID_SIZE + 24 - ) - result.ivsOK = decryptedReqIV.equals(xoredIVs) - - // 请求和响应的 IV 应该不同(相同说明是模拟器) - const responseIV = response.subarray(4, 20) - result.ivNotSuspicious = !decryptedReqIV.equals(responseIV) - - // 使用 ±1 时间槽容差验证 HMAC - const savedHmac = Buffer.from( - postEpid.subarray(V5_POST_EPID_SIZE + 24, V5_POST_EPID_SIZE + 40) - ) - result.hmacSha256OK = false - - const encryptStart = response.subarray(4) - const encryptSize = result.correctResponseSize - 4 - - for (let tolerance = -1; tolerance <= 1; tolerance++) { - createV6Hmac(encryptStart, encryptSize, tolerance) - const computed = encryptStart.subarray( - encryptSize - HMAC_SIZE, - encryptSize - ) - if (savedHmac.equals(computed)) { - result.hmacSha256OK = true - break - } - } - } else { - // V5: 请求和响应的 IV 必须匹配 - const responseIV = response.subarray(4, 20) - result.ivsOK = decryptedReqIV.equals(responseIV) - result.hmacSha256OK = true // V5 没有 HMAC - } - - // 将 PKCS 填充加到 correctResponseSize - const encPartSize = result.correctResponseSize - 4 - result.correctResponseSize += (~encPartSize & 0xf) + 1 - - result.mask = computeMask(result) - return { result, response: parsed, hwid } -} +/** + * KMS 协议实现 — 处理 V4/V5/V6 请求创建和响应解密 + * + * 参考原版源码: + * - src/kms.c (CreateRequestV4, CreateRequestV6, DecryptResponseV4, DecryptResponseV6) + * - src/kms.h (REQUEST, RESPONSE, RESPONSE_RESULT 等结构定义) + */ + +import { + AesCtx, + AES_BLOCK_BYTES, + AES_KEY_BYTES, + AesKeyV5, + AesKeyV6, + xorBlock, + aesCmacV4, + aesEncryptCbc, + aesDecryptCbc, + sha256, + sha256Hmac, + get16RandomBytes +} from './crypto' + +import { PID_BUFFER_SIZE, ResponseResult } from './types' + +// 重新导出时间工具函数 +export { + unixTimeToFileTime as getUnixTimeAsFileTime, + fileTimeToUnixTime +} from './types' + +// ─── 协议大小常量 (参考 src/kms.h 中的结构体大小) ────────────────────────── + +// REQUEST 结构: Version(4) + VMInfo(4) + LicenseStatus(4) + BindingExpiration(4) + +// AppID(16) + ActID(16) + KMSID(16) + CMID(16) + N_Policy(4) + +// ClientTime(8) + CMID_prev(16) + WorkstationName(128) = 236 字节 +const REQUEST_SIZE = 236 +/** V4 请求大小: REQUEST(236) + AES-CMAC(16) = 252 字节 */ +const REQUEST_V4_SIZE = 252 +/** V5/V6 请求大小: Version(4) + IV(16) + REQUEST(236) + Pad(4) = 260 字节 */ +const REQUEST_V6_SIZE = 260 + +/** V4 响应中 ePID 前面的字段大小: Version(4) + PIDSize(4) = 8 字节 */ +const V4_PRE_EPID_SIZE = 8 +/** V4 响应中 ePID 后面的字段大小: CMID(16) + ClientTime(8) + Count(4) + VLActivation(4) + VLRenewal(4) = 36 字节 */ +const V4_POST_EPID_SIZE = 36 +/** V6 未加密部分大小: Version(4) + IV(16) = 20 字节 */ +const V6_UNENCRYPTED_SIZE = 20 +/** V6 响应中 ePID 前面的字段大小: V6未加密(20) + ResponseBase.Version(4) + PIDSize(4) = 28 字节 */ +const V6_PRE_EPID_SIZE = 28 +/** V5 响应中 ePID 后面的额外字段: V4后(36) + RandomXoredIVs(16) + Hash(32) = 84 字节 */ +const V5_POST_EPID_SIZE = 84 +/** V6 响应中 ePID 后面的额外字段: V5后(84) + HwId(8) + XoredIVs(16) + HMAC(16) = 124 字节 */ +const V6_POST_EPID_SIZE = 124 +/** V6 解密大小: IV(16) + REQUEST(236) + Pad(4) = 256 字节 */ +const V6_DECRYPT_SIZE = 256 + +const HMAC_SIZE = 16 +const HASH_SIZE = 32 +const HALF_HASH_SIZE = HASH_SIZE >> 1 +/** PID 最大字节数: PID_BUFFER_SIZE * 2 = 128 字节 (UCS-2 编码) */ +const KMS_PID_MAX_BYTES = PID_BUFFER_SIZE * 2 + +// 最大结构体大小(使用完整 PID_BUFFER_SIZE 时) +/** V4 响应最大大小: RESPONSE(172) + MAC(16) = 188 字节 */ +const SIZEOF_RESPONSE_V4 = 188 +/** V5 响应最大大小: Version(4) + IV(16) + RESPONSE(172) + RandomXoredIVs(16) + Hash(32) = 240 字节 */ +const SIZEOF_RESPONSE_V5 = 240 +/** V6 响应最大大小: V5(240) + HwId(8) + XoredIVs(16) + HMAC(16) = 280 字节 */ +const SIZEOF_RESPONSE_V6 = 280 + +// V6 时间槽常量(每个时间槽约 4.11 小时) +// 用于 HMAC 计算,参考 src/kms.c 中的 CreateV6Hmac() +const TIME_C1 = BigInt('0x00000022816889bd') +const TIME_C2 = BigInt('0x000000208cbab5ed') +const TIME_C3 = BigInt('0x3156cd5ac628477a') +const UINT64_MASK = BigInt('0xffffffffffffffff') + +// ─── 导出类型 ─────────────────────────────────────────────────────────────── + +/** 解析后的 KMS 响应,对应 src/kms.h 中的 RESPONSE 结构 */ +export interface ParsedResponse { + majorVer: number // 主版本号 + minorVer: number // 次版本号 + pidSize: number // PID 大小(字节) + kmsPID: Buffer // KMS ePID (UCS-2 编码) + cmid: Buffer // 客户端机器 ID (16 字节 GUID) + clientTime: Buffer // 客户端请求时间 (8 字节 FILETIME) + count: number // 当前活跃客户端数 + vlActivationInterval: number // 激活间隔(分钟) + vlRenewalInterval: number // 续期间隔(分钟) +} + +// ─── 内部工具函数 ─────────────────────────────────────────────────────────── + +/** + * 从 ResponseResult 各字段计算位掩码 + * 参考: src/kms.c 中结果掩码的构建方式 + */ +function computeMask(r: ResponseResult): number { + let mask = 0 + if (r.hashOK) mask |= 1 << 0 + if (r.timeStampOK) mask |= 1 << 1 + if (r.clientMachineIDOK) mask |= 1 << 2 + if (r.versionOK) mask |= 1 << 3 + if (r.ivsOK) mask |= 1 << 4 + if (r.decryptSuccess) mask |= 1 << 5 + if (r.hmacSha256OK) mask |= 1 << 6 + if (r.pidLengthOK) mask |= 1 << 7 + if (r.rpcOK) mask |= 1 << 8 + if (r.ivNotSuspicious) mask |= 1 << 9 + mask |= (r.effectiveResponseSize & 0x1ff) << 14 + mask |= (r.correctResponseSize & 0x1ff) << 23 + return mask >>> 0 +} + +/** 创建空的 ParsedResponse(用于解密失败时的早期返回) */ +function emptyParsedResponse(): ParsedResponse { + return { + majorVer: 0, + minorVer: 0, + pidSize: 0, + kmsPID: Buffer.alloc(0), + cmid: Buffer.alloc(16), + clientTime: Buffer.alloc(8), + count: 0, + vlActivationInterval: 0, + vlRenewalInterval: 0 + } +} + +/** + * 验证 PID 长度 + * 检查: pidSize <= 128,最后一个 WCHAR 为 0,倒数第二个之前的字符都非零 + * + * 参考: src/kms.c 中的 checkPidLength() + */ +function checkPidLength(data: Buffer, pidSizeOffset: number): boolean { + const pidSize = data.readUInt32LE(pidSizeOffset) + if (pidSize > KMS_PID_MAX_BYTES) return false + + const pidOffset = pidSizeOffset + 4 + const numChars = pidSize >>> 1 + if (numChars < 1) return false + + // 最后一个 WCHAR 必须是空终止符 + if (data.readUInt16LE(pidOffset + (numChars - 1) * 2) !== 0) return false + + // 倒数第二个之前的所有 WCHAR 必须非零 + for (let i = 0; i < numChars - 2; i++) { + if (data.readUInt16LE(pidOffset + i * 2) === 0) return false + } + + return true +} + +/** + * 从解密后的数据中解析可变大小的响应基本字段 + * 参考: src/kms.c 中的响应解析逻辑 + */ +function parseResponseBase( + data: Buffer, + verOff: number, + pidSize: number, + postEpid: Buffer +): ParsedResponse { + const clampedPidSize = Math.min(pidSize, KMS_PID_MAX_BYTES) + + return { + minorVer: data.readUInt16LE(verOff), + majorVer: data.readUInt16LE(verOff + 2), + pidSize, + kmsPID: Buffer.from(data.subarray(verOff + 8, verOff + 8 + clampedPidSize)), + cmid: Buffer.from(postEpid.subarray(0, 16)), + clientTime: Buffer.from(postEpid.subarray(16, 24)), + count: postEpid.readUInt32LE(24), + vlActivationInterval: postEpid.readUInt32LE(28), + vlRenewalInterval: postEpid.readUInt32LE(32) + } +} + +/** + * 计算并写入 V6 HMAC + * 从响应中读取 ClientTime 来派生基于时间槽的密钥, + * 然后将 16 字节 HMAC 写入加密区域的末尾 + * + * 参考: src/kms.c 中的 CreateV6Hmac() + */ +function createV6Hmac( + encryptStart: Buffer, + encryptSize: number, + tolerance: number +): void { + // ClientTime 位于: 加密区域末尾 - V6_POST_EPID_SIZE + sizeof(CMID) + const ftOffset = encryptSize - V6_POST_EPID_SIZE + 16 + const clientTime = encryptStart.readBigUInt64LE(ftOffset) + + // 时间槽 ≈ 4.11 小时粒度 + const timeSlot = + ((clientTime / TIME_C1) * TIME_C2 + TIME_C3 + BigInt(tolerance) * TIME_C1) & + UINT64_MASK + + const timeSlotBuf = Buffer.alloc(8) + timeSlotBuf.writeBigUInt64LE(timeSlot) + const hash = sha256(timeSlotBuf) + + // HMAC 密钥 = SHA256(timeSlot) 的后 16 字节 + const hmacKey = hash.subarray(HALF_HASH_SIZE) + const hmacData = encryptStart.subarray(0, encryptSize - HMAC_SIZE) + const hmacResult = sha256Hmac(hmacKey, hmacData) + + // 将 HMAC 结果的后 16 字节写入 HMAC 字段 + hmacResult.copy( + encryptStart, + encryptSize - HMAC_SIZE, + HALF_HASH_SIZE, + HASH_SIZE + ) +} + +// ─── 创建 V4 请求 (参考 src/kms.c 中的 CreateRequestV4) ──────────────────── + +/** + * 构建 252 字节的 V4 KMS 请求: REQUEST(236) + AES-CMAC(16) + */ +export function createRequestV4(requestBase: Buffer): Buffer { + const request = Buffer.alloc(REQUEST_V4_SIZE) + requestBase.copy(request, 0, 0, REQUEST_SIZE) + + // 计算 AES-CMAC 并附加到请求末尾 + const mac = aesCmacV4(request, REQUEST_SIZE) + mac.copy(request, REQUEST_SIZE) + + return request +} + +// ─── 创建 V5/V6 请求 (参考 src/kms.c 中的 CreateRequestV6) ───────────────── + +/** + * 构建 260 字节的 V5/V6 KMS 请求: Version(4) + IV(16) + 加密的请求(240) + */ +export function createRequestV6(requestBase: Buffer): Buffer { + const request = Buffer.alloc(REQUEST_V6_SIZE) + + // 外层版本号 = requestBase 版本号 + requestBase.copy(request, 0, 0, 4) + + // 随机 16 字节 IV + const iv = get16RandomBytes() + iv.copy(request, 4) + + // 将基础请求复制到加密区域 + requestBase.copy(request, 20, 0, REQUEST_SIZE) + + // 根据主版本号选择密钥(V6 使用 AesKeyV6,V5 使用 AesKeyV5) + const majorVer = request.readUInt16LE(2) + const isV6 = majorVer > 5 + + const ctx = new AesCtx() + ctx.initKey(isV6 ? AesKeyV6 : AesKeyV5, isV6, AES_KEY_BYTES) + + // 加密请求(236 字节 → 240 字节,含 PKCS#7 填充) + const plaintext = Buffer.from(request.subarray(20, 20 + REQUEST_SIZE)) + const { encrypted } = aesEncryptCbc(ctx, iv, plaintext) + encrypted.copy(request, 20) + + return request +} + +// ─── 解密 V4 响应 (参考 src/kms.c 中的 DecryptResponseV4) ────────────────── + +/** + * 解密并验证 V4 KMS 响应 + * 线路格式: Version(4) + PIDSize(4) + PID(变长) + CMID(16) + + * ClientTime(8) + Count(4) + Intervals(8) + MAC(16) + */ +export function decryptResponseV4( + rawResponse: Buffer, + rawRequest: Buffer +): { result: ResponseResult; response: ParsedResponse } { + const responseSize = rawResponse.length + + // 确定变长 PID 大小 + const pidSize = rawResponse.readUInt32LE(4) + const clampedPidSize = Math.min(pidSize, KMS_PID_MAX_BYTES) + const copySize = V4_PRE_EPID_SIZE + clampedPidSize + const messageSize = copySize + V4_POST_EPID_SIZE + + // 提取 ePID 后面的区域(CMID、ClientTime、Count、Intervals) + const postEpid = Buffer.from( + rawResponse.subarray(copySize, copySize + V4_POST_EPID_SIZE) + ) + const parsed = parseResponseBase(rawResponse, 0, pidSize, postEpid) + + // 计算 CMAC 并与接收到的 MAC 比较 + const computedMac = aesCmacV4(rawResponse, messageSize) + const receivedMac = rawResponse.subarray(messageSize, messageSize + 16) + + // 与请求字段进行验证 + const reqVersion = rawRequest.readUInt32LE(0) + const reqClientTime = rawRequest.subarray(84, 92) // REQUEST.ClientTime + const reqCMID = rawRequest.subarray(64, 80) // REQUEST.CMID + + const result: ResponseResult = { + mask: 0, + hashOK: computedMac.equals(receivedMac), + timeStampOK: parsed.clientTime.equals(reqClientTime), + clientMachineIDOK: parsed.cmid.equals(reqCMID), + versionOK: rawResponse.readUInt32LE(0) === reqVersion, + ivsOK: true, + decryptSuccess: true, + hmacSha256OK: true, + pidLengthOK: checkPidLength(rawResponse, 4), + rpcOK: true, + ivNotSuspicious: true, + effectiveResponseSize: responseSize, + correctResponseSize: SIZEOF_RESPONSE_V4 - KMS_PID_MAX_BYTES + pidSize + } + result.mask = computeMask(result) + + return { result, response: parsed } +} + +// ─── 解密 V5/V6 响应 (参考 src/kms.c 中的 DecryptResponseV6) ─────────────── + +/** + * 解密并验证 V5/V6 KMS 响应 + * + * 线路格式(Version 之后的部分为加密): + * Version(4) + [IV(16) + ResponseBase(变长) + RandomXoredIVs(16) + Hash(32) + * + HwId(8, 仅V6) + XoredIVs(16, 仅V6) + HMAC(16, 仅V6) + * + PKCS填充] + */ +export function decryptResponseV6( + rawResponse: Buffer, + rawRequest: Buffer +): { result: ResponseResult; response: ParsedResponse; hwid: Buffer } { + const totalSize = rawResponse.length + const hwid = Buffer.alloc(8) + + // 创建可变工作副本(解密是就地操作) + const response = Buffer.from(rawResponse) + const request = Buffer.from(rawRequest) + + // 初始假设所有验证通过 + const result: ResponseResult = { + mask: 0, + hashOK: true, + timeStampOK: true, + clientMachineIDOK: true, + versionOK: true, + ivsOK: true, + decryptSuccess: true, + hmacSha256OK: true, + pidLengthOK: true, + rpcOK: true, + ivNotSuspicious: true, + effectiveResponseSize: totalSize, + correctResponseSize: 0 + } + + // 从外层(未加密)版本字段确定协议版本 + const majorVer = response.readUInt16LE(2) + const isV6 = majorVer > 5 + + // 解密 4 字节 Version 之后的所有内容 + const ctx = new AesCtx() + ctx.initKey(isV6 ? AesKeyV6 : AesKeyV5, isV6, AES_KEY_BYTES) + + const encryptedLen = totalSize - 4 + aesDecryptCbc(ctx, null, response.subarray(4), encryptedLen) + + // ── 验证 PKCS#7 填充 ── + const lastByte = response[totalSize - 1] + if (lastByte === 0 || lastByte > AES_BLOCK_BYTES) { + result.decryptSuccess = false + result.mask = computeMask(result) + return { result, response: emptyParsedResponse(), hwid } + } + for (let i = totalSize - lastByte; i < totalSize - 1; i++) { + if (response[i] !== lastByte) { + result.decryptSuccess = false + result.mask = computeMask(result) + return { result, response: emptyParsedResponse(), hwid } + } + } + + // ── 解析解密后的响应 ── + const pidSize = response.readUInt32LE(V6_PRE_EPID_SIZE - 4) // ResponseBase.PIDSize + const clampedPidSize = Math.min(pidSize, KMS_PID_MAX_BYTES) + const copySize1 = V6_PRE_EPID_SIZE + clampedPidSize + + const postEpidSize = isV6 ? V6_POST_EPID_SIZE : V5_POST_EPID_SIZE + const postEpid = Buffer.from( + response.subarray(copySize1, copySize1 + postEpidSize) + ) + + const parsed = parseResponseBase( + response, + V6_UNENCRYPTED_SIZE, + pidSize, + postEpid + ) + + // ── 解密请求的 IV + RequestBase + Pad(用于验证) ── + aesDecryptCbc(ctx, null, request.subarray(4), V6_DECRYPT_SIZE) + + // ── 版本一致性检查 ── + const outerReqVersion = request.readUInt32LE(0) + const innerReqVersion = request.readUInt32LE(20) // RequestBase.Version + const outerRespVersion = response.readUInt32LE(0) + const innerRespVersion = response.readUInt32LE(V6_UNENCRYPTED_SIZE) // ResponseBase.Version + + result.versionOK = + outerReqVersion === innerRespVersion && + outerReqVersion === outerRespVersion && + outerReqVersion === innerReqVersion + + // ── PID、时间戳、CMID 检查 ── + result.pidLengthOK = checkPidLength(response, V6_PRE_EPID_SIZE - 4) + + const reqClientTime = request.subarray(20 + 84, 20 + 92) // RequestBase.ClientTime + result.timeStampOK = parsed.clientTime.equals(reqClientTime) + + const reqCMID = request.subarray(20 + 64, 20 + 80) // RequestBase.CMID + result.clientMachineIDOK = parsed.cmid.equals(reqCMID) + + // ── 哈希验证 (RandomXoredIVs / Hash) ── + const decryptedReqIV = Buffer.from(request.subarray(4, 20)) + const randomXoredIVs = postEpid.subarray( + V4_POST_EPID_SIZE, + V4_POST_EPID_SIZE + 16 + ) + const receivedHash = postEpid.subarray( + V4_POST_EPID_SIZE + 16, + V4_POST_EPID_SIZE + 16 + HASH_SIZE + ) + + // 恢复原始随机字节: random = decryptedReqIV XOR RandomXoredIVs + const randomKey = Buffer.from(decryptedReqIV) + xorBlock(randomXoredIVs, randomKey) + const hashVerify = sha256(randomKey) + result.hashOK = hashVerify.equals(receivedHash) + + // ── 计算正确的响应大小(不含 PKCS 填充) ── + const sizeofStruct = isV6 ? SIZEOF_RESPONSE_V6 : SIZEOF_RESPONSE_V5 + result.correctResponseSize = sizeofStruct - KMS_PID_MAX_BYTES + pidSize + + // ── 版本特定验证 ── + if (isV6) { + // 提取 HwId + postEpid.copy(hwid, 0, V5_POST_EPID_SIZE, V5_POST_EPID_SIZE + 8) + + // XoredIVs 必须等于解密后的请求 IV + const xoredIVs = postEpid.subarray( + V5_POST_EPID_SIZE + 8, + V5_POST_EPID_SIZE + 24 + ) + result.ivsOK = decryptedReqIV.equals(xoredIVs) + + // 请求和响应的 IV 应该不同(相同说明是模拟器) + const responseIV = response.subarray(4, 20) + result.ivNotSuspicious = !decryptedReqIV.equals(responseIV) + + // 使用 ±1 时间槽容差验证 HMAC + const savedHmac = Buffer.from( + postEpid.subarray(V5_POST_EPID_SIZE + 24, V5_POST_EPID_SIZE + 40) + ) + result.hmacSha256OK = false + + const encryptStart = response.subarray(4) + const encryptSize = result.correctResponseSize - 4 + + for (let tolerance = -1; tolerance <= 1; tolerance++) { + createV6Hmac(encryptStart, encryptSize, tolerance) + const computed = encryptStart.subarray( + encryptSize - HMAC_SIZE, + encryptSize + ) + if (savedHmac.equals(computed)) { + result.hmacSha256OK = true + break + } + } + } else { + // V5: 请求和响应的 IV 必须匹配 + const responseIV = response.subarray(4, 20) + result.ivsOK = decryptedReqIV.equals(responseIV) + result.hmacSha256OK = true // V5 没有 HMAC + } + + // 将 PKCS 填充加到 correctResponseSize + const encPartSize = result.correctResponseSize - 4 + result.correctResponseSize += (~encPartSize & 0xf) + 1 + + result.mask = computeMask(result) + return { result, response: parsed, hwid } +} diff --git a/node-vlmcs/src/rpc.ts b/node-vlmcs/src/rpc.ts index e31b1f76..036154de 100644 --- a/node-vlmcs/src/rpc.ts +++ b/node-vlmcs/src/rpc.ts @@ -1,626 +1,626 @@ -/** - * DCE-RPC 协议层 — 实现 KMS 激活所需的 DCE-RPC 客户端协议 - * - * 参考原版源码: - * - src/rpc.c (rpcBindOrAlterClientContext, rpcSendRequest 等) - * - src/rpc.h (RPC_HEADER, RPC_BIND_REQUEST, RPC_RESPONSE 等结构定义) - */ - -import * as net from 'net' -import { sendData, recvData } from './network' - -// ─── 数据包类型 (参考 src/rpc.h 中的 RPC_PT_* 常量) ──────────────────────── - -const RPC_PT_REQUEST = 0 // 请求 -const RPC_PT_RESPONSE = 2 // 响应 -const RPC_PT_FAULT = 3 // 错误 -const RPC_PT_BIND_REQ = 11 // 绑定请求 -const RPC_PT_BIND_ACK = 12 // 绑定确认 -const RPC_PT_ALTERCONTEXT_REQ = 14 // 修改上下文请求 -const RPC_PT_ALTERCONTEXT_ACK = 15 // 修改上下文确认 - -// ─── 数据包标志 ───────────────────────────────────────────────────────────── - -const RPC_PF_FIRST = 1 // 分片的第一个包 -const RPC_PF_LAST = 2 // 分片的最后一个包 -const RPC_PF_MULTIPLEX = 16 // 多路复用 - -// ─── 绑定确认结果码 (参考 src/rpc.h) ─────────────────────────────────────── - -const RPC_BIND_ACCEPT = 0 // 接受 -const RPC_BIND_NACK = 2 // 拒绝 -const RPC_BIND_ACK = 3 // 确认(用于 BTFN 绑定时间特性协商) - -// ─── RPC 头部大小 ─────────────────────────────────────────────────────────── - -/** RPC 头部固定大小: 16 字节 */ -const RPC_HEADER_SIZE = 16 - -// ─── GUID 常量 (原始线路字节,无字节序转换) ───────────────────────────────── - -/** NDR32 传输语法 GUID */ -const TransferSyntaxNDR32 = Buffer.from([ - 0x04, 0x5d, 0x88, 0x8a, 0xeb, 0x1c, 0xc9, 0x11, 0x9f, 0xe8, 0x08, 0x00, 0x2b, - 0x10, 0x48, 0x60 -]) - -/** KMS 接口 UUID */ -const InterfaceUuid = Buffer.from([ - 0x75, 0x21, 0xc8, 0x51, 0x4e, 0x84, 0x50, 0x47, 0xb0, 0xd8, 0xec, 0x25, 0x55, - 0x55, 0xbc, 0x06 -]) - -/** NDR64 传输语法 GUID */ -const TransferSyntaxNDR64 = Buffer.from([ - 0x33, 0x05, 0x71, 0x71, 0xba, 0xbe, 0x37, 0x49, 0x83, 0x19, 0xb5, 0xdb, 0xef, - 0x9c, 0xcc, 0x36 -]) - -/** 绑定时间特性协商 GUID (BTFN) */ -const BindTimeFeatureNegotiation = Buffer.from([ - 0x2c, 0x1c, 0xb7, 0x6c, 0x12, 0x98, 0x40, 0x45, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00 -]) - -// ─── 导出接口 ─────────────────────────────────────────────────────────────── - -/** RPC 已协商的能力标志 */ -export interface RpcFlags { - hasNDR32: boolean // 是否支持 NDR32 传输语法 - hasNDR64: boolean // 是否支持 NDR64 传输语法 - hasBTFN: boolean // 是否支持绑定时间特性协商 -} - -/** RPC 诊断信息 */ -export interface RpcDiag { - hasRpcDiag: boolean // 是否有 RPC 诊断信息 - hasBTFN: boolean // 服务器是否支持 BTFN - hasNDR64: boolean // 服务器是否支持 NDR64 -} - -// ─── 状态 ─────────────────────────────────────────────────────────────────── - -/** 调用 ID,从 2 开始(与微软实现一致) */ -let callId = 2 - -// ─── 工具函数: 写入 RPC 头部 ─────────────────────────────────────────────── - -/** - * 写入 RPC 头部 (16 字节) - * 参考: src/rpc.h 中的 RPC_HEADER 结构 - */ -function writeRpcHeader( - buf: Buffer, - packetType: number, - packetFlags: number, - fragLength: number, - currentCallId: number -): void { - buf.writeUInt8(5, 0) // VersionMajor = 5 - buf.writeUInt8(0, 1) // VersionMinor = 0 - buf.writeUInt8(packetType, 2) // PacketType - buf.writeUInt8(packetFlags, 3) // PacketFlags - buf.writeUInt32LE(0x00000010, 4) // DataRepresentation: LE, ASCII, IEEE - buf.writeUInt16LE(fragLength, 8) // FragLength - buf.writeUInt16LE(0, 10) // AuthLength - buf.writeUInt32LE(currentCallId, 12) // CallId -} - -// ─── 工具函数: 解析 RPC 头部 ─────────────────────────────────────────────── - -interface RpcHeader { - versionMajor: number - versionMinor: number - packetType: number - packetFlags: number - dataRepresentation: number - fragLength: number - authLength: number - callId: number -} - -/** 从 Buffer 解析 RPC 头部 */ -function parseRpcHeader(buf: Buffer): RpcHeader { - return { - versionMajor: buf.readUInt8(0), - versionMinor: buf.readUInt8(1), - packetType: buf.readUInt8(2), - packetFlags: buf.readUInt8(3), - dataRepresentation: buf.readUInt32LE(4), - fragLength: buf.readUInt16LE(8), - authLength: buf.readUInt16LE(10), - callId: buf.readUInt32LE(12) - } -} - -/** 获取数据包类型的可读名称(用于调试输出) */ -function packetTypeName(type: number): string { - switch (type) { - case RPC_PT_REQUEST: - return 'Request' - case RPC_PT_RESPONSE: - return 'Response' - case RPC_PT_FAULT: - return 'Fault' - case RPC_PT_BIND_REQ: - return 'Bind' - case RPC_PT_BIND_ACK: - return 'Bind Ack' - case RPC_PT_ALTERCONTEXT_REQ: - return 'Alter Context' - case RPC_PT_ALTERCONTEXT_ACK: - return 'Alter Context Ack' - default: - return `Unknown(${type})` - } -} - -// ─── 构建 Bind/AlterContext 数据包 ────────────────────────────────────────── - -interface CtxItem { - transferSyntax: Buffer // 传输语法 GUID - syntaxVersion: number // 语法版本 -} - -/** - * 构建 Bind 或 AlterContext 数据包 - * - * 参考: src/rpc.c 中的 rpcBindOrAlterClientContext() 的数据包构建部分 - * 每个上下文项: ContextId(2) + NumTransItems(2) + InterfaceUUID(16) + - * InterfaceVerMajor(2) + InterfaceVerMinor(2) + TransferSyntax(16) + SyntaxVersion(4) = 44 字节 - */ -function buildBindPacket( - packetType: number, - packetFlags: number, - currentCallId: number, - ctxItems: CtxItem[] -): Buffer { - const ctxItemSize = 44 - // 绑定体: MaxXmitFrag(2) + MaxRecvFrag(2) + AssocGroup(4) + NumCtxItems(4) + 上下文项数组 - const bindBodySize = 2 + 2 + 4 + 4 + ctxItems.length * ctxItemSize - const totalSize = RPC_HEADER_SIZE + bindBodySize - const buf = Buffer.alloc(totalSize) - - writeRpcHeader(buf, packetType, packetFlags, totalSize, currentCallId) - - let offset = RPC_HEADER_SIZE - buf.writeUInt16LE(5840, offset) // MaxXmitFrag - buf.writeUInt16LE(5840, offset + 2) // MaxRecvFrag - buf.writeUInt32LE(0, offset + 4) // AssocGroup - buf.writeUInt32LE(ctxItems.length, offset + 8) // NumCtxItems - offset += 12 - - for (let i = 0; i < ctxItems.length; i++) { - buf.writeUInt16LE(i, offset) // ContextId - buf.writeUInt16LE(1, offset + 2) // NumTransItems - InterfaceUuid.copy(buf, offset + 4) // InterfaceUUID - buf.writeUInt16LE(1, offset + 20) // InterfaceVerMajor - buf.writeUInt16LE(0, offset + 22) // InterfaceVerMinor - ctxItems[i].transferSyntax.copy(buf, offset + 24) // TransferSyntax - buf.writeUInt32LE(ctxItems[i].syntaxVersion, offset + 40) // SyntaxVersion - offset += ctxItemSize - } - - return buf -} - -// ─── 解析绑定响应 ─────────────────────────────────────────────────────────── - -interface BindResult { - ackResult: number // 确认结果码 - ackReason: number // 确认原因 - transferSyntax: Buffer // 传输语法 - syntaxVersion: number // 语法版本 -} - -/** - * 解析 Bind/AlterContext 响应体 - * 参考: src/rpc.h 中的 RPC_BIND_RESPONSE 结构 - */ -function parseBindResponse( - body: Buffer, - verbose: boolean -): { results: BindResult[]; maxRecvFrag: number } { - let offset = 0 - - const maxXmitFrag = body.readUInt16LE(offset) - const maxRecvFrag = body.readUInt16LE(offset + 2) - const assocGroup = body.readUInt32LE(offset + 4) - offset += 8 - - const secondaryAddressLength = body.readUInt16LE(offset) - offset += 2 - - if (verbose) { - console.log( - ` Max Xmit/Recv Frag: ${maxXmitFrag}/${maxRecvFrag}, AssocGroup: 0x${assocGroup.toString(16).padStart(8, '0')}` - ) - console.log(` Secondary Address Length: ${secondaryAddressLength}`) - } - - // 跳过二级地址和对齐填充到 4 字节边界 - offset += secondaryAddressLength - const totalOff = offset - offset += (4 - (totalOff % 4)) % 4 - - const numResults = body.readUInt32LE(offset) - offset += 4 - - if (verbose) { - console.log(` Num Results: ${numResults}`) - } - - const results: BindResult[] = [] - for (let i = 0; i < numResults; i++) { - const ackResult = body.readUInt16LE(offset) - const ackReason = body.readUInt16LE(offset + 2) - const transferSyntax = Buffer.from(body.subarray(offset + 4, offset + 20)) - const syntaxVersion = body.readUInt32LE(offset + 20) - offset += 24 - - if (verbose) { - const resultStr = - ackResult === RPC_BIND_ACCEPT - ? 'Accept' - : ackResult === RPC_BIND_NACK - ? 'Nack' - : ackResult === RPC_BIND_ACK - ? 'Ack' - : `Unknown(0x${ackResult.toString(16)})` - console.log( - ` Result[${i}]: ${resultStr} (reason: 0x${ackReason.toString(16)})` - ) - } - - results.push({ ackResult, ackReason, transferSyntax, syntaxVersion }) - } - - return { results, maxRecvFrag } -} - -// ─── 绑定/修改上下文 ─────────────────────────────────────────────────────── - -/** - * 执行单次 Bind 或 AlterContext 交换并处理响应 - * - * 参考: src/rpc.c 中的 rpcBindOrAlterClientContext() - */ -async function rpcBindOrAlterContext( - sock: net.Socket, - packetType: number, - verbose: boolean, - useClientRpcNDR64: boolean, - useClientRpcBTFN: boolean, - useMultiplexedRpc: boolean, - rpcFlags: RpcFlags, - rpcDiag: RpcDiag -): Promise { - // AlterContext 只发送 NDR32;Bind 发送 NDR32 + 可选 NDR64 + BTFN - const isBind = packetType === RPC_PT_BIND_REQ - const ctxItems: CtxItem[] = [ - { transferSyntax: TransferSyntaxNDR32, syntaxVersion: 2 } - ] - - let ctxNDR64 = -1 - let ctxBTFN = -1 - - if (isBind && useClientRpcNDR64) { - ctxNDR64 = ctxItems.length - ctxItems.push({ transferSyntax: TransferSyntaxNDR64, syntaxVersion: 1 }) - } - - if (isBind && useClientRpcBTFN) { - ctxBTFN = ctxItems.length - ctxItems.push({ - transferSyntax: BindTimeFeatureNegotiation, - syntaxVersion: 1 - }) - } - - const packetFlags = - RPC_PF_FIRST | RPC_PF_LAST | (useMultiplexedRpc ? RPC_PF_MULTIPLEX : 0) - const currentCallId = callId++ - const bindPacket = buildBindPacket( - packetType, - packetFlags, - currentCallId, - ctxItems - ) - - await sendData(sock, bindPacket) - - // 接收响应头 - const headerBuf = await recvData(sock, RPC_HEADER_SIZE) - const header = parseRpcHeader(headerBuf) - - if (verbose) { - console.log( - `Received RPC ${packetTypeName(header.packetType)} (FragLength=${header.fragLength}, CallId=${header.callId})` - ) - } - - const expectedAckType = isBind ? RPC_PT_BIND_ACK : RPC_PT_ALTERCONTEXT_ACK - - if ( - header.packetType === RPC_PT_FAULT || - header.packetType !== expectedAckType - ) { - const bodySize = header.fragLength - RPC_HEADER_SIZE - if (bodySize > 0) await recvData(sock, bodySize) - return 1 - } - - // 读取响应体 - const bodySize = header.fragLength - RPC_HEADER_SIZE - const body = await recvData(sock, bodySize) - const { results } = parseBindResponse(body, verbose) - - // 处理每个上下文项的结果 - for (let i = 0; i < results.length; i++) { - const result = results[i] - - if (i === ctxBTFN) { - // BTFN 上下文:结果码为 RPC_BIND_ACK(3) 表示支持 - if (result.ackResult === RPC_BIND_ACK) { - rpcFlags.hasBTFN = true - rpcDiag.hasBTFN = true - if (verbose) process.stdout.write('... BTFN ') - } - continue - } - - if (result.ackResult === RPC_BIND_NACK) { - continue // 被拒绝,跳过 - } - - if (result.ackResult === RPC_BIND_ACCEPT) { - if (i === ctxNDR64) { - rpcFlags.hasNDR64 = true - rpcDiag.hasNDR64 = true - if (verbose) process.stdout.write('... NDR64 ') - } else if (i === 0) { - rpcFlags.hasNDR32 = true - if (verbose) process.stdout.write('... NDR32 ') - } - } - } - - return 0 -} - -/** - * 执行 RPC 绑定协商 - * - * 始终请求 NDR32 传输语法。根据参数可选请求 NDR64 和绑定时间特性协商 (BTFN)。 - * 如果 NDR32 未被接受,发送 AlterContext 单独协商 NDR32。 - * - * 参考: src/rpc.c 中的 rpcBindClient() - */ -export async function rpcBindClient( - sock: net.Socket, - verbose: boolean, - useClientRpcNDR64: boolean, - useClientRpcBTFN: boolean, - useMultiplexedRpc: boolean -): Promise<{ status: number; rpcDiag: RpcDiag; rpcFlags: RpcFlags }> { - const rpcFlags: RpcFlags = { - hasNDR32: false, - hasNDR64: false, - hasBTFN: false - } - const rpcDiag: RpcDiag = { - hasRpcDiag: false, - hasBTFN: false, - hasNDR64: false - } - - // 第一步: 发送 Bind 请求 - let status = await rpcBindOrAlterContext( - sock, - RPC_PT_BIND_REQ, - verbose, - useClientRpcNDR64, - useClientRpcBTFN, - useMultiplexedRpc, - rpcFlags, - rpcDiag - ) - - if (status) return { status, rpcDiag, rpcFlags } - - // 第二步: 如果 NDR32 未被接受,发送 AlterContext 单独协商 - if (!rpcFlags.hasNDR32) { - status = await rpcBindOrAlterContext( - sock, - RPC_PT_ALTERCONTEXT_REQ, - verbose, - false, - false, - useMultiplexedRpc, - rpcFlags, - rpcDiag - ) - if (status) return { status, rpcDiag, rpcFlags } - } - - if (!rpcFlags.hasNDR32 && !rpcFlags.hasNDR64) { - process.stderr.write( - '\nFatal: Could neither negotiate NDR32 nor NDR64 with the RPC server\n' - ) - return { status: 1, rpcDiag, rpcFlags } - } - - rpcDiag.hasRpcDiag = true - - if (verbose) { - process.stdout.write('\n') - } - - return { status: 0, rpcDiag, rpcFlags } -} - -// ─── 发送 RPC 请求 (参考 src/rpc.c 中的 rpcSendRequest) ──────────────────── - -/** - * 通过已建立的 RPC 连接发送 KMS 请求并接收响应 - * - * 当服务器支持 NDR64 且不是第一个包时使用 NDR64 编码,否则回退到 NDR32。 - * - * 参考: src/rpc.c 中的 rpcSendRequest() - */ -export async function rpcSendRequest( - sock: net.Socket, - kmsRequest: Buffer, - rpcFlags: RpcFlags, - useClientRpcNDR64: boolean, - firstPacketSent: boolean -): Promise<{ - status: number - kmsResponse: Buffer | null - responseSize: number -}> { - const requestSize = kmsRequest.length - const useNDR64 = useClientRpcNDR64 && rpcFlags.hasNDR64 && firstPacketSent - - let requestBody: Buffer - if (useNDR64) { - // NDR64 格式: AllocHint(4) + ContextId(2) + Opnum(2) + DataLength(8) + DataSizeIs(8) + Data - const bodySize = 4 + 2 + 2 + 8 + 8 + requestSize - requestBody = Buffer.alloc(bodySize) - let offset = 0 - requestBody.writeUInt32LE(requestSize + 16, offset) // AllocHint - offset += 4 - requestBody.writeUInt16LE(1, offset) // ContextId (NDR64 = 1) - offset += 2 - requestBody.writeUInt16LE(0, offset) // Opnum - offset += 2 - requestBody.writeBigUInt64LE(BigInt(requestSize), offset) // Ndr64.DataLength - offset += 8 - requestBody.writeBigUInt64LE(BigInt(requestSize), offset) // Ndr64.DataSizeIs - offset += 8 - kmsRequest.copy(requestBody, offset) - } else { - // NDR32 格式: AllocHint(4) + ContextId(2) + Opnum(2) + DataLength(4) + DataSizeIs(4) + Data - const bodySize = 4 + 2 + 2 + 4 + 4 + requestSize - requestBody = Buffer.alloc(bodySize) - let offset = 0 - requestBody.writeUInt32LE(requestSize + 8, offset) // AllocHint - offset += 4 - requestBody.writeUInt16LE(0, offset) // ContextId (NDR32 = 0) - offset += 2 - requestBody.writeUInt16LE(0, offset) // Opnum - offset += 2 - requestBody.writeUInt32LE(requestSize, offset) // Ndr.DataLength - offset += 4 - requestBody.writeUInt32LE(requestSize, offset) // Ndr.DataSizeIs - offset += 4 - kmsRequest.copy(requestBody, offset) - } - - const totalSize = RPC_HEADER_SIZE + requestBody.length - const packet = Buffer.alloc(totalSize) - const currentCallId = callId++ - writeRpcHeader( - packet, - RPC_PT_REQUEST, - RPC_PF_FIRST | RPC_PF_LAST, - totalSize, - currentCallId - ) - requestBody.copy(packet, RPC_HEADER_SIZE) - - await sendData(sock, packet) - - // ── 接收响应 ────────────────────────────────────────────────────────── - - const headerBuf = await recvData(sock, RPC_HEADER_SIZE) - const header = parseRpcHeader(headerBuf) - - // 处理 Fault 响应 - if (header.packetType === RPC_PT_FAULT) { - const bodySize = header.fragLength - RPC_HEADER_SIZE - if (bodySize >= 4) { - const faultBody = await recvData(sock, bodySize) - const faultStatus = faultBody.readUInt32LE(0) - return { status: faultStatus || 1, kmsResponse: null, responseSize: 0 } - } - if (bodySize > 0) await recvData(sock, bodySize) - return { status: 1, kmsResponse: null, responseSize: 0 } - } - - // 验证响应类型 - if (header.packetType !== RPC_PT_RESPONSE) { - const bodySize = header.fragLength - RPC_HEADER_SIZE - if (bodySize > 0) await recvData(sock, bodySize) - return { status: 1, kmsResponse: null, responseSize: 0 } - } - - // 读取完整响应体 - const bodySize = header.fragLength - RPC_HEADER_SIZE - const body = await recvData(sock, bodySize) - - // 解析 NDR 响应头 - // 参考: src/rpc.h 中的 RPC_RESPONSE / RPC_RESPONSE64 结构 - let offset = 0 - const allocHint = body.readUInt32LE(offset) // AllocHint - offset += 4 - const contextId = body.readUInt16LE(offset) // ContextId - offset += 2 - const cancelCount = body.readUInt8(offset) // CancelCount - offset += 1 - offset += 1 // Pad1 - - const responseUsesNDR64 = contextId === 1 - - let dataLength: number - let dataSizeMax: bigint | number - let dataSizeIs: bigint | number - - if (responseUsesNDR64) { - // NDR64 响应: DataLength(8) + DataSizeMax(8) + DataSizeIs(8) - dataLength = Number(body.readBigUInt64LE(offset)) - offset += 8 - dataSizeMax = body.readBigUInt64LE(offset) - offset += 8 - dataSizeIs = body.readBigUInt64LE(offset) - offset += 8 - } else { - // NDR32 响应: DataLength(4) + DataSizeMax(4) + DataSizeIs(4) - dataLength = body.readUInt32LE(offset) - offset += 4 - dataSizeMax = body.readUInt32LE(offset) - offset += 4 - dataSizeIs = body.readUInt32LE(offset) - offset += 4 - } - - // 如果 dataSizeMax 为 0,说明 RPC 调用返回了错误状态 - if (dataSizeMax === 0 || dataSizeMax === 0n) { - const errorStatus = Number(dataSizeIs) - return { status: errorStatus || 1, kmsResponse: null, responseSize: 0 } - } - - if (dataLength <= 0 || offset + dataLength > body.length) { - return { status: 1, kmsResponse: null, responseSize: 0 } - } - - // 提取 KMS 响应数据 - const kmsResponse = Buffer.from(body.subarray(offset, offset + dataLength)) - offset += dataLength - - // 4 字节对齐填充 - const padBytes = (4 - (dataLength % 4)) % 4 - offset += padBytes - - // 读取 ReturnCode (HRESULT) - let returnCode = 0 - if (offset + 4 <= body.length) { - returnCode = body.readUInt32LE(offset) - } - - if (returnCode !== 0) { - return { status: returnCode, kmsResponse, responseSize: dataLength } - } - - return { status: 0, kmsResponse, responseSize: dataLength } -} +/** + * DCE-RPC 协议层 — 实现 KMS 激活所需的 DCE-RPC 客户端协议 + * + * 参考原版源码: + * - src/rpc.c (rpcBindOrAlterClientContext, rpcSendRequest 等) + * - src/rpc.h (RPC_HEADER, RPC_BIND_REQUEST, RPC_RESPONSE 等结构定义) + */ + +import * as net from 'net' +import { sendData, recvData } from './network' + +// ─── 数据包类型 (参考 src/rpc.h 中的 RPC_PT_* 常量) ──────────────────────── + +const RPC_PT_REQUEST = 0 // 请求 +const RPC_PT_RESPONSE = 2 // 响应 +const RPC_PT_FAULT = 3 // 错误 +const RPC_PT_BIND_REQ = 11 // 绑定请求 +const RPC_PT_BIND_ACK = 12 // 绑定确认 +const RPC_PT_ALTERCONTEXT_REQ = 14 // 修改上下文请求 +const RPC_PT_ALTERCONTEXT_ACK = 15 // 修改上下文确认 + +// ─── 数据包标志 ───────────────────────────────────────────────────────────── + +const RPC_PF_FIRST = 1 // 分片的第一个包 +const RPC_PF_LAST = 2 // 分片的最后一个包 +const RPC_PF_MULTIPLEX = 16 // 多路复用 + +// ─── 绑定确认结果码 (参考 src/rpc.h) ─────────────────────────────────────── + +const RPC_BIND_ACCEPT = 0 // 接受 +const RPC_BIND_NACK = 2 // 拒绝 +const RPC_BIND_ACK = 3 // 确认(用于 BTFN 绑定时间特性协商) + +// ─── RPC 头部大小 ─────────────────────────────────────────────────────────── + +/** RPC 头部固定大小: 16 字节 */ +const RPC_HEADER_SIZE = 16 + +// ─── GUID 常量 (原始线路字节,无字节序转换) ───────────────────────────────── + +/** NDR32 传输语法 GUID */ +const TransferSyntaxNDR32 = Buffer.from([ + 0x04, 0x5d, 0x88, 0x8a, 0xeb, 0x1c, 0xc9, 0x11, 0x9f, 0xe8, 0x08, 0x00, 0x2b, + 0x10, 0x48, 0x60 +]) + +/** KMS 接口 UUID */ +const InterfaceUuid = Buffer.from([ + 0x75, 0x21, 0xc8, 0x51, 0x4e, 0x84, 0x50, 0x47, 0xb0, 0xd8, 0xec, 0x25, 0x55, + 0x55, 0xbc, 0x06 +]) + +/** NDR64 传输语法 GUID */ +const TransferSyntaxNDR64 = Buffer.from([ + 0x33, 0x05, 0x71, 0x71, 0xba, 0xbe, 0x37, 0x49, 0x83, 0x19, 0xb5, 0xdb, 0xef, + 0x9c, 0xcc, 0x36 +]) + +/** 绑定时间特性协商 GUID (BTFN) */ +const BindTimeFeatureNegotiation = Buffer.from([ + 0x2c, 0x1c, 0xb7, 0x6c, 0x12, 0x98, 0x40, 0x45, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00 +]) + +// ─── 导出接口 ─────────────────────────────────────────────────────────────── + +/** RPC 已协商的能力标志 */ +export interface RpcFlags { + hasNDR32: boolean // 是否支持 NDR32 传输语法 + hasNDR64: boolean // 是否支持 NDR64 传输语法 + hasBTFN: boolean // 是否支持绑定时间特性协商 +} + +/** RPC 诊断信息 */ +export interface RpcDiag { + hasRpcDiag: boolean // 是否有 RPC 诊断信息 + hasBTFN: boolean // 服务器是否支持 BTFN + hasNDR64: boolean // 服务器是否支持 NDR64 +} + +// ─── 状态 ─────────────────────────────────────────────────────────────────── + +/** 调用 ID,从 2 开始(与微软实现一致) */ +let callId = 2 + +// ─── 工具函数: 写入 RPC 头部 ─────────────────────────────────────────────── + +/** + * 写入 RPC 头部 (16 字节) + * 参考: src/rpc.h 中的 RPC_HEADER 结构 + */ +function writeRpcHeader( + buf: Buffer, + packetType: number, + packetFlags: number, + fragLength: number, + currentCallId: number +): void { + buf.writeUInt8(5, 0) // VersionMajor = 5 + buf.writeUInt8(0, 1) // VersionMinor = 0 + buf.writeUInt8(packetType, 2) // PacketType + buf.writeUInt8(packetFlags, 3) // PacketFlags + buf.writeUInt32LE(0x00000010, 4) // DataRepresentation: LE, ASCII, IEEE + buf.writeUInt16LE(fragLength, 8) // FragLength + buf.writeUInt16LE(0, 10) // AuthLength + buf.writeUInt32LE(currentCallId, 12) // CallId +} + +// ─── 工具函数: 解析 RPC 头部 ─────────────────────────────────────────────── + +interface RpcHeader { + versionMajor: number + versionMinor: number + packetType: number + packetFlags: number + dataRepresentation: number + fragLength: number + authLength: number + callId: number +} + +/** 从 Buffer 解析 RPC 头部 */ +function parseRpcHeader(buf: Buffer): RpcHeader { + return { + versionMajor: buf.readUInt8(0), + versionMinor: buf.readUInt8(1), + packetType: buf.readUInt8(2), + packetFlags: buf.readUInt8(3), + dataRepresentation: buf.readUInt32LE(4), + fragLength: buf.readUInt16LE(8), + authLength: buf.readUInt16LE(10), + callId: buf.readUInt32LE(12) + } +} + +/** 获取数据包类型的可读名称(用于调试输出) */ +function packetTypeName(type: number): string { + switch (type) { + case RPC_PT_REQUEST: + return 'Request' + case RPC_PT_RESPONSE: + return 'Response' + case RPC_PT_FAULT: + return 'Fault' + case RPC_PT_BIND_REQ: + return 'Bind' + case RPC_PT_BIND_ACK: + return 'Bind Ack' + case RPC_PT_ALTERCONTEXT_REQ: + return 'Alter Context' + case RPC_PT_ALTERCONTEXT_ACK: + return 'Alter Context Ack' + default: + return `Unknown(${type})` + } +} + +// ─── 构建 Bind/AlterContext 数据包 ────────────────────────────────────────── + +interface CtxItem { + transferSyntax: Buffer // 传输语法 GUID + syntaxVersion: number // 语法版本 +} + +/** + * 构建 Bind 或 AlterContext 数据包 + * + * 参考: src/rpc.c 中的 rpcBindOrAlterClientContext() 的数据包构建部分 + * 每个上下文项: ContextId(2) + NumTransItems(2) + InterfaceUUID(16) + + * InterfaceVerMajor(2) + InterfaceVerMinor(2) + TransferSyntax(16) + SyntaxVersion(4) = 44 字节 + */ +function buildBindPacket( + packetType: number, + packetFlags: number, + currentCallId: number, + ctxItems: CtxItem[] +): Buffer { + const ctxItemSize = 44 + // 绑定体: MaxXmitFrag(2) + MaxRecvFrag(2) + AssocGroup(4) + NumCtxItems(4) + 上下文项数组 + const bindBodySize = 2 + 2 + 4 + 4 + ctxItems.length * ctxItemSize + const totalSize = RPC_HEADER_SIZE + bindBodySize + const buf = Buffer.alloc(totalSize) + + writeRpcHeader(buf, packetType, packetFlags, totalSize, currentCallId) + + let offset = RPC_HEADER_SIZE + buf.writeUInt16LE(5840, offset) // MaxXmitFrag + buf.writeUInt16LE(5840, offset + 2) // MaxRecvFrag + buf.writeUInt32LE(0, offset + 4) // AssocGroup + buf.writeUInt32LE(ctxItems.length, offset + 8) // NumCtxItems + offset += 12 + + for (let i = 0; i < ctxItems.length; i++) { + buf.writeUInt16LE(i, offset) // ContextId + buf.writeUInt16LE(1, offset + 2) // NumTransItems + InterfaceUuid.copy(buf, offset + 4) // InterfaceUUID + buf.writeUInt16LE(1, offset + 20) // InterfaceVerMajor + buf.writeUInt16LE(0, offset + 22) // InterfaceVerMinor + ctxItems[i].transferSyntax.copy(buf, offset + 24) // TransferSyntax + buf.writeUInt32LE(ctxItems[i].syntaxVersion, offset + 40) // SyntaxVersion + offset += ctxItemSize + } + + return buf +} + +// ─── 解析绑定响应 ─────────────────────────────────────────────────────────── + +interface BindResult { + ackResult: number // 确认结果码 + ackReason: number // 确认原因 + transferSyntax: Buffer // 传输语法 + syntaxVersion: number // 语法版本 +} + +/** + * 解析 Bind/AlterContext 响应体 + * 参考: src/rpc.h 中的 RPC_BIND_RESPONSE 结构 + */ +function parseBindResponse( + body: Buffer, + verbose: boolean +): { results: BindResult[]; maxRecvFrag: number } { + let offset = 0 + + const maxXmitFrag = body.readUInt16LE(offset) + const maxRecvFrag = body.readUInt16LE(offset + 2) + const assocGroup = body.readUInt32LE(offset + 4) + offset += 8 + + const secondaryAddressLength = body.readUInt16LE(offset) + offset += 2 + + if (verbose) { + console.log( + ` Max Xmit/Recv Frag: ${maxXmitFrag}/${maxRecvFrag}, AssocGroup: 0x${assocGroup.toString(16).padStart(8, '0')}` + ) + console.log(` Secondary Address Length: ${secondaryAddressLength}`) + } + + // 跳过二级地址和对齐填充到 4 字节边界 + offset += secondaryAddressLength + const totalOff = offset + offset += (4 - (totalOff % 4)) % 4 + + const numResults = body.readUInt32LE(offset) + offset += 4 + + if (verbose) { + console.log(` Num Results: ${numResults}`) + } + + const results: BindResult[] = [] + for (let i = 0; i < numResults; i++) { + const ackResult = body.readUInt16LE(offset) + const ackReason = body.readUInt16LE(offset + 2) + const transferSyntax = Buffer.from(body.subarray(offset + 4, offset + 20)) + const syntaxVersion = body.readUInt32LE(offset + 20) + offset += 24 + + if (verbose) { + const resultStr = + ackResult === RPC_BIND_ACCEPT + ? 'Accept' + : ackResult === RPC_BIND_NACK + ? 'Nack' + : ackResult === RPC_BIND_ACK + ? 'Ack' + : `Unknown(0x${ackResult.toString(16)})` + console.log( + ` Result[${i}]: ${resultStr} (reason: 0x${ackReason.toString(16)})` + ) + } + + results.push({ ackResult, ackReason, transferSyntax, syntaxVersion }) + } + + return { results, maxRecvFrag } +} + +// ─── 绑定/修改上下文 ─────────────────────────────────────────────────────── + +/** + * 执行单次 Bind 或 AlterContext 交换并处理响应 + * + * 参考: src/rpc.c 中的 rpcBindOrAlterClientContext() + */ +async function rpcBindOrAlterContext( + sock: net.Socket, + packetType: number, + verbose: boolean, + useClientRpcNDR64: boolean, + useClientRpcBTFN: boolean, + useMultiplexedRpc: boolean, + rpcFlags: RpcFlags, + rpcDiag: RpcDiag +): Promise { + // AlterContext 只发送 NDR32;Bind 发送 NDR32 + 可选 NDR64 + BTFN + const isBind = packetType === RPC_PT_BIND_REQ + const ctxItems: CtxItem[] = [ + { transferSyntax: TransferSyntaxNDR32, syntaxVersion: 2 } + ] + + let ctxNDR64 = -1 + let ctxBTFN = -1 + + if (isBind && useClientRpcNDR64) { + ctxNDR64 = ctxItems.length + ctxItems.push({ transferSyntax: TransferSyntaxNDR64, syntaxVersion: 1 }) + } + + if (isBind && useClientRpcBTFN) { + ctxBTFN = ctxItems.length + ctxItems.push({ + transferSyntax: BindTimeFeatureNegotiation, + syntaxVersion: 1 + }) + } + + const packetFlags = + RPC_PF_FIRST | RPC_PF_LAST | (useMultiplexedRpc ? RPC_PF_MULTIPLEX : 0) + const currentCallId = callId++ + const bindPacket = buildBindPacket( + packetType, + packetFlags, + currentCallId, + ctxItems + ) + + await sendData(sock, bindPacket) + + // 接收响应头 + const headerBuf = await recvData(sock, RPC_HEADER_SIZE) + const header = parseRpcHeader(headerBuf) + + if (verbose) { + console.log( + `Received RPC ${packetTypeName(header.packetType)} (FragLength=${header.fragLength}, CallId=${header.callId})` + ) + } + + const expectedAckType = isBind ? RPC_PT_BIND_ACK : RPC_PT_ALTERCONTEXT_ACK + + if ( + header.packetType === RPC_PT_FAULT || + header.packetType !== expectedAckType + ) { + const bodySize = header.fragLength - RPC_HEADER_SIZE + if (bodySize > 0) await recvData(sock, bodySize) + return 1 + } + + // 读取响应体 + const bodySize = header.fragLength - RPC_HEADER_SIZE + const body = await recvData(sock, bodySize) + const { results } = parseBindResponse(body, verbose) + + // 处理每个上下文项的结果 + for (let i = 0; i < results.length; i++) { + const result = results[i] + + if (i === ctxBTFN) { + // BTFN 上下文:结果码为 RPC_BIND_ACK(3) 表示支持 + if (result.ackResult === RPC_BIND_ACK) { + rpcFlags.hasBTFN = true + rpcDiag.hasBTFN = true + if (verbose) process.stdout.write('... BTFN ') + } + continue + } + + if (result.ackResult === RPC_BIND_NACK) { + continue // 被拒绝,跳过 + } + + if (result.ackResult === RPC_BIND_ACCEPT) { + if (i === ctxNDR64) { + rpcFlags.hasNDR64 = true + rpcDiag.hasNDR64 = true + if (verbose) process.stdout.write('... NDR64 ') + } else if (i === 0) { + rpcFlags.hasNDR32 = true + if (verbose) process.stdout.write('... NDR32 ') + } + } + } + + return 0 +} + +/** + * 执行 RPC 绑定协商 + * + * 始终请求 NDR32 传输语法。根据参数可选请求 NDR64 和绑定时间特性协商 (BTFN)。 + * 如果 NDR32 未被接受,发送 AlterContext 单独协商 NDR32。 + * + * 参考: src/rpc.c 中的 rpcBindClient() + */ +export async function rpcBindClient( + sock: net.Socket, + verbose: boolean, + useClientRpcNDR64: boolean, + useClientRpcBTFN: boolean, + useMultiplexedRpc: boolean +): Promise<{ status: number; rpcDiag: RpcDiag; rpcFlags: RpcFlags }> { + const rpcFlags: RpcFlags = { + hasNDR32: false, + hasNDR64: false, + hasBTFN: false + } + const rpcDiag: RpcDiag = { + hasRpcDiag: false, + hasBTFN: false, + hasNDR64: false + } + + // 第一步: 发送 Bind 请求 + let status = await rpcBindOrAlterContext( + sock, + RPC_PT_BIND_REQ, + verbose, + useClientRpcNDR64, + useClientRpcBTFN, + useMultiplexedRpc, + rpcFlags, + rpcDiag + ) + + if (status) return { status, rpcDiag, rpcFlags } + + // 第二步: 如果 NDR32 未被接受,发送 AlterContext 单独协商 + if (!rpcFlags.hasNDR32) { + status = await rpcBindOrAlterContext( + sock, + RPC_PT_ALTERCONTEXT_REQ, + verbose, + false, + false, + useMultiplexedRpc, + rpcFlags, + rpcDiag + ) + if (status) return { status, rpcDiag, rpcFlags } + } + + if (!rpcFlags.hasNDR32 && !rpcFlags.hasNDR64) { + process.stderr.write( + '\nFatal: Could neither negotiate NDR32 nor NDR64 with the RPC server\n' + ) + return { status: 1, rpcDiag, rpcFlags } + } + + rpcDiag.hasRpcDiag = true + + if (verbose) { + process.stdout.write('\n') + } + + return { status: 0, rpcDiag, rpcFlags } +} + +// ─── 发送 RPC 请求 (参考 src/rpc.c 中的 rpcSendRequest) ──────────────────── + +/** + * 通过已建立的 RPC 连接发送 KMS 请求并接收响应 + * + * 当服务器支持 NDR64 且不是第一个包时使用 NDR64 编码,否则回退到 NDR32。 + * + * 参考: src/rpc.c 中的 rpcSendRequest() + */ +export async function rpcSendRequest( + sock: net.Socket, + kmsRequest: Buffer, + rpcFlags: RpcFlags, + useClientRpcNDR64: boolean, + firstPacketSent: boolean +): Promise<{ + status: number + kmsResponse: Buffer | null + responseSize: number +}> { + const requestSize = kmsRequest.length + const useNDR64 = useClientRpcNDR64 && rpcFlags.hasNDR64 && firstPacketSent + + let requestBody: Buffer + if (useNDR64) { + // NDR64 格式: AllocHint(4) + ContextId(2) + Opnum(2) + DataLength(8) + DataSizeIs(8) + Data + const bodySize = 4 + 2 + 2 + 8 + 8 + requestSize + requestBody = Buffer.alloc(bodySize) + let offset = 0 + requestBody.writeUInt32LE(requestSize + 16, offset) // AllocHint + offset += 4 + requestBody.writeUInt16LE(1, offset) // ContextId (NDR64 = 1) + offset += 2 + requestBody.writeUInt16LE(0, offset) // Opnum + offset += 2 + requestBody.writeBigUInt64LE(BigInt(requestSize), offset) // Ndr64.DataLength + offset += 8 + requestBody.writeBigUInt64LE(BigInt(requestSize), offset) // Ndr64.DataSizeIs + offset += 8 + kmsRequest.copy(requestBody, offset) + } else { + // NDR32 格式: AllocHint(4) + ContextId(2) + Opnum(2) + DataLength(4) + DataSizeIs(4) + Data + const bodySize = 4 + 2 + 2 + 4 + 4 + requestSize + requestBody = Buffer.alloc(bodySize) + let offset = 0 + requestBody.writeUInt32LE(requestSize + 8, offset) // AllocHint + offset += 4 + requestBody.writeUInt16LE(0, offset) // ContextId (NDR32 = 0) + offset += 2 + requestBody.writeUInt16LE(0, offset) // Opnum + offset += 2 + requestBody.writeUInt32LE(requestSize, offset) // Ndr.DataLength + offset += 4 + requestBody.writeUInt32LE(requestSize, offset) // Ndr.DataSizeIs + offset += 4 + kmsRequest.copy(requestBody, offset) + } + + const totalSize = RPC_HEADER_SIZE + requestBody.length + const packet = Buffer.alloc(totalSize) + const currentCallId = callId++ + writeRpcHeader( + packet, + RPC_PT_REQUEST, + RPC_PF_FIRST | RPC_PF_LAST, + totalSize, + currentCallId + ) + requestBody.copy(packet, RPC_HEADER_SIZE) + + await sendData(sock, packet) + + // ── 接收响应 ────────────────────────────────────────────────────────── + + const headerBuf = await recvData(sock, RPC_HEADER_SIZE) + const header = parseRpcHeader(headerBuf) + + // 处理 Fault 响应 + if (header.packetType === RPC_PT_FAULT) { + const bodySize = header.fragLength - RPC_HEADER_SIZE + if (bodySize >= 4) { + const faultBody = await recvData(sock, bodySize) + const faultStatus = faultBody.readUInt32LE(0) + return { status: faultStatus || 1, kmsResponse: null, responseSize: 0 } + } + if (bodySize > 0) await recvData(sock, bodySize) + return { status: 1, kmsResponse: null, responseSize: 0 } + } + + // 验证响应类型 + if (header.packetType !== RPC_PT_RESPONSE) { + const bodySize = header.fragLength - RPC_HEADER_SIZE + if (bodySize > 0) await recvData(sock, bodySize) + return { status: 1, kmsResponse: null, responseSize: 0 } + } + + // 读取完整响应体 + const bodySize = header.fragLength - RPC_HEADER_SIZE + const body = await recvData(sock, bodySize) + + // 解析 NDR 响应头 + // 参考: src/rpc.h 中的 RPC_RESPONSE / RPC_RESPONSE64 结构 + let offset = 0 + const allocHint = body.readUInt32LE(offset) // AllocHint + offset += 4 + const contextId = body.readUInt16LE(offset) // ContextId + offset += 2 + const cancelCount = body.readUInt8(offset) // CancelCount + offset += 1 + offset += 1 // Pad1 + + const responseUsesNDR64 = contextId === 1 + + let dataLength: number + let dataSizeMax: bigint | number + let dataSizeIs: bigint | number + + if (responseUsesNDR64) { + // NDR64 响应: DataLength(8) + DataSizeMax(8) + DataSizeIs(8) + dataLength = Number(body.readBigUInt64LE(offset)) + offset += 8 + dataSizeMax = body.readBigUInt64LE(offset) + offset += 8 + dataSizeIs = body.readBigUInt64LE(offset) + offset += 8 + } else { + // NDR32 响应: DataLength(4) + DataSizeMax(4) + DataSizeIs(4) + dataLength = body.readUInt32LE(offset) + offset += 4 + dataSizeMax = body.readUInt32LE(offset) + offset += 4 + dataSizeIs = body.readUInt32LE(offset) + offset += 4 + } + + // 如果 dataSizeMax 为 0,说明 RPC 调用返回了错误状态 + if (dataSizeMax === 0 || dataSizeMax === BigInt(0)) { + const errorStatus = Number(dataSizeIs) + return { status: errorStatus || 1, kmsResponse: null, responseSize: 0 } + } + + if (dataLength <= 0 || offset + dataLength > body.length) { + return { status: 1, kmsResponse: null, responseSize: 0 } + } + + // 提取 KMS 响应数据 + const kmsResponse = Buffer.from(body.subarray(offset, offset + dataLength)) + offset += dataLength + + // 4 字节对齐填充 + const padBytes = (4 - (dataLength % 4)) % 4 + offset += padBytes + + // 读取 ReturnCode (HRESULT) + let returnCode = 0 + if (offset + 4 <= body.length) { + returnCode = body.readUInt32LE(offset) + } + + if (returnCode !== 0) { + return { status: returnCode, kmsResponse, responseSize: dataLength } + } + + return { status: 0, kmsResponse, responseSize: dataLength } +} diff --git a/node-vlmcs/src/types.ts b/node-vlmcs/src/types.ts index cf2f7726..bc8943f4 100644 --- a/node-vlmcs/src/types.ts +++ b/node-vlmcs/src/types.ts @@ -1,151 +1,151 @@ -/** - * 基础类型定义 — GUID、FILETIME、UCS-2 编码转换 - * - * 参考原版源码: - * - src/types.h (GUID、FILETIME 等基本类型定义) - * - src/helpers.c (GUID 字符串解析、时间转换) - * - src/output.c (GUID 格式化输出) - */ - -// ─── GUID 结构 ────────────────────────────────────────────────────────────── -// 与 C 代码中的 GUID 结构对应: Data1(DWORD) + Data2(WORD) + Data3(WORD) + Data4[8](BYTE) -// 内存中以小端序 (little-endian) 存储,与网络传输格式一致 - -/** GUID 结构体,对应 src/types.h 中的 GUID 定义 */ -export interface GUID { - data1: number // uint32,小端序 - data2: number // uint16,小端序 - data3: number // uint16,小端序 - data4: Buffer // 8 字节,直接存储 -} - -/** PID 缓冲区大小(WCHAR 数量),对应 src/types.h 中的 PID_BUFFER_SIZE */ -export const PID_BUFFER_SIZE = 64 -/** 工作站名缓冲区大小(WCHAR 数量) */ -export const WORKSTATION_NAME_BUFFER = 64 - -// ─── FILETIME 常量 ────────────────────────────────────────────────────────── -// Windows FILETIME: 从 1601-01-01 起的 100 纳秒间隔数(64 位无符号整数) -// Unix 时间戳: 从 1970-01-01 起的秒数 - -/** FILETIME 纪元 (1601-01-01) 与 Unix 纪元 (1970-01-01) 的差值,单位为 100 纳秒 */ -const FILETIME_UNIX_EPOCH_DIFF = 116444736000000000n -/** 每毫秒的 100 纳秒数 */ -const HUNDRED_NS_PER_MS = 10000n - -// ─── GUID 序列化 ──────────────────────────────────────────────────────────── - -/** 将 GUID 结构序列化为 16 字节小端序 Buffer,用于网络传输 */ -export function guidToBuffer(guid: GUID): Buffer { - const buf = Buffer.alloc(16) - buf.writeUInt32LE(guid.data1, 0) - buf.writeUInt16LE(guid.data2, 4) - buf.writeUInt16LE(guid.data3, 6) - guid.data4.copy(buf, 8, 0, 8) - return buf -} - -/** - * 解析 GUID 字符串为小端序结构 - * 格式: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" - * Data1/Data2/Data3 作为十六进制整数解析(内存中小端存储) - * Data4 直接从十六进制字符串取字节(不做字节序转换) - * - * 参考: src/helpers.c 中的 string2UuidLE() - */ -export function stringToGuidLE(str: string): GUID | null { - const re = - /^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i - const m = str.match(re) - if (!m) return null - - const data1 = parseInt(m[1], 16) >>> 0 - const data2 = parseInt(m[2], 16) - const data3 = parseInt(m[3], 16) - const data4 = Buffer.from(m[4] + m[5], 'hex') - - return { data1, data2, data3, data4 } -} - -// ─── FILETIME 转换 ────────────────────────────────────────────────────────── - -/** - * 获取当前时间的 FILETIME 表示(8 字节小端序 Buffer) - * 参考: src/helpers.c 中的 getFileTime() - */ -export function unixTimeToFileTime(): Buffer { - const nowMs = BigInt(Date.now()) - const ft = nowMs * HUNDRED_NS_PER_MS + FILETIME_UNIX_EPOCH_DIFF - const buf = Buffer.alloc(8) - buf.writeBigUInt64LE(ft) - return buf -} - -/** - * 将 8 字节小端序 FILETIME Buffer 转换为 Unix 时间戳(秒) - * 参考: src/output.c 中的时间格式化逻辑 - */ -export function fileTimeToUnixTime(ft: Buffer): number { - const val = ft.readBigUInt64LE(0) - const unixMs = (val - FILETIME_UNIX_EPOCH_DIFF) / HUNDRED_NS_PER_MS - return Number(unixMs) / 1000 -} - -// ─── UCS-2 编码转换 ───────────────────────────────────────────────────────── -// KMS 协议中的字符串使用 UCS-2 LE 编码(每个字符 2 字节,小端序) - -/** - * 将 UTF-8 字符串转换为 UCS-2 LE Buffer,固定长度 maxChars * 2 字节 - * 超出部分截断,不足部分填零 - */ -export function utf8ToUcs2(str: string, maxChars: number): Buffer { - const buf = Buffer.alloc(maxChars * 2) - const truncated = str.slice(0, maxChars) - const encoded = Buffer.from(truncated, 'utf16le') - encoded.copy(buf, 0, 0, Math.min(encoded.length, maxChars * 2)) - return buf -} - -/** - * 将 UCS-2 LE Buffer 转换为 UTF-8 字符串,遇到空终止符 (0x0000) 停止 - * 参考: src/output.c 中 ePID 的解码逻辑 - */ -export function ucs2ToUtf8(buf: Buffer, maxChars: number): string { - const limit = Math.min(buf.length, maxChars * 2) - // 查找空终止符(偶数边界上的两个零字节) - let end = limit - for (let i = 0; i < limit; i += 2) { - if (buf[i] === 0 && buf[i + 1] === 0) { - end = i - break - } - } - return buf.subarray(0, end).toString('utf16le') -} - -// ─── 版本信息 ─────────────────────────────────────────────────────────────── - -/** 版本标识字符串,对应原版的 VERSION 宏 */ -export const VERSION = 'private build' - -// ─── 响应验证结果 ─────────────────────────────────────────────────────────── - -/** - * KMS 响应验证结果 — 对应 src/kms.h 中的 RESPONSE_RESULT - * 每个字段表示一项验证检查是否通过 - */ -export interface ResponseResult { - mask: number // 所有检查结果的位掩码 - hashOK: boolean // 哈希验证通过 - timeStampOK: boolean // 时间戳匹配 - clientMachineIDOK: boolean // 客户端机器 ID 匹配 - versionOK: boolean // 协议版本一致 - ivsOK: boolean // IV(初始化向量)匹配 - decryptSuccess: boolean // 解密成功 - hmacSha256OK: boolean // HMAC-SHA256 验证通过(仅 V6) - pidLengthOK: boolean // PID 长度有效 - rpcOK: boolean // RPC 返回码为零 - ivNotSuspicious: boolean // IV 非可疑(V6 中请求和响应 IV 应不同) - effectiveResponseSize: number // 实际响应大小 - correctResponseSize: number // 预期响应大小 -} +/** + * 基础类型定义 — GUID、FILETIME、UCS-2 编码转换 + * + * 参考原版源码: + * - src/types.h (GUID、FILETIME 等基本类型定义) + * - src/helpers.c (GUID 字符串解析、时间转换) + * - src/output.c (GUID 格式化输出) + */ + +// ─── GUID 结构 ────────────────────────────────────────────────────────────── +// 与 C 代码中的 GUID 结构对应: Data1(DWORD) + Data2(WORD) + Data3(WORD) + Data4[8](BYTE) +// 内存中以小端序 (little-endian) 存储,与网络传输格式一致 + +/** GUID 结构体,对应 src/types.h 中的 GUID 定义 */ +export interface GUID { + data1: number // uint32,小端序 + data2: number // uint16,小端序 + data3: number // uint16,小端序 + data4: Buffer // 8 字节,直接存储 +} + +/** PID 缓冲区大小(WCHAR 数量),对应 src/types.h 中的 PID_BUFFER_SIZE */ +export const PID_BUFFER_SIZE = 64 +/** 工作站名缓冲区大小(WCHAR 数量) */ +export const WORKSTATION_NAME_BUFFER = 64 + +// ─── FILETIME 常量 ────────────────────────────────────────────────────────── +// Windows FILETIME: 从 1601-01-01 起的 100 纳秒间隔数(64 位无符号整数) +// Unix 时间戳: 从 1970-01-01 起的秒数 + +/** FILETIME 纪元 (1601-01-01) 与 Unix 纪元 (1970-01-01) 的差值,单位为 100 纳秒 */ +const FILETIME_UNIX_EPOCH_DIFF = BigInt('116444736000000000') +/** 每毫秒的 100 纳秒数 */ +const HUNDRED_NS_PER_MS = BigInt(10000) + +// ─── GUID 序列化 ──────────────────────────────────────────────────────────── + +/** 将 GUID 结构序列化为 16 字节小端序 Buffer,用于网络传输 */ +export function guidToBuffer(guid: GUID): Buffer { + const buf = Buffer.alloc(16) + buf.writeUInt32LE(guid.data1, 0) + buf.writeUInt16LE(guid.data2, 4) + buf.writeUInt16LE(guid.data3, 6) + guid.data4.copy(buf, 8, 0, 8) + return buf +} + +/** + * 解析 GUID 字符串为小端序结构 + * 格式: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" + * Data1/Data2/Data3 作为十六进制整数解析(内存中小端存储) + * Data4 直接从十六进制字符串取字节(不做字节序转换) + * + * 参考: src/helpers.c 中的 string2UuidLE() + */ +export function stringToGuidLE(str: string): GUID | null { + const re = + /^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i + const m = str.match(re) + if (!m) return null + + const data1 = parseInt(m[1], 16) >>> 0 + const data2 = parseInt(m[2], 16) + const data3 = parseInt(m[3], 16) + const data4 = Buffer.from(m[4] + m[5], 'hex') + + return { data1, data2, data3, data4 } +} + +// ─── FILETIME 转换 ────────────────────────────────────────────────────────── + +/** + * 获取当前时间的 FILETIME 表示(8 字节小端序 Buffer) + * 参考: src/helpers.c 中的 getFileTime() + */ +export function unixTimeToFileTime(): Buffer { + const nowMs = BigInt(Date.now()) + const ft = nowMs * HUNDRED_NS_PER_MS + FILETIME_UNIX_EPOCH_DIFF + const buf = Buffer.alloc(8) + buf.writeBigUInt64LE(ft) + return buf +} + +/** + * 将 8 字节小端序 FILETIME Buffer 转换为 Unix 时间戳(秒) + * 参考: src/output.c 中的时间格式化逻辑 + */ +export function fileTimeToUnixTime(ft: Buffer): number { + const val = ft.readBigUInt64LE(0) + const unixMs = (val - FILETIME_UNIX_EPOCH_DIFF) / HUNDRED_NS_PER_MS + return Number(unixMs) / 1000 +} + +// ─── UCS-2 编码转换 ───────────────────────────────────────────────────────── +// KMS 协议中的字符串使用 UCS-2 LE 编码(每个字符 2 字节,小端序) + +/** + * 将 UTF-8 字符串转换为 UCS-2 LE Buffer,固定长度 maxChars * 2 字节 + * 超出部分截断,不足部分填零 + */ +export function utf8ToUcs2(str: string, maxChars: number): Buffer { + const buf = Buffer.alloc(maxChars * 2) + const truncated = str.slice(0, maxChars) + const encoded = Buffer.from(truncated, 'utf16le') + encoded.copy(buf, 0, 0, Math.min(encoded.length, maxChars * 2)) + return buf +} + +/** + * 将 UCS-2 LE Buffer 转换为 UTF-8 字符串,遇到空终止符 (0x0000) 停止 + * 参考: src/output.c 中 ePID 的解码逻辑 + */ +export function ucs2ToUtf8(buf: Buffer, maxChars: number): string { + const limit = Math.min(buf.length, maxChars * 2) + // 查找空终止符(偶数边界上的两个零字节) + let end = limit + for (let i = 0; i < limit; i += 2) { + if (buf[i] === 0 && buf[i + 1] === 0) { + end = i + break + } + } + return buf.subarray(0, end).toString('utf16le') +} + +// ─── 版本信息 ─────────────────────────────────────────────────────────────── + +/** 版本标识字符串,对应原版的 VERSION 宏 */ +export const VERSION = 'private build' + +// ─── 响应验证结果 ─────────────────────────────────────────────────────────── + +/** + * KMS 响应验证结果 — 对应 src/kms.h 中的 RESPONSE_RESULT + * 每个字段表示一项验证检查是否通过 + */ +export interface ResponseResult { + mask: number // 所有检查结果的位掩码 + hashOK: boolean // 哈希验证通过 + timeStampOK: boolean // 时间戳匹配 + clientMachineIDOK: boolean // 客户端机器 ID 匹配 + versionOK: boolean // 协议版本一致 + ivsOK: boolean // IV(初始化向量)匹配 + decryptSuccess: boolean // 解密成功 + hmacSha256OK: boolean // HMAC-SHA256 验证通过(仅 V6) + pidLengthOK: boolean // PID 长度有效 + rpcOK: boolean // RPC 返回码为零 + ivNotSuspicious: boolean // IV 非可疑(V6 中请求和响应 IV 应不同) + effectiveResponseSize: number // 实际响应大小 + correctResponseSize: number // 预期响应大小 +} diff --git a/package.json b/package.json index 44e69cdb..6dc0ebb9 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "nuxt": "^4.4.2", "nuxt-echarts": "^1.0.1", "oxfmt": "^0.43.0", - "vue": "3.5.31" + "vue": "3.5.31", + "wrangler": "^4.95.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 48807e73..fef4a220 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,6 +47,9 @@ importers: vue: specifier: 3.5.31 version: 3.5.31(typescript@5.9.3) + wrangler: + specifier: ^4.95.0 + version: 4.95.0 node-vlmcs: devDependencies: @@ -216,9 +219,56 @@ packages: resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==} engines: {node: '>=18.0.0'} + '@cloudflare/kv-asset-handler@0.5.0': + resolution: {integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==} + engines: {node: '>=22.0.0'} + + '@cloudflare/unenv-preset@2.16.1': + resolution: {integrity: sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==} + peerDependencies: + unenv: 2.0.0-rc.24 + workerd: '>1.20260305.0 <2.0.0-0' + peerDependenciesMeta: + workerd: + optional: true + + '@cloudflare/workerd-darwin-64@1.20260526.1': + resolution: {integrity: sha512-/pR3GH3gfv0PUp7DjI8v0aAIDOqFwibq4bg5xT7TZgcVdBV/cJQWckdXCMqiRtHiawLwogUX00EIOINkYJ1Zqg==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + + '@cloudflare/workerd-darwin-arm64@1.20260526.1': + resolution: {integrity: sha512-rcyu0iANYfaiezKh3Mcao1O4IIgVfQldxduiL5TZT1sP0NIeRY4YReSTrzPxNnXxSYaIqaqRHMcHbUM/ic4knA==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + + '@cloudflare/workerd-linux-64@1.20260526.1': + resolution: {integrity: sha512-5EZAEnlLwa9oGJRo8Nd3iY5Wcd9ROGNNG90xNIGp8MEjj8v2jTn42NC47fCZKFdnLj3+S+vWEhu1x0GVJnALjA==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + + '@cloudflare/workerd-linux-arm64@1.20260526.1': + resolution: {integrity: sha512-X/YBQXeXFeCN7QTStoWrATEBc9WKl7PIqkw/dQkjyJ72gh3rkLe0+Xkzp3wO7gtxTDQMa7NPGy1W4+sdMf8q1g==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + + '@cloudflare/workerd-windows-64@1.20260526.1': + resolution: {integrity: sha512-R+tqpFFdcfZIljx8fIW9rj9fRTtDgfoA2yonsfAGa6e8snrmr+38mdFHtkRC0D3UyZpn/hOtmXiUBfdX2gMR7Q==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + '@colordx/core@5.0.1': resolution: {integrity: sha512-zFq5Ta9C/G3LfkAQZ8lEMXJM7Y9YfoCSFR3PrYP6AsLElM/0g7RAJ5SS0CLGDr4t2tvebpHK7ZcIJIU+B/dxrQ==} + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + '@csstools/selector-resolve-nested@3.1.0': resolution: {integrity: sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==} engines: {node: '>=18'} @@ -260,6 +310,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.27.3': + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.27.5': resolution: {integrity: sha512-nGsF/4C7uzUj+Nj/4J+Zt0bYQ6bz33Phz8Lb2N80Mti1HjGclTJdXZ+9APC4kLvONbjxN1zfvYNd8FEcbBK/MQ==} engines: {node: '>=18'} @@ -278,6 +334,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.27.3': + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.27.5': resolution: {integrity: sha512-Oeghq+XFgh1pUGd1YKs4DDoxzxkoUkvko+T/IVKwlghKLvvjbGFB3ek8VEDBmNvqhwuL0CQS3cExdzpmUyIrgA==} engines: {node: '>=18'} @@ -296,6 +358,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.27.3': + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.27.5': resolution: {integrity: sha512-Cv781jd0Rfj/paoNrul1/r4G0HLvuFKYh7C9uHZ2Pl8YXstzvCyyeWENTFR9qFnRzNMCjXmsulZuvosDg10Mog==} engines: {node: '>=18'} @@ -314,6 +382,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.27.3': + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.27.5': resolution: {integrity: sha512-nQD7lspbzerlmtNOxYMFAGmhxgzn8Z7m9jgFkh6kpkjsAhZee1w8tJW3ZlW+N9iRePz0oPUDrYrXidCPSImD0Q==} engines: {node: '>=18'} @@ -332,6 +406,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.27.3': + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.27.5': resolution: {integrity: sha512-I+Ya/MgC6rr8oRWGRDF3BXDfP8K1BVUggHqN6VI2lUZLdDi1IM1v2cy0e3lCPbP+pVcK3Tv8cgUhHse1kaNZZw==} engines: {node: '>=18'} @@ -350,6 +430,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.27.3': + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.27.5': resolution: {integrity: sha512-MCjQUtC8wWJn/pIPM7vQaO69BFgwPD1jriEdqwTCKzWjGgkMbcg+M5HzrOhPhuYe1AJjXlHmD142KQf+jnYj8A==} engines: {node: '>=18'} @@ -368,6 +454,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.27.3': + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.27.5': resolution: {integrity: sha512-X6xVS+goSH0UelYXnuf4GHLwpOdc8rgK/zai+dKzBMnncw7BTQIwquOodE7EKvY2UVUetSqyAfyZC1D+oqLQtg==} engines: {node: '>=18'} @@ -386,6 +478,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.27.3': + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.27.5': resolution: {integrity: sha512-233X1FGo3a8x1ekLB6XT69LfZ83vqz+9z3TSEQCTYfMNY880A97nr81KbPcAMl9rmOFp11wO0dP+eB18KU/Ucg==} engines: {node: '>=18'} @@ -404,6 +502,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.27.3': + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.27.5': resolution: {integrity: sha512-euKkilsNOv7x/M1NKsx5znyprbpsRFIzTV6lWziqJch7yWYayfLtZzDxDTl+LSQDJYAjd9TVb/Kt5UKIrj2e4A==} engines: {node: '>=18'} @@ -422,6 +526,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.27.3': + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.27.5': resolution: {integrity: sha512-0wkVrYHG4sdCCN/bcwQ7yYMXACkaHc3UFeaEOwSVW6e5RycMageYAFv+JS2bKLwHyeKVUvtoVH+5/RHq0fgeFw==} engines: {node: '>=18'} @@ -440,6 +550,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.27.3': + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.27.5': resolution: {integrity: sha512-hVRQX4+P3MS36NxOy24v/Cdsimy/5HYePw+tmPqnNN1fxV0bPrFWR6TMqwXPwoTM2VzbkA+4lbHWUKDd5ZDA/w==} engines: {node: '>=18'} @@ -458,6 +574,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.27.3': + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.27.5': resolution: {integrity: sha512-mKqqRuOPALI8nDzhOBmIS0INvZOOFGGg5n1osGIXAx8oersceEbKd4t1ACNTHM3sJBXGFAlEgqM+svzjPot+ZQ==} engines: {node: '>=18'} @@ -476,6 +598,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.27.3': + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.27.5': resolution: {integrity: sha512-EE/QXH9IyaAj1qeuIV5+/GZkBTipgGO782Ff7Um3vPS9cvLhJJeATy4Ggxikz2inZ46KByamMn6GqtqyVjhenA==} engines: {node: '>=18'} @@ -494,6 +622,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.27.3': + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.27.5': resolution: {integrity: sha512-0V2iF1RGxBf1b7/BjurA5jfkl7PtySjom1r6xOK2q9KWw/XCpAdtB6KNMO+9xx69yYfSCRR9FE0TyKfHA2eQMw==} engines: {node: '>=18'} @@ -512,6 +646,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.27.3': + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.27.5': resolution: {integrity: sha512-rYxThBx6G9HN6tFNuvB/vykeLi4VDsm5hE5pVwzqbAjZEARQrWu3noZSfbEnPZ/CRXP3271GyFk/49up2W190g==} engines: {node: '>=18'} @@ -530,6 +670,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.27.3': + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.27.5': resolution: {integrity: sha512-uEP2q/4qgd8goEUc4QIdU/1P2NmEtZ/zX5u3OpLlCGhJIuBIv0s0wr7TB2nBrd3/A5XIdEkkS5ZLF0ULuvaaYQ==} engines: {node: '>=18'} @@ -548,6 +694,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.27.3': + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.27.5': resolution: {integrity: sha512-+Gq47Wqq6PLOOZuBzVSII2//9yyHNKZLuwfzCemqexqOQCSz0zy0O26kIzyp9EMNMK+nZ0tFHBZrCeVUuMs/ew==} engines: {node: '>=18'} @@ -560,6 +712,12 @@ packages: cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.27.3': + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.27.5': resolution: {integrity: sha512-3F/5EG8VHfN/I+W5cO1/SV2H9Q/5r7vcHabMnBqhHK2lTWOh3F8vixNzo8lqxrlmBtZVFpW8pmITHnq54+Tq4g==} engines: {node: '>=18'} @@ -578,6 +736,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.27.3': + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.27.5': resolution: {integrity: sha512-28t+Sj3CPN8vkMOlZotOmDgilQwVvxWZl7b8rxpn73Tt/gCnvrHxQUMng4uu3itdFvrtba/1nHejvxqz8xgEMA==} engines: {node: '>=18'} @@ -596,6 +760,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.27.3': + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.27.5': resolution: {integrity: sha512-Doz/hKtiuVAi9hMsBMpwBANhIZc8l238U2Onko3t2xUp8xtM0ZKdDYHMnm/qPFVthY8KtxkXaocwmMh6VolzMA==} engines: {node: '>=18'} @@ -614,6 +784,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.27.3': + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.27.5': resolution: {integrity: sha512-WfGVaa1oz5A7+ZFPkERIbIhKT4olvGl1tyzTRaB5yoZRLqC0KwaO95FeZtOdQj/oKkjW57KcVF944m62/0GYtA==} engines: {node: '>=18'} @@ -626,6 +802,12 @@ packages: cpu: [arm64] os: [openharmony] + '@esbuild/openharmony-arm64@0.27.3': + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/openharmony-arm64@0.27.5': resolution: {integrity: sha512-Xh+VRuh6OMh3uJ0JkCjI57l+DVe7VRGBYymen8rFPnTVgATBwA6nmToxM2OwTlSvrnWpPKkrQUj93+K9huYC6A==} engines: {node: '>=18'} @@ -644,6 +826,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.27.3': + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.27.5': resolution: {integrity: sha512-aC1gpJkkaUADHuAdQfuVTnqVUTLqqUNhAvEwHwVWcnVVZvNlDPGA0UveZsfXJJ9T6k9Po4eHi3c02gbdwO3g6w==} engines: {node: '>=18'} @@ -662,6 +850,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.27.3': + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.27.5': resolution: {integrity: sha512-0UNx2aavV0fk6UpZcwXFLztA2r/k9jTUa7OW7SAea1VYUhkug99MW1uZeXEnPn5+cHOd0n8myQay6TlFnBR07w==} engines: {node: '>=18'} @@ -680,6 +874,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.27.3': + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.27.5': resolution: {integrity: sha512-5nlJ3AeJWCTSzR7AEqVjT/faWyqKU86kCi1lLmxVqmNR+j4HrYdns+eTGjS/vmrzCIe8inGQckUadvS0+JkKdQ==} engines: {node: '>=18'} @@ -698,6 +898,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.27.3': + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.27.5': resolution: {integrity: sha512-PWypQR+d4FLfkhBIV+/kHsUELAnMpx1bRvvsn3p+/sAERbnCzFrtDRG2Xw5n+2zPxBK2+iaP+vetsRl4Ti7WgA==} engines: {node: '>=18'} @@ -778,6 +984,159 @@ packages: peerDependencies: vue: '>=3' + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@intlify/bundle-utils@11.0.7': resolution: {integrity: sha512-fEO3CJGPymxieGh8BHox7d6stgajDQae7wgpH6YYw7WX+cdW6jTTXyljZqz7OV3JcwlS9M9UHSoO+YwiO56IhA==} engines: {node: '>= 20'} @@ -883,6 +1242,9 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@koa/router@12.0.2': resolution: {integrity: sha512-sYcHglGKTxGF+hQ6x67xDfkE9o+NhVlRHBqq6gLywaMc6CojK/5vFZByphdonKinYlMLkEkacm+HEse9HzwgTA==} engines: {node: '>= 12'} @@ -2024,6 +2386,9 @@ packages: '@poppinss/colors@4.1.6': resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==} + '@poppinss/dumper@0.6.5': + resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==} + '@poppinss/dumper@0.7.0': resolution: {integrity: sha512-0UTYalzk2t6S4rA2uHOz5bSSW2CHdv4vggJI6Alg90yvl0UgXs6XSXpH96OH+bRkX4J/06djv29pqXJ0lq5Kag==} @@ -2639,6 +3004,9 @@ packages: birpc@4.0.0: resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} + blake3-wasm@2.1.5: + resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} + boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -2838,6 +3206,10 @@ packages: cookie-es@3.1.1: resolution: {integrity: sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg==} + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + cookies@0.9.1: resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} engines: {node: '>= 0.8'} @@ -3142,6 +3514,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.27.3: + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.27.5: resolution: {integrity: sha512-zdQoHBjuDqKsvV5OPaWansOwfSQ0Js+Uj9J85TBvj3bFW1JjWTSULMRwdQAc8qMeIScbClxeMK0jlrtB9linhA==} engines: {node: '>=18'} @@ -3863,6 +4240,11 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + miniflare@4.20260526.0: + resolution: {integrity: sha512-JYQ7jPZZWoaaj9jWHb8Ucp6Cu2SbDVqIsAJhumqdzzLkkfq0pYkDeino/sZfW1ixJWPjv/C44zjm9gVJC2izCA==} + engines: {node: '>=22.0.0'} + hasBin: true + minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -4587,6 +4969,26 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rosie-skills-darwin-arm64@0.6.4: + resolution: {integrity: sha512-rn1s5hqFKcxeiDEWWoFa1hdGPshR8TkwHLzy/cBavb9XJNAaUxbe3oQ78W9sQkRHAgRyzJYyk9tw68Qrdnizgg==} + cpu: [arm64] + os: [darwin] + + rosie-skills-freebsd-x64@0.6.4: + resolution: {integrity: sha512-SxCRduPBMtfjkQ+q56Yw9OLA3PyaqoALzt7kER7IDKuUVfM2O/1w8sa5xhTDiCvWkZJixnH5d5Ya6KT+/Mwcng==} + cpu: [x64] + os: [freebsd] + + rosie-skills-linux-x64@0.6.4: + resolution: {integrity: sha512-D9Y9mfu7goB0s0X59uU3hcFeUTef3VbpCIDwFMzyvJrAq3XhRACWBDMHQsHlyWdHxTXPX/ILyW65RXyrJlgqng==} + cpu: [x64] + os: [linux] + + rosie-skills@0.6.4: + resolution: {integrity: sha512-ojfhSiQRdZ2QyWbmKAHOSAUbaLYrTc5zIH7mS1jKoP8KCFSQddwVhMyFqldckTeybTfW3zNcsZzyOTzGTN1SBA==} + engines: {node: '>=18'} + hasBin: true + rou3@0.8.1: resolution: {integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==} @@ -4651,6 +5053,10 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -4954,6 +5360,10 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici@7.24.8: + resolution: {integrity: sha512-6KQ/+QxK49Z/p3HO6E5ZCZWNnCasyZLa5ExaVYyvPxUwKtbCPMKELJOqh7EqOle0t9cH/7d2TaaTRRa6Nhs4YQ==} + engines: {node: '>=20.18.1'} + unenv@2.0.0-rc.24: resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} @@ -5273,6 +5683,21 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + workerd@1.20260526.1: + resolution: {integrity: sha512-IHzymht98p10JH1zzwdCpbViAqw97HrwKl7+KfZeASFMsYSrIsAULWdPn0LRC5FTUzBpamLNyKCCKxbgXHgRHQ==} + engines: {node: '>=16'} + hasBin: true + + wrangler@4.95.0: + resolution: {integrity: sha512-vgXzFVSCdUbeCadgVXvu8fK5tzNm8T9W+7lriyGWZMx0B1+CAdr4d8JTlZszHfgjypRAHmAxb49etZGIRD9pgg==} + engines: {node: '>=22.0.0'} + hasBin: true + peerDependencies: + '@cloudflare/workers-types': ^4.20260526.1 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -5304,6 +5729,18 @@ packages: utf-8-validate: optional: true + ws@8.20.1: + resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + wsl-utils@0.1.0: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} @@ -5363,6 +5800,9 @@ packages: youch-core@0.3.3: resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==} + youch@4.1.0-beta.10: + resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} + youch@4.1.1: resolution: {integrity: sha512-mxW3qiSnl+GRxXsaUMzv2Mbada1Y8CDltET9UxejDQe6DBYlSekghl5U5K0ReAikcHDi0G1vKZEmmo/NWAGKLA==} @@ -5584,8 +6024,35 @@ snapshots: '@cloudflare/kv-asset-handler@0.4.2': {} + '@cloudflare/kv-asset-handler@0.5.0': {} + + '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260526.1)': + dependencies: + unenv: 2.0.0-rc.24 + optionalDependencies: + workerd: 1.20260526.1 + + '@cloudflare/workerd-darwin-64@1.20260526.1': + optional: true + + '@cloudflare/workerd-darwin-arm64@1.20260526.1': + optional: true + + '@cloudflare/workerd-linux-64@1.20260526.1': + optional: true + + '@cloudflare/workerd-linux-arm64@1.20260526.1': + optional: true + + '@cloudflare/workerd-windows-64@1.20260526.1': + optional: true + '@colordx/core@5.0.1': {} + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.1)': dependencies: postcss-selector-parser: 7.1.1 @@ -5629,6 +6096,9 @@ snapshots: '@esbuild/aix-ppc64@0.25.12': optional: true + '@esbuild/aix-ppc64@0.27.3': + optional: true + '@esbuild/aix-ppc64@0.27.5': optional: true @@ -5638,6 +6108,9 @@ snapshots: '@esbuild/android-arm64@0.25.12': optional: true + '@esbuild/android-arm64@0.27.3': + optional: true + '@esbuild/android-arm64@0.27.5': optional: true @@ -5647,6 +6120,9 @@ snapshots: '@esbuild/android-arm@0.25.12': optional: true + '@esbuild/android-arm@0.27.3': + optional: true + '@esbuild/android-arm@0.27.5': optional: true @@ -5656,6 +6132,9 @@ snapshots: '@esbuild/android-x64@0.25.12': optional: true + '@esbuild/android-x64@0.27.3': + optional: true + '@esbuild/android-x64@0.27.5': optional: true @@ -5665,6 +6144,9 @@ snapshots: '@esbuild/darwin-arm64@0.25.12': optional: true + '@esbuild/darwin-arm64@0.27.3': + optional: true + '@esbuild/darwin-arm64@0.27.5': optional: true @@ -5674,6 +6156,9 @@ snapshots: '@esbuild/darwin-x64@0.25.12': optional: true + '@esbuild/darwin-x64@0.27.3': + optional: true + '@esbuild/darwin-x64@0.27.5': optional: true @@ -5683,6 +6168,9 @@ snapshots: '@esbuild/freebsd-arm64@0.25.12': optional: true + '@esbuild/freebsd-arm64@0.27.3': + optional: true + '@esbuild/freebsd-arm64@0.27.5': optional: true @@ -5692,6 +6180,9 @@ snapshots: '@esbuild/freebsd-x64@0.25.12': optional: true + '@esbuild/freebsd-x64@0.27.3': + optional: true + '@esbuild/freebsd-x64@0.27.5': optional: true @@ -5701,6 +6192,9 @@ snapshots: '@esbuild/linux-arm64@0.25.12': optional: true + '@esbuild/linux-arm64@0.27.3': + optional: true + '@esbuild/linux-arm64@0.27.5': optional: true @@ -5710,6 +6204,9 @@ snapshots: '@esbuild/linux-arm@0.25.12': optional: true + '@esbuild/linux-arm@0.27.3': + optional: true + '@esbuild/linux-arm@0.27.5': optional: true @@ -5719,6 +6216,9 @@ snapshots: '@esbuild/linux-ia32@0.25.12': optional: true + '@esbuild/linux-ia32@0.27.3': + optional: true + '@esbuild/linux-ia32@0.27.5': optional: true @@ -5728,6 +6228,9 @@ snapshots: '@esbuild/linux-loong64@0.25.12': optional: true + '@esbuild/linux-loong64@0.27.3': + optional: true + '@esbuild/linux-loong64@0.27.5': optional: true @@ -5737,6 +6240,9 @@ snapshots: '@esbuild/linux-mips64el@0.25.12': optional: true + '@esbuild/linux-mips64el@0.27.3': + optional: true + '@esbuild/linux-mips64el@0.27.5': optional: true @@ -5746,6 +6252,9 @@ snapshots: '@esbuild/linux-ppc64@0.25.12': optional: true + '@esbuild/linux-ppc64@0.27.3': + optional: true + '@esbuild/linux-ppc64@0.27.5': optional: true @@ -5755,6 +6264,9 @@ snapshots: '@esbuild/linux-riscv64@0.25.12': optional: true + '@esbuild/linux-riscv64@0.27.3': + optional: true + '@esbuild/linux-riscv64@0.27.5': optional: true @@ -5764,6 +6276,9 @@ snapshots: '@esbuild/linux-s390x@0.25.12': optional: true + '@esbuild/linux-s390x@0.27.3': + optional: true + '@esbuild/linux-s390x@0.27.5': optional: true @@ -5773,12 +6288,18 @@ snapshots: '@esbuild/linux-x64@0.25.12': optional: true + '@esbuild/linux-x64@0.27.3': + optional: true + '@esbuild/linux-x64@0.27.5': optional: true '@esbuild/netbsd-arm64@0.25.12': optional: true + '@esbuild/netbsd-arm64@0.27.3': + optional: true + '@esbuild/netbsd-arm64@0.27.5': optional: true @@ -5788,6 +6309,9 @@ snapshots: '@esbuild/netbsd-x64@0.25.12': optional: true + '@esbuild/netbsd-x64@0.27.3': + optional: true + '@esbuild/netbsd-x64@0.27.5': optional: true @@ -5797,6 +6321,9 @@ snapshots: '@esbuild/openbsd-arm64@0.25.12': optional: true + '@esbuild/openbsd-arm64@0.27.3': + optional: true + '@esbuild/openbsd-arm64@0.27.5': optional: true @@ -5806,12 +6333,18 @@ snapshots: '@esbuild/openbsd-x64@0.25.12': optional: true + '@esbuild/openbsd-x64@0.27.3': + optional: true + '@esbuild/openbsd-x64@0.27.5': optional: true '@esbuild/openharmony-arm64@0.25.12': optional: true + '@esbuild/openharmony-arm64@0.27.3': + optional: true + '@esbuild/openharmony-arm64@0.27.5': optional: true @@ -5821,6 +6354,9 @@ snapshots: '@esbuild/sunos-x64@0.25.12': optional: true + '@esbuild/sunos-x64@0.27.3': + optional: true + '@esbuild/sunos-x64@0.27.5': optional: true @@ -5830,6 +6366,9 @@ snapshots: '@esbuild/win32-arm64@0.25.12': optional: true + '@esbuild/win32-arm64@0.27.3': + optional: true + '@esbuild/win32-arm64@0.27.5': optional: true @@ -5839,6 +6378,9 @@ snapshots: '@esbuild/win32-ia32@0.25.12': optional: true + '@esbuild/win32-ia32@0.27.3': + optional: true + '@esbuild/win32-ia32@0.27.5': optional: true @@ -5848,6 +6390,9 @@ snapshots: '@esbuild/win32-x64@0.25.12': optional: true + '@esbuild/win32-x64@0.27.3': + optional: true + '@esbuild/win32-x64@0.27.5': optional: true @@ -5932,6 +6477,102 @@ snapshots: '@iconify/types': 2.0.0 vue: 3.5.31(typescript@5.9.3) + '@img/colour@1.1.0': {} + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.9.1 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + '@intlify/bundle-utils@11.0.7(vue-i18n@11.3.0(vue@3.5.31(typescript@5.9.3)))': dependencies: '@intlify/message-compiler': 11.3.0 @@ -6050,6 +6691,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + '@koa/router@12.0.2': dependencies: debug: 4.4.3 @@ -7065,6 +7711,12 @@ snapshots: dependencies: kleur: 4.1.5 + '@poppinss/dumper@0.6.5': + dependencies: + '@poppinss/colors': 4.1.6 + '@sindresorhus/is': 7.2.0 + supports-color: 10.2.2 + '@poppinss/dumper@0.7.0': dependencies: '@poppinss/colors': 4.1.6 @@ -7672,6 +8324,8 @@ snapshots: birpc@4.0.0: {} + blake3-wasm@2.1.5: {} + boolbase@1.0.0: {} brace-expansion@1.1.13: @@ -7877,6 +8531,8 @@ snapshots: cookie-es@3.1.1: {} + cookie@1.1.1: {} + cookies@0.9.1: dependencies: depd: 2.0.0 @@ -8178,6 +8834,35 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 + esbuild@0.27.3: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.3 + '@esbuild/android-arm': 0.27.3 + '@esbuild/android-arm64': 0.27.3 + '@esbuild/android-x64': 0.27.3 + '@esbuild/darwin-arm64': 0.27.3 + '@esbuild/darwin-x64': 0.27.3 + '@esbuild/freebsd-arm64': 0.27.3 + '@esbuild/freebsd-x64': 0.27.3 + '@esbuild/linux-arm': 0.27.3 + '@esbuild/linux-arm64': 0.27.3 + '@esbuild/linux-ia32': 0.27.3 + '@esbuild/linux-loong64': 0.27.3 + '@esbuild/linux-mips64el': 0.27.3 + '@esbuild/linux-ppc64': 0.27.3 + '@esbuild/linux-riscv64': 0.27.3 + '@esbuild/linux-s390x': 0.27.3 + '@esbuild/linux-x64': 0.27.3 + '@esbuild/netbsd-arm64': 0.27.3 + '@esbuild/netbsd-x64': 0.27.3 + '@esbuild/openbsd-arm64': 0.27.3 + '@esbuild/openbsd-x64': 0.27.3 + '@esbuild/openharmony-arm64': 0.27.3 + '@esbuild/sunos-x64': 0.27.3 + '@esbuild/win32-arm64': 0.27.3 + '@esbuild/win32-ia32': 0.27.3 + '@esbuild/win32-x64': 0.27.3 + esbuild@0.27.5: optionalDependencies: '@esbuild/aix-ppc64': 0.27.5 @@ -8974,6 +9659,18 @@ snapshots: mimic-fn@4.0.0: {} + miniflare@4.20260526.0: + dependencies: + '@cspotcode/source-map-support': 0.8.1 + sharp: 0.34.5 + undici: 7.24.8 + workerd: 1.20260526.1 + ws: 8.20.1 + youch: 4.1.0-beta.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + minimatch@10.2.5: dependencies: brace-expansion: 5.0.5 @@ -10032,6 +10729,21 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.60.1 fsevents: 2.3.3 + rosie-skills-darwin-arm64@0.6.4: + optional: true + + rosie-skills-freebsd-x64@0.6.4: + optional: true + + rosie-skills-linux-x64@0.6.4: + optional: true + + rosie-skills@0.6.4: + optionalDependencies: + rosie-skills-darwin-arm64: 0.6.4 + rosie-skills-freebsd-x64: 0.6.4 + rosie-skills-linux-x64: 0.6.4 + rou3@0.8.1: {} run-applescript@7.1.0: {} @@ -10099,6 +10811,37 @@ snapshots: setprototypeof@1.2.0: {} + sharp@0.34.5: + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.7.4 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -10447,6 +11190,8 @@ snapshots: undici-types@6.21.0: {} + undici@7.24.8: {} + unenv@2.0.0-rc.24: dependencies: pathe: 2.0.3 @@ -10730,6 +11475,31 @@ snapshots: word-wrap@1.2.5: {} + workerd@1.20260526.1: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20260526.1 + '@cloudflare/workerd-darwin-arm64': 1.20260526.1 + '@cloudflare/workerd-linux-64': 1.20260526.1 + '@cloudflare/workerd-linux-arm64': 1.20260526.1 + '@cloudflare/workerd-windows-64': 1.20260526.1 + + wrangler@4.95.0: + dependencies: + '@cloudflare/kv-asset-handler': 0.5.0 + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260526.1) + blake3-wasm: 2.1.5 + esbuild: 0.27.3 + miniflare: 4.20260526.0 + path-to-regexp: 6.3.0 + rosie-skills: 0.6.4 + unenv: 2.0.0-rc.24 + workerd: 1.20260526.1 + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -10758,6 +11528,8 @@ snapshots: ws@8.20.0: {} + ws@8.20.1: {} + wsl-utils@0.1.0: dependencies: is-wsl: 3.1.1 @@ -10815,6 +11587,14 @@ snapshots: '@poppinss/exception': 1.2.3 error-stack-parser-es: 1.0.5 + youch@4.1.0-beta.10: + dependencies: + '@poppinss/colors': 4.1.6 + '@poppinss/dumper': 0.6.5 + '@speed-highlight/core': 1.2.15 + cookie: 1.1.1 + youch-core: 0.3.3 + youch@4.1.1: dependencies: '@poppinss/colors': 4.1.6 From 79a75e4583c83319007b70816253beaca241722e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E7=BA=B8=E5=BF=98=E5=BF=A7?= Date: Mon, 1 Jun 2026 16:20:21 +0800 Subject: [PATCH 05/19] =?UTF-8?q?feat:=20=E9=9B=86=E6=88=90=20Arco=20Desig?= =?UTF-8?q?n=20=E7=BB=84=E4=BB=B6=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/AppHeader.vue | 314 +++++----- app/components/CommonActivate.vue | 2 +- app/components/CommonTips.vue | 166 ++--- app/pages/activate.vue | 374 ++++++------ app/pages/check/index.vue | 966 +++++++++++++++--------------- app/pages/index.vue | 346 +++++------ app/plugins/arco-design.ts | 5 + nuxt.config.ts | 11 +- package.json | 2 +- pnpm-lock.yaml | 20 +- 10 files changed, 1101 insertions(+), 1105 deletions(-) create mode 100644 app/plugins/arco-design.ts diff --git a/app/components/AppHeader.vue b/app/components/AppHeader.vue index 60d4ad78..278fee45 100644 --- a/app/components/AppHeader.vue +++ b/app/components/AppHeader.vue @@ -1,157 +1,157 @@ - - - + + + diff --git a/app/components/CommonActivate.vue b/app/components/CommonActivate.vue index 0c8193ff..1dae499a 100644 --- a/app/components/CommonActivate.vue +++ b/app/components/CommonActivate.vue @@ -70,7 +70,7 @@ const { copy, copied } = useClipboard({ diff --git a/app/components/CommonTips.vue b/app/components/CommonTips.vue index 9486c21f..ba2634da 100644 --- a/app/components/CommonTips.vue +++ b/app/components/CommonTips.vue @@ -1,83 +1,83 @@ - - - + + + diff --git a/app/pages/activate.vue b/app/pages/activate.vue index d2b25221..dbd65434 100644 --- a/app/pages/activate.vue +++ b/app/pages/activate.vue @@ -1,187 +1,187 @@ - - - + + + diff --git a/app/pages/check/index.vue b/app/pages/check/index.vue index 759f0744..d86ec69d 100644 --- a/app/pages/check/index.vue +++ b/app/pages/check/index.vue @@ -1,483 +1,483 @@ - - - + + + diff --git a/app/pages/index.vue b/app/pages/index.vue index 060b027f..50103d71 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -1,173 +1,173 @@ - - - + + + diff --git a/app/plugins/arco-design.ts b/app/plugins/arco-design.ts new file mode 100644 index 00000000..21e9ef16 --- /dev/null +++ b/app/plugins/arco-design.ts @@ -0,0 +1,5 @@ +import ArcoVue from '@arco-design/web-vue' + +export default defineNuxtPlugin(nuxtApp => { + nuxtApp.vueApp.use(ArcoVue) +}) diff --git a/nuxt.config.ts b/nuxt.config.ts index eaa39d67..0f31238e 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -19,6 +19,12 @@ export default defineNuxtConfig({ binding: 'KV' } }, + devStorage: { + data: { + driver: 'fs', + base: './.data/kv' + } + }, cloudflare: { deployConfig: true, wrangler: { @@ -71,9 +77,8 @@ export default defineNuxtConfig({ cors: true } }, - css: ['~/assets/css/main.css'], + css: ['@arco-design/web-vue/dist/arco.css', '~/assets/css/main.css'], modules: [ - 'arco-design-nuxt-module', '@nuxt/icon', '@nuxtjs/tailwindcss', '@nuxtjs/i18n', @@ -172,7 +177,7 @@ export default defineNuxtConfig({ icon: { customCollections: [ { - prefix: 'icons', + prefix: 'local', dir: './app/assets/icons' } ] diff --git a/package.json b/package.json index 6dc0ebb9..d159dd02 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@nuxtjs/i18n": "^10.2.4", "@nuxtjs/tailwindcss": "^6.14.0", "@vueuse/nuxt": "14.2.1", - "arco-design-nuxt-module": "^0.2.1", + "@arco-design/web-vue": "2.56.3", "echarts": "^6.0.0", "node-vlmcs": "workspace:*", "nuxt": "^4.4.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fef4a220..1d00fcca 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@arco-design/web-vue': + specifier: 2.56.3 + version: 2.56.3(vue@3.5.31(typescript@5.9.3)) '@iconify-json/flag': specifier: ^1.2.11 version: 1.2.11 @@ -26,9 +29,6 @@ importers: '@vueuse/nuxt': specifier: 14.2.1 version: 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) - arco-design-nuxt-module: - specifier: ^0.2.1 - version: 0.2.1(@arco-design/web-vue@2.56.3(vue@3.5.31(typescript@5.9.3)))(magicast@0.5.2) echarts: specifier: ^6.0.0 version: 6.0.0 @@ -2885,11 +2885,6 @@ packages: resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} engines: {node: '>= 14'} - arco-design-nuxt-module@0.2.1: - resolution: {integrity: sha512-Okgc20uHOO8SkZRZzKXX9EkW3BsQEgx74RIhoN4bk0mJNOR2PTjEi6YGGcPWY+Kg/g+HQ9TJqt11Rd2J4SYo4Q==} - peerDependencies: - '@arco-design/web-vue': '>=2' - arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -8230,15 +8225,6 @@ snapshots: - bare-buffer - react-native-b4a - arco-design-nuxt-module@0.2.1(@arco-design/web-vue@2.56.3(vue@3.5.31(typescript@5.9.3)))(magicast@0.5.2): - dependencies: - '@arco-design/web-vue': 2.56.3(vue@3.5.31(typescript@5.9.3)) - '@nuxt/kit': 3.21.2(magicast@0.5.2) - magic-string: 0.30.21 - unplugin: 2.3.11 - transitivePeerDependencies: - - magicast - arg@5.0.2: {} argparse@2.0.1: {} From b0ce70484552f7d85b5234aec38412b6fe08d218 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E7=BA=B8=E5=BF=98=E5=BF=A7?= <54543761+ikxin@users.noreply.github.com> Date: Mon, 1 Jun 2026 23:09:09 +0800 Subject: [PATCH 06/19] =?UTF-8?q?feat:=20=E5=85=BC=E5=AE=B9=E5=A4=9A?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=20Storage=20=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nuxt.config.ts | 37 ++++++++++++++++++---------- package.json | 3 ++- pnpm-lock.yaml | 65 +++++++++++++++++++++++++++++++------------------- vercel.json | 2 +- 4 files changed, 69 insertions(+), 38 deletions(-) diff --git a/nuxt.config.ts b/nuxt.config.ts index 0f31238e..63d7d7be 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -1,5 +1,29 @@ // https://nuxt.com/docs/api/configuration/nuxt-config +const nitroPreset = + process.env.NITRO_PRESET || process.env.NUXT_NITRO_PRESET || '' +const isCloudflarePreset = + nitroPreset.startsWith('cloudflare') || + process.env.CF_PAGES === '1' || + Boolean(process.env.CLOUDFLARE_ACCOUNT_ID) +const isVercelPreset = + nitroPreset.startsWith('vercel') || process.env.VERCEL === '1' + +const storage = isCloudflarePreset + ? { + data: { + driver: 'cloudflare-kv-binding', + binding: 'KV' + } + } + : isVercelPreset + ? { + data: { + driver: 'upstash' + } + } + : {} + export default defineNuxtConfig({ compatibilityDate: '2026-05-31', devtools: { enabled: true }, @@ -13,18 +37,7 @@ export default defineNuxtConfig({ scheduledTasks: { '*/10 * * * *': ['monitor'] }, - storage: { - data: { - driver: 'cloudflare-kv-binding', - binding: 'KV' - } - }, - devStorage: { - data: { - driver: 'fs', - base: './.data/kv' - } - }, + storage, cloudflare: { deployConfig: true, wrangler: { diff --git a/package.json b/package.json index d159dd02..db1af623 100644 --- a/package.json +++ b/package.json @@ -14,13 +14,14 @@ "postinstall": "pnpm -C node-vlmcs build && nuxt prepare" }, "dependencies": { + "@arco-design/web-vue": "2.56.3", "@iconify-json/flag": "^1.2.11", "@nuxt/icon": "^2.2.1", "@nuxtjs/color-mode": "^4.0.0", "@nuxtjs/i18n": "^10.2.4", "@nuxtjs/tailwindcss": "^6.14.0", + "@upstash/redis": "^1.38.0", "@vueuse/nuxt": "14.2.1", - "@arco-design/web-vue": "2.56.3", "echarts": "^6.0.0", "node-vlmcs": "workspace:*", "nuxt": "^4.4.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1d00fcca..3635826f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,13 +22,16 @@ importers: version: 4.0.0(magicast@0.5.2) '@nuxtjs/i18n': specifier: ^10.2.4 - version: 10.2.4(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@vue/compiler-dom@3.5.31)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3)) + version: 10.2.4(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-dom@3.5.31)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3)) '@nuxtjs/tailwindcss': specifier: ^6.14.0 version: 6.14.0(magicast@0.5.2)(tsx@4.19.2)(yaml@2.8.3) + '@upstash/redis': + specifier: ^1.38.0 + version: 1.38.0 '@vueuse/nuxt': specifier: 14.2.1 - version: 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) + version: 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) echarts: specifier: ^6.0.0 version: 6.0.0 @@ -37,7 +40,7 @@ importers: version: link:node-vlmcs nuxt: specifier: ^4.4.2 - version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3) + version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3) nuxt-echarts: specifier: ^1.0.1 version: 1.0.1(echarts@6.0.0)(magicast@0.5.2)(vue-echarts@8.0.1(echarts@6.0.0)(vue@3.5.31(typescript@5.9.3))) @@ -1248,7 +1251,6 @@ packages: '@koa/router@12.0.2': resolution: {integrity: sha512-sYcHglGKTxGF+hQ6x67xDfkE9o+NhVlRHBqq6gLywaMc6CojK/5vFZByphdonKinYlMLkEkacm+HEse9HzwgTA==} engines: {node: '>= 12'} - deprecated: Please upgrade to v15 or higher. All reported bugs in this version are fixed in newer releases, dependencies have been updated, and security has been improved. '@kwsites/file-exists@1.1.1': resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} @@ -2687,6 +2689,14 @@ packages: peerDependencies: vue: '>=3.5.18' + '@upstash/redis@1.38.0': + resolution: {integrity: sha512-wu+dZBptlLy0+MCUEoHmzrY/TnmgDey3+c7EbIGwrLqAvkP8yi5MWZHYGIFtAygmL4Bkz2TdFu+eU0vFPncIcg==} + + '@vercel/kv@3.0.0': + resolution: {integrity: sha512-pKT8fRnfyYk2MgvyB6fn6ipJPCdfZwiKDdw7vB+HL50rjboEBHDVBEcnwfkEpVSp2AjNtoaOUH7zG+bVC/rvSg==} + engines: {node: '>=14.6'} + deprecated: 'Vercel KV is deprecated. If you had an existing KV store, it should have moved to Upstash Redis which you will see under Vercel Integrations. For new projects, install a Redis integration from Vercel Marketplace: https://vercel.com/marketplace?category=storage&search=redis' + '@vercel/nft@1.5.0': resolution: {integrity: sha512-IWTDeIoWhQ7ZtRO/JRKH+jhmeQvZYhtGPmzw/QGDY+wDCQqfm25P9yIdoAFagu4fWsK4IwZXDFIjrmp5rRm/sA==} engines: {node: '>=20'} @@ -3782,7 +3792,6 @@ packages: glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@13.0.6: @@ -3791,7 +3800,6 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me global-directory@4.0.1: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} @@ -3899,7 +3907,6 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.3: resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} @@ -4062,7 +4069,6 @@ packages: keygrip@1.1.0: resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} engines: {node: '>= 0.6'} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -6946,7 +6952,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(@netlify/blobs@9.1.2)(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(srvx@0.11.14)(typescript@5.9.3)': + '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(srvx@0.11.14)(typescript@5.9.3)': dependencies: '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@nuxt/devalue': 2.0.2 @@ -6964,8 +6970,8 @@ snapshots: impound: 1.1.5 klona: 2.0.6 mocked-exports: 0.1.1 - nitropack: 2.13.3(@netlify/blobs@9.1.2)(srvx@0.11.14) - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3) + nitropack: 2.13.3(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(srvx@0.11.14) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3) nypm: 0.6.5 ohash: 2.0.11 pathe: 2.0.3 @@ -6974,7 +6980,7 @@ snapshots: std-env: 4.0.0 ufo: 1.6.3 unctx: 2.5.0 - unstorage: 1.17.5(@netlify/blobs@9.1.2)(db0@0.3.4)(ioredis@5.10.1) + unstorage: 1.17.5(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.10.1) vue: 3.5.31(typescript@5.9.3) vue-bundle-renderer: 2.2.0 vue-devtools-stub: 0.1.0 @@ -7033,7 +7039,7 @@ snapshots: rc9: 3.0.1 std-env: 4.0.0 - '@nuxt/vite-builder@4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@22.15.19)(eslint@9.39.4(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))(yaml@2.8.3)': + '@nuxt/vite-builder@4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@22.15.19)(eslint@9.39.4(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))(yaml@2.8.3)': dependencies: '@nuxt/kit': 4.4.2(magicast@0.5.2) '@rollup/plugin-replace': 6.0.3(rollup@4.60.1) @@ -7051,7 +7057,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.2 mocked-exports: 0.1.1 - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3) nypm: 0.6.5 pathe: 2.0.3 pkg-types: 2.3.0 @@ -7103,7 +7109,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxtjs/i18n@10.2.4(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@vue/compiler-dom@3.5.31)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))': + '@nuxtjs/i18n@10.2.4(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-dom@3.5.31)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))': dependencies: '@intlify/core': 11.3.0 '@intlify/h3': 0.7.4 @@ -7129,7 +7135,7 @@ snapshots: ufo: 1.6.3 unplugin: 2.3.11 unrouting: 0.1.7 - unstorage: 1.17.5(@netlify/blobs@9.1.2)(db0@0.3.4)(ioredis@5.10.1) + unstorage: 1.17.5(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.10.1) vue-i18n: 11.3.0(vue@3.5.31(typescript@5.9.3)) vue-router: 5.0.4(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@5.9.3)) transitivePeerDependencies: @@ -7944,6 +7950,15 @@ snapshots: unhead: 2.1.12 vue: 3.5.31(typescript@5.9.3) + '@upstash/redis@1.38.0': + dependencies: + uncrypto: 0.1.3 + + '@vercel/kv@3.0.0': + dependencies: + '@upstash/redis': 1.38.0 + optional: true + '@vercel/nft@1.5.0(rollup@4.60.1)': dependencies: '@mapbox/node-pre-gyp': 2.0.3 @@ -8104,13 +8119,13 @@ snapshots: '@vueuse/metadata@14.2.1': {} - '@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))': + '@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))': dependencies: '@nuxt/kit': 4.4.2(magicast@0.5.2) '@vueuse/core': 14.2.1(vue@3.5.31(typescript@5.9.3)) '@vueuse/metadata': 14.2.1 local-pkg: 1.1.2 - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3) vue: 3.5.31(typescript@5.9.3) transitivePeerDependencies: - magicast @@ -9718,7 +9733,7 @@ snapshots: qs: 6.15.0 optional: true - nitropack@2.13.3(@netlify/blobs@9.1.2)(srvx@0.11.14): + nitropack@2.13.3(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(srvx@0.11.14): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@rollup/plugin-alias': 6.0.0(rollup@4.60.1) @@ -9785,7 +9800,7 @@ snapshots: unenv: 2.0.0-rc.24 unimport: 6.0.2 unplugin-utils: 0.3.1 - unstorage: 1.17.5(@netlify/blobs@9.1.2)(db0@0.3.4)(ioredis@5.10.1) + unstorage: 1.17.5(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.10.1) untyped: 2.0.0 unwasm: 0.5.3 youch: 4.1.1 @@ -9879,16 +9894,16 @@ snapshots: transitivePeerDependencies: - magicast - nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3): + nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3): dependencies: '@dxup/nuxt': 0.4.0(magicast@0.5.2)(typescript@5.9.3) '@nuxt/cli': 3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2) '@nuxt/devtools': 3.2.4(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) '@nuxt/kit': 4.4.2(magicast@0.5.2) - '@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(@netlify/blobs@9.1.2)(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(srvx@0.11.14)(typescript@5.9.3) + '@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(srvx@0.11.14)(typescript@5.9.3) '@nuxt/schema': 4.4.2 '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.4.2(magicast@0.5.2)) - '@nuxt/vite-builder': 4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@22.15.19)(eslint@9.39.4(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))(yaml@2.8.3) + '@nuxt/vite-builder': 4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@22.15.19)(eslint@9.39.4(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))(yaml@2.8.3) '@unhead/vue': 2.1.12(vue@3.5.31(typescript@5.9.3)) '@vue/shared': 3.5.31 c12: 3.3.4(magicast@0.5.2) @@ -11235,7 +11250,7 @@ snapshots: escape-string-regexp: 5.0.0 ufo: 1.6.3 - unstorage@1.17.5(@netlify/blobs@9.1.2)(db0@0.3.4)(ioredis@5.10.1): + unstorage@1.17.5(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.10.1): dependencies: anymatch: 3.1.3 chokidar: 5.0.0 @@ -11247,6 +11262,8 @@ snapshots: ufo: 1.6.3 optionalDependencies: '@netlify/blobs': 9.1.2 + '@upstash/redis': 1.38.0 + '@vercel/kv': 3.0.0 db0: 0.3.4 ioredis: 5.10.1 diff --git a/vercel.json b/vercel.json index 3cdb1562..8870a981 100644 --- a/vercel.json +++ b/vercel.json @@ -1,3 +1,3 @@ { - "buildCommand": "nuxt generate" + "buildCommand": "nuxt build" } From c7b8e36c59163b8148bea6733d936cae1f10749c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E7=BA=B8=E5=BF=98=E5=BF=A7?= Date: Tue, 2 Jun 2026 17:15:38 +0800 Subject: [PATCH 07/19] =?UTF-8?q?chore:=20=E5=A4=9A=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=BD=BF=E7=94=A8=20Cloudflare=20KV=20?= =?UTF-8?q?=E5=AD=98=E5=82=A8=E7=9B=91=E6=8E=A7=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 9 - .env.example | 4 + nuxt.config.ts | 37 +-- package.json | 8 +- pnpm-lock.yaml | 576 +++++++++++++++++++++++++++----------------- pnpm-workspace.yaml | 4 + 6 files changed, 371 insertions(+), 267 deletions(-) delete mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 9d08a1a8..00000000 --- a/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true diff --git a/.env.example b/.env.example index 9640bba2..4c302de9 100644 --- a/.env.example +++ b/.env.example @@ -2,3 +2,7 @@ NUXT_PUBLIC_API_URL=https://kms.ikxin.com NUXT_PUBLIC_I18N_BASE_URL=https://kms.ikxin.com NUXT_MONITOR_LIST=kms.org.cn,win.freekms.cn NUXT_MONITOR_INTERVAL=10 + +CLOUDFLARE_ACCOUNT_ID= +CLOUDFLARE_KV_NAMESPACE_ID= +CLOUDFLARE_API_TOKEN= diff --git a/nuxt.config.ts b/nuxt.config.ts index 63d7d7be..8e022b19 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -1,25 +1,15 @@ // https://nuxt.com/docs/api/configuration/nuxt-config -const nitroPreset = - process.env.NITRO_PRESET || process.env.NUXT_NITRO_PRESET || '' -const isCloudflarePreset = - nitroPreset.startsWith('cloudflare') || - process.env.CF_PAGES === '1' || - Boolean(process.env.CLOUDFLARE_ACCOUNT_ID) -const isVercelPreset = - nitroPreset.startsWith('vercel') || process.env.VERCEL === '1' - -const storage = isCloudflarePreset - ? { - data: { - driver: 'cloudflare-kv-binding', - binding: 'KV' - } - } - : isVercelPreset +const storage = + process.env.CLOUDFLARE_ACCOUNT_ID && + process.env.CLOUDFLARE_KV_NAMESPACE_ID && + process.env.CLOUDFLARE_API_TOKEN ? { data: { - driver: 'upstash' + driver: 'cloudflare-kv-http', + accountId: process.env.CLOUDFLARE_ACCOUNT_ID, + namespaceId: process.env.CLOUDFLARE_KV_NAMESPACE_ID, + apiToken: process.env.CLOUDFLARE_API_TOKEN } } : {} @@ -35,26 +25,17 @@ export default defineNuxtConfig({ tasks: true }, scheduledTasks: { - '*/10 * * * *': ['monitor'] + '* * * * *': ['monitor'] }, storage, cloudflare: { deployConfig: true, wrangler: { - kv_namespaces: [ - { - binding: 'KV', - id: 'bddb55671f0d4ebcaddf268c1134d27e' - } - ], observability: { logs: { enabled: true, invocation_logs: true } - }, - triggers: { - crons: ['*/10 * * * *'] } } } diff --git a/package.json b/package.json index db1af623..72c47896 100644 --- a/package.json +++ b/package.json @@ -14,20 +14,20 @@ "postinstall": "pnpm -C node-vlmcs build && nuxt prepare" }, "dependencies": { - "@arco-design/web-vue": "2.56.3", + "@arco-design/web-vue": "^2.58.0", "@iconify-json/flag": "^1.2.11", "@nuxt/icon": "^2.2.1", "@nuxtjs/color-mode": "^4.0.0", "@nuxtjs/i18n": "^10.2.4", "@nuxtjs/tailwindcss": "^6.14.0", "@upstash/redis": "^1.38.0", - "@vueuse/nuxt": "14.2.1", + "@vueuse/nuxt": "^14.2.1", "echarts": "^6.0.0", "node-vlmcs": "workspace:*", "nuxt": "^4.4.2", "nuxt-echarts": "^1.0.1", - "oxfmt": "^0.43.0", - "vue": "3.5.31", + "oxfmt": "^0.53.0", + "vue": "^3.5.35", "wrangler": "^4.95.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3635826f..ced8133d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,20 +9,20 @@ importers: .: dependencies: '@arco-design/web-vue': - specifier: 2.56.3 - version: 2.56.3(vue@3.5.31(typescript@5.9.3)) + specifier: ^2.58.0 + version: 2.58.0(vue@3.5.35(typescript@5.9.3)) '@iconify-json/flag': specifier: ^1.2.11 version: 1.2.11 '@nuxt/icon': specifier: ^2.2.1 - version: 2.2.1(magicast@0.5.2)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) + version: 2.2.1(magicast@0.5.2)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3)) '@nuxtjs/color-mode': specifier: ^4.0.0 version: 4.0.0(magicast@0.5.2) '@nuxtjs/i18n': specifier: ^10.2.4 - version: 10.2.4(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-dom@3.5.31)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3)) + version: 10.2.4(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-dom@3.5.35)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@5.9.3)(vue@3.5.35(typescript@5.9.3)) '@nuxtjs/tailwindcss': specifier: ^6.14.0 version: 6.14.0(magicast@0.5.2)(tsx@4.19.2)(yaml@2.8.3) @@ -30,8 +30,8 @@ importers: specifier: ^1.38.0 version: 1.38.0 '@vueuse/nuxt': - specifier: 14.2.1 - version: 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) + specifier: ^14.2.1 + version: 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3)) echarts: specifier: ^6.0.0 version: 6.0.0 @@ -43,13 +43,13 @@ importers: version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3) nuxt-echarts: specifier: ^1.0.1 - version: 1.0.1(echarts@6.0.0)(magicast@0.5.2)(vue-echarts@8.0.1(echarts@6.0.0)(vue@3.5.31(typescript@5.9.3))) + version: 1.0.1(echarts@6.0.0)(magicast@0.5.2)(vue-echarts@8.0.1(echarts@6.0.0)(vue@3.5.35(typescript@5.9.3))) oxfmt: - specifier: ^0.43.0 - version: 0.43.0 + specifier: ^0.53.0 + version: 0.53.0 vue: - specifier: 3.5.31 - version: 3.5.31(typescript@5.9.3) + specifier: ^3.5.35 + version: 3.5.35(typescript@5.9.3) wrangler: specifier: ^4.95.0 version: 4.95.0 @@ -75,10 +75,10 @@ packages: '@arco-design/color@0.4.0': resolution: {integrity: sha512-s7p9MSwJgHeL8DwcATaXvWT3m2SigKpxx4JA1BGPHL4gfvaQsmQfrLBDpjOJFJuJ2jG2dMt3R3P8Pm9E65q18g==} - '@arco-design/web-vue@2.56.3': - resolution: {integrity: sha512-D2CPIXRBUPcg37TFsfWROZddCWFZnIwqGpsOhOn2BhmH89UFqtBGpTxyuMdYJEwKNXunp3dVL6V69ZMmJBRPOg==} + '@arco-design/web-vue@2.58.0': + resolution: {integrity: sha512-b1vdPYOmjG5VAkVa7jlVwCb+WynBK+rnKN8zH3yKohpZObZbostRd3HgYNtjjZjGVU3OqR0Yy2FX7ftgF0bcOw==} peerDependencies: - vue: ^3.1.0 + vue: '>=3.1.0' '@babel/code-frame@7.29.0': resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} @@ -150,10 +150,18 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} @@ -167,6 +175,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-syntax-jsx@7.28.6': resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} engines: {node: '>=6.9.0'} @@ -197,6 +210,10 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + '@bomb.sh/tab@0.0.14': resolution: {integrity: sha512-cHMk2LI430MVoX1unTt9oK1iZzQS4CYDz97MSxKLNErW69T43Z2QLFTpdS/3jVOIKrIADWfuxQ+nQNJkNV7E4w==} hasBin: true @@ -954,12 +971,16 @@ packages: '@fastify/busboy@3.2.0': resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': @@ -1282,8 +1303,8 @@ packages: resolution: {integrity: sha512-5XUvZuffe3KetyhbWwd4n2ktd7wraocCYw10tlM+/u/95iAz29GjNiuNxbCD1T6Bn1MyGc4QLVNKOWhzJkVFAw==} engines: {node: ^14.16.0 || >=16.0.0} - '@netlify/open-api@2.52.0': - resolution: {integrity: sha512-QkWQu0vz3uBcxjSslA0N6Njo0x1ndkhEIVEmdwcmxfufX8wA0d9WjiU2sWuHYw11Mrf5pkMUQHvZy+6V4A9TYQ==} + '@netlify/open-api@2.55.0': + resolution: {integrity: sha512-kdjE3leurHQOye6R9iKjFubB69lMNqIpoAtlxELPjex0Lnokd9XctjB0fkSVXyd+hh2xHPa1On/dS0UKGDTkEw==} engines: {node: '>=14.8.0'} '@netlify/runtime-utils@1.3.1': @@ -2040,124 +2061,124 @@ packages: cpu: [x64] os: [win32] - '@oxfmt/binding-android-arm-eabi@0.43.0': - resolution: {integrity: sha512-CgU2s+/9hHZgo0IxVxrbMPrMj+tJ6VM3mD7Mr/4oiz4FNTISLoCvRmB5nk4wAAle045RtRjd86m673jwPyb1OQ==} + '@oxfmt/binding-android-arm-eabi@0.53.0': + resolution: {integrity: sha512-XfVM8AmIovBTKXCt14Op5wbfcoM8418nttd+nhMgM3RAVaJg1MtJc73FyWfUt0oxLyBGVwfniNVUsbV/b3VmPg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.43.0': - resolution: {integrity: sha512-T9OfRwjA/EdYxAqbvR7TtqLv5nIrwPXuCtTwOHtS7aR9uXyn74ZYgzgTo6/ZwvTq9DY4W+DsV09hB2EXgn9EbA==} + '@oxfmt/binding-android-arm64@0.53.0': + resolution: {integrity: sha512-btHDfXckwdf9zgyAVznfZkf+GVyB0I1m1hlvaOMRx2xoyz3hphfPX97s89J3wfCN8QBETLtk4lQUaeOkrMuQOg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.43.0': - resolution: {integrity: sha512-o3i49ZUSJWANzXMAAVY1wnqb65hn4JVzwlRQ5qfcwhRzIA8lGVaud31Q3by5ALHPrksp5QEaKCQF9aAS3TXpZA==} + '@oxfmt/binding-darwin-arm64@0.53.0': + resolution: {integrity: sha512-k2RjMcSTkHjoOlsVGbL35JVzXL+oQco3GHPl/5kjebVF4oHNfE24In8F5isqBh9LBJucycWHKDXdGrCchdWcHQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.43.0': - resolution: {integrity: sha512-vWECzzCFkb0kK6jaHjbtC5sC3adiNWtqawFCxhpvsWlzVeKmv5bNvkB4nux+o4JKWTpHCM57NDK/MeXt44txmA==} + '@oxfmt/binding-darwin-x64@0.53.0': + resolution: {integrity: sha512-65jIBE2H1l5SSs16fmv6/7b6sAx/WpvnsgDhVWK9qSjNFDUro7MPQ6q5UhpY7kl46yltfR046iAnxy/Bzqbiew==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.43.0': - resolution: {integrity: sha512-rgz8JpkKiI/umOf7fl9gwKyQasC8bs5SYHy6g7e4SunfLBY3+8ATcD5caIg8KLGEtKFm5ujKaH8EfjcmnhzTLg==} + '@oxfmt/binding-freebsd-x64@0.53.0': + resolution: {integrity: sha512-oYe1gkz7U49PCYrS9147d2fJZj8mDI4Di6AvlsU5fu9p+Tq8S7qqOMSZjUiVTLX8bXuSA9Lk/tIxuegVjkNYRA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.43.0': - resolution: {integrity: sha512-nWYnF3vIFzT4OM1qL/HSf1Yuj96aBuKWSaObXHSWliwAk2rcj7AWd6Lf7jowEBQMo4wCZVnueIGw/7C4u0KTBQ==} + '@oxfmt/binding-linux-arm-gnueabihf@0.53.0': + resolution: {integrity: sha512-ailB2vLzGi629tymdAb2VYJyEHref7oqGxP+tRBrtRBxQrb6NV55JMT7xtGZ8uTeG2+Y9zojqW4LhJYxQnz9Pg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.43.0': - resolution: {integrity: sha512-sFg+NWJbLfupYTF4WELHAPSnLPOn1jiDZ33Z1jfDnTaA+cC3iB35x0FMMZTFdFOz3icRIArncwCcemJFGXu6TQ==} + '@oxfmt/binding-linux-arm-musleabihf@0.53.0': + resolution: {integrity: sha512-abh4mWBvOvD966sobqF7r103y2yYx7Rb4WGHLOS4+5igGqLbbPxS9aK5+45D6iUY7dWMsk3Muz9a8gUtufvqJA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.43.0': - resolution: {integrity: sha512-MelWqv68tX6wZEILDrTc9yewiGXe7im62+5x0bNXlCYFOZdA+VnYiJfAihbROsZ5fm90p9C3haFrqjj43XnlAA==} + '@oxfmt/binding-linux-arm64-gnu@0.53.0': + resolution: {integrity: sha512-z73PvuhJ8qA+cDbaiqbtopHglA91U4+y5wn2sTJJrnpB957d5P33FEuyP3DQIFd7ofljmDmfVT4G0CVGHZaJWg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-musl@0.43.0': - resolution: {integrity: sha512-ROaWfYh+6BSJ1Arwy5ujijTlwnZetxDxzBpDc1oBR4d7rfrPBqzeyjd5WOudowzQUgyavl2wEpzn1hw3jWcqLA==} + '@oxfmt/binding-linux-arm64-musl@0.53.0': + resolution: {integrity: sha512-I6bhOTroqc3ThrwZ89l2k3ivKuELhdPLbAcJhRNyjWvlgwb0vjRgEnVL1XLx5Jud04/ypNRZBykAWrSk6l/D+g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-ppc64-gnu@0.43.0': - resolution: {integrity: sha512-PJRs/uNxmFipJJ8+SyKHh7Y7VZIKQicqrrBzvfyM5CtKi8D7yZKTwUOZV3ffxmiC2e7l1SDJpkBEOyue5NAFsg==} + '@oxfmt/binding-linux-ppc64-gnu@0.53.0': + resolution: {integrity: sha512-w0p3JzB/PkkQjXALMJMqP9YfP3yq4w6zGsu5kezQmUnxRkN3b/Theg2l/nDgBsOcczxS3gL6Gam5XNAVrO6QJQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.43.0': - resolution: {integrity: sha512-j6biGAgzIhj+EtHXlbNumvwG7XqOIdiU4KgIWRXAEj/iUbHKukKW8eXa4MIwpQwW1YkxovduKtzEAPnjlnAhVQ==} + '@oxfmt/binding-linux-riscv64-gnu@0.53.0': + resolution: {integrity: sha512-mzBhF6k1Yq1K/dqDmVe/AAafnlJfEpx7yfUiksyeWXJk5iSzZqBSxcsa02zIytYgQFRZ7h6WPZfwHg/DoOE1Kw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-musl@0.43.0': - resolution: {integrity: sha512-RYWxAcslKxvy7yri24Xm9cmD0RiANaiEPs007EFG6l9h1ChM69Q5SOzACaCoz4Z9dEplnhhneeBaTWMEdpgIbA==} + '@oxfmt/binding-linux-riscv64-musl@0.53.0': + resolution: {integrity: sha512-AlFCpnRQhogQFzZXWbO6xB6/Udy745L+eQNmDPGg7G/OeWsYmJc4jZYfUN5pQg0reOPWSED2mOQqKZOJM1U8cA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-s390x-gnu@0.43.0': - resolution: {integrity: sha512-DT6Q8zfQQy3jxpezAsBACEHNUUixKSYTwdXeXojNHe4DQOoxjPdjr3Szu6BRNjxLykZM/xMNmp9ElOIyDppwtw==} + '@oxfmt/binding-linux-s390x-gnu@0.53.0': + resolution: {integrity: sha512-XD4ulY4f1DWbuuZXAqxhVn+gdPmrhnmojWtFN78ctVoupmS845fGhsUrk1HZXKQI+iymbaiz9vAjPsghHNQ7Ag==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.43.0': - resolution: {integrity: sha512-R8Yk7iYcuZORXmCfFZClqbDxRZgZ9/HEidUuBNdoX8Ptx07cMePnMVJ/woB84lFIDjh2ROHVaOP40Ds3rBXFqg==} + '@oxfmt/binding-linux-x64-gnu@0.53.0': + resolution: {integrity: sha512-xg8KWX0QnxmYWRe60CgHYWXI0ZOtBbqTsXvWiWrcl2XUHJ3fht2QerOk2iWvylzX3zNT2GpvBRxGoR4d3sxPRQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-musl@0.43.0': - resolution: {integrity: sha512-F2YYqyvnQNvi320RWZNAvsaWEHwmW3k4OwNJ1hZxRKXupY63expbBaNp6jAgvYs7y/g546vuQnGHQuCBhslhLQ==} + '@oxfmt/binding-linux-x64-musl@0.53.0': + resolution: {integrity: sha512-MWExpYBGvl+pIvVB/gj/CcWlN2al8AizT7rUbtaYaWNoQkhWARM6W3qpgoCr72CYSN9PborzPmM5MIRe2BrNdA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxfmt/binding-openharmony-arm64@0.43.0': - resolution: {integrity: sha512-OE6TdietLXV3F6c7pNIhx/9YC1/2YFwjU9DPc/fbjxIX19hNIaP1rS0cFjCGJlGX+cVJwIKWe8Mos+LdQ1yAJw==} + '@oxfmt/binding-openharmony-arm64@0.53.0': + resolution: {integrity: sha512-u4sajgO4nxgmJIgc/y2AqPhkdbOkQH8WugXpA1+pW0ESQhvGZ1oGq61Q4xMbJHJU1hFgtO18QNrcFYDPYH0gwQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.43.0': - resolution: {integrity: sha512-0nWK6a7pGkbdoypfVicmV9k/N1FwjPZENoqhlTU+5HhZnAhpIO3za30nEE33u6l6tuy9OVfpdXUqxUgZ+4lbZw==} + '@oxfmt/binding-win32-arm64-msvc@0.53.0': + resolution: {integrity: sha512-Yq9sOZoIOJ5xPjO0qOyHJS4CiPuTkB2en9auxZz7Ar2p5RaC7BzLyVVmAA7zz9/L9YnjjY1DwNxN+ivKXimN/A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.43.0': - resolution: {integrity: sha512-9aokTR4Ft+tRdvgN/pKzSkVy2ksc4/dCpDm9L/xFrbIw0yhLtASLbvoG/5WOTUh/BRPPnfGTsWznEqv0dlOmhA==} + '@oxfmt/binding-win32-ia32-msvc@0.53.0': + resolution: {integrity: sha512-es1fVNZEkBqEcQtBpn19SYFgZF7FawlkCjkT/iImfEAus4gun8fBwB1E9hpV5LcR9B0DBNvRIXhW8BQk3JaE+Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.43.0': - resolution: {integrity: sha512-4bPgdQux2ZLWn3bf2TTXXMHcJB4lenmuxrLqygPmvCJ104Yqzj1UctxSRzR31TiJ4MLaG22RK8dUsVpJtrCz5g==} + '@oxfmt/binding-win32-x64-msvc@0.53.0': + resolution: {integrity: sha512-QFmJs2bEu9AO4O6qsmEaZNGi6dFq8N+rT8EHAAnZIq/B9SeJDUbc4DzVxQ48MfDsL7D3sCZzo37zuTuspcURgg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -2639,6 +2660,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -2744,15 +2768,27 @@ packages: '@vue/compiler-core@3.5.31': resolution: {integrity: sha512-k/ueL14aNIEy5Onf0OVzR8kiqF/WThgLdFhxwa4e/KF/0qe38IwIdofoSWBTvvxQOesaz6riAFAUaYjoF9fLLQ==} + '@vue/compiler-core@3.5.35': + resolution: {integrity: sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw==} + '@vue/compiler-dom@3.5.31': resolution: {integrity: sha512-BMY/ozS/xxjYqRFL+tKdRpATJYDTTgWSo0+AJvJNg4ig+Hgb0dOsHPXvloHQ5hmlivUqw1Yt2pPIqp4e0v1GUw==} + '@vue/compiler-dom@3.5.35': + resolution: {integrity: sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA==} + '@vue/compiler-sfc@3.5.31': resolution: {integrity: sha512-M8wpPgR9UJ8MiRGjppvx9uWJfLV7A/T+/rL8s/y3QG3u0c2/YZgff3d6SuimKRIhcYnWg5fTfDMlz2E6seUW8Q==} + '@vue/compiler-sfc@3.5.35': + resolution: {integrity: sha512-G5VPMcXTSywXBgtFOZOnHKBxKSrwXUcvY1iaF5/hRcy7t0J6CH/d8ha9F4nzi00Fax1eLV0QHM7v4mQu68jydw==} + '@vue/compiler-ssr@3.5.31': resolution: {integrity: sha512-h0xIMxrt/LHOvJKMri+vdYT92BrK3HFLtDqq9Pr/lVVfE4IyKZKvWf0vJFW10Yr6nX02OR4MkJwI0c1HDa1hog==} + '@vue/compiler-ssr@3.5.35': + resolution: {integrity: sha512-rGhAeXgdM7/ffTJGXT69rCCdTmjDewnFuUZfBQQHTdcEBeWdT5HCGY60y2ytLJr9/Dsu7IntUi5z/w0h6Rjnzw==} + '@vue/devtools-api@6.6.4': resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} @@ -2770,23 +2806,26 @@ packages: '@vue/devtools-shared@8.1.1': resolution: {integrity: sha512-+h4ttmJYl/txpxHKaoZcaKpC+pvckgLzIDiSQlaQ7kKthKh8KuwoLW2D8hPJEnqKzXOvu15UHEoGyngAXCz0EQ==} - '@vue/reactivity@3.5.31': - resolution: {integrity: sha512-DtKXxk9E/KuVvt8VxWu+6Luc9I9ETNcqR1T1oW1gf02nXaZ1kuAx58oVu7uX9XxJR0iJCro6fqBLw9oSBELo5g==} + '@vue/reactivity@3.5.35': + resolution: {integrity: sha512-tVc+SsHConvh/Lz64qq1pP3rYArBmK42xonovEcxY74SQtvctZodG/zhq54P5dr38cVuw25d27cPNRdlMidpGQ==} - '@vue/runtime-core@3.5.31': - resolution: {integrity: sha512-AZPmIHXEAyhpkmN7aWlqjSfYynmkWlluDNPHMCZKFHH+lLtxP/30UJmoVhXmbDoP1Ng0jG0fyY2zCj1PnSSA6Q==} + '@vue/runtime-core@3.5.35': + resolution: {integrity: sha512-A/xFNX9loIcWDygeQuNCfKuh0CoYBzxhqEMNah5TSFg9Z53DrFYEN2qi5CU9necjM1OWYegYREUTHmXTmhfXtg==} - '@vue/runtime-dom@3.5.31': - resolution: {integrity: sha512-xQJsNRmGPeDCJq/u813tyonNgWBFjzfVkBwDREdEWndBnGdHLHgkwNBQxLtg4zDrzKTEcnikUy1UUNecb3lJ6g==} + '@vue/runtime-dom@3.5.35': + resolution: {integrity: sha512-odrJ1C391dbGnyDRh8U+rnP7J2amIEzfmRk5vXy7xi3aZhEXofTvpi0T4HJb6jlNqQZTNPR5MPHSB3RHNkIORA==} - '@vue/server-renderer@3.5.31': - resolution: {integrity: sha512-GJuwRvMcdZX/CriUnyIIOGkx3rMV3H6sOu0JhdKbduaeCji6zb60iOGMY7tFoN24NfsUYoFBhshZtGxGpxO4iA==} + '@vue/server-renderer@3.5.35': + resolution: {integrity: sha512-NkebSOYdB97wi8OQcO3HqzZSlymJi/aWsN/7h74OSVhRTm6qGs3Jp3e0rCXynmWwSlKeRrnlIug+ilYoHBmQDA==} peerDependencies: - vue: 3.5.31 + vue: 3.5.35 '@vue/shared@3.5.31': resolution: {integrity: sha512-nBxuiuS9Lj5bPkPbWogPUnjxxWpkRniX7e5UBQDWl6Fsf4roq9wwV+cR7ezQ4zXswNvPIlsdj1slcLB7XCsRAw==} + '@vue/shared@3.5.35': + resolution: {integrity: sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA==} + '@vueuse/core@14.2.1': resolution: {integrity: sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ==} peerDependencies: @@ -2857,8 +2896,8 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -3775,8 +3814,8 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - get-tsconfig@4.13.7: - resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} + get-tsconfig@4.14.0: + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} giget@3.2.0: resolution: {integrity: sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A==} @@ -4040,6 +4079,10 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true + js-yaml@4.2.0: + resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} + hasBin: true + jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -4293,6 +4336,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanotar@0.3.0: resolution: {integrity: sha512-Kv2JYYiCzt16Kt5QwAc9BFG89xfPNBx+oQL4GQXD9nLqPkZBiNaqaCWtwnbk/q7UVsTYevvM1b0UF8zmEI4pCg==} @@ -4488,10 +4536,18 @@ packages: peerDependencies: oxc-parser: '>=0.98.0' - oxfmt@0.43.0: - resolution: {integrity: sha512-KTYNG5ISfHSdmeZ25Xzb3qgz9EmQvkaGAxgBY/p38+ZiAet3uZeu7FnMwcSQJg152Qwl0wnYAxDc+Z/H6cvrwA==} + oxfmt@0.53.0: + resolution: {integrity: sha512-9cB5glS3Ip6NMuZ+6NYTao9FCWkDhRtPYCtR3QBu/NxHoFbgzzTvi41N4jxz/GqGfuLKspui1qb/LlSu2IbMcw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + peerDependencies: + svelte: ^5.0.0 + vite-plus: '*' + peerDependenciesMeta: + svelte: + optional: true + vite-plus: + optional: true oxlint@1.56.0: resolution: {integrity: sha512-Q+5Mj5PVaH/R6/fhMMFzw4dT+KPB+kQW4kaL8FOIq7tfhlnEVp6+3lcWqFruuTNlUo9srZUW3qH7Id4pskeR6g==} @@ -4832,6 +4888,10 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + engines: {node: ^10 || ^12 || >=14} + postcss@8.5.8: resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} engines: {node: ^10 || ^12 || >=14} @@ -4859,8 +4919,8 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - qs@6.15.0: - resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} + qs@6.15.2: + resolution: {integrity: sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==} engines: {node: '>=0.6'} quansync@0.2.11: @@ -5070,8 +5130,8 @@ packages: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} engines: {node: '>= 0.4'} side-channel-map@1.0.1: @@ -5497,8 +5557,8 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + uuid@11.1.1: + resolution: {integrity: sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==} hasBin: true vary@1.1.2: @@ -5649,8 +5709,8 @@ packages: pinia: optional: true - vue@3.5.31: - resolution: {integrity: sha512-iV/sU9SzOlmA/0tygSmjkEN6Jbs3nPoIPFhCMLD2STrjgOU8DX7ZtzMhg4ahVwf5Rp9KoFzcXeB1ZrVbLBp5/Q==} + vue@3.5.35: + resolution: {integrity: sha512-cx89fnr+0kVGHiNFG6y6s0bdjypJRFNZn6x3WPstNdQR1bi1mbB7h4v5IBGTsPJU3nK1+0Iqj3Zf+hZWMieR4Q==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -5827,7 +5887,7 @@ snapshots: dependencies: color: 3.2.1 - '@arco-design/web-vue@2.56.3(vue@3.5.31(typescript@5.9.3))': + '@arco-design/web-vue@2.58.0(vue@3.5.35(typescript@5.9.3))': dependencies: '@arco-design/color': 0.4.0 b-tween: 0.3.3 @@ -5837,7 +5897,7 @@ snapshots: number-precision: 1.6.0 resize-observer-polyfill: 1.5.1 scroll-into-view-if-needed: 2.2.31 - vue: 3.5.31(typescript@5.9.3) + vue: 3.5.35(typescript@5.9.3) '@babel/code-frame@7.29.0': dependencies: @@ -5949,8 +6009,12 @@ snapshots: '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-string-parser@7.29.7': {} + '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-identifier@7.29.7': {} + '@babel/helper-validator-option@7.27.1': {} '@babel/helpers@7.29.2': @@ -5962,6 +6026,10 @@ snapshots: dependencies: '@babel/types': 7.29.0 + '@babel/parser@7.29.7': + dependencies: + '@babel/types': 7.29.7 + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -5986,7 +6054,7 @@ snapshots: '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.7 '@babel/types': 7.29.0 '@babel/traverse@7.29.0': @@ -5994,7 +6062,7 @@ snapshots: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.7 '@babel/template': 7.28.6 '@babel/types': 7.29.0 debug: 4.4.3 @@ -6006,6 +6074,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@bomb.sh/tab@0.0.14(cac@6.7.14)(citty@0.2.2)': optionalDependencies: cac: 6.7.14 @@ -6422,13 +6495,13 @@ snapshots: '@eslint/eslintrc@3.3.5': dependencies: - ajv: 6.14.0 + ajv: 6.15.0 debug: 4.4.3 espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.1 + js-yaml: 4.2.0 minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -6446,13 +6519,18 @@ snapshots: '@fastify/busboy@3.2.0': optional: true - '@humanfs/core@0.19.1': {} + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 - '@humanfs/node@0.16.7': + '@humanfs/node@0.16.8': dependencies: - '@humanfs/core': 0.19.1 + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 '@humanwhocodes/retry': 0.4.3 + '@humanfs/types@0.15.0': {} + '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/retry@0.4.3': {} @@ -6473,10 +6551,10 @@ snapshots: '@iconify/types': 2.0.0 mlly: 1.8.2 - '@iconify/vue@5.0.0(vue@3.5.31(typescript@5.9.3))': + '@iconify/vue@5.0.0(vue@3.5.35(typescript@5.9.3))': dependencies: '@iconify/types': 2.0.0 - vue: 3.5.31(typescript@5.9.3) + vue: 3.5.35(typescript@5.9.3) '@img/colour@1.1.0': {} @@ -6574,7 +6652,7 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true - '@intlify/bundle-utils@11.0.7(vue-i18n@11.3.0(vue@3.5.31(typescript@5.9.3)))': + '@intlify/bundle-utils@11.0.7(vue-i18n@11.3.0(vue@3.5.35(typescript@5.9.3)))': dependencies: '@intlify/message-compiler': 11.3.0 '@intlify/shared': 11.3.0 @@ -6586,7 +6664,7 @@ snapshots: source-map-js: 1.2.1 yaml-eslint-parser: 1.3.2 optionalDependencies: - vue-i18n: 11.3.0(vue@3.5.31(typescript@5.9.3)) + vue-i18n: 11.3.0(vue@3.5.35(typescript@5.9.3)) '@intlify/core-base@11.3.0': dependencies: @@ -6616,12 +6694,12 @@ snapshots: '@intlify/shared@11.3.0': {} - '@intlify/unplugin-vue-i18n@11.0.7(@vue/compiler-dom@3.5.31)(eslint@9.39.4(jiti@2.6.1))(rollup@4.60.1)(typescript@5.9.3)(vue-i18n@11.3.0(vue@3.5.31(typescript@5.9.3)))(vue@3.5.31(typescript@5.9.3))': + '@intlify/unplugin-vue-i18n@11.0.7(@vue/compiler-dom@3.5.35)(eslint@9.39.4(jiti@2.6.1))(rollup@4.60.1)(typescript@5.9.3)(vue-i18n@11.3.0(vue@3.5.35(typescript@5.9.3)))(vue@3.5.35(typescript@5.9.3))': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) - '@intlify/bundle-utils': 11.0.7(vue-i18n@11.3.0(vue@3.5.31(typescript@5.9.3))) + '@intlify/bundle-utils': 11.0.7(vue-i18n@11.3.0(vue@3.5.35(typescript@5.9.3))) '@intlify/shared': 11.3.0 - '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.3.0)(@vue/compiler-dom@3.5.31)(vue-i18n@11.3.0(vue@3.5.31(typescript@5.9.3)))(vue@3.5.31(typescript@5.9.3)) + '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.3.0)(@vue/compiler-dom@3.5.35)(vue-i18n@11.3.0(vue@3.5.35(typescript@5.9.3)))(vue@3.5.35(typescript@5.9.3)) '@rollup/pluginutils': 5.3.0(rollup@4.60.1) '@typescript-eslint/scope-manager': 8.58.0 '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) @@ -6630,9 +6708,9 @@ snapshots: pathe: 2.0.3 picocolors: 1.1.1 unplugin: 2.3.11 - vue: 3.5.31(typescript@5.9.3) + vue: 3.5.35(typescript@5.9.3) optionalDependencies: - vue-i18n: 11.3.0(vue@3.5.31(typescript@5.9.3)) + vue-i18n: 11.3.0(vue@3.5.35(typescript@5.9.3)) transitivePeerDependencies: - '@vue/compiler-dom' - eslint @@ -6644,14 +6722,14 @@ snapshots: '@intlify/utils@0.14.1': {} - '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.3.0)(@vue/compiler-dom@3.5.31)(vue-i18n@11.3.0(vue@3.5.31(typescript@5.9.3)))(vue@3.5.31(typescript@5.9.3))': + '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.3.0)(@vue/compiler-dom@3.5.35)(vue-i18n@11.3.0(vue@3.5.35(typescript@5.9.3)))(vue@3.5.35(typescript@5.9.3))': dependencies: '@babel/parser': 7.29.2 optionalDependencies: '@intlify/shared': 11.3.0 - '@vue/compiler-dom': 3.5.31 - vue: 3.5.31(typescript@5.9.3) - vue-i18n: 11.3.0(vue@3.5.31(typescript@5.9.3)) + '@vue/compiler-dom': 3.5.35 + vue: 3.5.35(typescript@5.9.3) + vue-i18n: 11.3.0(vue@3.5.35(typescript@5.9.3)) '@ioredis/commands@1.5.1': {} @@ -6758,11 +6836,11 @@ snapshots: lodash.debounce: 4.0.8 netlify: 13.3.5 parse-gitignore: 2.0.0 - uuid: 11.1.0 + uuid: 11.1.1 write-file-atomic: 6.0.0 optional: true - '@netlify/open-api@2.52.0': + '@netlify/open-api@2.55.0': optional: true '@netlify/runtime-utils@1.3.1': @@ -6839,12 +6917,12 @@ snapshots: pkg-types: 2.3.0 semver: 7.7.4 - '@nuxt/devtools@3.2.4(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))': + '@nuxt/devtools@3.2.4(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3))': dependencies: '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3)) '@nuxt/devtools-wizard': 3.2.4 '@nuxt/kit': 4.4.2(magicast@0.5.2) - '@vue/devtools-core': 8.1.1(vue@3.5.31(typescript@5.9.3)) + '@vue/devtools-core': 8.1.1(vue@3.5.35(typescript@5.9.3)) '@vue/devtools-kit': 8.1.1 birpc: 4.0.0 consola: 3.4.2 @@ -6871,7 +6949,7 @@ snapshots: tinyglobby: 0.2.15 vite: 7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3)) - vite-plugin-vue-tracer: 1.3.0(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) + vite-plugin-vue-tracer: 1.3.0(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3)) which: 6.0.1 ws: 8.20.0 transitivePeerDependencies: @@ -6880,12 +6958,12 @@ snapshots: - utf-8-validate - vue - '@nuxt/icon@2.2.1(magicast@0.5.2)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))': + '@nuxt/icon@2.2.1(magicast@0.5.2)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3))': dependencies: '@iconify/collections': 1.0.668 '@iconify/types': 2.0.0 '@iconify/utils': 3.1.0 - '@iconify/vue': 5.0.0(vue@3.5.31(typescript@5.9.3)) + '@iconify/vue': 5.0.0(vue@3.5.35(typescript@5.9.3)) '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3)) '@nuxt/kit': 4.4.2(magicast@0.5.2) consola: 3.4.2 @@ -6957,7 +7035,7 @@ snapshots: '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@nuxt/devalue': 2.0.2 '@nuxt/kit': 4.4.2(magicast@0.5.2) - '@unhead/vue': 2.1.12(vue@3.5.31(typescript@5.9.3)) + '@unhead/vue': 2.1.12(vue@3.5.35(typescript@5.9.3)) '@vue/shared': 3.5.31 consola: 3.4.2 defu: 6.1.6 @@ -6981,7 +7059,7 @@ snapshots: ufo: 1.6.3 unctx: 2.5.0 unstorage: 1.17.5(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.10.1) - vue: 3.5.31(typescript@5.9.3) + vue: 3.5.35(typescript@5.9.3) vue-bundle-renderer: 2.2.0 vue-devtools-stub: 0.1.0 transitivePeerDependencies: @@ -7039,12 +7117,12 @@ snapshots: rc9: 3.0.1 std-env: 4.0.0 - '@nuxt/vite-builder@4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@22.15.19)(eslint@9.39.4(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))(yaml@2.8.3)': + '@nuxt/vite-builder@4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@22.15.19)(eslint@9.39.4(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vue@3.5.35(typescript@5.9.3))(yaml@2.8.3)': dependencies: '@nuxt/kit': 4.4.2(magicast@0.5.2) '@rollup/plugin-replace': 6.0.3(rollup@4.60.1) - '@vitejs/plugin-vue': 6.0.5(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) - '@vitejs/plugin-vue-jsx': 5.1.5(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) + '@vitejs/plugin-vue': 6.0.5(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3)) + '@vitejs/plugin-vue-jsx': 5.1.5(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3)) autoprefixer: 10.4.27(postcss@8.5.8) consola: 3.4.2 cssnano: 7.1.4(postcss@8.5.8) @@ -7069,7 +7147,7 @@ snapshots: vite: 7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) vite-node: 5.3.0(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) vite-plugin-checker: 0.12.0(eslint@9.39.4(jiti@2.6.1))(optionator@0.9.4)(oxlint@1.56.0)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3)) - vue: 3.5.31(typescript@5.9.3) + vue: 3.5.35(typescript@5.9.3) vue-bundle-renderer: 2.2.0 optionalDependencies: '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -7109,12 +7187,12 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxtjs/i18n@10.2.4(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-dom@3.5.31)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))': + '@nuxtjs/i18n@10.2.4(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-dom@3.5.35)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@5.9.3)(vue@3.5.35(typescript@5.9.3))': dependencies: '@intlify/core': 11.3.0 '@intlify/h3': 0.7.4 '@intlify/shared': 11.3.0 - '@intlify/unplugin-vue-i18n': 11.0.7(@vue/compiler-dom@3.5.31)(eslint@9.39.4(jiti@2.6.1))(rollup@4.60.1)(typescript@5.9.3)(vue-i18n@11.3.0(vue@3.5.31(typescript@5.9.3)))(vue@3.5.31(typescript@5.9.3)) + '@intlify/unplugin-vue-i18n': 11.0.7(@vue/compiler-dom@3.5.35)(eslint@9.39.4(jiti@2.6.1))(rollup@4.60.1)(typescript@5.9.3)(vue-i18n@11.3.0(vue@3.5.35(typescript@5.9.3)))(vue@3.5.35(typescript@5.9.3)) '@intlify/utils': 0.14.1 '@miyaneee/rollup-plugin-json5': 1.2.0(rollup@4.60.1) '@nuxt/kit': 4.4.2(magicast@0.5.2) @@ -7136,8 +7214,8 @@ snapshots: unplugin: 2.3.11 unrouting: 0.1.7 unstorage: 1.17.5(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.10.1) - vue-i18n: 11.3.0(vue@3.5.31(typescript@5.9.3)) - vue-router: 5.0.4(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@5.9.3)) + vue-i18n: 11.3.0(vue@3.5.35(typescript@5.9.3)) + vue-router: 5.0.4(@vue/compiler-sfc@3.5.31)(vue@3.5.35(typescript@5.9.3)) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -7524,61 +7602,61 @@ snapshots: '@oxc-transform/binding-win32-x64-msvc@0.117.0': optional: true - '@oxfmt/binding-android-arm-eabi@0.43.0': + '@oxfmt/binding-android-arm-eabi@0.53.0': optional: true - '@oxfmt/binding-android-arm64@0.43.0': + '@oxfmt/binding-android-arm64@0.53.0': optional: true - '@oxfmt/binding-darwin-arm64@0.43.0': + '@oxfmt/binding-darwin-arm64@0.53.0': optional: true - '@oxfmt/binding-darwin-x64@0.43.0': + '@oxfmt/binding-darwin-x64@0.53.0': optional: true - '@oxfmt/binding-freebsd-x64@0.43.0': + '@oxfmt/binding-freebsd-x64@0.53.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.43.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.53.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.43.0': + '@oxfmt/binding-linux-arm-musleabihf@0.53.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.43.0': + '@oxfmt/binding-linux-arm64-gnu@0.53.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.43.0': + '@oxfmt/binding-linux-arm64-musl@0.53.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.43.0': + '@oxfmt/binding-linux-ppc64-gnu@0.53.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.43.0': + '@oxfmt/binding-linux-riscv64-gnu@0.53.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.43.0': + '@oxfmt/binding-linux-riscv64-musl@0.53.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.43.0': + '@oxfmt/binding-linux-s390x-gnu@0.53.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.43.0': + '@oxfmt/binding-linux-x64-gnu@0.53.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.43.0': + '@oxfmt/binding-linux-x64-musl@0.53.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.43.0': + '@oxfmt/binding-openharmony-arm64@0.53.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.43.0': + '@oxfmt/binding-win32-arm64-msvc@0.53.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.43.0': + '@oxfmt/binding-win32-ia32-msvc@0.53.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.43.0': + '@oxfmt/binding-win32-x64-msvc@0.53.0': optional: true '@oxlint/binding-android-arm-eabi@1.56.0': @@ -7889,6 +7967,8 @@ snapshots: '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} + '@types/json-schema@7.0.15': {} '@types/node@20.19.37': @@ -7944,11 +8024,11 @@ snapshots: '@typescript-eslint/types': 8.58.0 eslint-visitor-keys: 5.0.1 - '@unhead/vue@2.1.12(vue@3.5.31(typescript@5.9.3))': + '@unhead/vue@2.1.12(vue@3.5.35(typescript@5.9.3))': dependencies: hookable: 6.1.0 unhead: 2.1.12 - vue: 3.5.31(typescript@5.9.3) + vue: 3.5.35(typescript@5.9.3) '@upstash/redis@1.38.0': dependencies: @@ -7978,7 +8058,7 @@ snapshots: - rollup - supports-color - '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))': + '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) @@ -7986,17 +8066,17 @@ snapshots: '@rolldown/pluginutils': 1.0.0-rc.13 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0) vite: 7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) - vue: 3.5.31(typescript@5.9.3) + vue: 3.5.35(typescript@5.9.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.5(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.5(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.2 vite: 7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) - vue: 3.5.31(typescript@5.9.3) + vue: 3.5.35(typescript@5.9.3) - '@vue-macros/common@3.1.2(vue@3.5.31(typescript@5.9.3))': + '@vue-macros/common@3.1.2(vue@3.5.35(typescript@5.9.3))': dependencies: '@vue/compiler-sfc': 3.5.31 ast-kit: 2.2.0 @@ -8004,7 +8084,7 @@ snapshots: magic-string-ast: 1.0.3 unplugin-utils: 0.3.1 optionalDependencies: - vue: 3.5.31(typescript@5.9.3) + vue: 3.5.35(typescript@5.9.3) '@vue/babel-helper-vue-transform-on@2.0.1': {} @@ -8030,8 +8110,8 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/parser': 7.29.2 - '@vue/compiler-sfc': 3.5.31 + '@babel/parser': 7.29.7 + '@vue/compiler-sfc': 3.5.35 transitivePeerDependencies: - supports-color @@ -8043,11 +8123,24 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.1 + '@vue/compiler-core@3.5.35': + dependencies: + '@babel/parser': 7.29.7 + '@vue/shared': 3.5.35 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + '@vue/compiler-dom@3.5.31': dependencies: '@vue/compiler-core': 3.5.31 '@vue/shared': 3.5.31 + '@vue/compiler-dom@3.5.35': + dependencies: + '@vue/compiler-core': 3.5.35 + '@vue/shared': 3.5.35 + '@vue/compiler-sfc@3.5.31': dependencies: '@babel/parser': 7.29.2 @@ -8060,22 +8153,39 @@ snapshots: postcss: 8.5.8 source-map-js: 1.2.1 + '@vue/compiler-sfc@3.5.35': + dependencies: + '@babel/parser': 7.29.7 + '@vue/compiler-core': 3.5.35 + '@vue/compiler-dom': 3.5.35 + '@vue/compiler-ssr': 3.5.35 + '@vue/shared': 3.5.35 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.15 + source-map-js: 1.2.1 + '@vue/compiler-ssr@3.5.31': dependencies: '@vue/compiler-dom': 3.5.31 '@vue/shared': 3.5.31 + '@vue/compiler-ssr@3.5.35': + dependencies: + '@vue/compiler-dom': 3.5.35 + '@vue/shared': 3.5.35 + '@vue/devtools-api@6.6.4': {} '@vue/devtools-api@8.1.1': dependencies: '@vue/devtools-kit': 8.1.1 - '@vue/devtools-core@8.1.1(vue@3.5.31(typescript@5.9.3))': + '@vue/devtools-core@8.1.1(vue@3.5.35(typescript@5.9.3))': dependencies: '@vue/devtools-kit': 8.1.1 '@vue/devtools-shared': 8.1.1 - vue: 3.5.31(typescript@5.9.3) + vue: 3.5.35(typescript@5.9.3) '@vue/devtools-kit@8.1.1': dependencies: @@ -8086,53 +8196,55 @@ snapshots: '@vue/devtools-shared@8.1.1': {} - '@vue/reactivity@3.5.31': + '@vue/reactivity@3.5.35': dependencies: - '@vue/shared': 3.5.31 + '@vue/shared': 3.5.35 - '@vue/runtime-core@3.5.31': + '@vue/runtime-core@3.5.35': dependencies: - '@vue/reactivity': 3.5.31 - '@vue/shared': 3.5.31 + '@vue/reactivity': 3.5.35 + '@vue/shared': 3.5.35 - '@vue/runtime-dom@3.5.31': + '@vue/runtime-dom@3.5.35': dependencies: - '@vue/reactivity': 3.5.31 - '@vue/runtime-core': 3.5.31 - '@vue/shared': 3.5.31 + '@vue/reactivity': 3.5.35 + '@vue/runtime-core': 3.5.35 + '@vue/shared': 3.5.35 csstype: 3.2.3 - '@vue/server-renderer@3.5.31(vue@3.5.31(typescript@5.9.3))': + '@vue/server-renderer@3.5.35(vue@3.5.35(typescript@5.9.3))': dependencies: - '@vue/compiler-ssr': 3.5.31 - '@vue/shared': 3.5.31 - vue: 3.5.31(typescript@5.9.3) + '@vue/compiler-ssr': 3.5.35 + '@vue/shared': 3.5.35 + vue: 3.5.35(typescript@5.9.3) '@vue/shared@3.5.31': {} - '@vueuse/core@14.2.1(vue@3.5.31(typescript@5.9.3))': + '@vue/shared@3.5.35': {} + + '@vueuse/core@14.2.1(vue@3.5.35(typescript@5.9.3))': dependencies: '@types/web-bluetooth': 0.0.21 '@vueuse/metadata': 14.2.1 - '@vueuse/shared': 14.2.1(vue@3.5.31(typescript@5.9.3)) - vue: 3.5.31(typescript@5.9.3) + '@vueuse/shared': 14.2.1(vue@3.5.35(typescript@5.9.3)) + vue: 3.5.35(typescript@5.9.3) '@vueuse/metadata@14.2.1': {} - '@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))': + '@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3))': dependencies: '@nuxt/kit': 4.4.2(magicast@0.5.2) - '@vueuse/core': 14.2.1(vue@3.5.31(typescript@5.9.3)) + '@vueuse/core': 14.2.1(vue@3.5.35(typescript@5.9.3)) '@vueuse/metadata': 14.2.1 local-pkg: 1.1.2 nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3) - vue: 3.5.31(typescript@5.9.3) + vue: 3.5.35(typescript@5.9.3) transitivePeerDependencies: - magicast - '@vueuse/shared@14.2.1(vue@3.5.31(typescript@5.9.3))': + '@vueuse/shared@14.2.1(vue@3.5.35(typescript@5.9.3))': dependencies: - vue: 3.5.31(typescript@5.9.3) + vue: 3.5.35(typescript@5.9.3) '@whatwg-node/disposablestack@0.0.6': dependencies: @@ -8190,7 +8302,7 @@ snapshots: agent-base@7.1.4: {} - ajv@6.14.0: + ajv@6.15.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -8930,11 +9042,11 @@ snapshots: '@eslint/eslintrc': 3.3.5 '@eslint/js': 9.39.4 '@eslint/plugin-kit': 0.4.1 - '@humanfs/node': 0.16.7 + '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - ajv: 6.14.0 + '@types/estree': 1.0.9 + ajv: 6.15.0 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.3 @@ -9154,7 +9266,7 @@ snapshots: get-stream@8.0.1: {} - get-tsconfig@4.13.7: + get-tsconfig@4.14.0: dependencies: resolve-pkg-maps: 1.0.0 optional: true @@ -9429,6 +9541,10 @@ snapshots: dependencies: argparse: 2.0.1 + js-yaml@4.2.0: + dependencies: + argparse: 2.0.1 + jsesc@3.1.0: {} json-buffer@3.0.1: {} @@ -9717,6 +9833,8 @@ snapshots: nanoid@3.3.11: {} + nanoid@3.3.12: {} + nanotar@0.3.0: {} natural-compare@1.4.0: {} @@ -9725,12 +9843,12 @@ snapshots: netlify@13.3.5: dependencies: - '@netlify/open-api': 2.52.0 + '@netlify/open-api': 2.55.0 lodash-es: 4.18.1 micro-api-client: 3.3.0 node-fetch: 3.3.2 p-wait-for: 5.0.2 - qs: 6.15.0 + qs: 6.15.2 optional: true nitropack@2.13.3(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(srvx@0.11.14): @@ -9886,11 +10004,11 @@ snapshots: nuxt-define@1.0.0: {} - nuxt-echarts@1.0.1(echarts@6.0.0)(magicast@0.5.2)(vue-echarts@8.0.1(echarts@6.0.0)(vue@3.5.31(typescript@5.9.3))): + nuxt-echarts@1.0.1(echarts@6.0.0)(magicast@0.5.2)(vue-echarts@8.0.1(echarts@6.0.0)(vue@3.5.35(typescript@5.9.3))): dependencies: '@nuxt/kit': 4.4.2(magicast@0.5.2) echarts: 6.0.0 - vue-echarts: 8.0.1(echarts@6.0.0)(vue@3.5.31(typescript@5.9.3)) + vue-echarts: 8.0.1(echarts@6.0.0)(vue@3.5.35(typescript@5.9.3)) transitivePeerDependencies: - magicast @@ -9898,13 +10016,13 @@ snapshots: dependencies: '@dxup/nuxt': 0.4.0(magicast@0.5.2)(typescript@5.9.3) '@nuxt/cli': 3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2) - '@nuxt/devtools': 3.2.4(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) + '@nuxt/devtools': 3.2.4(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3)) '@nuxt/kit': 4.4.2(magicast@0.5.2) '@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(srvx@0.11.14)(typescript@5.9.3) '@nuxt/schema': 4.4.2 '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.4.2(magicast@0.5.2)) - '@nuxt/vite-builder': 4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@22.15.19)(eslint@9.39.4(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))(yaml@2.8.3) - '@unhead/vue': 2.1.12(vue@3.5.31(typescript@5.9.3)) + '@nuxt/vite-builder': 4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@22.15.19)(eslint@9.39.4(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vue@3.5.35(typescript@5.9.3))(yaml@2.8.3) + '@unhead/vue': 2.1.12(vue@3.5.35(typescript@5.9.3)) '@vue/shared': 3.5.31 c12: 3.3.4(magicast@0.5.2) chokidar: 5.0.0 @@ -9950,8 +10068,8 @@ snapshots: unplugin: 3.0.0 unrouting: 0.1.7 untyped: 2.0.0 - vue: 3.5.31(typescript@5.9.3) - vue-router: 5.0.4(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@5.9.3)) + vue: 3.5.35(typescript@5.9.3) + vue-router: 5.0.4(@vue/compiler-sfc@3.5.31)(vue@3.5.35(typescript@5.9.3)) optionalDependencies: '@parcel/watcher': 2.5.6 '@types/node': 22.15.19 @@ -10242,29 +10360,29 @@ snapshots: magic-regexp: 0.10.0 oxc-parser: 0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - oxfmt@0.43.0: + oxfmt@0.53.0: dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.43.0 - '@oxfmt/binding-android-arm64': 0.43.0 - '@oxfmt/binding-darwin-arm64': 0.43.0 - '@oxfmt/binding-darwin-x64': 0.43.0 - '@oxfmt/binding-freebsd-x64': 0.43.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.43.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.43.0 - '@oxfmt/binding-linux-arm64-gnu': 0.43.0 - '@oxfmt/binding-linux-arm64-musl': 0.43.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.43.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.43.0 - '@oxfmt/binding-linux-riscv64-musl': 0.43.0 - '@oxfmt/binding-linux-s390x-gnu': 0.43.0 - '@oxfmt/binding-linux-x64-gnu': 0.43.0 - '@oxfmt/binding-linux-x64-musl': 0.43.0 - '@oxfmt/binding-openharmony-arm64': 0.43.0 - '@oxfmt/binding-win32-arm64-msvc': 0.43.0 - '@oxfmt/binding-win32-ia32-msvc': 0.43.0 - '@oxfmt/binding-win32-x64-msvc': 0.43.0 + '@oxfmt/binding-android-arm-eabi': 0.53.0 + '@oxfmt/binding-android-arm64': 0.53.0 + '@oxfmt/binding-darwin-arm64': 0.53.0 + '@oxfmt/binding-darwin-x64': 0.53.0 + '@oxfmt/binding-freebsd-x64': 0.53.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.53.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.53.0 + '@oxfmt/binding-linux-arm64-gnu': 0.53.0 + '@oxfmt/binding-linux-arm64-musl': 0.53.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.53.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.53.0 + '@oxfmt/binding-linux-riscv64-musl': 0.53.0 + '@oxfmt/binding-linux-s390x-gnu': 0.53.0 + '@oxfmt/binding-linux-x64-gnu': 0.53.0 + '@oxfmt/binding-linux-x64-musl': 0.53.0 + '@oxfmt/binding-openharmony-arm64': 0.53.0 + '@oxfmt/binding-win32-arm64-msvc': 0.53.0 + '@oxfmt/binding-win32-ia32-msvc': 0.53.0 + '@oxfmt/binding-win32-x64-msvc': 0.53.0 oxlint@1.56.0: optionalDependencies: @@ -10582,6 +10700,12 @@ snapshots: postcss-value-parser@4.2.0: {} + postcss@8.5.15: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postcss@8.5.8: dependencies: nanoid: 3.3.11 @@ -10600,7 +10724,7 @@ snapshots: punycode@2.3.1: {} - qs@6.15.0: + qs@6.15.2: dependencies: side-channel: 1.1.0 optional: true @@ -10851,7 +10975,7 @@ snapshots: shell-quote@1.8.3: {} - side-channel-list@1.0.0: + side-channel-list@1.0.1: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 @@ -10878,7 +11002,7 @@ snapshots: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 - side-channel-list: 1.0.0 + side-channel-list: 1.0.1 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 optional: true @@ -11151,7 +11275,7 @@ snapshots: tsx@4.19.2: dependencies: esbuild: 0.23.1 - get-tsconfig: 4.13.7 + get-tsconfig: 4.14.0 optionalDependencies: fsevents: 2.3.3 optional: true @@ -11307,7 +11431,7 @@ snapshots: util-deprecate@1.0.2: {} - uuid@11.1.0: + uuid@11.1.1: optional: true vary@1.1.2: {} @@ -11376,7 +11500,7 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-vue-tracer@1.3.0(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)): + vite-plugin-vue-tracer@1.3.0(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3)): dependencies: estree-walker: 3.0.3 exsolve: 1.0.8 @@ -11384,7 +11508,7 @@ snapshots: pathe: 2.0.3 source-map-js: 1.2.1 vite: 7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) - vue: 3.5.31(typescript@5.9.3) + vue: 3.5.35(typescript@5.9.3) vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3): dependencies: @@ -11410,23 +11534,23 @@ snapshots: vue-devtools-stub@0.1.0: {} - vue-echarts@8.0.1(echarts@6.0.0)(vue@3.5.31(typescript@5.9.3)): + vue-echarts@8.0.1(echarts@6.0.0)(vue@3.5.35(typescript@5.9.3)): dependencies: echarts: 6.0.0 - vue: 3.5.31(typescript@5.9.3) + vue: 3.5.35(typescript@5.9.3) - vue-i18n@11.3.0(vue@3.5.31(typescript@5.9.3)): + vue-i18n@11.3.0(vue@3.5.35(typescript@5.9.3)): dependencies: '@intlify/core-base': 11.3.0 '@intlify/devtools-types': 11.3.0 '@intlify/shared': 11.3.0 '@vue/devtools-api': 6.6.4 - vue: 3.5.31(typescript@5.9.3) + vue: 3.5.35(typescript@5.9.3) - vue-router@5.0.4(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@5.9.3)): + vue-router@5.0.4(@vue/compiler-sfc@3.5.31)(vue@3.5.35(typescript@5.9.3)): dependencies: '@babel/generator': 7.29.1 - '@vue-macros/common': 3.1.2(vue@3.5.31(typescript@5.9.3)) + '@vue-macros/common': 3.1.2(vue@3.5.35(typescript@5.9.3)) '@vue/devtools-api': 8.1.1 ast-walker-scope: 0.8.3 chokidar: 5.0.0 @@ -11441,18 +11565,18 @@ snapshots: tinyglobby: 0.2.15 unplugin: 3.0.0 unplugin-utils: 0.3.1 - vue: 3.5.31(typescript@5.9.3) + vue: 3.5.35(typescript@5.9.3) yaml: 2.8.3 optionalDependencies: '@vue/compiler-sfc': 3.5.31 - vue@3.5.31(typescript@5.9.3): + vue@3.5.35(typescript@5.9.3): dependencies: - '@vue/compiler-dom': 3.5.31 - '@vue/compiler-sfc': 3.5.31 - '@vue/runtime-dom': 3.5.31 - '@vue/server-renderer': 3.5.31(vue@3.5.31(typescript@5.9.3)) - '@vue/shared': 3.5.31 + '@vue/compiler-dom': 3.5.35 + '@vue/compiler-sfc': 3.5.35 + '@vue/runtime-dom': 3.5.35 + '@vue/server-renderer': 3.5.35(vue@3.5.35(typescript@5.9.3)) + '@vue/shared': 3.5.35 optionalDependencies: typescript: 5.9.3 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 331d3d5c..b37ec76e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,2 +1,6 @@ packages: - node-vlmcs +allowBuilds: + esbuild: true + sharp: true + workerd: true From 0f83ad75f221bda5ef8d23cbf95c587325e415bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E7=BA=B8=E5=BF=98=E5=BF=A7?= Date: Tue, 2 Jun 2026 17:38:29 +0800 Subject: [PATCH 08/19] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=9B=91?= =?UTF-8?q?=E6=8E=A7=E6=95=B0=E6=8D=AE=E6=8E=92=E5=BA=8F=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=BB=A5=E6=8C=89=E6=88=90=E5=8A=9F=E7=8E=87=E5=92=8C=E5=BB=B6?= =?UTF-8?q?=E8=BF=9F=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/api/monitor.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/server/api/monitor.ts b/server/api/monitor.ts index bde9ffa2..ad44f373 100644 --- a/server/api/monitor.ts +++ b/server/api/monitor.ts @@ -26,13 +26,13 @@ export default defineEventHandler(async () => { }) ) - // Sort by success rate and delay - // const sortedData = results.sort((a, b) => { - // const successRateA = a.success / a.total - // const successRateB = b.success / b.total + const getSuccessRate = (item: (typeof results)[number]) => { + return item.total ? item.success / item.total : 0 + } - // return successRateB - successRateA || a.delay - b.delay - // }) + const sortedData = results.sort((a, b) => { + return getSuccessRate(b) - getSuccessRate(a) || a.delay - b.delay + }) - return results + return sortedData }) From be27c90978fdd1faf02084c2e197bbf30ac9c97b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E7=BA=B8=E5=BF=98=E5=BF=A7?= Date: Wed, 3 Jun 2026 16:32:28 +0800 Subject: [PATCH 09/19] =?UTF-8?q?feat:=20=E5=B0=86=E4=B8=BB=E6=9C=BA?= =?UTF-8?q?=E6=8C=87=E6=A0=87=E5=90=88=E5=B9=B6=E4=B8=BA=E5=8D=95=E6=AC=A1?= =?UTF-8?q?=E5=AD=98=E5=82=A8=E5=86=99=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/AppHeader.vue | 314 ++++----- app/components/CommonTips.vue | 166 ++--- app/pages/activate.vue | 374 +++++----- app/pages/check/index.vue | 966 ++++++++++++------------- app/pages/index.vue | 346 ++++----- node-vlmcs/src/kms.ts | 996 +++++++++++++------------- node-vlmcs/src/rpc.ts | 1252 ++++++++++++++++----------------- node-vlmcs/src/types.ts | 302 ++++---- nuxt.config.ts | 2 +- server/api/monitor.ts | 37 +- server/tasks/monitor.ts | 16 +- shared/types/monitor.ts | 2 + 12 files changed, 2390 insertions(+), 2383 deletions(-) diff --git a/app/components/AppHeader.vue b/app/components/AppHeader.vue index 278fee45..82c9a7dc 100644 --- a/app/components/AppHeader.vue +++ b/app/components/AppHeader.vue @@ -1,157 +1,157 @@ - - - + + + diff --git a/app/components/CommonTips.vue b/app/components/CommonTips.vue index ba2634da..b5d1a9ef 100644 --- a/app/components/CommonTips.vue +++ b/app/components/CommonTips.vue @@ -1,83 +1,83 @@ - - - + + + diff --git a/app/pages/activate.vue b/app/pages/activate.vue index dbd65434..4ef9e00f 100644 --- a/app/pages/activate.vue +++ b/app/pages/activate.vue @@ -1,187 +1,187 @@ - - - + + + diff --git a/app/pages/check/index.vue b/app/pages/check/index.vue index d86ec69d..1411b3e8 100644 --- a/app/pages/check/index.vue +++ b/app/pages/check/index.vue @@ -1,483 +1,483 @@ - - - + + + diff --git a/app/pages/index.vue b/app/pages/index.vue index 50103d71..3743b973 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -1,173 +1,173 @@ - - - + + + diff --git a/node-vlmcs/src/kms.ts b/node-vlmcs/src/kms.ts index c6e13607..602cc889 100644 --- a/node-vlmcs/src/kms.ts +++ b/node-vlmcs/src/kms.ts @@ -1,498 +1,498 @@ -/** - * KMS 协议实现 — 处理 V4/V5/V6 请求创建和响应解密 - * - * 参考原版源码: - * - src/kms.c (CreateRequestV4, CreateRequestV6, DecryptResponseV4, DecryptResponseV6) - * - src/kms.h (REQUEST, RESPONSE, RESPONSE_RESULT 等结构定义) - */ - -import { - AesCtx, - AES_BLOCK_BYTES, - AES_KEY_BYTES, - AesKeyV5, - AesKeyV6, - xorBlock, - aesCmacV4, - aesEncryptCbc, - aesDecryptCbc, - sha256, - sha256Hmac, - get16RandomBytes -} from './crypto' - -import { PID_BUFFER_SIZE, ResponseResult } from './types' - -// 重新导出时间工具函数 -export { - unixTimeToFileTime as getUnixTimeAsFileTime, - fileTimeToUnixTime -} from './types' - -// ─── 协议大小常量 (参考 src/kms.h 中的结构体大小) ────────────────────────── - -// REQUEST 结构: Version(4) + VMInfo(4) + LicenseStatus(4) + BindingExpiration(4) + -// AppID(16) + ActID(16) + KMSID(16) + CMID(16) + N_Policy(4) + -// ClientTime(8) + CMID_prev(16) + WorkstationName(128) = 236 字节 -const REQUEST_SIZE = 236 -/** V4 请求大小: REQUEST(236) + AES-CMAC(16) = 252 字节 */ -const REQUEST_V4_SIZE = 252 -/** V5/V6 请求大小: Version(4) + IV(16) + REQUEST(236) + Pad(4) = 260 字节 */ -const REQUEST_V6_SIZE = 260 - -/** V4 响应中 ePID 前面的字段大小: Version(4) + PIDSize(4) = 8 字节 */ -const V4_PRE_EPID_SIZE = 8 -/** V4 响应中 ePID 后面的字段大小: CMID(16) + ClientTime(8) + Count(4) + VLActivation(4) + VLRenewal(4) = 36 字节 */ -const V4_POST_EPID_SIZE = 36 -/** V6 未加密部分大小: Version(4) + IV(16) = 20 字节 */ -const V6_UNENCRYPTED_SIZE = 20 -/** V6 响应中 ePID 前面的字段大小: V6未加密(20) + ResponseBase.Version(4) + PIDSize(4) = 28 字节 */ -const V6_PRE_EPID_SIZE = 28 -/** V5 响应中 ePID 后面的额外字段: V4后(36) + RandomXoredIVs(16) + Hash(32) = 84 字节 */ -const V5_POST_EPID_SIZE = 84 -/** V6 响应中 ePID 后面的额外字段: V5后(84) + HwId(8) + XoredIVs(16) + HMAC(16) = 124 字节 */ -const V6_POST_EPID_SIZE = 124 -/** V6 解密大小: IV(16) + REQUEST(236) + Pad(4) = 256 字节 */ -const V6_DECRYPT_SIZE = 256 - -const HMAC_SIZE = 16 -const HASH_SIZE = 32 -const HALF_HASH_SIZE = HASH_SIZE >> 1 -/** PID 最大字节数: PID_BUFFER_SIZE * 2 = 128 字节 (UCS-2 编码) */ -const KMS_PID_MAX_BYTES = PID_BUFFER_SIZE * 2 - -// 最大结构体大小(使用完整 PID_BUFFER_SIZE 时) -/** V4 响应最大大小: RESPONSE(172) + MAC(16) = 188 字节 */ -const SIZEOF_RESPONSE_V4 = 188 -/** V5 响应最大大小: Version(4) + IV(16) + RESPONSE(172) + RandomXoredIVs(16) + Hash(32) = 240 字节 */ -const SIZEOF_RESPONSE_V5 = 240 -/** V6 响应最大大小: V5(240) + HwId(8) + XoredIVs(16) + HMAC(16) = 280 字节 */ -const SIZEOF_RESPONSE_V6 = 280 - -// V6 时间槽常量(每个时间槽约 4.11 小时) -// 用于 HMAC 计算,参考 src/kms.c 中的 CreateV6Hmac() -const TIME_C1 = BigInt('0x00000022816889bd') -const TIME_C2 = BigInt('0x000000208cbab5ed') -const TIME_C3 = BigInt('0x3156cd5ac628477a') -const UINT64_MASK = BigInt('0xffffffffffffffff') - -// ─── 导出类型 ─────────────────────────────────────────────────────────────── - -/** 解析后的 KMS 响应,对应 src/kms.h 中的 RESPONSE 结构 */ -export interface ParsedResponse { - majorVer: number // 主版本号 - minorVer: number // 次版本号 - pidSize: number // PID 大小(字节) - kmsPID: Buffer // KMS ePID (UCS-2 编码) - cmid: Buffer // 客户端机器 ID (16 字节 GUID) - clientTime: Buffer // 客户端请求时间 (8 字节 FILETIME) - count: number // 当前活跃客户端数 - vlActivationInterval: number // 激活间隔(分钟) - vlRenewalInterval: number // 续期间隔(分钟) -} - -// ─── 内部工具函数 ─────────────────────────────────────────────────────────── - -/** - * 从 ResponseResult 各字段计算位掩码 - * 参考: src/kms.c 中结果掩码的构建方式 - */ -function computeMask(r: ResponseResult): number { - let mask = 0 - if (r.hashOK) mask |= 1 << 0 - if (r.timeStampOK) mask |= 1 << 1 - if (r.clientMachineIDOK) mask |= 1 << 2 - if (r.versionOK) mask |= 1 << 3 - if (r.ivsOK) mask |= 1 << 4 - if (r.decryptSuccess) mask |= 1 << 5 - if (r.hmacSha256OK) mask |= 1 << 6 - if (r.pidLengthOK) mask |= 1 << 7 - if (r.rpcOK) mask |= 1 << 8 - if (r.ivNotSuspicious) mask |= 1 << 9 - mask |= (r.effectiveResponseSize & 0x1ff) << 14 - mask |= (r.correctResponseSize & 0x1ff) << 23 - return mask >>> 0 -} - -/** 创建空的 ParsedResponse(用于解密失败时的早期返回) */ -function emptyParsedResponse(): ParsedResponse { - return { - majorVer: 0, - minorVer: 0, - pidSize: 0, - kmsPID: Buffer.alloc(0), - cmid: Buffer.alloc(16), - clientTime: Buffer.alloc(8), - count: 0, - vlActivationInterval: 0, - vlRenewalInterval: 0 - } -} - -/** - * 验证 PID 长度 - * 检查: pidSize <= 128,最后一个 WCHAR 为 0,倒数第二个之前的字符都非零 - * - * 参考: src/kms.c 中的 checkPidLength() - */ -function checkPidLength(data: Buffer, pidSizeOffset: number): boolean { - const pidSize = data.readUInt32LE(pidSizeOffset) - if (pidSize > KMS_PID_MAX_BYTES) return false - - const pidOffset = pidSizeOffset + 4 - const numChars = pidSize >>> 1 - if (numChars < 1) return false - - // 最后一个 WCHAR 必须是空终止符 - if (data.readUInt16LE(pidOffset + (numChars - 1) * 2) !== 0) return false - - // 倒数第二个之前的所有 WCHAR 必须非零 - for (let i = 0; i < numChars - 2; i++) { - if (data.readUInt16LE(pidOffset + i * 2) === 0) return false - } - - return true -} - -/** - * 从解密后的数据中解析可变大小的响应基本字段 - * 参考: src/kms.c 中的响应解析逻辑 - */ -function parseResponseBase( - data: Buffer, - verOff: number, - pidSize: number, - postEpid: Buffer -): ParsedResponse { - const clampedPidSize = Math.min(pidSize, KMS_PID_MAX_BYTES) - - return { - minorVer: data.readUInt16LE(verOff), - majorVer: data.readUInt16LE(verOff + 2), - pidSize, - kmsPID: Buffer.from(data.subarray(verOff + 8, verOff + 8 + clampedPidSize)), - cmid: Buffer.from(postEpid.subarray(0, 16)), - clientTime: Buffer.from(postEpid.subarray(16, 24)), - count: postEpid.readUInt32LE(24), - vlActivationInterval: postEpid.readUInt32LE(28), - vlRenewalInterval: postEpid.readUInt32LE(32) - } -} - -/** - * 计算并写入 V6 HMAC - * 从响应中读取 ClientTime 来派生基于时间槽的密钥, - * 然后将 16 字节 HMAC 写入加密区域的末尾 - * - * 参考: src/kms.c 中的 CreateV6Hmac() - */ -function createV6Hmac( - encryptStart: Buffer, - encryptSize: number, - tolerance: number -): void { - // ClientTime 位于: 加密区域末尾 - V6_POST_EPID_SIZE + sizeof(CMID) - const ftOffset = encryptSize - V6_POST_EPID_SIZE + 16 - const clientTime = encryptStart.readBigUInt64LE(ftOffset) - - // 时间槽 ≈ 4.11 小时粒度 - const timeSlot = - ((clientTime / TIME_C1) * TIME_C2 + TIME_C3 + BigInt(tolerance) * TIME_C1) & - UINT64_MASK - - const timeSlotBuf = Buffer.alloc(8) - timeSlotBuf.writeBigUInt64LE(timeSlot) - const hash = sha256(timeSlotBuf) - - // HMAC 密钥 = SHA256(timeSlot) 的后 16 字节 - const hmacKey = hash.subarray(HALF_HASH_SIZE) - const hmacData = encryptStart.subarray(0, encryptSize - HMAC_SIZE) - const hmacResult = sha256Hmac(hmacKey, hmacData) - - // 将 HMAC 结果的后 16 字节写入 HMAC 字段 - hmacResult.copy( - encryptStart, - encryptSize - HMAC_SIZE, - HALF_HASH_SIZE, - HASH_SIZE - ) -} - -// ─── 创建 V4 请求 (参考 src/kms.c 中的 CreateRequestV4) ──────────────────── - -/** - * 构建 252 字节的 V4 KMS 请求: REQUEST(236) + AES-CMAC(16) - */ -export function createRequestV4(requestBase: Buffer): Buffer { - const request = Buffer.alloc(REQUEST_V4_SIZE) - requestBase.copy(request, 0, 0, REQUEST_SIZE) - - // 计算 AES-CMAC 并附加到请求末尾 - const mac = aesCmacV4(request, REQUEST_SIZE) - mac.copy(request, REQUEST_SIZE) - - return request -} - -// ─── 创建 V5/V6 请求 (参考 src/kms.c 中的 CreateRequestV6) ───────────────── - -/** - * 构建 260 字节的 V5/V6 KMS 请求: Version(4) + IV(16) + 加密的请求(240) - */ -export function createRequestV6(requestBase: Buffer): Buffer { - const request = Buffer.alloc(REQUEST_V6_SIZE) - - // 外层版本号 = requestBase 版本号 - requestBase.copy(request, 0, 0, 4) - - // 随机 16 字节 IV - const iv = get16RandomBytes() - iv.copy(request, 4) - - // 将基础请求复制到加密区域 - requestBase.copy(request, 20, 0, REQUEST_SIZE) - - // 根据主版本号选择密钥(V6 使用 AesKeyV6,V5 使用 AesKeyV5) - const majorVer = request.readUInt16LE(2) - const isV6 = majorVer > 5 - - const ctx = new AesCtx() - ctx.initKey(isV6 ? AesKeyV6 : AesKeyV5, isV6, AES_KEY_BYTES) - - // 加密请求(236 字节 → 240 字节,含 PKCS#7 填充) - const plaintext = Buffer.from(request.subarray(20, 20 + REQUEST_SIZE)) - const { encrypted } = aesEncryptCbc(ctx, iv, plaintext) - encrypted.copy(request, 20) - - return request -} - -// ─── 解密 V4 响应 (参考 src/kms.c 中的 DecryptResponseV4) ────────────────── - -/** - * 解密并验证 V4 KMS 响应 - * 线路格式: Version(4) + PIDSize(4) + PID(变长) + CMID(16) + - * ClientTime(8) + Count(4) + Intervals(8) + MAC(16) - */ -export function decryptResponseV4( - rawResponse: Buffer, - rawRequest: Buffer -): { result: ResponseResult; response: ParsedResponse } { - const responseSize = rawResponse.length - - // 确定变长 PID 大小 - const pidSize = rawResponse.readUInt32LE(4) - const clampedPidSize = Math.min(pidSize, KMS_PID_MAX_BYTES) - const copySize = V4_PRE_EPID_SIZE + clampedPidSize - const messageSize = copySize + V4_POST_EPID_SIZE - - // 提取 ePID 后面的区域(CMID、ClientTime、Count、Intervals) - const postEpid = Buffer.from( - rawResponse.subarray(copySize, copySize + V4_POST_EPID_SIZE) - ) - const parsed = parseResponseBase(rawResponse, 0, pidSize, postEpid) - - // 计算 CMAC 并与接收到的 MAC 比较 - const computedMac = aesCmacV4(rawResponse, messageSize) - const receivedMac = rawResponse.subarray(messageSize, messageSize + 16) - - // 与请求字段进行验证 - const reqVersion = rawRequest.readUInt32LE(0) - const reqClientTime = rawRequest.subarray(84, 92) // REQUEST.ClientTime - const reqCMID = rawRequest.subarray(64, 80) // REQUEST.CMID - - const result: ResponseResult = { - mask: 0, - hashOK: computedMac.equals(receivedMac), - timeStampOK: parsed.clientTime.equals(reqClientTime), - clientMachineIDOK: parsed.cmid.equals(reqCMID), - versionOK: rawResponse.readUInt32LE(0) === reqVersion, - ivsOK: true, - decryptSuccess: true, - hmacSha256OK: true, - pidLengthOK: checkPidLength(rawResponse, 4), - rpcOK: true, - ivNotSuspicious: true, - effectiveResponseSize: responseSize, - correctResponseSize: SIZEOF_RESPONSE_V4 - KMS_PID_MAX_BYTES + pidSize - } - result.mask = computeMask(result) - - return { result, response: parsed } -} - -// ─── 解密 V5/V6 响应 (参考 src/kms.c 中的 DecryptResponseV6) ─────────────── - -/** - * 解密并验证 V5/V6 KMS 响应 - * - * 线路格式(Version 之后的部分为加密): - * Version(4) + [IV(16) + ResponseBase(变长) + RandomXoredIVs(16) + Hash(32) - * + HwId(8, 仅V6) + XoredIVs(16, 仅V6) + HMAC(16, 仅V6) - * + PKCS填充] - */ -export function decryptResponseV6( - rawResponse: Buffer, - rawRequest: Buffer -): { result: ResponseResult; response: ParsedResponse; hwid: Buffer } { - const totalSize = rawResponse.length - const hwid = Buffer.alloc(8) - - // 创建可变工作副本(解密是就地操作) - const response = Buffer.from(rawResponse) - const request = Buffer.from(rawRequest) - - // 初始假设所有验证通过 - const result: ResponseResult = { - mask: 0, - hashOK: true, - timeStampOK: true, - clientMachineIDOK: true, - versionOK: true, - ivsOK: true, - decryptSuccess: true, - hmacSha256OK: true, - pidLengthOK: true, - rpcOK: true, - ivNotSuspicious: true, - effectiveResponseSize: totalSize, - correctResponseSize: 0 - } - - // 从外层(未加密)版本字段确定协议版本 - const majorVer = response.readUInt16LE(2) - const isV6 = majorVer > 5 - - // 解密 4 字节 Version 之后的所有内容 - const ctx = new AesCtx() - ctx.initKey(isV6 ? AesKeyV6 : AesKeyV5, isV6, AES_KEY_BYTES) - - const encryptedLen = totalSize - 4 - aesDecryptCbc(ctx, null, response.subarray(4), encryptedLen) - - // ── 验证 PKCS#7 填充 ── - const lastByte = response[totalSize - 1] - if (lastByte === 0 || lastByte > AES_BLOCK_BYTES) { - result.decryptSuccess = false - result.mask = computeMask(result) - return { result, response: emptyParsedResponse(), hwid } - } - for (let i = totalSize - lastByte; i < totalSize - 1; i++) { - if (response[i] !== lastByte) { - result.decryptSuccess = false - result.mask = computeMask(result) - return { result, response: emptyParsedResponse(), hwid } - } - } - - // ── 解析解密后的响应 ── - const pidSize = response.readUInt32LE(V6_PRE_EPID_SIZE - 4) // ResponseBase.PIDSize - const clampedPidSize = Math.min(pidSize, KMS_PID_MAX_BYTES) - const copySize1 = V6_PRE_EPID_SIZE + clampedPidSize - - const postEpidSize = isV6 ? V6_POST_EPID_SIZE : V5_POST_EPID_SIZE - const postEpid = Buffer.from( - response.subarray(copySize1, copySize1 + postEpidSize) - ) - - const parsed = parseResponseBase( - response, - V6_UNENCRYPTED_SIZE, - pidSize, - postEpid - ) - - // ── 解密请求的 IV + RequestBase + Pad(用于验证) ── - aesDecryptCbc(ctx, null, request.subarray(4), V6_DECRYPT_SIZE) - - // ── 版本一致性检查 ── - const outerReqVersion = request.readUInt32LE(0) - const innerReqVersion = request.readUInt32LE(20) // RequestBase.Version - const outerRespVersion = response.readUInt32LE(0) - const innerRespVersion = response.readUInt32LE(V6_UNENCRYPTED_SIZE) // ResponseBase.Version - - result.versionOK = - outerReqVersion === innerRespVersion && - outerReqVersion === outerRespVersion && - outerReqVersion === innerReqVersion - - // ── PID、时间戳、CMID 检查 ── - result.pidLengthOK = checkPidLength(response, V6_PRE_EPID_SIZE - 4) - - const reqClientTime = request.subarray(20 + 84, 20 + 92) // RequestBase.ClientTime - result.timeStampOK = parsed.clientTime.equals(reqClientTime) - - const reqCMID = request.subarray(20 + 64, 20 + 80) // RequestBase.CMID - result.clientMachineIDOK = parsed.cmid.equals(reqCMID) - - // ── 哈希验证 (RandomXoredIVs / Hash) ── - const decryptedReqIV = Buffer.from(request.subarray(4, 20)) - const randomXoredIVs = postEpid.subarray( - V4_POST_EPID_SIZE, - V4_POST_EPID_SIZE + 16 - ) - const receivedHash = postEpid.subarray( - V4_POST_EPID_SIZE + 16, - V4_POST_EPID_SIZE + 16 + HASH_SIZE - ) - - // 恢复原始随机字节: random = decryptedReqIV XOR RandomXoredIVs - const randomKey = Buffer.from(decryptedReqIV) - xorBlock(randomXoredIVs, randomKey) - const hashVerify = sha256(randomKey) - result.hashOK = hashVerify.equals(receivedHash) - - // ── 计算正确的响应大小(不含 PKCS 填充) ── - const sizeofStruct = isV6 ? SIZEOF_RESPONSE_V6 : SIZEOF_RESPONSE_V5 - result.correctResponseSize = sizeofStruct - KMS_PID_MAX_BYTES + pidSize - - // ── 版本特定验证 ── - if (isV6) { - // 提取 HwId - postEpid.copy(hwid, 0, V5_POST_EPID_SIZE, V5_POST_EPID_SIZE + 8) - - // XoredIVs 必须等于解密后的请求 IV - const xoredIVs = postEpid.subarray( - V5_POST_EPID_SIZE + 8, - V5_POST_EPID_SIZE + 24 - ) - result.ivsOK = decryptedReqIV.equals(xoredIVs) - - // 请求和响应的 IV 应该不同(相同说明是模拟器) - const responseIV = response.subarray(4, 20) - result.ivNotSuspicious = !decryptedReqIV.equals(responseIV) - - // 使用 ±1 时间槽容差验证 HMAC - const savedHmac = Buffer.from( - postEpid.subarray(V5_POST_EPID_SIZE + 24, V5_POST_EPID_SIZE + 40) - ) - result.hmacSha256OK = false - - const encryptStart = response.subarray(4) - const encryptSize = result.correctResponseSize - 4 - - for (let tolerance = -1; tolerance <= 1; tolerance++) { - createV6Hmac(encryptStart, encryptSize, tolerance) - const computed = encryptStart.subarray( - encryptSize - HMAC_SIZE, - encryptSize - ) - if (savedHmac.equals(computed)) { - result.hmacSha256OK = true - break - } - } - } else { - // V5: 请求和响应的 IV 必须匹配 - const responseIV = response.subarray(4, 20) - result.ivsOK = decryptedReqIV.equals(responseIV) - result.hmacSha256OK = true // V5 没有 HMAC - } - - // 将 PKCS 填充加到 correctResponseSize - const encPartSize = result.correctResponseSize - 4 - result.correctResponseSize += (~encPartSize & 0xf) + 1 - - result.mask = computeMask(result) - return { result, response: parsed, hwid } -} +/** + * KMS 协议实现 — 处理 V4/V5/V6 请求创建和响应解密 + * + * 参考原版源码: + * - src/kms.c (CreateRequestV4, CreateRequestV6, DecryptResponseV4, DecryptResponseV6) + * - src/kms.h (REQUEST, RESPONSE, RESPONSE_RESULT 等结构定义) + */ + +import { + AesCtx, + AES_BLOCK_BYTES, + AES_KEY_BYTES, + AesKeyV5, + AesKeyV6, + xorBlock, + aesCmacV4, + aesEncryptCbc, + aesDecryptCbc, + sha256, + sha256Hmac, + get16RandomBytes +} from './crypto' + +import { PID_BUFFER_SIZE, ResponseResult } from './types' + +// 重新导出时间工具函数 +export { + unixTimeToFileTime as getUnixTimeAsFileTime, + fileTimeToUnixTime +} from './types' + +// ─── 协议大小常量 (参考 src/kms.h 中的结构体大小) ────────────────────────── + +// REQUEST 结构: Version(4) + VMInfo(4) + LicenseStatus(4) + BindingExpiration(4) + +// AppID(16) + ActID(16) + KMSID(16) + CMID(16) + N_Policy(4) + +// ClientTime(8) + CMID_prev(16) + WorkstationName(128) = 236 字节 +const REQUEST_SIZE = 236 +/** V4 请求大小: REQUEST(236) + AES-CMAC(16) = 252 字节 */ +const REQUEST_V4_SIZE = 252 +/** V5/V6 请求大小: Version(4) + IV(16) + REQUEST(236) + Pad(4) = 260 字节 */ +const REQUEST_V6_SIZE = 260 + +/** V4 响应中 ePID 前面的字段大小: Version(4) + PIDSize(4) = 8 字节 */ +const V4_PRE_EPID_SIZE = 8 +/** V4 响应中 ePID 后面的字段大小: CMID(16) + ClientTime(8) + Count(4) + VLActivation(4) + VLRenewal(4) = 36 字节 */ +const V4_POST_EPID_SIZE = 36 +/** V6 未加密部分大小: Version(4) + IV(16) = 20 字节 */ +const V6_UNENCRYPTED_SIZE = 20 +/** V6 响应中 ePID 前面的字段大小: V6未加密(20) + ResponseBase.Version(4) + PIDSize(4) = 28 字节 */ +const V6_PRE_EPID_SIZE = 28 +/** V5 响应中 ePID 后面的额外字段: V4后(36) + RandomXoredIVs(16) + Hash(32) = 84 字节 */ +const V5_POST_EPID_SIZE = 84 +/** V6 响应中 ePID 后面的额外字段: V5后(84) + HwId(8) + XoredIVs(16) + HMAC(16) = 124 字节 */ +const V6_POST_EPID_SIZE = 124 +/** V6 解密大小: IV(16) + REQUEST(236) + Pad(4) = 256 字节 */ +const V6_DECRYPT_SIZE = 256 + +const HMAC_SIZE = 16 +const HASH_SIZE = 32 +const HALF_HASH_SIZE = HASH_SIZE >> 1 +/** PID 最大字节数: PID_BUFFER_SIZE * 2 = 128 字节 (UCS-2 编码) */ +const KMS_PID_MAX_BYTES = PID_BUFFER_SIZE * 2 + +// 最大结构体大小(使用完整 PID_BUFFER_SIZE 时) +/** V4 响应最大大小: RESPONSE(172) + MAC(16) = 188 字节 */ +const SIZEOF_RESPONSE_V4 = 188 +/** V5 响应最大大小: Version(4) + IV(16) + RESPONSE(172) + RandomXoredIVs(16) + Hash(32) = 240 字节 */ +const SIZEOF_RESPONSE_V5 = 240 +/** V6 响应最大大小: V5(240) + HwId(8) + XoredIVs(16) + HMAC(16) = 280 字节 */ +const SIZEOF_RESPONSE_V6 = 280 + +// V6 时间槽常量(每个时间槽约 4.11 小时) +// 用于 HMAC 计算,参考 src/kms.c 中的 CreateV6Hmac() +const TIME_C1 = BigInt('0x00000022816889bd') +const TIME_C2 = BigInt('0x000000208cbab5ed') +const TIME_C3 = BigInt('0x3156cd5ac628477a') +const UINT64_MASK = BigInt('0xffffffffffffffff') + +// ─── 导出类型 ─────────────────────────────────────────────────────────────── + +/** 解析后的 KMS 响应,对应 src/kms.h 中的 RESPONSE 结构 */ +export interface ParsedResponse { + majorVer: number // 主版本号 + minorVer: number // 次版本号 + pidSize: number // PID 大小(字节) + kmsPID: Buffer // KMS ePID (UCS-2 编码) + cmid: Buffer // 客户端机器 ID (16 字节 GUID) + clientTime: Buffer // 客户端请求时间 (8 字节 FILETIME) + count: number // 当前活跃客户端数 + vlActivationInterval: number // 激活间隔(分钟) + vlRenewalInterval: number // 续期间隔(分钟) +} + +// ─── 内部工具函数 ─────────────────────────────────────────────────────────── + +/** + * 从 ResponseResult 各字段计算位掩码 + * 参考: src/kms.c 中结果掩码的构建方式 + */ +function computeMask(r: ResponseResult): number { + let mask = 0 + if (r.hashOK) mask |= 1 << 0 + if (r.timeStampOK) mask |= 1 << 1 + if (r.clientMachineIDOK) mask |= 1 << 2 + if (r.versionOK) mask |= 1 << 3 + if (r.ivsOK) mask |= 1 << 4 + if (r.decryptSuccess) mask |= 1 << 5 + if (r.hmacSha256OK) mask |= 1 << 6 + if (r.pidLengthOK) mask |= 1 << 7 + if (r.rpcOK) mask |= 1 << 8 + if (r.ivNotSuspicious) mask |= 1 << 9 + mask |= (r.effectiveResponseSize & 0x1ff) << 14 + mask |= (r.correctResponseSize & 0x1ff) << 23 + return mask >>> 0 +} + +/** 创建空的 ParsedResponse(用于解密失败时的早期返回) */ +function emptyParsedResponse(): ParsedResponse { + return { + majorVer: 0, + minorVer: 0, + pidSize: 0, + kmsPID: Buffer.alloc(0), + cmid: Buffer.alloc(16), + clientTime: Buffer.alloc(8), + count: 0, + vlActivationInterval: 0, + vlRenewalInterval: 0 + } +} + +/** + * 验证 PID 长度 + * 检查: pidSize <= 128,最后一个 WCHAR 为 0,倒数第二个之前的字符都非零 + * + * 参考: src/kms.c 中的 checkPidLength() + */ +function checkPidLength(data: Buffer, pidSizeOffset: number): boolean { + const pidSize = data.readUInt32LE(pidSizeOffset) + if (pidSize > KMS_PID_MAX_BYTES) return false + + const pidOffset = pidSizeOffset + 4 + const numChars = pidSize >>> 1 + if (numChars < 1) return false + + // 最后一个 WCHAR 必须是空终止符 + if (data.readUInt16LE(pidOffset + (numChars - 1) * 2) !== 0) return false + + // 倒数第二个之前的所有 WCHAR 必须非零 + for (let i = 0; i < numChars - 2; i++) { + if (data.readUInt16LE(pidOffset + i * 2) === 0) return false + } + + return true +} + +/** + * 从解密后的数据中解析可变大小的响应基本字段 + * 参考: src/kms.c 中的响应解析逻辑 + */ +function parseResponseBase( + data: Buffer, + verOff: number, + pidSize: number, + postEpid: Buffer +): ParsedResponse { + const clampedPidSize = Math.min(pidSize, KMS_PID_MAX_BYTES) + + return { + minorVer: data.readUInt16LE(verOff), + majorVer: data.readUInt16LE(verOff + 2), + pidSize, + kmsPID: Buffer.from(data.subarray(verOff + 8, verOff + 8 + clampedPidSize)), + cmid: Buffer.from(postEpid.subarray(0, 16)), + clientTime: Buffer.from(postEpid.subarray(16, 24)), + count: postEpid.readUInt32LE(24), + vlActivationInterval: postEpid.readUInt32LE(28), + vlRenewalInterval: postEpid.readUInt32LE(32) + } +} + +/** + * 计算并写入 V6 HMAC + * 从响应中读取 ClientTime 来派生基于时间槽的密钥, + * 然后将 16 字节 HMAC 写入加密区域的末尾 + * + * 参考: src/kms.c 中的 CreateV6Hmac() + */ +function createV6Hmac( + encryptStart: Buffer, + encryptSize: number, + tolerance: number +): void { + // ClientTime 位于: 加密区域末尾 - V6_POST_EPID_SIZE + sizeof(CMID) + const ftOffset = encryptSize - V6_POST_EPID_SIZE + 16 + const clientTime = encryptStart.readBigUInt64LE(ftOffset) + + // 时间槽 ≈ 4.11 小时粒度 + const timeSlot = + ((clientTime / TIME_C1) * TIME_C2 + TIME_C3 + BigInt(tolerance) * TIME_C1) & + UINT64_MASK + + const timeSlotBuf = Buffer.alloc(8) + timeSlotBuf.writeBigUInt64LE(timeSlot) + const hash = sha256(timeSlotBuf) + + // HMAC 密钥 = SHA256(timeSlot) 的后 16 字节 + const hmacKey = hash.subarray(HALF_HASH_SIZE) + const hmacData = encryptStart.subarray(0, encryptSize - HMAC_SIZE) + const hmacResult = sha256Hmac(hmacKey, hmacData) + + // 将 HMAC 结果的后 16 字节写入 HMAC 字段 + hmacResult.copy( + encryptStart, + encryptSize - HMAC_SIZE, + HALF_HASH_SIZE, + HASH_SIZE + ) +} + +// ─── 创建 V4 请求 (参考 src/kms.c 中的 CreateRequestV4) ──────────────────── + +/** + * 构建 252 字节的 V4 KMS 请求: REQUEST(236) + AES-CMAC(16) + */ +export function createRequestV4(requestBase: Buffer): Buffer { + const request = Buffer.alloc(REQUEST_V4_SIZE) + requestBase.copy(request, 0, 0, REQUEST_SIZE) + + // 计算 AES-CMAC 并附加到请求末尾 + const mac = aesCmacV4(request, REQUEST_SIZE) + mac.copy(request, REQUEST_SIZE) + + return request +} + +// ─── 创建 V5/V6 请求 (参考 src/kms.c 中的 CreateRequestV6) ───────────────── + +/** + * 构建 260 字节的 V5/V6 KMS 请求: Version(4) + IV(16) + 加密的请求(240) + */ +export function createRequestV6(requestBase: Buffer): Buffer { + const request = Buffer.alloc(REQUEST_V6_SIZE) + + // 外层版本号 = requestBase 版本号 + requestBase.copy(request, 0, 0, 4) + + // 随机 16 字节 IV + const iv = get16RandomBytes() + iv.copy(request, 4) + + // 将基础请求复制到加密区域 + requestBase.copy(request, 20, 0, REQUEST_SIZE) + + // 根据主版本号选择密钥(V6 使用 AesKeyV6,V5 使用 AesKeyV5) + const majorVer = request.readUInt16LE(2) + const isV6 = majorVer > 5 + + const ctx = new AesCtx() + ctx.initKey(isV6 ? AesKeyV6 : AesKeyV5, isV6, AES_KEY_BYTES) + + // 加密请求(236 字节 → 240 字节,含 PKCS#7 填充) + const plaintext = Buffer.from(request.subarray(20, 20 + REQUEST_SIZE)) + const { encrypted } = aesEncryptCbc(ctx, iv, plaintext) + encrypted.copy(request, 20) + + return request +} + +// ─── 解密 V4 响应 (参考 src/kms.c 中的 DecryptResponseV4) ────────────────── + +/** + * 解密并验证 V4 KMS 响应 + * 线路格式: Version(4) + PIDSize(4) + PID(变长) + CMID(16) + + * ClientTime(8) + Count(4) + Intervals(8) + MAC(16) + */ +export function decryptResponseV4( + rawResponse: Buffer, + rawRequest: Buffer +): { result: ResponseResult; response: ParsedResponse } { + const responseSize = rawResponse.length + + // 确定变长 PID 大小 + const pidSize = rawResponse.readUInt32LE(4) + const clampedPidSize = Math.min(pidSize, KMS_PID_MAX_BYTES) + const copySize = V4_PRE_EPID_SIZE + clampedPidSize + const messageSize = copySize + V4_POST_EPID_SIZE + + // 提取 ePID 后面的区域(CMID、ClientTime、Count、Intervals) + const postEpid = Buffer.from( + rawResponse.subarray(copySize, copySize + V4_POST_EPID_SIZE) + ) + const parsed = parseResponseBase(rawResponse, 0, pidSize, postEpid) + + // 计算 CMAC 并与接收到的 MAC 比较 + const computedMac = aesCmacV4(rawResponse, messageSize) + const receivedMac = rawResponse.subarray(messageSize, messageSize + 16) + + // 与请求字段进行验证 + const reqVersion = rawRequest.readUInt32LE(0) + const reqClientTime = rawRequest.subarray(84, 92) // REQUEST.ClientTime + const reqCMID = rawRequest.subarray(64, 80) // REQUEST.CMID + + const result: ResponseResult = { + mask: 0, + hashOK: computedMac.equals(receivedMac), + timeStampOK: parsed.clientTime.equals(reqClientTime), + clientMachineIDOK: parsed.cmid.equals(reqCMID), + versionOK: rawResponse.readUInt32LE(0) === reqVersion, + ivsOK: true, + decryptSuccess: true, + hmacSha256OK: true, + pidLengthOK: checkPidLength(rawResponse, 4), + rpcOK: true, + ivNotSuspicious: true, + effectiveResponseSize: responseSize, + correctResponseSize: SIZEOF_RESPONSE_V4 - KMS_PID_MAX_BYTES + pidSize + } + result.mask = computeMask(result) + + return { result, response: parsed } +} + +// ─── 解密 V5/V6 响应 (参考 src/kms.c 中的 DecryptResponseV6) ─────────────── + +/** + * 解密并验证 V5/V6 KMS 响应 + * + * 线路格式(Version 之后的部分为加密): + * Version(4) + [IV(16) + ResponseBase(变长) + RandomXoredIVs(16) + Hash(32) + * + HwId(8, 仅V6) + XoredIVs(16, 仅V6) + HMAC(16, 仅V6) + * + PKCS填充] + */ +export function decryptResponseV6( + rawResponse: Buffer, + rawRequest: Buffer +): { result: ResponseResult; response: ParsedResponse; hwid: Buffer } { + const totalSize = rawResponse.length + const hwid = Buffer.alloc(8) + + // 创建可变工作副本(解密是就地操作) + const response = Buffer.from(rawResponse) + const request = Buffer.from(rawRequest) + + // 初始假设所有验证通过 + const result: ResponseResult = { + mask: 0, + hashOK: true, + timeStampOK: true, + clientMachineIDOK: true, + versionOK: true, + ivsOK: true, + decryptSuccess: true, + hmacSha256OK: true, + pidLengthOK: true, + rpcOK: true, + ivNotSuspicious: true, + effectiveResponseSize: totalSize, + correctResponseSize: 0 + } + + // 从外层(未加密)版本字段确定协议版本 + const majorVer = response.readUInt16LE(2) + const isV6 = majorVer > 5 + + // 解密 4 字节 Version 之后的所有内容 + const ctx = new AesCtx() + ctx.initKey(isV6 ? AesKeyV6 : AesKeyV5, isV6, AES_KEY_BYTES) + + const encryptedLen = totalSize - 4 + aesDecryptCbc(ctx, null, response.subarray(4), encryptedLen) + + // ── 验证 PKCS#7 填充 ── + const lastByte = response[totalSize - 1] + if (lastByte === 0 || lastByte > AES_BLOCK_BYTES) { + result.decryptSuccess = false + result.mask = computeMask(result) + return { result, response: emptyParsedResponse(), hwid } + } + for (let i = totalSize - lastByte; i < totalSize - 1; i++) { + if (response[i] !== lastByte) { + result.decryptSuccess = false + result.mask = computeMask(result) + return { result, response: emptyParsedResponse(), hwid } + } + } + + // ── 解析解密后的响应 ── + const pidSize = response.readUInt32LE(V6_PRE_EPID_SIZE - 4) // ResponseBase.PIDSize + const clampedPidSize = Math.min(pidSize, KMS_PID_MAX_BYTES) + const copySize1 = V6_PRE_EPID_SIZE + clampedPidSize + + const postEpidSize = isV6 ? V6_POST_EPID_SIZE : V5_POST_EPID_SIZE + const postEpid = Buffer.from( + response.subarray(copySize1, copySize1 + postEpidSize) + ) + + const parsed = parseResponseBase( + response, + V6_UNENCRYPTED_SIZE, + pidSize, + postEpid + ) + + // ── 解密请求的 IV + RequestBase + Pad(用于验证) ── + aesDecryptCbc(ctx, null, request.subarray(4), V6_DECRYPT_SIZE) + + // ── 版本一致性检查 ── + const outerReqVersion = request.readUInt32LE(0) + const innerReqVersion = request.readUInt32LE(20) // RequestBase.Version + const outerRespVersion = response.readUInt32LE(0) + const innerRespVersion = response.readUInt32LE(V6_UNENCRYPTED_SIZE) // ResponseBase.Version + + result.versionOK = + outerReqVersion === innerRespVersion && + outerReqVersion === outerRespVersion && + outerReqVersion === innerReqVersion + + // ── PID、时间戳、CMID 检查 ── + result.pidLengthOK = checkPidLength(response, V6_PRE_EPID_SIZE - 4) + + const reqClientTime = request.subarray(20 + 84, 20 + 92) // RequestBase.ClientTime + result.timeStampOK = parsed.clientTime.equals(reqClientTime) + + const reqCMID = request.subarray(20 + 64, 20 + 80) // RequestBase.CMID + result.clientMachineIDOK = parsed.cmid.equals(reqCMID) + + // ── 哈希验证 (RandomXoredIVs / Hash) ── + const decryptedReqIV = Buffer.from(request.subarray(4, 20)) + const randomXoredIVs = postEpid.subarray( + V4_POST_EPID_SIZE, + V4_POST_EPID_SIZE + 16 + ) + const receivedHash = postEpid.subarray( + V4_POST_EPID_SIZE + 16, + V4_POST_EPID_SIZE + 16 + HASH_SIZE + ) + + // 恢复原始随机字节: random = decryptedReqIV XOR RandomXoredIVs + const randomKey = Buffer.from(decryptedReqIV) + xorBlock(randomXoredIVs, randomKey) + const hashVerify = sha256(randomKey) + result.hashOK = hashVerify.equals(receivedHash) + + // ── 计算正确的响应大小(不含 PKCS 填充) ── + const sizeofStruct = isV6 ? SIZEOF_RESPONSE_V6 : SIZEOF_RESPONSE_V5 + result.correctResponseSize = sizeofStruct - KMS_PID_MAX_BYTES + pidSize + + // ── 版本特定验证 ── + if (isV6) { + // 提取 HwId + postEpid.copy(hwid, 0, V5_POST_EPID_SIZE, V5_POST_EPID_SIZE + 8) + + // XoredIVs 必须等于解密后的请求 IV + const xoredIVs = postEpid.subarray( + V5_POST_EPID_SIZE + 8, + V5_POST_EPID_SIZE + 24 + ) + result.ivsOK = decryptedReqIV.equals(xoredIVs) + + // 请求和响应的 IV 应该不同(相同说明是模拟器) + const responseIV = response.subarray(4, 20) + result.ivNotSuspicious = !decryptedReqIV.equals(responseIV) + + // 使用 ±1 时间槽容差验证 HMAC + const savedHmac = Buffer.from( + postEpid.subarray(V5_POST_EPID_SIZE + 24, V5_POST_EPID_SIZE + 40) + ) + result.hmacSha256OK = false + + const encryptStart = response.subarray(4) + const encryptSize = result.correctResponseSize - 4 + + for (let tolerance = -1; tolerance <= 1; tolerance++) { + createV6Hmac(encryptStart, encryptSize, tolerance) + const computed = encryptStart.subarray( + encryptSize - HMAC_SIZE, + encryptSize + ) + if (savedHmac.equals(computed)) { + result.hmacSha256OK = true + break + } + } + } else { + // V5: 请求和响应的 IV 必须匹配 + const responseIV = response.subarray(4, 20) + result.ivsOK = decryptedReqIV.equals(responseIV) + result.hmacSha256OK = true // V5 没有 HMAC + } + + // 将 PKCS 填充加到 correctResponseSize + const encPartSize = result.correctResponseSize - 4 + result.correctResponseSize += (~encPartSize & 0xf) + 1 + + result.mask = computeMask(result) + return { result, response: parsed, hwid } +} diff --git a/node-vlmcs/src/rpc.ts b/node-vlmcs/src/rpc.ts index 036154de..3fbd081a 100644 --- a/node-vlmcs/src/rpc.ts +++ b/node-vlmcs/src/rpc.ts @@ -1,626 +1,626 @@ -/** - * DCE-RPC 协议层 — 实现 KMS 激活所需的 DCE-RPC 客户端协议 - * - * 参考原版源码: - * - src/rpc.c (rpcBindOrAlterClientContext, rpcSendRequest 等) - * - src/rpc.h (RPC_HEADER, RPC_BIND_REQUEST, RPC_RESPONSE 等结构定义) - */ - -import * as net from 'net' -import { sendData, recvData } from './network' - -// ─── 数据包类型 (参考 src/rpc.h 中的 RPC_PT_* 常量) ──────────────────────── - -const RPC_PT_REQUEST = 0 // 请求 -const RPC_PT_RESPONSE = 2 // 响应 -const RPC_PT_FAULT = 3 // 错误 -const RPC_PT_BIND_REQ = 11 // 绑定请求 -const RPC_PT_BIND_ACK = 12 // 绑定确认 -const RPC_PT_ALTERCONTEXT_REQ = 14 // 修改上下文请求 -const RPC_PT_ALTERCONTEXT_ACK = 15 // 修改上下文确认 - -// ─── 数据包标志 ───────────────────────────────────────────────────────────── - -const RPC_PF_FIRST = 1 // 分片的第一个包 -const RPC_PF_LAST = 2 // 分片的最后一个包 -const RPC_PF_MULTIPLEX = 16 // 多路复用 - -// ─── 绑定确认结果码 (参考 src/rpc.h) ─────────────────────────────────────── - -const RPC_BIND_ACCEPT = 0 // 接受 -const RPC_BIND_NACK = 2 // 拒绝 -const RPC_BIND_ACK = 3 // 确认(用于 BTFN 绑定时间特性协商) - -// ─── RPC 头部大小 ─────────────────────────────────────────────────────────── - -/** RPC 头部固定大小: 16 字节 */ -const RPC_HEADER_SIZE = 16 - -// ─── GUID 常量 (原始线路字节,无字节序转换) ───────────────────────────────── - -/** NDR32 传输语法 GUID */ -const TransferSyntaxNDR32 = Buffer.from([ - 0x04, 0x5d, 0x88, 0x8a, 0xeb, 0x1c, 0xc9, 0x11, 0x9f, 0xe8, 0x08, 0x00, 0x2b, - 0x10, 0x48, 0x60 -]) - -/** KMS 接口 UUID */ -const InterfaceUuid = Buffer.from([ - 0x75, 0x21, 0xc8, 0x51, 0x4e, 0x84, 0x50, 0x47, 0xb0, 0xd8, 0xec, 0x25, 0x55, - 0x55, 0xbc, 0x06 -]) - -/** NDR64 传输语法 GUID */ -const TransferSyntaxNDR64 = Buffer.from([ - 0x33, 0x05, 0x71, 0x71, 0xba, 0xbe, 0x37, 0x49, 0x83, 0x19, 0xb5, 0xdb, 0xef, - 0x9c, 0xcc, 0x36 -]) - -/** 绑定时间特性协商 GUID (BTFN) */ -const BindTimeFeatureNegotiation = Buffer.from([ - 0x2c, 0x1c, 0xb7, 0x6c, 0x12, 0x98, 0x40, 0x45, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00 -]) - -// ─── 导出接口 ─────────────────────────────────────────────────────────────── - -/** RPC 已协商的能力标志 */ -export interface RpcFlags { - hasNDR32: boolean // 是否支持 NDR32 传输语法 - hasNDR64: boolean // 是否支持 NDR64 传输语法 - hasBTFN: boolean // 是否支持绑定时间特性协商 -} - -/** RPC 诊断信息 */ -export interface RpcDiag { - hasRpcDiag: boolean // 是否有 RPC 诊断信息 - hasBTFN: boolean // 服务器是否支持 BTFN - hasNDR64: boolean // 服务器是否支持 NDR64 -} - -// ─── 状态 ─────────────────────────────────────────────────────────────────── - -/** 调用 ID,从 2 开始(与微软实现一致) */ -let callId = 2 - -// ─── 工具函数: 写入 RPC 头部 ─────────────────────────────────────────────── - -/** - * 写入 RPC 头部 (16 字节) - * 参考: src/rpc.h 中的 RPC_HEADER 结构 - */ -function writeRpcHeader( - buf: Buffer, - packetType: number, - packetFlags: number, - fragLength: number, - currentCallId: number -): void { - buf.writeUInt8(5, 0) // VersionMajor = 5 - buf.writeUInt8(0, 1) // VersionMinor = 0 - buf.writeUInt8(packetType, 2) // PacketType - buf.writeUInt8(packetFlags, 3) // PacketFlags - buf.writeUInt32LE(0x00000010, 4) // DataRepresentation: LE, ASCII, IEEE - buf.writeUInt16LE(fragLength, 8) // FragLength - buf.writeUInt16LE(0, 10) // AuthLength - buf.writeUInt32LE(currentCallId, 12) // CallId -} - -// ─── 工具函数: 解析 RPC 头部 ─────────────────────────────────────────────── - -interface RpcHeader { - versionMajor: number - versionMinor: number - packetType: number - packetFlags: number - dataRepresentation: number - fragLength: number - authLength: number - callId: number -} - -/** 从 Buffer 解析 RPC 头部 */ -function parseRpcHeader(buf: Buffer): RpcHeader { - return { - versionMajor: buf.readUInt8(0), - versionMinor: buf.readUInt8(1), - packetType: buf.readUInt8(2), - packetFlags: buf.readUInt8(3), - dataRepresentation: buf.readUInt32LE(4), - fragLength: buf.readUInt16LE(8), - authLength: buf.readUInt16LE(10), - callId: buf.readUInt32LE(12) - } -} - -/** 获取数据包类型的可读名称(用于调试输出) */ -function packetTypeName(type: number): string { - switch (type) { - case RPC_PT_REQUEST: - return 'Request' - case RPC_PT_RESPONSE: - return 'Response' - case RPC_PT_FAULT: - return 'Fault' - case RPC_PT_BIND_REQ: - return 'Bind' - case RPC_PT_BIND_ACK: - return 'Bind Ack' - case RPC_PT_ALTERCONTEXT_REQ: - return 'Alter Context' - case RPC_PT_ALTERCONTEXT_ACK: - return 'Alter Context Ack' - default: - return `Unknown(${type})` - } -} - -// ─── 构建 Bind/AlterContext 数据包 ────────────────────────────────────────── - -interface CtxItem { - transferSyntax: Buffer // 传输语法 GUID - syntaxVersion: number // 语法版本 -} - -/** - * 构建 Bind 或 AlterContext 数据包 - * - * 参考: src/rpc.c 中的 rpcBindOrAlterClientContext() 的数据包构建部分 - * 每个上下文项: ContextId(2) + NumTransItems(2) + InterfaceUUID(16) + - * InterfaceVerMajor(2) + InterfaceVerMinor(2) + TransferSyntax(16) + SyntaxVersion(4) = 44 字节 - */ -function buildBindPacket( - packetType: number, - packetFlags: number, - currentCallId: number, - ctxItems: CtxItem[] -): Buffer { - const ctxItemSize = 44 - // 绑定体: MaxXmitFrag(2) + MaxRecvFrag(2) + AssocGroup(4) + NumCtxItems(4) + 上下文项数组 - const bindBodySize = 2 + 2 + 4 + 4 + ctxItems.length * ctxItemSize - const totalSize = RPC_HEADER_SIZE + bindBodySize - const buf = Buffer.alloc(totalSize) - - writeRpcHeader(buf, packetType, packetFlags, totalSize, currentCallId) - - let offset = RPC_HEADER_SIZE - buf.writeUInt16LE(5840, offset) // MaxXmitFrag - buf.writeUInt16LE(5840, offset + 2) // MaxRecvFrag - buf.writeUInt32LE(0, offset + 4) // AssocGroup - buf.writeUInt32LE(ctxItems.length, offset + 8) // NumCtxItems - offset += 12 - - for (let i = 0; i < ctxItems.length; i++) { - buf.writeUInt16LE(i, offset) // ContextId - buf.writeUInt16LE(1, offset + 2) // NumTransItems - InterfaceUuid.copy(buf, offset + 4) // InterfaceUUID - buf.writeUInt16LE(1, offset + 20) // InterfaceVerMajor - buf.writeUInt16LE(0, offset + 22) // InterfaceVerMinor - ctxItems[i].transferSyntax.copy(buf, offset + 24) // TransferSyntax - buf.writeUInt32LE(ctxItems[i].syntaxVersion, offset + 40) // SyntaxVersion - offset += ctxItemSize - } - - return buf -} - -// ─── 解析绑定响应 ─────────────────────────────────────────────────────────── - -interface BindResult { - ackResult: number // 确认结果码 - ackReason: number // 确认原因 - transferSyntax: Buffer // 传输语法 - syntaxVersion: number // 语法版本 -} - -/** - * 解析 Bind/AlterContext 响应体 - * 参考: src/rpc.h 中的 RPC_BIND_RESPONSE 结构 - */ -function parseBindResponse( - body: Buffer, - verbose: boolean -): { results: BindResult[]; maxRecvFrag: number } { - let offset = 0 - - const maxXmitFrag = body.readUInt16LE(offset) - const maxRecvFrag = body.readUInt16LE(offset + 2) - const assocGroup = body.readUInt32LE(offset + 4) - offset += 8 - - const secondaryAddressLength = body.readUInt16LE(offset) - offset += 2 - - if (verbose) { - console.log( - ` Max Xmit/Recv Frag: ${maxXmitFrag}/${maxRecvFrag}, AssocGroup: 0x${assocGroup.toString(16).padStart(8, '0')}` - ) - console.log(` Secondary Address Length: ${secondaryAddressLength}`) - } - - // 跳过二级地址和对齐填充到 4 字节边界 - offset += secondaryAddressLength - const totalOff = offset - offset += (4 - (totalOff % 4)) % 4 - - const numResults = body.readUInt32LE(offset) - offset += 4 - - if (verbose) { - console.log(` Num Results: ${numResults}`) - } - - const results: BindResult[] = [] - for (let i = 0; i < numResults; i++) { - const ackResult = body.readUInt16LE(offset) - const ackReason = body.readUInt16LE(offset + 2) - const transferSyntax = Buffer.from(body.subarray(offset + 4, offset + 20)) - const syntaxVersion = body.readUInt32LE(offset + 20) - offset += 24 - - if (verbose) { - const resultStr = - ackResult === RPC_BIND_ACCEPT - ? 'Accept' - : ackResult === RPC_BIND_NACK - ? 'Nack' - : ackResult === RPC_BIND_ACK - ? 'Ack' - : `Unknown(0x${ackResult.toString(16)})` - console.log( - ` Result[${i}]: ${resultStr} (reason: 0x${ackReason.toString(16)})` - ) - } - - results.push({ ackResult, ackReason, transferSyntax, syntaxVersion }) - } - - return { results, maxRecvFrag } -} - -// ─── 绑定/修改上下文 ─────────────────────────────────────────────────────── - -/** - * 执行单次 Bind 或 AlterContext 交换并处理响应 - * - * 参考: src/rpc.c 中的 rpcBindOrAlterClientContext() - */ -async function rpcBindOrAlterContext( - sock: net.Socket, - packetType: number, - verbose: boolean, - useClientRpcNDR64: boolean, - useClientRpcBTFN: boolean, - useMultiplexedRpc: boolean, - rpcFlags: RpcFlags, - rpcDiag: RpcDiag -): Promise { - // AlterContext 只发送 NDR32;Bind 发送 NDR32 + 可选 NDR64 + BTFN - const isBind = packetType === RPC_PT_BIND_REQ - const ctxItems: CtxItem[] = [ - { transferSyntax: TransferSyntaxNDR32, syntaxVersion: 2 } - ] - - let ctxNDR64 = -1 - let ctxBTFN = -1 - - if (isBind && useClientRpcNDR64) { - ctxNDR64 = ctxItems.length - ctxItems.push({ transferSyntax: TransferSyntaxNDR64, syntaxVersion: 1 }) - } - - if (isBind && useClientRpcBTFN) { - ctxBTFN = ctxItems.length - ctxItems.push({ - transferSyntax: BindTimeFeatureNegotiation, - syntaxVersion: 1 - }) - } - - const packetFlags = - RPC_PF_FIRST | RPC_PF_LAST | (useMultiplexedRpc ? RPC_PF_MULTIPLEX : 0) - const currentCallId = callId++ - const bindPacket = buildBindPacket( - packetType, - packetFlags, - currentCallId, - ctxItems - ) - - await sendData(sock, bindPacket) - - // 接收响应头 - const headerBuf = await recvData(sock, RPC_HEADER_SIZE) - const header = parseRpcHeader(headerBuf) - - if (verbose) { - console.log( - `Received RPC ${packetTypeName(header.packetType)} (FragLength=${header.fragLength}, CallId=${header.callId})` - ) - } - - const expectedAckType = isBind ? RPC_PT_BIND_ACK : RPC_PT_ALTERCONTEXT_ACK - - if ( - header.packetType === RPC_PT_FAULT || - header.packetType !== expectedAckType - ) { - const bodySize = header.fragLength - RPC_HEADER_SIZE - if (bodySize > 0) await recvData(sock, bodySize) - return 1 - } - - // 读取响应体 - const bodySize = header.fragLength - RPC_HEADER_SIZE - const body = await recvData(sock, bodySize) - const { results } = parseBindResponse(body, verbose) - - // 处理每个上下文项的结果 - for (let i = 0; i < results.length; i++) { - const result = results[i] - - if (i === ctxBTFN) { - // BTFN 上下文:结果码为 RPC_BIND_ACK(3) 表示支持 - if (result.ackResult === RPC_BIND_ACK) { - rpcFlags.hasBTFN = true - rpcDiag.hasBTFN = true - if (verbose) process.stdout.write('... BTFN ') - } - continue - } - - if (result.ackResult === RPC_BIND_NACK) { - continue // 被拒绝,跳过 - } - - if (result.ackResult === RPC_BIND_ACCEPT) { - if (i === ctxNDR64) { - rpcFlags.hasNDR64 = true - rpcDiag.hasNDR64 = true - if (verbose) process.stdout.write('... NDR64 ') - } else if (i === 0) { - rpcFlags.hasNDR32 = true - if (verbose) process.stdout.write('... NDR32 ') - } - } - } - - return 0 -} - -/** - * 执行 RPC 绑定协商 - * - * 始终请求 NDR32 传输语法。根据参数可选请求 NDR64 和绑定时间特性协商 (BTFN)。 - * 如果 NDR32 未被接受,发送 AlterContext 单独协商 NDR32。 - * - * 参考: src/rpc.c 中的 rpcBindClient() - */ -export async function rpcBindClient( - sock: net.Socket, - verbose: boolean, - useClientRpcNDR64: boolean, - useClientRpcBTFN: boolean, - useMultiplexedRpc: boolean -): Promise<{ status: number; rpcDiag: RpcDiag; rpcFlags: RpcFlags }> { - const rpcFlags: RpcFlags = { - hasNDR32: false, - hasNDR64: false, - hasBTFN: false - } - const rpcDiag: RpcDiag = { - hasRpcDiag: false, - hasBTFN: false, - hasNDR64: false - } - - // 第一步: 发送 Bind 请求 - let status = await rpcBindOrAlterContext( - sock, - RPC_PT_BIND_REQ, - verbose, - useClientRpcNDR64, - useClientRpcBTFN, - useMultiplexedRpc, - rpcFlags, - rpcDiag - ) - - if (status) return { status, rpcDiag, rpcFlags } - - // 第二步: 如果 NDR32 未被接受,发送 AlterContext 单独协商 - if (!rpcFlags.hasNDR32) { - status = await rpcBindOrAlterContext( - sock, - RPC_PT_ALTERCONTEXT_REQ, - verbose, - false, - false, - useMultiplexedRpc, - rpcFlags, - rpcDiag - ) - if (status) return { status, rpcDiag, rpcFlags } - } - - if (!rpcFlags.hasNDR32 && !rpcFlags.hasNDR64) { - process.stderr.write( - '\nFatal: Could neither negotiate NDR32 nor NDR64 with the RPC server\n' - ) - return { status: 1, rpcDiag, rpcFlags } - } - - rpcDiag.hasRpcDiag = true - - if (verbose) { - process.stdout.write('\n') - } - - return { status: 0, rpcDiag, rpcFlags } -} - -// ─── 发送 RPC 请求 (参考 src/rpc.c 中的 rpcSendRequest) ──────────────────── - -/** - * 通过已建立的 RPC 连接发送 KMS 请求并接收响应 - * - * 当服务器支持 NDR64 且不是第一个包时使用 NDR64 编码,否则回退到 NDR32。 - * - * 参考: src/rpc.c 中的 rpcSendRequest() - */ -export async function rpcSendRequest( - sock: net.Socket, - kmsRequest: Buffer, - rpcFlags: RpcFlags, - useClientRpcNDR64: boolean, - firstPacketSent: boolean -): Promise<{ - status: number - kmsResponse: Buffer | null - responseSize: number -}> { - const requestSize = kmsRequest.length - const useNDR64 = useClientRpcNDR64 && rpcFlags.hasNDR64 && firstPacketSent - - let requestBody: Buffer - if (useNDR64) { - // NDR64 格式: AllocHint(4) + ContextId(2) + Opnum(2) + DataLength(8) + DataSizeIs(8) + Data - const bodySize = 4 + 2 + 2 + 8 + 8 + requestSize - requestBody = Buffer.alloc(bodySize) - let offset = 0 - requestBody.writeUInt32LE(requestSize + 16, offset) // AllocHint - offset += 4 - requestBody.writeUInt16LE(1, offset) // ContextId (NDR64 = 1) - offset += 2 - requestBody.writeUInt16LE(0, offset) // Opnum - offset += 2 - requestBody.writeBigUInt64LE(BigInt(requestSize), offset) // Ndr64.DataLength - offset += 8 - requestBody.writeBigUInt64LE(BigInt(requestSize), offset) // Ndr64.DataSizeIs - offset += 8 - kmsRequest.copy(requestBody, offset) - } else { - // NDR32 格式: AllocHint(4) + ContextId(2) + Opnum(2) + DataLength(4) + DataSizeIs(4) + Data - const bodySize = 4 + 2 + 2 + 4 + 4 + requestSize - requestBody = Buffer.alloc(bodySize) - let offset = 0 - requestBody.writeUInt32LE(requestSize + 8, offset) // AllocHint - offset += 4 - requestBody.writeUInt16LE(0, offset) // ContextId (NDR32 = 0) - offset += 2 - requestBody.writeUInt16LE(0, offset) // Opnum - offset += 2 - requestBody.writeUInt32LE(requestSize, offset) // Ndr.DataLength - offset += 4 - requestBody.writeUInt32LE(requestSize, offset) // Ndr.DataSizeIs - offset += 4 - kmsRequest.copy(requestBody, offset) - } - - const totalSize = RPC_HEADER_SIZE + requestBody.length - const packet = Buffer.alloc(totalSize) - const currentCallId = callId++ - writeRpcHeader( - packet, - RPC_PT_REQUEST, - RPC_PF_FIRST | RPC_PF_LAST, - totalSize, - currentCallId - ) - requestBody.copy(packet, RPC_HEADER_SIZE) - - await sendData(sock, packet) - - // ── 接收响应 ────────────────────────────────────────────────────────── - - const headerBuf = await recvData(sock, RPC_HEADER_SIZE) - const header = parseRpcHeader(headerBuf) - - // 处理 Fault 响应 - if (header.packetType === RPC_PT_FAULT) { - const bodySize = header.fragLength - RPC_HEADER_SIZE - if (bodySize >= 4) { - const faultBody = await recvData(sock, bodySize) - const faultStatus = faultBody.readUInt32LE(0) - return { status: faultStatus || 1, kmsResponse: null, responseSize: 0 } - } - if (bodySize > 0) await recvData(sock, bodySize) - return { status: 1, kmsResponse: null, responseSize: 0 } - } - - // 验证响应类型 - if (header.packetType !== RPC_PT_RESPONSE) { - const bodySize = header.fragLength - RPC_HEADER_SIZE - if (bodySize > 0) await recvData(sock, bodySize) - return { status: 1, kmsResponse: null, responseSize: 0 } - } - - // 读取完整响应体 - const bodySize = header.fragLength - RPC_HEADER_SIZE - const body = await recvData(sock, bodySize) - - // 解析 NDR 响应头 - // 参考: src/rpc.h 中的 RPC_RESPONSE / RPC_RESPONSE64 结构 - let offset = 0 - const allocHint = body.readUInt32LE(offset) // AllocHint - offset += 4 - const contextId = body.readUInt16LE(offset) // ContextId - offset += 2 - const cancelCount = body.readUInt8(offset) // CancelCount - offset += 1 - offset += 1 // Pad1 - - const responseUsesNDR64 = contextId === 1 - - let dataLength: number - let dataSizeMax: bigint | number - let dataSizeIs: bigint | number - - if (responseUsesNDR64) { - // NDR64 响应: DataLength(8) + DataSizeMax(8) + DataSizeIs(8) - dataLength = Number(body.readBigUInt64LE(offset)) - offset += 8 - dataSizeMax = body.readBigUInt64LE(offset) - offset += 8 - dataSizeIs = body.readBigUInt64LE(offset) - offset += 8 - } else { - // NDR32 响应: DataLength(4) + DataSizeMax(4) + DataSizeIs(4) - dataLength = body.readUInt32LE(offset) - offset += 4 - dataSizeMax = body.readUInt32LE(offset) - offset += 4 - dataSizeIs = body.readUInt32LE(offset) - offset += 4 - } - - // 如果 dataSizeMax 为 0,说明 RPC 调用返回了错误状态 - if (dataSizeMax === 0 || dataSizeMax === BigInt(0)) { - const errorStatus = Number(dataSizeIs) - return { status: errorStatus || 1, kmsResponse: null, responseSize: 0 } - } - - if (dataLength <= 0 || offset + dataLength > body.length) { - return { status: 1, kmsResponse: null, responseSize: 0 } - } - - // 提取 KMS 响应数据 - const kmsResponse = Buffer.from(body.subarray(offset, offset + dataLength)) - offset += dataLength - - // 4 字节对齐填充 - const padBytes = (4 - (dataLength % 4)) % 4 - offset += padBytes - - // 读取 ReturnCode (HRESULT) - let returnCode = 0 - if (offset + 4 <= body.length) { - returnCode = body.readUInt32LE(offset) - } - - if (returnCode !== 0) { - return { status: returnCode, kmsResponse, responseSize: dataLength } - } - - return { status: 0, kmsResponse, responseSize: dataLength } -} +/** + * DCE-RPC 协议层 — 实现 KMS 激活所需的 DCE-RPC 客户端协议 + * + * 参考原版源码: + * - src/rpc.c (rpcBindOrAlterClientContext, rpcSendRequest 等) + * - src/rpc.h (RPC_HEADER, RPC_BIND_REQUEST, RPC_RESPONSE 等结构定义) + */ + +import * as net from 'net' +import { sendData, recvData } from './network' + +// ─── 数据包类型 (参考 src/rpc.h 中的 RPC_PT_* 常量) ──────────────────────── + +const RPC_PT_REQUEST = 0 // 请求 +const RPC_PT_RESPONSE = 2 // 响应 +const RPC_PT_FAULT = 3 // 错误 +const RPC_PT_BIND_REQ = 11 // 绑定请求 +const RPC_PT_BIND_ACK = 12 // 绑定确认 +const RPC_PT_ALTERCONTEXT_REQ = 14 // 修改上下文请求 +const RPC_PT_ALTERCONTEXT_ACK = 15 // 修改上下文确认 + +// ─── 数据包标志 ───────────────────────────────────────────────────────────── + +const RPC_PF_FIRST = 1 // 分片的第一个包 +const RPC_PF_LAST = 2 // 分片的最后一个包 +const RPC_PF_MULTIPLEX = 16 // 多路复用 + +// ─── 绑定确认结果码 (参考 src/rpc.h) ─────────────────────────────────────── + +const RPC_BIND_ACCEPT = 0 // 接受 +const RPC_BIND_NACK = 2 // 拒绝 +const RPC_BIND_ACK = 3 // 确认(用于 BTFN 绑定时间特性协商) + +// ─── RPC 头部大小 ─────────────────────────────────────────────────────────── + +/** RPC 头部固定大小: 16 字节 */ +const RPC_HEADER_SIZE = 16 + +// ─── GUID 常量 (原始线路字节,无字节序转换) ───────────────────────────────── + +/** NDR32 传输语法 GUID */ +const TransferSyntaxNDR32 = Buffer.from([ + 0x04, 0x5d, 0x88, 0x8a, 0xeb, 0x1c, 0xc9, 0x11, 0x9f, 0xe8, 0x08, 0x00, 0x2b, + 0x10, 0x48, 0x60 +]) + +/** KMS 接口 UUID */ +const InterfaceUuid = Buffer.from([ + 0x75, 0x21, 0xc8, 0x51, 0x4e, 0x84, 0x50, 0x47, 0xb0, 0xd8, 0xec, 0x25, 0x55, + 0x55, 0xbc, 0x06 +]) + +/** NDR64 传输语法 GUID */ +const TransferSyntaxNDR64 = Buffer.from([ + 0x33, 0x05, 0x71, 0x71, 0xba, 0xbe, 0x37, 0x49, 0x83, 0x19, 0xb5, 0xdb, 0xef, + 0x9c, 0xcc, 0x36 +]) + +/** 绑定时间特性协商 GUID (BTFN) */ +const BindTimeFeatureNegotiation = Buffer.from([ + 0x2c, 0x1c, 0xb7, 0x6c, 0x12, 0x98, 0x40, 0x45, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00 +]) + +// ─── 导出接口 ─────────────────────────────────────────────────────────────── + +/** RPC 已协商的能力标志 */ +export interface RpcFlags { + hasNDR32: boolean // 是否支持 NDR32 传输语法 + hasNDR64: boolean // 是否支持 NDR64 传输语法 + hasBTFN: boolean // 是否支持绑定时间特性协商 +} + +/** RPC 诊断信息 */ +export interface RpcDiag { + hasRpcDiag: boolean // 是否有 RPC 诊断信息 + hasBTFN: boolean // 服务器是否支持 BTFN + hasNDR64: boolean // 服务器是否支持 NDR64 +} + +// ─── 状态 ─────────────────────────────────────────────────────────────────── + +/** 调用 ID,从 2 开始(与微软实现一致) */ +let callId = 2 + +// ─── 工具函数: 写入 RPC 头部 ─────────────────────────────────────────────── + +/** + * 写入 RPC 头部 (16 字节) + * 参考: src/rpc.h 中的 RPC_HEADER 结构 + */ +function writeRpcHeader( + buf: Buffer, + packetType: number, + packetFlags: number, + fragLength: number, + currentCallId: number +): void { + buf.writeUInt8(5, 0) // VersionMajor = 5 + buf.writeUInt8(0, 1) // VersionMinor = 0 + buf.writeUInt8(packetType, 2) // PacketType + buf.writeUInt8(packetFlags, 3) // PacketFlags + buf.writeUInt32LE(0x00000010, 4) // DataRepresentation: LE, ASCII, IEEE + buf.writeUInt16LE(fragLength, 8) // FragLength + buf.writeUInt16LE(0, 10) // AuthLength + buf.writeUInt32LE(currentCallId, 12) // CallId +} + +// ─── 工具函数: 解析 RPC 头部 ─────────────────────────────────────────────── + +interface RpcHeader { + versionMajor: number + versionMinor: number + packetType: number + packetFlags: number + dataRepresentation: number + fragLength: number + authLength: number + callId: number +} + +/** 从 Buffer 解析 RPC 头部 */ +function parseRpcHeader(buf: Buffer): RpcHeader { + return { + versionMajor: buf.readUInt8(0), + versionMinor: buf.readUInt8(1), + packetType: buf.readUInt8(2), + packetFlags: buf.readUInt8(3), + dataRepresentation: buf.readUInt32LE(4), + fragLength: buf.readUInt16LE(8), + authLength: buf.readUInt16LE(10), + callId: buf.readUInt32LE(12) + } +} + +/** 获取数据包类型的可读名称(用于调试输出) */ +function packetTypeName(type: number): string { + switch (type) { + case RPC_PT_REQUEST: + return 'Request' + case RPC_PT_RESPONSE: + return 'Response' + case RPC_PT_FAULT: + return 'Fault' + case RPC_PT_BIND_REQ: + return 'Bind' + case RPC_PT_BIND_ACK: + return 'Bind Ack' + case RPC_PT_ALTERCONTEXT_REQ: + return 'Alter Context' + case RPC_PT_ALTERCONTEXT_ACK: + return 'Alter Context Ack' + default: + return `Unknown(${type})` + } +} + +// ─── 构建 Bind/AlterContext 数据包 ────────────────────────────────────────── + +interface CtxItem { + transferSyntax: Buffer // 传输语法 GUID + syntaxVersion: number // 语法版本 +} + +/** + * 构建 Bind 或 AlterContext 数据包 + * + * 参考: src/rpc.c 中的 rpcBindOrAlterClientContext() 的数据包构建部分 + * 每个上下文项: ContextId(2) + NumTransItems(2) + InterfaceUUID(16) + + * InterfaceVerMajor(2) + InterfaceVerMinor(2) + TransferSyntax(16) + SyntaxVersion(4) = 44 字节 + */ +function buildBindPacket( + packetType: number, + packetFlags: number, + currentCallId: number, + ctxItems: CtxItem[] +): Buffer { + const ctxItemSize = 44 + // 绑定体: MaxXmitFrag(2) + MaxRecvFrag(2) + AssocGroup(4) + NumCtxItems(4) + 上下文项数组 + const bindBodySize = 2 + 2 + 4 + 4 + ctxItems.length * ctxItemSize + const totalSize = RPC_HEADER_SIZE + bindBodySize + const buf = Buffer.alloc(totalSize) + + writeRpcHeader(buf, packetType, packetFlags, totalSize, currentCallId) + + let offset = RPC_HEADER_SIZE + buf.writeUInt16LE(5840, offset) // MaxXmitFrag + buf.writeUInt16LE(5840, offset + 2) // MaxRecvFrag + buf.writeUInt32LE(0, offset + 4) // AssocGroup + buf.writeUInt32LE(ctxItems.length, offset + 8) // NumCtxItems + offset += 12 + + for (let i = 0; i < ctxItems.length; i++) { + buf.writeUInt16LE(i, offset) // ContextId + buf.writeUInt16LE(1, offset + 2) // NumTransItems + InterfaceUuid.copy(buf, offset + 4) // InterfaceUUID + buf.writeUInt16LE(1, offset + 20) // InterfaceVerMajor + buf.writeUInt16LE(0, offset + 22) // InterfaceVerMinor + ctxItems[i].transferSyntax.copy(buf, offset + 24) // TransferSyntax + buf.writeUInt32LE(ctxItems[i].syntaxVersion, offset + 40) // SyntaxVersion + offset += ctxItemSize + } + + return buf +} + +// ─── 解析绑定响应 ─────────────────────────────────────────────────────────── + +interface BindResult { + ackResult: number // 确认结果码 + ackReason: number // 确认原因 + transferSyntax: Buffer // 传输语法 + syntaxVersion: number // 语法版本 +} + +/** + * 解析 Bind/AlterContext 响应体 + * 参考: src/rpc.h 中的 RPC_BIND_RESPONSE 结构 + */ +function parseBindResponse( + body: Buffer, + verbose: boolean +): { results: BindResult[]; maxRecvFrag: number } { + let offset = 0 + + const maxXmitFrag = body.readUInt16LE(offset) + const maxRecvFrag = body.readUInt16LE(offset + 2) + const assocGroup = body.readUInt32LE(offset + 4) + offset += 8 + + const secondaryAddressLength = body.readUInt16LE(offset) + offset += 2 + + if (verbose) { + console.log( + ` Max Xmit/Recv Frag: ${maxXmitFrag}/${maxRecvFrag}, AssocGroup: 0x${assocGroup.toString(16).padStart(8, '0')}` + ) + console.log(` Secondary Address Length: ${secondaryAddressLength}`) + } + + // 跳过二级地址和对齐填充到 4 字节边界 + offset += secondaryAddressLength + const totalOff = offset + offset += (4 - (totalOff % 4)) % 4 + + const numResults = body.readUInt32LE(offset) + offset += 4 + + if (verbose) { + console.log(` Num Results: ${numResults}`) + } + + const results: BindResult[] = [] + for (let i = 0; i < numResults; i++) { + const ackResult = body.readUInt16LE(offset) + const ackReason = body.readUInt16LE(offset + 2) + const transferSyntax = Buffer.from(body.subarray(offset + 4, offset + 20)) + const syntaxVersion = body.readUInt32LE(offset + 20) + offset += 24 + + if (verbose) { + const resultStr = + ackResult === RPC_BIND_ACCEPT + ? 'Accept' + : ackResult === RPC_BIND_NACK + ? 'Nack' + : ackResult === RPC_BIND_ACK + ? 'Ack' + : `Unknown(0x${ackResult.toString(16)})` + console.log( + ` Result[${i}]: ${resultStr} (reason: 0x${ackReason.toString(16)})` + ) + } + + results.push({ ackResult, ackReason, transferSyntax, syntaxVersion }) + } + + return { results, maxRecvFrag } +} + +// ─── 绑定/修改上下文 ─────────────────────────────────────────────────────── + +/** + * 执行单次 Bind 或 AlterContext 交换并处理响应 + * + * 参考: src/rpc.c 中的 rpcBindOrAlterClientContext() + */ +async function rpcBindOrAlterContext( + sock: net.Socket, + packetType: number, + verbose: boolean, + useClientRpcNDR64: boolean, + useClientRpcBTFN: boolean, + useMultiplexedRpc: boolean, + rpcFlags: RpcFlags, + rpcDiag: RpcDiag +): Promise { + // AlterContext 只发送 NDR32;Bind 发送 NDR32 + 可选 NDR64 + BTFN + const isBind = packetType === RPC_PT_BIND_REQ + const ctxItems: CtxItem[] = [ + { transferSyntax: TransferSyntaxNDR32, syntaxVersion: 2 } + ] + + let ctxNDR64 = -1 + let ctxBTFN = -1 + + if (isBind && useClientRpcNDR64) { + ctxNDR64 = ctxItems.length + ctxItems.push({ transferSyntax: TransferSyntaxNDR64, syntaxVersion: 1 }) + } + + if (isBind && useClientRpcBTFN) { + ctxBTFN = ctxItems.length + ctxItems.push({ + transferSyntax: BindTimeFeatureNegotiation, + syntaxVersion: 1 + }) + } + + const packetFlags = + RPC_PF_FIRST | RPC_PF_LAST | (useMultiplexedRpc ? RPC_PF_MULTIPLEX : 0) + const currentCallId = callId++ + const bindPacket = buildBindPacket( + packetType, + packetFlags, + currentCallId, + ctxItems + ) + + await sendData(sock, bindPacket) + + // 接收响应头 + const headerBuf = await recvData(sock, RPC_HEADER_SIZE) + const header = parseRpcHeader(headerBuf) + + if (verbose) { + console.log( + `Received RPC ${packetTypeName(header.packetType)} (FragLength=${header.fragLength}, CallId=${header.callId})` + ) + } + + const expectedAckType = isBind ? RPC_PT_BIND_ACK : RPC_PT_ALTERCONTEXT_ACK + + if ( + header.packetType === RPC_PT_FAULT || + header.packetType !== expectedAckType + ) { + const bodySize = header.fragLength - RPC_HEADER_SIZE + if (bodySize > 0) await recvData(sock, bodySize) + return 1 + } + + // 读取响应体 + const bodySize = header.fragLength - RPC_HEADER_SIZE + const body = await recvData(sock, bodySize) + const { results } = parseBindResponse(body, verbose) + + // 处理每个上下文项的结果 + for (let i = 0; i < results.length; i++) { + const result = results[i] + + if (i === ctxBTFN) { + // BTFN 上下文:结果码为 RPC_BIND_ACK(3) 表示支持 + if (result.ackResult === RPC_BIND_ACK) { + rpcFlags.hasBTFN = true + rpcDiag.hasBTFN = true + if (verbose) process.stdout.write('... BTFN ') + } + continue + } + + if (result.ackResult === RPC_BIND_NACK) { + continue // 被拒绝,跳过 + } + + if (result.ackResult === RPC_BIND_ACCEPT) { + if (i === ctxNDR64) { + rpcFlags.hasNDR64 = true + rpcDiag.hasNDR64 = true + if (verbose) process.stdout.write('... NDR64 ') + } else if (i === 0) { + rpcFlags.hasNDR32 = true + if (verbose) process.stdout.write('... NDR32 ') + } + } + } + + return 0 +} + +/** + * 执行 RPC 绑定协商 + * + * 始终请求 NDR32 传输语法。根据参数可选请求 NDR64 和绑定时间特性协商 (BTFN)。 + * 如果 NDR32 未被接受,发送 AlterContext 单独协商 NDR32。 + * + * 参考: src/rpc.c 中的 rpcBindClient() + */ +export async function rpcBindClient( + sock: net.Socket, + verbose: boolean, + useClientRpcNDR64: boolean, + useClientRpcBTFN: boolean, + useMultiplexedRpc: boolean +): Promise<{ status: number; rpcDiag: RpcDiag; rpcFlags: RpcFlags }> { + const rpcFlags: RpcFlags = { + hasNDR32: false, + hasNDR64: false, + hasBTFN: false + } + const rpcDiag: RpcDiag = { + hasRpcDiag: false, + hasBTFN: false, + hasNDR64: false + } + + // 第一步: 发送 Bind 请求 + let status = await rpcBindOrAlterContext( + sock, + RPC_PT_BIND_REQ, + verbose, + useClientRpcNDR64, + useClientRpcBTFN, + useMultiplexedRpc, + rpcFlags, + rpcDiag + ) + + if (status) return { status, rpcDiag, rpcFlags } + + // 第二步: 如果 NDR32 未被接受,发送 AlterContext 单独协商 + if (!rpcFlags.hasNDR32) { + status = await rpcBindOrAlterContext( + sock, + RPC_PT_ALTERCONTEXT_REQ, + verbose, + false, + false, + useMultiplexedRpc, + rpcFlags, + rpcDiag + ) + if (status) return { status, rpcDiag, rpcFlags } + } + + if (!rpcFlags.hasNDR32 && !rpcFlags.hasNDR64) { + process.stderr.write( + '\nFatal: Could neither negotiate NDR32 nor NDR64 with the RPC server\n' + ) + return { status: 1, rpcDiag, rpcFlags } + } + + rpcDiag.hasRpcDiag = true + + if (verbose) { + process.stdout.write('\n') + } + + return { status: 0, rpcDiag, rpcFlags } +} + +// ─── 发送 RPC 请求 (参考 src/rpc.c 中的 rpcSendRequest) ──────────────────── + +/** + * 通过已建立的 RPC 连接发送 KMS 请求并接收响应 + * + * 当服务器支持 NDR64 且不是第一个包时使用 NDR64 编码,否则回退到 NDR32。 + * + * 参考: src/rpc.c 中的 rpcSendRequest() + */ +export async function rpcSendRequest( + sock: net.Socket, + kmsRequest: Buffer, + rpcFlags: RpcFlags, + useClientRpcNDR64: boolean, + firstPacketSent: boolean +): Promise<{ + status: number + kmsResponse: Buffer | null + responseSize: number +}> { + const requestSize = kmsRequest.length + const useNDR64 = useClientRpcNDR64 && rpcFlags.hasNDR64 && firstPacketSent + + let requestBody: Buffer + if (useNDR64) { + // NDR64 格式: AllocHint(4) + ContextId(2) + Opnum(2) + DataLength(8) + DataSizeIs(8) + Data + const bodySize = 4 + 2 + 2 + 8 + 8 + requestSize + requestBody = Buffer.alloc(bodySize) + let offset = 0 + requestBody.writeUInt32LE(requestSize + 16, offset) // AllocHint + offset += 4 + requestBody.writeUInt16LE(1, offset) // ContextId (NDR64 = 1) + offset += 2 + requestBody.writeUInt16LE(0, offset) // Opnum + offset += 2 + requestBody.writeBigUInt64LE(BigInt(requestSize), offset) // Ndr64.DataLength + offset += 8 + requestBody.writeBigUInt64LE(BigInt(requestSize), offset) // Ndr64.DataSizeIs + offset += 8 + kmsRequest.copy(requestBody, offset) + } else { + // NDR32 格式: AllocHint(4) + ContextId(2) + Opnum(2) + DataLength(4) + DataSizeIs(4) + Data + const bodySize = 4 + 2 + 2 + 4 + 4 + requestSize + requestBody = Buffer.alloc(bodySize) + let offset = 0 + requestBody.writeUInt32LE(requestSize + 8, offset) // AllocHint + offset += 4 + requestBody.writeUInt16LE(0, offset) // ContextId (NDR32 = 0) + offset += 2 + requestBody.writeUInt16LE(0, offset) // Opnum + offset += 2 + requestBody.writeUInt32LE(requestSize, offset) // Ndr.DataLength + offset += 4 + requestBody.writeUInt32LE(requestSize, offset) // Ndr.DataSizeIs + offset += 4 + kmsRequest.copy(requestBody, offset) + } + + const totalSize = RPC_HEADER_SIZE + requestBody.length + const packet = Buffer.alloc(totalSize) + const currentCallId = callId++ + writeRpcHeader( + packet, + RPC_PT_REQUEST, + RPC_PF_FIRST | RPC_PF_LAST, + totalSize, + currentCallId + ) + requestBody.copy(packet, RPC_HEADER_SIZE) + + await sendData(sock, packet) + + // ── 接收响应 ────────────────────────────────────────────────────────── + + const headerBuf = await recvData(sock, RPC_HEADER_SIZE) + const header = parseRpcHeader(headerBuf) + + // 处理 Fault 响应 + if (header.packetType === RPC_PT_FAULT) { + const bodySize = header.fragLength - RPC_HEADER_SIZE + if (bodySize >= 4) { + const faultBody = await recvData(sock, bodySize) + const faultStatus = faultBody.readUInt32LE(0) + return { status: faultStatus || 1, kmsResponse: null, responseSize: 0 } + } + if (bodySize > 0) await recvData(sock, bodySize) + return { status: 1, kmsResponse: null, responseSize: 0 } + } + + // 验证响应类型 + if (header.packetType !== RPC_PT_RESPONSE) { + const bodySize = header.fragLength - RPC_HEADER_SIZE + if (bodySize > 0) await recvData(sock, bodySize) + return { status: 1, kmsResponse: null, responseSize: 0 } + } + + // 读取完整响应体 + const bodySize = header.fragLength - RPC_HEADER_SIZE + const body = await recvData(sock, bodySize) + + // 解析 NDR 响应头 + // 参考: src/rpc.h 中的 RPC_RESPONSE / RPC_RESPONSE64 结构 + let offset = 0 + const allocHint = body.readUInt32LE(offset) // AllocHint + offset += 4 + const contextId = body.readUInt16LE(offset) // ContextId + offset += 2 + const cancelCount = body.readUInt8(offset) // CancelCount + offset += 1 + offset += 1 // Pad1 + + const responseUsesNDR64 = contextId === 1 + + let dataLength: number + let dataSizeMax: bigint | number + let dataSizeIs: bigint | number + + if (responseUsesNDR64) { + // NDR64 响应: DataLength(8) + DataSizeMax(8) + DataSizeIs(8) + dataLength = Number(body.readBigUInt64LE(offset)) + offset += 8 + dataSizeMax = body.readBigUInt64LE(offset) + offset += 8 + dataSizeIs = body.readBigUInt64LE(offset) + offset += 8 + } else { + // NDR32 响应: DataLength(4) + DataSizeMax(4) + DataSizeIs(4) + dataLength = body.readUInt32LE(offset) + offset += 4 + dataSizeMax = body.readUInt32LE(offset) + offset += 4 + dataSizeIs = body.readUInt32LE(offset) + offset += 4 + } + + // 如果 dataSizeMax 为 0,说明 RPC 调用返回了错误状态 + if (dataSizeMax === 0 || dataSizeMax === BigInt(0)) { + const errorStatus = Number(dataSizeIs) + return { status: errorStatus || 1, kmsResponse: null, responseSize: 0 } + } + + if (dataLength <= 0 || offset + dataLength > body.length) { + return { status: 1, kmsResponse: null, responseSize: 0 } + } + + // 提取 KMS 响应数据 + const kmsResponse = Buffer.from(body.subarray(offset, offset + dataLength)) + offset += dataLength + + // 4 字节对齐填充 + const padBytes = (4 - (dataLength % 4)) % 4 + offset += padBytes + + // 读取 ReturnCode (HRESULT) + let returnCode = 0 + if (offset + 4 <= body.length) { + returnCode = body.readUInt32LE(offset) + } + + if (returnCode !== 0) { + return { status: returnCode, kmsResponse, responseSize: dataLength } + } + + return { status: 0, kmsResponse, responseSize: dataLength } +} diff --git a/node-vlmcs/src/types.ts b/node-vlmcs/src/types.ts index bc8943f4..a2bfa8a5 100644 --- a/node-vlmcs/src/types.ts +++ b/node-vlmcs/src/types.ts @@ -1,151 +1,151 @@ -/** - * 基础类型定义 — GUID、FILETIME、UCS-2 编码转换 - * - * 参考原版源码: - * - src/types.h (GUID、FILETIME 等基本类型定义) - * - src/helpers.c (GUID 字符串解析、时间转换) - * - src/output.c (GUID 格式化输出) - */ - -// ─── GUID 结构 ────────────────────────────────────────────────────────────── -// 与 C 代码中的 GUID 结构对应: Data1(DWORD) + Data2(WORD) + Data3(WORD) + Data4[8](BYTE) -// 内存中以小端序 (little-endian) 存储,与网络传输格式一致 - -/** GUID 结构体,对应 src/types.h 中的 GUID 定义 */ -export interface GUID { - data1: number // uint32,小端序 - data2: number // uint16,小端序 - data3: number // uint16,小端序 - data4: Buffer // 8 字节,直接存储 -} - -/** PID 缓冲区大小(WCHAR 数量),对应 src/types.h 中的 PID_BUFFER_SIZE */ -export const PID_BUFFER_SIZE = 64 -/** 工作站名缓冲区大小(WCHAR 数量) */ -export const WORKSTATION_NAME_BUFFER = 64 - -// ─── FILETIME 常量 ────────────────────────────────────────────────────────── -// Windows FILETIME: 从 1601-01-01 起的 100 纳秒间隔数(64 位无符号整数) -// Unix 时间戳: 从 1970-01-01 起的秒数 - -/** FILETIME 纪元 (1601-01-01) 与 Unix 纪元 (1970-01-01) 的差值,单位为 100 纳秒 */ -const FILETIME_UNIX_EPOCH_DIFF = BigInt('116444736000000000') -/** 每毫秒的 100 纳秒数 */ -const HUNDRED_NS_PER_MS = BigInt(10000) - -// ─── GUID 序列化 ──────────────────────────────────────────────────────────── - -/** 将 GUID 结构序列化为 16 字节小端序 Buffer,用于网络传输 */ -export function guidToBuffer(guid: GUID): Buffer { - const buf = Buffer.alloc(16) - buf.writeUInt32LE(guid.data1, 0) - buf.writeUInt16LE(guid.data2, 4) - buf.writeUInt16LE(guid.data3, 6) - guid.data4.copy(buf, 8, 0, 8) - return buf -} - -/** - * 解析 GUID 字符串为小端序结构 - * 格式: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" - * Data1/Data2/Data3 作为十六进制整数解析(内存中小端存储) - * Data4 直接从十六进制字符串取字节(不做字节序转换) - * - * 参考: src/helpers.c 中的 string2UuidLE() - */ -export function stringToGuidLE(str: string): GUID | null { - const re = - /^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i - const m = str.match(re) - if (!m) return null - - const data1 = parseInt(m[1], 16) >>> 0 - const data2 = parseInt(m[2], 16) - const data3 = parseInt(m[3], 16) - const data4 = Buffer.from(m[4] + m[5], 'hex') - - return { data1, data2, data3, data4 } -} - -// ─── FILETIME 转换 ────────────────────────────────────────────────────────── - -/** - * 获取当前时间的 FILETIME 表示(8 字节小端序 Buffer) - * 参考: src/helpers.c 中的 getFileTime() - */ -export function unixTimeToFileTime(): Buffer { - const nowMs = BigInt(Date.now()) - const ft = nowMs * HUNDRED_NS_PER_MS + FILETIME_UNIX_EPOCH_DIFF - const buf = Buffer.alloc(8) - buf.writeBigUInt64LE(ft) - return buf -} - -/** - * 将 8 字节小端序 FILETIME Buffer 转换为 Unix 时间戳(秒) - * 参考: src/output.c 中的时间格式化逻辑 - */ -export function fileTimeToUnixTime(ft: Buffer): number { - const val = ft.readBigUInt64LE(0) - const unixMs = (val - FILETIME_UNIX_EPOCH_DIFF) / HUNDRED_NS_PER_MS - return Number(unixMs) / 1000 -} - -// ─── UCS-2 编码转换 ───────────────────────────────────────────────────────── -// KMS 协议中的字符串使用 UCS-2 LE 编码(每个字符 2 字节,小端序) - -/** - * 将 UTF-8 字符串转换为 UCS-2 LE Buffer,固定长度 maxChars * 2 字节 - * 超出部分截断,不足部分填零 - */ -export function utf8ToUcs2(str: string, maxChars: number): Buffer { - const buf = Buffer.alloc(maxChars * 2) - const truncated = str.slice(0, maxChars) - const encoded = Buffer.from(truncated, 'utf16le') - encoded.copy(buf, 0, 0, Math.min(encoded.length, maxChars * 2)) - return buf -} - -/** - * 将 UCS-2 LE Buffer 转换为 UTF-8 字符串,遇到空终止符 (0x0000) 停止 - * 参考: src/output.c 中 ePID 的解码逻辑 - */ -export function ucs2ToUtf8(buf: Buffer, maxChars: number): string { - const limit = Math.min(buf.length, maxChars * 2) - // 查找空终止符(偶数边界上的两个零字节) - let end = limit - for (let i = 0; i < limit; i += 2) { - if (buf[i] === 0 && buf[i + 1] === 0) { - end = i - break - } - } - return buf.subarray(0, end).toString('utf16le') -} - -// ─── 版本信息 ─────────────────────────────────────────────────────────────── - -/** 版本标识字符串,对应原版的 VERSION 宏 */ -export const VERSION = 'private build' - -// ─── 响应验证结果 ─────────────────────────────────────────────────────────── - -/** - * KMS 响应验证结果 — 对应 src/kms.h 中的 RESPONSE_RESULT - * 每个字段表示一项验证检查是否通过 - */ -export interface ResponseResult { - mask: number // 所有检查结果的位掩码 - hashOK: boolean // 哈希验证通过 - timeStampOK: boolean // 时间戳匹配 - clientMachineIDOK: boolean // 客户端机器 ID 匹配 - versionOK: boolean // 协议版本一致 - ivsOK: boolean // IV(初始化向量)匹配 - decryptSuccess: boolean // 解密成功 - hmacSha256OK: boolean // HMAC-SHA256 验证通过(仅 V6) - pidLengthOK: boolean // PID 长度有效 - rpcOK: boolean // RPC 返回码为零 - ivNotSuspicious: boolean // IV 非可疑(V6 中请求和响应 IV 应不同) - effectiveResponseSize: number // 实际响应大小 - correctResponseSize: number // 预期响应大小 -} +/** + * 基础类型定义 — GUID、FILETIME、UCS-2 编码转换 + * + * 参考原版源码: + * - src/types.h (GUID、FILETIME 等基本类型定义) + * - src/helpers.c (GUID 字符串解析、时间转换) + * - src/output.c (GUID 格式化输出) + */ + +// ─── GUID 结构 ────────────────────────────────────────────────────────────── +// 与 C 代码中的 GUID 结构对应: Data1(DWORD) + Data2(WORD) + Data3(WORD) + Data4[8](BYTE) +// 内存中以小端序 (little-endian) 存储,与网络传输格式一致 + +/** GUID 结构体,对应 src/types.h 中的 GUID 定义 */ +export interface GUID { + data1: number // uint32,小端序 + data2: number // uint16,小端序 + data3: number // uint16,小端序 + data4: Buffer // 8 字节,直接存储 +} + +/** PID 缓冲区大小(WCHAR 数量),对应 src/types.h 中的 PID_BUFFER_SIZE */ +export const PID_BUFFER_SIZE = 64 +/** 工作站名缓冲区大小(WCHAR 数量) */ +export const WORKSTATION_NAME_BUFFER = 64 + +// ─── FILETIME 常量 ────────────────────────────────────────────────────────── +// Windows FILETIME: 从 1601-01-01 起的 100 纳秒间隔数(64 位无符号整数) +// Unix 时间戳: 从 1970-01-01 起的秒数 + +/** FILETIME 纪元 (1601-01-01) 与 Unix 纪元 (1970-01-01) 的差值,单位为 100 纳秒 */ +const FILETIME_UNIX_EPOCH_DIFF = BigInt('116444736000000000') +/** 每毫秒的 100 纳秒数 */ +const HUNDRED_NS_PER_MS = BigInt(10000) + +// ─── GUID 序列化 ──────────────────────────────────────────────────────────── + +/** 将 GUID 结构序列化为 16 字节小端序 Buffer,用于网络传输 */ +export function guidToBuffer(guid: GUID): Buffer { + const buf = Buffer.alloc(16) + buf.writeUInt32LE(guid.data1, 0) + buf.writeUInt16LE(guid.data2, 4) + buf.writeUInt16LE(guid.data3, 6) + guid.data4.copy(buf, 8, 0, 8) + return buf +} + +/** + * 解析 GUID 字符串为小端序结构 + * 格式: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" + * Data1/Data2/Data3 作为十六进制整数解析(内存中小端存储) + * Data4 直接从十六进制字符串取字节(不做字节序转换) + * + * 参考: src/helpers.c 中的 string2UuidLE() + */ +export function stringToGuidLE(str: string): GUID | null { + const re = + /^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i + const m = str.match(re) + if (!m) return null + + const data1 = parseInt(m[1], 16) >>> 0 + const data2 = parseInt(m[2], 16) + const data3 = parseInt(m[3], 16) + const data4 = Buffer.from(m[4] + m[5], 'hex') + + return { data1, data2, data3, data4 } +} + +// ─── FILETIME 转换 ────────────────────────────────────────────────────────── + +/** + * 获取当前时间的 FILETIME 表示(8 字节小端序 Buffer) + * 参考: src/helpers.c 中的 getFileTime() + */ +export function unixTimeToFileTime(): Buffer { + const nowMs = BigInt(Date.now()) + const ft = nowMs * HUNDRED_NS_PER_MS + FILETIME_UNIX_EPOCH_DIFF + const buf = Buffer.alloc(8) + buf.writeBigUInt64LE(ft) + return buf +} + +/** + * 将 8 字节小端序 FILETIME Buffer 转换为 Unix 时间戳(秒) + * 参考: src/output.c 中的时间格式化逻辑 + */ +export function fileTimeToUnixTime(ft: Buffer): number { + const val = ft.readBigUInt64LE(0) + const unixMs = (val - FILETIME_UNIX_EPOCH_DIFF) / HUNDRED_NS_PER_MS + return Number(unixMs) / 1000 +} + +// ─── UCS-2 编码转换 ───────────────────────────────────────────────────────── +// KMS 协议中的字符串使用 UCS-2 LE 编码(每个字符 2 字节,小端序) + +/** + * 将 UTF-8 字符串转换为 UCS-2 LE Buffer,固定长度 maxChars * 2 字节 + * 超出部分截断,不足部分填零 + */ +export function utf8ToUcs2(str: string, maxChars: number): Buffer { + const buf = Buffer.alloc(maxChars * 2) + const truncated = str.slice(0, maxChars) + const encoded = Buffer.from(truncated, 'utf16le') + encoded.copy(buf, 0, 0, Math.min(encoded.length, maxChars * 2)) + return buf +} + +/** + * 将 UCS-2 LE Buffer 转换为 UTF-8 字符串,遇到空终止符 (0x0000) 停止 + * 参考: src/output.c 中 ePID 的解码逻辑 + */ +export function ucs2ToUtf8(buf: Buffer, maxChars: number): string { + const limit = Math.min(buf.length, maxChars * 2) + // 查找空终止符(偶数边界上的两个零字节) + let end = limit + for (let i = 0; i < limit; i += 2) { + if (buf[i] === 0 && buf[i + 1] === 0) { + end = i + break + } + } + return buf.subarray(0, end).toString('utf16le') +} + +// ─── 版本信息 ─────────────────────────────────────────────────────────────── + +/** 版本标识字符串,对应原版的 VERSION 宏 */ +export const VERSION = 'private build' + +// ─── 响应验证结果 ─────────────────────────────────────────────────────────── + +/** + * KMS 响应验证结果 — 对应 src/kms.h 中的 RESPONSE_RESULT + * 每个字段表示一项验证检查是否通过 + */ +export interface ResponseResult { + mask: number // 所有检查结果的位掩码 + hashOK: boolean // 哈希验证通过 + timeStampOK: boolean // 时间戳匹配 + clientMachineIDOK: boolean // 客户端机器 ID 匹配 + versionOK: boolean // 协议版本一致 + ivsOK: boolean // IV(初始化向量)匹配 + decryptSuccess: boolean // 解密成功 + hmacSha256OK: boolean // HMAC-SHA256 验证通过(仅 V6) + pidLengthOK: boolean // PID 长度有效 + rpcOK: boolean // RPC 返回码为零 + ivNotSuspicious: boolean // IV 非可疑(V6 中请求和响应 IV 应不同) + effectiveResponseSize: number // 实际响应大小 + correctResponseSize: number // 预期响应大小 +} diff --git a/nuxt.config.ts b/nuxt.config.ts index 8e022b19..9a4a5ef5 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -25,7 +25,7 @@ export default defineNuxtConfig({ tasks: true }, scheduledTasks: { - '* * * * *': ['monitor'] + '*/10 * * * *': ['monitor'] }, storage, cloudflare: { diff --git a/server/api/monitor.ts b/server/api/monitor.ts index ad44f373..78e1bdda 100644 --- a/server/api/monitor.ts +++ b/server/api/monitor.ts @@ -1,30 +1,27 @@ export default defineEventHandler(async () => { - const results = await Promise.all( - getMonitorList().map(async host => { - let data = await storage.getItem(`${host}.json`) + const monitorStorage = + (await storage.getItem('monitor.json')) || {} - if (!Array.isArray(data)) { - data = [] - } + const results = getMonitorList().map(host => { + const data = Array.isArray(monitorStorage[host]) ? monitorStorage[host] : [] - const total = data.length + const total = data.length - const success = data.filter(({ status }) => status).length + const success = data.filter(({ status }) => status).length - const fail = total - success + const fail = total - success - const delay = data.reduce((acc, { delay }) => acc + delay, 0) / total + const delay = data.reduce((acc, { delay }) => acc + delay, 0) / total - return { - host, - total, - success, - fail, - delay: delay ? Number(delay.toFixed(2)) : 0, - data - } - }) - ) + return { + host, + total, + success, + fail, + delay: delay ? Number(delay.toFixed(2)) : 0, + data + } + }) const getSuccessRate = (item: (typeof results)[number]) => { return item.total ? item.success / item.total : 0 diff --git a/server/tasks/monitor.ts b/server/tasks/monitor.ts index f341ba13..40222a24 100644 --- a/server/tasks/monitor.ts +++ b/server/tasks/monitor.ts @@ -4,8 +4,14 @@ export default defineTask({ description: 'Run KMS server monitoring.' }, async run() { - for (const host of getMonitorList()) { - let monitorData = await storage.getItem(`${host}.json`) + const monitorList = getMonitorList() + const monitorStorage = + (await storage.getItem('monitor.json')) || {} + const nextMonitorStorage: MonitorStorage = {} + const now = Date.now() + + for (const host of monitorList) { + let monitorData = monitorStorage[host] if (!Array.isArray(monitorData)) { monitorData = [] @@ -19,13 +25,15 @@ export default defineTask({ monitorData.push({ status, - time: Date.now(), + time: now, delay }) - await storage.setItem(`${host}.json`, monitorData) + nextMonitorStorage[host] = monitorData } + await storage.setItem('monitor.json', nextMonitorStorage) + return { result: 'Done' } } }) diff --git a/shared/types/monitor.ts b/shared/types/monitor.ts index 99db44ac..a8f4a59b 100644 --- a/shared/types/monitor.ts +++ b/shared/types/monitor.ts @@ -12,3 +12,5 @@ export interface MonitorInfo { total: number data: MonitorData[] } + +export type MonitorStorage = Record From c767490688a521f2dfb9594a159634993d7ab954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E7=BA=B8=E5=BF=98=E5=BF=A7?= <54543761+ikxin@users.noreply.github.com> Date: Fri, 5 Jun 2026 23:42:54 +0800 Subject: [PATCH 10/19] =?UTF-8?q?feat:=20=E4=B8=BA=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E5=92=8C=E6=8E=A5=E6=94=B6=E6=95=B0=E6=8D=AE=E7=9A=84=20socket?= =?UTF-8?q?=20=E6=B7=BB=E5=8A=A0=E8=B6=85=E6=97=B6=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- node-vlmcs/src/index.ts | 1 + node-vlmcs/src/network.ts | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/node-vlmcs/src/index.ts b/node-vlmcs/src/index.ts index 7b600744..996581e5 100644 --- a/node-vlmcs/src/index.ts +++ b/node-vlmcs/src/index.ts @@ -61,6 +61,7 @@ function connectSocket( socket.once('connect', () => { cleanup() socket.pause() + socket.setTimeout(timeout) resolve(socket) }) diff --git a/node-vlmcs/src/network.ts b/node-vlmcs/src/network.ts index e5ab8d91..e873df12 100644 --- a/node-vlmcs/src/network.ts +++ b/node-vlmcs/src/network.ts @@ -49,6 +49,7 @@ function connectWithTimeout( clearTimeout(timer) // 暂停 socket,防止在附加数据监听器之前丢失数据 sock.pause() + sock.setTimeout(CONNECT_TIMEOUT_MS) resolve(sock) } }) @@ -187,6 +188,7 @@ export function recvData(sock: net.Socket, size: number): Promise { sock.removeListener('error', onError) sock.removeListener('close', onClose) sock.removeListener('end', onEnd) + sock.removeListener('timeout', onTimeout) } const onData = (chunk: Buffer) => { @@ -224,10 +226,17 @@ export function recvData(sock: net.Socket, size: number): Promise { ) } + const onTimeout = () => { + cleanup() + sock.destroy() + reject(new Error(`Socket timeout after ${sock.timeout}ms`)) + } + sock.on('data', onData) sock.once('error', onError) sock.once('close', onClose) sock.once('end', onEnd) + sock.once('timeout', onTimeout) // 恢复 socket 以开始接收数据 sock.resume() From b3989b0d42697d1d3d270d7ee8adf5d5b982495e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E7=BA=B8=E5=BF=98=E5=BF=A7?= <54543761+ikxin@users.noreply.github.com> Date: Sat, 13 Jun 2026 17:52:09 +0800 Subject: [PATCH 11/19] =?UTF-8?q?chore:=20=E7=A7=BB=E9=99=A4=20@vueuse/nux?= =?UTF-8?q?t=20=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.en.md | 1 - README.md | 1 - app/components/AppHeader.vue | 16 +- app/components/CommonActivate.vue | 1 - app/composables/useClipboard.ts | 88 + app/composables/useMediaQuery.ts | 20 + app/pages/activate.vue | 2 +- app/pages/check/index.vue | 15 +- app/plugins/arco-design.ts | 2 + nuxt.config.ts | 1 - package.json | 18 +- pnpm-lock.yaml | 4888 +++++++++++++++-------------- pnpm-workspace.yaml | 1 - 13 files changed, 2647 insertions(+), 2407 deletions(-) create mode 100644 app/composables/useClipboard.ts create mode 100644 app/composables/useMediaQuery.ts diff --git a/README.en.md b/README.en.md index 15ecffa7..1c732662 100644 --- a/README.en.md +++ b/README.en.md @@ -65,7 +65,6 @@ The static version uses https://kms.ikxin.com API by default. You can deploy you | [Tailwind CSS](https://github.com/tailwindlabs/tailwindcss) | Utility-first CSS framework | | [Arco Design Vue](https://github.com/arco-design/arco-design-vue) | Enterprise-level design system by ByteDance | | [ECharts](https://github.com/apache/echarts) | Feature-rich interactive charting library | -| [VueUse](https://github.com/vueuse/vueuse) | Collection of essential Composition API utilities | | [Nuxt I18n](https://github.com/nuxt-modules/i18n) | Internationalization plugin for Nuxt | ## 📦 Deployment diff --git a/README.md b/README.md index fd55b747..eb7a3a0f 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,6 @@ https://kms.ikxin.com | [Tailwind CSS](https://github.com/tailwindlabs/tailwindcss) | 实用性优先的 CSS 框架 | | [Arco Design Vue](https://github.com/arco-design/arco-design-vue) | 字节跳动开发的企业级产品设计系统 | | [ECharts](https://github.com/apache/echarts) | 功能丰富的交互式图表库 | -| [VueUse](https://github.com/vueuse/vueuse) | 基于 Composition API 的实用函数集合 | | [Nuxt I18n](https://github.com/nuxt-modules/i18n) | 适用于 Nuxt 的国际化支持插件 | ## 📦 部署 diff --git a/app/components/AppHeader.vue b/app/components/AppHeader.vue index 82c9a7dc..41a2f745 100644 --- a/app/components/AppHeader.vue +++ b/app/components/AppHeader.vue @@ -8,6 +8,20 @@ const localePath = useLocalePath() const path = computed(() => route.path.slice(1).split('/')) const drawerVisible = ref(false) +const isDesktop = useMediaQuery('(min-width: 768px)') + +watch( + isDesktop, + value => { + if (value) { + drawerVisible.value = false + } + }, + { + immediate: true, + flush: 'post' + } +) const navItems = computed(() => [ { @@ -128,7 +142,7 @@ function handleNavClick(name: string) {
- +
diff --git a/app/components/CommonActivate.vue b/app/components/CommonActivate.vue index 1dae499a..f5f7ef56 100644 --- a/app/components/CommonActivate.vue +++ b/app/components/CommonActivate.vue @@ -60,7 +60,6 @@ const fileUrl = computed(() => { }) const { copy, copied } = useClipboard({ - legacy: true, source: content }) diff --git a/app/composables/useClipboard.ts b/app/composables/useClipboard.ts new file mode 100644 index 00000000..81b96afa --- /dev/null +++ b/app/composables/useClipboard.ts @@ -0,0 +1,88 @@ +import type { MaybeRefOrGetter, ShallowRef } from 'vue' +import { onScopeDispose, shallowReadonly, shallowRef, toValue } from 'vue' + +export interface UseClipboardOptions { + source: MaybeRefOrGetter + copiedDuring?: number +} + +export interface UseClipboardReturn { + copied: Readonly> + copy: () => Promise +} + +export function useClipboard({ + source, + copiedDuring = 1500 +}: UseClipboardOptions): UseClipboardReturn { + const copied = shallowRef(false) + let copiedTimer: ReturnType | undefined + + onScopeDispose(() => { + if (copiedTimer) { + clearTimeout(copiedTimer) + } + }) + + async function copy() { + const value = toValue(source) + const success = await writeClipboard(value) + + if (success) { + copied.value = true + resetCopiedLater() + } + + return success + } + + async function writeClipboard(value: string) { + if (typeof navigator !== 'undefined' && navigator.clipboard?.writeText) { + try { + await navigator.clipboard.writeText(value) + return true + } catch { + // Fall through to the legacy path. + } + } + + return legacyCopy(value) + } + + function resetCopiedLater() { + if (copiedTimer) { + clearTimeout(copiedTimer) + } + + copiedTimer = setTimeout(() => { + copied.value = false + }, copiedDuring) + } + + function legacyCopy(value: string) { + if (typeof document === 'undefined' || !document.body) { + return false + } + + const textarea = document.createElement('textarea') + + try { + textarea.value = value + textarea.style.position = 'absolute' + textarea.style.opacity = '0' + textarea.setAttribute('readonly', '') + document.body.appendChild(textarea) + textarea.select() + return document.execCommand('copy') + } catch { + return false + } finally { + textarea.remove() + } + } + + return { + copied: shallowReadonly(copied), + copy + } +} diff --git a/app/composables/useMediaQuery.ts b/app/composables/useMediaQuery.ts new file mode 100644 index 00000000..a03cb733 --- /dev/null +++ b/app/composables/useMediaQuery.ts @@ -0,0 +1,20 @@ +export function useMediaQuery(query: string) { + const matches = ref(false) + let mediaQuery: MediaQueryList | undefined + + const update = (event: MediaQueryList | MediaQueryListEvent) => { + matches.value = event.matches + } + + onMounted(() => { + mediaQuery = window.matchMedia(query) + update(mediaQuery) + mediaQuery.addEventListener('change', update) + }) + + onUnmounted(() => { + mediaQuery?.removeEventListener('change', update) + }) + + return matches +} diff --git a/app/pages/activate.vue b/app/pages/activate.vue index 4ef9e00f..20e1c598 100644 --- a/app/pages/activate.vue +++ b/app/pages/activate.vue @@ -55,7 +55,7 @@ function handleRainyunAdClick() { class="fixed left-0 top-1/3 z-[100] -translate-y-1/2 cursor-pointer rounded-r-lg bg-[rgb(var(--primary-6))] px-1 py-4 text-white shadow-lg md:hidden" @click="drawerVisible = true" > - + diff --git a/app/pages/check/index.vue b/app/pages/check/index.vue index 1411b3e8..8e1b00ce 100644 --- a/app/pages/check/index.vue +++ b/app/pages/check/index.vue @@ -354,16 +354,15 @@ const handleSubmit = async (data: { >
- + + diff --git a/app/plugins/arco-design.ts b/app/plugins/arco-design.ts index 21e9ef16..a329cad9 100644 --- a/app/plugins/arco-design.ts +++ b/app/plugins/arco-design.ts @@ -1,5 +1,7 @@ import ArcoVue from '@arco-design/web-vue' +import ArcoVueIcon from '@arco-design/web-vue/es/icon' export default defineNuxtPlugin(nuxtApp => { nuxtApp.vueApp.use(ArcoVue) + nuxtApp.vueApp.use(ArcoVueIcon) }) diff --git a/nuxt.config.ts b/nuxt.config.ts index 9a4a5ef5..f637b856 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -77,7 +77,6 @@ export default defineNuxtConfig({ '@nuxtjs/tailwindcss', '@nuxtjs/i18n', '@nuxtjs/color-mode', - '@vueuse/nuxt', 'nuxt-echarts' ], colorMode: { diff --git a/package.json b/package.json index 72c47896..a5b6d107 100644 --- a/package.json +++ b/package.json @@ -15,19 +15,17 @@ }, "dependencies": { "@arco-design/web-vue": "^2.58.0", - "@iconify-json/flag": "^1.2.11", - "@nuxt/icon": "^2.2.1", - "@nuxtjs/color-mode": "^4.0.0", - "@nuxtjs/i18n": "^10.2.4", + "@iconify-json/flag": "^1.2.12", + "@nuxt/icon": "^2.2.3", + "@nuxtjs/color-mode": "^4.0.1", + "@nuxtjs/i18n": "^10.4.0", "@nuxtjs/tailwindcss": "^6.14.0", - "@upstash/redis": "^1.38.0", - "@vueuse/nuxt": "^14.2.1", - "echarts": "^6.0.0", + "echarts": "^6.1.0", "node-vlmcs": "workspace:*", - "nuxt": "^4.4.2", + "nuxt": "^4.4.8", "nuxt-echarts": "^1.0.1", "oxfmt": "^0.53.0", - "vue": "^3.5.35", - "wrangler": "^4.95.0" + "vue": "^3.5.38", + "wrangler": "^4.100.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ced8133d..0d2c4609 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,49 +10,43 @@ importers: dependencies: '@arco-design/web-vue': specifier: ^2.58.0 - version: 2.58.0(vue@3.5.35(typescript@5.9.3)) + version: 2.58.0(vue@3.5.38(typescript@5.9.3)) '@iconify-json/flag': - specifier: ^1.2.11 - version: 1.2.11 + specifier: ^1.2.12 + version: 1.2.12 '@nuxt/icon': - specifier: ^2.2.1 - version: 2.2.1(magicast@0.5.2)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3)) + specifier: ^2.2.3 + version: 2.2.3(magicast@0.5.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.38(typescript@5.9.3)) '@nuxtjs/color-mode': - specifier: ^4.0.0 - version: 4.0.0(magicast@0.5.2) + specifier: ^4.0.1 + version: 4.0.1(magicast@0.5.3) '@nuxtjs/i18n': - specifier: ^10.2.4 - version: 10.2.4(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-dom@3.5.35)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@5.9.3)(vue@3.5.35(typescript@5.9.3)) + specifier: ^10.4.0 + version: 10.4.0(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-dom@3.5.38)(db0@0.3.4)(eslint@9.39.4(jiti@2.7.0))(ioredis@5.11.1)(magicast@0.5.3)(rollup@4.61.1)(typescript@5.9.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.38(typescript@5.9.3)) '@nuxtjs/tailwindcss': specifier: ^6.14.0 - version: 6.14.0(magicast@0.5.2)(tsx@4.19.2)(yaml@2.8.3) - '@upstash/redis': - specifier: ^1.38.0 - version: 1.38.0 - '@vueuse/nuxt': - specifier: ^14.2.1 - version: 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3)) + version: 6.14.0(magicast@0.5.3)(tsx@4.19.2)(yaml@2.9.0) echarts: - specifier: ^6.0.0 - version: 6.0.0 + specifier: ^6.1.0 + version: 6.1.0 node-vlmcs: specifier: workspace:* version: link:node-vlmcs nuxt: - specifier: ^4.4.2 - version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3) + specifier: ^4.4.8 + version: 4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.38)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.7.0))(ioredis@5.11.1)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.61.1))(rollup@4.61.1)(srvx@0.11.16)(terser@5.48.0)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(yaml@2.9.0) nuxt-echarts: specifier: ^1.0.1 - version: 1.0.1(echarts@6.0.0)(magicast@0.5.2)(vue-echarts@8.0.1(echarts@6.0.0)(vue@3.5.35(typescript@5.9.3))) + version: 1.0.1(echarts@6.1.0)(magicast@0.5.3)(vue-echarts@8.0.1(echarts@6.1.0)(vue@3.5.38(typescript@5.9.3))) oxfmt: specifier: ^0.53.0 version: 0.53.0 vue: - specifier: ^3.5.35 - version: 3.5.35(typescript@5.9.3) + specifier: ^3.5.38 + version: 3.5.38(typescript@5.9.3) wrangler: - specifier: ^4.95.0 - version: 4.95.0 + specifier: ^4.100.0 + version: 4.100.0 node-vlmcs: devDependencies: @@ -80,142 +74,146 @@ packages: peerDependencies: vue: '>=3.1.0' - '@babel/code-frame@7.29.0': - resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.29.0': - resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} engines: {node: '>=6.9.0'} - '@babel/core@7.29.0': - resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.29.1': - resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + '@babel/generator@7.29.7': + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.27.3': - resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + '@babel/generator@8.0.0-rc.6': + resolution: {integrity: sha512-6mIzgVK8DgEzvIapoQwhXTMnnkuE4STQmVv9H03i/tZ2ml8oev3TRvZJgTenK2Bsq0YWNtzOrFdTyNzCMFtjJQ==} + engines: {node: ^22.18.0 || >=24.11.0} + + '@babel/helper-annotate-as-pure@7.29.7': + resolution: {integrity: sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.28.6': - resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.28.6': - resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} + '@babel/helper-create-class-features-plugin@7.29.7': + resolution: {integrity: sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.28.5': - resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + '@babel/helper-member-expression-to-functions@7.29.7': + resolution: {integrity: sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.28.6': - resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.28.6': - resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.27.1': - resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + '@babel/helper-optimise-call-expression@7.29.7': + resolution: {integrity: sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.28.6': - resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + '@babel/helper-plugin-utils@7.29.7': + resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} engines: {node: '>=6.9.0'} - '@babel/helper-replace-supers@7.28.6': - resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} + '@babel/helper-replace-supers@7.29.7': + resolution: {integrity: sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': - resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + '@babel/helper-skip-transparent-expression-wrappers@7.29.7': + resolution: {integrity: sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.29.7': resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@8.0.0-rc.6': + resolution: {integrity: sha512-BCkFy+zN6kXQed3YOT7aJl93NfDSzQc3pBfsvTVPs9gU9X3V0aefEF5kwBT0E+mDWH9QgKaZstYUQN9VdQZT4g==} + engines: {node: ^22.18.0 || >=24.11.0} '@babel/helper-validator-identifier@7.29.7': resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} - engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@8.0.0-rc.6': + resolution: {integrity: sha512-nVJ+1JcCgntv8d78rRo++o2wuODT0Irknx2BF8Np4Ft2CRgjLqIs4qzSZ8b66yGbBdMWGmZBO9WEZv1hhNiSpg==} + engines: {node: ^22.18.0 || >=24.11.0} - '@babel/helpers@7.29.2': - resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.2': - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} - engines: {node: '>=6.0.0'} - hasBin: true + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} + engines: {node: '>=6.9.0'} '@babel/parser@7.29.7': resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-syntax-jsx@7.28.6': - resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} + '@babel/parser@8.0.0-rc.6': + resolution: {integrity: sha512-rOS8IpdO7mQELkTPlCsTgPejO0bFuZdEDCGQJouYbYf9e1FLTym7Fei2pEjq8q7MWbX0ravcd7QQYKs1TxOuog==} + engines: {node: ^22.18.0 || >=24.11.0} + hasBin: true + + '@babel/plugin-syntax-jsx@7.29.7': + resolution: {integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.28.6': - resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} + '@babel/plugin-syntax-typescript@7.29.7': + resolution: {integrity: sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.28.6': - resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==} + '@babel/plugin-transform-typescript@7.29.7': + resolution: {integrity: sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.29.0': - resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} engines: {node: '>=6.9.0'} '@babel/types@7.29.7': resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} - '@bomb.sh/tab@0.0.14': - resolution: {integrity: sha512-cHMk2LI430MVoX1unTt9oK1iZzQS4CYDz97MSxKLNErW69T43Z2QLFTpdS/3jVOIKrIADWfuxQ+nQNJkNV7E4w==} + '@babel/types@8.0.0-rc.6': + resolution: {integrity: sha512-p7/ABylAYlexb31wtRdIfH9L9A0Z2T/9H6zAqzqndkY2PLkvNNc580wGhp/gGKN4Sp9sQvSkhc6Oga8/O+wTyw==} + engines: {node: ^22.18.0 || >=24.11.0} + + '@bomb.sh/tab@0.0.15': + resolution: {integrity: sha512-Y90ub44TAvbdO9P8mcD/XPyQjFhiR5xmd4Fk7JErmWmEWEUimNnjWiBrVZ16Tj3GA1rLZ+uvCN2V/pzLawv31g==} hasBin: true peerDependencies: cac: ^6.7.14 @@ -229,11 +227,13 @@ packages: commander: optional: true - '@clack/core@1.2.0': - resolution: {integrity: sha512-qfxof/3T3t9DPU/Rj3OmcFyZInceqj/NVtO9rwIuJqCUgh32gwPjpFQQp/ben07qKlhpwq7GzfWpST4qdJ5Drg==} + '@clack/core@1.4.1': + resolution: {integrity: sha512-FILJa1gGKEFTGZAJE9RpVhrjKz3c3h4ar60dSv6cGuDqufQ84YEIS3GAGvZiN+H6yaLbbvTFNejjCC4tXpZEuw==} + engines: {node: '>= 20.12.0'} - '@clack/prompts@1.2.0': - resolution: {integrity: sha512-4jmztR9fMqPMjz6H/UZXj0zEmE43ha1euENwkckKKel4XpSfokExPo5AiVStdHSAlHekz4d0CA/r45Ok1E4D3w==} + '@clack/prompts@1.5.1': + resolution: {integrity: sha512-zccHj2z2oCCO4yrDiRSlFOxWerGqRiysP7a5jPK6uoI9URKAquwY42Dd/iUP8JWHxEzdRe4TlbvZCo8z1/mhrw==} + engines: {node: '>= 20.12.0'} '@cloudflare/kv-asset-handler@0.4.2': resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==} @@ -252,38 +252,38 @@ packages: workerd: optional: true - '@cloudflare/workerd-darwin-64@1.20260526.1': - resolution: {integrity: sha512-/pR3GH3gfv0PUp7DjI8v0aAIDOqFwibq4bg5xT7TZgcVdBV/cJQWckdXCMqiRtHiawLwogUX00EIOINkYJ1Zqg==} + '@cloudflare/workerd-darwin-64@1.20260611.1': + resolution: {integrity: sha512-iJICldmi4sBGgi7IrQles8cStOGXM/Tmv95C4OODVs6VIbMsJPqThUM5h3uYVQNULuJ8I/aVvnJ3Eh/wZCKwuA==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20260526.1': - resolution: {integrity: sha512-rcyu0iANYfaiezKh3Mcao1O4IIgVfQldxduiL5TZT1sP0NIeRY4YReSTrzPxNnXxSYaIqaqRHMcHbUM/ic4knA==} + '@cloudflare/workerd-darwin-arm64@1.20260611.1': + resolution: {integrity: sha512-yBbVXvbZyltR3I7NJdC4C4ItkItjZSiabcA/3HzEWOUQjLVKFqRh4so6ToHr70VCYh8VGeR8EDZL23igLhXqFQ==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20260526.1': - resolution: {integrity: sha512-5EZAEnlLwa9oGJRo8Nd3iY5Wcd9ROGNNG90xNIGp8MEjj8v2jTn42NC47fCZKFdnLj3+S+vWEhu1x0GVJnALjA==} + '@cloudflare/workerd-linux-64@1.20260611.1': + resolution: {integrity: sha512-PfNjpxOlaIgZFYuhD7+neEEewCN2Ud993wEEN0fmbtSOax1AK53LGqmXUDvFhnbkHxJLFAxYCSNISW8QbzaAIg==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20260526.1': - resolution: {integrity: sha512-X/YBQXeXFeCN7QTStoWrATEBc9WKl7PIqkw/dQkjyJ72gh3rkLe0+Xkzp3wO7gtxTDQMa7NPGy1W4+sdMf8q1g==} + '@cloudflare/workerd-linux-arm64@1.20260611.1': + resolution: {integrity: sha512-GEp4XbuIKjlF8pakqXcUDJfKiJosD/Q7S83J0d+r+z9XIlYGfF3ntm08e2aiF5TFTwp3fnG4yMoPUAKNhNJpvQ==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20260526.1': - resolution: {integrity: sha512-R+tqpFFdcfZIljx8fIW9rj9fRTtDgfoA2yonsfAGa6e8snrmr+38mdFHtkRC0D3UyZpn/hOtmXiUBfdX2gMR7Q==} + '@cloudflare/workerd-windows-64@1.20260611.1': + resolution: {integrity: sha512-S6JkS0kEbcCKs19RGqEPhjCRbP8GBkQwqYLp2fhBJtD/KTlwqLzOJ9E6PQ7gQKgWHtxy1NBG3oXarlNFRNU/dw==} engines: {node: '>=16'} cpu: [x64] os: [win32] - '@colordx/core@5.0.1': - resolution: {integrity: sha512-zFq5Ta9C/G3LfkAQZ8lEMXJM7Y9YfoCSFR3PrYP6AsLElM/0g7RAJ5SS0CLGDr4t2tvebpHK7ZcIJIU+B/dxrQ==} + '@colordx/core@5.4.3': + resolution: {integrity: sha512-kIxYSfA5T8HXjav55UaaH/o/cKivF6jCCGIb8eqtcsfI46wsvlSiT8jMDyrl779qLec3c2c2oHBZo4oAhvbjrQ==} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} @@ -301,22 +301,28 @@ packages: peerDependencies: postcss-selector-parser: ^7.0.0 - '@dxup/nuxt@0.4.0': - resolution: {integrity: sha512-28LDotpr9G2knUse3cQYsOo6NJq5yhABv4ByRVRYJUmzf9Q31DI7rpRek4POlKy1aAcYyKgu5J2616pyqLohYg==} + '@dxup/nuxt@0.4.1': + resolution: {integrity: sha512-gtYffW6OfWNvoLW+XD3Mx/K8uUq08PMGLYJoDxc92EzZAWqR0FhcR5iaLm5r/OxyGTKz+P5f5Y7Aoir9+SjYaw==} peerDependencies: typescript: '*' + peerDependenciesMeta: + typescript: + optional: true '@dxup/unimport@0.1.2': resolution: {integrity: sha512-/B8YJGPzaYq1NbsQmwgP8EZqg40NpTw4ZB3suuI0TplbxKHeK94jeaawLmVhCv+YwUnOpiWEz9U6SeThku/8JQ==} - '@emnapi/core@1.9.1': - resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} - '@emnapi/runtime@1.9.1': - resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} - '@emnapi/wasi-threads@1.2.0': - resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} '@esbuild/aix-ppc64@0.23.1': resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} @@ -336,8 +342,14 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.27.5': - resolution: {integrity: sha512-nGsF/4C7uzUj+Nj/4J+Zt0bYQ6bz33Phz8Lb2N80Mti1HjGclTJdXZ+9APC4kLvONbjxN1zfvYNd8FEcbBK/MQ==} + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -360,8 +372,14 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.27.5': - resolution: {integrity: sha512-Oeghq+XFgh1pUGd1YKs4DDoxzxkoUkvko+T/IVKwlghKLvvjbGFB3ek8VEDBmNvqhwuL0CQS3cExdzpmUyIrgA==} + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -384,8 +402,14 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.27.5': - resolution: {integrity: sha512-Cv781jd0Rfj/paoNrul1/r4G0HLvuFKYh7C9uHZ2Pl8YXstzvCyyeWENTFR9qFnRzNMCjXmsulZuvosDg10Mog==} + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -408,8 +432,14 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.27.5': - resolution: {integrity: sha512-nQD7lspbzerlmtNOxYMFAGmhxgzn8Z7m9jgFkh6kpkjsAhZee1w8tJW3ZlW+N9iRePz0oPUDrYrXidCPSImD0Q==} + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -432,8 +462,14 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.27.5': - resolution: {integrity: sha512-I+Ya/MgC6rr8oRWGRDF3BXDfP8K1BVUggHqN6VI2lUZLdDi1IM1v2cy0e3lCPbP+pVcK3Tv8cgUhHse1kaNZZw==} + '@esbuild/darwin-arm64@0.27.7': + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -456,8 +492,14 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.27.5': - resolution: {integrity: sha512-MCjQUtC8wWJn/pIPM7vQaO69BFgwPD1jriEdqwTCKzWjGgkMbcg+M5HzrOhPhuYe1AJjXlHmD142KQf+jnYj8A==} + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -480,8 +522,14 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.27.5': - resolution: {integrity: sha512-X6xVS+goSH0UelYXnuf4GHLwpOdc8rgK/zai+dKzBMnncw7BTQIwquOodE7EKvY2UVUetSqyAfyZC1D+oqLQtg==} + '@esbuild/freebsd-arm64@0.27.7': + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -504,8 +552,14 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.5': - resolution: {integrity: sha512-233X1FGo3a8x1ekLB6XT69LfZ83vqz+9z3TSEQCTYfMNY880A97nr81KbPcAMl9rmOFp11wO0dP+eB18KU/Ucg==} + '@esbuild/freebsd-x64@0.27.7': + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -528,8 +582,14 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.27.5': - resolution: {integrity: sha512-euKkilsNOv7x/M1NKsx5znyprbpsRFIzTV6lWziqJch7yWYayfLtZzDxDTl+LSQDJYAjd9TVb/Kt5UKIrj2e4A==} + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -552,8 +612,14 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.27.5': - resolution: {integrity: sha512-0wkVrYHG4sdCCN/bcwQ7yYMXACkaHc3UFeaEOwSVW6e5RycMageYAFv+JS2bKLwHyeKVUvtoVH+5/RHq0fgeFw==} + '@esbuild/linux-arm@0.27.7': + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -576,8 +642,14 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.27.5': - resolution: {integrity: sha512-hVRQX4+P3MS36NxOy24v/Cdsimy/5HYePw+tmPqnNN1fxV0bPrFWR6TMqwXPwoTM2VzbkA+4lbHWUKDd5ZDA/w==} + '@esbuild/linux-ia32@0.27.7': + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -600,8 +672,14 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.5': - resolution: {integrity: sha512-mKqqRuOPALI8nDzhOBmIS0INvZOOFGGg5n1osGIXAx8oersceEbKd4t1ACNTHM3sJBXGFAlEgqM+svzjPot+ZQ==} + '@esbuild/linux-loong64@0.27.7': + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -624,8 +702,14 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.27.5': - resolution: {integrity: sha512-EE/QXH9IyaAj1qeuIV5+/GZkBTipgGO782Ff7Um3vPS9cvLhJJeATy4Ggxikz2inZ46KByamMn6GqtqyVjhenA==} + '@esbuild/linux-mips64el@0.27.7': + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -648,8 +732,14 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.27.5': - resolution: {integrity: sha512-0V2iF1RGxBf1b7/BjurA5jfkl7PtySjom1r6xOK2q9KWw/XCpAdtB6KNMO+9xx69yYfSCRR9FE0TyKfHA2eQMw==} + '@esbuild/linux-ppc64@0.27.7': + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -672,8 +762,14 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.27.5': - resolution: {integrity: sha512-rYxThBx6G9HN6tFNuvB/vykeLi4VDsm5hE5pVwzqbAjZEARQrWu3noZSfbEnPZ/CRXP3271GyFk/49up2W190g==} + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -696,8 +792,14 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.27.5': - resolution: {integrity: sha512-uEP2q/4qgd8goEUc4QIdU/1P2NmEtZ/zX5u3OpLlCGhJIuBIv0s0wr7TB2nBrd3/A5XIdEkkS5ZLF0ULuvaaYQ==} + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -720,8 +822,14 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.27.5': - resolution: {integrity: sha512-+Gq47Wqq6PLOOZuBzVSII2//9yyHNKZLuwfzCemqexqOQCSz0zy0O26kIzyp9EMNMK+nZ0tFHBZrCeVUuMs/ew==} + '@esbuild/linux-x64@0.27.7': + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -738,8 +846,14 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.27.5': - resolution: {integrity: sha512-3F/5EG8VHfN/I+W5cO1/SV2H9Q/5r7vcHabMnBqhHK2lTWOh3F8vixNzo8lqxrlmBtZVFpW8pmITHnq54+Tq4g==} + '@esbuild/netbsd-arm64@0.27.7': + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -762,8 +876,14 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.5': - resolution: {integrity: sha512-28t+Sj3CPN8vkMOlZotOmDgilQwVvxWZl7b8rxpn73Tt/gCnvrHxQUMng4uu3itdFvrtba/1nHejvxqz8xgEMA==} + '@esbuild/netbsd-x64@0.27.7': + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -786,8 +906,14 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.27.5': - resolution: {integrity: sha512-Doz/hKtiuVAi9hMsBMpwBANhIZc8l238U2Onko3t2xUp8xtM0ZKdDYHMnm/qPFVthY8KtxkXaocwmMh6VolzMA==} + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -810,8 +936,14 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.5': - resolution: {integrity: sha512-WfGVaa1oz5A7+ZFPkERIbIhKT4olvGl1tyzTRaB5yoZRLqC0KwaO95FeZtOdQj/oKkjW57KcVF944m62/0GYtA==} + '@esbuild/openbsd-x64@0.27.7': + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -828,8 +960,14 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/openharmony-arm64@0.27.5': - resolution: {integrity: sha512-Xh+VRuh6OMh3uJ0JkCjI57l+DVe7VRGBYymen8rFPnTVgATBwA6nmToxM2OwTlSvrnWpPKkrQUj93+K9huYC6A==} + '@esbuild/openharmony-arm64@0.27.7': + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -852,8 +990,14 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.27.5': - resolution: {integrity: sha512-aC1gpJkkaUADHuAdQfuVTnqVUTLqqUNhAvEwHwVWcnVVZvNlDPGA0UveZsfXJJ9T6k9Po4eHi3c02gbdwO3g6w==} + '@esbuild/sunos-x64@0.27.7': + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -876,8 +1020,14 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.27.5': - resolution: {integrity: sha512-0UNx2aavV0fk6UpZcwXFLztA2r/k9jTUa7OW7SAea1VYUhkug99MW1uZeXEnPn5+cHOd0n8myQay6TlFnBR07w==} + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -900,8 +1050,14 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.27.5': - resolution: {integrity: sha512-5nlJ3AeJWCTSzR7AEqVjT/faWyqKU86kCi1lLmxVqmNR+j4HrYdns+eTGjS/vmrzCIe8inGQckUadvS0+JkKdQ==} + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -924,8 +1080,14 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.27.5': - resolution: {integrity: sha512-PWypQR+d4FLfkhBIV+/kHsUELAnMpx1bRvvsn3p+/sAERbnCzFrtDRG2Xw5n+2zPxBK2+iaP+vetsRl4Ti7WgA==} + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -991,22 +1153,22 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@iconify-json/flag@1.2.11': - resolution: {integrity: sha512-yqaID0FXzdXSXBBVi+/huqxrBWc0tySVvOsAmO/Vu/5UW+A3MNAOzXMIUfzA1SEiaZaxUHE9dDo6/wno3zggyw==} + '@iconify-json/flag@1.2.12': + resolution: {integrity: sha512-B5zphOSTn54UX9v1sKsR1atuhyuXExiAkjuLQA8aeDcB68+P6oiStEDeEEVkbHgwvFvklPM2G7GhqFw6VMnXhw==} - '@iconify/collections@1.0.668': - resolution: {integrity: sha512-d4ygrDoTqb02p7YNHdNzy64y4VQG0bd3w26EH+mJ0eKAj+DSWxDJ1Qw/WdCAqhKfjb+mRp1n9+YwcELs2YWVlg==} + '@iconify/collections@1.0.696': + resolution: {integrity: sha512-k06LxE/f1o3Tuj/n+ugiCyyq6CGxUG+k8o5ZZbOgVBHvpHiAWDDvZvdOSLNC8zeISRJhhiD04FkDKP7zk63fxQ==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@iconify/utils@3.1.0': - resolution: {integrity: sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==} + '@iconify/utils@3.1.3': + resolution: {integrity: sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw==} - '@iconify/vue@5.0.0': - resolution: {integrity: sha512-C+KuEWIF5nSBrobFJhT//JS87OZ++QDORB6f2q2Wm6fl2mueSTpFBeBsveK0KW9hWiZ4mNiPjsh6Zs4jjdROSg==} + '@iconify/vue@5.0.1': + resolution: {integrity: sha512-aumwwooJlFJ5H5qYWB6ZTAyM0C8hpfcSVLB9/a3qnH1GGvIJ+FEbpEs4s/HfErYe/M5qZeLjwmESR5fFm3lXEw==} peerDependencies: - vue: '>=3' + vue: '>=3.0.0' '@img/colour@1.1.0': resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} @@ -1161,9 +1323,9 @@ packages: cpu: [x64] os: [win32] - '@intlify/bundle-utils@11.0.7': - resolution: {integrity: sha512-fEO3CJGPymxieGh8BHox7d6stgajDQae7wgpH6YYw7WX+cdW6jTTXyljZqz7OV3JcwlS9M9UHSoO+YwiO56IhA==} - engines: {node: '>= 20'} + '@intlify/bundle-utils@11.2.3': + resolution: {integrity: sha512-9mrJyUJGPFJCIFGthvIFT58CknG701z9D0VRtLBtat3teo0fisP3Q6bo/t9YHnljBTEZ42hYm1ukn16LfLkRRg==} + engines: {node: '>= 22.13'} peerDependencies: petite-vue-i18n: '*' vue-i18n: '*' @@ -1173,40 +1335,43 @@ packages: vue-i18n: optional: true - '@intlify/core-base@11.3.0': - resolution: {integrity: sha512-NNX5jIwF4TJBe7RtSKDMOA6JD9mp2mRcBHAwt2X+Q8PvnZub0yj5YYXlFu2AcESdgQpEv/5Yx2uOCV/yh7YkZg==} - engines: {node: '>= 16'} + '@intlify/core-base@11.4.5': + resolution: {integrity: sha512-lja3F/iKVIvTa48mIwmrIeDcQUFZ0F0drvFvT8AwINOvbwnAzl/S/p8p2DxILZpWEUHRi1qewfWNIkMvhD3kKA==} + engines: {node: '>= 22'} - '@intlify/core@11.3.0': - resolution: {integrity: sha512-vFnw1TgM1J3T/hUm13NLBgciKzqePICs+C0VEcSTuew/7ZJs3NGxyLCEjF4W2Rv09MwZQj9H1Dr4m+e+kNDLcw==} - engines: {node: '>= 16'} + '@intlify/core@11.4.5': + resolution: {integrity: sha512-aA17hLi0mJOAR/RNG1CiN0qywuV7jnctjOm0o5bYZ2dZTOTKEGJdfuMxDQJ/MioK6w8ZHMJ1h/lENBfmgLD+ew==} + engines: {node: '>= 22'} - '@intlify/devtools-types@11.3.0': - resolution: {integrity: sha512-G9CNL4WpANWVdUjubOIIS7/D2j/0j+1KJmhBJxHilWNKr9mmt3IjFV3Hq4JoBP23uOoC5ynxz/FHZ42M+YxfGw==} - engines: {node: '>= 16'} + '@intlify/devtools-types@11.4.5': + resolution: {integrity: sha512-W5vydP9Yq3t82IyWqCM6aR0BTWCZrN5RAwjZEPpH8I2OQWp2RLy03Evh2ANZlSMhcvGAoyDg25k0so85Kwncpw==} + engines: {node: '>= 22'} '@intlify/h3@0.7.4': resolution: {integrity: sha512-BtL5+U3Dd9Qz6so+ArOMQWZ+nV21rOqqYUXnqwvW6J3VUXr66A9+9+vUFb/NAQvOU4kdfkO3c/9LMRGU9WZ8vw==} engines: {node: '>= 20'} - '@intlify/message-compiler@11.3.0': - resolution: {integrity: sha512-RAJp3TMsqohg/Wa7bVF3cChRhecSYBLrTCQSj7j0UtWVFLP+6iEJoE2zb7GU5fp+fmG5kCbUdzhmlAUCWXiUJw==} - engines: {node: '>= 16'} + '@intlify/message-compiler@11.4.5': + resolution: {integrity: sha512-IEOZiHtbQopyPc/Dz2M869lOlZYX1SdcniNJwphATDYHhovvIneEKf1EFF37DE7NAABZtza1FNtnwwqZWInfpw==} + engines: {node: '>= 22'} - '@intlify/shared@11.3.0': - resolution: {integrity: sha512-LC6P/uay7rXL5zZ5+5iRJfLs/iUN8apu9tm8YqQVmW3Uq3X4A0dOFUIDuAmB7gAC29wTHOS3EiN/IosNSz0eNQ==} - engines: {node: '>= 16'} + '@intlify/shared@11.4.5': + resolution: {integrity: sha512-g/i5mtdUa9ia/8BaJ4w6ZRHgAXYQd9XyCaQPRMvsd8d5qmZwkjoTmHrNsI28Q/7I8h+2ijUkI4uEnnMCziKupQ==} + engines: {node: '>= 22'} - '@intlify/unplugin-vue-i18n@11.0.7': - resolution: {integrity: sha512-wswKprS1D8VfnxxVhKxug5wa3MbDSOcCoXOBjnzhMK+6NfP6h6UI8pFqSBIvcW8nPDuzweTc0Sk3PeBCcubfoQ==} - engines: {node: '>= 20'} + '@intlify/unplugin-vue-i18n@11.2.3': + resolution: {integrity: sha512-fbPHjOVAkxrPnbhAs6PTNJlfLOJj35ZqYh8CZ9OpeKZiZoulA9lkvrWYP3kfsZ5K/CG9jIHXxpb1/mf5n/mBYA==} + engines: {node: '>= 22.13'} peerDependencies: petite-vue-i18n: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 vue: ^3.2.25 vue-i18n: '*' peerDependenciesMeta: petite-vue-i18n: optional: true + vite: + optional: true vue-i18n: optional: true @@ -1236,8 +1401,8 @@ packages: vue-i18n: optional: true - '@ioredis/commands@1.5.1': - resolution: {integrity: sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46571OnPTT0Zcw==} + '@ioredis/commands@1.10.0': + resolution: {integrity: sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q==} '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -1272,6 +1437,7 @@ packages: '@koa/router@12.0.2': resolution: {integrity: sha512-sYcHglGKTxGF+hQ6x67xDfkE9o+NhVlRHBqq6gLywaMc6CojK/5vFZByphdonKinYlMLkEkacm+HEse9HzwgTA==} engines: {node: '>= 12'} + deprecated: Please upgrade to v15 or higher. All reported bugs in this version are fixed in newer releases, dependencies have been updated, and security has been improved. '@kwsites/file-exists@1.1.1': resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} @@ -1289,8 +1455,8 @@ packages: peerDependencies: rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 - '@napi-rs/wasm-runtime@1.1.2': - resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==} + '@napi-rs/wasm-runtime@1.1.5': + resolution: {integrity: sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 @@ -1323,12 +1489,12 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nuxt/cli@3.34.0': - resolution: {integrity: sha512-KVI4xSo96UtUUbmxr9ouWTytbj1LzTw5alsM4vC/gSY/l8kPMRAlq0XpNSAVTDJyALzLY70WhaIMX24LJLpdFw==} + '@nuxt/cli@3.35.2': + resolution: {integrity: sha512-sCxNnFuYamqippdj+Cj4Nue55yaUvasaneyf2mnowK5/F1TKln/WVqTH18McxQ4baLlIlVapIFovKjJx1L8XMQ==} engines: {node: ^16.14.0 || >=18.0.0} hasBin: true peerDependencies: - '@nuxt/schema': ^4.3.1 + '@nuxt/schema': ^4.4.5 peerDependenciesMeta: '@nuxt/schema': optional: true @@ -1355,32 +1521,35 @@ packages: '@vitejs/devtools': optional: true - '@nuxt/icon@2.2.1': - resolution: {integrity: sha512-GI840yYGuvHI0BGDQ63d6rAxGzG96jQcWrnaWIQKlyQo/7sx9PjXkSHckXUXyX1MCr9zY6U25Td6OatfY6Hklw==} + '@nuxt/icon@2.2.3': + resolution: {integrity: sha512-2HWDoMRWGSOWl7fu8wvvLTjoiaEwM7tSDww+6n4yVrNzKJFNAOLpYB9UevEf0CrK32q2JuA7TZnVpdwiPPdQSQ==} - '@nuxt/kit@3.21.2': - resolution: {integrity: sha512-Bd6m6mrDrqpBEbX+g0rc66/ALd1sxlgdx5nfK9MAYO0yKLTOSK7McSYz1KcOYn3LQFCXOWfvXwaqih/b+REI1g==} + '@nuxt/kit@3.21.8': + resolution: {integrity: sha512-kg63DUPY5AHPn+9XM7u8rYcdWHXjzwfUscgRDuiC5YUciQ+xdLRhdwXelYFxEAx2nxJHossliiQXbMm/Fleivw==} engines: {node: '>=18.12.0'} - '@nuxt/kit@4.4.2': - resolution: {integrity: sha512-5+IPRNX2CjkBhuWUwz0hBuLqiaJPRoKzQ+SvcdrQDbAyE+VDeFt74VpSFr5/R0ujrK4b+XnSHUJWdS72w6hsog==} + '@nuxt/kit@4.4.8': + resolution: {integrity: sha512-ZUlZ5iYfyfJFDPluhn6ZxFWcsuxWbLnZBc8w3MAROcQ4lYfZ+qFpALBLSNlpc0zhOa++33EE+5PEbOAdVIY+dw==} engines: {node: '>=18.12.0'} - '@nuxt/nitro-server@4.4.2': - resolution: {integrity: sha512-iMTfraWcpA0MuEnnEI8JFK/4DODY4ss1CfB8m3sBVOqW9jpY1Z6hikxzrtN+CadtepW2aOI5d8TdX5hab+Sb4Q==} - engines: {node: ^20.19.0 || >=22.12.0} + '@nuxt/nitro-server@4.4.8': + resolution: {integrity: sha512-cc1fxgSx34Htesx3JBO+hMhbqd6VljXDC06P+UOA5z53cR224TmEFYT/MUuZDkrtt4qLnSG8yq0IxhEM3NCUlw==} + engines: {node: ^22.12.0 || ^24.11.0 || >=26.0.0} peerDependencies: '@babel/plugin-proposal-decorators': ^7.25.0 + '@babel/plugin-syntax-typescript': ^7.25.0 '@rollup/plugin-babel': ^6.0.0 || ^7.0.0 - nuxt: ^4.4.2 + nuxt: ^4.4.8 peerDependenciesMeta: '@babel/plugin-proposal-decorators': optional: true + '@babel/plugin-syntax-typescript': + optional: true '@rollup/plugin-babel': optional: true - '@nuxt/schema@4.4.2': - resolution: {integrity: sha512-/q6C7Qhiricgi+PKR7ovBnJlKTL0memCbA1CzRT+itCW/oeYzUfeMdQ35mGntlBoyRPNrMXbzuSUhfDbSCU57w==} + '@nuxt/schema@4.4.8': + resolution: {integrity: sha512-igfWuMF0x0Pmx/XwhPwH/bcXgbuwNnjUjqxCAsY6VQhmGKo0e9soJq3Q0ohj+rBkBfX6o2ysTP1/t2M82aK4qA==} engines: {node: ^14.18.0 || >=16.10.0} '@nuxt/telemetry@2.8.0': @@ -1390,13 +1559,13 @@ packages: peerDependencies: '@nuxt/kit': '>=3.0.0' - '@nuxt/vite-builder@4.4.2': - resolution: {integrity: sha512-fJaIwMA8ID6BU5EqmoDvnhq4qYDJeWjdHk4jfqy8D3Nm7CoUW0BvX7Ee92XoO05rtUiClGlk/NQ1Ii8hs3ZIbw==} - engines: {node: ^20.19.0 || >=22.12.0} + '@nuxt/vite-builder@4.4.8': + resolution: {integrity: sha512-54M/k6qVY85Qeoe1m/lPZ0SANGJEbI50r5uYgh3XT942ENve3K5Nk6TMYp8i5wGGC4TWvPea+1mlCrp8rjsXag==} + engines: {node: ^22.12.0 || ^24.11.0 || >=26.0.0} peerDependencies: '@babel/plugin-proposal-decorators': ^7.25.0 '@babel/plugin-syntax-jsx': ^7.25.0 - nuxt: 4.4.2 + nuxt: 4.4.8 rolldown: ^1.0.0-beta.38 rollup-plugin-visualizer: ^6.0.0 || ^7.0.1 vue: ^3.3.4 @@ -1410,653 +1579,653 @@ packages: rollup-plugin-visualizer: optional: true - '@nuxtjs/color-mode@4.0.0': - resolution: {integrity: sha512-xyaVR/TPLdMuRa2VOgH6b75jvmFEsn9QKL6ISldaAw38ooFJfWY1ts2F3ye43wcT/goCbcuvPuskF2f8yUZhlw==} + '@nuxtjs/color-mode@4.0.1': + resolution: {integrity: sha512-eiA7hWXi5zNHaYKyJFCGF6i0wFZtuvR7KDXZ6jiSvwxjCpRFwphrw0MOSmNfArTSSsT1wpW+/2H92cejeVfUlg==} - '@nuxtjs/i18n@10.2.4': - resolution: {integrity: sha512-T5nN7hT/tbExant+CeXtKXs9GbjWsEWnymCHJyU3Ujxfcw1WQsZZP6tyEtFRhkwjBwy8m4mj7GtU2qUCggUkkg==} + '@nuxtjs/i18n@10.4.0': + resolution: {integrity: sha512-GK/3YA/CQ2eZTYopHyxYfXYi2svZALvg01VFmUNJt2l3IMk/m+dDRtI+RQtafz0be0Pq+NSgoBb/oZNcfu0CUg==} engines: {node: '>=20.11.1'} '@nuxtjs/tailwindcss@6.14.0': resolution: {integrity: sha512-30RyDK++LrUVRgc2A85MktGWIZoRQgeQKjE4CjjD64OXNozyl+4ScHnnYgqVToMM6Ch2ZG2W4wV2J0EN6F0zkQ==} - '@oxc-minify/binding-android-arm-eabi@0.117.0': - resolution: {integrity: sha512-5Hf2KsGRjxp3HnPU/mse7cQJa5tWfMFUPZQcgSMVsv2JZnGFFOIDzA0Oja2KDD+VPJqMpEJKc2dCHAGZgJxsGg==} + '@oxc-minify/binding-android-arm-eabi@0.133.0': + resolution: {integrity: sha512-D8M1+nqwLaACHZsld/t6f+cE4N97XOu5iQ88f1ZaYH4ptFzFrXo5N7wUKACTI4xmNUD+6W0Y4Apk5U2r8HLdBQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-minify/binding-android-arm64@0.117.0': - resolution: {integrity: sha512-uuxGwxA5J4Sap+gz4nxyM/rer6q2A4X1Oe8HpE0CZQyb5cSBULQ15btZiVG3xOBctI5O+c2dwR1aZAP4oGKcLw==} + '@oxc-minify/binding-android-arm64@0.133.0': + resolution: {integrity: sha512-dnQUJdpOEh/nZfQtvGGN61VcCCcPJ2aCm+ndl8GIA2lk2GpmIBgZ9h+phLVhgUFGt2es+2AQc0xvtK7RFNsViw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-minify/binding-darwin-arm64@0.117.0': - resolution: {integrity: sha512-lLBf75cxUSLydumToKtGTwbLqO/1urScblJ33Vx0uF38M2ZbL2x51AybBV5vlfLjYNrxvQ8ov0Bj/OhsVO/biA==} + '@oxc-minify/binding-darwin-arm64@0.133.0': + resolution: {integrity: sha512-K6+aXlOlsCcibpTiTitQYNXWGGwea0fEKF/kGHCNB+MNqOLCkdC7wesycaABYcXcyr58DhDoJnVb8E4Hq95iVw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-minify/binding-darwin-x64@0.117.0': - resolution: {integrity: sha512-wBWwP1voLZMuN4hpe1HRtkPBd4/o/1qan5XssmmI/hewBvGHEHkyvVLS0zu+cKqXDxYzYvb/p+EqU+xSXhEl4A==} + '@oxc-minify/binding-darwin-x64@0.133.0': + resolution: {integrity: sha512-BFEXHxYNwThyaO63p1VE5MOOXNGkHsHfkmajOCKXH40TfllTHQenXhpJ9mHDoF7EhaQjArpPjlDY88BuPjhurw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-minify/binding-freebsd-x64@0.117.0': - resolution: {integrity: sha512-pYSacHw698oH2vb70iP1cHk6x0zhvAuOvdskvNtEqvfziu8MSjKXa699vA9Cx72+DH5rwVuj1I3f+7no2fWglA==} + '@oxc-minify/binding-freebsd-x64@0.133.0': + resolution: {integrity: sha512-oT5dbcXnS/cbpdXCpudAeVg/fqH1XnKhLUE/vkuRTuocjOd/GA2MoNMMhLWUvqNXO0xJnYmo2ISmDxShkItfOQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-minify/binding-linux-arm-gnueabihf@0.117.0': - resolution: {integrity: sha512-Ugm4Qj7F2+bccjhHCjjnSNHBDPyvjPXWrntID4WJpSrPqt+Az/o0EGdty9sWOjQXRZiTVpa80uqCWZQUn94yTA==} + '@oxc-minify/binding-linux-arm-gnueabihf@0.133.0': + resolution: {integrity: sha512-tJ3B+b7DOuTsIMXSmu5xHHCakrBqqcrp4COYd/lelOdDvkbFoDRGnwH91POUOSUEOI/WLzIMkDqAH2SZ3N2jhQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-minify/binding-linux-arm-musleabihf@0.117.0': - resolution: {integrity: sha512-qrY6ZviO9wVRI/jl4nRZO4B9os8jaJQemMeWIyFInZNk3lhqihId8iBqMKibJnRaf+JRxLM9j68atXkFRhOHrg==} + '@oxc-minify/binding-linux-arm-musleabihf@0.133.0': + resolution: {integrity: sha512-XMUHfdilk1KTtOM2vA1bwDso07/wkLm/GgDOO9z/ioxrZoQyjXnJRW665VXa08z2BqEgwHRc1zH9p7s6sKPQbg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-minify/binding-linux-arm64-gnu@0.117.0': - resolution: {integrity: sha512-2VLJHKEFBRhCihT/8uesuDPhXpbWu1OlHCxqQ7pdFVqKik1Maj5E9oSDcYzxqfaCRStvTHkmLVWJBK5CVcIadg==} + '@oxc-minify/binding-linux-arm64-gnu@0.133.0': + resolution: {integrity: sha512-UEff2jopbwJ4SndmxK06uqXrOpwWiJERJPdgDTBywwXP9QgW0p1YkQnBNt4+jK0I/hdLpbbyaCLLuUPKbaU70w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-minify/binding-linux-arm64-musl@0.117.0': - resolution: {integrity: sha512-C3zapJconWpl2Y7LR3GkRkH6jxpuV2iVUfkFcHT5Ffn4Zu7l88mZa2dhcfdULZDybN1Phka/P34YUzuskUUrXw==} + '@oxc-minify/binding-linux-arm64-musl@0.133.0': + resolution: {integrity: sha512-yqskeIapQvx7Tu/OLsepLPcGsHGzfYy9PX6gIbhaOHfF+LA2zHBKnKb587FGx+lQjHLQR0llfmoSuXQ6q2EN+A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-minify/binding-linux-ppc64-gnu@0.117.0': - resolution: {integrity: sha512-2T/Bm+3/qTfuNS4gKSzL8qbiYk+ErHW2122CtDx+ilZAzvWcJ8IbqdZIbEWOlwwe03lESTxPwTBLFqVgQU2OeQ==} + '@oxc-minify/binding-linux-ppc64-gnu@0.133.0': + resolution: {integrity: sha512-r7PnUNxRB9D/gQjCVeasoieJVUF48n43rvk/jYbGAw9sRfYGoEo/rOs0GyTZU9ttss8HzjBaerAbADbAL8K8vw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-minify/binding-linux-riscv64-gnu@0.117.0': - resolution: {integrity: sha512-MKLjpldYkeoB4T+yAi4aIAb0waifxUjLcKkCUDmYAY3RqBJTvWK34KtfaKZL0IBMIXfD92CbKkcxQirDUS9Xcg==} + '@oxc-minify/binding-linux-riscv64-gnu@0.133.0': + resolution: {integrity: sha512-omXWC8I9lAMMjQIeadfItP5H4VDAiuU2BiVCtHMH3ktTbFq04sxscZhK4NFUUuw3fApDdXmfd7LW18q0JBHarg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-minify/binding-linux-riscv64-musl@0.117.0': - resolution: {integrity: sha512-UFVcbPvKUStry6JffriobBp8BHtjmLLPl4bCY+JMxIn/Q3pykCpZzRwFTcDurG/kY8tm+uSNfKKdRNa5Nh9A7g==} + '@oxc-minify/binding-linux-riscv64-musl@0.133.0': + resolution: {integrity: sha512-LtFA3Hi8LVD/zuiPLKy9Aiz7N1IOj8rRhdXiW38GKQ9mAhj+Ko6IHGcTk2A7yNDA1DZBl7r+Qd4PEGWgVelPPw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-minify/binding-linux-s390x-gnu@0.117.0': - resolution: {integrity: sha512-B9GyPQ1NKbvpETVAMyJMfRlD3c6UJ7kiuFUAlx9LTYiQL+YIyT6vpuRlq1zgsXxavZluVrfeJv6x0owV4KDx4Q==} + '@oxc-minify/binding-linux-s390x-gnu@0.133.0': + resolution: {integrity: sha512-rFsPDsT1j3beSInbrFukAAlTg101PcqdVMXDioR9AgJ1180tZ8s8D+pNDpQTRmPd3956mnpAE+Cs77Xoo/QZAQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-minify/binding-linux-x64-gnu@0.117.0': - resolution: {integrity: sha512-fXfhtr+WWBGNy4M5GjAF5vu/lpulR4Me34FjTyaK9nDrTZs7LM595UDsP1wliksqp4hD/KdoqHGmbCrC+6d4vA==} + '@oxc-minify/binding-linux-x64-gnu@0.133.0': + resolution: {integrity: sha512-xlrtAmDWZI8BEmsaXMYfblWuLIY5UnnRkit1VLkmVDb5ceZRZf4oEXK1QeYf5Z33dT0WK1Ek++P+TL/ZMCpyGQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-minify/binding-linux-x64-musl@0.117.0': - resolution: {integrity: sha512-jFBgGbx1oLadb83ntJmy1dWlAHSQanXTS21G4PgkxyONmxZdZ/UMKr7KsADzMuoPsd2YhJHxzRpwJd9U+4BFBw==} + '@oxc-minify/binding-linux-x64-musl@0.133.0': + resolution: {integrity: sha512-kd36CDkTkZDMNfVceNTSfpWnitE1+GjZmzJCeq8yaxsgvs/MXg8aauI2RgFjElYZIHSMyZku4pQ7Jtl3ZEYI6w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxc-minify/binding-openharmony-arm64@0.117.0': - resolution: {integrity: sha512-nxPd9vx1vYz8IlIMdl9HFdOK/ood1H5hzbSFsyO8JU55tkcJoBL8TLCbuFf9pHpOy27l2gcPyV6z3p4eAcTH5Q==} + '@oxc-minify/binding-openharmony-arm64@0.133.0': + resolution: {integrity: sha512-pI38dJBqfkNbFoL/GEarAzGDjKGVCZTdg0a8NKh1PP9GqWleXT6HLtXE4CZ+54e+2u68qVYVBwhbWAiRfwlUZA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-minify/binding-wasm32-wasi@0.117.0': - resolution: {integrity: sha512-pSvjJ6cCCfEXSteWSiVfZhdRzvpmS3tLhlXrXTYiuTDFrkRCobRP39SRwAzK23rE9i/m2JAaES2xPEW6+xu85g==} - engines: {node: '>=14.0.0'} + '@oxc-minify/binding-wasm32-wasi@0.133.0': + resolution: {integrity: sha512-AkLr+d+LLY4/55J/TrE0srNBUpZPzyU+cygdse7yZ9AhCndryNqe2y6e8naVK0TV7n8lxBd2OGGJAkho6blAkw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@oxc-minify/binding-win32-arm64-msvc@0.117.0': - resolution: {integrity: sha512-9NoT9baFrWPdJRIZVQ1jzPZW9TjPT2sbzQyDdoK7uD1V8JXCe1L2y7sp9k2ldZZheaIcmtNwHc7jyD7kYz/0XQ==} + '@oxc-minify/binding-win32-arm64-msvc@0.133.0': + resolution: {integrity: sha512-V92v7397t2073g+mSfaLHnPeoz6hA/1U4JNLeUBP87eWGZgVxDZ2qz3t3wFyYqXGJ/0VoEwdP8yrHLQQ7QzAOQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-minify/binding-win32-ia32-msvc@0.117.0': - resolution: {integrity: sha512-E51LTjkRei5u2dpFiYSObuh+e43xg45qlmilSTd0XDGFdYJCOv62Q0MEn61TR+efQYPNleYwWdTS9t+tp9p/4w==} + '@oxc-minify/binding-win32-ia32-msvc@0.133.0': + resolution: {integrity: sha512-2DP5RbG/SSaRVtmuwgTH6Ati4+uuOJjoI88dQnC5hD0zCC90EVDXZSXyJQ5i/OxLE1UAy58Wo2DJot/OrUspzA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-minify/binding-win32-x64-msvc@0.117.0': - resolution: {integrity: sha512-I8vniPOxWQdxfIbXNvQLaJ1n8SrnqES6wuiAX10CU72sKsizkds9kDaJ1KzWvDy39RKhTBmD1cJsU2uxPFgizQ==} + '@oxc-minify/binding-win32-x64-msvc@0.133.0': + resolution: {integrity: sha512-PJ75c6PlBx87tau0W35J43eGCv4wrDmdZ+4ddTZAnGtZqEeCVsLdmDPOEMe2DepogqlSVUF2kGBWtnFUJ5c7Rw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxc-parser/binding-android-arm-eabi@0.112.0': - resolution: {integrity: sha512-retxBzJ39Da7Lh/eZTn9+HJgTeDUxZIpuI0urOsmcFsBKXAth3lc1jIvwseQ9qbAI/VrsoFOXiGIzgclARbAHg==} + '@oxc-parser/binding-android-arm-eabi@0.128.0': + resolution: {integrity: sha512-aca6ZvzmCBUGOANQRiRQRZuRKYI3ENhcit6GisnknOOmcezfQc7xJ4dxlPU7MV7mOvrC7RNR1u3LAD7xyaiCxA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-parser/binding-android-arm-eabi@0.117.0': - resolution: {integrity: sha512-XarGPJpaobgKjfm7xRfCGWWszuPbm/OeP91NdMhxtcLZ/qLTmWF0P0z0gqmr0Uysi1F1v1BNtcST11THMrcEOw==} + '@oxc-parser/binding-android-arm-eabi@0.133.0': + resolution: {integrity: sha512-l/44caGse+VpnY9gx0yvvc5QnnG3yG1FO3KZgYvNL1GZrfK86zIwAOgGEVlxDyRymzrU/KHiblPFpevKOmJmUA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-parser/binding-android-arm64@0.112.0': - resolution: {integrity: sha512-pRkbBRbuIIsufUWpOJ+JHWfJFNupkidy4sbjfcm37e6xwYrn9LSKMLubPHvNaL1Zf92ZRhGiwaYkEcmaFg2VcA==} + '@oxc-parser/binding-android-arm64@0.128.0': + resolution: {integrity: sha512-BbeDmuohoJ7Rz/it5wnkj69i/OsCPS3Z51nLEzwO/Y6YshtC4JU+15oNwhY8v4LRKRYclRc7ggOikwrsJ/eOEQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-parser/binding-android-arm64@0.117.0': - resolution: {integrity: sha512-EPTs2EBijGmyhPso4rXAL0NSpECXER9IaVKFZEv83YcA6h4uhKW47kmYt+OZcSp130zhHx+lTWILDQ/LDkCRNA==} + '@oxc-parser/binding-android-arm64@0.133.0': + resolution: {integrity: sha512-KUHmPMziLBp4u+zbrLdB7iWS7KshuZe+RAp7ELnY9SI9nNXBZ+dp8fiBqWOxhXqn+FQg3a4UcQhwmsJOKV8Jjg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-parser/binding-darwin-arm64@0.112.0': - resolution: {integrity: sha512-fh6/KQL/cbH5DukT3VkdCqnULLuvVnszVKySD5IgSE0WZb32YZo/cPsPdEv052kk6w3N4agu+NTiMnZjcvhUIg==} + '@oxc-parser/binding-darwin-arm64@0.128.0': + resolution: {integrity: sha512-tRUHPt80417QmvNpoSslJT1VY8NUbWdrWR+L14Zn+RbOTcaqB8E6PYE/ZGN8jjWBzqporiA/H4MfO50ew/NCNA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-parser/binding-darwin-arm64@0.117.0': - resolution: {integrity: sha512-3bAEpyih6r/Kb+Xzn1em1qBMClOS7NsVWgF86k95jpysR5ix/HlKFKSy7cax6PcS96HeHR4kjlME20n/XK1zNg==} + '@oxc-parser/binding-darwin-arm64@0.133.0': + resolution: {integrity: sha512-q8dWmnU/8ea2tga9w2f1PinQ5rcMPDUGkF64T189b65YMjUomET4oy5oRldOr4AwOQkneOG/Zttnz1Dvrc62wg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-parser/binding-darwin-x64@0.112.0': - resolution: {integrity: sha512-vUBOOY1E30vlu/DoTGDoT1UbLlwu5Yv9tqeBabAwRzwNDz8Skho16VKhsBDUiyqddtpsR3//v6vNk38w4c+6IA==} + '@oxc-parser/binding-darwin-x64@0.128.0': + resolution: {integrity: sha512-rWI2Hb1Nt3U/vKsjyNvZzDC8i/l144U20DKjhzaTmwIhIiSRGeroPWWiImwypmKLqrw8GuIixbWJkpGWLbkzrQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-parser/binding-darwin-x64@0.117.0': - resolution: {integrity: sha512-W7S99zFwVZhSbCxvjfZkioStFU249DBc4TJw/kK6kfKwx2Zew+jvizX5Y3ZPkAh7fBVUSNOdSeOqLBHLiP50tw==} + '@oxc-parser/binding-darwin-x64@0.133.0': + resolution: {integrity: sha512-cOKeIELIB2bJnCKwqx4Rdj+1Lss/U6uCbLxRySZrhyOOQa1flKhwZFjEHRHxk8fU1NKmhK5OnTdPQ4CpjuFuVw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-parser/binding-freebsd-x64@0.112.0': - resolution: {integrity: sha512-hnEtO/9AVnYWzrgnp6L+oPs/6UqlFeteUL6n7magkd2tttgmx1C01hyNNh6nTpZfLzEVJSNJ0S+4NTsK2q2CxA==} + '@oxc-parser/binding-freebsd-x64@0.128.0': + resolution: {integrity: sha512-hhpdVMaNCLgQxjgNPeeFzSeJMmZPc5lKfv0NGSI3egZq9EdnEGqeC8JsYsQjK7PoQgbvZ17xlj0SO5ziH5Obkg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-parser/binding-freebsd-x64@0.117.0': - resolution: {integrity: sha512-xH76lqSdjCSY0KUMPwLXlvQ3YEm3FFVEQmgiOCGNf+stZ6E4Mo3nC102Bo8yKd7aW0foIPAFLYsHgj7vVI/axw==} + '@oxc-parser/binding-freebsd-x64@0.133.0': + resolution: {integrity: sha512-OpaSv4pW3KgFrMYQxTaS0aOE4T1DQF3qZE/4B6uqqv1KgPWWd4UQhJALi8PJPX1RRV5K7ThKXRfF7qGg2+3l1A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-parser/binding-linux-arm-gnueabihf@0.112.0': - resolution: {integrity: sha512-WxJrUz3pcIc2hp4lvJbvt/sTL33oX9NPvkD3vDDybE6tc0V++rS+hNOJxwXdD2FDIFPkHs/IEn5asEZFVH+VKw==} + '@oxc-parser/binding-linux-arm-gnueabihf@0.128.0': + resolution: {integrity: sha512-093zNw0zZ/e/obML+rhlSdmnzR0mVZluPcAkxunEc5E3F0yBVsFn24Y1ILfsEte11Ud041qn/gp2OJ1jxNqUng==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm-gnueabihf@0.117.0': - resolution: {integrity: sha512-9Hdm1imzrn4RdMYnQKKcy+7p7QsSPIrgVIZmpGSJT02nYDuBWLdG1pdYMPFoEo46yiXry3tS3RoHIpNbT1IiyQ==} + '@oxc-parser/binding-linux-arm-gnueabihf@0.133.0': + resolution: {integrity: sha512-JGK1wlGrGwxBIlVSF7KWTX1/ru6BEtf28fRROztDRkLfiW+Kxa4onnriezMIiogfn9hVw2KzYcKiLjkLR2ns8A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm-musleabihf@0.112.0': - resolution: {integrity: sha512-jj8A8WWySaJQqM9XKAIG8U2Q3qxhFQKrXPWv98d1oC35at+L1h+C+V4M3l8BAKhpHKCu3dYlloaAbHd5q1Hw6A==} + '@oxc-parser/binding-linux-arm-musleabihf@0.128.0': + resolution: {integrity: sha512-fq7DmKmfC+dvD97IXrgbph6Jzwe0EDu+PYMofmzZ6fv5X1k9vtaqLpDGMuICO9MmUnyKAQmVl+wIv2RNy4Dz8g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm-musleabihf@0.117.0': - resolution: {integrity: sha512-Itszer/VCeYhYVJLcuKnHktlY8QyGnVxapltP68S1XRGlV6IsM9HQAElJRMwQhT6/GkMjOhANmkv2Qu/9v44lw==} + '@oxc-parser/binding-linux-arm-musleabihf@0.133.0': + resolution: {integrity: sha512-yuZO533Ftonxn/iyoqQzURzLQHMspvsIyfiCSNi1t/ER4eIQaR0SsmUOUm5b/lmSig7IWIUa5/BrbEkAPwcilQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm64-gnu@0.112.0': - resolution: {integrity: sha512-G2F8H6FcAExVK5vvhpSh61tqWx5QoaXXUnSsj5FyuDiFT/K7AMMVSQVqnZREDc+YxhrjB0vnKjCcuobXK63kIw==} + '@oxc-parser/binding-linux-arm64-gnu@0.128.0': + resolution: {integrity: sha512-Xvm48jJah8TlIrURIjNOP/gNiGe6aKvCB+r06VliflFo8Kq7VOLE8PxtgShJzZIqubrgdMdYfvuPPozn7F6MbQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-arm64-gnu@0.117.0': - resolution: {integrity: sha512-jBxD7DtlHQ36ivjjZdH0noQJgWNouenzpLmXNKnYaCsBfo3jY95m5iyjYQEiWkvkhJ3TJUAs7tQ1/kEpY7x/Kg==} + '@oxc-parser/binding-linux-arm64-gnu@0.133.0': + resolution: {integrity: sha512-hvpbqT5pN2rR+3+xtWeizwfR/aZ0vGceg6TqYMl+ToxMpk9/tmnX7kSvQnfEUkoua8mhogzvIKsAkn0wxgblBA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-arm64-musl@0.112.0': - resolution: {integrity: sha512-3R0iqjM3xYOZCnwgcxOQXH7hrz64/USDIuLbNTM1kZqQzRqaR4w7SwoWKU934zABo8d0op2oSwOp+CV3hZnM7A==} + '@oxc-parser/binding-linux-arm64-musl@0.128.0': + resolution: {integrity: sha512-M7iwBGmYJTx+pKOYFjI0buop4gJvlmcVzFGaXPt21DKpQkbQZG1f63Yg7LloIYT/t9yLxCw0Lhfx/RFlAlMSjA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-arm64-musl@0.117.0': - resolution: {integrity: sha512-QagKTDF4lrz8bCXbUi39Uq5xs7C7itAseKm51f33U+Dyar9eJY/zGKqfME9mKLOiahX7Fc1J3xMWVS0AdDXLPg==} + '@oxc-parser/binding-linux-arm64-musl@0.133.0': + resolution: {integrity: sha512-wJQGamIosQBoJHW9+S5XxrtKRo3eyJxsnS1XCPrqN0LHi8uw1pTqqTfn3t/NVuvbBg7Pumn4ez9Eidgcn0xbEg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-ppc64-gnu@0.112.0': - resolution: {integrity: sha512-lAQf8PQxfgy7h0bmcfSVE3hg3qMueshPYULFsCrHM+8KefGZ9W+ZMvRyU33gLrB4w1O3Fz1orR0hmKMCRxXNrQ==} + '@oxc-parser/binding-linux-ppc64-gnu@0.128.0': + resolution: {integrity: sha512-21LGNIZb1Pcfk5/EGsqabrxv4yqQOWis1407JJrClS7XpFCrbvr74YAB1V+m54cYbwvO6UWwQqS4WecxiyfCRg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-ppc64-gnu@0.117.0': - resolution: {integrity: sha512-RPddpcE/0xxWaommWy0c5i/JdrXcXAkxBS2GOrAUh5LKmyCh03hpJedOAWszG4ADsKQwoUQQ1/tZVGRhZIWtKA==} + '@oxc-parser/binding-linux-ppc64-gnu@0.133.0': + resolution: {integrity: sha512-Koaz32/O5+abIfrNGdyndgRvdOZ9jEf5/z3Ep9h3h2QWpdDiUQpVwgH0OcMXCs+l9aXxPLtkupqyVig9W6FDKw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-gnu@0.112.0': - resolution: {integrity: sha512-2QlvQBUhHuAE3ezD4X3CAEKMXdfgInggQ5Bj/7gb5NcYP3GyfLTj7c+mMu+BRwfC9B3AXBNyqHWbqEuuUvZyRQ==} + '@oxc-parser/binding-linux-riscv64-gnu@0.128.0': + resolution: {integrity: sha512-gyHjOTFpg9bTTYjxPmQirvufb89+VdZwVfcMtAUyPr6F5H8ZswvCQshK4qOW+Q+2Xyb33hduRgY/eFHJQjU/vQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-gnu@0.117.0': - resolution: {integrity: sha512-ur/WVZF9FSOiZGxyP+nfxZzuv6r5OJDYoVxJnUR7fM/hhXLh4V/be6rjbzm9KLCDBRwYCEKJtt+XXNccwd06IA==} + '@oxc-parser/binding-linux-riscv64-gnu@0.133.0': + resolution: {integrity: sha512-R4vOjWzxhnNWHnVLeiB6jNuIifdy9vcMXZGPc7StXcxBovI+U2zg1QhZ9o8OjV80oGivs1lX5NfPLzk4IPqlRA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-musl@0.112.0': - resolution: {integrity: sha512-v06iu0osHszgqJ1dLQRb6leWFU1sjG/UQk4MoVBtE6ZPewgfTkby6G9II1SpEAf2onnAuQceVYxQH9iuU3NJqw==} + '@oxc-parser/binding-linux-riscv64-musl@0.128.0': + resolution: {integrity: sha512-X6Q2oKUrP5GyDd2xniuEBLk6aFQCZ97W2+aVXGgJXdjx5t4/oFuA9ri0wLOUrBIX+qdSuK581snMBio4z910eA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-riscv64-musl@0.117.0': - resolution: {integrity: sha512-ujGcAx8xAMvhy7X5sBFi3GXML1EtyORuJZ5z2T6UV3U416WgDX/4OCi3GnoteeenvxIf6JgP45B+YTHpt71vpA==} + '@oxc-parser/binding-linux-riscv64-musl@0.133.0': + resolution: {integrity: sha512-iwgBNUTHiMdxARLYuM0SBlnYeb19iw1Ea5M+4ERZupCsBMLArti6FyZ6UfFjJxIiTDr2oW2DGQFxlQVQ/dW9rA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-s390x-gnu@0.112.0': - resolution: {integrity: sha512-+5HhNHtxsdcd7+ljXFnn9FOoCNXJX3UPgIfIE6vdwS1HqdGNH6eAcVobuqGOp54l8pvcxDQA6F4cPswCgLrQfQ==} + '@oxc-parser/binding-linux-s390x-gnu@0.128.0': + resolution: {integrity: sha512-BdzTmqxfxoYkpgokoLaSnOX6T+R3/goL42klre2tnG+kHbG2TXS0VN+P5BPofH1axdKOHy5ei4ENZrjmCOt2lA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-s390x-gnu@0.117.0': - resolution: {integrity: sha512-hbsfKjUwRjcMZZvvmpZSc+qS0bHcHRu8aV/I3Ikn9BzOA0ZAgUE7ctPtce5zCU7bM8dnTLi4sJ1Pi9YHdx6Urw==} + '@oxc-parser/binding-linux-s390x-gnu@0.133.0': + resolution: {integrity: sha512-ZwZNo8FZmB/gVfboQl+wXilBigGl+6nQQs+nITOeAP/HcAOjiHl6XZJL9F/KXNEspODQcbjAiyjUbeCJd9a0fA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-gnu@0.112.0': - resolution: {integrity: sha512-jKwO7ZLNkjxwg7FoCLw+fJszooL9yXRZsDN0AQ1AQUTWq1l8GH/2e44k68N3fcP19jl8O8jGpqLAZcQTYk6skA==} + '@oxc-parser/binding-linux-x64-gnu@0.128.0': + resolution: {integrity: sha512-OO1nW2Q7sSYYvJZpDHdvyFSdRaVcQqRijZSSmWVMqFxPYy8cEF45zJ9fcdIYuzIT3jYq6YRhEFm/VMWNWhE22Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-gnu@0.117.0': - resolution: {integrity: sha512-1QrTrf8rige7UPJrYuDKJLQOuJlgkt+nRSJLBMHWNm9TdivzP48HaK3f4q18EjNlglKtn03lgjMu4fryDm8X4A==} + '@oxc-parser/binding-linux-x64-gnu@0.133.0': + resolution: {integrity: sha512-govCvWx1dBlED3uu4qXctxpRcouu9I8Kn+DBktGCl760JtlGJzc9l/OmPJKlYWSbrRqKkMZehNeZ/4Wfma7uSA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-musl@0.112.0': - resolution: {integrity: sha512-TYqnuKV/p3eOc+N61E0961nA7DC+gaCeJ3+V2LcjJdTwFMdikqWL6uVk1jlrpUCBrozHDATVUKDZYH7r4FQYjQ==} + '@oxc-parser/binding-linux-x64-musl@0.128.0': + resolution: {integrity: sha512-4NehAe404MRdoZVS9DW8C5XbJwbXIc/KfVlYdpi5vE4081zc9Y0YzKVqyOYj/Puye7/Do+ohaONBFWlEHYl9hw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-x64-musl@0.117.0': - resolution: {integrity: sha512-gRvK6HPzF5ITRL68fqb2WYYs/hGviPIbkV84HWCgiJX+LkaOpp+HIHQl3zVZdyKHwopXToTbXbtx/oFjDjl8pg==} + '@oxc-parser/binding-linux-x64-musl@0.133.0': + resolution: {integrity: sha512-ssTlpXD5Mq9uCssDJPzlRWqBt4Y7Zzd9i+XZhWmK/9Y6KUIuAxVYTYiI8lxcGWi0+3/Cz4A8q9UrD4NK9Y2j7g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxc-parser/binding-openharmony-arm64@0.112.0': - resolution: {integrity: sha512-ZhrVmWFifVEFQX4XPwLoVFDHw9tAWH9p9vHsHFH+5uCKdfVR+jje4WxVo6YrokWCboGckoOzHq5KKMOcPZfkRg==} + '@oxc-parser/binding-openharmony-arm64@0.128.0': + resolution: {integrity: sha512-kVbqgW9xLL8bh8oc7aYOJilRKXE5G33+tE0jan+duo/9OriaFRpijcCwT2waWs2oqYROYq0GlE7/p3ywoshVeg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-parser/binding-openharmony-arm64@0.117.0': - resolution: {integrity: sha512-QPJvFbnnDZZY7xc+xpbIBWLThcGBakwaYA9vKV8b3+oS5MGfAZUoTFJcix5+Zg2Ri46sOfrUim6Y6jsKNcssAQ==} + '@oxc-parser/binding-openharmony-arm64@0.133.0': + resolution: {integrity: sha512-51aByfXhPtLEdWG4a2Ihdw6cPWV1ei1AarALpFdDP8MLWDLE2NuUMgbo3DERR2Kt8fT/ok1GUvBiLxVGke9uUQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-parser/binding-wasm32-wasi@0.112.0': - resolution: {integrity: sha512-Gr8X2PUU3hX1g3F5oLWIZB8DhzDmjr5TfOrmn5tlBOo9l8ojPGdKjnIBfObM7X15928vza8QRKW25RTR7jfivg==} - engines: {node: '>=14.0.0'} + '@oxc-parser/binding-wasm32-wasi@0.128.0': + resolution: {integrity: sha512-L38ojghJYHmgiz6fJd7jwLB/ESDBpB02NdFxh+smqVM6P2anCEvHn0jhaSrt5eVNR1Ak8+moOeftUlofeyvniA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@oxc-parser/binding-wasm32-wasi@0.117.0': - resolution: {integrity: sha512-+XRSNA0xt3pk/6CUHM7pykVe7M8SdifJk8LX1+fIp/zefvR3HBieZCbwG5un8gogNgh7srLycoh/cQA9uozv5g==} - engines: {node: '>=14.0.0'} + '@oxc-parser/binding-wasm32-wasi@0.133.0': + resolution: {integrity: sha512-2e16tkKp+wDO2GTAmXfxbBcCmGEaFPIJEIRBBmVKNVXSc8/fJsSIaBGyFTPHM9ST5GNWgJcYIt94rDTks+PLwA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@oxc-parser/binding-win32-arm64-msvc@0.112.0': - resolution: {integrity: sha512-t5CDLbU70Ea88bGRhvU/dLJTc/Wcrtf2Jp534E8P3cgjAvHDjdKsfDDqBZrhybJ8Jv9v9vW5ngE40EK51BluDA==} + '@oxc-parser/binding-win32-arm64-msvc@0.128.0': + resolution: {integrity: sha512-xgvO35GyHBtjlQ5AEpaYr7Rll1rvY7zqIhT6ty8E3ezBW2J1SFLjIDEvI/tcgDg6oaseDAqVcM+jU1HuCekgZw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-parser/binding-win32-arm64-msvc@0.117.0': - resolution: {integrity: sha512-GpxeGS+Vo030DsrXeRPc7OSJOQIyAHkM3mzwBcnQjg/79XnOIDDMXJ5X6/aNdkVt/+Pv35pqKzGA4TQau97x8w==} + '@oxc-parser/binding-win32-arm64-msvc@0.133.0': + resolution: {integrity: sha512-KPTNDKbxH1cglrqTyVeXHb4Pk4oksz8EcE1/v8zqU7N4UXbiHfA/IwtXZ2U77fnRAWBbgVkl/lZbL7o3hRdejg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-parser/binding-win32-ia32-msvc@0.112.0': - resolution: {integrity: sha512-rZH0JynCCwnhe2HfRoyNOl/Kfd9pudoWxgpC5OZhj7j77pMK0UOAa35hYDfrtSOUk2HLzrikV5dPUOY2DpSBSA==} + '@oxc-parser/binding-win32-ia32-msvc@0.128.0': + resolution: {integrity: sha512-OY+3eM2SN72prHKRB22mPz8o5A/7dJ+f5DFLBVvggyZhEaNDAH9IB+ElMjmOkOIwf5MDCUAowCK7pAncNxzpBA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-parser/binding-win32-ia32-msvc@0.117.0': - resolution: {integrity: sha512-tchWEYiso1+objTZirmlR+w3fcIel6PVBOJ8NuC2Jr30dxBOiKUfFLovJLANwHg1+TzeD6pVSLIIIEf2T5o5lQ==} + '@oxc-parser/binding-win32-ia32-msvc@0.133.0': + resolution: {integrity: sha512-Una1bNYv9zCavQrfnDR9wuZVB3itLjCEH4Oz7i6CwAJN/Xq9b+zbbcxmvdkKvvJt4Ngc/MBmIYlbLo3zS4TQ0A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-parser/binding-win32-x64-msvc@0.112.0': - resolution: {integrity: sha512-oGHluohzmVFAuQrkEnl1OXAxMz2aYmimxUqIgKXpBgbr7PvFv0doELB273sX+5V3fKeggohKg1A2Qq21W9Z9cQ==} + '@oxc-parser/binding-win32-x64-msvc@0.128.0': + resolution: {integrity: sha512-NE9ny+cPUCCObXa0IKLfj0tCdPd7pe/dz9ZpkxpUOymB3miNeMPybdlYYTBSGJUalMWeBM85/4JcCErCNTqOXw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxc-parser/binding-win32-x64-msvc@0.117.0': - resolution: {integrity: sha512-ysRJAjIbB4e5y+t9PZs7TwbgOV/GVT//s30AORLCT/pedYwpYzHq6ApXK7is9fvyfZtgT3anNir8+esurmyaDw==} + '@oxc-parser/binding-win32-x64-msvc@0.133.0': + resolution: {integrity: sha512-kjBhCiOGSYTwDJQuuZa7a94JbP8htWu7J0X1KwH74kV2K5eYf6eyJRYmkpCDvr0XEL8tMxYI4WU1VekblFCLgg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxc-project/types@0.112.0': - resolution: {integrity: sha512-m6RebKHIRsax2iCwVpYW2ErQwa4ywHJrE4sCK3/8JK8ZZAWOKXaRJFl/uP51gaVyyXlaS4+chU1nSCdzYf6QqQ==} + '@oxc-project/types@0.128.0': + resolution: {integrity: sha512-huv1Y/LzBJkBVHt3OlC7u0zHBW9qXf1FdD7sGmc1rXc2P1mTwHssYv7jyGx5KAACSCH+9B3Bhn6Z9luHRvf7pQ==} - '@oxc-project/types@0.117.0': - resolution: {integrity: sha512-C/kPXBphID44fXdsa2xSOCuzX8fKZiFxPsvucJ6Yfkr6CJlMA+kNLPNKyLoI+l9XlDsNxBrz6h7IIjKU8pB69w==} + '@oxc-project/types@0.133.0': + resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} - '@oxc-transform/binding-android-arm-eabi@0.112.0': - resolution: {integrity: sha512-r4LuBaPnOAi0eUOBNi880Fm2tO2omH7N1FRrL6+nyz/AjQ+QPPLtoyZJva0O+sKi1buyN/7IzM5p9m+5ANSDbg==} + '@oxc-transform/binding-android-arm-eabi@0.128.0': + resolution: {integrity: sha512-qVO4izEs88ZSo7KOK4P+O5nAXXJmkSadInvFjGkhVnm2R2Wr8trU/GLhjAK0S0u8Qv9bkXspNhgpECk+CTQ/ew==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-transform/binding-android-arm-eabi@0.117.0': - resolution: {integrity: sha512-17giX7h5VR9Eodru4OoSCFdgwLFIaUxeEn8JWe0vMZrAuRbT9NiDTy5dXdbGQBoO8aXPkbGS38FGlvbi31aujw==} + '@oxc-transform/binding-android-arm-eabi@0.133.0': + resolution: {integrity: sha512-2A79NBpyBKgHJ0FwgC8D1hzp3x2ujyvqq/kG+M76YyDMMkxLhX6A3vjnAnfEKycOoZxuKhwYu8BF9hKq67ykIA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-transform/binding-android-arm64@0.112.0': - resolution: {integrity: sha512-ve46vQcQrY8eGe8990VSlS9gkD+AogJqbtfOkeua+5sQGQTDgeIRRxOm7ktCo19uZc2bEBwXRJITgosd+NRVmQ==} + '@oxc-transform/binding-android-arm64@0.128.0': + resolution: {integrity: sha512-F3RXlbCzIgkpRWlz1PEguDZl5NzZRmbeHKTFTQWFnK6mIdw2EkWihPVv9+CIcO80c7+sF/YRGOBaji6hwUDhtQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-transform/binding-android-arm64@0.117.0': - resolution: {integrity: sha512-1LrDd1CPochtLx04pAafdah6QtOQQj0/Evttevi+0u8rCI5FKucIG7pqBHkIQi/y7pycFYIj+GebhET80maeUg==} + '@oxc-transform/binding-android-arm64@0.133.0': + resolution: {integrity: sha512-dynEph/hyoSgBzd2XbNlW37NK97nU6tZMs5jrhObUxSasBV/Gv9THZrWj9AlbWiMXR07WFYE82C9axjntYyBSw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-transform/binding-darwin-arm64@0.112.0': - resolution: {integrity: sha512-ddbmLU3Tr+i7MOynfwAXxUXud3SjJKlv7XNjaq08qiI8Av/QvhXVGc2bMhXkWQSMSBUeTDoiughKjK+Zsb6y/A==} + '@oxc-transform/binding-darwin-arm64@0.128.0': + resolution: {integrity: sha512-xj63gIzQ67LDYHCOWXSHgfx4LbPVz1ck0G3y0eR6mbgYk3CwwylbhWi/CaDC6BWsHwoLQryeYjHB5XBCR0EPMQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-transform/binding-darwin-arm64@0.117.0': - resolution: {integrity: sha512-K1Xo52xJOvFfHSkz2ax9X5Qsku23RCfTIPbHZWdUCAQ1TQooI+sFcewSubhVUJ4DVK12/tYT//XXboumin+FHA==} + '@oxc-transform/binding-darwin-arm64@0.133.0': + resolution: {integrity: sha512-4hGgKOG+dZSN3xjcgNWpcihekRG7/YbbAdjyz07yv0HjzA6kdqYAhGrn84374UPO2h6etYJwsCBoM9iJHHvJ8w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-transform/binding-darwin-x64@0.112.0': - resolution: {integrity: sha512-TKvmNw96jQZPqYb4pRrzLFDailNB3YS14KNn+x2hwRbqc6CqY96S9PYwyOpVpYdxfoRjYO9WgX9SoS+62a1DPA==} + '@oxc-transform/binding-darwin-x64@0.128.0': + resolution: {integrity: sha512-YQkvFqNqpwEt197RjREAOWeRANalPtCD+ayZlx4IjTQ6IOYZEP83B9/++gTQisHV3r8E7dU8UqJKeSS1cHlTQg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-transform/binding-darwin-x64@0.117.0': - resolution: {integrity: sha512-ftFT/8Laolfq49mRRWLkIhd1AbJ0MI5bW3LwddvdoAg9zXwkx4qhzTYyBPRZhvXWftts+NjlHfHsXCOqI4tPtw==} + '@oxc-transform/binding-darwin-x64@0.133.0': + resolution: {integrity: sha512-7J11/9PFkznmKuANkCAjt3znV1BcDFXQSgDiBvDxXT3Wm6995/zxrJD5zmo+5XSgY4sm+2V8/ED6ZSD3mKOC5A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-transform/binding-freebsd-x64@0.112.0': - resolution: {integrity: sha512-YPMkSCDaelO8HHYRMYjm+Q+IfkfIbdtQzwPuasItYkq8UUkNeHNPheNh2JkvQa3c+io3E9ePOgHQ2yihpk7o/Q==} + '@oxc-transform/binding-freebsd-x64@0.128.0': + resolution: {integrity: sha512-Jvd3Ximb3x3o0+xRBB5lq63JlzxhJN787IsBjn0PEnmuocYQj+tJ5BB4n9xPIG27GXwg3ycckQPO/RsWeEcBPg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-transform/binding-freebsd-x64@0.117.0': - resolution: {integrity: sha512-QDRyw0atg9BMnwOwnJeW6REzWPLEjiWtsCc2Sj612F1hCdvP+n0L3o8sHinEWM+BiOkOYtUxHA69WjUslc3G+g==} + '@oxc-transform/binding-freebsd-x64@0.133.0': + resolution: {integrity: sha512-5EMAO0vzCpUfhn6aSjIUeJeRI2ztevHwSVr/M8sZ2VBYc79UuOfjjMCQ67LtUbgpvQtpBWkzeAHCP3L7JFYmlg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-transform/binding-linux-arm-gnueabihf@0.112.0': - resolution: {integrity: sha512-nA7kzQGNEpuTRknst/IJ3l8hqmDmEda3aun6jkXgp7gKxESjuHeaNH04mKISxvJ7fIacvP2g/wtTSnm4u5jL8Q==} + '@oxc-transform/binding-linux-arm-gnueabihf@0.128.0': + resolution: {integrity: sha512-TaRKWeGnAJNIdCa5+m0I8/SksBgkLX94iH40qy3chvLuaIOGAmOViUStYx8geXBzO9P99V7En8nHXLoqCONBRQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-transform/binding-linux-arm-gnueabihf@0.117.0': - resolution: {integrity: sha512-UvpvOjyQVgiIJahIpMT0qAsLJT8O1ibHTBgXGOsZkQgw1xmjARPQ07dpRcucPPn6cqCF3wrxfbqtr2vFHaMkdA==} + '@oxc-transform/binding-linux-arm-gnueabihf@0.133.0': + resolution: {integrity: sha512-z6XT8tmo9sPmCIYaFIxDelBU4wXLwwWMX2VNCMIY6bkQp5r+kRtVXYS3yLbJHMKEhRKvw/g+Z7fO9aadsGGEAw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-transform/binding-linux-arm-musleabihf@0.112.0': - resolution: {integrity: sha512-w8GuLmckKlGc3YujaZKhtbFxziCcosvM2l9GnQjCb/yENWLGDiyQOy0BTAgPGdJwpYTiOeJblEXSuXYvlE1Ong==} + '@oxc-transform/binding-linux-arm-musleabihf@0.128.0': + resolution: {integrity: sha512-7TMrtA5/3SCvS+yMPrGnri5T4ZhIoCbjwKWV6Kn8d3v+vx7MpEmNkfe+CdF3rb5LlnuxeDMPwr1E2ntya0b8HQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-transform/binding-linux-arm-musleabihf@0.117.0': - resolution: {integrity: sha512-cIhztGFjKk8ngP+/7EPkEhzWMGr2neezxgWirSn/f/MirjH234oHHGJ2diKIbGQEsy0aOuJMTkL9NLfzfmH51A==} + '@oxc-transform/binding-linux-arm-musleabihf@0.133.0': + resolution: {integrity: sha512-GQDpEV2VhHG8hT5BviDv+emi9oHYhfv+JJJWROYp+eGgWjiQMp4QZVb6Bu3kwVMzkwy0r200ToA1KThYTq53ug==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-transform/binding-linux-arm64-gnu@0.112.0': - resolution: {integrity: sha512-9LwwGnJ8+WT0rXcrI8M0RJtDNt91eMqcDPPEvJxhRFHIMcHTy5D5xT+fOl3Us0yMqKo3HUWkbfUYqAp4GoZ3Jw==} + '@oxc-transform/binding-linux-arm64-gnu@0.128.0': + resolution: {integrity: sha512-lMQEa1jLBNm1N+5uvyj9zX9urVY4xKkLnhO8/4CtSGdXX+mExqsVawyQPAZqbtq1fLQ0yt1QYJ9YuM0+fiSJTQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-arm64-gnu@0.117.0': - resolution: {integrity: sha512-mXbDfvDN0RZVg7v4LohNzU0kK3fMAZgkUKTkpFVgxEvzibEG5VpSznkypUwHI4a8U8pz+K6mGaLetX3Xt+CvvA==} + '@oxc-transform/binding-linux-arm64-gnu@0.133.0': + resolution: {integrity: sha512-VstR+NEQAJb80ysWk2vPjEvg0JzwEjKn2hDbC/joa5zGXkCnVVCWgAGG8c6o23S981a7XRpCMcClBgeD1q9H2A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-arm64-musl@0.112.0': - resolution: {integrity: sha512-Lg6VOuSd3oXv7J0eGywgqh/086h+qQzIBOD+47pYKMTTJcbDe+f3h/RgGoMKJE5HhiwT5sH1aGEJfIfaYUiVSw==} + '@oxc-transform/binding-linux-arm64-musl@0.128.0': + resolution: {integrity: sha512-dPSjyd0gQ9dE3mpdJi0BHNJaqQz4V7mVW6Fbs6jRSiGnrxwGfXdMJFInXoJ49B3k5Zhfa9Is9Ixp6St7c6ouCA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-transform/binding-linux-arm64-musl@0.117.0': - resolution: {integrity: sha512-ykxpPQp0eAcSmhy0Y3qKvdanHY4d8THPonDfmCoktUXb6r0X6qnjpJB3V+taN1wevW55bOEZd97kxtjTKjqhmg==} + '@oxc-transform/binding-linux-arm64-musl@0.133.0': + resolution: {integrity: sha512-Ec7xJdDrnukgiz20E3iDNzAIgx1XXn8cVVsNNUpgEIAvNlXZaocqlQT8Zalk0Lv3fbkxcJ+9BuWB0ndBRHQtzg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-transform/binding-linux-ppc64-gnu@0.112.0': - resolution: {integrity: sha512-PXzmj82o1moA4IGphYImTRgc2youTi4VRfyFX3CHwLjxPcQ5JtcsgbDt4QUdOzXZ+zC07s5jf2ZzhRapEOlj2w==} + '@oxc-transform/binding-linux-ppc64-gnu@0.128.0': + resolution: {integrity: sha512-YNa9XAotPKvAXFJrHC7kBsHMVg0HOB4vRiKuYUjzFsfLkxTbuztKHTKG/gW5kjp7dBw+TNFofTaVCVZgOnHXPQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-ppc64-gnu@0.117.0': - resolution: {integrity: sha512-Rvspti4Kr7eq6zSrURK5WjscfWQPvmy/KjJZV45neRKW8RLonE3r9+NgrwSLGoHvQ3F24fbqlkplox1RtlhH5A==} + '@oxc-transform/binding-linux-ppc64-gnu@0.133.0': + resolution: {integrity: sha512-6YX38grimcigz20eYpyz6e4c9rDKzwK3i+tcDpgwYj0bWreaAOwrABmSmKplPJOorkDVlbT69wPCN+d11irBQw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-riscv64-gnu@0.112.0': - resolution: {integrity: sha512-vhJsMsVH/6xwa3bt1LGts33FXUkGjaEGDwsRyp4lIfOjSfQVWMtCmWMFNaA0dW9FVWdD2Gt2fSFBSZ+azDxlpg==} + '@oxc-transform/binding-linux-riscv64-gnu@0.128.0': + resolution: {integrity: sha512-jjSiG9H8ya/U3igW5DdIBFIDwhffF7Vbc7th2tcHV73eg0DQz75n36a9RmQ1/0aS9vknUuNtY6SODr8/gmuzsQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-riscv64-gnu@0.117.0': - resolution: {integrity: sha512-Dr2ZW9ZZ4l1eQ5JUEUY3smBh4JFPCPuybWaDZTLn3ADZjyd8ZtNXEjeMT8rQbbhbgSL9hEgbwaqraole3FNThQ==} + '@oxc-transform/binding-linux-riscv64-gnu@0.133.0': + resolution: {integrity: sha512-WxMIzItRJR66lgaAyyqj0FFwLMpcuCV9mTFcUMQpIz8+Hey1Enk8xuv+7QpSsqCR5zRlwNr092dsFkz5cbvtrw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-riscv64-musl@0.112.0': - resolution: {integrity: sha512-cXWFb7z+2IjFUEcXtRwluq9oEG5qnyFCjiu3SWrgYNcWwPdHusv3I/7K5/CTbbi4StoZ5txbi7/iSfDHNyWuRw==} + '@oxc-transform/binding-linux-riscv64-musl@0.128.0': + resolution: {integrity: sha512-FVUr/XNT7BfQA4XVMel/HTCJi5mQyEitslgX42ztYPnCFMRFG1sQQKgnlLJdl7qifuyxpvKLR1f7h7HEuwWw1Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-transform/binding-linux-riscv64-musl@0.117.0': - resolution: {integrity: sha512-oD1Bnes1bIC3LVBSrWEoSUBj6fvatESPwAVWfJVGVQlqWuOs/ZBn1e4Nmbipo3KGPHK7DJY75r/j7CQCxhrOFQ==} + '@oxc-transform/binding-linux-riscv64-musl@0.133.0': + resolution: {integrity: sha512-+x6dnO87986rjVNjcF0tg8wVS0e/SH8nzLa/X0Wsh7jtEniN7buvR8iqZm8pnsfaZ8DH5F4GCSZpoPRrd9jJ6w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-transform/binding-linux-s390x-gnu@0.112.0': - resolution: {integrity: sha512-eEFu4SRqJTJ20/88KRWmp+jpHKAw0Y1DsnSgpEeXyBIIcsOaLIUMU/TfYWUmqRbvbMV9rmOmI3kp5xWYUq6kSQ==} + '@oxc-transform/binding-linux-s390x-gnu@0.128.0': + resolution: {integrity: sha512-caJnVw5PG8v339zAyHgA7p34xXa3A4Kc9VyrDgsT1znr51qacaUv4BRlgRi0qkqxRWXYNVFfsbU2g0t1qS7E9w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-s390x-gnu@0.117.0': - resolution: {integrity: sha512-qT//IAPLvse844t99Kff5j055qEbXfwzWgvCMb0FyjisnB8foy25iHZxZIocNBe6qwrCYWUP1M8rNrB/WyfS1Q==} + '@oxc-transform/binding-linux-s390x-gnu@0.133.0': + resolution: {integrity: sha512-oEyQudXIwWM/+v0vZzPbAi25YMWyvjtQYYjuSrhMEQwe7ZEMDXscX7U1j6alrVdZq2DtCMeror3X/Dv7p/JUwg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-x64-gnu@0.112.0': - resolution: {integrity: sha512-ST1MDT+TlOyZ1c5btrGinRSUW2Jf4Pa+0gdKwsyjDSOC3dxy2ZNkN3mosTf4ywc3J+mxfYKqtjs7zSwHz03ILA==} + '@oxc-transform/binding-linux-x64-gnu@0.128.0': + resolution: {integrity: sha512-zkQKjsHEUX3ckQBcZTtHE/7pgFMkWQp6y/4t7N8eT3j8wnoL+vapv7l4ISjgx1/EePRJN1HErYXmriz7tPVKRg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-x64-gnu@0.117.0': - resolution: {integrity: sha512-2YEO5X+KgNzFqRVO5dAkhjcI5gwxus4NSWVl/+cs2sI6P0MNPjqE3VWPawl4RTC11LvetiiZdHcujUCPM8aaUw==} + '@oxc-transform/binding-linux-x64-gnu@0.133.0': + resolution: {integrity: sha512-G8P/OadKTbyUHz5TK63sDDtUHwn2SXG/o0oGo4GGTzBu70xmUSN5/ZUgpyl6ypAmbshoyw8nC7+msb3BjzHxaA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-transform/binding-linux-x64-musl@0.112.0': - resolution: {integrity: sha512-ISQoA3pD4cyTGpf9sXXeerH6pL2L6EIpdy6oAy2ttkswyVFDyQNVOVIGIdLZDgbpmqGljxZnWqt/J/N68pQaig==} + '@oxc-transform/binding-linux-x64-musl@0.128.0': + resolution: {integrity: sha512-NjYtwl9ijp34iisHxYBvE7nii1Ac0QPP3doHv8MQHhDA3zjUcDCROuBNybfaEYCxnJ1aF+cAPqsyeopnAGsyuQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxc-transform/binding-linux-x64-musl@0.117.0': - resolution: {integrity: sha512-3wqWbTSaIFZvDr1aqmTul4cg8PRWYh6VC52E8bLI7ytgS/BwJLW+sDUU2YaGIds4sAf/1yKeJRmudRCDPW9INg==} + '@oxc-transform/binding-linux-x64-musl@0.133.0': + resolution: {integrity: sha512-Oi/fyOzZ+aytmmsRND5pGgvux4n++v9cG4qNFiXj7qFwSqBKWZHBq7cJLXqbH1I81pyI3kvU1Za+1qk3afXuwg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxc-transform/binding-openharmony-arm64@0.112.0': - resolution: {integrity: sha512-UOGVrGIv7yLJovyEXEyUTADuLq98vd/cbMHFLJweRXD+11I8Tn4jASi4WzdsN8C3BVYGRHrXH2NlSBmhz33a4g==} + '@oxc-transform/binding-openharmony-arm64@0.128.0': + resolution: {integrity: sha512-itsi0tVkVdrYphSppdFChLq9tD0pvbRRS3EV8NQYKZ/NWHMoxzjlf9TFA/ZZYV113juYo1Dq3glVX48knhBeFQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-transform/binding-openharmony-arm64@0.117.0': - resolution: {integrity: sha512-Ebxx6NPqhzlrjvx4+PdSqbOq+li0f7X59XtJljDghkbJsbnkHvhLmPR09ifHt5X32UlZN63ekjwcg/nbmHLLlA==} + '@oxc-transform/binding-openharmony-arm64@0.133.0': + resolution: {integrity: sha512-/ZElgq+/tcga27X2G2AUpxcYX0baX94Gz658w6Zz2P+6Kr06bfYSrdtC0P7oPrbu3Gy/6kpiSoJPgZy8R2IjYQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-transform/binding-wasm32-wasi@0.112.0': - resolution: {integrity: sha512-XIX7Gpq9koAvzBVHDlVFHM79r5uOVK6kTEsdsN4qaajpjkgtv4tdsAOKIYK6l7fUbsbE6xS+6w1+yRFrDeC1kg==} - engines: {node: '>=14.0.0'} + '@oxc-transform/binding-wasm32-wasi@0.128.0': + resolution: {integrity: sha512-elzjX2gy1jcseeFaKtbk/6T2FPTpGNx0IpeD0iyk6cahWN7wD6eHY5u7th1X85cYbRq9rqniS+xYIxN3StthWg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@oxc-transform/binding-wasm32-wasi@0.117.0': - resolution: {integrity: sha512-Nn8mmcBiQ0XKHLTb05QBlH+CDkn7jf5YDVv9FtKhy4zJT0NEU9y3dXVbfcurOpsVrG9me4ktzDQNCaAoJjUQyw==} - engines: {node: '>=14.0.0'} + '@oxc-transform/binding-wasm32-wasi@0.133.0': + resolution: {integrity: sha512-GANcoEa8Nzza7saxdb4qWO24U6jk4nK6G+g87lGp8TTU45CUvWf1Igdze2+NrebgiwOy6F1/h6Esag4DM3JTtQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@oxc-transform/binding-win32-arm64-msvc@0.112.0': - resolution: {integrity: sha512-EgXef9kOne9BNsbYBbuRqxk2hteT0xsAGcx/VbtCBMJYNj8fANFhT271DUSOgfa4DAgrQQmsyt/Kr1aV9mpU9w==} + '@oxc-transform/binding-win32-arm64-msvc@0.128.0': + resolution: {integrity: sha512-p5LmbI66dk2dziJSUzjQ24gOWeI6pJpXcOC6famloRtKCq54V5/KegsztFgZZCtYFEAEqFgcfspFHrV+CcKWcg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-transform/binding-win32-arm64-msvc@0.117.0': - resolution: {integrity: sha512-15cbsF8diXWGnHrTsVgVeabETiT/KdMAfRAcot99xsaVecJs3pITNNjC6Qj+/TPNpehbgIFjlhhxOVSbQsTBgg==} + '@oxc-transform/binding-win32-arm64-msvc@0.133.0': + resolution: {integrity: sha512-2+uDo/+ZvGQu10J8xryg/l5PdBt2vXPtf+0aIosVKJavqCaKcBDdo95OUaEulx0bqvoytAQ4yyz2gcPZ40mjcQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-transform/binding-win32-ia32-msvc@0.112.0': - resolution: {integrity: sha512-6QaB0qjNaou2YR+blncHdw7j0e26IOwOIjLbhVGDeuf9+4rjJeiqRXJ2hOtCcS4zblnao/MjdgQuZ3fM0nl+Kw==} + '@oxc-transform/binding-win32-ia32-msvc@0.128.0': + resolution: {integrity: sha512-CMU3Yn05rXeLw7GyVlDB3bbp2iV14yt3VWyF0pNuMK9NVgOmUkXgFLe5SOcX9rEm64TRJjOMEghtE5+r0GtqIQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-transform/binding-win32-ia32-msvc@0.117.0': - resolution: {integrity: sha512-I6DkhCuFX6p9rckdWiLuZfBWrrYUC7sNX+zLaCfa5zvrPNwo1/29KkefvqXVxu3AWT/6oZAbtc0A8/mqhETJPQ==} + '@oxc-transform/binding-win32-ia32-msvc@0.133.0': + resolution: {integrity: sha512-zpPIZ1S3JHmSEFyyGyPYCwhOiNLyfaPifYxK8BQY21JXyHglu/wUr3/ESFrXb+XegEy/iBlWbzr3FzPtcq1MUw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-transform/binding-win32-x64-msvc@0.112.0': - resolution: {integrity: sha512-FRKYlY959QeqRPx9kXs0HjU2xuXPT1cdF+vvA200D9uAX/KLcC34MwRqUKTYml4kCc2Vf/P2pBR9cQuBm3zECQ==} + '@oxc-transform/binding-win32-x64-msvc@0.128.0': + resolution: {integrity: sha512-Vck5AdNH2JPYMQWVDxvX5PbDFfqVG+tCOgKJzAC/S9bgbD3qcMjN5Dx6FOmEbwY3hZm//fzOsY4tErofoiK/aQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxc-transform/binding-win32-x64-msvc@0.117.0': - resolution: {integrity: sha512-V7YzavQnYcRJBeJkp0qpb3FKrlm5I57XJetCYB4jsjStuboQmnFMZ/XQH55Szlf/kVyeU9ddQwv72gJJ5BrGjQ==} + '@oxc-transform/binding-win32-x64-msvc@0.133.0': + resolution: {integrity: sha512-cADrfLvc/VeyvpvQS+t5ktqfyqyyGANZC5NHp++JAElacfXqq/+k8bYkjqMWzNZ3HxkJtL1qDHfZZCA9+4hlSQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -2418,11 +2587,8 @@ packages: '@poppinss/exception@1.2.3': resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} - '@rolldown/pluginutils@1.0.0-rc.13': - resolution: {integrity: sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==} - - '@rolldown/pluginutils@1.0.0-rc.2': - resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==} + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} '@rollup/plugin-alias@6.0.0': resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==} @@ -2433,8 +2599,8 @@ packages: rollup: optional: true - '@rollup/plugin-commonjs@29.0.2': - resolution: {integrity: sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==} + '@rollup/plugin-commonjs@29.0.3': + resolution: {integrity: sha512-ZaOxZceP7SOUW7Lqw5IRVweSQYWaeIPnXIGLiB690EBA3FGJTO40EEr2L5yZplJWsgTCogILRSpcAe7+U0Otdg==} engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 @@ -2496,8 +2662,8 @@ packages: rollup: optional: true - '@rollup/pluginutils@5.3.0': - resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + '@rollup/pluginutils@5.4.0': + resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -2505,144 +2671,150 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.60.1': - resolution: {integrity: sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==} + '@rollup/rollup-android-arm-eabi@4.61.1': + resolution: {integrity: sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.60.1': - resolution: {integrity: sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==} + '@rollup/rollup-android-arm64@4.61.1': + resolution: {integrity: sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.60.1': - resolution: {integrity: sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==} + '@rollup/rollup-darwin-arm64@4.61.1': + resolution: {integrity: sha512-0F1L/Z3Eqv8mT2n3dCpeO8GcTvHvVqkP5/t6DMsn0KzhYVcg+s7Ncl5DS8qjKYEeio6Az0Gt6nyBORay5qIlCA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.60.1': - resolution: {integrity: sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==} + '@rollup/rollup-darwin-x64@4.61.1': + resolution: {integrity: sha512-qLttcH871ujY4YcVfUSShhOw+CsoTatYz8gRbHO7Bb92QH059/P0y5do1KMs41fY0BpD2x4AJH/gID0zFiqVKQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.60.1': - resolution: {integrity: sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==} + '@rollup/rollup-freebsd-arm64@4.61.1': + resolution: {integrity: sha512-fUI4RapGE0Oh3mb8mgfvC1O2nU1RpDZUKnDQm3xB1Ipg7C2wTs5Kstz7G2uWK99a8S2yTMq8/P4uycwNa0nJyw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.60.1': - resolution: {integrity: sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==} + '@rollup/rollup-freebsd-x64@4.61.1': + resolution: {integrity: sha512-H5YrdvJaDtI/U9/emrD4b++xkvp3y/JvOe4rizHbxvkyMfRS/CiRYdji+Pl8D0brEaNFWUh1drQxgAGIl6Xudw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.60.1': - resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==} + '@rollup/rollup-linux-arm-gnueabihf@4.61.1': + resolution: {integrity: sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.60.1': - resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==} + '@rollup/rollup-linux-arm-musleabihf@4.61.1': + resolution: {integrity: sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.60.1': - resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==} + '@rollup/rollup-linux-arm64-gnu@4.61.1': + resolution: {integrity: sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.60.1': - resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==} + '@rollup/rollup-linux-arm64-musl@4.61.1': + resolution: {integrity: sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.60.1': - resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==} + '@rollup/rollup-linux-loong64-gnu@4.61.1': + resolution: {integrity: sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.60.1': - resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==} + '@rollup/rollup-linux-loong64-musl@4.61.1': + resolution: {integrity: sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ==} cpu: [loong64] os: [linux] libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.60.1': - resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==} + '@rollup/rollup-linux-ppc64-gnu@4.61.1': + resolution: {integrity: sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.60.1': - resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==} + '@rollup/rollup-linux-ppc64-musl@4.61.1': + resolution: {integrity: sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw==} cpu: [ppc64] os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.60.1': - resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==} + '@rollup/rollup-linux-riscv64-gnu@4.61.1': + resolution: {integrity: sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.60.1': - resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==} + '@rollup/rollup-linux-riscv64-musl@4.61.1': + resolution: {integrity: sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.60.1': - resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==} + '@rollup/rollup-linux-s390x-gnu@4.61.1': + resolution: {integrity: sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.60.1': - resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==} + '@rollup/rollup-linux-x64-gnu@4.61.1': + resolution: {integrity: sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.60.1': - resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==} + '@rollup/rollup-linux-x64-musl@4.61.1': + resolution: {integrity: sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.60.1': - resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==} + '@rollup/rollup-openbsd-x64@4.61.1': + resolution: {integrity: sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.60.1': - resolution: {integrity: sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==} + '@rollup/rollup-openharmony-arm64@4.61.1': + resolution: {integrity: sha512-fbWnKqVkjrJN38vNe3ahkbk6iejS/3b0Nt7EEtPpE6RBacZcGXNKbzfHN3GUUlXOPghUg0j6XUGrtjX9z1sIvA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.60.1': - resolution: {integrity: sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==} + '@rollup/rollup-win32-arm64-msvc@4.61.1': + resolution: {integrity: sha512-ArMl38iVAbk0New1ogihQNY6iphLi4ZaRsa037gUzv5yeKPY8TD3Dmy4x2RNC1VztU/uqm+G+/RwFrSka3Oy2g==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.60.1': - resolution: {integrity: sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==} + '@rollup/rollup-win32-ia32-msvc@4.61.1': + resolution: {integrity: sha512-0mYtjHS9ucAbcATycCNK9IGBk/cCe/ma7EmSLGZdsxnOA8cjRIyU04wDpVAD9NiOfLUR9KTxdiO53uOkherqjQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.60.1': - resolution: {integrity: sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==} + '@rollup/rollup-win32-x64-gnu@4.61.1': + resolution: {integrity: sha512-gK1iCEPfpoSG9wfBihXxvBMi8ZfcWffYkEsC/Eih+iFENTaewvNcrEQ69lIOWYO5pePHKLHHO7nq5AILGO/HQQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.60.1': - resolution: {integrity: sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==} + '@rollup/rollup-win32-x64-msvc@4.61.1': + resolution: {integrity: sha512-X+zaP2x+j4RXGfbp/seSoRHWnPxzApilDszisZxbYH5C/jTxFhCtDNdPGZb9lJyYPs24wGxruPF7Y+sIXt9Gzw==} cpu: [x64] os: [win32] + '@simple-git/args-pathspec@1.0.3': + resolution: {integrity: sha512-ngJMaHlsWDTfjyq9F3VIQ8b7NXbBLq5j9i5bJ6XLYtD6qlDXT7fdKY2KscWWUF8t18xx052Y/PUO1K1TRc9yKA==} + + '@simple-git/argv-parser@1.1.1': + resolution: {integrity: sha512-Q9lBcfQ+VQCpQqGJFHe5yooOS5hGdLFFbJ5R+R5aDsnkPCahtn1hSkMcORX65J2Z5lxSkD0lQorMsncuBQxYUw==} + '@sindresorhus/is@7.2.0': resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} engines: {node: '>=18'} @@ -2651,18 +2823,18 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} - '@speed-highlight/core@1.2.15': - resolution: {integrity: sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw==} - - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@speed-highlight/core@1.2.16': + resolution: {integrity: sha512-yNm/fYEcnpRjYduLMaddTK9XKYil6xB88+qFg79ZdZhHu1PadfoQmFW7pVTx7FZqMBNcUuThiAhxhENgtAO2/w==} - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/jsesc@2.5.1': + resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -2675,41 +2847,38 @@ packages: '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@types/web-bluetooth@0.0.21': - resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} - - '@typescript-eslint/project-service@8.58.0': - resolution: {integrity: sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==} + '@typescript-eslint/project-service@8.61.0': + resolution: {integrity: sha512-DV42F7MLJO6Rax7SK1yg43tcnEfGUrurSpSxKuVX+a3RCTzBlH3fuxprrOJXKCJGAaw82xXocikJ0uQaqwXgGA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.58.0': - resolution: {integrity: sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==} + '@typescript-eslint/scope-manager@8.61.0': + resolution: {integrity: sha512-IWdXFHFSb6mlC3HPc7QsLDm5zYEbUla6trDEHf32D3/dnuUyXd87plScSNXSbm0/RxMvObpI17sv/EDTGrGZkA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.58.0': - resolution: {integrity: sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==} + '@typescript-eslint/tsconfig-utils@8.61.0': + resolution: {integrity: sha512-O5Amvdv9ztMpxpf+vmFULGG78IE6Qwdr3bCGvqwG4nwc9H2qXkOYJJnRbRHyMkQTjv1d03olqwwwzHLMqpFePQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.58.0': - resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==} + '@typescript-eslint/types@8.61.0': + resolution: {integrity: sha512-9QTQpZ5Iin4CdIodfbDQFSeiSJKidgYJYug1P9CC2xWgUTvlmixViqDZNciMjwLBZyJnG4tGmPl97rVAFb1AJg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.58.0': - resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==} + '@typescript-eslint/typescript-estree@8.61.0': + resolution: {integrity: sha512-42zatd5qSvvcV1JdDBCLxYRznvP4eIHpPoZXdkPFnAmanA4FuZ5dibSnCBggY8hQnqajPpoGjXFdZ7fIJKQnlA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.58.0': - resolution: {integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==} + '@typescript-eslint/visitor-keys@8.61.0': + resolution: {integrity: sha512-QVLZu3ZPQEE+HICQyAMZ2yLQhxf0meY/wx6Hx14YcTNj13JB3qHlX3lJ02L3fLGHgERRH71kvYDwiXIguT3AjQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@unhead/vue@2.1.12': - resolution: {integrity: sha512-zEWqg0nZM8acpuTZE40wkeUl8AhIe0tU0OkilVi1D4fmVjACrwoh5HP6aNqJ8kUnKsoy6D+R3Vi/O+fmdNGO7g==} + '@unhead/vue@2.1.15': + resolution: {integrity: sha512-SSByXfEjhzPn8gXdEdgpYqpLMPSkLUH2HVE0GxZfOtNsJ0GgOHQs0g9T67ZZ1z0kTELLKdtOtYrzrbv9+ffF7g==} peerDependencies: vue: '>=3.5.18' @@ -2721,8 +2890,8 @@ packages: engines: {node: '>=14.6'} deprecated: 'Vercel KV is deprecated. If you had an existing KV store, it should have moved to Upstash Redis which you will see under Vercel Integrations. For new projects, install a Redis integration from Vercel Marketplace: https://vercel.com/marketplace?category=storage&search=redis' - '@vercel/nft@1.5.0': - resolution: {integrity: sha512-IWTDeIoWhQ7ZtRO/JRKH+jhmeQvZYhtGPmzw/QGDY+wDCQqfm25P9yIdoAFagu4fWsK4IwZXDFIjrmp5rRm/sA==} + '@vercel/nft@1.10.2': + resolution: {integrity: sha512-w+WyX5Ulmj4dtTZrxaulqrjaLZHSbnPzx75SJsTNYmotKsqn1JlLnDJa+lz5hn90HJofhl/2MAtw0mCrgM3qYw==} engines: {node: '>=20'} hasBin: true @@ -2733,8 +2902,8 @@ packages: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 vue: ^3.0.0 - '@vitejs/plugin-vue@6.0.5': - resolution: {integrity: sha512-bL3AxKuQySfk1iGcBsQnoRVexTPJq0Z/ixFVM8OhVJAP6ZXXXLtM7NFKWhLl30Kg7uTBqIaPXbh+nuQCuBDedg==} + '@vitejs/plugin-vue@6.0.7': + resolution: {integrity: sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2765,85 +2934,51 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@vue/compiler-core@3.5.31': - resolution: {integrity: sha512-k/ueL14aNIEy5Onf0OVzR8kiqF/WThgLdFhxwa4e/KF/0qe38IwIdofoSWBTvvxQOesaz6riAFAUaYjoF9fLLQ==} + '@vue/compiler-core@3.5.38': + resolution: {integrity: sha512-s99aGxWYig9ErHbct27KXEGhrBYlRI6c4MwAgXErOAbX9xiW37/uMa+XUDO69zLz83dng8UUZ70CTOJrLrYrEQ==} - '@vue/compiler-core@3.5.35': - resolution: {integrity: sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw==} + '@vue/compiler-dom@3.5.38': + resolution: {integrity: sha512-JTqp25l8aFfJYF7/KmsXZjAxJz7T+SjmTJLoXVjHtc2BrSgSiW2n9Aem/cWq1OPe68A8JL06B3eVdhlP0H4TVw==} - '@vue/compiler-dom@3.5.31': - resolution: {integrity: sha512-BMY/ozS/xxjYqRFL+tKdRpATJYDTTgWSo0+AJvJNg4ig+Hgb0dOsHPXvloHQ5hmlivUqw1Yt2pPIqp4e0v1GUw==} + '@vue/compiler-sfc@3.5.38': + resolution: {integrity: sha512-DuA2GiZawSEW442iw/9+Fkol8hTgb4Ke5KkhmSry65QA7YuyMbIdy8p0XZRMvNwJdgRz307W8g1CSzdvS4nuNg==} - '@vue/compiler-dom@3.5.35': - resolution: {integrity: sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA==} - - '@vue/compiler-sfc@3.5.31': - resolution: {integrity: sha512-M8wpPgR9UJ8MiRGjppvx9uWJfLV7A/T+/rL8s/y3QG3u0c2/YZgff3d6SuimKRIhcYnWg5fTfDMlz2E6seUW8Q==} - - '@vue/compiler-sfc@3.5.35': - resolution: {integrity: sha512-G5VPMcXTSywXBgtFOZOnHKBxKSrwXUcvY1iaF5/hRcy7t0J6CH/d8ha9F4nzi00Fax1eLV0QHM7v4mQu68jydw==} - - '@vue/compiler-ssr@3.5.31': - resolution: {integrity: sha512-h0xIMxrt/LHOvJKMri+vdYT92BrK3HFLtDqq9Pr/lVVfE4IyKZKvWf0vJFW10Yr6nX02OR4MkJwI0c1HDa1hog==} - - '@vue/compiler-ssr@3.5.35': - resolution: {integrity: sha512-rGhAeXgdM7/ffTJGXT69rCCdTmjDewnFuUZfBQQHTdcEBeWdT5HCGY60y2ytLJr9/Dsu7IntUi5z/w0h6Rjnzw==} + '@vue/compiler-ssr@3.5.38': + resolution: {integrity: sha512-7s+W5Gc42FGxZMcuwl8H5B29T8BJPMdBT7KHFE+BbAuZ/iTEdTtv7z2XiMjiaUUw4w3ZcCEdHs36RuYJ2VA7bA==} '@vue/devtools-api@6.6.4': resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} - '@vue/devtools-api@8.1.1': - resolution: {integrity: sha512-bsDMJ07b3GN1puVwJb/fyFnj/U2imyswK5UQVLZwVl7O05jDrt6BHxeG5XffmOOdasOj/bOmIjxJvGPxU7pcqw==} + '@vue/devtools-api@8.1.2': + resolution: {integrity: sha512-vA0O112YqyDuNA1s7Yb2gCgToQ/OxOWiFDO5ThLCcDy0ldHnSd1dUTaSYhOldbqoNgumE4dxtGAoAaSUKUD1Zg==} - '@vue/devtools-core@8.1.1': - resolution: {integrity: sha512-bCCsSABp1/ot4j8xJEycM6Mtt2wbuucfByr6hMgjbYhrtlscOJypZKvy8f1FyWLYrLTchB5Qz216Lm92wfbq0A==} + '@vue/devtools-core@8.1.2': + resolution: {integrity: sha512-ZGGyaSBP4/+bN2Nd9ZHNYAVDRIzMw1rv2RyXWtyZlo6mQal+IDmTvKY4V+DjAEBhaXt30mHmsgYp1yXJ/2tIWg==} peerDependencies: vue: ^3.0.0 - '@vue/devtools-kit@8.1.1': - resolution: {integrity: sha512-gVBaBv++i+adg4JpH71k9ppl4soyR7Y2McEqO5YNgv0BI1kMZ7BDX5gnwkZ5COYgiCyhejZG+yGNrBAjj6Coqg==} - - '@vue/devtools-shared@8.1.1': - resolution: {integrity: sha512-+h4ttmJYl/txpxHKaoZcaKpC+pvckgLzIDiSQlaQ7kKthKh8KuwoLW2D8hPJEnqKzXOvu15UHEoGyngAXCz0EQ==} - - '@vue/reactivity@3.5.35': - resolution: {integrity: sha512-tVc+SsHConvh/Lz64qq1pP3rYArBmK42xonovEcxY74SQtvctZodG/zhq54P5dr38cVuw25d27cPNRdlMidpGQ==} - - '@vue/runtime-core@3.5.35': - resolution: {integrity: sha512-A/xFNX9loIcWDygeQuNCfKuh0CoYBzxhqEMNah5TSFg9Z53DrFYEN2qi5CU9necjM1OWYegYREUTHmXTmhfXtg==} + '@vue/devtools-kit@8.1.2': + resolution: {integrity: sha512-f75/upc+GCyjXErpgPGz4582ujS0L/adAltGy+tqXMGUJpgAcfGr6CxnnhpZY8BHuMYt6KpbF8uaFrrQG66rGQ==} - '@vue/runtime-dom@3.5.35': - resolution: {integrity: sha512-odrJ1C391dbGnyDRh8U+rnP7J2amIEzfmRk5vXy7xi3aZhEXofTvpi0T4HJb6jlNqQZTNPR5MPHSB3RHNkIORA==} + '@vue/devtools-shared@8.1.2': + resolution: {integrity: sha512-X9RyVFYAdkBe4IUf5v48TxBF/6QPmF8CmWrDAjXzfUHrgQ/HGfTC1A6TqgXqZ03ye66l3AD51BAGD69IvKM9sw==} - '@vue/server-renderer@3.5.35': - resolution: {integrity: sha512-NkebSOYdB97wi8OQcO3HqzZSlymJi/aWsN/7h74OSVhRTm6qGs3Jp3e0rCXynmWwSlKeRrnlIug+ilYoHBmQDA==} - peerDependencies: - vue: 3.5.35 - - '@vue/shared@3.5.31': - resolution: {integrity: sha512-nBxuiuS9Lj5bPkPbWogPUnjxxWpkRniX7e5UBQDWl6Fsf4roq9wwV+cR7ezQ4zXswNvPIlsdj1slcLB7XCsRAw==} + '@vue/reactivity@3.5.38': + resolution: {integrity: sha512-pG6LV/NDNRbKizcUjFFLAfjaL8mcv4DmR9avNcUw2gDHBzZneuS2TWCmp633ynzxz9YYKNeEPK2I8Wraqy2HUQ==} - '@vue/shared@3.5.35': - resolution: {integrity: sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA==} - - '@vueuse/core@14.2.1': - resolution: {integrity: sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ==} - peerDependencies: - vue: ^3.5.0 + '@vue/runtime-core@3.5.38': + resolution: {integrity: sha512-iyW8WVfF1CpCXxncZY5Ei6rSd6oZr5DgEom//fUjRBRl56AXPD+s9ATvukRt77ZFTuYlnVA1bxY+dJB94tWVYw==} - '@vueuse/metadata@14.2.1': - resolution: {integrity: sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw==} + '@vue/runtime-dom@3.5.38': + resolution: {integrity: sha512-apX2wt9sdfDshS+a2xueFZLVpt0GkRJZSoPmrW/SA4yzXTznhfcMVW59gr7h4YQeY0vJhdJkk2rsIDwgfFgC5A==} - '@vueuse/nuxt@14.2.1': - resolution: {integrity: sha512-DHgFMUpyH98M1YM9pbnRjFXMAMKEsHntJeOp8rOXs8QN2cvJBzEZ+TTWIBSPESNFOEwM02RA6BDsaTL35OK4Mw==} + '@vue/server-renderer@3.5.38': + resolution: {integrity: sha512-vue8vbf2QlV4quHqzwmJy6dWfmRhP1J8l4wtZg60CL6VoKqcPY2oe7may3+1d9qfpedjK5PRLFqd5k3Isj9mUw==} peerDependencies: - nuxt: ^3.0.0 || ^4.0.0-0 - vue: ^3.5.0 + vue: 3.5.38 - '@vueuse/shared@14.2.1': - resolution: {integrity: sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw==} - peerDependencies: - vue: ^3.5.0 + '@vue/shared@3.5.38': + resolution: {integrity: sha512-FTW0AFZNaK5/mOqvGBwVfUlNLU38TiQn4+DQgIFUnrBBJQ1crMJ82yeGQLV5jyKFsO8yRukpbuP7x+nRbH6aug==} '@whatwg-node/disposablestack@0.0.6': resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} @@ -2853,8 +2988,8 @@ packages: resolution: {integrity: sha512-b4PhJ+zYj4357zwk4TTuF2nEe0vVtOrwdsrNo5hL+u1ojXNhh1FgJ6pg1jzDlwlT4oBdzfSwaBwMCtFCsIWg8Q==} engines: {node: '>=18.0.0'} - '@whatwg-node/node-fetch@0.8.5': - resolution: {integrity: sha512-4xzCl/zphPqlp9tASLVeUhB5+WJHbuWGYpfoC2q1qh5dw0AqZBW7L27V5roxYWijPxj4sspRAAoOH3d2ztaHUQ==} + '@whatwg-node/node-fetch@0.8.6': + resolution: {integrity: sha512-BDMdYFcerLQkwA2RTldxOqRCs6ZQD1S7UgP3pUdGUkcbgTrP/V5ko77ZkCww9DHmC4lpoYuwigGfQYj285gMvA==} engines: {node: '>=18.0.0'} '@whatwg-node/promise-helpers@1.3.2': @@ -2887,8 +3022,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} engines: {node: '>=0.4.0'} hasBin: true @@ -2915,8 +3050,8 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} - ansis@4.2.0: - resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} + ansis@4.3.1: + resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==} engines: {node: '>=14'} any-promise@1.3.0: @@ -2944,8 +3079,8 @@ packages: resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==} engines: {node: '>=20.19.0'} - ast-walker-scope@0.8.3: - resolution: {integrity: sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==} + ast-walker-scope@0.9.0: + resolution: {integrity: sha512-IJdzo2vLiElBxKzwS36VsCue/62d6IdWjnPB2v3nuPKeWGynp6FF/CYoLa5i/3jXH/z97ZDdsXz6abpgM6w07A==} engines: {node: '>=20.19.0'} async-sema@3.1.1: @@ -2958,8 +3093,8 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - autoprefixer@10.4.27: - resolution: {integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==} + autoprefixer@10.5.0: + resolution: {integrity: sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -2971,8 +3106,8 @@ packages: b-validate@1.5.3: resolution: {integrity: sha512-iCvCkGFskbaYtfQ0a3GmcQCHl/Sv1GufXFGuUQ+FE+WJa7A/espLOuFIn09B944V8/ImPj71T4+rTASxO2PAuA==} - b4a@1.8.0: - resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==} + b4a@1.8.1: + resolution: {integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==} peerDependencies: react-native-b4a: '*' peerDependenciesMeta: @@ -2986,16 +3121,16 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - bare-events@2.8.2: - resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} + bare-events@2.9.1: + resolution: {integrity: sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==} peerDependencies: bare-abort-controller: '*' peerDependenciesMeta: bare-abort-controller: optional: true - bare-fs@4.5.6: - resolution: {integrity: sha512-1QovqDrR80Pmt5HPAsMsXTCFcDYr+NSUKW6nd6WO5v0JBmnItc/irNRzm2KOQ5oZ69P37y+AMujNyNtG+1Rggw==} + bare-fs@4.7.2: + resolution: {integrity: sha512-aTvMFUWkBmjzKtEQMDGGDNF8bkfpD5N1b/FCwt7A3wrU4t1o/e/85Wzkluh6JlODCjqVESYCkQCdTXqZ9G7VFg==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -3003,15 +3138,15 @@ packages: bare-buffer: optional: true - bare-os@3.8.6: - resolution: {integrity: sha512-l8xaNWWb/bXuzgsrlF5jaa5QYDJ9S0ddd54cP6CH+081+5iPrbJiCfBWQqrWYzmUhCbsH+WR6qxo9MeHVCr0MQ==} + bare-os@3.9.1: + resolution: {integrity: sha512-6M5XjcnsygQNPMCMPXSK379xrJFiZ/AEMNBmFEmQW8d/789VQATvriyi5r0HYTL9TkQ26rn3kgdTG3aisbrXkQ==} engines: {bare: '>=1.14.0'} - bare-path@3.0.0: - resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + bare-path@3.0.1: + resolution: {integrity: sha512-ghj2DSK/2e99a1anTVPCV4m4YIYtrbXhfM7V3D7XZLOTsybnYyaJloymGqssQc8l/or0UoDyRtNQkmkEF/ysgQ==} - bare-stream@2.12.0: - resolution: {integrity: sha512-w28i8lkBgREV3rPXGbgK+BO66q+ZpKqRWrZLiCdmmUlLPrQ45CzkvRhN+7lnv00Gpi2zy5naRxnUFAxCECDm9g==} + bare-stream@2.13.3: + resolution: {integrity: sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ==} peerDependencies: bare-abort-controller: '*' bare-buffer: '*' @@ -3024,14 +3159,14 @@ packages: bare-events: optional: true - bare-url@2.4.0: - resolution: {integrity: sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA==} + bare-url@2.4.5: + resolution: {integrity: sha512-K+y9xF1tN+CdPu4qWwr0QiK1Al07eFPGYK5M2pDXcmHdMdgC/tT/bpmMe1hrmRHaidKLkXrC+cRNYf3XVDUhSQ==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.10.13: - resolution: {integrity: sha512-BL2sTuHOdy0YT1lYieUxTw/QMtPBC3pmlJC6xk8BBYVv6vcw3SGdKemQ+Xsx9ik2F/lYDO9tqsFQH1r9PFuHKw==} + baseline-browser-mapping@2.10.37: + resolution: {integrity: sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig==} engines: {node: '>=6.0.0'} hasBin: true @@ -3054,14 +3189,14 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@1.1.13: - resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} + brace-expansion@1.1.15: + resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} - brace-expansion@2.0.3: - resolution: {integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==} + brace-expansion@2.1.1: + resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} - brace-expansion@5.0.5: - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} braces@3.0.3: @@ -3122,11 +3257,11 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - caniuse-api@3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + caniuse-api@4.0.0: + resolution: {integrity: sha512-B0hQ1OLyJuHTQSOWXvwibWqM6DCoqJdvBA6X1S/53bd4XU7LJ1yurIPlrsouol3mw1jh9pGI4ivubSpmJeIqCA==} - caniuse-lite@1.0.30001784: - resolution: {integrity: sha512-WU346nBTklUV9YfUl60fqRbU5ZqyXlqvo1SgigE1OAXK5bFL8LL9q1K7aap3N739l4BvNqnkm3YrGHiY9sfUQw==} + caniuse-lite@1.0.30001799: + resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -3162,8 +3297,8 @@ packages: resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} engines: {node: '>=20'} - cluster-key-slot@1.1.2: - resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} + cluster-key-slot@1.1.1: + resolution: {integrity: sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==} engines: {node: '>=0.10.0'} co@4.6.0: @@ -3281,20 +3416,14 @@ packages: crossws@0.3.5: resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} - crossws@0.4.4: - resolution: {integrity: sha512-w6c4OdpRNnudVmcgr7brb/+/HmYjMQvYToO/oTrprTwxRUiom3LYWU1PMWuD006okbUWpII1Ea9/+kwpUfmyRg==} + crossws@0.4.6: + resolution: {integrity: sha512-/Wxe9Z007EbJ496j88nToZEvyPZ8PY/wjZJ18Agh/GCA9cYHyLbxtrpdFlFzAw3TV20F0SUYGl0g6PzChbwUrg==} peerDependencies: - srvx: '>=0.7.1' + srvx: '>=0.11.5' peerDependenciesMeta: srvx: optional: true - css-declaration-sorter@7.3.1: - resolution: {integrity: sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.0.9 - css-select@5.2.2: resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} @@ -3315,23 +3444,23 @@ packages: engines: {node: '>=4'} hasBin: true - cssnano-preset-default@7.0.12: - resolution: {integrity: sha512-B3Eoouzw/sl2zANI0AL9KbacummJTCww+fkHaDBMZad/xuVx8bUduPLly6hKVQAlrmvYkS1jB1CVQEKm3gn0AA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + cssnano-preset-default@8.0.2: + resolution: {integrity: sha512-+jQAqIKCqMmBjZs7741XkilU93ITZ/EW8gjAkMmujdCzfDkfjrDBv2VqkSu29Fzeig/0rZ3S9IAwfPLlmXEUfQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - cssnano-utils@5.0.1: - resolution: {integrity: sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + cssnano-utils@6.0.1: + resolution: {integrity: sha512-zk65GIxA8tCjqVk7nTm1mE+ZKxtnxAvU5JSUaBLXbAr3ZF7IOvz3fbPOnEDvZKhnS7GOIitXTS5BgehLzNoc8Q==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - cssnano@7.1.4: - resolution: {integrity: sha512-T9PNS7y+5Nc9Qmu9mRONqfxG1RVY7Vuvky0XN6MZ+9hqplesTEwnj9r0ROtVuSwUVfaDhVlavuzWIVLUgm4hkQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + cssnano@8.0.2: + resolution: {integrity: sha512-K+a76gA1v0/CsYgcsE95HGGyIuPKxpQSetwSwz4nHEM8fFXqSkzq2JzEXFL8v5+CCjxzVVVhPcTK3Oo8SaF/xA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} @@ -3344,8 +3473,8 @@ packages: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} - dayjs@1.11.20: - resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} + dayjs@1.11.21: + resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==} db0@0.3.4: resolution: {integrity: sha512-RiXXi4WaNzPTHEOu8UPQKMooIbqOEyqA1t7Z6MsdxSCeb8iUC9ko3LcmsLmeUt2SM5bctfArZKkRQggKZz7JNw==} @@ -3412,8 +3541,8 @@ packages: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} - defu@6.1.6: - resolution: {integrity: sha512-f8mefEW4WIVg4LckePx3mALjQSPQgFlg9U8yaPdlsbdYcHQyj9n2zL2LJEA52smeYxOvmd/nB7TpMtHGMTHcug==} + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} @@ -3441,8 +3570,8 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - devalue@5.6.4: - resolution: {integrity: sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==} + devalue@5.8.1: + resolution: {integrity: sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==} didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -3475,8 +3604,8 @@ packages: resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} engines: {node: '>=18'} - dotenv@17.4.0: - resolution: {integrity: sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==} + dotenv@17.4.2: + resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} engines: {node: '>=12'} dunder-proto@1.0.1: @@ -3489,14 +3618,14 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - echarts@6.0.0: - resolution: {integrity: sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==} + echarts@6.1.0: + resolution: {integrity: sha512-q0yaFPggC9FUdsWH4blavRWFmxdrIodbkoKNAjJudAI6CA9gNPxHtV2RcZNEepZVlk4yvBYkOkbk6HIVpIyHZA==} ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.331: - resolution: {integrity: sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==} + electron-to-chromium@1.5.372: + resolution: {integrity: sha512-M3yhbAlilnwqC8D21t28UCDGHyitShTmmLRU/H+b74P6Ski16Nb9HONYEaVpMj/pwC7BEo5B95FpjODLCWbtfA==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -3541,11 +3670,11 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@2.0.0: - resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} esbuild@0.23.1: @@ -3563,8 +3692,13 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.27.5: - resolution: {integrity: sha512-zdQoHBjuDqKsvV5OPaWansOwfSQ0Js+Uj9J85TBvj3bFW1JjWTSULMRwdQAc8qMeIScbClxeMK0jlrtB9linhA==} + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} engines: {node: '>=18'} hasBin: true @@ -3687,18 +3821,18 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-npm-meta@1.4.2: - resolution: {integrity: sha512-XXyd9d3ie/JeIIjm6WeKalvapGGFI4ShAjPJM78vgUFYzoEsuNSjvvVTuht0XZcwbVdOnEEGzhxwguRbxkIcDg==} + fast-npm-meta@1.5.1: + resolution: {integrity: sha512-tWhw7z4jFuQgZB9tbQyUh5BY9nNd/wimM+fBLfmmJjakkJDNvbJKm0nQ5ruPKC0us1HGg7L6iBk1fxpSzcgSaA==} hasBin: true - fast-string-truncated-width@1.2.1: - resolution: {integrity: sha512-Q9acT/+Uu3GwGj+5w/zsGuQjh9O1TyywhIwAxHudtWrgF09nHOPrvTLhQevPbttcxjr/SNN7mJmfOw/B1bXgow==} + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} - fast-string-width@1.1.0: - resolution: {integrity: sha512-O3fwIVIH5gKB38QNbdg+3760ZmGz0SZMgvwJbA1b2TGXceKE6A2cOlfogh1iw8lr049zPyd7YADHy+B7U4W9bQ==} + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} - fast-wrap-ansi@0.1.6: - resolution: {integrity: sha512-HlUwET7a5gqjURj70D5jl7aC3Zmy4weA1SHUfM0JFI0Ptq987NH2TwbBFLoERhfwk+E+eaq4EK3jXoT+R3yp3w==} + fast-wrap-ansi@0.2.2: + resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -3776,8 +3910,8 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - fuse.js@7.1.0: - resolution: {integrity: sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==} + fuse.js@7.4.2: + resolution: {integrity: sha512-LVbzjD4WA6UP5B1UnP8wuaXJiLnqMdM/E4fiJXTJ5haJ5b/MBNsK29h2fm6swEoQaVQjvYFWKLE2RanyZIoRVQ==} engines: {node: '>=10'} fzf@0.5.2: @@ -3795,8 +3929,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.5.0: - resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} engines: {node: '>=18'} get-intrinsic@1.3.0: @@ -3817,8 +3951,8 @@ packages: get-tsconfig@4.14.0: resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} - giget@3.2.0: - resolution: {integrity: sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A==} + giget@3.3.0: + resolution: {integrity: sha512-gzi2D96p+AMfDcmJHGDj3KJ9NRiwvlFAU5yfa3ROwWZmFUjX4P43x3BcyRaOMMLto1vUo7C+86+MFhYTl6Ryiw==} hasBin: true glob-parent@5.1.2: @@ -3831,6 +3965,7 @@ packages: glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@13.0.6: @@ -3839,6 +3974,7 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me global-directory@4.0.1: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} @@ -3878,15 +4014,15 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - hookable@6.1.0: - resolution: {integrity: sha512-ZoKZSJgu8voGK2geJS+6YtYjvIzu9AOM/KZXsBxr83uhLL++e9pEv/dlgwgy3dvHg06kTz6JOh1hk3C8Ceiymw==} + hookable@6.1.1: + resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==} http-assert@1.5.0: resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} @@ -3912,8 +4048,8 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - httpxy@0.5.0: - resolution: {integrity: sha512-qwX7QX/rK2visT10/b7bSeZWQOMlSm3svTD0pZpU+vJjNUP0YHtNv4c3z+MO+MSnGuRFWJFdCZiV+7F7dXIOzg==} + httpxy@0.5.3: + resolution: {integrity: sha512-SMS9V6Sn7VWaS11lYhoAr0ceoaiolTWf4jYdJn0NJhCdKMu9R2H9Fh0LBDWBHQF6HRLI1PmaePYsjanSpE5PEw==} human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} @@ -3937,6 +4073,9 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + impound@1.1.5: resolution: {integrity: sha512-5AUn+QE0UofqNHu5f2Skf6Svukdg4ehOIq8O0EtqIx4jta0CDZYBPqpIHt0zrlUTiFVYlLpeH39DoikXBjPKpA==} @@ -3946,6 +4085,7 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.3: resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} @@ -3957,8 +4097,8 @@ packages: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - ioredis@5.10.1: - resolution: {integrity: sha512-HuEDBTI70aYdx1v6U97SbNx9F1+svQKBDo30o0b9fw055LMepzpOOd0Ccg9Q6tbqmBSJaMuY0fB7yw9/vjBYCA==} + ioredis@5.11.1: + resolution: {integrity: sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A==} engines: {node: '>=12.22.0'} iron-webcrypto@1.2.1: @@ -3971,8 +4111,8 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} engines: {node: '>= 0.4'} is-docker@2.2.1: @@ -4065,8 +4205,8 @@ packages: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true js-tokens@4.0.0: @@ -4075,10 +4215,6 @@ packages: js-tokens@9.0.1: resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} - hasBin: true - js-yaml@4.2.0: resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} hasBin: true @@ -4106,8 +4242,8 @@ packages: resolution: {integrity: sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + jsonfile@6.2.1: + resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} keygrip@1.1.0: resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} @@ -4146,8 +4282,8 @@ packages: resolution: {integrity: sha512-3An0GCLDSR34tsCO4H8Tef8Pp2ngtaZDAZnsWJYelqXUK5wyiHvGItgK/xcSkmHLSTn1Jcho1mRQs2ehRzvKKw==} engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} - launch-editor@2.13.2: - resolution: {integrity: sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==} + launch-editor@2.14.1: + resolution: {integrity: sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==} lazystream@1.0.1: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} @@ -4164,12 +4300,12 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - listhen@1.9.1: - resolution: {integrity: sha512-4EhoyVcXEpNlY5HJRSQpH7Rba94M8N2JmI62ePjl0lrJKXSfG0F1FAgHGxBoz/T3pe41sUEwkIRRIcaUL0/Ofw==} + listhen@1.10.0: + resolution: {integrity: sha512-kfz4C0OrC6IpaVMtYDJtf6PFjurxe9NBBoDAh/o2p587INryFOO4DQ9OetbCdDrWFt1m1CJKvYrzkGsuPHw8nQ==} hasBin: true - local-pkg@1.1.2: - resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} + local-pkg@1.2.1: + resolution: {integrity: sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==} engines: {node: '>=14'} locate-path@6.0.0: @@ -4186,29 +4322,17 @@ packages: lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - lodash.defaults@4.2.0: - resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} - - lodash.isarguments@3.1.0: - resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} - - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.2.7: - resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==} + lru-cache@11.5.1: + resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -4217,6 +4341,9 @@ packages: magic-regexp@0.10.0: resolution: {integrity: sha512-Uly1Bu4lO1hwHUW0CQeSWuRtzCMNO00CmXtS8N6fyvB3B979GOEEeAkiTUDsmbYLAbvpUS/Kt5c4ibosAzVyVg==} + magic-regexp@0.11.0: + resolution: {integrity: sha512-LG77Z/gVnwz7oaDpD4heX6ryl+lcr4l1B2gnP4MMvt2pGhGC1Dfj7dl1pXpP4ih+VQFLuAadeKVa+lARAzfW+Q==} + magic-string-ast@1.0.3: resolution: {integrity: sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA==} engines: {node: '>=20.19.0'} @@ -4224,8 +4351,8 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.5.2: - resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} + magicast@0.5.3: + resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} @@ -4284,8 +4411,8 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - miniflare@4.20260526.0: - resolution: {integrity: sha512-JYQ7jPZZWoaaj9jWHb8Ucp6Cu2SbDVqIsAJhumqdzzLkkfq0pYkDeino/sZfW1ixJWPjv/C44zjm9gVJC2izCA==} + miniflare@4.20260611.0: + resolution: {integrity: sha512-i+JwEo8vN96naz1WL3ntFgFyRluBDYL408zwhHKvR2jefJ464KsZ/gCmJAQ5k+oaWeb5Ug+s7yne5AyiAEswjg==} engines: {node: '>=22.0.0'} hasBin: true @@ -4331,11 +4458,6 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - nanoid@3.3.12: resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4355,8 +4477,8 @@ packages: resolution: {integrity: sha512-Nc3loyVASW59W+8fLDZT1lncpG7llffyZ2o0UQLx/Fr20i7P8oP+lE7+TEcFvXj9IUWU6LjB9P3BH+iFGyp+mg==} engines: {node: ^14.16.0 || >=16.0.0} - nitropack@2.13.3: - resolution: {integrity: sha512-C8vO7RxkU0AQ3HbYUumuG6MVM5JjRaBchke/rYFOp3EvrLtTBHZYhDVGECdpa27vNuOYRzm3GtQMn2YDOjDJLA==} + nitropack@2.13.4: + resolution: {integrity: sha512-tX7bT6zxNeMwkc6hxHiZeUoTOjVrcjoh1Z3cmxOlodIqjl4HISgqfGOmkWSayky3Nv9Z5+KQH52F8nmXJY5AAA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -4400,8 +4522,9 @@ packages: node-mock-http@1.0.4: resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==} - node-releases@2.0.37: - resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} + node-releases@2.0.47: + resolution: {integrity: sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==} + engines: {node: '>=18'} nopt@8.1.0: resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} @@ -4435,9 +4558,9 @@ packages: echarts: ^6.0.0 vue-echarts: ^8.0.0 - nuxt@4.4.2: - resolution: {integrity: sha512-iWVFpr/YEqVU/CenqIHMnIkvb2HE/9f+q8oxZ+pj2et+60NljGRClCgnmbvGPdmNFE0F1bEhoBCYfqbDOCim3Q==} - engines: {node: ^20.19.0 || >=22.12.0} + nuxt@4.4.8: + resolution: {integrity: sha512-r/DGE4cNkEDclOw9tbJ18zqu+ix3me+7QCfumPdl5lBXGWgCajskzuq/HzDkHKfIZsn7ACVEjMLRNA2teh++bQ==} + engines: {node: ^22.12.0 || ^24.11.0 || >=26.0.0} hasBin: true peerDependencies: '@parcel/watcher': ^2.1.0 @@ -4448,8 +4571,8 @@ packages: '@types/node': optional: true - nypm@0.6.5: - resolution: {integrity: sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==} + nypm@0.6.7: + resolution: {integrity: sha512-s3ds97SD5pd1dULE+tHUk1DrV0cSHOnsfpcdGATJ8JpBo21DoKqN9exTH4/2nhPQNOLomBdTFMicN94S4DrZrQ==} engines: {node: '>=18'} hasBin: true @@ -4465,8 +4588,9 @@ packages: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} - obug@2.1.1: - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + obug@2.1.3: + resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} + engines: {node: '>=12.20.0'} ofetch@1.5.1: resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} @@ -4495,10 +4619,6 @@ packages: only@0.0.2: resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} - open@10.2.0: - resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} - engines: {node: '>=18'} - open@11.0.0: resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==} engines: {node: '>=20'} @@ -4511,24 +4631,24 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - oxc-minify@0.117.0: - resolution: {integrity: sha512-JHsv/b+bmBJkAzkHXgTN7RThloVxLHPT0ojHfjqxVeHuQB7LPpLUbJ2qfwz37sto9stZ9+AVwUP4b3gtR7p/Tw==} + oxc-minify@0.133.0: + resolution: {integrity: sha512-6bNsYU+5WNIaNHB16zHnL24cUaJuKiPzUvjENoMale3+U8ZBMbGYgdgt//frx0ge7UcgEGIpqtukGGNPT0kxfQ==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-parser@0.112.0: - resolution: {integrity: sha512-7rQ3QdJwobMQLMZwQaPuPYMEF2fDRZwf51lZ//V+bA37nejjKW5ifMHbbCwvA889Y4RLhT+/wLJpPRhAoBaZYw==} + oxc-parser@0.128.0: + resolution: {integrity: sha512-XkOw3eiIxAgQ19WRew/Bq9wc5Ga/guaWIzDBzq80z1PyuDNGvWBpPby9k6YGwV8A8uMw+Nlq3xqlzuDYmUFYUw==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-parser@0.117.0: - resolution: {integrity: sha512-l3cbgK5wUvWDVNWM/JFU77qDdGZK1wudnLsFcrRyNo/bL1CyU8pC25vDhMHikVY29lbK2InTWsX42RxVSutUdQ==} + oxc-parser@0.133.0: + resolution: {integrity: sha512-661RSx+ZcjBmjBYid+Fpp/2F5EbtildpeoZh5HdgnGs+jZ03nqQEQW8yGkt4BGyOC3OMPDQQRl8M5kqD2/g6jw==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-transform@0.112.0: - resolution: {integrity: sha512-cIRRvZgrHfsAHrkt8LWdAX4+Do8R0MzQSfeo9yzErzHeYiuyNiP4PCTPbOy/wBXL4MYzt3ebrBa5jt3akQkKAg==} + oxc-transform@0.128.0: + resolution: {integrity: sha512-8DfEHlmUiLOHlCK9DGX+d5tORc1xwPPvoRSHSJCYgLHyGjKp4PvfBrvgi59DkEW0SMOWfO8GL9t+R7vdKtupbg==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-transform@0.117.0: - resolution: {integrity: sha512-u1Stl2uhDh9bFuOGjGXQIqx46IRUNMyHQkq59LayXNGS2flNv7RpZpRSWs5S5deuNP6jJZ12gtMBze+m4dOhmw==} + oxc-transform@0.133.0: + resolution: {integrity: sha512-9lt2b+hkG6yqe0fUDMHhMk7rgI9uTjNxU9wauQiYnHzc4kZI8JP/OhBqXTIJQTrqRJ8CkSH3O5AhQ13ke28yNg==} engines: {node: ^20.19.0 || >=22.12.0} oxc-walker@0.7.0: @@ -4536,6 +4656,17 @@ packages: peerDependencies: oxc-parser: '>=0.98.0' + oxc-walker@1.0.0: + resolution: {integrity: sha512-eMsHflAGfOskpWxtp9xP/f5b96XLEU8ifTd2gOOCkdux9HMxKGy5S1ru0Gh1B3aPu+YbfmWUUVkcb7MrZz3XyQ==} + peerDependencies: + oxc-parser: '>=0.98.0' + rolldown: '>=1.0.0' + peerDependenciesMeta: + oxc-parser: + optional: true + rolldown: + optional: true + oxfmt@0.53.0: resolution: {integrity: sha512-9cB5glS3Ip6NMuZ+6NYTao9FCWkDhRtPYCtR3QBu/NxHoFbgzzTvi41N4jxz/GqGfuLKspui1qb/LlSu2IbMcw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4666,8 +4797,8 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - pkg-types@2.3.0: - resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + pkg-types@2.3.1: + resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} portfinder@1.0.38: resolution: {integrity: sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==} @@ -4679,41 +4810,41 @@ packages: peerDependencies: postcss: ^8.4.38 - postcss-colormin@7.0.7: - resolution: {integrity: sha512-sBQ628lSj3VQpDquQel8Pen5mmjFPsO4pH9lDLaHB1AVkMRHtkl0pRB5DCWznc9upWsxint/kV+AveSj7W1tew==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-colormin@8.0.1: + resolution: {integrity: sha512-qBY4ABQ6d8/mk5RRZHwMllrZMxeMey3azVY2dZUEk+RgiUC4ARdPR3/AITzNqqKTbvW/3y/MJKinDrzwqn8RDQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-convert-values@7.0.9: - resolution: {integrity: sha512-l6uATQATZaCa0bckHV+r6dLXfWtUBKXxO3jK+AtxxJJtgMPD+VhhPCCx51I4/5w8U5uHV67g3w7PXj+V3wlMlg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-convert-values@8.0.1: + resolution: {integrity: sha512-IdOSIX3BzfMvCc1TAHIha2gfy17xnb5vfML8e2BIKARnFOghksESfaSAB/3CXgyLfMozZAbTRPVQF5dbuKOidw==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-discard-comments@7.0.6: - resolution: {integrity: sha512-Sq+Fzj1Eg5/CPf1ERb0wS1Im5cvE2gDXCE+si4HCn1sf+jpQZxDI4DXEp8t77B/ImzDceWE2ebJQFXdqZ6GRJw==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-discard-comments@8.0.1: + resolution: {integrity: sha512-FDvzm3tXlEsQBO2XQgnta5ugsAqwBrgWH+j5QgXpegEIDYA0VPnZg2aP7LtmWtC49POskeIhXesFiU/k3NyFHA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-discard-duplicates@7.0.2: - resolution: {integrity: sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-discard-duplicates@8.0.1: + resolution: {integrity: sha512-stTDXkI8YkCUfADurQhp03oq5ynsgSx6Qrw5B1swds6oTHtAeOZ9I0SHGK8cY/VpWUsIYFDWMs3IWf9jIEfFvA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-discard-empty@7.0.1: - resolution: {integrity: sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-discard-empty@8.0.1: + resolution: {integrity: sha512-Zv4fM1Yfhk71tbt6gfiptbL6jDHi+7apSnaMeaO9n1uET+1embrXQw5m93Zp5x28UyQSuv+AVkFY193jdwZ33w==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-discard-overridden@7.0.1: - resolution: {integrity: sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-discard-overridden@8.0.1: + resolution: {integrity: sha512-ykt4fvrC7yYGzbxKyqBVjDCbsjF/11JgWK8enrdkobRyqqEtb/uDUCbKOGdvrK8X7BrShW8Lv5cCRNbdkNHGkQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 postcss-import@15.1.0: resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} @@ -4745,41 +4876,41 @@ packages: yaml: optional: true - postcss-merge-longhand@7.0.5: - resolution: {integrity: sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-merge-longhand@8.0.1: + resolution: {integrity: sha512-huTfSYgQ13O81SFvAuOi7GWnO48vvybjj3xF+X3qUoPjzvvaLpJH5DcUqqXcwOEulZUcvaV4s0V9WtWs+IAQPA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-merge-rules@7.0.8: - resolution: {integrity: sha512-BOR1iAM8jnr7zoQSlpeBmCsWV5Uudi/+5j7k05D0O/WP3+OFMPD86c1j/20xiuRtyt45bhxw/7hnhZNhW2mNFA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-merge-rules@8.0.1: + resolution: {integrity: sha512-o3rk4UpnPNg469tklYwbR/NtvKc/f/wJiVDTnNQ/EFPw/LeiPOHUCvV1GIBQIZHGrBAYdPjToK6a+ojYprsrxQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-minify-font-values@7.0.1: - resolution: {integrity: sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-minify-font-values@8.0.1: + resolution: {integrity: sha512-L8Nzs/PRlBSPrLdY/7rAiU5ZN5800+2J/4LRbfyG8SJnPljmgMaXVmQiCklvRS+yObfVRNtvmk/Ean/eoYcSeg==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-minify-gradients@7.0.2: - resolution: {integrity: sha512-fVY3AB8Um7SJR5usHqTY2Ngf9qh8IRN+FFzrBP0ONJy6yYXsP7xyjK2BvSAIrpgs1cST+H91V0TXi3diHLYJtw==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-minify-gradients@8.0.1: + resolution: {integrity: sha512-qf+4s/hZMqTwpWN2teqf6+1yvR/SZK5HgHqXYuACeJXV7ABe7AXtBEomgxagUzcN4bSnmqBh5vnIml0dYqykYg==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-minify-params@7.0.6: - resolution: {integrity: sha512-YOn02gC68JijlaXVuKvFSCvQOhTpblkcfDre2hb/Aaa58r2BIaK4AtE/cyZf2wV7YKAG+UlP9DT+By0ry1E4VQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-minify-params@8.0.1: + resolution: {integrity: sha512-L0h3H59deFfFg0wQN1NVaS/8E/LfGvaMuZKGO7siwlG995zo3OshtQyRkqKdVqcBwAORBvZ1nDZrKPLRapYkQw==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-minify-selectors@7.0.6: - resolution: {integrity: sha512-lIbC0jy3AAwDxEgciZlBullDiMBeBCT+fz5G8RcA9MWqh/hfUkpOI3vNDUNEZHgokaoiv0juB9Y8fGcON7rU/A==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-minify-selectors@8.0.2: + resolution: {integrity: sha512-3icdxc/zght5UAizdwqZBDE2KOWHf1jMQCxET6iLACeNlRxfTPyXS0/COpGk8CQ2cECyaEKTRUd/i/k8Gxmz4g==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 postcss-nested@6.2.0: resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} @@ -4793,97 +4924,97 @@ packages: peerDependencies: postcss: ^8.4 - postcss-normalize-charset@7.0.1: - resolution: {integrity: sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-charset@8.0.1: + resolution: {integrity: sha512-xzqr36F8UeIZOvOHsf3aul+RVJCADvSwuwpMLgizqKjisHZpBfztgW0XFLBfJvz9pJgaStaOXAtGb0zLqT6B0w==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-normalize-display-values@7.0.1: - resolution: {integrity: sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-display-values@8.0.1: + resolution: {integrity: sha512-ZDWOijOK1FFMlpgiQCUO9fCNKd7HJ9L7z9HWEq4iyubnUFWzdTSwm/LcrMbNW6iZ1oAtqeLYA0WA3xHszOI08g==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-normalize-positions@7.0.1: - resolution: {integrity: sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-positions@8.0.1: + resolution: {integrity: sha512-uuivan2poSqbE48ST4do20dGaFUeXey9/H8rhHzoyVHB2I6BmkoVLZ/C9+BRjUlpaAFYVOoDY7epkiidzaYbvA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-normalize-repeat-style@7.0.1: - resolution: {integrity: sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-repeat-style@8.0.1: + resolution: {integrity: sha512-q2hq5fmKxk29K6DjKA3nZ17Q2dtjhLYFNmFweKALmooUqx6UWAHF1bBoWTu/EqlJ88josb82A/J0Atj9LJUmpQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-normalize-string@7.0.1: - resolution: {integrity: sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-string@8.0.1: + resolution: {integrity: sha512-+Wf+kQJhm1WgSGEAuUaswE9rdpR9QbrKRVemcVHs6rhOoOTVIdAbgaicftfYA6vLM346P8onRzkEVbFN29ktKQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-normalize-timing-functions@7.0.1: - resolution: {integrity: sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-timing-functions@8.0.1: + resolution: {integrity: sha512-W8/tvwRlm3T+yjGkg0IRTF4bvHj0vILYr/LOogCrJKHz2ey2HFRwfsAA8Bk9N4BGR7z7WmmDu/KzzwhJ6FoGPQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-normalize-unicode@7.0.6: - resolution: {integrity: sha512-z6bwTV84YW6ZvvNoaNLuzRW4/uWxDKYI1iIDrzk6D2YTL7hICApy+Q1LP6vBEsljX8FM7YSuV9qI79XESd4ddQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-unicode@8.0.1: + resolution: {integrity: sha512-Ad0YHNRBp4WHEOYUM/4wL/8MoL2fimEF8se/0q+Rt/owMzYpbxsypC1P8fN/oluwoRmRKdNVX7X2oycEobPWcQ==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-normalize-url@7.0.1: - resolution: {integrity: sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-url@8.0.1: + resolution: {integrity: sha512-tkYcip6pCDY806xuxpJYqMW2M3/623jzGFJmz3m5Us47q8P28+gbRZxaea3Rr/CmwwLUiVlh+BTGYwQ6gvaP8A==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-normalize-whitespace@7.0.1: - resolution: {integrity: sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-normalize-whitespace@8.0.1: + resolution: {integrity: sha512-XzORadNfSrKWDZZpgAEHPKINKx8r9r9RIfE9c70g/HThdpbmPHhDYCodHSVESDxmKeySAYw1p4liuBCf7j6LyA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-ordered-values@7.0.2: - resolution: {integrity: sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-ordered-values@8.0.1: + resolution: {integrity: sha512-OLXq5lR1yk3KWQ1FPK6aWjFFdktHE9f9kb8cnt4LmIw7w30DnzgD9+sOVYJc5HenkWCX8i1MJhhFwmqc/GYqLg==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-reduce-initial@7.0.6: - resolution: {integrity: sha512-G6ZyK68AmrPdMB6wyeA37ejnnRG2S8xinJrZJnOv+IaRKf6koPAVbQsiC7MfkmXaGmF1UO+QCijb27wfpxuRNg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-reduce-initial@8.0.1: + resolution: {integrity: sha512-+aQsR6+61KRoIfcFNLP3v9RM7+0iYOTtPnjl1wr6JqMW1zx6S+t2ktHRefXwacFdHIDj5+ETG0KY7K3+SGQ4Nw==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-reduce-transforms@7.0.1: - resolution: {integrity: sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-reduce-transforms@8.0.1: + resolution: {integrity: sha512-x71slHVykiFi5RuKEXM0wgYpY2PngC78x6R8TnZhHF3lhqt+u/w3MGwYLX+2t5O87ssRiMfEAhQH+3J4QwVzCw==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + postcss-selector-parser@6.1.4: + resolution: {integrity: sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==} engines: {node: '>=4'} - postcss-selector-parser@7.1.1: - resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + postcss-selector-parser@7.1.4: + resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==} engines: {node: '>=4'} - postcss-svgo@7.1.1: - resolution: {integrity: sha512-zU9H9oEDrUFKa0JB7w+IYL7Qs9ey1mZyjhbf0KLxwJDdDRtoPvCmaEfknzqfHj44QS9VD6c5sJnBAVYTLRg/Sg==} - engines: {node: ^18.12.0 || ^20.9.0 || >= 18} + postcss-svgo@8.0.1: + resolution: {integrity: sha512-HpnvWii7W0/FPrsejJa6ZTi0kNtTJP/Iba7CUMPX0xPV6QpnndOp+SDP74tFtgjA2cYKYNWJPOlmLXMsvi/9yA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 - postcss-unique-selectors@7.0.5: - resolution: {integrity: sha512-3QoYmEt4qg/rUWDn6Tc8+ZVPmbp4G1hXDtCNWDx0st8SjtCbRcxRXDDM1QrEiXGG3A45zscSJFb4QH90LViyxg==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + postcss-unique-selectors@8.0.1: + resolution: {integrity: sha512-+xvKI5+/Cl8yYQwxDV39Uhuc4WV951xngFvPPjiPj2NIbIfm6vbbRTXblyw0FioLkIoGlw+7qUcY1h2YhaZYgw==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} @@ -4892,10 +5023,6 @@ packages: resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.8: - resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} - engines: {node: ^10 || ^12 || >=14} - powershell-utils@0.1.0: resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} engines: {node: '>=20'} @@ -4915,6 +5042,9 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -5003,11 +5133,15 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} engines: {node: '>= 0.4'} hasBin: true + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -5025,31 +5159,11 @@ packages: rollup: optional: true - rollup@4.60.1: - resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==} + rollup@4.61.1: + resolution: {integrity: sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rosie-skills-darwin-arm64@0.6.4: - resolution: {integrity: sha512-rn1s5hqFKcxeiDEWWoFa1hdGPshR8TkwHLzy/cBavb9XJNAaUxbe3oQ78W9sQkRHAgRyzJYyk9tw68Qrdnizgg==} - cpu: [arm64] - os: [darwin] - - rosie-skills-freebsd-x64@0.6.4: - resolution: {integrity: sha512-SxCRduPBMtfjkQ+q56Yw9OLA3PyaqoALzt7kER7IDKuUVfM2O/1w8sa5xhTDiCvWkZJixnH5d5Ya6KT+/Mwcng==} - cpu: [x64] - os: [freebsd] - - rosie-skills-linux-x64@0.6.4: - resolution: {integrity: sha512-D9Y9mfu7goB0s0X59uU3hcFeUTef3VbpCIDwFMzyvJrAq3XhRACWBDMHQsHlyWdHxTXPX/ILyW65RXyrJlgqng==} - cpu: [x64] - os: [linux] - - rosie-skills@0.6.4: - resolution: {integrity: sha512-ojfhSiQRdZ2QyWbmKAHOSAUbaLYrTc5zIH7mS1jKoP8KCFSQddwVhMyFqldckTeybTfW3zNcsZzyOTzGTN1SBA==} - engines: {node: '>=18'} - hasBin: true - rou3@0.8.1: resolution: {integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==} @@ -5084,8 +5198,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + semver@7.8.4: + resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==} engines: {node: '>=10'} hasBin: true @@ -5097,8 +5211,8 @@ packages: resolution: {integrity: sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==} engines: {node: '>=20.0.0'} - seroval@1.5.1: - resolution: {integrity: sha512-OwrZRZAfhHww0WEnKHDY8OM0U/Qs8OTfIDWhUD4BLpNJUfXK4cGmjiagGze086m+mhI+V2nD0gfbHEnJjb9STA==} + seroval@1.5.4: + resolution: {integrity: sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw==} engines: {node: '>=10'} serve-placeholder@2.0.2: @@ -5126,8 +5240,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shell-quote@1.8.3: - resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + shell-quote@1.8.4: + resolution: {integrity: sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==} engines: {node: '>= 0.4'} side-channel-list@1.0.1: @@ -5142,16 +5256,19 @@ packages: resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} engines: {node: '>= 0.4'} - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} engines: {node: '>= 0.4'} + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - simple-git@3.33.0: - resolution: {integrity: sha512-D4V/tGC2sjsoNhoMybKyGoE+v8A60hRawKQ1iFRA1zwuDgGZCBJ4ByOzZ5J8joBbi4Oam0qiPH+GhzmSBwbJng==} + simple-git@3.36.0: + resolution: {integrity: sha512-cGQjLjK8bxJw4QuYT7gxHw3/IouVESbhahSsHrX97MzCL1gu2u7oy38W6L2ZIGECEfIBG4BabsWDPjBxJENv9Q==} simple-swizzle@0.2.4: resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} @@ -5167,8 +5284,8 @@ packages: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} - smob@1.6.1: - resolution: {integrity: sha512-KAkBqZl3c2GvNgNhcoyJae1aKldDW0LO279wF9bk1PnluRTETKBq0WyzRXxEhoQLk56yHaOY4JCBEKDuJIET5g==} + smob@1.6.2: + resolution: {integrity: sha512-RQsvleCbF8cVHEv+xuDGaA4pOizFqJ0GgjtMSRo6oP8pnN7WsigHgVGey6aILRBKv4W2YOMHLqbKdnB6hpB9fw==} engines: {node: '>=20.0.0'} source-map-js@1.2.1: @@ -5186,8 +5303,8 @@ packages: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} - srvx@0.11.14: - resolution: {integrity: sha512-mx+pKrWJCzo5m6uXqyB7n4VA81mpdFRroSWsVTQTYqCZE65hFJ+jtVIeyhtL2/kvtDMrHdbA0hWEUh/vu0+Viw==} + srvx@0.11.16: + resolution: {integrity: sha512-bp07zRuycfTY43IjAvvTFnmnJi8ikW0VFiHwOhhYcVW/L4xQ1XY4PAd4Nuum1rsA17C39zL7x+CDhrn5AL32Rw==} engines: {node: '>=20.16.0'} hasBin: true @@ -5202,14 +5319,11 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - - std-env@4.0.0: - resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} - streamx@2.25.0: - resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==} + streamx@2.28.0: + resolution: {integrity: sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -5251,11 +5365,11 @@ packages: structured-clone-es@2.0.0: resolution: {integrity: sha512-5UuAHmBLXYPCl22xWJrFuGmIhBKQzxISPVz6E7nmTmTcAOpUzlbjKJsRrCE4vADmMQ0dzeCnlWn9XufnAGf76Q==} - stylehacks@7.0.8: - resolution: {integrity: sha512-I3f053GBLIiS5Fg6OMFhq/c+yW+5Hc2+1fgq7gElDMMSqwlRb3tBf2ef6ucLStYRpId4q//bQO1FjcyNyy4yDQ==} - engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + stylehacks@8.0.1: + resolution: {integrity: sha512-Gv095oTD0N+BdJALNFDsxZpETHZLTxbOl5RyIO7y6VAE6sR3z0MnV3Nix7N0IATNldNTrkvSASp2KR1Yt526HA==} + engines: {node: ^22.11.0 || ^24.11.0 || >=26.0} peerDependencies: - postcss: ^8.4.32 + postcss: ^8.5.15 sucrase@3.35.1: resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} @@ -5295,18 +5409,18 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - tar-stream@3.1.8: - resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==} + tar-stream@3.2.0: + resolution: {integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==} - tar@7.5.13: - resolution: {integrity: sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==} + tar@7.5.16: + resolution: {integrity: sha512-56adEpPMouktRlBLXiaYFFzZ/3+JXa8P9n7WbR+ibIjtviN55mEaOkiysCnPnWm+7kkui1Dn8J9l+g6zV8731w==} engines: {node: '>=18'} teex@1.0.1: resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} - terser@5.46.1: - resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} + terser@5.48.0: + resolution: {integrity: sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==} engines: {node: '>=10'} hasBin: true @@ -5323,16 +5437,16 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tinyclip@0.1.12: - resolution: {integrity: sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA==} + tinyclip@0.1.14: + resolution: {integrity: sha512-F1oWdz8tjT17qe1d5JgDK6z03WGOhYYAN0lK3/D/fzNiy93xswLLEw7pk+3g05onhAy6Bsc6PLNUGhdgVjemMQ==} engines: {node: ^16.14.0 || >= 17.3.0} - tinyexec@1.0.4: - resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} engines: {node: '>=18'} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} tinypool@2.1.0: @@ -5390,8 +5504,8 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - type-fest@5.5.0: - resolution: {integrity: sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==} + type-fest@5.7.0: + resolution: {integrity: sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg==} engines: {node: '>=20'} type-is@1.6.18: @@ -5406,8 +5520,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - ufo@1.6.3: - resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} ultrahtml@1.6.0: resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} @@ -5428,8 +5542,8 @@ packages: unenv@2.0.0-rc.24: resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} - unhead@2.1.12: - resolution: {integrity: sha512-iTHdWD9ztTunOErtfUFk6Wr11BxvzumcYJ0CzaSCBUOEtg+DUZ9+gnE99i8QkLFT2q1rZD48BYYGXpOZVDLYkA==} + unhead@2.1.15: + resolution: {integrity: sha512-MCt5T90mCWyr3Z6pUCdM9lVRXoMoVBlL7z7U4CYVIiaDiuzad/UCfLuMqz5MeNmpZUgoBCQnrucJimU7EZR+XA==} unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} @@ -5443,9 +5557,17 @@ packages: resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} engines: {node: '>=20'} - unimport@6.0.2: - resolution: {integrity: sha512-ZSOkrDw380w+KIPniY3smyXh2h7H9v2MNr9zejDuh239o5sdea44DRAYrv+rfUi2QGT186P2h0GPGKvy8avQ5g==} + unimport@6.3.0: + resolution: {integrity: sha512-M+Dxk5W9WRd+8j56W9tp8lGW/dmMc7g5zj7BWQnEjKQhryBstqsi1V0izb0zHwSkEN8cSYV7K75/bykairV2tA==} engines: {node: '>=18.12.0'} + peerDependencies: + oxc-parser: '*' + rolldown: ^1.0.0 + peerDependenciesMeta: + oxc-parser: + optional: true + rolldown: + optional: true universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} @@ -5545,8 +5667,8 @@ packages: peerDependencies: browserslist: '>= 4.21.0' - uqr@0.1.2: - resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} + uqr@0.1.3: + resolution: {integrity: sha512-0rjE8iEJe4YmT9TOhwsZtqCMRLc5DXZUI2UEYUUg63ikBkqqE5EYWaI0etFe/5KUcmcYwLih2RND1kq+hrUJXA==} uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -5565,35 +5687,33 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vite-dev-rpc@1.1.0: - resolution: {integrity: sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==} + vite-dev-rpc@2.0.0: + resolution: {integrity: sha512-yKwbTwdHKSD2k/aGqyWpPHepo45OQc8lH3/6IfT4ZqeKE26ooKvi4WIEKzqWav8v+9Is8u1k8q54hvOmqASazA==} peerDependencies: - vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0 + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0 || ^8.0.0 - vite-hot-client@2.1.0: - resolution: {integrity: sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==} + vite-hot-client@2.2.0: + resolution: {integrity: sha512-76Zs9zrHbH7M7wqeyooGQKdX+yg0pQ0xuQ1PbFp4z5a0Lzn2e5IPFoCswnmqZ4GiwqB4Jo3WcDAMO9jARTJl8w==} peerDependencies: - vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 + vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0 vite-node@5.3.0: resolution: {integrity: sha512-8f20COPYJujc3OKPX6OuyBy3ZIv2det4eRRU4GY1y2MjbeGSUmPjedxg1b72KnTagCofwvZ65ThzjxDW2AtQFQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - vite-plugin-checker@0.12.0: - resolution: {integrity: sha512-CmdZdDOGss7kdQwv73UyVgLPv0FVYe5czAgnmRX2oKljgEvSrODGuClaV3PDR2+3ou7N/OKGauDDBjy2MB07Rg==} - engines: {node: '>=16.11'} + vite-plugin-checker@0.14.1: + resolution: {integrity: sha512-Mv8oQc9XYBYf+XkP/riqqQCt8lBP6Iad75PZPho1lHRrpxQI0BwX2gwE10enn4f6Hgc+PvR1F7N38KARcaJtzw==} + engines: {node: '>=20.19.0'} peerDependencies: - '@biomejs/biome': '>=1.7' - eslint: '>=9.39.1' - meow: ^13.2.0 + '@biomejs/biome': '>=2.4.12' + eslint: '>=9.39.4' + meow: ^13.2.0 || ^14.0.0 optionator: ^0.9.4 oxlint: '>=1' - stylelint: '>=16' + stylelint: '>=16.26.1' typescript: '*' vite: '>=5.4.21' - vls: '*' - vti: '*' vue-tsc: ~2.2.10 || ^3.0.0 peerDependenciesMeta: '@biomejs/biome': @@ -5610,31 +5730,27 @@ packages: optional: true typescript: optional: true - vls: - optional: true - vti: - optional: true vue-tsc: optional: true - vite-plugin-inspect@11.3.3: - resolution: {integrity: sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA==} + vite-plugin-inspect@11.4.1: + resolution: {integrity: sha512-ShOFe2PURXGvRS5OrgmOLZOCwDTD7dEBVt0tMpFPKb9AsvqXKCRGM8QgKrUbRbJYFXScHvDPpGRd28rYidC0tA==} engines: {node: '>=14'} peerDependencies: '@nuxt/kit': '*' - vite: ^6.0.0 || ^7.0.0-0 + vite: ^6.0.0 || ^7.0.0-0 || ^8.0.0-0 peerDependenciesMeta: '@nuxt/kit': optional: true - vite-plugin-vue-tracer@1.3.0: - resolution: {integrity: sha512-Cgfce6VikzOw5MUJTpeg50s5rRjzU1Vr61ZjuHunVVHLjZZ5AUlgyExHthZ3r59vtoz9W2rDt23FYG81avYBKw==} + vite-plugin-vue-tracer@1.4.0: + resolution: {integrity: sha512-0tQCjCqZWVSK6UeRW9S4ABbf47lKQ68zvrT2FNvZmiL+alDydCVyH/T3Jlfbdc3T3C2Iuyyl5aVsMbF8IQIoxA==} peerDependencies: - vite: ^6.0.0 || ^7.0.0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 vue: ^3.5.0 - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + vite@7.3.5: + resolution: {integrity: sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -5673,9 +5789,6 @@ packages: yaml: optional: true - vscode-uri@3.1.0: - resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} - vue-bundle-renderer@2.2.0: resolution: {integrity: sha512-sz/0WEdYH1KfaOm0XaBmRZOWgYTEvUDt6yPYaUzl4E52qzgWLlknaPPTTZmp6benaPTlQAI/hN1x3tAzZygycg==} @@ -5688,19 +5801,20 @@ packages: echarts: ^6.0.0 vue: ^3.3.0 - vue-i18n@11.3.0: - resolution: {integrity: sha512-1J+xDfDJTLhDxElkd3+XUhT7FYSZd2b8pa7IRKGxhWH/8yt6PTvi3xmWhGwhYT5EaXdatui11pF2R6tL73/zPA==} - engines: {node: '>= 16'} + vue-i18n@11.4.5: + resolution: {integrity: sha512-rm8YJ6RpjOrkcgS2GLrZwLvs/VbhxbTSuEspbyXDo233+fPK0OMFNLOj3fdQYVKdOgcpSfLW91JhbqgpkkcBWA==} + engines: {node: '>= 22'} peerDependencies: vue: ^3.0.0 - vue-router@5.0.4: - resolution: {integrity: sha512-lCqDLCI2+fKVRl2OzXuzdSWmxXFLQRxQbmHugnRpTMyYiT+hNaycV0faqG5FBHDXoYrZ6MQcX87BvbY8mQ20Bg==} + vue-router@5.1.0: + resolution: {integrity: sha512-HAbiLzLEHQwxPgvsbOJDAwtavszEgLwri6XfyrsPECIFez8+59xc9LofWVdc/HEaSRT822lJ8H9Ns38VVond5g==} peerDependencies: '@pinia/colada': '>=0.21.2' - '@vue/compiler-sfc': ^3.5.17 + '@vue/compiler-sfc': ^3.5.34 pinia: ^3.0.4 - vue: ^3.5.0 + vite: ^7.0.0 || ^8.0.0 + vue: ^3.5.34 peerDependenciesMeta: '@pinia/colada': optional: true @@ -5708,9 +5822,11 @@ packages: optional: true pinia: optional: true + vite: + optional: true - vue@3.5.35: - resolution: {integrity: sha512-cx89fnr+0kVGHiNFG6y6s0bdjypJRFNZn6x3WPstNdQR1bi1mbB7h4v5IBGTsPJU3nK1+0Iqj3Zf+hZWMieR4Q==} + vue@3.5.38: + resolution: {integrity: sha512-vAMKHfImQlYSy0C+PBue4s3ERZ2xGKfgZg5GXAsLInq1dyh2H78ILVP5sK0KPFPVW4kv+OGCIvBEondcjpZp7A==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -5744,17 +5860,17 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - workerd@1.20260526.1: - resolution: {integrity: sha512-IHzymht98p10JH1zzwdCpbViAqw97HrwKl7+KfZeASFMsYSrIsAULWdPn0LRC5FTUzBpamLNyKCCKxbgXHgRHQ==} + workerd@1.20260611.1: + resolution: {integrity: sha512-CS/640T7pIJ2HYX6x2DwKFGbcSckAWN3tgcdq+ptB6SaqjWUhlzIgA/YhPuwIU+/NnMnGpqOFX/hC18Oyge63w==} engines: {node: '>=16'} hasBin: true - wrangler@4.95.0: - resolution: {integrity: sha512-vgXzFVSCdUbeCadgVXvu8fK5tzNm8T9W+7lriyGWZMx0B1+CAdr4d8JTlZszHfgjypRAHmAxb49etZGIRD9pgg==} + wrangler@4.100.0: + resolution: {integrity: sha512-dSQO7DO+mD6XDzkVWIWBoGLO3yw+lacWSc/KhFvd7pgfpth+kX98qb5SGRHZN8ACCDhhfwzDLXwB6qHsIHhfBg==} engines: {node: '>=22.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20260526.1 + '@cloudflare/workers-types': ^4.20260611.1 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -5778,8 +5894,8 @@ packages: resolution: {integrity: sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==} engines: {node: ^18.17.0 || >=20.5.0} - ws@8.20.0: - resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + ws@8.20.1: + resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -5790,8 +5906,8 @@ packages: utf-8-validate: optional: true - ws@8.20.1: - resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -5802,10 +5918,6 @@ packages: utf-8-validate: optional: true - wsl-utils@0.1.0: - resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} - engines: {node: '>=18'} - wsl-utils@0.3.1: resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==} engines: {node: '>=20'} @@ -5825,8 +5937,8 @@ packages: resolution: {integrity: sha512-odxVsHAkZYYglR30aPYRY4nUGJnoJ2y1ww2HDvZALo0BDETv9kWbi16J52eHs+PWRNmF4ub6nZqfVOeesOvntg==} engines: {node: ^14.17.0 || >=16.0.0} - yaml@2.8.3: - resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} hasBin: true @@ -5871,8 +5983,8 @@ packages: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} - zrender@6.0.0: - resolution: {integrity: sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==} + zrender@6.1.0: + resolution: {integrity: sha512-oEGMDB6pOP2S6OwRR4PdVv610zrjnA3Bh+JnSG12fYJlBKjtNAoEb5fSUoCOOINlH96I2fU38/A2UpRKs67xYQ==} snapshots: @@ -5881,43 +5993,43 @@ snapshots: '@antfu/install-pkg@1.1.0': dependencies: package-manager-detector: 1.6.0 - tinyexec: 1.0.4 + tinyexec: 1.2.4 '@arco-design/color@0.4.0': dependencies: color: 3.2.1 - '@arco-design/web-vue@2.58.0(vue@3.5.35(typescript@5.9.3))': + '@arco-design/web-vue@2.58.0(vue@3.5.38(typescript@5.9.3))': dependencies: '@arco-design/color': 0.4.0 b-tween: 0.3.3 b-validate: 1.5.3 compute-scroll-into-view: 1.0.20 - dayjs: 1.11.20 + dayjs: 1.11.21 number-precision: 1.6.0 resize-observer-polyfill: 1.5.1 scroll-into-view-if-needed: 2.2.31 - vue: 3.5.35(typescript@5.9.3) + vue: 3.5.38(typescript@5.9.3) - '@babel/code-frame@7.29.0': + '@babel/code-frame@7.29.7': dependencies: - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.29.0': {} + '@babel/compat-data@7.29.7': {} - '@babel/core@7.29.0': + '@babel/core@7.29.7': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.29.2 - '@babel/parser': 7.29.2 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -5927,239 +6039,254 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.29.1': + '@babel/generator@7.29.7': dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/generator@8.0.0-rc.6': + dependencies: + '@babel/parser': 8.0.0-rc.6 + '@babel/types': 8.0.0-rc.6 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 + '@types/jsesc': 2.5.1 jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.27.3': + '@babel/helper-annotate-as-pure@7.29.7': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 - '@babel/helper-compilation-targets@7.28.6': + '@babel/helper-compilation-targets@7.29.7': dependencies: - '@babel/compat-data': 7.29.0 - '@babel/helper-validator-option': 7.27.1 + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 browserslist: 4.28.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': + '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.29.0 + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/helper-optimise-call-expression': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/traverse': 7.29.7 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-globals@7.28.0': {} + '@babel/helper-globals@7.29.7': {} - '@babel/helper-member-expression-to-functions@7.28.5': + '@babel/helper-member-expression-to-functions@7.29.7': dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.28.6': + '@babel/helper-module-imports@7.29.7': dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-optimise-call-expression@7.27.1': + '@babel/helper-optimise-call-expression@7.29.7': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 - '@babel/helper-plugin-utils@7.28.6': {} + '@babel/helper-plugin-utils@7.29.7': {} - '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': + '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.29.0 + '@babel/core': 7.29.7 + '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/helper-optimise-call-expression': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + '@babel/helper-skip-transparent-expression-wrappers@7.29.7': dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-string-parser@7.29.7': {} - '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-string-parser@8.0.0-rc.6': {} '@babel/helper-validator-identifier@7.29.7': {} - '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-validator-identifier@8.0.0-rc.6': {} - '@babel/helpers@7.29.2': - dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 + '@babel/helper-validator-option@7.29.7': {} - '@babel/parser@7.29.2': + '@babel/helpers@7.29.7': dependencies: - '@babel/types': 7.29.0 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 '@babel/parser@7.29.7': dependencies: '@babel/types': 7.29.7 - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': + '@babel/parser@8.0.0-rc.6': + dependencies: + '@babel/types': 8.0.0-rc.6 + + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/template@7.28.6': + '@babel/template@7.29.7': dependencies: - '@babel/code-frame': 7.29.0 + '@babel/code-frame': 7.29.7 '@babel/parser': 7.29.7 - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 - '@babel/traverse@7.29.0': + '@babel/traverse@7.29.7': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-globals': 7.28.0 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 '@babel/parser': 7.29.7 - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.29.0': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/types@7.29.7': dependencies: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@bomb.sh/tab@0.0.14(cac@6.7.14)(citty@0.2.2)': + '@babel/types@8.0.0-rc.6': + dependencies: + '@babel/helper-string-parser': 8.0.0-rc.6 + '@babel/helper-validator-identifier': 8.0.0-rc.6 + + '@bomb.sh/tab@0.0.15(cac@6.7.14)(citty@0.2.2)': optionalDependencies: cac: 6.7.14 citty: 0.2.2 - '@clack/core@1.2.0': + '@clack/core@1.4.1': dependencies: - fast-wrap-ansi: 0.1.6 + fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 - '@clack/prompts@1.2.0': + '@clack/prompts@1.5.1': dependencies: - '@clack/core': 1.2.0 - fast-string-width: 1.1.0 - fast-wrap-ansi: 0.1.6 + '@clack/core': 1.4.1 + fast-string-width: 3.0.2 + fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 '@cloudflare/kv-asset-handler@0.4.2': {} '@cloudflare/kv-asset-handler@0.5.0': {} - '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260526.1)': + '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260611.1)': dependencies: unenv: 2.0.0-rc.24 optionalDependencies: - workerd: 1.20260526.1 + workerd: 1.20260611.1 - '@cloudflare/workerd-darwin-64@1.20260526.1': + '@cloudflare/workerd-darwin-64@1.20260611.1': optional: true - '@cloudflare/workerd-darwin-arm64@1.20260526.1': + '@cloudflare/workerd-darwin-arm64@1.20260611.1': optional: true - '@cloudflare/workerd-linux-64@1.20260526.1': + '@cloudflare/workerd-linux-64@1.20260611.1': optional: true - '@cloudflare/workerd-linux-arm64@1.20260526.1': + '@cloudflare/workerd-linux-arm64@1.20260611.1': optional: true - '@cloudflare/workerd-windows-64@1.20260526.1': + '@cloudflare/workerd-windows-64@1.20260611.1': optional: true - '@colordx/core@5.0.1': {} + '@colordx/core@5.4.3': {} '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.1)': + '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.4)': dependencies: - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.4 - '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.1)': + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.4)': dependencies: - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.4 - '@dxup/nuxt@0.4.0(magicast@0.5.2)(typescript@5.9.3)': + '@dxup/nuxt@0.4.1(magicast@0.5.3)(typescript@5.9.3)': dependencies: '@dxup/unimport': 0.1.2 - '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@nuxt/kit': 4.4.8(magicast@0.5.3) chokidar: 5.0.0 pathe: 2.0.3 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 + optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - magicast '@dxup/unimport@0.1.2': {} - '@emnapi/core@1.9.1': + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.10.0': dependencies: - '@emnapi/wasi-threads': 1.2.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.9.1': + '@emnapi/runtime@1.11.1': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.2.0': + '@emnapi/wasi-threads@1.2.1': dependencies: tslib: 2.8.1 optional: true @@ -6173,7 +6300,10 @@ snapshots: '@esbuild/aix-ppc64@0.27.3': optional: true - '@esbuild/aix-ppc64@0.27.5': + '@esbuild/aix-ppc64@0.27.7': + optional: true + + '@esbuild/aix-ppc64@0.28.1': optional: true '@esbuild/android-arm64@0.23.1': @@ -6185,7 +6315,10 @@ snapshots: '@esbuild/android-arm64@0.27.3': optional: true - '@esbuild/android-arm64@0.27.5': + '@esbuild/android-arm64@0.27.7': + optional: true + + '@esbuild/android-arm64@0.28.1': optional: true '@esbuild/android-arm@0.23.1': @@ -6197,7 +6330,10 @@ snapshots: '@esbuild/android-arm@0.27.3': optional: true - '@esbuild/android-arm@0.27.5': + '@esbuild/android-arm@0.27.7': + optional: true + + '@esbuild/android-arm@0.28.1': optional: true '@esbuild/android-x64@0.23.1': @@ -6209,7 +6345,10 @@ snapshots: '@esbuild/android-x64@0.27.3': optional: true - '@esbuild/android-x64@0.27.5': + '@esbuild/android-x64@0.27.7': + optional: true + + '@esbuild/android-x64@0.28.1': optional: true '@esbuild/darwin-arm64@0.23.1': @@ -6221,7 +6360,10 @@ snapshots: '@esbuild/darwin-arm64@0.27.3': optional: true - '@esbuild/darwin-arm64@0.27.5': + '@esbuild/darwin-arm64@0.27.7': + optional: true + + '@esbuild/darwin-arm64@0.28.1': optional: true '@esbuild/darwin-x64@0.23.1': @@ -6233,7 +6375,10 @@ snapshots: '@esbuild/darwin-x64@0.27.3': optional: true - '@esbuild/darwin-x64@0.27.5': + '@esbuild/darwin-x64@0.27.7': + optional: true + + '@esbuild/darwin-x64@0.28.1': optional: true '@esbuild/freebsd-arm64@0.23.1': @@ -6245,7 +6390,10 @@ snapshots: '@esbuild/freebsd-arm64@0.27.3': optional: true - '@esbuild/freebsd-arm64@0.27.5': + '@esbuild/freebsd-arm64@0.27.7': + optional: true + + '@esbuild/freebsd-arm64@0.28.1': optional: true '@esbuild/freebsd-x64@0.23.1': @@ -6257,7 +6405,10 @@ snapshots: '@esbuild/freebsd-x64@0.27.3': optional: true - '@esbuild/freebsd-x64@0.27.5': + '@esbuild/freebsd-x64@0.27.7': + optional: true + + '@esbuild/freebsd-x64@0.28.1': optional: true '@esbuild/linux-arm64@0.23.1': @@ -6269,7 +6420,10 @@ snapshots: '@esbuild/linux-arm64@0.27.3': optional: true - '@esbuild/linux-arm64@0.27.5': + '@esbuild/linux-arm64@0.27.7': + optional: true + + '@esbuild/linux-arm64@0.28.1': optional: true '@esbuild/linux-arm@0.23.1': @@ -6281,7 +6435,10 @@ snapshots: '@esbuild/linux-arm@0.27.3': optional: true - '@esbuild/linux-arm@0.27.5': + '@esbuild/linux-arm@0.27.7': + optional: true + + '@esbuild/linux-arm@0.28.1': optional: true '@esbuild/linux-ia32@0.23.1': @@ -6293,7 +6450,10 @@ snapshots: '@esbuild/linux-ia32@0.27.3': optional: true - '@esbuild/linux-ia32@0.27.5': + '@esbuild/linux-ia32@0.27.7': + optional: true + + '@esbuild/linux-ia32@0.28.1': optional: true '@esbuild/linux-loong64@0.23.1': @@ -6305,7 +6465,10 @@ snapshots: '@esbuild/linux-loong64@0.27.3': optional: true - '@esbuild/linux-loong64@0.27.5': + '@esbuild/linux-loong64@0.27.7': + optional: true + + '@esbuild/linux-loong64@0.28.1': optional: true '@esbuild/linux-mips64el@0.23.1': @@ -6317,7 +6480,10 @@ snapshots: '@esbuild/linux-mips64el@0.27.3': optional: true - '@esbuild/linux-mips64el@0.27.5': + '@esbuild/linux-mips64el@0.27.7': + optional: true + + '@esbuild/linux-mips64el@0.28.1': optional: true '@esbuild/linux-ppc64@0.23.1': @@ -6329,7 +6495,10 @@ snapshots: '@esbuild/linux-ppc64@0.27.3': optional: true - '@esbuild/linux-ppc64@0.27.5': + '@esbuild/linux-ppc64@0.27.7': + optional: true + + '@esbuild/linux-ppc64@0.28.1': optional: true '@esbuild/linux-riscv64@0.23.1': @@ -6341,7 +6510,10 @@ snapshots: '@esbuild/linux-riscv64@0.27.3': optional: true - '@esbuild/linux-riscv64@0.27.5': + '@esbuild/linux-riscv64@0.27.7': + optional: true + + '@esbuild/linux-riscv64@0.28.1': optional: true '@esbuild/linux-s390x@0.23.1': @@ -6353,7 +6525,10 @@ snapshots: '@esbuild/linux-s390x@0.27.3': optional: true - '@esbuild/linux-s390x@0.27.5': + '@esbuild/linux-s390x@0.27.7': + optional: true + + '@esbuild/linux-s390x@0.28.1': optional: true '@esbuild/linux-x64@0.23.1': @@ -6365,7 +6540,10 @@ snapshots: '@esbuild/linux-x64@0.27.3': optional: true - '@esbuild/linux-x64@0.27.5': + '@esbuild/linux-x64@0.27.7': + optional: true + + '@esbuild/linux-x64@0.28.1': optional: true '@esbuild/netbsd-arm64@0.25.12': @@ -6374,7 +6552,10 @@ snapshots: '@esbuild/netbsd-arm64@0.27.3': optional: true - '@esbuild/netbsd-arm64@0.27.5': + '@esbuild/netbsd-arm64@0.27.7': + optional: true + + '@esbuild/netbsd-arm64@0.28.1': optional: true '@esbuild/netbsd-x64@0.23.1': @@ -6386,7 +6567,10 @@ snapshots: '@esbuild/netbsd-x64@0.27.3': optional: true - '@esbuild/netbsd-x64@0.27.5': + '@esbuild/netbsd-x64@0.27.7': + optional: true + + '@esbuild/netbsd-x64@0.28.1': optional: true '@esbuild/openbsd-arm64@0.23.1': @@ -6398,7 +6582,10 @@ snapshots: '@esbuild/openbsd-arm64@0.27.3': optional: true - '@esbuild/openbsd-arm64@0.27.5': + '@esbuild/openbsd-arm64@0.27.7': + optional: true + + '@esbuild/openbsd-arm64@0.28.1': optional: true '@esbuild/openbsd-x64@0.23.1': @@ -6410,7 +6597,10 @@ snapshots: '@esbuild/openbsd-x64@0.27.3': optional: true - '@esbuild/openbsd-x64@0.27.5': + '@esbuild/openbsd-x64@0.27.7': + optional: true + + '@esbuild/openbsd-x64@0.28.1': optional: true '@esbuild/openharmony-arm64@0.25.12': @@ -6419,7 +6609,10 @@ snapshots: '@esbuild/openharmony-arm64@0.27.3': optional: true - '@esbuild/openharmony-arm64@0.27.5': + '@esbuild/openharmony-arm64@0.27.7': + optional: true + + '@esbuild/openharmony-arm64@0.28.1': optional: true '@esbuild/sunos-x64@0.23.1': @@ -6431,7 +6624,10 @@ snapshots: '@esbuild/sunos-x64@0.27.3': optional: true - '@esbuild/sunos-x64@0.27.5': + '@esbuild/sunos-x64@0.27.7': + optional: true + + '@esbuild/sunos-x64@0.28.1': optional: true '@esbuild/win32-arm64@0.23.1': @@ -6443,7 +6639,10 @@ snapshots: '@esbuild/win32-arm64@0.27.3': optional: true - '@esbuild/win32-arm64@0.27.5': + '@esbuild/win32-arm64@0.27.7': + optional: true + + '@esbuild/win32-arm64@0.28.1': optional: true '@esbuild/win32-ia32@0.23.1': @@ -6455,7 +6654,10 @@ snapshots: '@esbuild/win32-ia32@0.27.3': optional: true - '@esbuild/win32-ia32@0.27.5': + '@esbuild/win32-ia32@0.27.7': + optional: true + + '@esbuild/win32-ia32@0.28.1': optional: true '@esbuild/win32-x64@0.23.1': @@ -6467,12 +6669,15 @@ snapshots: '@esbuild/win32-x64@0.27.3': optional: true - '@esbuild/win32-x64@0.27.5': + '@esbuild/win32-x64@0.27.7': + optional: true + + '@esbuild/win32-x64@0.28.1': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.7.0))': dependencies: - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -6535,26 +6740,26 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@iconify-json/flag@1.2.11': + '@iconify-json/flag@1.2.12': dependencies: '@iconify/types': 2.0.0 - '@iconify/collections@1.0.668': + '@iconify/collections@1.0.696': dependencies: '@iconify/types': 2.0.0 '@iconify/types@2.0.0': {} - '@iconify/utils@3.1.0': + '@iconify/utils@3.1.3': dependencies: '@antfu/install-pkg': 1.1.0 '@iconify/types': 2.0.0 - mlly: 1.8.2 + import-meta-resolve: 4.2.0 - '@iconify/vue@5.0.0(vue@3.5.35(typescript@5.9.3))': + '@iconify/vue@5.0.1(vue@3.5.38(typescript@5.9.3))': dependencies: '@iconify/types': 2.0.0 - vue: 3.5.35(typescript@5.9.3) + vue: 3.5.38(typescript@5.9.3) '@img/colour@1.1.0': {} @@ -6640,7 +6845,7 @@ snapshots: '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.9.1 + '@emnapi/runtime': 1.11.1 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -6652,11 +6857,11 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true - '@intlify/bundle-utils@11.0.7(vue-i18n@11.3.0(vue@3.5.35(typescript@5.9.3)))': + '@intlify/bundle-utils@11.2.3(vue-i18n@11.4.5(vue@3.5.38(typescript@5.9.3)))': dependencies: - '@intlify/message-compiler': 11.3.0 - '@intlify/shared': 11.3.0 - acorn: 8.16.0 + '@intlify/message-compiler': 11.4.5 + '@intlify/shared': 11.4.5 + acorn: 8.17.0 esbuild: 0.25.12 escodegen: 2.1.0 estree-walker: 2.0.2 @@ -6664,53 +6869,54 @@ snapshots: source-map-js: 1.2.1 yaml-eslint-parser: 1.3.2 optionalDependencies: - vue-i18n: 11.3.0(vue@3.5.35(typescript@5.9.3)) + vue-i18n: 11.4.5(vue@3.5.38(typescript@5.9.3)) - '@intlify/core-base@11.3.0': + '@intlify/core-base@11.4.5': dependencies: - '@intlify/devtools-types': 11.3.0 - '@intlify/message-compiler': 11.3.0 - '@intlify/shared': 11.3.0 + '@intlify/devtools-types': 11.4.5 + '@intlify/message-compiler': 11.4.5 + '@intlify/shared': 11.4.5 - '@intlify/core@11.3.0': + '@intlify/core@11.4.5': dependencies: - '@intlify/core-base': 11.3.0 - '@intlify/shared': 11.3.0 + '@intlify/core-base': 11.4.5 + '@intlify/shared': 11.4.5 - '@intlify/devtools-types@11.3.0': + '@intlify/devtools-types@11.4.5': dependencies: - '@intlify/core-base': 11.3.0 - '@intlify/shared': 11.3.0 + '@intlify/core-base': 11.4.5 + '@intlify/shared': 11.4.5 '@intlify/h3@0.7.4': dependencies: - '@intlify/core': 11.3.0 + '@intlify/core': 11.4.5 '@intlify/utils': 0.13.0 - '@intlify/message-compiler@11.3.0': + '@intlify/message-compiler@11.4.5': dependencies: - '@intlify/shared': 11.3.0 + '@intlify/shared': 11.4.5 source-map-js: 1.2.1 - '@intlify/shared@11.3.0': {} + '@intlify/shared@11.4.5': {} - '@intlify/unplugin-vue-i18n@11.0.7(@vue/compiler-dom@3.5.35)(eslint@9.39.4(jiti@2.6.1))(rollup@4.60.1)(typescript@5.9.3)(vue-i18n@11.3.0(vue@3.5.35(typescript@5.9.3)))(vue@3.5.35(typescript@5.9.3))': + '@intlify/unplugin-vue-i18n@11.2.3(@vue/compiler-dom@3.5.38)(eslint@9.39.4(jiti@2.7.0))(rollup@4.61.1)(typescript@5.9.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(vue-i18n@11.4.5(vue@3.5.38(typescript@5.9.3)))(vue@3.5.38(typescript@5.9.3))': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) - '@intlify/bundle-utils': 11.0.7(vue-i18n@11.3.0(vue@3.5.35(typescript@5.9.3))) - '@intlify/shared': 11.3.0 - '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.3.0)(@vue/compiler-dom@3.5.35)(vue-i18n@11.3.0(vue@3.5.35(typescript@5.9.3)))(vue@3.5.35(typescript@5.9.3)) - '@rollup/pluginutils': 5.3.0(rollup@4.60.1) - '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) + '@intlify/bundle-utils': 11.2.3(vue-i18n@11.4.5(vue@3.5.38(typescript@5.9.3))) + '@intlify/shared': 11.4.5 + '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.4.5)(@vue/compiler-dom@3.5.38)(vue-i18n@11.4.5(vue@3.5.38(typescript@5.9.3)))(vue@3.5.38(typescript@5.9.3)) + '@rollup/pluginutils': 5.4.0(rollup@4.61.1) + '@typescript-eslint/scope-manager': 8.61.0 + '@typescript-eslint/typescript-estree': 8.61.0(typescript@5.9.3) debug: 4.4.3 fast-glob: 3.3.3 pathe: 2.0.3 picocolors: 1.1.1 unplugin: 2.3.11 - vue: 3.5.35(typescript@5.9.3) + vue: 3.5.38(typescript@5.9.3) optionalDependencies: - vue-i18n: 11.3.0(vue@3.5.35(typescript@5.9.3)) + vite: 7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0) + vue-i18n: 11.4.5(vue@3.5.38(typescript@5.9.3)) transitivePeerDependencies: - '@vue/compiler-dom' - eslint @@ -6722,16 +6928,16 @@ snapshots: '@intlify/utils@0.14.1': {} - '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.3.0)(@vue/compiler-dom@3.5.35)(vue-i18n@11.3.0(vue@3.5.35(typescript@5.9.3)))(vue@3.5.35(typescript@5.9.3))': + '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.4.5)(@vue/compiler-dom@3.5.38)(vue-i18n@11.4.5(vue@3.5.38(typescript@5.9.3)))(vue@3.5.38(typescript@5.9.3))': dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.7 optionalDependencies: - '@intlify/shared': 11.3.0 - '@vue/compiler-dom': 3.5.35 - vue: 3.5.35(typescript@5.9.3) - vue-i18n: 11.3.0(vue@3.5.35(typescript@5.9.3)) + '@intlify/shared': 11.4.5 + '@vue/compiler-dom': 3.5.38 + vue: 3.5.38(typescript@5.9.3) + vue-i18n: 11.4.5(vue@3.5.38(typescript@5.9.3)) - '@ioredis/commands@1.5.1': {} + '@ioredis/commands@1.10.0': {} '@isaacs/cliui@8.0.2': dependencies: @@ -6800,23 +7006,23 @@ snapshots: https-proxy-agent: 7.0.6 node-fetch: 2.7.0 nopt: 8.1.0 - semver: 7.7.4 - tar: 7.5.13 + semver: 7.8.4 + tar: 7.5.16 transitivePeerDependencies: - encoding - supports-color - '@miyaneee/rollup-plugin-json5@1.2.0(rollup@4.60.1)': + '@miyaneee/rollup-plugin-json5@1.2.0(rollup@4.61.1)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.60.1) + '@rollup/pluginutils': 5.4.0(rollup@4.61.1) json5: 2.2.3 - rollup: 4.60.1 + rollup: 4.61.1 - '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: - '@emnapi/core': 1.9.1 - '@emnapi/runtime': 1.9.1 - '@tybys/wasm-util': 0.10.1 + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 optional: true '@netlify/blobs@9.1.2': @@ -6858,38 +7064,38 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@nuxt/cli@3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2)': + '@nuxt/cli@3.35.2(@nuxt/schema@4.4.8)(cac@6.7.14)(magicast@0.5.3)': dependencies: - '@bomb.sh/tab': 0.0.14(cac@6.7.14)(citty@0.2.2) - '@clack/prompts': 1.2.0 - c12: 3.3.4(magicast@0.5.2) + '@bomb.sh/tab': 0.0.15(cac@6.7.14)(citty@0.2.2) + '@clack/prompts': 1.5.1 + c12: 3.3.4(magicast@0.5.3) citty: 0.2.2 confbox: 0.2.4 consola: 3.4.2 debug: 4.4.3 - defu: 6.1.6 + defu: 6.1.7 exsolve: 1.0.8 - fuse.js: 7.1.0 + fuse.js: 7.4.2 fzf: 0.5.2 - giget: 3.2.0 - jiti: 2.6.1 - listhen: 1.9.1(srvx@0.11.14) - nypm: 0.6.5 + giget: 3.3.0 + jiti: 2.7.0 + listhen: 1.10.0(srvx@0.11.16) + nypm: 0.6.7 ofetch: 1.5.1 ohash: 2.0.11 pathe: 2.0.3 perfect-debounce: 2.1.0 - pkg-types: 2.3.0 + pkg-types: 2.3.1 scule: 1.3.0 - semver: 7.7.4 - srvx: 0.11.14 - std-env: 3.10.0 - tinyclip: 0.1.12 - tinyexec: 1.0.4 - ufo: 1.6.3 + semver: 7.8.4 + srvx: 0.11.16 + std-env: 4.1.0 + tinyclip: 0.1.14 + tinyexec: 1.2.4 + ufo: 1.6.4 youch: 4.1.1 optionalDependencies: - '@nuxt/schema': 4.4.2 + '@nuxt/schema': 4.4.8 transitivePeerDependencies: - cac - commander @@ -6898,149 +7104,148 @@ snapshots: '@nuxt/devalue@2.0.2': {} - '@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))': + '@nuxt/devtools-kit@3.2.4(magicast@0.5.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))': dependencies: - '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@nuxt/kit': 4.4.8(magicast@0.5.3) execa: 8.0.1 - vite: 7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) + vite: 7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0) transitivePeerDependencies: - magicast '@nuxt/devtools-wizard@3.2.4': dependencies: - '@clack/prompts': 1.2.0 + '@clack/prompts': 1.5.1 consola: 3.4.2 diff: 8.0.4 execa: 8.0.1 - magicast: 0.5.2 + magicast: 0.5.3 pathe: 2.0.3 - pkg-types: 2.3.0 - semver: 7.7.4 + pkg-types: 2.3.1 + semver: 7.8.4 - '@nuxt/devtools@3.2.4(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3))': + '@nuxt/devtools@3.2.4(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.38(typescript@5.9.3))': dependencies: - '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3)) + '@nuxt/devtools-kit': 3.2.4(magicast@0.5.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0)) '@nuxt/devtools-wizard': 3.2.4 - '@nuxt/kit': 4.4.2(magicast@0.5.2) - '@vue/devtools-core': 8.1.1(vue@3.5.35(typescript@5.9.3)) - '@vue/devtools-kit': 8.1.1 + '@nuxt/kit': 4.4.8(magicast@0.5.3) + '@vue/devtools-core': 8.1.2(vue@3.5.38(typescript@5.9.3)) + '@vue/devtools-kit': 8.1.2 birpc: 4.0.0 consola: 3.4.2 destr: 2.0.5 error-stack-parser-es: 1.0.5 execa: 8.0.1 - fast-npm-meta: 1.4.2 + fast-npm-meta: 1.5.1 get-port-please: 3.2.0 - hookable: 6.1.0 + hookable: 6.1.1 image-meta: 0.2.2 is-installed-globally: 1.0.0 - launch-editor: 2.13.2 - local-pkg: 1.1.2 - magicast: 0.5.2 - nypm: 0.6.5 + launch-editor: 2.14.1 + local-pkg: 1.2.1 + magicast: 0.5.3 + nypm: 0.6.7 ohash: 2.0.11 pathe: 2.0.3 perfect-debounce: 2.1.0 - pkg-types: 2.3.0 - semver: 7.7.4 - simple-git: 3.33.0 + pkg-types: 2.3.1 + semver: 7.8.4 + simple-git: 3.36.0 sirv: 3.0.2 structured-clone-es: 2.0.0 - tinyglobby: 0.2.15 - vite: 7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) - vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3)) - vite-plugin-vue-tracer: 1.3.0(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3)) + tinyglobby: 0.2.17 + vite: 7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0) + vite-plugin-inspect: 11.4.1(@nuxt/kit@4.4.8(magicast@0.5.3))(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0)) + vite-plugin-vue-tracer: 1.4.0(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.38(typescript@5.9.3)) which: 6.0.1 - ws: 8.20.0 + ws: 8.21.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - vue - '@nuxt/icon@2.2.1(magicast@0.5.2)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3))': + '@nuxt/icon@2.2.3(magicast@0.5.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.38(typescript@5.9.3))': dependencies: - '@iconify/collections': 1.0.668 + '@iconify/collections': 1.0.696 '@iconify/types': 2.0.0 - '@iconify/utils': 3.1.0 - '@iconify/vue': 5.0.0(vue@3.5.35(typescript@5.9.3)) - '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3)) - '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@iconify/utils': 3.1.3 + '@iconify/vue': 5.0.1(vue@3.5.38(typescript@5.9.3)) + '@nuxt/devtools-kit': 3.2.4(magicast@0.5.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0)) + '@nuxt/kit': 4.4.8(magicast@0.5.3) consola: 3.4.2 - local-pkg: 1.1.2 + local-pkg: 1.2.1 mlly: 1.8.2 ohash: 2.0.11 - pathe: 2.0.3 picomatch: 4.0.4 - std-env: 3.10.0 - tinyglobby: 0.2.15 + std-env: 4.1.0 + tinyglobby: 0.2.17 + ufo: 1.6.4 transitivePeerDependencies: - magicast - vite - vue - '@nuxt/kit@3.21.2(magicast@0.5.2)': + '@nuxt/kit@3.21.8(magicast@0.5.3)': dependencies: - c12: 3.3.4(magicast@0.5.2) + c12: 3.3.4(magicast@0.5.3) consola: 3.4.2 - defu: 6.1.6 + defu: 6.1.7 destr: 2.0.5 errx: 0.1.0 exsolve: 1.0.8 ignore: 7.0.5 - jiti: 2.6.1 + jiti: 2.7.0 klona: 2.0.6 knitwork: 1.3.0 mlly: 1.8.2 ohash: 2.0.11 pathe: 2.0.3 - pkg-types: 2.3.0 + pkg-types: 2.3.1 rc9: 3.0.1 scule: 1.3.0 - semver: 7.7.4 - tinyglobby: 0.2.15 - ufo: 1.6.3 + semver: 7.8.4 + tinyglobby: 0.2.17 + ufo: 1.6.4 unctx: 2.5.0 untyped: 2.0.0 transitivePeerDependencies: - magicast - '@nuxt/kit@4.4.2(magicast@0.5.2)': + '@nuxt/kit@4.4.8(magicast@0.5.3)': dependencies: - c12: 3.3.4(magicast@0.5.2) + c12: 3.3.4(magicast@0.5.3) consola: 3.4.2 - defu: 6.1.6 + defu: 6.1.7 destr: 2.0.5 errx: 0.1.0 exsolve: 1.0.8 ignore: 7.0.5 - jiti: 2.6.1 + jiti: 2.7.0 klona: 2.0.6 mlly: 1.8.2 ohash: 2.0.11 pathe: 2.0.3 - pkg-types: 2.3.0 + pkg-types: 2.3.1 rc9: 3.0.1 scule: 1.3.0 - semver: 7.7.4 - tinyglobby: 0.2.15 - ufo: 1.6.3 + semver: 7.8.4 + tinyglobby: 0.2.17 + ufo: 1.6.4 unctx: 2.5.0 untyped: 2.0.0 transitivePeerDependencies: - magicast - '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(srvx@0.11.14)(typescript@5.9.3)': + '@nuxt/nitro-server@4.4.8(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.11.1)(magicast@0.5.3)(nuxt@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.38)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.7.0))(ioredis@5.11.1)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.61.1))(rollup@4.61.1)(srvx@0.11.16)(terser@5.48.0)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(yaml@2.9.0))(oxc-parser@0.133.0)(srvx@0.11.16)(typescript@5.9.3)': dependencies: - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@nuxt/devalue': 2.0.2 - '@nuxt/kit': 4.4.2(magicast@0.5.2) - '@unhead/vue': 2.1.12(vue@3.5.35(typescript@5.9.3)) - '@vue/shared': 3.5.31 + '@nuxt/kit': 4.4.8(magicast@0.5.3) + '@unhead/vue': 2.1.15(vue@3.5.38(typescript@5.9.3)) + '@vue/shared': 3.5.38 consola: 3.4.2 - defu: 6.1.6 + defu: 6.1.7 destr: 2.0.5 - devalue: 5.6.4 + devalue: 5.8.1 errx: 0.1.0 escape-string-regexp: 5.0.0 exsolve: 1.0.8 @@ -7048,20 +7253,21 @@ snapshots: impound: 1.1.5 klona: 2.0.6 mocked-exports: 0.1.1 - nitropack: 2.13.3(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(srvx@0.11.14) - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3) - nypm: 0.6.5 + nitropack: 2.13.4(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(oxc-parser@0.133.0)(srvx@0.11.16) + nuxt: 4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.38)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.7.0))(ioredis@5.11.1)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.61.1))(rollup@4.61.1)(srvx@0.11.16)(terser@5.48.0)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(yaml@2.9.0) + nypm: 0.6.7 ohash: 2.0.11 pathe: 2.0.3 - pkg-types: 2.3.0 rou3: 0.8.1 - std-env: 4.0.0 - ufo: 1.6.3 + std-env: 4.1.0 + ufo: 1.6.4 unctx: 2.5.0 - unstorage: 1.17.5(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.10.1) - vue: 3.5.35(typescript@5.9.3) + unstorage: 1.17.5(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.11.1) + vue: 3.5.38(typescript@5.9.3) vue-bundle-renderer: 2.2.0 vue-devtools-stub: 0.1.0 + optionalDependencies: + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -7069,7 +7275,6 @@ snapshots: - '@azure/identity' - '@azure/keyvault-secrets' - '@azure/storage-blob' - - '@babel/core' - '@capacitor/preferences' - '@deno/kv' - '@electric-sql/pglite' @@ -7091,6 +7296,7 @@ snapshots: - ioredis - magicast - mysql2 + - oxc-parser - react-native-b4a - rolldown - sqlite3 @@ -7100,58 +7306,58 @@ snapshots: - uploadthing - xml2js - '@nuxt/schema@4.4.2': + '@nuxt/schema@4.4.8': dependencies: - '@vue/shared': 3.5.31 - defu: 6.1.6 + '@vue/shared': 3.5.38 + defu: 6.1.7 pathe: 2.0.3 - pkg-types: 2.3.0 - std-env: 4.0.0 + pkg-types: 2.3.1 + std-env: 4.1.0 - '@nuxt/telemetry@2.8.0(@nuxt/kit@4.4.2(magicast@0.5.2))': + '@nuxt/telemetry@2.8.0(@nuxt/kit@4.4.8(magicast@0.5.3))': dependencies: - '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@nuxt/kit': 4.4.8(magicast@0.5.3) citty: 0.2.2 consola: 3.4.2 ofetch: 2.0.0-alpha.3 rc9: 3.0.1 - std-env: 4.0.0 + std-env: 4.1.0 - '@nuxt/vite-builder@4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@22.15.19)(eslint@9.39.4(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vue@3.5.35(typescript@5.9.3))(yaml@2.8.3)': + '@nuxt/vite-builder@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@types/node@22.15.19)(eslint@9.39.4(jiti@2.7.0))(magicast@0.5.3)(nuxt@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.38)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.7.0))(ioredis@5.11.1)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.61.1))(rollup@4.61.1)(srvx@0.11.16)(terser@5.48.0)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(yaml@2.9.0))(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.61.1))(rollup@4.61.1)(terser@5.48.0)(tsx@4.19.2)(typescript@5.9.3)(vue@3.5.38(typescript@5.9.3))(yaml@2.9.0)': dependencies: - '@nuxt/kit': 4.4.2(magicast@0.5.2) - '@rollup/plugin-replace': 6.0.3(rollup@4.60.1) - '@vitejs/plugin-vue': 6.0.5(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3)) - '@vitejs/plugin-vue-jsx': 5.1.5(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3)) - autoprefixer: 10.4.27(postcss@8.5.8) + '@nuxt/kit': 4.4.8(magicast@0.5.3) + '@rollup/plugin-replace': 6.0.3(rollup@4.61.1) + '@vitejs/plugin-vue': 6.0.7(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.38(typescript@5.9.3)) + '@vitejs/plugin-vue-jsx': 5.1.5(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.38(typescript@5.9.3)) + autoprefixer: 10.5.0(postcss@8.5.15) consola: 3.4.2 - cssnano: 7.1.4(postcss@8.5.8) - defu: 6.1.6 + cssnano: 8.0.2(postcss@8.5.15) + defu: 6.1.7 escape-string-regexp: 5.0.0 exsolve: 1.0.8 get-port-please: 3.2.0 - jiti: 2.6.1 + jiti: 2.7.0 knitwork: 1.3.0 magic-string: 0.30.21 mlly: 1.8.2 mocked-exports: 0.1.1 - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3) - nypm: 0.6.5 + nuxt: 4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.38)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.7.0))(ioredis@5.11.1)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.61.1))(rollup@4.61.1)(srvx@0.11.16)(terser@5.48.0)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(yaml@2.9.0) + nypm: 0.6.7 pathe: 2.0.3 - pkg-types: 2.3.0 - postcss: 8.5.8 - seroval: 1.5.1 - std-env: 4.0.0 - ufo: 1.6.3 + pkg-types: 2.3.1 + postcss: 8.5.15 + seroval: 1.5.4 + std-env: 4.1.0 + ufo: 1.6.4 unenv: 2.0.0-rc.24 - vite: 7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) - vite-node: 5.3.0(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) - vite-plugin-checker: 0.12.0(eslint@9.39.4(jiti@2.6.1))(optionator@0.9.4)(oxlint@1.56.0)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3)) - vue: 3.5.35(typescript@5.9.3) + vite: 7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0) + vite-node: 5.3.0(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0) + vite-plugin-checker: 0.14.1(eslint@9.39.4(jiti@2.7.0))(optionator@0.9.4)(oxlint@1.56.0)(typescript@5.9.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0)) + vue: 3.5.38(typescript@5.9.3) vue-bundle-renderer: 2.2.0 optionalDependencies: - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) - rollup-plugin-visualizer: 7.0.1(rollup@4.60.1) + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) + rollup-plugin-visualizer: 7.0.1(rollup@4.61.1) transitivePeerDependencies: - '@biomejs/biome' - '@types/node' @@ -7172,50 +7378,47 @@ snapshots: - terser - tsx - typescript - - vls - - vti - vue-tsc - yaml - '@nuxtjs/color-mode@4.0.0(magicast@0.5.2)': + '@nuxtjs/color-mode@4.0.1(magicast@0.5.3)': dependencies: - '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@nuxt/kit': 4.4.8(magicast@0.5.3) exsolve: 1.0.8 pathe: 2.0.3 - pkg-types: 2.3.0 - semver: 7.7.4 + pkg-types: 2.3.1 + semver: 7.8.4 transitivePeerDependencies: - magicast - '@nuxtjs/i18n@10.2.4(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-dom@3.5.35)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@5.9.3)(vue@3.5.35(typescript@5.9.3))': + '@nuxtjs/i18n@10.4.0(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-dom@3.5.38)(db0@0.3.4)(eslint@9.39.4(jiti@2.7.0))(ioredis@5.11.1)(magicast@0.5.3)(rollup@4.61.1)(typescript@5.9.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.38(typescript@5.9.3))': dependencies: - '@intlify/core': 11.3.0 + '@intlify/core': 11.4.5 '@intlify/h3': 0.7.4 - '@intlify/shared': 11.3.0 - '@intlify/unplugin-vue-i18n': 11.0.7(@vue/compiler-dom@3.5.35)(eslint@9.39.4(jiti@2.6.1))(rollup@4.60.1)(typescript@5.9.3)(vue-i18n@11.3.0(vue@3.5.35(typescript@5.9.3)))(vue@3.5.35(typescript@5.9.3)) + '@intlify/shared': 11.4.5 + '@intlify/unplugin-vue-i18n': 11.2.3(@vue/compiler-dom@3.5.38)(eslint@9.39.4(jiti@2.7.0))(rollup@4.61.1)(typescript@5.9.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(vue-i18n@11.4.5(vue@3.5.38(typescript@5.9.3)))(vue@3.5.38(typescript@5.9.3)) '@intlify/utils': 0.14.1 - '@miyaneee/rollup-plugin-json5': 1.2.0(rollup@4.60.1) - '@nuxt/kit': 4.4.2(magicast@0.5.2) - '@rollup/plugin-yaml': 4.1.2(rollup@4.60.1) - '@vue/compiler-sfc': 3.5.31 - defu: 6.1.6 - devalue: 5.6.4 + '@miyaneee/rollup-plugin-json5': 1.2.0(rollup@4.61.1) + '@nuxt/kit': 4.4.8(magicast@0.5.3) + '@rollup/plugin-yaml': 4.1.2(rollup@4.61.1) + '@vue/compiler-sfc': 3.5.38 + defu: 6.1.7 + devalue: 5.8.1 h3: 1.15.11 knitwork: 1.3.0 magic-string: 0.30.21 mlly: 1.8.2 nuxt-define: 1.0.0 - ohash: 2.0.11 - oxc-parser: 0.112.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - oxc-transform: 0.112.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - oxc-walker: 0.7.0(oxc-parser@0.112.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)) + oxc-parser: 0.128.0 + oxc-transform: 0.128.0 + oxc-walker: 0.7.0(oxc-parser@0.128.0) pathe: 2.0.3 - ufo: 1.6.3 - unplugin: 2.3.11 + ufo: 1.6.4 + unplugin: 3.0.0 unrouting: 0.1.7 - unstorage: 1.17.5(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.10.1) - vue-i18n: 11.3.0(vue@3.5.35(typescript@5.9.3)) - vue-router: 5.0.4(@vue/compiler-sfc@3.5.31)(vue@3.5.35(typescript@5.9.3)) + unstorage: 1.17.5(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.11.1) + vue-i18n: 11.4.5(vue@3.5.38(typescript@5.9.3)) + vue-router: 5.1.0(@vue/compiler-sfc@3.5.38)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.38(typescript@5.9.3)) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -7225,8 +7428,6 @@ snapshots: - '@azure/storage-blob' - '@capacitor/preferences' - '@deno/kv' - - '@emnapi/core' - - '@emnapi/runtime' - '@netlify/blobs' - '@pinia/colada' - '@planetscale/database' @@ -7247,25 +7448,26 @@ snapshots: - supports-color - typescript - uploadthing + - vite - vue - '@nuxtjs/tailwindcss@6.14.0(magicast@0.5.2)(tsx@4.19.2)(yaml@2.8.3)': + '@nuxtjs/tailwindcss@6.14.0(magicast@0.5.3)(tsx@4.19.2)(yaml@2.9.0)': dependencies: - '@nuxt/kit': 3.21.2(magicast@0.5.2) - autoprefixer: 10.4.27(postcss@8.5.8) - c12: 3.3.4(magicast@0.5.2) + '@nuxt/kit': 3.21.8(magicast@0.5.3) + autoprefixer: 10.5.0(postcss@8.5.15) + c12: 3.3.4(magicast@0.5.3) consola: 3.4.2 - defu: 6.1.6 + defu: 6.1.7 h3: 1.15.11 klona: 2.0.6 ohash: 2.0.11 pathe: 2.0.3 - pkg-types: 2.3.0 - postcss: 8.5.8 - postcss-nesting: 13.0.2(postcss@8.5.8) - tailwind-config-viewer: 2.0.4(tailwindcss@3.4.19(tsx@4.19.2)(yaml@2.8.3)) - tailwindcss: 3.4.19(tsx@4.19.2)(yaml@2.8.3) - ufo: 1.6.3 + pkg-types: 2.3.1 + postcss: 8.5.15 + postcss-nesting: 13.0.2(postcss@8.5.15) + tailwind-config-viewer: 2.0.4(tailwindcss@3.4.19(tsx@4.19.2)(yaml@2.9.0)) + tailwindcss: 3.4.19(tsx@4.19.2)(yaml@2.9.0) + ufo: 1.6.4 unctx: 2.5.0 transitivePeerDependencies: - magicast @@ -7273,333 +7475,328 @@ snapshots: - tsx - yaml - '@oxc-minify/binding-android-arm-eabi@0.117.0': + '@oxc-minify/binding-android-arm-eabi@0.133.0': optional: true - '@oxc-minify/binding-android-arm64@0.117.0': + '@oxc-minify/binding-android-arm64@0.133.0': optional: true - '@oxc-minify/binding-darwin-arm64@0.117.0': + '@oxc-minify/binding-darwin-arm64@0.133.0': optional: true - '@oxc-minify/binding-darwin-x64@0.117.0': + '@oxc-minify/binding-darwin-x64@0.133.0': optional: true - '@oxc-minify/binding-freebsd-x64@0.117.0': + '@oxc-minify/binding-freebsd-x64@0.133.0': optional: true - '@oxc-minify/binding-linux-arm-gnueabihf@0.117.0': + '@oxc-minify/binding-linux-arm-gnueabihf@0.133.0': optional: true - '@oxc-minify/binding-linux-arm-musleabihf@0.117.0': + '@oxc-minify/binding-linux-arm-musleabihf@0.133.0': optional: true - '@oxc-minify/binding-linux-arm64-gnu@0.117.0': + '@oxc-minify/binding-linux-arm64-gnu@0.133.0': optional: true - '@oxc-minify/binding-linux-arm64-musl@0.117.0': + '@oxc-minify/binding-linux-arm64-musl@0.133.0': optional: true - '@oxc-minify/binding-linux-ppc64-gnu@0.117.0': + '@oxc-minify/binding-linux-ppc64-gnu@0.133.0': optional: true - '@oxc-minify/binding-linux-riscv64-gnu@0.117.0': + '@oxc-minify/binding-linux-riscv64-gnu@0.133.0': optional: true - '@oxc-minify/binding-linux-riscv64-musl@0.117.0': + '@oxc-minify/binding-linux-riscv64-musl@0.133.0': optional: true - '@oxc-minify/binding-linux-s390x-gnu@0.117.0': + '@oxc-minify/binding-linux-s390x-gnu@0.133.0': optional: true - '@oxc-minify/binding-linux-x64-gnu@0.117.0': + '@oxc-minify/binding-linux-x64-gnu@0.133.0': optional: true - '@oxc-minify/binding-linux-x64-musl@0.117.0': + '@oxc-minify/binding-linux-x64-musl@0.133.0': optional: true - '@oxc-minify/binding-openharmony-arm64@0.117.0': + '@oxc-minify/binding-openharmony-arm64@0.133.0': optional: true - '@oxc-minify/binding-wasm32-wasi@0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + '@oxc-minify/binding-wasm32-wasi@0.133.0': dependencies: - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@oxc-minify/binding-win32-arm64-msvc@0.117.0': + '@oxc-minify/binding-win32-arm64-msvc@0.133.0': optional: true - '@oxc-minify/binding-win32-ia32-msvc@0.117.0': + '@oxc-minify/binding-win32-ia32-msvc@0.133.0': optional: true - '@oxc-minify/binding-win32-x64-msvc@0.117.0': + '@oxc-minify/binding-win32-x64-msvc@0.133.0': optional: true - '@oxc-parser/binding-android-arm-eabi@0.112.0': + '@oxc-parser/binding-android-arm-eabi@0.128.0': optional: true - '@oxc-parser/binding-android-arm-eabi@0.117.0': + '@oxc-parser/binding-android-arm-eabi@0.133.0': optional: true - '@oxc-parser/binding-android-arm64@0.112.0': + '@oxc-parser/binding-android-arm64@0.128.0': optional: true - '@oxc-parser/binding-android-arm64@0.117.0': + '@oxc-parser/binding-android-arm64@0.133.0': optional: true - '@oxc-parser/binding-darwin-arm64@0.112.0': + '@oxc-parser/binding-darwin-arm64@0.128.0': optional: true - '@oxc-parser/binding-darwin-arm64@0.117.0': + '@oxc-parser/binding-darwin-arm64@0.133.0': optional: true - '@oxc-parser/binding-darwin-x64@0.112.0': + '@oxc-parser/binding-darwin-x64@0.128.0': optional: true - '@oxc-parser/binding-darwin-x64@0.117.0': + '@oxc-parser/binding-darwin-x64@0.133.0': optional: true - '@oxc-parser/binding-freebsd-x64@0.112.0': + '@oxc-parser/binding-freebsd-x64@0.128.0': optional: true - '@oxc-parser/binding-freebsd-x64@0.117.0': + '@oxc-parser/binding-freebsd-x64@0.133.0': optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.112.0': + '@oxc-parser/binding-linux-arm-gnueabihf@0.128.0': optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.117.0': + '@oxc-parser/binding-linux-arm-gnueabihf@0.133.0': optional: true - '@oxc-parser/binding-linux-arm-musleabihf@0.112.0': + '@oxc-parser/binding-linux-arm-musleabihf@0.128.0': optional: true - '@oxc-parser/binding-linux-arm-musleabihf@0.117.0': + '@oxc-parser/binding-linux-arm-musleabihf@0.133.0': optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.112.0': + '@oxc-parser/binding-linux-arm64-gnu@0.128.0': optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.117.0': + '@oxc-parser/binding-linux-arm64-gnu@0.133.0': optional: true - '@oxc-parser/binding-linux-arm64-musl@0.112.0': + '@oxc-parser/binding-linux-arm64-musl@0.128.0': optional: true - '@oxc-parser/binding-linux-arm64-musl@0.117.0': + '@oxc-parser/binding-linux-arm64-musl@0.133.0': optional: true - '@oxc-parser/binding-linux-ppc64-gnu@0.112.0': + '@oxc-parser/binding-linux-ppc64-gnu@0.128.0': optional: true - '@oxc-parser/binding-linux-ppc64-gnu@0.117.0': + '@oxc-parser/binding-linux-ppc64-gnu@0.133.0': optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.112.0': + '@oxc-parser/binding-linux-riscv64-gnu@0.128.0': optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.117.0': + '@oxc-parser/binding-linux-riscv64-gnu@0.133.0': optional: true - '@oxc-parser/binding-linux-riscv64-musl@0.112.0': + '@oxc-parser/binding-linux-riscv64-musl@0.128.0': optional: true - '@oxc-parser/binding-linux-riscv64-musl@0.117.0': + '@oxc-parser/binding-linux-riscv64-musl@0.133.0': optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.112.0': + '@oxc-parser/binding-linux-s390x-gnu@0.128.0': optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.117.0': + '@oxc-parser/binding-linux-s390x-gnu@0.133.0': optional: true - '@oxc-parser/binding-linux-x64-gnu@0.112.0': + '@oxc-parser/binding-linux-x64-gnu@0.128.0': optional: true - '@oxc-parser/binding-linux-x64-gnu@0.117.0': + '@oxc-parser/binding-linux-x64-gnu@0.133.0': optional: true - '@oxc-parser/binding-linux-x64-musl@0.112.0': + '@oxc-parser/binding-linux-x64-musl@0.128.0': optional: true - '@oxc-parser/binding-linux-x64-musl@0.117.0': + '@oxc-parser/binding-linux-x64-musl@0.133.0': optional: true - '@oxc-parser/binding-openharmony-arm64@0.112.0': + '@oxc-parser/binding-openharmony-arm64@0.128.0': optional: true - '@oxc-parser/binding-openharmony-arm64@0.117.0': + '@oxc-parser/binding-openharmony-arm64@0.133.0': optional: true - '@oxc-parser/binding-wasm32-wasi@0.112.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + '@oxc-parser/binding-wasm32-wasi@0.128.0': dependencies: - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@oxc-parser/binding-wasm32-wasi@0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + '@oxc-parser/binding-wasm32-wasi@0.133.0': dependencies: - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@oxc-parser/binding-win32-arm64-msvc@0.112.0': + '@oxc-parser/binding-win32-arm64-msvc@0.128.0': optional: true - '@oxc-parser/binding-win32-arm64-msvc@0.117.0': + '@oxc-parser/binding-win32-arm64-msvc@0.133.0': optional: true - '@oxc-parser/binding-win32-ia32-msvc@0.112.0': + '@oxc-parser/binding-win32-ia32-msvc@0.128.0': optional: true - '@oxc-parser/binding-win32-ia32-msvc@0.117.0': + '@oxc-parser/binding-win32-ia32-msvc@0.133.0': optional: true - '@oxc-parser/binding-win32-x64-msvc@0.112.0': + '@oxc-parser/binding-win32-x64-msvc@0.128.0': optional: true - '@oxc-parser/binding-win32-x64-msvc@0.117.0': + '@oxc-parser/binding-win32-x64-msvc@0.133.0': optional: true - '@oxc-project/types@0.112.0': {} + '@oxc-project/types@0.128.0': {} - '@oxc-project/types@0.117.0': {} + '@oxc-project/types@0.133.0': {} - '@oxc-transform/binding-android-arm-eabi@0.112.0': + '@oxc-transform/binding-android-arm-eabi@0.128.0': optional: true - '@oxc-transform/binding-android-arm-eabi@0.117.0': + '@oxc-transform/binding-android-arm-eabi@0.133.0': optional: true - '@oxc-transform/binding-android-arm64@0.112.0': + '@oxc-transform/binding-android-arm64@0.128.0': optional: true - '@oxc-transform/binding-android-arm64@0.117.0': + '@oxc-transform/binding-android-arm64@0.133.0': optional: true - '@oxc-transform/binding-darwin-arm64@0.112.0': + '@oxc-transform/binding-darwin-arm64@0.128.0': optional: true - '@oxc-transform/binding-darwin-arm64@0.117.0': + '@oxc-transform/binding-darwin-arm64@0.133.0': optional: true - '@oxc-transform/binding-darwin-x64@0.112.0': + '@oxc-transform/binding-darwin-x64@0.128.0': optional: true - '@oxc-transform/binding-darwin-x64@0.117.0': + '@oxc-transform/binding-darwin-x64@0.133.0': optional: true - '@oxc-transform/binding-freebsd-x64@0.112.0': + '@oxc-transform/binding-freebsd-x64@0.128.0': optional: true - '@oxc-transform/binding-freebsd-x64@0.117.0': + '@oxc-transform/binding-freebsd-x64@0.133.0': optional: true - '@oxc-transform/binding-linux-arm-gnueabihf@0.112.0': + '@oxc-transform/binding-linux-arm-gnueabihf@0.128.0': optional: true - '@oxc-transform/binding-linux-arm-gnueabihf@0.117.0': + '@oxc-transform/binding-linux-arm-gnueabihf@0.133.0': optional: true - '@oxc-transform/binding-linux-arm-musleabihf@0.112.0': + '@oxc-transform/binding-linux-arm-musleabihf@0.128.0': optional: true - '@oxc-transform/binding-linux-arm-musleabihf@0.117.0': + '@oxc-transform/binding-linux-arm-musleabihf@0.133.0': optional: true - '@oxc-transform/binding-linux-arm64-gnu@0.112.0': + '@oxc-transform/binding-linux-arm64-gnu@0.128.0': optional: true - '@oxc-transform/binding-linux-arm64-gnu@0.117.0': + '@oxc-transform/binding-linux-arm64-gnu@0.133.0': optional: true - '@oxc-transform/binding-linux-arm64-musl@0.112.0': + '@oxc-transform/binding-linux-arm64-musl@0.128.0': optional: true - '@oxc-transform/binding-linux-arm64-musl@0.117.0': + '@oxc-transform/binding-linux-arm64-musl@0.133.0': optional: true - '@oxc-transform/binding-linux-ppc64-gnu@0.112.0': + '@oxc-transform/binding-linux-ppc64-gnu@0.128.0': optional: true - '@oxc-transform/binding-linux-ppc64-gnu@0.117.0': + '@oxc-transform/binding-linux-ppc64-gnu@0.133.0': optional: true - '@oxc-transform/binding-linux-riscv64-gnu@0.112.0': + '@oxc-transform/binding-linux-riscv64-gnu@0.128.0': optional: true - '@oxc-transform/binding-linux-riscv64-gnu@0.117.0': + '@oxc-transform/binding-linux-riscv64-gnu@0.133.0': optional: true - '@oxc-transform/binding-linux-riscv64-musl@0.112.0': + '@oxc-transform/binding-linux-riscv64-musl@0.128.0': optional: true - '@oxc-transform/binding-linux-riscv64-musl@0.117.0': + '@oxc-transform/binding-linux-riscv64-musl@0.133.0': optional: true - '@oxc-transform/binding-linux-s390x-gnu@0.112.0': + '@oxc-transform/binding-linux-s390x-gnu@0.128.0': optional: true - '@oxc-transform/binding-linux-s390x-gnu@0.117.0': + '@oxc-transform/binding-linux-s390x-gnu@0.133.0': optional: true - '@oxc-transform/binding-linux-x64-gnu@0.112.0': + '@oxc-transform/binding-linux-x64-gnu@0.128.0': optional: true - '@oxc-transform/binding-linux-x64-gnu@0.117.0': + '@oxc-transform/binding-linux-x64-gnu@0.133.0': optional: true - '@oxc-transform/binding-linux-x64-musl@0.112.0': + '@oxc-transform/binding-linux-x64-musl@0.128.0': optional: true - '@oxc-transform/binding-linux-x64-musl@0.117.0': + '@oxc-transform/binding-linux-x64-musl@0.133.0': optional: true - '@oxc-transform/binding-openharmony-arm64@0.112.0': + '@oxc-transform/binding-openharmony-arm64@0.128.0': optional: true - '@oxc-transform/binding-openharmony-arm64@0.117.0': + '@oxc-transform/binding-openharmony-arm64@0.133.0': optional: true - '@oxc-transform/binding-wasm32-wasi@0.112.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + '@oxc-transform/binding-wasm32-wasi@0.128.0': dependencies: - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@oxc-transform/binding-wasm32-wasi@0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + '@oxc-transform/binding-wasm32-wasi@0.133.0': dependencies: - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@oxc-transform/binding-win32-arm64-msvc@0.112.0': + '@oxc-transform/binding-win32-arm64-msvc@0.128.0': optional: true - '@oxc-transform/binding-win32-arm64-msvc@0.117.0': + '@oxc-transform/binding-win32-arm64-msvc@0.133.0': optional: true - '@oxc-transform/binding-win32-ia32-msvc@0.112.0': + '@oxc-transform/binding-win32-ia32-msvc@0.128.0': optional: true - '@oxc-transform/binding-win32-ia32-msvc@0.117.0': + '@oxc-transform/binding-win32-ia32-msvc@0.133.0': optional: true - '@oxc-transform/binding-win32-x64-msvc@0.112.0': + '@oxc-transform/binding-win32-x64-msvc@0.128.0': optional: true - '@oxc-transform/binding-win32-x64-msvc@0.117.0': + '@oxc-transform/binding-win32-x64-msvc@0.133.0': optional: true '@oxfmt/binding-android-arm-eabi@0.53.0': @@ -7804,17 +8001,15 @@ snapshots: '@poppinss/exception@1.2.3': {} - '@rolldown/pluginutils@1.0.0-rc.13': {} - - '@rolldown/pluginutils@1.0.0-rc.2': {} + '@rolldown/pluginutils@1.0.1': {} - '@rollup/plugin-alias@6.0.0(rollup@4.60.1)': + '@rollup/plugin-alias@6.0.0(rollup@4.61.1)': optionalDependencies: - rollup: 4.60.1 + rollup: 4.61.1 - '@rollup/plugin-commonjs@29.0.2(rollup@4.60.1)': + '@rollup/plugin-commonjs@29.0.3(rollup@4.61.1)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.60.1) + '@rollup/pluginutils': 5.4.0(rollup@4.61.1) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.5.0(picomatch@4.0.4) @@ -7822,153 +8017,159 @@ snapshots: magic-string: 0.30.21 picomatch: 4.0.4 optionalDependencies: - rollup: 4.60.1 + rollup: 4.61.1 - '@rollup/plugin-inject@5.0.5(rollup@4.60.1)': + '@rollup/plugin-inject@5.0.5(rollup@4.61.1)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.60.1) + '@rollup/pluginutils': 5.4.0(rollup@4.61.1) estree-walker: 2.0.2 magic-string: 0.30.21 optionalDependencies: - rollup: 4.60.1 + rollup: 4.61.1 - '@rollup/plugin-json@6.1.0(rollup@4.60.1)': + '@rollup/plugin-json@6.1.0(rollup@4.61.1)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.60.1) + '@rollup/pluginutils': 5.4.0(rollup@4.61.1) optionalDependencies: - rollup: 4.60.1 + rollup: 4.61.1 - '@rollup/plugin-node-resolve@16.0.3(rollup@4.60.1)': + '@rollup/plugin-node-resolve@16.0.3(rollup@4.61.1)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.60.1) + '@rollup/pluginutils': 5.4.0(rollup@4.61.1) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 - resolve: 1.22.11 + resolve: 1.22.12 optionalDependencies: - rollup: 4.60.1 + rollup: 4.61.1 - '@rollup/plugin-replace@6.0.3(rollup@4.60.1)': + '@rollup/plugin-replace@6.0.3(rollup@4.61.1)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.60.1) + '@rollup/pluginutils': 5.4.0(rollup@4.61.1) magic-string: 0.30.21 optionalDependencies: - rollup: 4.60.1 + rollup: 4.61.1 - '@rollup/plugin-terser@1.0.0(rollup@4.60.1)': + '@rollup/plugin-terser@1.0.0(rollup@4.61.1)': dependencies: serialize-javascript: 7.0.5 - smob: 1.6.1 - terser: 5.46.1 + smob: 1.6.2 + terser: 5.48.0 optionalDependencies: - rollup: 4.60.1 + rollup: 4.61.1 - '@rollup/plugin-yaml@4.1.2(rollup@4.60.1)': + '@rollup/plugin-yaml@4.1.2(rollup@4.61.1)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.60.1) - js-yaml: 4.1.1 + '@rollup/pluginutils': 5.4.0(rollup@4.61.1) + js-yaml: 4.2.0 tosource: 2.0.0-alpha.3 optionalDependencies: - rollup: 4.60.1 + rollup: 4.61.1 - '@rollup/pluginutils@5.3.0(rollup@4.60.1)': + '@rollup/pluginutils@5.4.0(rollup@4.61.1)': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-walker: 2.0.2 picomatch: 4.0.4 optionalDependencies: - rollup: 4.60.1 + rollup: 4.61.1 - '@rollup/rollup-android-arm-eabi@4.60.1': + '@rollup/rollup-android-arm-eabi@4.61.1': optional: true - '@rollup/rollup-android-arm64@4.60.1': + '@rollup/rollup-android-arm64@4.61.1': optional: true - '@rollup/rollup-darwin-arm64@4.60.1': + '@rollup/rollup-darwin-arm64@4.61.1': optional: true - '@rollup/rollup-darwin-x64@4.60.1': + '@rollup/rollup-darwin-x64@4.61.1': optional: true - '@rollup/rollup-freebsd-arm64@4.60.1': + '@rollup/rollup-freebsd-arm64@4.61.1': optional: true - '@rollup/rollup-freebsd-x64@4.60.1': + '@rollup/rollup-freebsd-x64@4.61.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.60.1': + '@rollup/rollup-linux-arm-gnueabihf@4.61.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.60.1': + '@rollup/rollup-linux-arm-musleabihf@4.61.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.60.1': + '@rollup/rollup-linux-arm64-gnu@4.61.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.60.1': + '@rollup/rollup-linux-arm64-musl@4.61.1': optional: true - '@rollup/rollup-linux-loong64-gnu@4.60.1': + '@rollup/rollup-linux-loong64-gnu@4.61.1': optional: true - '@rollup/rollup-linux-loong64-musl@4.60.1': + '@rollup/rollup-linux-loong64-musl@4.61.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.60.1': + '@rollup/rollup-linux-ppc64-gnu@4.61.1': optional: true - '@rollup/rollup-linux-ppc64-musl@4.60.1': + '@rollup/rollup-linux-ppc64-musl@4.61.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.60.1': + '@rollup/rollup-linux-riscv64-gnu@4.61.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.60.1': + '@rollup/rollup-linux-riscv64-musl@4.61.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.60.1': + '@rollup/rollup-linux-s390x-gnu@4.61.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.60.1': + '@rollup/rollup-linux-x64-gnu@4.61.1': optional: true - '@rollup/rollup-linux-x64-musl@4.60.1': + '@rollup/rollup-linux-x64-musl@4.61.1': optional: true - '@rollup/rollup-openbsd-x64@4.60.1': + '@rollup/rollup-openbsd-x64@4.61.1': optional: true - '@rollup/rollup-openharmony-arm64@4.60.1': + '@rollup/rollup-openharmony-arm64@4.61.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.60.1': + '@rollup/rollup-win32-arm64-msvc@4.61.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.60.1': + '@rollup/rollup-win32-ia32-msvc@4.61.1': optional: true - '@rollup/rollup-win32-x64-gnu@4.60.1': + '@rollup/rollup-win32-x64-gnu@4.61.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.60.1': + '@rollup/rollup-win32-x64-msvc@4.61.1': optional: true + '@simple-git/args-pathspec@1.0.3': {} + + '@simple-git/argv-parser@1.1.1': + dependencies: + '@simple-git/args-pathspec': 1.0.3 + '@sindresorhus/is@7.2.0': {} '@sindresorhus/merge-streams@4.0.0': {} - '@speed-highlight/core@1.2.15': {} + '@speed-highlight/core@1.2.16': {} - '@tybys/wasm-util@0.10.1': + '@tybys/wasm-util@0.10.2': dependencies: tslib: 2.8.1 optional: true - '@types/estree@1.0.8': {} - '@types/estree@1.0.9': {} + '@types/jsesc@2.5.1': {} + '@types/json-schema@7.0.15': {} '@types/node@20.19.37': @@ -7982,69 +8183,68 @@ snapshots: '@types/resolve@1.20.2': {} - '@types/web-bluetooth@0.0.21': {} - - '@typescript-eslint/project-service@8.58.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.61.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.9.3) - '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/tsconfig-utils': 8.61.0(typescript@5.9.3) + '@typescript-eslint/types': 8.61.0 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.58.0': + '@typescript-eslint/scope-manager@8.61.0': dependencies: - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/visitor-keys': 8.58.0 + '@typescript-eslint/types': 8.61.0 + '@typescript-eslint/visitor-keys': 8.61.0 - '@typescript-eslint/tsconfig-utils@8.58.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.61.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/types@8.58.0': {} + '@typescript-eslint/types@8.61.0': {} - '@typescript-eslint/typescript-estree@8.58.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.61.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.58.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.9.3) - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/visitor-keys': 8.58.0 + '@typescript-eslint/project-service': 8.61.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.61.0(typescript@5.9.3) + '@typescript-eslint/types': 8.61.0 + '@typescript-eslint/visitor-keys': 8.61.0 debug: 4.4.3 minimatch: 10.2.5 - semver: 7.7.4 - tinyglobby: 0.2.15 + semver: 7.8.4 + tinyglobby: 0.2.17 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.58.0': + '@typescript-eslint/visitor-keys@8.61.0': dependencies: - '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/types': 8.61.0 eslint-visitor-keys: 5.0.1 - '@unhead/vue@2.1.12(vue@3.5.35(typescript@5.9.3))': + '@unhead/vue@2.1.15(vue@3.5.38(typescript@5.9.3))': dependencies: - hookable: 6.1.0 - unhead: 2.1.12 - vue: 3.5.35(typescript@5.9.3) + hookable: 6.1.1 + unhead: 2.1.15 + vue: 3.5.38(typescript@5.9.3) '@upstash/redis@1.38.0': dependencies: uncrypto: 0.1.3 + optional: true '@vercel/kv@3.0.0': dependencies: '@upstash/redis': 1.38.0 optional: true - '@vercel/nft@1.5.0(rollup@4.60.1)': + '@vercel/nft@1.10.2(rollup@4.61.1)': dependencies: '@mapbox/node-pre-gyp': 2.0.3 - '@rollup/pluginutils': 5.3.0(rollup@4.60.1) - acorn: 8.16.0 - acorn-import-attributes: 1.9.5(acorn@8.16.0) + '@rollup/pluginutils': 5.4.0(rollup@4.61.1) + acorn: 8.17.0 + acorn-import-attributes: 1.9.5(acorn@8.17.0) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -8058,193 +8258,137 @@ snapshots: - rollup - supports-color - '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3))': + '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.38(typescript@5.9.3))': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) - '@rolldown/pluginutils': 1.0.0-rc.13 - '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0) - vite: 7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) - vue: 3.5.35(typescript@5.9.3) + '@babel/core': 7.29.7 + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) + '@rolldown/pluginutils': 1.0.1 + '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7) + vite: 7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0) + vue: 3.5.38(typescript@5.9.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.5(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.7(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.38(typescript@5.9.3))': dependencies: - '@rolldown/pluginutils': 1.0.0-rc.2 - vite: 7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) - vue: 3.5.35(typescript@5.9.3) + '@rolldown/pluginutils': 1.0.1 + vite: 7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0) + vue: 3.5.38(typescript@5.9.3) - '@vue-macros/common@3.1.2(vue@3.5.35(typescript@5.9.3))': + '@vue-macros/common@3.1.2(vue@3.5.38(typescript@5.9.3))': dependencies: - '@vue/compiler-sfc': 3.5.31 + '@vue/compiler-sfc': 3.5.38 ast-kit: 2.2.0 - local-pkg: 1.1.2 + local-pkg: 1.2.1 magic-string-ast: 1.0.3 unplugin-utils: 0.3.1 optionalDependencies: - vue: 3.5.35(typescript@5.9.3) + vue: 3.5.38(typescript@5.9.3) '@vue/babel-helper-vue-transform-on@2.0.1': {} - '@vue/babel-plugin-jsx@2.0.1(@babel/core@7.29.0)': + '@vue/babel-plugin-jsx@2.0.1(@babel/core@7.29.7)': dependencies: - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 '@vue/babel-helper-vue-transform-on': 2.0.1 - '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.0) - '@vue/shared': 3.5.31 + '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.7) + '@vue/shared': 3.5.38 optionalDependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 transitivePeerDependencies: - supports-color - '@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.29.0)': + '@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.29.7)': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/code-frame': 7.29.7 + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 '@babel/parser': 7.29.7 - '@vue/compiler-sfc': 3.5.35 + '@vue/compiler-sfc': 3.5.38 transitivePeerDependencies: - supports-color - '@vue/compiler-core@3.5.31': - dependencies: - '@babel/parser': 7.29.2 - '@vue/shared': 3.5.31 - entities: 7.0.1 - estree-walker: 2.0.2 - source-map-js: 1.2.1 - - '@vue/compiler-core@3.5.35': + '@vue/compiler-core@3.5.38': dependencies: '@babel/parser': 7.29.7 - '@vue/shared': 3.5.35 + '@vue/shared': 3.5.38 entities: 7.0.1 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.31': - dependencies: - '@vue/compiler-core': 3.5.31 - '@vue/shared': 3.5.31 - - '@vue/compiler-dom@3.5.35': + '@vue/compiler-dom@3.5.38': dependencies: - '@vue/compiler-core': 3.5.35 - '@vue/shared': 3.5.35 + '@vue/compiler-core': 3.5.38 + '@vue/shared': 3.5.38 - '@vue/compiler-sfc@3.5.31': - dependencies: - '@babel/parser': 7.29.2 - '@vue/compiler-core': 3.5.31 - '@vue/compiler-dom': 3.5.31 - '@vue/compiler-ssr': 3.5.31 - '@vue/shared': 3.5.31 - estree-walker: 2.0.2 - magic-string: 0.30.21 - postcss: 8.5.8 - source-map-js: 1.2.1 - - '@vue/compiler-sfc@3.5.35': + '@vue/compiler-sfc@3.5.38': dependencies: '@babel/parser': 7.29.7 - '@vue/compiler-core': 3.5.35 - '@vue/compiler-dom': 3.5.35 - '@vue/compiler-ssr': 3.5.35 - '@vue/shared': 3.5.35 + '@vue/compiler-core': 3.5.38 + '@vue/compiler-dom': 3.5.38 + '@vue/compiler-ssr': 3.5.38 + '@vue/shared': 3.5.38 estree-walker: 2.0.2 magic-string: 0.30.21 postcss: 8.5.15 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.31': - dependencies: - '@vue/compiler-dom': 3.5.31 - '@vue/shared': 3.5.31 - - '@vue/compiler-ssr@3.5.35': + '@vue/compiler-ssr@3.5.38': dependencies: - '@vue/compiler-dom': 3.5.35 - '@vue/shared': 3.5.35 + '@vue/compiler-dom': 3.5.38 + '@vue/shared': 3.5.38 '@vue/devtools-api@6.6.4': {} - '@vue/devtools-api@8.1.1': + '@vue/devtools-api@8.1.2': dependencies: - '@vue/devtools-kit': 8.1.1 + '@vue/devtools-kit': 8.1.2 - '@vue/devtools-core@8.1.1(vue@3.5.35(typescript@5.9.3))': + '@vue/devtools-core@8.1.2(vue@3.5.38(typescript@5.9.3))': dependencies: - '@vue/devtools-kit': 8.1.1 - '@vue/devtools-shared': 8.1.1 - vue: 3.5.35(typescript@5.9.3) + '@vue/devtools-kit': 8.1.2 + '@vue/devtools-shared': 8.1.2 + vue: 3.5.38(typescript@5.9.3) - '@vue/devtools-kit@8.1.1': + '@vue/devtools-kit@8.1.2': dependencies: - '@vue/devtools-shared': 8.1.1 + '@vue/devtools-shared': 8.1.2 birpc: 2.9.0 hookable: 5.5.3 perfect-debounce: 2.1.0 - '@vue/devtools-shared@8.1.1': {} + '@vue/devtools-shared@8.1.2': {} - '@vue/reactivity@3.5.35': + '@vue/reactivity@3.5.38': dependencies: - '@vue/shared': 3.5.35 + '@vue/shared': 3.5.38 - '@vue/runtime-core@3.5.35': + '@vue/runtime-core@3.5.38': dependencies: - '@vue/reactivity': 3.5.35 - '@vue/shared': 3.5.35 + '@vue/reactivity': 3.5.38 + '@vue/shared': 3.5.38 - '@vue/runtime-dom@3.5.35': + '@vue/runtime-dom@3.5.38': dependencies: - '@vue/reactivity': 3.5.35 - '@vue/runtime-core': 3.5.35 - '@vue/shared': 3.5.35 + '@vue/reactivity': 3.5.38 + '@vue/runtime-core': 3.5.38 + '@vue/shared': 3.5.38 csstype: 3.2.3 - '@vue/server-renderer@3.5.35(vue@3.5.35(typescript@5.9.3))': + '@vue/server-renderer@3.5.38(vue@3.5.38(typescript@5.9.3))': dependencies: - '@vue/compiler-ssr': 3.5.35 - '@vue/shared': 3.5.35 - vue: 3.5.35(typescript@5.9.3) + '@vue/compiler-ssr': 3.5.38 + '@vue/shared': 3.5.38 + vue: 3.5.38(typescript@5.9.3) - '@vue/shared@3.5.31': {} - - '@vue/shared@3.5.35': {} - - '@vueuse/core@14.2.1(vue@3.5.35(typescript@5.9.3))': - dependencies: - '@types/web-bluetooth': 0.0.21 - '@vueuse/metadata': 14.2.1 - '@vueuse/shared': 14.2.1(vue@3.5.35(typescript@5.9.3)) - vue: 3.5.35(typescript@5.9.3) - - '@vueuse/metadata@14.2.1': {} - - '@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3))': - dependencies: - '@nuxt/kit': 4.4.2(magicast@0.5.2) - '@vueuse/core': 14.2.1(vue@3.5.35(typescript@5.9.3)) - '@vueuse/metadata': 14.2.1 - local-pkg: 1.1.2 - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3) - vue: 3.5.35(typescript@5.9.3) - transitivePeerDependencies: - - magicast - - '@vueuse/shared@14.2.1(vue@3.5.35(typescript@5.9.3))': - dependencies: - vue: 3.5.35(typescript@5.9.3) + '@vue/shared@3.5.38': {} '@whatwg-node/disposablestack@0.0.6': dependencies: @@ -8254,11 +8398,11 @@ snapshots: '@whatwg-node/fetch@0.10.13': dependencies: - '@whatwg-node/node-fetch': 0.8.5 + '@whatwg-node/node-fetch': 0.8.6 urlpattern-polyfill: 10.1.0 optional: true - '@whatwg-node/node-fetch@0.8.5': + '@whatwg-node/node-fetch@0.8.6': dependencies: '@fastify/busboy': 3.2.0 '@whatwg-node/disposablestack': 0.0.6 @@ -8290,15 +8434,15 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-import-attributes@1.9.5(acorn@8.16.0): + acorn-import-attributes@1.9.5(acorn@8.17.0): dependencies: - acorn: 8.16.0 + acorn: 8.17.0 - acorn-jsx@5.3.2(acorn@8.16.0): + acorn-jsx@5.3.2(acorn@8.17.0): dependencies: - acorn: 8.16.0 + acorn: 8.17.0 - acorn@8.16.0: {} + acorn@8.17.0: {} agent-base@7.1.4: {} @@ -8319,7 +8463,7 @@ snapshots: ansi-styles@6.2.3: {} - ansis@4.2.0: {} + ansis@4.3.1: {} any-promise@1.3.0: {} @@ -8345,7 +8489,7 @@ snapshots: buffer-crc32: 1.0.0 readable-stream: 4.7.0 readdir-glob: 1.1.3 - tar-stream: 3.1.8 + tar-stream: 3.2.0 zip-stream: 6.0.1 transitivePeerDependencies: - bare-abort-controller @@ -8358,12 +8502,13 @@ snapshots: ast-kit@2.2.0: dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.7 pathe: 2.0.3 - ast-walker-scope@0.8.3: + ast-walker-scope@0.9.0: dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 ast-kit: 2.2.0 async-sema@3.1.1: {} @@ -8372,60 +8517,61 @@ snapshots: at-least-node@1.0.0: {} - autoprefixer@10.4.27(postcss@8.5.8): + autoprefixer@10.5.0(postcss@8.5.15): dependencies: browserslist: 4.28.2 - caniuse-lite: 1.0.30001784 + caniuse-lite: 1.0.30001799 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.8 + postcss: 8.5.15 postcss-value-parser: 4.2.0 b-tween@0.3.3: {} b-validate@1.5.3: {} - b4a@1.8.0: {} + b4a@1.8.1: {} balanced-match@1.0.2: {} balanced-match@4.0.4: {} - bare-events@2.8.2: {} + bare-events@2.9.1: {} - bare-fs@4.5.6: + bare-fs@4.7.2: dependencies: - bare-events: 2.8.2 - bare-path: 3.0.0 - bare-stream: 2.12.0(bare-events@2.8.2) - bare-url: 2.4.0 + bare-events: 2.9.1 + bare-path: 3.0.1 + bare-stream: 2.13.3(bare-events@2.9.1) + bare-url: 2.4.5 fast-fifo: 1.3.2 transitivePeerDependencies: - bare-abort-controller - react-native-b4a - bare-os@3.8.6: {} + bare-os@3.9.1: {} - bare-path@3.0.0: + bare-path@3.0.1: dependencies: - bare-os: 3.8.6 + bare-os: 3.9.1 - bare-stream@2.12.0(bare-events@2.8.2): + bare-stream@2.13.3(bare-events@2.9.1): dependencies: - streamx: 2.25.0 + b4a: 1.8.1 + streamx: 2.28.0 teex: 1.0.1 optionalDependencies: - bare-events: 2.8.2 + bare-events: 2.9.1 transitivePeerDependencies: - react-native-b4a - bare-url@2.4.0: + bare-url@2.4.5: dependencies: - bare-path: 3.0.0 + bare-path: 3.0.1 base64-js@1.5.1: {} - baseline-browser-mapping@2.10.13: {} + baseline-browser-mapping@2.10.37: {} binary-extensions@2.3.0: {} @@ -8441,16 +8587,16 @@ snapshots: boolbase@1.0.0: {} - brace-expansion@1.1.13: + brace-expansion@1.1.15: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.3: + brace-expansion@2.1.1: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.5: + brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 @@ -8460,10 +8606,10 @@ snapshots: browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.13 - caniuse-lite: 1.0.30001784 - electron-to-chromium: 1.5.331 - node-releases: 2.0.37 + baseline-browser-mapping: 2.10.37 + caniuse-lite: 1.0.30001799 + electron-to-chromium: 1.5.372 + node-releases: 2.0.47 update-browserslist-db: 1.2.3(browserslist@4.28.2) buffer-crc32@1.0.0: {} @@ -8479,22 +8625,22 @@ snapshots: dependencies: run-applescript: 7.1.0 - c12@3.3.4(magicast@0.5.2): + c12@3.3.4(magicast@0.5.3): dependencies: chokidar: 5.0.0 confbox: 0.2.4 - defu: 6.1.6 - dotenv: 17.4.0 + defu: 6.1.7 + dotenv: 17.4.2 exsolve: 1.0.8 - giget: 3.2.0 - jiti: 2.6.1 + giget: 3.3.0 + jiti: 2.7.0 ohash: 2.0.11 pathe: 2.0.3 perfect-debounce: 2.1.0 - pkg-types: 2.3.0 + pkg-types: 2.3.1 rc9: 3.0.1 optionalDependencies: - magicast: 0.5.2 + magicast: 0.5.3 cac@6.7.14: {} @@ -8520,14 +8666,12 @@ snapshots: camelcase-css@2.0.1: {} - caniuse-api@3.0.0: + caniuse-api@4.0.0: dependencies: browserslist: 4.28.2 - caniuse-lite: 1.0.30001784 - lodash.memoize: 4.1.2 - lodash.uniq: 4.5.0 + caniuse-lite: 1.0.30001799 - caniuse-lite@1.0.30001784: {} + caniuse-lite@1.0.30001799: {} chalk@4.1.2: dependencies: @@ -8549,6 +8693,7 @@ snapshots: chokidar@4.0.3: dependencies: readdirp: 4.1.2 + optional: true chokidar@5.0.0: dependencies: @@ -8574,7 +8719,7 @@ snapshots: strip-ansi: 7.2.0 wrap-ansi: 9.0.2 - cluster-key-slot@1.1.2: {} + cluster-key-slot@1.1.1: {} co@4.6.0: {} @@ -8672,13 +8817,9 @@ snapshots: dependencies: uncrypto: 0.1.3 - crossws@0.4.4(srvx@0.11.14): + crossws@0.4.6(srvx@0.11.16): optionalDependencies: - srvx: 0.11.14 - - css-declaration-sorter@7.3.1(postcss@8.5.8): - dependencies: - postcss: 8.5.8 + srvx: 0.11.16 css-select@5.2.2: dependencies: @@ -8702,49 +8843,48 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-default@7.0.12(postcss@8.5.8): + cssnano-preset-default@8.0.2(postcss@8.5.15): dependencies: browserslist: 4.28.2 - css-declaration-sorter: 7.3.1(postcss@8.5.8) - cssnano-utils: 5.0.1(postcss@8.5.8) - postcss: 8.5.8 - postcss-calc: 10.1.1(postcss@8.5.8) - postcss-colormin: 7.0.7(postcss@8.5.8) - postcss-convert-values: 7.0.9(postcss@8.5.8) - postcss-discard-comments: 7.0.6(postcss@8.5.8) - postcss-discard-duplicates: 7.0.2(postcss@8.5.8) - postcss-discard-empty: 7.0.1(postcss@8.5.8) - postcss-discard-overridden: 7.0.1(postcss@8.5.8) - postcss-merge-longhand: 7.0.5(postcss@8.5.8) - postcss-merge-rules: 7.0.8(postcss@8.5.8) - postcss-minify-font-values: 7.0.1(postcss@8.5.8) - postcss-minify-gradients: 7.0.2(postcss@8.5.8) - postcss-minify-params: 7.0.6(postcss@8.5.8) - postcss-minify-selectors: 7.0.6(postcss@8.5.8) - postcss-normalize-charset: 7.0.1(postcss@8.5.8) - postcss-normalize-display-values: 7.0.1(postcss@8.5.8) - postcss-normalize-positions: 7.0.1(postcss@8.5.8) - postcss-normalize-repeat-style: 7.0.1(postcss@8.5.8) - postcss-normalize-string: 7.0.1(postcss@8.5.8) - postcss-normalize-timing-functions: 7.0.1(postcss@8.5.8) - postcss-normalize-unicode: 7.0.6(postcss@8.5.8) - postcss-normalize-url: 7.0.1(postcss@8.5.8) - postcss-normalize-whitespace: 7.0.1(postcss@8.5.8) - postcss-ordered-values: 7.0.2(postcss@8.5.8) - postcss-reduce-initial: 7.0.6(postcss@8.5.8) - postcss-reduce-transforms: 7.0.1(postcss@8.5.8) - postcss-svgo: 7.1.1(postcss@8.5.8) - postcss-unique-selectors: 7.0.5(postcss@8.5.8) - - cssnano-utils@5.0.1(postcss@8.5.8): - dependencies: - postcss: 8.5.8 - - cssnano@7.1.4(postcss@8.5.8): - dependencies: - cssnano-preset-default: 7.0.12(postcss@8.5.8) + cssnano-utils: 6.0.1(postcss@8.5.15) + postcss: 8.5.15 + postcss-calc: 10.1.1(postcss@8.5.15) + postcss-colormin: 8.0.1(postcss@8.5.15) + postcss-convert-values: 8.0.1(postcss@8.5.15) + postcss-discard-comments: 8.0.1(postcss@8.5.15) + postcss-discard-duplicates: 8.0.1(postcss@8.5.15) + postcss-discard-empty: 8.0.1(postcss@8.5.15) + postcss-discard-overridden: 8.0.1(postcss@8.5.15) + postcss-merge-longhand: 8.0.1(postcss@8.5.15) + postcss-merge-rules: 8.0.1(postcss@8.5.15) + postcss-minify-font-values: 8.0.1(postcss@8.5.15) + postcss-minify-gradients: 8.0.1(postcss@8.5.15) + postcss-minify-params: 8.0.1(postcss@8.5.15) + postcss-minify-selectors: 8.0.2(postcss@8.5.15) + postcss-normalize-charset: 8.0.1(postcss@8.5.15) + postcss-normalize-display-values: 8.0.1(postcss@8.5.15) + postcss-normalize-positions: 8.0.1(postcss@8.5.15) + postcss-normalize-repeat-style: 8.0.1(postcss@8.5.15) + postcss-normalize-string: 8.0.1(postcss@8.5.15) + postcss-normalize-timing-functions: 8.0.1(postcss@8.5.15) + postcss-normalize-unicode: 8.0.1(postcss@8.5.15) + postcss-normalize-url: 8.0.1(postcss@8.5.15) + postcss-normalize-whitespace: 8.0.1(postcss@8.5.15) + postcss-ordered-values: 8.0.1(postcss@8.5.15) + postcss-reduce-initial: 8.0.1(postcss@8.5.15) + postcss-reduce-transforms: 8.0.1(postcss@8.5.15) + postcss-svgo: 8.0.1(postcss@8.5.15) + postcss-unique-selectors: 8.0.1(postcss@8.5.15) + + cssnano-utils@6.0.1(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + + cssnano@8.0.2(postcss@8.5.15): + dependencies: + cssnano-preset-default: 8.0.2(postcss@8.5.15) lilconfig: 3.1.3 - postcss: 8.5.8 + postcss: 8.5.15 csso@5.0.5: dependencies: @@ -8755,7 +8895,7 @@ snapshots: data-uri-to-buffer@4.0.1: optional: true - dayjs@1.11.20: {} + dayjs@1.11.21: {} db0@0.3.4: {} @@ -8787,7 +8927,7 @@ snapshots: define-lazy-prop@3.0.0: {} - defu@6.1.6: {} + defu@6.1.7: {} delegates@1.0.0: {} @@ -8803,7 +8943,7 @@ snapshots: detect-libc@2.1.2: {} - devalue@5.6.4: {} + devalue@5.8.1: {} didyoumean@1.2.2: {} @@ -8831,14 +8971,14 @@ snapshots: dot-prop@10.1.0: dependencies: - type-fest: 5.5.0 + type-fest: 5.7.0 dot-prop@9.0.0: dependencies: type-fest: 4.41.0 optional: true - dotenv@17.4.0: {} + dotenv@17.4.2: {} dunder-proto@1.0.1: dependencies: @@ -8850,14 +8990,14 @@ snapshots: eastasianwidth@0.2.0: {} - echarts@6.0.0: + echarts@6.1.0: dependencies: tslib: 2.3.0 - zrender: 6.0.0 + zrender: 6.1.0 ee-first@1.1.1: {} - electron-to-chromium@1.5.331: {} + electron-to-chromium@1.5.372: {} emoji-regex@10.6.0: {} @@ -8884,9 +9024,9 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@2.0.0: {} + es-module-lexer@2.1.0: {} - es-object-atoms@1.1.1: + es-object-atoms@1.1.2: dependencies: es-errors: 1.3.0 @@ -8976,34 +9116,63 @@ snapshots: '@esbuild/win32-ia32': 0.27.3 '@esbuild/win32-x64': 0.27.3 - esbuild@0.27.5: + esbuild@0.27.7: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.5 - '@esbuild/android-arm': 0.27.5 - '@esbuild/android-arm64': 0.27.5 - '@esbuild/android-x64': 0.27.5 - '@esbuild/darwin-arm64': 0.27.5 - '@esbuild/darwin-x64': 0.27.5 - '@esbuild/freebsd-arm64': 0.27.5 - '@esbuild/freebsd-x64': 0.27.5 - '@esbuild/linux-arm': 0.27.5 - '@esbuild/linux-arm64': 0.27.5 - '@esbuild/linux-ia32': 0.27.5 - '@esbuild/linux-loong64': 0.27.5 - '@esbuild/linux-mips64el': 0.27.5 - '@esbuild/linux-ppc64': 0.27.5 - '@esbuild/linux-riscv64': 0.27.5 - '@esbuild/linux-s390x': 0.27.5 - '@esbuild/linux-x64': 0.27.5 - '@esbuild/netbsd-arm64': 0.27.5 - '@esbuild/netbsd-x64': 0.27.5 - '@esbuild/openbsd-arm64': 0.27.5 - '@esbuild/openbsd-x64': 0.27.5 - '@esbuild/openharmony-arm64': 0.27.5 - '@esbuild/sunos-x64': 0.27.5 - '@esbuild/win32-arm64': 0.27.5 - '@esbuild/win32-ia32': 0.27.5 - '@esbuild/win32-x64': 0.27.5 + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 + + esbuild@0.28.1: + 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 escalade@3.2.0: {} @@ -9032,9 +9201,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@9.39.4(jiti@2.6.1): + eslint@9.39.4(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.2 '@eslint/config-helpers': 0.4.2 @@ -9069,20 +9238,20 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.6.1 + jiti: 2.7.0 transitivePeerDependencies: - supports-color espree@10.4.0: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) eslint-visitor-keys: 4.2.1 espree@9.6.1: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -9101,7 +9270,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esutils@2.0.3: {} @@ -9111,7 +9280,7 @@ snapshots: events-universal@1.0.1: dependencies: - bare-events: 2.8.2 + bare-events: 2.9.1 transitivePeerDependencies: - bare-abort-controller @@ -9147,17 +9316,17 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-npm-meta@1.4.2: {} + fast-npm-meta@1.5.1: {} - fast-string-truncated-width@1.2.1: {} + fast-string-truncated-width@3.0.3: {} - fast-string-width@1.1.0: + fast-string-width@3.0.2: dependencies: - fast-string-truncated-width: 1.2.1 + fast-string-truncated-width: 3.0.3 - fast-wrap-ansi@0.1.6: + fast-wrap-ansi@0.2.2: dependencies: - fast-string-width: 1.1.0 + fast-string-width: 3.0.2 fastq@1.20.1: dependencies: @@ -9222,7 +9391,7 @@ snapshots: dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 - jsonfile: 6.2.0 + jsonfile: 6.2.1 universalify: 2.0.1 fs.realpath@1.0.0: {} @@ -9232,7 +9401,7 @@ snapshots: function-bind@1.1.2: {} - fuse.js@7.1.0: {} + fuse.js@7.4.2: {} fzf@0.5.2: {} @@ -9242,19 +9411,19 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.5.0: {} + get-east-asian-width@1.6.0: {} get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 function-bind: 1.1.2 get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.4 math-intrinsics: 1.1.0 get-port-please@3.2.0: {} @@ -9262,7 +9431,7 @@ snapshots: get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 get-stream@8.0.1: {} @@ -9271,7 +9440,7 @@ snapshots: resolve-pkg-maps: 1.0.0 optional: true - giget@3.2.0: {} + giget@3.3.0: {} glob-parent@5.1.2: dependencies: @@ -9332,12 +9501,12 @@ snapshots: dependencies: cookie-es: 1.2.3 crossws: 0.3.5 - defu: 6.1.6 + defu: 6.1.7 destr: 2.0.5 iron-webcrypto: 1.2.1 node-mock-http: 1.0.4 radix3: 1.1.2 - ufo: 1.6.3 + ufo: 1.6.4 uncrypto: 0.1.3 has-flag@4.0.0: {} @@ -9348,13 +9517,13 @@ snapshots: dependencies: has-symbols: 1.1.0 - hasown@2.0.2: + hasown@2.0.4: dependencies: function-bind: 1.1.2 hookable@5.5.3: {} - hookable@6.1.0: {} + hookable@6.1.1: {} http-assert@1.5.0: dependencies: @@ -9393,7 +9562,7 @@ snapshots: transitivePeerDependencies: - supports-color - httpxy@0.5.0: {} + httpxy@0.5.3: {} human-signals@5.0.0: {} @@ -9410,10 +9579,12 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-meta-resolve@4.2.0: {} + impound@1.1.5: dependencies: '@jridgewell/trace-mapping': 0.3.31 - es-module-lexer: 2.0.0 + es-module-lexer: 2.1.0 pathe: 2.0.3 unplugin: 3.0.0 unplugin-utils: 0.3.1 @@ -9431,14 +9602,12 @@ snapshots: ini@4.1.1: {} - ioredis@5.10.1: + ioredis@5.11.1: dependencies: - '@ioredis/commands': 1.5.1 - cluster-key-slot: 1.1.2 + '@ioredis/commands': 1.10.0 + cluster-key-slot: 1.1.1 debug: 4.4.3 denque: 2.1.0 - lodash.defaults: 4.2.0 - lodash.isarguments: 3.1.0 redis-errors: 1.2.0 redis-parser: 3.0.0 standard-as-callback: 2.1.0 @@ -9453,9 +9622,9 @@ snapshots: dependencies: binary-extensions: 2.3.0 - is-core-module@2.16.1: + is-core-module@2.16.2: dependencies: - hasown: 2.0.2 + hasown: 2.0.4 is-docker@2.2.1: {} @@ -9496,14 +9665,14 @@ snapshots: is-reference@1.2.1: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 is-regex@1.2.1: dependencies: call-bound: 1.0.4 gopd: 1.2.0 has-tostringtag: 1.0.2 - hasown: 2.0.2 + hasown: 2.0.4 is-stream@2.0.1: {} @@ -9531,16 +9700,12 @@ snapshots: jiti@1.21.7: {} - jiti@2.6.1: {} + jiti@2.7.0: {} js-tokens@4.0.0: {} js-tokens@9.0.1: {} - js-yaml@4.1.1: - dependencies: - argparse: 2.0.1 - js-yaml@4.2.0: dependencies: argparse: 2.0.1 @@ -9557,12 +9722,12 @@ snapshots: jsonc-eslint-parser@2.4.2: dependencies: - acorn: 8.16.0 + acorn: 8.17.0 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - semver: 7.7.4 + semver: 7.8.4 - jsonfile@6.2.0: + jsonfile@6.2.1: dependencies: universalify: 2.0.1 optionalDependencies: @@ -9632,10 +9797,10 @@ snapshots: transitivePeerDependencies: - supports-color - launch-editor@2.13.2: + launch-editor@2.14.1: dependencies: picocolors: 1.1.1 - shell-quote: 1.8.3 + shell-quote: 1.8.4 lazystream@1.0.1: dependencies: @@ -9650,33 +9815,33 @@ snapshots: lines-and-columns@1.2.4: {} - listhen@1.9.1(srvx@0.11.14): + listhen@1.10.0(srvx@0.11.16): dependencies: '@parcel/watcher': 2.5.6 '@parcel/watcher-wasm': 2.5.6 citty: 0.2.2 consola: 3.4.2 - crossws: 0.4.4(srvx@0.11.14) - defu: 6.1.6 + crossws: 0.4.6(srvx@0.11.16) + defu: 6.1.7 get-port-please: 3.2.0 h3: 1.15.11 http-shutdown: 1.2.2 - jiti: 2.6.1 + jiti: 2.7.0 mlly: 1.8.2 node-forge: 1.4.0 pathe: 2.0.3 - std-env: 4.0.0 - tinyclip: 0.1.12 - ufo: 1.6.3 + std-env: 4.1.0 + tinyclip: 0.1.14 + ufo: 1.6.4 untun: 0.1.3 - uqr: 0.1.2 + uqr: 0.1.3 transitivePeerDependencies: - srvx - local-pkg@1.1.2: + local-pkg@1.2.1: dependencies: mlly: 1.8.2 - pkg-types: 2.3.0 + pkg-types: 2.3.1 quansync: 0.2.11 locate-path@6.0.0: @@ -9694,21 +9859,13 @@ snapshots: lodash.debounce@4.0.8: optional: true - lodash.defaults@4.2.0: {} - - lodash.isarguments@3.1.0: {} - - lodash.memoize@4.1.2: {} - lodash.merge@4.6.2: {} - lodash.uniq@4.5.0: {} - lodash@4.18.1: {} lru-cache@10.4.3: {} - lru-cache@11.2.7: {} + lru-cache@11.5.1: {} lru-cache@5.1.1: dependencies: @@ -9721,9 +9878,16 @@ snapshots: mlly: 1.8.2 regexp-tree: 0.1.27 type-level-regexp: 0.1.17 - ufo: 1.6.3 + ufo: 1.6.4 unplugin: 2.3.11 + magic-regexp@0.11.0: + dependencies: + magic-string: 0.30.21 + regexp-tree: 0.1.27 + type-level-regexp: 0.1.17 + unplugin: 3.0.0 + magic-string-ast@1.0.3: dependencies: magic-string: 0.30.21 @@ -9732,10 +9896,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.5.2: + magicast@0.5.3: dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 source-map-js: 1.2.1 math-intrinsics@1.1.0: {} @@ -9776,12 +9940,12 @@ snapshots: mimic-fn@4.0.0: {} - miniflare@4.20260526.0: + miniflare@4.20260611.0: dependencies: '@cspotcode/source-map-support': 0.8.1 sharp: 0.34.5 undici: 7.24.8 - workerd: 1.20260526.1 + workerd: 1.20260611.1 ws: 8.20.1 youch: 4.1.0-beta.10 transitivePeerDependencies: @@ -9790,19 +9954,19 @@ snapshots: minimatch@10.2.5: dependencies: - brace-expansion: 5.0.5 + brace-expansion: 5.0.6 minimatch@3.1.5: dependencies: - brace-expansion: 1.1.13 + brace-expansion: 1.1.15 minimatch@5.1.9: dependencies: - brace-expansion: 2.0.3 + brace-expansion: 2.1.1 minimatch@9.0.9: dependencies: - brace-expansion: 2.0.3 + brace-expansion: 2.1.1 minipass@7.1.3: {} @@ -9812,10 +9976,10 @@ snapshots: mlly@1.8.2: dependencies: - acorn: 8.16.0 + acorn: 8.17.0 pathe: 2.0.3 pkg-types: 1.3.1 - ufo: 1.6.3 + ufo: 1.6.4 mocked-exports@0.1.1: {} @@ -9831,8 +9995,6 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nanoid@3.3.11: {} - nanoid@3.3.12: {} nanotar@0.3.0: {} @@ -9851,19 +10013,19 @@ snapshots: qs: 6.15.2 optional: true - nitropack@2.13.3(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(srvx@0.11.14): + nitropack@2.13.4(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(oxc-parser@0.133.0)(srvx@0.11.16): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 - '@rollup/plugin-alias': 6.0.0(rollup@4.60.1) - '@rollup/plugin-commonjs': 29.0.2(rollup@4.60.1) - '@rollup/plugin-inject': 5.0.5(rollup@4.60.1) - '@rollup/plugin-json': 6.1.0(rollup@4.60.1) - '@rollup/plugin-node-resolve': 16.0.3(rollup@4.60.1) - '@rollup/plugin-replace': 6.0.3(rollup@4.60.1) - '@rollup/plugin-terser': 1.0.0(rollup@4.60.1) - '@vercel/nft': 1.5.0(rollup@4.60.1) + '@rollup/plugin-alias': 6.0.0(rollup@4.61.1) + '@rollup/plugin-commonjs': 29.0.3(rollup@4.61.1) + '@rollup/plugin-inject': 5.0.5(rollup@4.61.1) + '@rollup/plugin-json': 6.1.0(rollup@4.61.1) + '@rollup/plugin-node-resolve': 16.0.3(rollup@4.61.1) + '@rollup/plugin-replace': 6.0.3(rollup@4.61.1) + '@rollup/plugin-terser': 1.0.0(rollup@4.61.1) + '@vercel/nft': 1.10.2(rollup@4.61.1) archiver: 7.0.1 - c12: 3.3.4(magicast@0.5.2) + c12: 3.3.4(magicast@0.5.3) chokidar: 5.0.0 citty: 0.2.2 compatx: 0.2.0 @@ -9873,10 +10035,10 @@ snapshots: croner: 10.0.1 crossws: 0.3.5 db0: 0.3.4 - defu: 6.1.6 + defu: 6.1.7 destr: 2.0.5 dot-prop: 10.1.0 - esbuild: 0.27.5 + esbuild: 0.28.1 escape-string-regexp: 5.0.0 etag: 1.8.1 exsolve: 1.0.8 @@ -9884,14 +10046,14 @@ snapshots: gzip-size: 7.0.0 h3: 1.15.11 hookable: 5.5.3 - httpxy: 0.5.0 - ioredis: 5.10.1 - jiti: 2.6.1 + httpxy: 0.5.3 + ioredis: 5.11.1 + jiti: 2.7.0 klona: 2.0.6 knitwork: 1.3.0 - listhen: 1.9.1(srvx@0.11.14) + listhen: 1.10.0(srvx@0.11.16) magic-string: 0.30.21 - magicast: 0.5.2 + magicast: 0.5.3 mime: 4.1.0 mlly: 1.8.2 node-fetch-native: 1.6.7 @@ -9900,25 +10062,25 @@ snapshots: ohash: 2.0.11 pathe: 2.0.3 perfect-debounce: 2.1.0 - pkg-types: 2.3.0 + pkg-types: 2.3.1 pretty-bytes: 7.1.0 radix3: 1.1.2 - rollup: 4.60.1 - rollup-plugin-visualizer: 7.0.1(rollup@4.60.1) + rollup: 4.61.1 + rollup-plugin-visualizer: 7.0.1(rollup@4.61.1) scule: 1.3.0 - semver: 7.7.4 + semver: 7.8.4 serve-placeholder: 2.0.2 serve-static: 2.2.1 source-map: 0.7.6 - std-env: 4.0.0 - ufo: 1.6.3 + std-env: 4.1.0 + ufo: 1.6.4 ultrahtml: 1.6.0 uncrypto: 0.1.3 unctx: 2.5.0 unenv: 2.0.0-rc.24 - unimport: 6.0.2 + unimport: 6.3.0(oxc-parser@0.133.0) unplugin-utils: 0.3.1 - unstorage: 1.17.5(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.10.1) + unstorage: 1.17.5(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.11.1) untyped: 2.0.0 unwasm: 0.5.3 youch: 4.1.1 @@ -9948,6 +10110,7 @@ snapshots: - encoding - idb-keyval - mysql2 + - oxc-parser - react-native-b4a - rolldown - sqlite3 @@ -9979,7 +10142,7 @@ snapshots: node-mock-http@1.0.4: {} - node-releases@2.0.37: {} + node-releases@2.0.47: {} nopt@8.1.0: dependencies: @@ -10004,72 +10167,72 @@ snapshots: nuxt-define@1.0.0: {} - nuxt-echarts@1.0.1(echarts@6.0.0)(magicast@0.5.2)(vue-echarts@8.0.1(echarts@6.0.0)(vue@3.5.35(typescript@5.9.3))): + nuxt-echarts@1.0.1(echarts@6.1.0)(magicast@0.5.3)(vue-echarts@8.0.1(echarts@6.1.0)(vue@3.5.38(typescript@5.9.3))): dependencies: - '@nuxt/kit': 4.4.2(magicast@0.5.2) - echarts: 6.0.0 - vue-echarts: 8.0.1(echarts@6.0.0)(vue@3.5.35(typescript@5.9.3)) + '@nuxt/kit': 4.4.8(magicast@0.5.3) + echarts: 6.1.0 + vue-echarts: 8.0.1(echarts@6.1.0)(vue@3.5.38(typescript@5.9.3)) transitivePeerDependencies: - magicast - nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3): - dependencies: - '@dxup/nuxt': 0.4.0(magicast@0.5.2)(typescript@5.9.3) - '@nuxt/cli': 3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2) - '@nuxt/devtools': 3.2.4(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3)) - '@nuxt/kit': 4.4.2(magicast@0.5.2) - '@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(srvx@0.11.14)(typescript@5.9.3) - '@nuxt/schema': 4.4.2 - '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.4.2(magicast@0.5.2)) - '@nuxt/vite-builder': 4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@22.15.19)(eslint@9.39.4(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.14)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(yaml@2.8.3))(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.19.2)(typescript@5.9.3)(vue@3.5.35(typescript@5.9.3))(yaml@2.8.3) - '@unhead/vue': 2.1.12(vue@3.5.35(typescript@5.9.3)) - '@vue/shared': 3.5.31 - c12: 3.3.4(magicast@0.5.2) + nuxt@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.38)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.7.0))(ioredis@5.11.1)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.61.1))(rollup@4.61.1)(srvx@0.11.16)(terser@5.48.0)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(yaml@2.9.0): + dependencies: + '@dxup/nuxt': 0.4.1(magicast@0.5.3)(typescript@5.9.3) + '@nuxt/cli': 3.35.2(@nuxt/schema@4.4.8)(cac@6.7.14)(magicast@0.5.3) + '@nuxt/devtools': 3.2.4(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.38(typescript@5.9.3)) + '@nuxt/kit': 4.4.8(magicast@0.5.3) + '@nuxt/nitro-server': 4.4.8(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.11.1)(magicast@0.5.3)(nuxt@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.38)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.7.0))(ioredis@5.11.1)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.61.1))(rollup@4.61.1)(srvx@0.11.16)(terser@5.48.0)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(yaml@2.9.0))(oxc-parser@0.133.0)(srvx@0.11.16)(typescript@5.9.3) + '@nuxt/schema': 4.4.8 + '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.4.8(magicast@0.5.3)) + '@nuxt/vite-builder': 4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@types/node@22.15.19)(eslint@9.39.4(jiti@2.7.0))(magicast@0.5.3)(nuxt@4.4.8(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7))(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.15.19)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.38)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.4(jiti@2.7.0))(ioredis@5.11.1)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.61.1))(rollup@4.61.1)(srvx@0.11.16)(terser@5.48.0)(tsx@4.19.2)(typescript@5.9.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(yaml@2.9.0))(optionator@0.9.4)(oxlint@1.56.0)(rollup-plugin-visualizer@7.0.1(rollup@4.61.1))(rollup@4.61.1)(terser@5.48.0)(tsx@4.19.2)(typescript@5.9.3)(vue@3.5.38(typescript@5.9.3))(yaml@2.9.0) + '@unhead/vue': 2.1.15(vue@3.5.38(typescript@5.9.3)) + '@vue/shared': 3.5.38 chokidar: 5.0.0 compatx: 0.2.0 consola: 3.4.2 - cookie-es: 2.0.1 - defu: 6.1.6 - devalue: 5.6.4 + cookie-es: 3.1.1 + defu: 6.1.7 + devalue: 5.8.1 errx: 0.1.0 escape-string-regexp: 5.0.0 exsolve: 1.0.8 - hookable: 6.1.0 + hookable: 6.1.1 ignore: 7.0.5 impound: 1.1.5 - jiti: 2.6.1 + jiti: 2.7.0 klona: 2.0.6 knitwork: 1.3.0 magic-string: 0.30.21 mlly: 1.8.2 nanotar: 0.3.0 - nypm: 0.6.5 + nypm: 0.6.7 ofetch: 1.5.1 ohash: 2.0.11 on-change: 6.0.2 - oxc-minify: 0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - oxc-parser: 0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - oxc-transform: 0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - oxc-walker: 0.7.0(oxc-parser@0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)) + oxc-minify: 0.133.0 + oxc-parser: 0.133.0 + oxc-transform: 0.133.0 + oxc-walker: 1.0.0(oxc-parser@0.133.0) pathe: 2.0.3 perfect-debounce: 2.1.0 picomatch: 4.0.4 - pkg-types: 2.3.0 + pkg-types: 2.3.1 rou3: 0.8.1 scule: 1.3.0 - semver: 7.7.4 - std-env: 4.0.0 - tinyglobby: 0.2.15 - ufo: 1.6.3 + semver: 7.8.4 + std-env: 4.1.0 + tinyglobby: 0.2.17 + ufo: 1.6.4 ultrahtml: 1.6.0 uncrypto: 0.1.3 unctx: 2.5.0 - unimport: 6.0.2 + unhead: 2.1.15 + unimport: 6.3.0(oxc-parser@0.133.0) unplugin: 3.0.0 unrouting: 0.1.7 untyped: 2.0.0 - vue: 3.5.35(typescript@5.9.3) - vue-router: 5.0.4(@vue/compiler-sfc@3.5.31)(vue@3.5.35(typescript@5.9.3)) + vue: 3.5.38(typescript@5.9.3) + vue-router: 5.1.0(@vue/compiler-sfc@3.5.38)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.38(typescript@5.9.3)) optionalDependencies: '@parcel/watcher': 2.5.6 '@types/node': 22.15.19 @@ -10080,15 +10243,13 @@ snapshots: - '@azure/identity' - '@azure/keyvault-secrets' - '@azure/storage-blob' - - '@babel/core' - '@babel/plugin-proposal-decorators' - '@babel/plugin-syntax-jsx' + - '@babel/plugin-syntax-typescript' - '@biomejs/biome' - '@capacitor/preferences' - '@deno/kv' - '@electric-sql/pglite' - - '@emnapi/core' - - '@emnapi/runtime' - '@libsql/client' - '@netlify/blobs' - '@pinia/colada' @@ -10139,17 +10300,15 @@ snapshots: - uploadthing - utf-8-validate - vite - - vls - - vti - vue-tsc - xml2js - yaml - nypm@0.6.5: + nypm@0.6.7: dependencies: citty: 0.2.2 pathe: 2.0.3 - tinyexec: 1.0.4 + tinyexec: 1.2.4 object-assign@4.1.1: {} @@ -10158,13 +10317,13 @@ snapshots: object-inspect@1.13.4: optional: true - obug@2.1.1: {} + obug@2.1.3: {} ofetch@1.5.1: dependencies: destr: 2.0.5 node-fetch-native: 1.6.7 - ufo: 1.6.3 + ufo: 1.6.4 ofetch@2.0.0-alpha.3: {} @@ -10186,13 +10345,6 @@ snapshots: only@0.0.2: {} - open@10.2.0: - dependencies: - default-browser: 5.5.0 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - wsl-utils: 0.1.0 - open@11.0.0: dependencies: default-browser: 5.5.0 @@ -10216,149 +10368,135 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxc-minify@0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): + oxc-minify@0.133.0: optionalDependencies: - '@oxc-minify/binding-android-arm-eabi': 0.117.0 - '@oxc-minify/binding-android-arm64': 0.117.0 - '@oxc-minify/binding-darwin-arm64': 0.117.0 - '@oxc-minify/binding-darwin-x64': 0.117.0 - '@oxc-minify/binding-freebsd-x64': 0.117.0 - '@oxc-minify/binding-linux-arm-gnueabihf': 0.117.0 - '@oxc-minify/binding-linux-arm-musleabihf': 0.117.0 - '@oxc-minify/binding-linux-arm64-gnu': 0.117.0 - '@oxc-minify/binding-linux-arm64-musl': 0.117.0 - '@oxc-minify/binding-linux-ppc64-gnu': 0.117.0 - '@oxc-minify/binding-linux-riscv64-gnu': 0.117.0 - '@oxc-minify/binding-linux-riscv64-musl': 0.117.0 - '@oxc-minify/binding-linux-s390x-gnu': 0.117.0 - '@oxc-minify/binding-linux-x64-gnu': 0.117.0 - '@oxc-minify/binding-linux-x64-musl': 0.117.0 - '@oxc-minify/binding-openharmony-arm64': 0.117.0 - '@oxc-minify/binding-wasm32-wasi': 0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - '@oxc-minify/binding-win32-arm64-msvc': 0.117.0 - '@oxc-minify/binding-win32-ia32-msvc': 0.117.0 - '@oxc-minify/binding-win32-x64-msvc': 0.117.0 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - oxc-parser@0.112.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): - dependencies: - '@oxc-project/types': 0.112.0 + '@oxc-minify/binding-android-arm-eabi': 0.133.0 + '@oxc-minify/binding-android-arm64': 0.133.0 + '@oxc-minify/binding-darwin-arm64': 0.133.0 + '@oxc-minify/binding-darwin-x64': 0.133.0 + '@oxc-minify/binding-freebsd-x64': 0.133.0 + '@oxc-minify/binding-linux-arm-gnueabihf': 0.133.0 + '@oxc-minify/binding-linux-arm-musleabihf': 0.133.0 + '@oxc-minify/binding-linux-arm64-gnu': 0.133.0 + '@oxc-minify/binding-linux-arm64-musl': 0.133.0 + '@oxc-minify/binding-linux-ppc64-gnu': 0.133.0 + '@oxc-minify/binding-linux-riscv64-gnu': 0.133.0 + '@oxc-minify/binding-linux-riscv64-musl': 0.133.0 + '@oxc-minify/binding-linux-s390x-gnu': 0.133.0 + '@oxc-minify/binding-linux-x64-gnu': 0.133.0 + '@oxc-minify/binding-linux-x64-musl': 0.133.0 + '@oxc-minify/binding-openharmony-arm64': 0.133.0 + '@oxc-minify/binding-wasm32-wasi': 0.133.0 + '@oxc-minify/binding-win32-arm64-msvc': 0.133.0 + '@oxc-minify/binding-win32-ia32-msvc': 0.133.0 + '@oxc-minify/binding-win32-x64-msvc': 0.133.0 + + oxc-parser@0.128.0: + dependencies: + '@oxc-project/types': 0.128.0 optionalDependencies: - '@oxc-parser/binding-android-arm-eabi': 0.112.0 - '@oxc-parser/binding-android-arm64': 0.112.0 - '@oxc-parser/binding-darwin-arm64': 0.112.0 - '@oxc-parser/binding-darwin-x64': 0.112.0 - '@oxc-parser/binding-freebsd-x64': 0.112.0 - '@oxc-parser/binding-linux-arm-gnueabihf': 0.112.0 - '@oxc-parser/binding-linux-arm-musleabihf': 0.112.0 - '@oxc-parser/binding-linux-arm64-gnu': 0.112.0 - '@oxc-parser/binding-linux-arm64-musl': 0.112.0 - '@oxc-parser/binding-linux-ppc64-gnu': 0.112.0 - '@oxc-parser/binding-linux-riscv64-gnu': 0.112.0 - '@oxc-parser/binding-linux-riscv64-musl': 0.112.0 - '@oxc-parser/binding-linux-s390x-gnu': 0.112.0 - '@oxc-parser/binding-linux-x64-gnu': 0.112.0 - '@oxc-parser/binding-linux-x64-musl': 0.112.0 - '@oxc-parser/binding-openharmony-arm64': 0.112.0 - '@oxc-parser/binding-wasm32-wasi': 0.112.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - '@oxc-parser/binding-win32-arm64-msvc': 0.112.0 - '@oxc-parser/binding-win32-ia32-msvc': 0.112.0 - '@oxc-parser/binding-win32-x64-msvc': 0.112.0 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - oxc-parser@0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): - dependencies: - '@oxc-project/types': 0.117.0 + '@oxc-parser/binding-android-arm-eabi': 0.128.0 + '@oxc-parser/binding-android-arm64': 0.128.0 + '@oxc-parser/binding-darwin-arm64': 0.128.0 + '@oxc-parser/binding-darwin-x64': 0.128.0 + '@oxc-parser/binding-freebsd-x64': 0.128.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.128.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.128.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.128.0 + '@oxc-parser/binding-linux-arm64-musl': 0.128.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.128.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.128.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.128.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.128.0 + '@oxc-parser/binding-linux-x64-gnu': 0.128.0 + '@oxc-parser/binding-linux-x64-musl': 0.128.0 + '@oxc-parser/binding-openharmony-arm64': 0.128.0 + '@oxc-parser/binding-wasm32-wasi': 0.128.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.128.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.128.0 + '@oxc-parser/binding-win32-x64-msvc': 0.128.0 + + oxc-parser@0.133.0: + dependencies: + '@oxc-project/types': 0.133.0 optionalDependencies: - '@oxc-parser/binding-android-arm-eabi': 0.117.0 - '@oxc-parser/binding-android-arm64': 0.117.0 - '@oxc-parser/binding-darwin-arm64': 0.117.0 - '@oxc-parser/binding-darwin-x64': 0.117.0 - '@oxc-parser/binding-freebsd-x64': 0.117.0 - '@oxc-parser/binding-linux-arm-gnueabihf': 0.117.0 - '@oxc-parser/binding-linux-arm-musleabihf': 0.117.0 - '@oxc-parser/binding-linux-arm64-gnu': 0.117.0 - '@oxc-parser/binding-linux-arm64-musl': 0.117.0 - '@oxc-parser/binding-linux-ppc64-gnu': 0.117.0 - '@oxc-parser/binding-linux-riscv64-gnu': 0.117.0 - '@oxc-parser/binding-linux-riscv64-musl': 0.117.0 - '@oxc-parser/binding-linux-s390x-gnu': 0.117.0 - '@oxc-parser/binding-linux-x64-gnu': 0.117.0 - '@oxc-parser/binding-linux-x64-musl': 0.117.0 - '@oxc-parser/binding-openharmony-arm64': 0.117.0 - '@oxc-parser/binding-wasm32-wasi': 0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - '@oxc-parser/binding-win32-arm64-msvc': 0.117.0 - '@oxc-parser/binding-win32-ia32-msvc': 0.117.0 - '@oxc-parser/binding-win32-x64-msvc': 0.117.0 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - oxc-transform@0.112.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): + '@oxc-parser/binding-android-arm-eabi': 0.133.0 + '@oxc-parser/binding-android-arm64': 0.133.0 + '@oxc-parser/binding-darwin-arm64': 0.133.0 + '@oxc-parser/binding-darwin-x64': 0.133.0 + '@oxc-parser/binding-freebsd-x64': 0.133.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.133.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.133.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.133.0 + '@oxc-parser/binding-linux-arm64-musl': 0.133.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.133.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.133.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.133.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.133.0 + '@oxc-parser/binding-linux-x64-gnu': 0.133.0 + '@oxc-parser/binding-linux-x64-musl': 0.133.0 + '@oxc-parser/binding-openharmony-arm64': 0.133.0 + '@oxc-parser/binding-wasm32-wasi': 0.133.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.133.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.133.0 + '@oxc-parser/binding-win32-x64-msvc': 0.133.0 + + oxc-transform@0.128.0: optionalDependencies: - '@oxc-transform/binding-android-arm-eabi': 0.112.0 - '@oxc-transform/binding-android-arm64': 0.112.0 - '@oxc-transform/binding-darwin-arm64': 0.112.0 - '@oxc-transform/binding-darwin-x64': 0.112.0 - '@oxc-transform/binding-freebsd-x64': 0.112.0 - '@oxc-transform/binding-linux-arm-gnueabihf': 0.112.0 - '@oxc-transform/binding-linux-arm-musleabihf': 0.112.0 - '@oxc-transform/binding-linux-arm64-gnu': 0.112.0 - '@oxc-transform/binding-linux-arm64-musl': 0.112.0 - '@oxc-transform/binding-linux-ppc64-gnu': 0.112.0 - '@oxc-transform/binding-linux-riscv64-gnu': 0.112.0 - '@oxc-transform/binding-linux-riscv64-musl': 0.112.0 - '@oxc-transform/binding-linux-s390x-gnu': 0.112.0 - '@oxc-transform/binding-linux-x64-gnu': 0.112.0 - '@oxc-transform/binding-linux-x64-musl': 0.112.0 - '@oxc-transform/binding-openharmony-arm64': 0.112.0 - '@oxc-transform/binding-wasm32-wasi': 0.112.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - '@oxc-transform/binding-win32-arm64-msvc': 0.112.0 - '@oxc-transform/binding-win32-ia32-msvc': 0.112.0 - '@oxc-transform/binding-win32-x64-msvc': 0.112.0 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - oxc-transform@0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): + '@oxc-transform/binding-android-arm-eabi': 0.128.0 + '@oxc-transform/binding-android-arm64': 0.128.0 + '@oxc-transform/binding-darwin-arm64': 0.128.0 + '@oxc-transform/binding-darwin-x64': 0.128.0 + '@oxc-transform/binding-freebsd-x64': 0.128.0 + '@oxc-transform/binding-linux-arm-gnueabihf': 0.128.0 + '@oxc-transform/binding-linux-arm-musleabihf': 0.128.0 + '@oxc-transform/binding-linux-arm64-gnu': 0.128.0 + '@oxc-transform/binding-linux-arm64-musl': 0.128.0 + '@oxc-transform/binding-linux-ppc64-gnu': 0.128.0 + '@oxc-transform/binding-linux-riscv64-gnu': 0.128.0 + '@oxc-transform/binding-linux-riscv64-musl': 0.128.0 + '@oxc-transform/binding-linux-s390x-gnu': 0.128.0 + '@oxc-transform/binding-linux-x64-gnu': 0.128.0 + '@oxc-transform/binding-linux-x64-musl': 0.128.0 + '@oxc-transform/binding-openharmony-arm64': 0.128.0 + '@oxc-transform/binding-wasm32-wasi': 0.128.0 + '@oxc-transform/binding-win32-arm64-msvc': 0.128.0 + '@oxc-transform/binding-win32-ia32-msvc': 0.128.0 + '@oxc-transform/binding-win32-x64-msvc': 0.128.0 + + oxc-transform@0.133.0: optionalDependencies: - '@oxc-transform/binding-android-arm-eabi': 0.117.0 - '@oxc-transform/binding-android-arm64': 0.117.0 - '@oxc-transform/binding-darwin-arm64': 0.117.0 - '@oxc-transform/binding-darwin-x64': 0.117.0 - '@oxc-transform/binding-freebsd-x64': 0.117.0 - '@oxc-transform/binding-linux-arm-gnueabihf': 0.117.0 - '@oxc-transform/binding-linux-arm-musleabihf': 0.117.0 - '@oxc-transform/binding-linux-arm64-gnu': 0.117.0 - '@oxc-transform/binding-linux-arm64-musl': 0.117.0 - '@oxc-transform/binding-linux-ppc64-gnu': 0.117.0 - '@oxc-transform/binding-linux-riscv64-gnu': 0.117.0 - '@oxc-transform/binding-linux-riscv64-musl': 0.117.0 - '@oxc-transform/binding-linux-s390x-gnu': 0.117.0 - '@oxc-transform/binding-linux-x64-gnu': 0.117.0 - '@oxc-transform/binding-linux-x64-musl': 0.117.0 - '@oxc-transform/binding-openharmony-arm64': 0.117.0 - '@oxc-transform/binding-wasm32-wasi': 0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - '@oxc-transform/binding-win32-arm64-msvc': 0.117.0 - '@oxc-transform/binding-win32-ia32-msvc': 0.117.0 - '@oxc-transform/binding-win32-x64-msvc': 0.117.0 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - oxc-walker@0.7.0(oxc-parser@0.112.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)): + '@oxc-transform/binding-android-arm-eabi': 0.133.0 + '@oxc-transform/binding-android-arm64': 0.133.0 + '@oxc-transform/binding-darwin-arm64': 0.133.0 + '@oxc-transform/binding-darwin-x64': 0.133.0 + '@oxc-transform/binding-freebsd-x64': 0.133.0 + '@oxc-transform/binding-linux-arm-gnueabihf': 0.133.0 + '@oxc-transform/binding-linux-arm-musleabihf': 0.133.0 + '@oxc-transform/binding-linux-arm64-gnu': 0.133.0 + '@oxc-transform/binding-linux-arm64-musl': 0.133.0 + '@oxc-transform/binding-linux-ppc64-gnu': 0.133.0 + '@oxc-transform/binding-linux-riscv64-gnu': 0.133.0 + '@oxc-transform/binding-linux-riscv64-musl': 0.133.0 + '@oxc-transform/binding-linux-s390x-gnu': 0.133.0 + '@oxc-transform/binding-linux-x64-gnu': 0.133.0 + '@oxc-transform/binding-linux-x64-musl': 0.133.0 + '@oxc-transform/binding-openharmony-arm64': 0.133.0 + '@oxc-transform/binding-wasm32-wasi': 0.133.0 + '@oxc-transform/binding-win32-arm64-msvc': 0.133.0 + '@oxc-transform/binding-win32-ia32-msvc': 0.133.0 + '@oxc-transform/binding-win32-x64-msvc': 0.133.0 + + oxc-walker@0.7.0(oxc-parser@0.128.0): dependencies: magic-regexp: 0.10.0 - oxc-parser: 0.112.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + oxc-parser: 0.128.0 - oxc-walker@0.7.0(oxc-parser@0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)): + oxc-walker@1.0.0(oxc-parser@0.133.0): dependencies: - magic-regexp: 0.10.0 - oxc-parser: 0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + magic-regexp: 0.11.0 + optionalDependencies: + oxc-parser: 0.133.0 oxfmt@0.53.0: dependencies: @@ -10466,7 +10604,7 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.2.7 + lru-cache: 11.5.1 minipass: 7.1.3 path-to-regexp@6.3.0: {} @@ -10493,7 +10631,7 @@ snapshots: mlly: 1.8.2 pathe: 2.0.3 - pkg-types@2.3.0: + pkg-types@2.3.1: dependencies: confbox: 0.2.4 exsolve: 1.0.8 @@ -10506,197 +10644,199 @@ snapshots: transitivePeerDependencies: - supports-color - postcss-calc@10.1.1(postcss@8.5.8): + postcss-calc@10.1.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 - postcss-selector-parser: 7.1.1 + postcss: 8.5.15 + postcss-selector-parser: 7.1.4 postcss-value-parser: 4.2.0 - postcss-colormin@7.0.7(postcss@8.5.8): + postcss-colormin@8.0.1(postcss@8.5.15): dependencies: - '@colordx/core': 5.0.1 + '@colordx/core': 5.4.3 browserslist: 4.28.2 - caniuse-api: 3.0.0 - postcss: 8.5.8 + caniuse-api: 4.0.0 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-convert-values@7.0.9(postcss@8.5.8): + postcss-convert-values@8.0.1(postcss@8.5.15): dependencies: browserslist: 4.28.2 - postcss: 8.5.8 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-discard-comments@7.0.6(postcss@8.5.8): + postcss-discard-comments@8.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 - postcss-selector-parser: 7.1.1 + postcss: 8.5.15 + postcss-selector-parser: 7.1.4 - postcss-discard-duplicates@7.0.2(postcss@8.5.8): + postcss-discard-duplicates@8.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 + postcss: 8.5.15 - postcss-discard-empty@7.0.1(postcss@8.5.8): + postcss-discard-empty@8.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 + postcss: 8.5.15 - postcss-discard-overridden@7.0.1(postcss@8.5.8): + postcss-discard-overridden@8.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 + postcss: 8.5.15 - postcss-import@15.1.0(postcss@8.5.8): + postcss-import@15.1.0(postcss@8.5.15): dependencies: - postcss: 8.5.8 + postcss: 8.5.15 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.11 + resolve: 1.22.12 - postcss-js@4.1.0(postcss@8.5.8): + postcss-js@4.1.0(postcss@8.5.15): dependencies: camelcase-css: 2.0.1 - postcss: 8.5.8 + postcss: 8.5.15 - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.8)(tsx@4.19.2)(yaml@2.8.3): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.15)(tsx@4.19.2)(yaml@2.9.0): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 1.21.7 - postcss: 8.5.8 + postcss: 8.5.15 tsx: 4.19.2 - yaml: 2.8.3 + yaml: 2.9.0 - postcss-merge-longhand@7.0.5(postcss@8.5.8): + postcss-merge-longhand@8.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - stylehacks: 7.0.8(postcss@8.5.8) + stylehacks: 8.0.1(postcss@8.5.15) - postcss-merge-rules@7.0.8(postcss@8.5.8): + postcss-merge-rules@8.0.1(postcss@8.5.15): dependencies: browserslist: 4.28.2 - caniuse-api: 3.0.0 - cssnano-utils: 5.0.1(postcss@8.5.8) - postcss: 8.5.8 - postcss-selector-parser: 7.1.1 + caniuse-api: 4.0.0 + cssnano-utils: 6.0.1(postcss@8.5.15) + postcss: 8.5.15 + postcss-selector-parser: 7.1.4 - postcss-minify-font-values@7.0.1(postcss@8.5.8): + postcss-minify-font-values@8.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-minify-gradients@7.0.2(postcss@8.5.8): + postcss-minify-gradients@8.0.1(postcss@8.5.15): dependencies: - '@colordx/core': 5.0.1 - cssnano-utils: 5.0.1(postcss@8.5.8) - postcss: 8.5.8 + '@colordx/core': 5.4.3 + cssnano-utils: 6.0.1(postcss@8.5.15) + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-minify-params@7.0.6(postcss@8.5.8): + postcss-minify-params@8.0.1(postcss@8.5.15): dependencies: browserslist: 4.28.2 - cssnano-utils: 5.0.1(postcss@8.5.8) - postcss: 8.5.8 + cssnano-utils: 6.0.1(postcss@8.5.15) + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-minify-selectors@7.0.6(postcss@8.5.8): + postcss-minify-selectors@8.0.2(postcss@8.5.15): dependencies: + browserslist: 4.28.2 + caniuse-api: 4.0.0 cssesc: 3.0.0 - postcss: 8.5.8 - postcss-selector-parser: 7.1.1 + postcss: 8.5.15 + postcss-selector-parser: 7.1.4 - postcss-nested@6.2.0(postcss@8.5.8): + postcss-nested@6.2.0(postcss@8.5.15): dependencies: - postcss: 8.5.8 - postcss-selector-parser: 6.1.2 + postcss: 8.5.15 + postcss-selector-parser: 6.1.4 - postcss-nesting@13.0.2(postcss@8.5.8): + postcss-nesting@13.0.2(postcss@8.5.15): dependencies: - '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.1) - '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.8 - postcss-selector-parser: 7.1.1 + '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.4) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.4) + postcss: 8.5.15 + postcss-selector-parser: 7.1.4 - postcss-normalize-charset@7.0.1(postcss@8.5.8): + postcss-normalize-charset@8.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 + postcss: 8.5.15 - postcss-normalize-display-values@7.0.1(postcss@8.5.8): + postcss-normalize-display-values@8.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-positions@7.0.1(postcss@8.5.8): + postcss-normalize-positions@8.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@7.0.1(postcss@8.5.8): + postcss-normalize-repeat-style@8.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-string@7.0.1(postcss@8.5.8): + postcss-normalize-string@8.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@7.0.1(postcss@8.5.8): + postcss-normalize-timing-functions@8.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@7.0.6(postcss@8.5.8): + postcss-normalize-unicode@8.0.1(postcss@8.5.15): dependencies: browserslist: 4.28.2 - postcss: 8.5.8 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-url@7.0.1(postcss@8.5.8): + postcss-normalize-url@8.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@7.0.1(postcss@8.5.8): + postcss-normalize-whitespace@8.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-ordered-values@7.0.2(postcss@8.5.8): + postcss-ordered-values@8.0.1(postcss@8.5.15): dependencies: - cssnano-utils: 5.0.1(postcss@8.5.8) - postcss: 8.5.8 + cssnano-utils: 6.0.1(postcss@8.5.15) + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-reduce-initial@7.0.6(postcss@8.5.8): + postcss-reduce-initial@8.0.1(postcss@8.5.15): dependencies: browserslist: 4.28.2 - caniuse-api: 3.0.0 - postcss: 8.5.8 + caniuse-api: 4.0.0 + postcss: 8.5.15 - postcss-reduce-transforms@7.0.1(postcss@8.5.8): + postcss-reduce-transforms@8.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-selector-parser@6.1.2: + postcss-selector-parser@6.1.4: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-selector-parser@7.1.1: + postcss-selector-parser@7.1.4: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-svgo@7.1.1(postcss@8.5.8): + postcss-svgo@8.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 + postcss: 8.5.15 postcss-value-parser: 4.2.0 svgo: 4.0.1 - postcss-unique-selectors@7.0.5(postcss@8.5.8): + postcss-unique-selectors@8.0.1(postcss@8.5.15): dependencies: - postcss: 8.5.8 - postcss-selector-parser: 7.1.1 + postcss: 8.5.15 + postcss-selector-parser: 7.1.4 postcss-value-parser@4.2.0: {} @@ -10706,12 +10846,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.8: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - powershell-utils@0.1.0: {} prelude-ls@1.2.1: {} @@ -10722,11 +10856,17 @@ snapshots: process@0.11.10: {} + proper-lockfile@4.1.2: + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 + punycode@2.3.1: {} qs@6.15.2: dependencies: - side-channel: 1.1.0 + side-channel: 1.1.1 optional: true quansync@0.2.11: {} @@ -10739,7 +10879,7 @@ snapshots: rc9@3.0.1: dependencies: - defu: 6.1.6 + defu: 6.1.7 destr: 2.0.5 read-cache@1.0.0: @@ -10772,7 +10912,8 @@ snapshots: dependencies: picomatch: 2.3.2 - readdirp@4.1.2: {} + readdirp@4.1.2: + optional: true readdirp@5.0.0: {} @@ -10806,69 +10947,57 @@ snapshots: resolve-pkg-maps@1.0.0: optional: true - resolve@1.22.11: + resolve@1.22.12: dependencies: - is-core-module: 2.16.1 + es-errors: 1.3.0 + is-core-module: 2.16.2 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + retry@0.12.0: {} + reusify@1.1.0: {} - rollup-plugin-visualizer@7.0.1(rollup@4.60.1): + rollup-plugin-visualizer@7.0.1(rollup@4.61.1): dependencies: open: 11.0.0 picomatch: 4.0.4 source-map: 0.7.6 yargs: 18.0.0 optionalDependencies: - rollup: 4.60.1 + rollup: 4.61.1 - rollup@4.60.1: + rollup@4.61.1: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.60.1 - '@rollup/rollup-android-arm64': 4.60.1 - '@rollup/rollup-darwin-arm64': 4.60.1 - '@rollup/rollup-darwin-x64': 4.60.1 - '@rollup/rollup-freebsd-arm64': 4.60.1 - '@rollup/rollup-freebsd-x64': 4.60.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.60.1 - '@rollup/rollup-linux-arm-musleabihf': 4.60.1 - '@rollup/rollup-linux-arm64-gnu': 4.60.1 - '@rollup/rollup-linux-arm64-musl': 4.60.1 - '@rollup/rollup-linux-loong64-gnu': 4.60.1 - '@rollup/rollup-linux-loong64-musl': 4.60.1 - '@rollup/rollup-linux-ppc64-gnu': 4.60.1 - '@rollup/rollup-linux-ppc64-musl': 4.60.1 - '@rollup/rollup-linux-riscv64-gnu': 4.60.1 - '@rollup/rollup-linux-riscv64-musl': 4.60.1 - '@rollup/rollup-linux-s390x-gnu': 4.60.1 - '@rollup/rollup-linux-x64-gnu': 4.60.1 - '@rollup/rollup-linux-x64-musl': 4.60.1 - '@rollup/rollup-openbsd-x64': 4.60.1 - '@rollup/rollup-openharmony-arm64': 4.60.1 - '@rollup/rollup-win32-arm64-msvc': 4.60.1 - '@rollup/rollup-win32-ia32-msvc': 4.60.1 - '@rollup/rollup-win32-x64-gnu': 4.60.1 - '@rollup/rollup-win32-x64-msvc': 4.60.1 + '@rollup/rollup-android-arm-eabi': 4.61.1 + '@rollup/rollup-android-arm64': 4.61.1 + '@rollup/rollup-darwin-arm64': 4.61.1 + '@rollup/rollup-darwin-x64': 4.61.1 + '@rollup/rollup-freebsd-arm64': 4.61.1 + '@rollup/rollup-freebsd-x64': 4.61.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.61.1 + '@rollup/rollup-linux-arm-musleabihf': 4.61.1 + '@rollup/rollup-linux-arm64-gnu': 4.61.1 + '@rollup/rollup-linux-arm64-musl': 4.61.1 + '@rollup/rollup-linux-loong64-gnu': 4.61.1 + '@rollup/rollup-linux-loong64-musl': 4.61.1 + '@rollup/rollup-linux-ppc64-gnu': 4.61.1 + '@rollup/rollup-linux-ppc64-musl': 4.61.1 + '@rollup/rollup-linux-riscv64-gnu': 4.61.1 + '@rollup/rollup-linux-riscv64-musl': 4.61.1 + '@rollup/rollup-linux-s390x-gnu': 4.61.1 + '@rollup/rollup-linux-x64-gnu': 4.61.1 + '@rollup/rollup-linux-x64-musl': 4.61.1 + '@rollup/rollup-openbsd-x64': 4.61.1 + '@rollup/rollup-openharmony-arm64': 4.61.1 + '@rollup/rollup-win32-arm64-msvc': 4.61.1 + '@rollup/rollup-win32-ia32-msvc': 4.61.1 + '@rollup/rollup-win32-x64-gnu': 4.61.1 + '@rollup/rollup-win32-x64-msvc': 4.61.1 fsevents: 2.3.3 - rosie-skills-darwin-arm64@0.6.4: - optional: true - - rosie-skills-freebsd-x64@0.6.4: - optional: true - - rosie-skills-linux-x64@0.6.4: - optional: true - - rosie-skills@0.6.4: - optionalDependencies: - rosie-skills-darwin-arm64: 0.6.4 - rosie-skills-freebsd-x64: 0.6.4 - rosie-skills-linux-x64: 0.6.4 - rou3@0.8.1: {} run-applescript@7.1.0: {} @@ -10897,7 +11026,7 @@ snapshots: semver@6.3.1: {} - semver@7.7.4: {} + semver@7.8.4: {} send@1.2.1: dependencies: @@ -10917,11 +11046,11 @@ snapshots: serialize-javascript@7.0.5: {} - seroval@1.5.1: {} + seroval@1.5.4: {} serve-placeholder@2.0.2: dependencies: - defu: 6.1.6 + defu: 6.1.7 serve-static@2.2.1: dependencies: @@ -10940,7 +11069,7 @@ snapshots: dependencies: '@img/colour': 1.1.0 detect-libc: 2.1.2 - semver: 7.7.4 + semver: 7.8.4 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.5 '@img/sharp-darwin-x64': 0.34.5 @@ -10973,7 +11102,7 @@ snapshots: shebang-regex@3.0.0: {} - shell-quote@1.8.3: {} + shell-quote@1.8.4: {} side-channel-list@1.0.1: dependencies: @@ -10998,7 +11127,7 @@ snapshots: side-channel-map: 1.0.1 optional: true - side-channel@1.1.0: + side-channel@1.1.1: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 @@ -11007,12 +11136,16 @@ snapshots: side-channel-weakmap: 1.0.2 optional: true + signal-exit@3.0.7: {} + signal-exit@4.1.0: {} - simple-git@3.33.0: + simple-git@3.36.0: dependencies: '@kwsites/file-exists': 1.1.1 '@kwsites/promise-deferred': 1.1.1 + '@simple-git/args-pathspec': 1.0.3 + '@simple-git/argv-parser': 1.1.1 debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -11031,7 +11164,7 @@ snapshots: slash@5.1.0: {} - smob@1.6.1: {} + smob@1.6.2: {} source-map-js@1.2.1: {} @@ -11044,7 +11177,7 @@ snapshots: source-map@0.7.6: {} - srvx@0.11.14: {} + srvx@0.11.16: {} standard-as-callback@2.1.0: {} @@ -11052,11 +11185,9 @@ snapshots: statuses@2.0.2: {} - std-env@3.10.0: {} - - std-env@4.0.0: {} + std-env@4.1.0: {} - streamx@2.25.0: + streamx@2.28.0: dependencies: events-universal: 1.0.1 fast-fifo: 1.3.2 @@ -11080,7 +11211,7 @@ snapshots: string-width@7.2.0: dependencies: emoji-regex: 10.6.0 - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 string_decoder@1.1.1: @@ -11109,11 +11240,11 @@ snapshots: structured-clone-es@2.0.0: {} - stylehacks@7.0.8(postcss@8.5.8): + stylehacks@8.0.1(postcss@8.5.15): dependencies: browserslist: 4.28.2 - postcss: 8.5.8 - postcss-selector-parser: 7.1.1 + postcss: 8.5.15 + postcss-selector-parser: 7.1.4 sucrase@3.35.1: dependencies: @@ -11122,7 +11253,7 @@ snapshots: lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.7 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 ts-interface-checker: 0.1.13 supports-color@10.2.2: {} @@ -11145,7 +11276,7 @@ snapshots: tagged-tag@1.0.0: {} - tailwind-config-viewer@2.0.4(tailwindcss@3.4.19(tsx@4.19.2)(yaml@2.8.3)): + tailwind-config-viewer@2.0.4(tailwindcss@3.4.19(tsx@4.19.2)(yaml@2.9.0)): dependencies: '@koa/router': 12.0.2 commander: 6.2.1 @@ -11155,11 +11286,11 @@ snapshots: open: 7.4.2 portfinder: 1.0.38 replace-in-file: 6.3.5 - tailwindcss: 3.4.19(tsx@4.19.2)(yaml@2.8.3) + tailwindcss: 3.4.19(tsx@4.19.2)(yaml@2.9.0) transitivePeerDependencies: - supports-color - tailwindcss@3.4.19(tsx@4.19.2)(yaml@2.8.3): + tailwindcss@3.4.19(tsx@4.19.2)(yaml@2.9.0): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -11175,30 +11306,30 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.8 - postcss-import: 15.1.0(postcss@8.5.8) - postcss-js: 4.1.0(postcss@8.5.8) - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.8)(tsx@4.19.2)(yaml@2.8.3) - postcss-nested: 6.2.0(postcss@8.5.8) - postcss-selector-parser: 6.1.2 - resolve: 1.22.11 + postcss: 8.5.15 + postcss-import: 15.1.0(postcss@8.5.15) + postcss-js: 4.1.0(postcss@8.5.15) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.15)(tsx@4.19.2)(yaml@2.9.0) + postcss-nested: 6.2.0(postcss@8.5.15) + postcss-selector-parser: 6.1.4 + resolve: 1.22.12 sucrase: 3.35.1 transitivePeerDependencies: - tsx - yaml - tar-stream@3.1.8: + tar-stream@3.2.0: dependencies: - b4a: 1.8.0 - bare-fs: 4.5.6 + b4a: 1.8.1 + bare-fs: 4.7.2 fast-fifo: 1.3.2 - streamx: 2.25.0 + streamx: 2.28.0 transitivePeerDependencies: - bare-abort-controller - bare-buffer - react-native-b4a - tar@7.5.13: + tar@7.5.16: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -11208,21 +11339,21 @@ snapshots: teex@1.0.1: dependencies: - streamx: 2.25.0 + streamx: 2.28.0 transitivePeerDependencies: - bare-abort-controller - react-native-b4a - terser@5.46.1: + terser@5.48.0: dependencies: '@jridgewell/source-map': 0.3.11 - acorn: 8.16.0 + acorn: 8.17.0 commander: 2.20.3 source-map-support: 0.5.21 text-decoder@1.2.7: dependencies: - b4a: 1.8.0 + b4a: 1.8.1 transitivePeerDependencies: - react-native-b4a @@ -11236,11 +11367,11 @@ snapshots: tiny-invariant@1.3.3: {} - tinyclip@0.1.12: {} + tinyclip@0.1.14: {} - tinyexec@1.0.4: {} + tinyexec@1.2.4: {} - tinyglobby@0.2.15: + tinyglobby@0.2.17: dependencies: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 @@ -11287,7 +11418,7 @@ snapshots: type-fest@4.41.0: optional: true - type-fest@5.5.0: + type-fest@5.7.0: dependencies: tagged-tag: 1.0.0 @@ -11300,7 +11431,7 @@ snapshots: typescript@5.9.3: {} - ufo@1.6.3: {} + ufo@1.6.4: {} ultrahtml@1.6.0: {} @@ -11308,7 +11439,7 @@ snapshots: unctx@2.5.0: dependencies: - acorn: 8.16.0 + acorn: 8.17.0 estree-walker: 3.0.3 magic-string: 0.30.21 unplugin: 2.3.11 @@ -11321,9 +11452,9 @@ snapshots: dependencies: pathe: 2.0.3 - unhead@2.1.12: + unhead@2.1.15: dependencies: - hookable: 6.1.0 + hookable: 6.1.1 unicorn-magic@0.1.0: optional: true @@ -11332,22 +11463,24 @@ snapshots: unicorn-magic@0.4.0: {} - unimport@6.0.2: + unimport@6.3.0(oxc-parser@0.133.0): dependencies: - acorn: 8.16.0 + acorn: 8.17.0 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 - local-pkg: 1.1.2 + local-pkg: 1.2.1 magic-string: 0.30.21 mlly: 1.8.2 pathe: 2.0.3 picomatch: 4.0.4 - pkg-types: 2.3.0 + pkg-types: 2.3.1 scule: 1.3.0 strip-literal: 3.1.0 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 unplugin: 3.0.0 unplugin-utils: 0.3.1 + optionalDependencies: + oxc-parser: 0.133.0 universalify@2.0.1: {} @@ -11359,7 +11492,7 @@ snapshots: unplugin@2.3.11: dependencies: '@jridgewell/remapping': 2.3.5 - acorn: 8.16.0 + acorn: 8.17.0 picomatch: 4.0.4 webpack-virtual-modules: 0.6.2 @@ -11372,24 +11505,24 @@ snapshots: unrouting@0.1.7: dependencies: escape-string-regexp: 5.0.0 - ufo: 1.6.3 + ufo: 1.6.4 - unstorage@1.17.5(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.10.1): + unstorage@1.17.5(@netlify/blobs@9.1.2)(@upstash/redis@1.38.0)(@vercel/kv@3.0.0)(db0@0.3.4)(ioredis@5.11.1): dependencies: anymatch: 3.1.3 chokidar: 5.0.0 destr: 2.0.5 h3: 1.15.11 - lru-cache: 11.2.7 + lru-cache: 11.5.1 node-fetch-native: 1.6.7 ofetch: 1.5.1 - ufo: 1.6.3 + ufo: 1.6.4 optionalDependencies: '@netlify/blobs': 9.1.2 '@upstash/redis': 1.38.0 '@vercel/kv': 3.0.0 db0: 0.3.4 - ioredis: 5.10.1 + ioredis: 5.11.1 untun@0.1.3: dependencies: @@ -11400,8 +11533,8 @@ snapshots: untyped@2.0.0: dependencies: citty: 0.1.6 - defu: 6.1.6 - jiti: 2.6.1 + defu: 6.1.7 + jiti: 2.7.0 knitwork: 1.3.0 scule: 1.3.0 @@ -11412,7 +11545,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.2 pathe: 2.0.3 - pkg-types: 2.3.0 + pkg-types: 2.3.1 update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: @@ -11420,7 +11553,7 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - uqr@0.1.2: {} + uqr@0.1.3: {} uri-js@4.4.1: dependencies: @@ -11436,23 +11569,23 @@ snapshots: vary@1.1.2: {} - vite-dev-rpc@1.1.0(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3)): + vite-dev-rpc@2.0.0(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0)): dependencies: - birpc: 2.9.0 - vite: 7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) - vite-hot-client: 2.1.0(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3)) + birpc: 4.0.0 + vite: 7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0) + vite-hot-client: 2.2.0(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0)) - vite-hot-client@2.1.0(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3)): + vite-hot-client@2.2.0(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0)): dependencies: - vite: 7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) + vite: 7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0) - vite-node@5.3.0(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3): + vite-node@5.3.0(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0): dependencies: cac: 6.7.14 - es-module-lexer: 2.0.0 - obug: 2.1.1 + es-module-lexer: 2.1.0 + obug: 2.1.3 pathe: 2.0.3 - vite: 7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) + vite: 7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0) transitivePeerDependencies: - '@types/node' - jiti @@ -11466,117 +11599,113 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.12.0(eslint@9.39.4(jiti@2.6.1))(optionator@0.9.4)(oxlint@1.56.0)(typescript@5.9.3)(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3)): + vite-plugin-checker@0.14.1(eslint@9.39.4(jiti@2.7.0))(optionator@0.9.4)(oxlint@1.56.0)(typescript@5.9.3)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0)): dependencies: - '@babel/code-frame': 7.29.0 - chokidar: 4.0.3 + '@babel/code-frame': 7.29.7 + chokidar: 5.0.0 npm-run-path: 6.0.0 picocolors: 1.1.1 picomatch: 4.0.4 + proper-lockfile: 4.1.2 tiny-invariant: 1.3.3 - tinyglobby: 0.2.15 - vite: 7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) - vscode-uri: 3.1.0 + vite: 7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0) optionalDependencies: - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) optionator: 0.9.4 oxlint: 1.56.0 typescript: 5.9.3 - vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3)): + vite-plugin-inspect@11.4.1(@nuxt/kit@4.4.8(magicast@0.5.3))(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0)): dependencies: - ansis: 4.2.0 - debug: 4.4.3 + ansis: 4.3.1 error-stack-parser-es: 1.0.5 + obug: 2.1.3 ohash: 2.0.11 - open: 10.2.0 + open: 11.0.0 perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: 7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) - vite-dev-rpc: 1.1.0(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3)) + vite: 7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0) + vite-dev-rpc: 2.0.0(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0)) optionalDependencies: - '@nuxt/kit': 4.4.2(magicast@0.5.2) - transitivePeerDependencies: - - supports-color + '@nuxt/kit': 4.4.8(magicast@0.5.3) - vite-plugin-vue-tracer@1.3.0(vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3))(vue@3.5.35(typescript@5.9.3)): + vite-plugin-vue-tracer@1.4.0(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.38(typescript@5.9.3)): dependencies: estree-walker: 3.0.3 exsolve: 1.0.8 magic-string: 0.30.21 pathe: 2.0.3 source-map-js: 1.2.1 - vite: 7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3) - vue: 3.5.35(typescript@5.9.3) + vite: 7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0) + vue: 3.5.38(typescript@5.9.3) - vite@7.3.1(@types/node@22.15.19)(jiti@2.6.1)(terser@5.46.1)(tsx@4.19.2)(yaml@2.8.3): + vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0): dependencies: - esbuild: 0.27.5 + esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 - postcss: 8.5.8 - rollup: 4.60.1 - tinyglobby: 0.2.15 + postcss: 8.5.15 + rollup: 4.61.1 + tinyglobby: 0.2.17 optionalDependencies: '@types/node': 22.15.19 fsevents: 2.3.3 - jiti: 2.6.1 - terser: 5.46.1 + jiti: 2.7.0 + terser: 5.48.0 tsx: 4.19.2 - yaml: 2.8.3 - - vscode-uri@3.1.0: {} + yaml: 2.9.0 vue-bundle-renderer@2.2.0: dependencies: - ufo: 1.6.3 + ufo: 1.6.4 vue-devtools-stub@0.1.0: {} - vue-echarts@8.0.1(echarts@6.0.0)(vue@3.5.35(typescript@5.9.3)): + vue-echarts@8.0.1(echarts@6.1.0)(vue@3.5.38(typescript@5.9.3)): dependencies: - echarts: 6.0.0 - vue: 3.5.35(typescript@5.9.3) + echarts: 6.1.0 + vue: 3.5.38(typescript@5.9.3) - vue-i18n@11.3.0(vue@3.5.35(typescript@5.9.3)): + vue-i18n@11.4.5(vue@3.5.38(typescript@5.9.3)): dependencies: - '@intlify/core-base': 11.3.0 - '@intlify/devtools-types': 11.3.0 - '@intlify/shared': 11.3.0 + '@intlify/core-base': 11.4.5 + '@intlify/devtools-types': 11.4.5 + '@intlify/shared': 11.4.5 '@vue/devtools-api': 6.6.4 - vue: 3.5.35(typescript@5.9.3) + vue: 3.5.38(typescript@5.9.3) - vue-router@5.0.4(@vue/compiler-sfc@3.5.31)(vue@3.5.35(typescript@5.9.3)): + vue-router@5.1.0(@vue/compiler-sfc@3.5.38)(vite@7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0))(vue@3.5.38(typescript@5.9.3)): dependencies: - '@babel/generator': 7.29.1 - '@vue-macros/common': 3.1.2(vue@3.5.35(typescript@5.9.3)) - '@vue/devtools-api': 8.1.1 - ast-walker-scope: 0.8.3 + '@babel/generator': 8.0.0-rc.6 + '@vue-macros/common': 3.1.2(vue@3.5.38(typescript@5.9.3)) + '@vue/devtools-api': 8.1.2 + ast-walker-scope: 0.9.0 chokidar: 5.0.0 json5: 2.2.3 - local-pkg: 1.1.2 + local-pkg: 1.2.1 magic-string: 0.30.21 mlly: 1.8.2 muggle-string: 0.4.1 pathe: 2.0.3 picomatch: 4.0.4 scule: 1.3.0 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 unplugin: 3.0.0 unplugin-utils: 0.3.1 - vue: 3.5.35(typescript@5.9.3) - yaml: 2.8.3 + vue: 3.5.38(typescript@5.9.3) + yaml: 2.9.0 optionalDependencies: - '@vue/compiler-sfc': 3.5.31 + '@vue/compiler-sfc': 3.5.38 + vite: 7.3.5(@types/node@22.15.19)(jiti@2.7.0)(terser@5.48.0)(tsx@4.19.2)(yaml@2.9.0) - vue@3.5.35(typescript@5.9.3): + vue@3.5.38(typescript@5.9.3): dependencies: - '@vue/compiler-dom': 3.5.35 - '@vue/compiler-sfc': 3.5.35 - '@vue/runtime-dom': 3.5.35 - '@vue/server-renderer': 3.5.35(vue@3.5.35(typescript@5.9.3)) - '@vue/shared': 3.5.35 + '@vue/compiler-dom': 3.5.38 + '@vue/compiler-sfc': 3.5.38 + '@vue/runtime-dom': 3.5.38 + '@vue/server-renderer': 3.5.38(vue@3.5.38(typescript@5.9.3)) + '@vue/shared': 3.5.38 optionalDependencies: typescript: 5.9.3 @@ -11602,25 +11731,24 @@ snapshots: word-wrap@1.2.5: {} - workerd@1.20260526.1: + workerd@1.20260611.1: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20260526.1 - '@cloudflare/workerd-darwin-arm64': 1.20260526.1 - '@cloudflare/workerd-linux-64': 1.20260526.1 - '@cloudflare/workerd-linux-arm64': 1.20260526.1 - '@cloudflare/workerd-windows-64': 1.20260526.1 + '@cloudflare/workerd-darwin-64': 1.20260611.1 + '@cloudflare/workerd-darwin-arm64': 1.20260611.1 + '@cloudflare/workerd-linux-64': 1.20260611.1 + '@cloudflare/workerd-linux-arm64': 1.20260611.1 + '@cloudflare/workerd-windows-64': 1.20260611.1 - wrangler@4.95.0: + wrangler@4.100.0: dependencies: '@cloudflare/kv-asset-handler': 0.5.0 - '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260526.1) + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260611.1) blake3-wasm: 2.1.5 esbuild: 0.27.3 - miniflare: 4.20260526.0 + miniflare: 4.20260611.0 path-to-regexp: 6.3.0 - rosie-skills: 0.6.4 unenv: 2.0.0-rc.24 - workerd: 1.20260526.1 + workerd: 1.20260611.1 optionalDependencies: fsevents: 2.3.3 transitivePeerDependencies: @@ -11653,13 +11781,9 @@ snapshots: signal-exit: 4.1.0 optional: true - ws@8.20.0: {} - ws@8.20.1: {} - wsl-utils@0.1.0: - dependencies: - is-wsl: 3.1.1 + ws@8.21.0: {} wsl-utils@0.3.1: dependencies: @@ -11675,9 +11799,9 @@ snapshots: yaml-eslint-parser@1.3.2: dependencies: eslint-visitor-keys: 3.4.3 - yaml: 2.8.3 + yaml: 2.9.0 - yaml@2.8.3: {} + yaml@2.9.0: {} yargs-parser@21.1.1: {} @@ -11718,7 +11842,7 @@ snapshots: dependencies: '@poppinss/colors': 4.1.6 '@poppinss/dumper': 0.6.5 - '@speed-highlight/core': 1.2.15 + '@speed-highlight/core': 1.2.16 cookie: 1.1.1 youch-core: 0.3.3 @@ -11726,7 +11850,7 @@ snapshots: dependencies: '@poppinss/colors': 4.1.6 '@poppinss/dumper': 0.7.0 - '@speed-highlight/core': 1.2.15 + '@speed-highlight/core': 1.2.16 cookie-es: 3.1.1 youch-core: 0.3.3 @@ -11736,6 +11860,6 @@ snapshots: compress-commons: 6.0.2 readable-stream: 4.7.0 - zrender@6.0.0: + zrender@6.1.0: dependencies: tslib: 2.3.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index b37ec76e..6f5b1f84 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,5 +2,4 @@ packages: - node-vlmcs allowBuilds: esbuild: true - sharp: true workerd: true From 1e84130fdd73c2b882bdbc4b563f3b7546eea887 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E7=BA=B8=E5=BF=98=E5=BF=A7?= <54543761+ikxin@users.noreply.github.com> Date: Sat, 13 Jun 2026 18:18:29 +0800 Subject: [PATCH 12/19] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20Arco=20?= =?UTF-8?q?=E6=B7=B1=E8=89=B2=E6=A8=A1=E5=BC=8F=E5=88=B7=E6=96=B0=E9=97=AA?= =?UTF-8?q?=E7=83=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/assets/css/main.css | 243 --------------------------- app/plugins/arco-dark-mode.client.ts | 15 -- app/plugins/arco-design.ts | 16 ++ nuxt.config.ts | 13 ++ 4 files changed, 29 insertions(+), 258 deletions(-) delete mode 100644 app/plugins/arco-dark-mode.client.ts diff --git a/app/assets/css/main.css b/app/assets/css/main.css index 7ad8d294..e5033a6b 100644 --- a/app/assets/css/main.css +++ b/app/assets/css/main.css @@ -13,246 +13,3 @@ body { .arco-drawer-body { padding: 0; } - -html[class='dark-mode'] body { - --red-1: 77, 0, 10; - --red-2: 119, 6, 17; - --red-3: 161, 22, 31; - --red-4: 203, 46, 52; - --red-5: 245, 78, 78; - --red-6: 247, 105, 101; - --red-7: 249, 141, 134; - --red-8: 251, 176, 167; - --red-9: 253, 209, 202; - --red-10: 255, 240, 236; - --orangered-1: 77, 14, 0; - --orangered-2: 119, 30, 5; - --orangered-3: 162, 55, 20; - --orangered-4: 204, 87, 41; - --orangered-5: 247, 126, 69; - --orangered-6: 249, 146, 90; - --orangered-7: 250, 173, 125; - --orangered-8: 252, 198, 161; - --orangered-9: 253, 222, 197; - --orangered-10: 255, 244, 235; - --orange-1: 77, 27, 0; - --orange-2: 121, 48, 4; - --orange-3: 166, 75, 10; - --orange-4: 210, 105, 19; - --orange-5: 255, 141, 31; - --orange-6: 255, 150, 38; - --orange-7: 255, 179, 87; - --orange-8: 255, 205, 135; - --orange-9: 255, 227, 184; - --orange-10: 255, 247, 232; - --gold-1: 77, 45, 0; - --gold-2: 119, 75, 4; - --gold-3: 162, 111, 15; - --gold-4: 204, 150, 31; - --gold-5: 247, 192, 52; - --gold-6: 249, 204, 68; - --gold-7: 250, 220, 108; - --gold-8: 252, 233, 149; - --gold-9: 253, 244, 190; - --gold-10: 255, 252, 232; - --yellow-1: 77, 56, 0; - --yellow-2: 120, 94, 7; - --yellow-3: 163, 134, 20; - --yellow-4: 207, 179, 37; - --yellow-5: 250, 225, 60; - --yellow-6: 251, 233, 75; - --yellow-7: 252, 243, 116; - --yellow-8: 253, 250, 157; - --yellow-9: 254, 254, 198; - --yellow-10: 254, 255, 240; - --lime-1: 42, 77, 0; - --lime-2: 68, 112, 6; - --lime-3: 98, 148, 18; - --lime-4: 132, 183, 35; - --lime-5: 168, 219, 57; - --lime-6: 184, 226, 75; - --lime-7: 203, 233, 112; - --lime-8: 222, 241, 152; - --lime-9: 238, 248, 194; - --lime-10: 253, 255, 238; - --green-1: 0, 77, 28; - --green-2: 4, 102, 37; - --green-3: 10, 128, 45; - --green-4: 18, 154, 55; - --green-5: 29, 180, 64; - --green-6: 39, 195, 70; - --green-7: 80, 210, 102; - --green-8: 126, 225, 139; - --green-9: 178, 240, 183; - --green-10: 235, 255, 236; - --cyan-1: 0, 66, 77; - --cyan-2: 6, 97, 108; - --cyan-3: 17, 131, 139; - --cyan-4: 31, 166, 170; - --cyan-5: 48, 201, 201; - --cyan-6: 63, 212, 207; - --cyan-7: 102, 223, 215; - --cyan-8: 144, 233, 225; - --cyan-9: 190, 244, 237; - --cyan-10: 240, 255, 252; - --blue-1: 0, 26, 77; - --blue-2: 5, 47, 120; - --blue-3: 19, 76, 163; - --blue-4: 41, 113, 207; - --blue-5: 70, 154, 250; - --blue-6: 90, 170, 251; - --blue-7: 125, 193, 252; - --blue-8: 161, 213, 253; - --blue-9: 198, 232, 254; - --blue-10: 234, 248, 255; - --arcoblue-1: 0, 13, 77; - --arcoblue-2: 4, 27, 121; - --arcoblue-3: 14, 50, 166; - --arcoblue-4: 29, 77, 210; - --arcoblue-5: 48, 111, 255; - --arcoblue-6: 60, 126, 255; - --arcoblue-7: 104, 159, 255; - --arcoblue-8: 147, 190, 255; - --arcoblue-9: 190, 218, 255; - --arcoblue-10: 234, 244, 255; - --purple-1: 22, 0, 77; - --purple-2: 39, 6, 110; - --purple-3: 62, 19, 143; - --purple-4: 90, 37, 176; - --purple-5: 123, 61, 209; - --purple-6: 142, 81, 218; - --purple-7: 169, 116, 227; - --purple-8: 197, 154, 237; - --purple-9: 223, 194, 246; - --purple-10: 247, 237, 255; - --pinkpurple-1: 66, 0, 77; - --pinkpurple-2: 101, 3, 112; - --pinkpurple-3: 138, 13, 147; - --pinkpurple-4: 176, 27, 182; - --pinkpurple-5: 217, 46, 217; - --pinkpurple-6: 225, 61, 219; - --pinkpurple-7: 232, 102, 223; - --pinkpurple-8: 240, 146, 230; - --pinkpurple-9: 247, 193, 240; - --pinkpurple-10: 255, 242, 253; - --magenta-1: 77, 0, 52; - --magenta-2: 119, 8, 80; - --magenta-3: 161, 23, 108; - --magenta-4: 203, 43, 136; - --magenta-5: 245, 69, 166; - --magenta-6: 247, 86, 169; - --magenta-7: 249, 122, 184; - --magenta-8: 251, 158, 200; - --magenta-9: 253, 195, 219; - --magenta-10: 255, 232, 241; - --gray-1: 23, 23, 26; - --gray-2: 46, 46, 48; - --gray-3: 72, 72, 73; - --gray-4: 95, 95, 96; - --gray-5: 120, 120, 122; - --gray-6: 146, 146, 147; - --gray-7: 171, 171, 172; - --gray-8: 197, 197, 197; - --gray-9: 223, 223, 223; - --gray-10: 246, 246, 246; - --primary-1: var(--arcoblue-1); - --primary-2: var(--arcoblue-2); - --primary-3: var(--arcoblue-3); - --primary-4: var(--arcoblue-4); - --primary-5: var(--arcoblue-5); - --primary-6: var(--arcoblue-6); - --primary-7: var(--arcoblue-7); - --primary-8: var(--arcoblue-8); - --primary-9: var(--arcoblue-9); - --primary-10: var(--arcoblue-10); - --success-1: var(--green-1); - --success-2: var(--green-2); - --success-3: var(--green-3); - --success-4: var(--green-4); - --success-5: var(--green-5); - --success-6: var(--green-6); - --success-7: var(--green-7); - --success-8: var(--green-8); - --success-9: var(--green-9); - --success-10: var(--green-10); - --danger-1: var(--red-1); - --danger-2: var(--red-2); - --danger-3: var(--red-3); - --danger-4: var(--red-4); - --danger-5: var(--red-5); - --danger-6: var(--red-6); - --danger-7: var(--red-7); - --danger-8: var(--red-8); - --danger-9: var(--red-9); - --danger-10: var(--red-10); - --warning-1: var(--orange-1); - --warning-2: var(--orange-2); - --warning-3: var(--orange-3); - --warning-4: var(--orange-4); - --warning-5: var(--orange-5); - --warning-6: var(--orange-6); - --warning-7: var(--orange-7); - --warning-8: var(--orange-8); - --warning-9: var(--orange-9); - --warning-10: var(--orange-10); - --link-1: var(--arcoblue-1); - --link-2: var(--arcoblue-2); - --link-3: var(--arcoblue-3); - --link-4: var(--arcoblue-4); - --link-5: var(--arcoblue-5); - --link-6: var(--arcoblue-6); - --link-7: var(--arcoblue-7); - --link-8: var(--arcoblue-8); - --link-9: var(--arcoblue-9); - --link-10: var(--arcoblue-10); -} - -html[class='dark-mode'] body { - --color-white: rgba(255, 255, 255, 0.9); - --color-black: #000000; - --color-border: #333335; - --color-bg-1: #17171a; - --color-bg-2: #232324; - --color-bg-3: #2a2a2b; - --color-bg-4: #313132; - --color-bg-5: #373739; - --color-bg-white: #f6f6f6; - --color-text-1: rgba(255, 255, 255, 0.9); - --color-text-2: rgba(255, 255, 255, 0.7); - --color-text-3: rgba(255, 255, 255, 0.5); - --color-text-4: rgba(255, 255, 255, 0.3); - --color-fill-1: rgba(255, 255, 255, 0.04); - --color-fill-2: rgba(255, 255, 255, 0.08); - --color-fill-3: rgba(255, 255, 255, 0.12); - --color-fill-4: rgba(255, 255, 255, 0.16); - --color-primary-light-1: rgba(var(--primary-6), 0.2); - --color-primary-light-2: rgba(var(--primary-6), 0.35); - --color-primary-light-3: rgba(var(--primary-6), 0.5); - --color-primary-light-4: rgba(var(--primary-6), 0.65); - --color-secondary: rgba(var(--gray-9), 0.08); - --color-secondary-hover: rgba(var(--gray-8), 0.16); - --color-secondary-active: rgba(var(--gray-7), 0.24); - --color-secondary-disabled: rgba(var(--gray-9), 0.08); - --color-danger-light-1: rgba(var(--danger-6), 0.2); - --color-danger-light-2: rgba(var(--danger-6), 0.35); - --color-danger-light-3: rgba(var(--danger-6), 0.5); - --color-danger-light-4: rgba(var(--danger-6), 0.65); - --color-success-light-1: rgb(var(--success-6), 0.2); - --color-success-light-2: rgb(var(--success-6), 0.35); - --color-success-light-3: rgb(var(--success-6), 0.5); - --color-success-light-4: rgb(var(--success-6), 0.65); - --color-warning-light-1: rgb(var(--warning-6), 0.2); - --color-warning-light-2: rgb(var(--warning-6), 0.35); - --color-warning-light-3: rgb(var(--warning-6), 0.5); - --color-warning-light-4: rgb(var(--warning-6), 0.65); - --color-link-light-1: rgb(var(--link-6), 0.2); - --color-link-light-2: rgb(var(--link-6), 0.35); - --color-link-light-3: rgb(var(--link-6), 0.5); - --color-link-light-4: rgb(var(--link-6), 0.65); - --color-tooltip-bg: #373739; - --color-spin-layer-bg: rgba(51, 51, 51, 0.6); - --color-menu-dark-bg: #232324; - --color-menu-light-bg: #232324; - --color-menu-dark-hover: var(--color-fill-2); - --color-mask-bg: rgba(23, 23, 26, 0.6); -} diff --git a/app/plugins/arco-dark-mode.client.ts b/app/plugins/arco-dark-mode.client.ts deleted file mode 100644 index 3c10834f..00000000 --- a/app/plugins/arco-dark-mode.client.ts +++ /dev/null @@ -1,15 +0,0 @@ -export default defineNuxtPlugin(() => { - const colorMode = useColorMode() - - watch( - () => colorMode.value, - value => { - if (value === 'dark') { - document.body.setAttribute('arco-theme', 'dark') - } else { - document.body.removeAttribute('arco-theme') - } - }, - { immediate: true } - ) -}) diff --git a/app/plugins/arco-design.ts b/app/plugins/arco-design.ts index a329cad9..ff5e8dac 100644 --- a/app/plugins/arco-design.ts +++ b/app/plugins/arco-design.ts @@ -4,4 +4,20 @@ import ArcoVueIcon from '@arco-design/web-vue/es/icon' export default defineNuxtPlugin(nuxtApp => { nuxtApp.vueApp.use(ArcoVue) nuxtApp.vueApp.use(ArcoVueIcon) + + if (import.meta.client) { + const colorMode = useColorMode() + + watch( + () => colorMode.value, + value => { + if (value === 'dark') { + document.body.setAttribute('arco-theme', 'dark') + } else { + document.body.removeAttribute('arco-theme') + } + }, + { immediate: true } + ) + } }) diff --git a/nuxt.config.ts b/nuxt.config.ts index f637b856..ee60d9b7 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -43,6 +43,19 @@ export default defineNuxtConfig({ app: { head: { script: [ + { + tagPosition: 'bodyOpen', + innerHTML: `(() => { + const body = document.body + const colorMode = window.__NUXT_COLOR_MODE__?.value + + if (colorMode === 'dark') { + body.setAttribute('arco-theme', 'dark') + } else { + body.removeAttribute('arco-theme') + } + })()` + }, { defer: '', src: 'https://umami.ikxin.com/script.js', From 51b3faefc9d84d54f5085c52c959974060decfbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E7=BA=B8=E5=BF=98=E5=BF=A7?= <54543761+ikxin@users.noreply.github.com> Date: Sat, 13 Jun 2026 18:47:50 +0800 Subject: [PATCH 13/19] =?UTF-8?q?style:=20=E8=B0=83=E6=95=B4=20Arco=20Desi?= =?UTF-8?q?gn=20=E8=BE=B9=E6=A1=86=E5=92=8C=E5=86=85=E8=BE=B9=E8=B7=9D?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/assets/css/main.css | 32 ++++++++++++++++++++++++++++++ app/pages/activate.vue | 43 +++-------------------------------------- 2 files changed, 35 insertions(+), 40 deletions(-) diff --git a/app/assets/css/main.css b/app/assets/css/main.css index e5033a6b..8bdad130 100644 --- a/app/assets/css/main.css +++ b/app/assets/css/main.css @@ -13,3 +13,35 @@ body { .arco-drawer-body { padding: 0; } + +.arco-layout-sider > .arco-layout-sider-children { + border-radius: inherit; +} + +.arco-menu:not(.arco-menu-horizontal) > .arco-menu-inner { + padding: 8px; +} + +.arco-menu-icon > i { + display: inline-block; +} + +.arco-card-bordered { + border: none; +} + +.arco-card-header { + border-bottom-color: var(--color-border-1); +} + +.arco-collapse { + border-color: var(--color-border-1); +} + +.arco-collapse-item { + border-bottom-color: var(--color-border-1); +} + +.arco-collapse-item-active > .arco-collapse-item-header { + border-color: var(--color-border-1); +} diff --git a/app/pages/activate.vue b/app/pages/activate.vue index 20e1c598..0df10834 100644 --- a/app/pages/activate.vue +++ b/app/pages/activate.vue @@ -38,13 +38,6 @@ function handleMenuClick(key: string) { navigateTo(localePath(`/activate/${key}`)) drawerVisible.value = false } - -const rainyunAdUrlBase64 = - 'aHR0cHM6Ly93d3cucmFpbnl1bi5jb20vbW1fP3M9a21zLXRvb2xz' - -function handleRainyunAdClick() { - window.open(atob(rainyunAdUrlBase64), '_blank', 'noopener,noreferrer') -} @@ -121,13 +100,13 @@ function handleRainyunAdClick() {