From 3850198678a1bd80503c5a183dc84f97da87a0d7 Mon Sep 17 00:00:00 2001 From: 0XFANGO Date: Sat, 18 Apr 2026 18:29:33 +0800 Subject: [PATCH 01/16] docs: add vite-plus migration design spec Design for migrating CLI toolchain from tsc+xo to vite-plus, aligning with SDK. Covers build, lint, format, test, and deps. Part of marswaveai/listenhub-ralph#60 --- docs/specs/listenhub-cli--60-design.md | 157 +++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 docs/specs/listenhub-cli--60-design.md diff --git a/docs/specs/listenhub-cli--60-design.md b/docs/specs/listenhub-cli--60-design.md new file mode 100644 index 0000000..405a464 --- /dev/null +++ b/docs/specs/listenhub-cli--60-design.md @@ -0,0 +1,157 @@ +# ListenHub-CLI 配置迁移至 vite-plus 设计文档 + +> Issue: marswaveai/listenhub-ralph#60 +> Date: 2026-04-18 + +## 背景 + +ListenHub-SDK 已经在使用 vite-plus 作为统一工具链(构建、lint、格式化、测试、类型检查), +但 CLI 还在用 tsc + xo + Prettier 的老组合。两个包的开发体验割裂,维护成本高。 + +本次迁移将 CLI 的整条工具链切到 vite-plus,与 SDK 对齐。 + +## 目标 + +1. CLI 构建从 tsc 迁移到 `vp pack`,输出单文件 bundle +2. Lint 从 xo(ESLint)迁移到 `vp lint`(oxlint) +3. 格式化从 Prettier(xo 内置)迁移到 `vp fmt`(oxfmt) +4. 引入 `vp test`(vitest)测试框架 +5. 类型检查用 `vp check` 替代 tsc +6. SDK 升级 vite-plus 到最新版(0.1.18) + +## 涉及仓库 + +| 仓库 | 改动范围 | +|------|---------| +| listenhub-cli | 全量工具链迁移 | +| listenhub-sdk | vite-plus 版本升级 | + +## 设计详情 + +### 1. 构建迁移 + +**现状**:`tsc` 编译 `source/` 下 30+ 文件到 `distribution/source/`,手动 `chmod +x`。 + +**目标**:`vp pack --platform node` 以 `source/cli.ts` 为入口,bundle 成单文件 `dist/cli.mjs`。 + +变更点: +- 入口文件 `source/cli.ts` 顶部的 `#!/usr/bin/env node` shebang 保留,vp pack 打包后自动带入 +- `package.json` 的 `bin` 改为 `"listenhub": "dist/cli.mjs"` +- `package.json` 的 `files` 改为 `["dist"]` +- 删除 `distribution/` 目录,更新 `.gitignore` +- tsconfig.json 简化:去掉 `outDir`、`declaration`,保留 `rootDir`、`types`、`include` 给 `vp check` 用 + +### 2. Lint 迁移 + +**现状**:xo(ESLint 封装),自定义规则在 `xo.config.mjs`。 + +**目标**:`vp lint`(oxlint,Rust 实现)。 + +变更点: +- 删除 `xo.config.mjs` +- 移除 xo 依赖 +- 现有自定义规则处理: + - `@typescript-eslint/only-throw-error: off`:绕过 xo 误报,oxlint 无此问题 + - `import-x/extensions: off`:ESM 扩展名规则,oxlint 不需要 + - `import-x/order`:oxlint 内置 import 排序支持 + +### 3. 格式化 + +**现状**:Prettier(通过 xo 内置调用)。 + +**目标**:`vp fmt`(oxfmt,Rust 实现)。 + +变更点: +- 首次运行会重新格式化全部代码,产生一次性大 diff +- 后续开发使用 `vp fmt` 保持格式一致 + +### 4. 测试框架 + +**现状**:CLI 没有单元测试,`npm test` 只是跑 xo lint。 + +**目标**:引入 vitest 框架,搭好骨架。 + +变更点: +- 创建 `vitest.config.ts`,参考 SDK 配置 +- 不在本次迁移中编写测试用例 +- `test` script 改为 `vp test run` + +### 5. package.json scripts + +```json +{ + "dev": "vp pack --watch", + "build": "vp pack --platform node", + "lint": "vp lint", + "lint:fix": "vp lint --fix", + "fmt": "vp fmt", + "fmt:check": "vp fmt --check", + "check": "vp check", + "test": "vp test run", + "test:watch": "vp test", + "prepublishOnly": "pnpm run build" +} +``` + +### 6. 依赖变更 + +**新增 devDependencies**: +- `vite-plus: ^0.1.18` +- `vite: ^8.0.3` +- `vitest: ^2.0.0` + +**移除 devDependencies**: +- `xo` +- `typescript`(vp 内置) +- `@sindresorhus/tsconfig`——SDK 同样 extends 了这个 preset 且与 vp check 兼容。如果 CLI 迁移后 `vp check` 报错再考虑移除,默认保留 + +**运行时依赖不变**: +- `@marswave/listenhub-sdk` +- `commander` +- `open` +- `ora` + +### 7. SDK 升级 + +- `vite-plus` 从 `^0.1.14` 升级到 `^0.1.18` +- 其他不动 + +### 8. tsconfig.json(迁移后) + +默认保留 `@sindresorhus/tsconfig` extends(SDK 也在用),去掉 tsc 编译相关字段: + +```json +{ + "extends": "@sindresorhus/tsconfig", + "compilerOptions": { + "rootDir": "source", + "types": ["node"] + }, + "include": ["source"] +} +``` + +## 验证标准 + +1. `pnpm build` 成功产出 `dist/cli.mjs` +2. `dist/cli.mjs` 可直接执行:`node dist/cli.mjs --help` +3. `pnpm lint` 和 `pnpm fmt:check` 通过 +4. `pnpm check` 类型检查通过 +5. `listenhub auth login` → `listenhub podcast list` 端到端正常工作 +6. SDK 升级后 `pnpm build` 和 `pnpm test` 通过 + +## 风险与应对 + +| 风险 | 影响 | 应对 | +|------|------|------| +| vp pack 打包 CLI 后运行时报错(动态 import、Node 内置模块) | 阻塞 | 配置 externals 排除 Node 内置模块;动态 import 用 `import()` 保留 | +| oxlint 规则与现有代码冲突多 | 低 | `vp lint --fix` 自动修复大部分问题 | +| oxfmt 格式化结果与 Prettier 差异大 | 低 | 一次性 diff,审核后接受即可 | +| @sindresorhus/tsconfig 与 vp check 不兼容 | 低 | 移除 preset,手动配置 strict flags | + +## 不做的事 + +- 不写测试用例(只搭框架) +- 不改业务逻辑 +- 不改 SDK 的 API 接口 +- 不改认证流程或凭据存储方式 From 1340b33034d682dcbad60513d19903a4676f475f Mon Sep 17 00:00:00 2001 From: 0XFANGO Date: Sat, 18 Apr 2026 19:14:10 +0800 Subject: [PATCH 02/16] docs: fix spec review findings 1. Keep typescript dep, downgrade to ^5.9.3 to match SDK and vite-plus-core peer range (^5.0.0). Remove pnpm override. 2. Correct vp check definition: aggregates fmt+lint+typecheck, not a standalone type checker. 3. Add vite.config.ts spec with pack entry, lint typeAware/typeCheck. 4. Acknowledge test semantics change, add `ready` script as quality gate. Part of marswaveai/listenhub-ralph#60 --- docs/specs/listenhub-cli--60-design.md | 59 ++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 8 deletions(-) diff --git a/docs/specs/listenhub-cli--60-design.md b/docs/specs/listenhub-cli--60-design.md index 405a464..ee8a0c9 100644 --- a/docs/specs/listenhub-cli--60-design.md +++ b/docs/specs/listenhub-cli--60-design.md @@ -16,7 +16,7 @@ ListenHub-SDK 已经在使用 vite-plus 作为统一工具链(构建、lint、 2. Lint 从 xo(ESLint)迁移到 `vp lint`(oxlint) 3. 格式化从 Prettier(xo 内置)迁移到 `vp fmt`(oxfmt) 4. 引入 `vp test`(vitest)测试框架 -5. 类型检查用 `vp check` 替代 tsc +5. 静态检查统一到 `vp check`(聚合 fmt + lint + type checks) 6. SDK 升级 vite-plus 到最新版(0.1.18) ## 涉及仓库 @@ -32,7 +32,7 @@ ListenHub-SDK 已经在使用 vite-plus 作为统一工具链(构建、lint、 **现状**:`tsc` 编译 `source/` 下 30+ 文件到 `distribution/source/`,手动 `chmod +x`。 -**目标**:`vp pack --platform node` 以 `source/cli.ts` 为入口,bundle 成单文件 `dist/cli.mjs`。 +**目标**:`vp pack` 以 `source/cli.ts` 为入口(在 `vite.config.ts` 中配置),bundle 成单文件 `dist/cli.mjs`。 变更点: - 入口文件 `source/cli.ts` 顶部的 `#!/usr/bin/env node` shebang 保留,vp pack 打包后自动带入 @@ -67,7 +67,7 @@ ListenHub-SDK 已经在使用 vite-plus 作为统一工具链(构建、lint、 ### 4. 测试框架 -**现状**:CLI 没有单元测试,`npm test` 只是跑 xo lint。 +**现状**:CLI 没有单元测试,`pnpm test` 实际上只跑 xo lint(是质量门,不是测试)。 **目标**:引入 vitest 框架,搭好骨架。 @@ -76,12 +76,22 @@ ListenHub-SDK 已经在使用 vite-plus 作为统一工具链(构建、lint、 - 不在本次迁移中编写测试用例 - `test` script 改为 `vp test run` +**行为变化**:迁移后 `pnpm test` 在没有测试文件时会直接通过(或报"无测试"),不再起到原来 lint gate 的作用。为保持提交前的质量门不中断,新增 `ready` 脚本聚合所有检查: + +```json +{ + "ready": "vp check && vp test run" +} +``` + +`pnpm ready` 承接原来 `pnpm test` 的"提交前跑一遍"语义。 + ### 5. package.json scripts ```json { "dev": "vp pack --watch", - "build": "vp pack --platform node", + "build": "vp pack", "lint": "vp lint", "lint:fix": "vp lint --fix", "fmt": "vp fmt", @@ -89,6 +99,7 @@ ListenHub-SDK 已经在使用 vite-plus 作为统一工具链(构建、lint、 "check": "vp check", "test": "vp test run", "test:watch": "vp test", + "ready": "vp check && vp test run", "prepublishOnly": "pnpm run build" } ``` @@ -100,10 +111,12 @@ ListenHub-SDK 已经在使用 vite-plus 作为统一工具链(构建、lint、 - `vite: ^8.0.3` - `vitest: ^2.0.0` +**降级 devDependencies**: +- `typescript`:从 `^6.0.2` 降级到 `^5.9.3`,与 SDK 对齐。vite-plus-core 的 peer dependency 要求 `typescript: ^5.0.0`,CLI 当前的 6.x 不在范围内。同时移除 `package.json` 中的 `pnpm.overrides.typescript` override + **移除 devDependencies**: - `xo` -- `typescript`(vp 内置) -- `@sindresorhus/tsconfig`——SDK 同样 extends 了这个 preset 且与 vp check 兼容。如果 CLI 迁移后 `vp check` 报错再考虑移除,默认保留 +- `@sindresorhus/tsconfig` 保留(SDK 也在用,与 vp check 兼容) **运行时依赖不变**: - `@marswave/listenhub-sdk` @@ -131,12 +144,42 @@ ListenHub-SDK 已经在使用 vite-plus 作为统一工具链(构建、lint、 } ``` +### 9. vite.config.ts(新增) + +所有 vp 子命令(pack、lint、fmt、check)的行为集中到 `vite.config.ts`,不依赖 CLI 参数传递: + +```ts +import { defineConfig } from 'vite-plus'; + +export default defineConfig({ + pack: { + entry: ['source/cli.ts'], + platform: 'node', + format: ['esm'], + }, + lint: { + options: { + typeAware: true, + typeCheck: true, + }, + }, +}); +``` + +配置要点: +- `pack.entry`:固定入口为 `source/cli.ts`,输出到 `dist/cli.mjs` +- `pack.platform: 'node'`:Node 内置模块自动 external +- `pack.format: ['esm']`:保持 ESM only,与现有 `"type": "module"` 一致 +- `lint.options.typeAware`:启用 type-aware linting +- `lint.options.typeCheck`:让 `vp check` 包含 TypeScript 类型检查 +- fmt 使用默认配置即可,不需要额外设置 + ## 验证标准 1. `pnpm build` 成功产出 `dist/cli.mjs` 2. `dist/cli.mjs` 可直接执行:`node dist/cli.mjs --help` -3. `pnpm lint` 和 `pnpm fmt:check` 通过 -4. `pnpm check` 类型检查通过 +3. `pnpm check` 通过(聚合 fmt + lint + type checks) +4. `pnpm ready` 通过(check + test,承接原来 `pnpm test` 的质量门) 5. `listenhub auth login` → `listenhub podcast list` 端到端正常工作 6. SDK 升级后 `pnpm build` 和 `pnpm test` 通过 From 3a75e02b3c85c941c150ea120722e506da638335 Mon Sep 17 00:00:00 2001 From: 0XFANGO Date: Sat, 18 Apr 2026 19:17:48 +0800 Subject: [PATCH 03/16] docs: add vite-plus migration implementation plan 11-task plan covering: vite.config.ts, dep migration, scripts, tsconfig, xo removal, vitest skeleton, build verification, format/lint pass, static checks, SDK upgrade, and PR creation. Part of marswaveai/listenhub-ralph#60 --- docs/plans/listenhub-cli--60-plan.md | 571 +++++++++++++++++++++++++++ 1 file changed, 571 insertions(+) create mode 100644 docs/plans/listenhub-cli--60-plan.md diff --git a/docs/plans/listenhub-cli--60-plan.md b/docs/plans/listenhub-cli--60-plan.md new file mode 100644 index 0000000..5c0d7f9 --- /dev/null +++ b/docs/plans/listenhub-cli--60-plan.md @@ -0,0 +1,571 @@ +# ListenHub-CLI vite-plus Migration Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Migrate listenhub-cli's entire toolchain (build, lint, format, test, type-check) from tsc+xo to vite-plus, aligning with listenhub-sdk. + +**Architecture:** Replace tsc compilation with `vp pack` (tsdown) to produce a single-file ESM bundle. Replace xo/Prettier with oxlint/oxfmt via `vp lint`/`vp fmt`. Add vitest skeleton via `vp test`. Centralize all tool config in `vite.config.ts`. Downgrade TypeScript to 5.x for vite-plus peer compat. + +**Tech Stack:** vite-plus 0.1.18, vite 8.x, vitest 2.x, TypeScript 5.9.x, tsdown (via vp pack), oxlint (via vp lint), oxfmt (via vp fmt) + +**Spec:** `docs/specs/listenhub-cli--60-design.md` + +--- + +## File Map + +| Action | File | Purpose | +|--------|------|---------| +| Create | `vite.config.ts` | Central vp config (pack entry, lint options) | +| Create | `vitest.config.ts` | Vitest test runner config | +| Modify | `package.json` | Scripts, deps, bin, files, remove overrides | +| Modify | `tsconfig.json` | Remove outDir/declaration (no longer compiling via tsc) | +| Modify | `.gitignore` | Replace `distribution/` with `dist/` | +| Delete | `xo.config.mjs` | Replaced by vp lint (oxlint) | + +SDK (separate repo, separate commit): + +| Action | File | Purpose | +|--------|------|---------| +| Modify | `~/coding/marswave/listenhub-sdk/package.json` | Upgrade vite-plus to ^0.1.18 | + +--- + +### Task 1: Create vite.config.ts + +**Files:** +- Create: `vite.config.ts` + +- [ ] **Step 1: Create `vite.config.ts`** + +```ts +import {defineConfig} from 'vite-plus'; + +export default defineConfig({ + pack: { + entry: ['source/cli.ts'], + platform: 'node', + format: ['esm'], + }, + lint: { + options: { + typeAware: true, + typeCheck: true, + }, + }, +}); +``` + +- [ ] **Step 2: Commit** + +```bash +git add vite.config.ts +git commit -m "chore: add vite.config.ts for vp pack/lint/check" +``` + +--- + +### Task 2: Update package.json — dependencies and overrides + +**Files:** +- Modify: `package.json` + +This task only changes dependencies, overrides, and engine-related fields. Scripts are updated in Task 3. + +- [ ] **Step 1: Remove old dev dependencies and add new ones** + +Remove these devDependencies: +- `xo` +- `del-cli` + +Downgrade: +- `typescript`: `^6.0.2` → `^5.9.3` + +Add new devDependencies: +- `vite-plus`: `^0.1.18` +- `vite`: `^8.0.3` +- `vitest`: `^2.0.0` + +Keep unchanged: +- `@sindresorhus/tsconfig`: `^8.1.0` +- `@types/node`: `^25.5.0` + +- [ ] **Step 2: Remove pnpm.overrides block** + +Delete the entire `pnpm` section from `package.json`: + +```json +"pnpm": { + "overrides": { + "typescript": "^6.0.2" + } +} +``` + +- [ ] **Step 3: Run pnpm install** + +```bash +pnpm install +``` + +Expected: lockfile updates, no peer dependency errors. Confirm `typescript` resolves to 5.9.x: + +```bash +pnpm list typescript +``` + +Expected output includes `typescript 5.9.x` (not 6.x). + +- [ ] **Step 4: Commit** + +```bash +git add package.json pnpm-lock.yaml +git commit -m "chore: migrate deps to vite-plus, downgrade typescript to 5.x" +``` + +--- + +### Task 3: Update package.json — scripts, bin, files + +**Files:** +- Modify: `package.json` + +- [ ] **Step 1: Replace all scripts** + +Replace the entire `scripts` block with: + +```json +"scripts": { + "dev": "vp pack --watch", + "build": "vp pack", + "lint": "vp lint", + "lint:fix": "vp lint --fix", + "fmt": "vp fmt", + "fmt:check": "vp fmt --check", + "check": "vp check", + "test": "vp test run", + "test:watch": "vp test", + "ready": "vp check && vp test run", + "prepublishOnly": "pnpm run build" +} +``` + +Removed scripts: `clean`, `pretest`. + +- [ ] **Step 2: Update bin and files** + +Change `bin` from: +```json +"bin": { + "listenhub": "distribution/source/cli.js" +} +``` + +To: +```json +"bin": { + "listenhub": "dist/cli.mjs" +} +``` + +Change `files` from: +```json +"files": [ + "distribution/source" +] +``` + +To: +```json +"files": [ + "dist" +] +``` + +- [ ] **Step 3: Commit** + +```bash +git add package.json +git commit -m "chore: update scripts to vp commands, point bin to dist/cli.mjs" +``` + +--- + +### Task 4: Update tsconfig.json + +**Files:** +- Modify: `tsconfig.json` + +- [ ] **Step 1: Simplify tsconfig.json** + +Replace the entire file with: + +```json +{ + "extends": "@sindresorhus/tsconfig", + "compilerOptions": { + "rootDir": "source", + "types": ["node"] + }, + "include": ["source"] +} +``` + +Changes from current: +- Removed `"declaration": false` (tsc no longer compiles) +- Removed `"outDir": "distribution"` (vp pack handles output) +- Changed `"rootDir": "."` → `"rootDir": "source"` (matches SDK pattern, scopes type-check to source only) + +- [ ] **Step 2: Commit** + +```bash +git add tsconfig.json +git commit -m "chore: simplify tsconfig for vp check (no longer used for compilation)" +``` + +--- + +### Task 5: Delete xo.config.mjs and update .gitignore + +**Files:** +- Delete: `xo.config.mjs` +- Modify: `.gitignore` + +- [ ] **Step 1: Delete xo config** + +```bash +git rm xo.config.mjs +``` + +- [ ] **Step 2: Update .gitignore** + +Replace the entire `.gitignore` with: + +``` +node_modules/ +dist/ +*.tsbuildinfo +``` + +Change: `distribution/` → `dist/`. + +- [ ] **Step 3: Commit** + +```bash +git add xo.config.mjs .gitignore +git commit -m "chore: remove xo config, update gitignore for dist/" +``` + +--- + +### Task 6: Create vitest.config.ts + +**Files:** +- Create: `vitest.config.ts` + +- [ ] **Step 1: Create vitest config** + +```ts +import {defineConfig} from 'vitest/config'; + +export default defineConfig({ + test: { + clearMocks: true, + }, +}); +``` + +This is a minimal skeleton. No test files exist yet — the config is here so `vp test run` has a valid config when tests are eventually added. + +- [ ] **Step 2: Commit** + +```bash +git add vitest.config.ts +git commit -m "chore: add vitest.config.ts skeleton" +``` + +--- + +### Task 7: Build and verify the CLI bundle + +**Files:** (no new files — verification only) + +- [ ] **Step 1: Run the build** + +```bash +pnpm build +``` + +Expected: `dist/cli.mjs` is created. No errors. + +```bash +ls -la dist/cli.mjs +``` + +Expected: file exists, non-zero size. + +- [ ] **Step 2: Verify shebang is present** + +```bash +head -1 dist/cli.mjs +``` + +Expected: `#!/usr/bin/env node` + +- [ ] **Step 3: Verify the CLI runs** + +```bash +node dist/cli.mjs --help +``` + +Expected: prints help text with all commands (auth, podcast, tts, explainer, slides, image, music, lyrics, speakers, creation). + +- [ ] **Step 4: Verify the CLI is executable** + +```bash +chmod +x dist/cli.mjs +./dist/cli.mjs --help +``` + +Expected: same help output as Step 3. + +- [ ] **Step 5: Troubleshoot if build fails** + +If `vp pack` fails or the bundle errors at runtime: + +1. **Node built-in import errors**: `platform: 'node'` in vite.config.ts should handle this. If specific packages aren't externalized, add them explicitly: + +```ts +pack: { + entry: ['source/cli.ts'], + platform: 'node', + format: ['esm'], + external: ['open'], // if needed +}, +``` + +2. **Dynamic import issues**: The `await import('open')` in `source/auth/auth.ts` should be preserved by the bundler since it's a package import (not a relative path). If not, add `open` to externals. + +3. **`.js` extension imports**: tsdown resolves `.js` → `.ts` automatically for bundling. No changes needed to source imports. + +After any vite.config.ts changes to fix build issues, amend the vite.config.ts commit or create a fix commit. + +--- + +### Task 8: Run formatter and lint, fix issues + +**Files:** (modifies all source files via auto-format) + +- [ ] **Step 1: Run oxfmt to reformat all source files** + +```bash +pnpm fmt +``` + +Expected: reformats all `.ts` files to oxfmt style. This is a one-time diff. + +- [ ] **Step 2: Run lint with auto-fix** + +```bash +pnpm lint:fix +``` + +Expected: oxlint fixes what it can automatically. + +- [ ] **Step 3: Check for remaining lint errors** + +```bash +pnpm lint +``` + +If there are remaining errors, fix them manually. Common issues: +- Unused variables: remove or prefix with `_` +- Missing return types: add explicit return type annotations +- Any `throw` of non-Error objects: wrap in `new Error()` + +- [ ] **Step 4: Commit the formatting + lint fixes** + +```bash +git add -A +git commit -m "style: reformat codebase with oxfmt and fix oxlint issues" +``` + +--- + +### Task 9: Run full static check and quality gate + +**Files:** (no changes expected — verification only) + +- [ ] **Step 1: Run vp check (fmt + lint + type checks)** + +```bash +pnpm check +``` + +Expected: all pass (0 errors). If type errors appear: + +1. **`@sindresorhus/tsconfig` incompatibility**: If vp check's tsgolint doesn't support certain tsconfig options from the preset, simplify tsconfig.json by removing `extends` and adding strict flags manually: + +```json +{ + "compilerOptions": { + "strict": true, + "rootDir": "source", + "types": ["node"], + "module": "nodenext", + "moduleResolution": "nodenext", + "target": "esnext" + }, + "include": ["source"] +} +``` + +Then remove `@sindresorhus/tsconfig` from devDependencies and re-run `pnpm install`. + +2. **Type errors in source**: Fix them. These are real issues that tsc may have been lenient about. + +- [ ] **Step 2: Run the full quality gate** + +```bash +pnpm ready +``` + +Expected: passes (check + test both succeed). `vp test run` will pass with 0 test suites since no test files exist yet. + +- [ ] **Step 3: Run the CLI end-to-end** + +```bash +node dist/cli.mjs --version +node dist/cli.mjs --help +node dist/cli.mjs podcast list --help +``` + +Expected: version prints `0.1.0`, help lists all commands, subcommand help shows options. + +- [ ] **Step 4: Commit any fixes from this step** + +If any source changes were needed to pass checks: + +```bash +git add -A +git commit -m "fix: resolve type/lint errors from vp check" +``` + +--- + +### Task 10: SDK — upgrade vite-plus + +**Files:** +- Modify: `~/coding/marswave/listenhub-sdk/package.json` + +This task operates in the **listenhub-sdk** repo, not the CLI worktree. A separate worktree for SDK is not needed — this is a single-line dep bump. + +- [ ] **Step 1: Update vite-plus version in SDK** + +In `~/coding/marswave/listenhub-sdk/package.json`, change: + +```json +"vite-plus": "^0.1.14" +``` + +To: + +```json +"vite-plus": "^0.1.18" +``` + +- [ ] **Step 2: Install and verify** + +```bash +cd ~/coding/marswave/listenhub-sdk +pnpm install +pnpm build +pnpm test +``` + +Expected: build produces `dist/index.mjs` + types, all tests pass. + +- [ ] **Step 3: Run check** + +```bash +pnpm check +``` + +Expected: passes. If the new vite-plus version introduces new lint rules that flag existing code, fix them. + +- [ ] **Step 4: Commit** + +```bash +git add package.json pnpm-lock.yaml +git commit -m "chore: upgrade vite-plus to ^0.1.18" +``` + +Note: this commit goes into the SDK repo directly on main (single dep bump, no feature branch needed). If the team prefers a PR, create a branch first. + +--- + +### Task 11: Final verification and PR + +**Files:** (no changes — verification and PR creation) + +Switch back to the CLI worktree for this task. + +- [ ] **Step 1: Run the full quality gate one more time** + +```bash +cd ~/coding/marswave/listenhub-cli/.worktrees/listenhub-cli--60 +pnpm ready +``` + +Expected: all pass. + +- [ ] **Step 2: Verify build output** + +```bash +pnpm build +node dist/cli.mjs --help +``` + +Expected: clean build, help displays all commands. + +- [ ] **Step 3: Push branch and create PR** + +```bash +git push -u origin ralph/listenhub-cli--60 +``` + +Create PR in listenhub-cli repo: + +```bash +gh pr create \ + --repo marswaveai/listenhub-cli \ + --title "chore: migrate toolchain to vite-plus" \ + --body "$(cat <<'EOF' +## Summary + +- Migrate build from tsc to `vp pack` (tsdown), outputting single-file bundle `dist/cli.mjs` +- Replace xo (ESLint+Prettier) with `vp lint` (oxlint) + `vp fmt` (oxfmt) +- Add vitest skeleton via `vp test` +- Unify static checks under `vp check` (fmt + lint + type checks) +- Downgrade TypeScript to 5.9.x for vite-plus peer compatibility +- Add `ready` script as quality gate (`vp check && vp test run`) +- Add `vite.config.ts` centralizing pack/lint config + +Part of marswaveai/listenhub-ralph#60 + +## Test plan + +- [ ] `pnpm build` produces `dist/cli.mjs` +- [ ] `node dist/cli.mjs --help` prints all commands +- [ ] `pnpm check` passes (fmt + lint + type checks) +- [ ] `pnpm ready` passes (check + test) +- [ ] `listenhub auth login` + `listenhub podcast list` works end-to-end +EOF +)" +``` + +- [ ] **Step 4: Add label to issue** + +```bash +gh issue edit 60 --repo marswaveai/listenhub-ralph --add-label "needs-review" +``` From b9567470f28e17533f49d8468d5fee69e27df0be Mon Sep 17 00:00:00 2001 From: 0XFANGO Date: Sat, 18 Apr 2026 19:19:35 +0800 Subject: [PATCH 04/16] chore: add vite.config.ts for vp pack/lint/check --- vite.config.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 vite.config.ts diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..0080c11 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,15 @@ +import {defineConfig} from 'vite-plus'; + +export default defineConfig({ + pack: { + entry: ['source/cli.ts'], + platform: 'node', + format: ['esm'], + }, + lint: { + options: { + typeAware: true, + typeCheck: true, + }, + }, +}); From 46a7cf67002c2ea558d24b4ca064c9820327ba04 Mon Sep 17 00:00:00 2001 From: 0XFANGO Date: Sat, 18 Apr 2026 19:20:03 +0800 Subject: [PATCH 05/16] chore: migrate deps to vite-plus, downgrade typescript to 5.x --- package.json | 12 +- pnpm-lock.yaml | 5293 +++++++++++++++++------------------------------- 2 files changed, 1821 insertions(+), 3484 deletions(-) diff --git a/package.json b/package.json index 4d634b1..c9f84d1 100644 --- a/package.json +++ b/package.json @@ -28,16 +28,12 @@ "devDependencies": { "@sindresorhus/tsconfig": "^8.1.0", "@types/node": "^25.5.0", - "del-cli": "^7.0.0", - "typescript": "^6.0.2", - "xo": "^2.0.2" + "typescript": "^5.9.3", + "vite": "^8.0.3", + "vite-plus": "^0.1.18", + "vitest": "^2.0.0" }, "engines": { "node": ">=20" - }, - "pnpm": { - "overrides": { - "typescript": "^6.0.2" - } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c655af2..3b83d3b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,9 +4,6 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -overrides: - typescript: ^6.0.2 - importers: .: @@ -30,85 +27,21 @@ importers: '@types/node': specifier: ^25.5.0 version: 25.5.2 - del-cli: - specifier: ^7.0.0 - version: 7.0.0 typescript: - specifier: ^6.0.2 - version: 6.0.2 - xo: - specifier: ^2.0.2 - version: 2.0.2(@types/eslint@9.6.1)(@typescript-eslint/utils@8.58.0(eslint@10.2.0)(typescript@6.0.2)) + specifier: ^5.9.3 + version: 5.9.3 + vite: + specifier: ^8.0.3 + version: 8.0.8(@types/node@25.5.2) + vite-plus: + specifier: ^0.1.18 + version: 0.1.18(@types/node@25.5.2)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)) + vitest: + specifier: ^2.0.0 + version: 2.1.9(@types/node@25.5.2)(lightningcss@1.32.0) packages: - '@babel/code-frame@7.29.0': - resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.29.0': - resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.29.0': - resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.29.1': - resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.28.6': - resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.28.6': - resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.28.6': - resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.29.2': - resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.29.2': - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@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==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} - engines: {node: '>=6.9.0'} - '@emnapi/core@1.9.2': resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} @@ -118,835 +51,957 @@ packages: '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} - '@eslint-community/eslint-plugin-eslint-comments@4.7.1': - resolution: {integrity: sha512-Ql2nJFwA8wUGpILYGOQaT1glPsmvEwE0d+a+l7AALLzQvInqdbXJdx7aSu0DpUX9dB1wMVBMhm99/++S3MdEtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] - '@eslint-community/eslint-utils@4.9.1': - resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] - '@eslint-community/regexpp@4.12.2': - resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] - '@eslint/compat@2.0.4': - resolution: {integrity: sha512-o598tCGstJv9Kk4XapwP+oDij9HD9Qr3V37ABzTfdzVvbFciV+sfg9zSW6olj6G/IXj7p89SwSzPnZ+JUEPIPg==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} - peerDependencies: - eslint: ^8.40 || 9 || 10 - peerDependenciesMeta: - eslint: - optional: true + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] - '@eslint/config-array@0.23.4': - resolution: {integrity: sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] - '@eslint/config-helpers@0.5.4': - resolution: {integrity: sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] - '@eslint/core@0.17.0': - resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] - '@eslint/core@1.2.0': - resolution: {integrity: sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] - '@eslint/css-tree@3.6.9': - resolution: {integrity: sha512-3D5/OHibNEGk+wKwNwMbz63NMf367EoR4mVNNpxddCHKEb2Nez7z62J2U6YjtErSsZDoY0CsccmoUpdEbkogNA==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] - '@eslint/css@0.14.1': - resolution: {integrity: sha512-NXiteSacmpaXqgyIW3+GcNzexXyfC0kd+gig6WTjD4A74kBGJeNx1tV0Hxa0v7x0+mnIyKfGPhGNs1uhRFdh+w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] - '@eslint/json@1.2.0': - resolution: {integrity: sha512-CEFEyNgvzu8zn5QwVYDg3FaG+ZKUeUsNYitFpMYJAqoAlnw68EQgNbUfheSmexZr4n0wZPrAkPLuvsLaXO6wRw==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] - '@eslint/object-schema@3.0.4': - resolution: {integrity: sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] - '@eslint/plugin-kit@0.4.1': - resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] - '@eslint/plugin-kit@0.6.1': - resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] - '@eslint/plugin-kit@0.7.0': - resolution: {integrity: sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] - '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} - engines: {node: '>=18.18.0'} + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] - '@humanwhocodes/momoa@3.3.10': - resolution: {integrity: sha512-KWiFQpSAqEIyrTXko3hFNLeQvSK8zXlJQzhhxsyVn58WFRYXST99b3Nqnu+ttOtjds2Pl2grUHGpe2NzhPynuQ==} - engines: {node: '>=18'} + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@marswave/listenhub-sdk@0.0.4': resolution: {integrity: sha512-24kmN+TS2xuIObGAN9LzYG4LNucbPsjlbOivRPCvh49w0dmuNO1UPQRVK3bNWyYyT/cdFfajENrtYAfIv+3Atw==} engines: {node: '>=20'} - '@napi-rs/wasm-runtime@0.2.12': - resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@oxc-project/runtime@0.124.0': + resolution: {integrity: sha512-sSg6n37J3w3mM4odFvRqzQENf6+qxKnvStr/gU0FgRRg1VE/4MqryLd9PJmE0a7K5xlDfbrctBtSagaFH6ij9Q==} + engines: {node: ^20.19.0 || >=22.12.0} - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + '@oxc-project/types@0.124.0': + resolution: {integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==} - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@oxfmt/binding-android-arm-eabi@0.45.0': + resolution: {integrity: sha512-A/UMxFob1fefCuMeGxQBulGfFE38g2Gm23ynr3u6b+b7fY7/ajGbNsa3ikMIkGMLJW/TRoQaMoP1kME7S+815w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] - '@package-json/types@0.0.12': - resolution: {integrity: sha512-uu43FGU34B5VM9mCNjXCwLaGHYjXdNincqKLaraaCW+7S2+SmiBg1Nv8bPnmschrIfZmfKNY9f3fC376MRrObw==} + '@oxfmt/binding-android-arm64@0.45.0': + resolution: {integrity: sha512-L63z4uZmHjgvvqvMJD7mwff8aSBkM0+X4uFr6l6U5t6+Qc9DCLVZWIunJ7Gm4fn4zHPdSq6FFQnhu9yqqobxIg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] - '@pkgr/core@0.2.9': - resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@oxfmt/binding-darwin-arm64@0.45.0': + resolution: {integrity: sha512-UV34dd623FzqT+outIGndsCA/RBB+qgB3XVQhgmmJ9PJwa37NzPC9qzgKeOhPKxVk2HW+JKldQrVL54zs4Noww==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] - '@sec-ant/readable-stream@0.4.1': - resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + '@oxfmt/binding-darwin-x64@0.45.0': + resolution: {integrity: sha512-pMNJv0CMa1pDefVPeNbuQxibh8ITpWDFEhMC/IBB9Zlu76EbgzYwrzI4Cb11mqX2+rIYN70UTrh3z06TM59ptQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] - '@sindresorhus/merge-streams@2.3.0': - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} - engines: {node: '>=18'} + '@oxfmt/binding-freebsd-x64@0.45.0': + resolution: {integrity: sha512-xTcRoxbbo61sW2+ZRPeH+vp/o9G8gkdhiVumFU+TpneiPm14c79l6GFlxPXlCE9bNWikigbsrvJw46zCVAQFfg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] - '@sindresorhus/merge-streams@4.0.0': - resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} - engines: {node: '>=18'} + '@oxfmt/binding-linux-arm-gnueabihf@0.45.0': + resolution: {integrity: sha512-hWL8Hdni+3U1mPFx1UtWeGp3tNb6EhBAUHRMbKUxVkOp3WwoJbpVO2bfUVbS4PfpledviXXNHSTl1veTa6FhkQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] - '@sindresorhus/tsconfig@8.1.0': - resolution: {integrity: sha512-MggpguA4jNdtyoUy2Hs54nb4lP4rbhH34CsOiFId1q6fmFPnipqeo70ZRkjp5p4Z7wdyspALtSAcKaxL2/3waQ==} - engines: {node: '>=20'} + '@oxfmt/binding-linux-arm-musleabihf@0.45.0': + resolution: {integrity: sha512-6Blt/0OBT7vvfQpqYuYbpbFLPqSiaYpEJzUUWhinPEuADypDbtV1+LdjM0vYBNGPvnj85ex7lTerEX6JGcPt9w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] - '@stylistic/eslint-plugin@5.10.0': - resolution: {integrity: sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^9.0.0 || ^10.0.0 + '@oxfmt/binding-linux-arm64-gnu@0.45.0': + resolution: {integrity: sha512-jLjoLfe+hGfjhA8hNBSdw85yCA8ePKq7ME4T+g6P9caQXvmt6IhE2X7iVjnVdkmYUWEzZrxlh4p6RkDmAMJY/A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@oxfmt/binding-linux-arm64-musl@0.45.0': + resolution: {integrity: sha512-XQKXZIKYJC3GQJ8FnD3iMntpw69Wd9kDDK/Xt79p6xnFYlGGxSNv2vIBvRTDg5CKByWFWWZLCRDOXoP/m6YN4g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@oxfmt/binding-linux-ppc64-gnu@0.45.0': + resolution: {integrity: sha512-+g5RiG+xOkdrCWkKodv407nTvMq4vYM18Uox2MhZBm/YoqFxxJpWKsloskFFG5NU13HGPw1wzYjjOVcyd9moCA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] - '@types/esrecurse@4.3.1': - resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + '@oxfmt/binding-linux-riscv64-gnu@0.45.0': + resolution: {integrity: sha512-V7dXKoSyEbWAkkSF4JJNtF+NJZDmJoSarSoP30WCsB3X636Rehd3CvxBj49FIJxEBFWhvcUjGSHVeU8Erck1bQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@oxfmt/binding-linux-riscv64-musl@0.45.0': + resolution: {integrity: sha512-Vdelft1sAEYojVGgcODEFXSWYQYlIvoyIGWebKCuUibd1tvS1TjTx413xG2ZLuHpYj45CkN/ztMLMX6jrgqpgg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@oxfmt/binding-linux-s390x-gnu@0.45.0': + resolution: {integrity: sha512-RR7xKgNpqwENnK0aYCGYg0JycY2n93J0reNjHyes+I9Gq52dH95x+CBlnlAQHCPfz6FGnKA9HirgUl14WO6o7w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] - '@types/node@25.5.2': - resolution: {integrity: sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==} + '@oxfmt/binding-linux-x64-gnu@0.45.0': + resolution: {integrity: sha512-U/QQ0+BQNSHxjuXR/utvXnQ50Vu5kUuqEomZvQ1/3mhgbBiMc2WU9q5kZ5WwLp3gnFIx9ibkveoRSe2EZubkqg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] - '@typescript-eslint/eslint-plugin@8.58.0': - resolution: {integrity: sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.58.0 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ^6.0.2 + '@oxfmt/binding-linux-x64-musl@0.45.0': + resolution: {integrity: sha512-o5TLOUCF0RWQjsIS06yVC+kFgp092/yLe6qBGSUvtnmTVw9gxjpdQSXc3VN5Cnive4K11HNstEZF8ROKHfDFSw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] - '@typescript-eslint/parser@8.58.0': - resolution: {integrity: sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ^6.0.2 + '@oxfmt/binding-openharmony-arm64@0.45.0': + resolution: {integrity: sha512-RnGcV3HgPuOjsGx/k9oyRNKmOp+NBLGzZTdPDYbc19r7NGeYPplnUU/BfU35bX2Y/O4ejvHxcfkvW2WoYL/gsg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] - '@typescript-eslint/project-service@8.58.0': - resolution: {integrity: sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: ^6.0.2 + '@oxfmt/binding-win32-arm64-msvc@0.45.0': + resolution: {integrity: sha512-v3Vj7iKKsUFwt9w5hsqIIoErKVoENC6LoqfDlteOQ5QMDCXihlqLoxpmviUhXnNncg4zV6U9BPwlBbwa+qm4wg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] - '@typescript-eslint/scope-manager@8.58.0': - resolution: {integrity: sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@oxfmt/binding-win32-ia32-msvc@0.45.0': + resolution: {integrity: sha512-N8yotPBX6ph0H3toF4AEpdCeVPrdcSetj+8eGiZGsrLsng3bs/Q5HPu4bbSxip5GBPx5hGbGHrZwH4+rcrjhHA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] - '@typescript-eslint/tsconfig-utils@8.58.0': - resolution: {integrity: sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: ^6.0.2 + '@oxfmt/binding-win32-x64-msvc@0.45.0': + resolution: {integrity: sha512-w5MMTRCK1dpQeRA+HHqXQXyN33DlG/N2LOYxJmaT4fJjcmZrbNnqw7SmIk7I2/a2493PPLZ+2E/Ar6t2iKVMug==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] - '@typescript-eslint/type-utils@8.58.0': - resolution: {integrity: sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ^6.0.2 + '@oxlint-tsgolint/darwin-arm64@0.20.0': + resolution: {integrity: sha512-KKQcIHZHMxqpHUA1VXIbOG6chNCFkUWbQy6M+AFVtPKkA/3xAeJkJ3njoV66bfzwPHRcWQO+kcj5XqtbkjakoA==} + cpu: [arm64] + os: [darwin] - '@typescript-eslint/types@8.58.0': - resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@oxlint-tsgolint/darwin-x64@0.20.0': + resolution: {integrity: sha512-7HeVMuclGfG+NLZi2ybY0T4fMI7/XxO/208rJk+zEIloKkVnlh11Wd241JMGwgNFXn+MLJbOqOfojDb2Dt4L1g==} + cpu: [x64] + os: [darwin] - '@typescript-eslint/typescript-estree@8.58.0': - resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: ^6.0.2 + '@oxlint-tsgolint/linux-arm64@0.20.0': + resolution: {integrity: sha512-zxhUwz+WSxE6oWlZLK2z2ps9yC6ebmgoYmjAl0Oa48+GqkZ56NVgo+wb8DURNv6xrggzHStQxqQxe3mK51HZag==} + cpu: [arm64] + os: [linux] - '@typescript-eslint/utils@8.58.0': - resolution: {integrity: sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ^6.0.2 + '@oxlint-tsgolint/linux-x64@0.20.0': + resolution: {integrity: sha512-/1l6FnahC9im8PK+Ekkx/V3yetO/PzZnJegE2FXcv/iXEhbeVxP/ouiTYcUQu9shT1FWJCSNti1VJHH+21Y1dg==} + cpu: [x64] + os: [linux] + + '@oxlint-tsgolint/win32-arm64@0.20.0': + resolution: {integrity: sha512-oPZ5Yz8sVdo7P/5q+i3IKeix31eFZ55JAPa1+RGPoe9PoaYVsdMvR6Jvib6YtrqoJnFPlg3fjEjlEPL8VBKYJA==} + cpu: [arm64] + os: [win32] - '@typescript-eslint/visitor-keys@8.58.0': - resolution: {integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@oxlint-tsgolint/win32-x64@0.20.0': + resolution: {integrity: sha512-4stx8RHj3SP9vQyRF/yZbz5igtPvYMEUR8CUoha4BVNZihi39DpCR8qkU7lpjB5Ga1DRMo2pHaA4bdTOMaY4mw==} + cpu: [x64] + os: [win32] - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} + '@oxlint/binding-android-arm-eabi@1.60.0': + resolution: {integrity: sha512-YdeJKaZckDQL1qa62a1aKq/goyq48aX3yOxaaWqWb4sau4Ee4IiLbamftNLU3zbePky6QsDj6thnSSzHRBjDfA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@unrs/resolver-binding-android-arm64@1.11.1': - resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} + '@oxlint/binding-android-arm64@1.60.0': + resolution: {integrity: sha512-7ANS7PpXCfq84xZQ8E5WPs14gwcuPcl+/8TFNXfpSu0CQBXz3cUo2fDpHT8v8HJN+Ut02eacvMAzTnc9s6X4tw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@unrs/resolver-binding-darwin-arm64@1.11.1': - resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} + '@oxlint/binding-darwin-arm64@1.60.0': + resolution: {integrity: sha512-pJsgd9AfplLGBm1fIr25V6V14vMrayhx4uIQvlfH7jWs2SZwSrvi3TfgfJySB8T+hvyEH8K2zXljQiUnkgUnfQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.11.1': - resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} + '@oxlint/binding-darwin-x64@1.60.0': + resolution: {integrity: sha512-Ue1aXHX49ivwflKqGJc7zcd/LeLgbhaTcDCQStgx5x06AXgjEAZmvrlMuIkWd4AL4FHQe6QJ9f33z04Cg448VQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@unrs/resolver-binding-freebsd-x64@1.11.1': - resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} + '@oxlint/binding-freebsd-x64@1.60.0': + resolution: {integrity: sha512-YCyQzsQtusQw+gNRW9rRTifSO+Dt/+dtCl2NHoDMZqJlRTEZ/Oht9YnuporI9yiTx7+cB+eqzX3MtHHVHGIWhg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} + '@oxlint/binding-linux-arm-gnueabihf@1.60.0': + resolution: {integrity: sha512-c7dxM2Zksa45Qw16i2iGY3Fti2NirJ38FrsBsKw+qcJ0OtqTsBgKJLF0xV+yLG56UH01Z8WRPgsw31e0MoRoGQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} + '@oxlint/binding-linux-arm-musleabihf@1.60.0': + resolution: {integrity: sha512-ZWALoA42UYqBEP1Tbw9OWURgFGS1nWj2AAvLdY6ZcGx/Gj93qVCBKjcvwXMupZibYwFbi9s/rzqkZseb/6gVtQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} + '@oxlint/binding-linux-arm64-gnu@1.60.0': + resolution: {integrity: sha512-tpy+1w4p9hN5CicMCxqNy6ymfRtV5ayE573vFNjp1k1TN/qhLFgflveZoE/0++RlkHikBz2vY545NWm/hp7big==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} + '@oxlint/binding-linux-arm64-musl@1.60.0': + resolution: {integrity: sha512-eDYDXZGhQAXyn6GwtwiX/qcLS0HlOLPJ/+iiIY8RYr+3P8oKBmgKxADLlniL6FtWfE7pPk7IGN9/xvDEvDvFeg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} + '@oxlint/binding-linux-ppc64-gnu@1.60.0': + resolution: {integrity: sha512-nxehly5XYBHUWI9VJX1bqCf9j/B43DaK/aS/T1fcxCpX3PA4Rm9BB54nPD1CKayT8xg6REN1ao+01hSRNgy8OA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} + '@oxlint/binding-linux-riscv64-gnu@1.60.0': + resolution: {integrity: sha512-j1qf/NaUfOWQutjeoooNG1Q0zsK0XGmSu1uDLq3cctquRF3j7t9Hxqf/76ehCc5GEUAanth2W4Fa+XT1RFg/nw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} + '@oxlint/binding-linux-riscv64-musl@1.60.0': + resolution: {integrity: sha512-YELKPRefQ/q/h3RUmeRfPCUhh2wBvgV1RyZ/F9M9u8cDyXsQW2ojv1DeWQTt466yczDITjZnIOg/s05pk7Ve2A==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} + '@oxlint/binding-linux-s390x-gnu@1.60.0': + resolution: {integrity: sha512-JkO3C6Gki7Y6h/MiIkFKvHFOz98/YWvQ4WYbK9DLXACMP2rjULzkeGyAzorJE5S1dzLQGFgeqvN779kSFwoV1g==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} + '@oxlint/binding-linux-x64-gnu@1.60.0': + resolution: {integrity: sha512-XjKHdFVCpZZZSWBCKyyqCq65s2AKXykMXkjLoKYODrD+f5toLhlwsMESscu8FbgnJQ4Y/dpR/zdazsahmgBJIA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} + '@oxlint/binding-linux-x64-musl@1.60.0': + resolution: {integrity: sha512-js29ZWIuPhNWzY8NC7KoffEMEeWG105vbmm+8EOJsC+T/jHBiKIJEUF78+F/IrgEWMMP9N0kRND4Pp75+xAhKg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] + '@oxlint/binding-openharmony-arm64@1.60.0': + resolution: {integrity: sha512-H+PUITKHk04stFpWj3x3Kg08Afp/bcXSBi0EhasR5a0Vw7StXHTzdl655PUI0fB4qdh2Wsu6Dsi+3ACxPoyQnA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} + '@oxlint/binding-win32-arm64-msvc@1.60.0': + resolution: {integrity: sha512-WA/yc7f7ZfCefBXVzNHn1Ztulb1EFwNBb4jMZ6pjML0zz6pHujlF3Q3jySluz3XHl/GNeMTntG1seUBWVMlMag==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} + '@oxlint/binding-win32-ia32-msvc@1.60.0': + resolution: {integrity: sha512-33YxL1sqwYNZXtn3MD/4dno6s0xeedXOJlT1WohkVD565WvohClZUr7vwKdAk954n4xiEWJkewiCr+zLeq7AeA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} + '@oxlint/binding-win32-x64-msvc@1.60.0': + resolution: {integrity: sha512-JOro4ZcfBLamJCyfURQmOQByoorgOdx3ZjAkSqnb/CyG/i+lN3KoV5LAgk5ZAW6DPq7/Cx7n23f8DuTWXTWgyQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} - engines: {node: '>=0.4.0'} - hasBin: true + '@rolldown/binding-android-arm64@1.0.0-rc.15': + resolution: {integrity: sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.15': + resolution: {integrity: sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] - ansi-escapes@7.3.0: - resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} - engines: {node: '>=18'} + '@rolldown/binding-darwin-x64@1.0.0-rc.15': + resolution: {integrity: sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} + '@rolldown/binding-freebsd-x64@1.0.0-rc.15': + resolution: {integrity: sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': + resolution: {integrity: sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] - array-includes@3.1.9: - resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} - engines: {node: '>= 0.4'} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': + resolution: {integrity: sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': + resolution: {integrity: sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': + resolution: {integrity: sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] - arrify@3.0.0: - resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==} - engines: {node: '>=12'} + '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': + resolution: {integrity: sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': + resolution: {integrity: sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': + resolution: {integrity: sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + '@rolldown/pluginutils@1.0.0-rc.15': + resolution: {integrity: sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==} - balanced-match@4.0.4: - resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} - engines: {node: 18 || 20 || >=22} + '@rollup/rollup-android-arm-eabi@4.60.1': + resolution: {integrity: sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==} + cpu: [arm] + os: [android] - baseline-browser-mapping@2.10.16: - resolution: {integrity: sha512-Lyf3aK28zpsD1yQMiiHD4RvVb6UdMoo8xzG2XzFIfR9luPzOpcBlAsT/qfB1XWS1bxWT+UtE4WmQgsp297FYOA==} - engines: {node: '>=6.0.0'} - hasBin: true + '@rollup/rollup-android-arm64@4.60.1': + resolution: {integrity: sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==} + cpu: [arm64] + os: [android] - brace-expansion@1.1.13: - resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} + '@rollup/rollup-darwin-arm64@4.60.1': + resolution: {integrity: sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==} + cpu: [arm64] + os: [darwin] - brace-expansion@5.0.5: - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} - engines: {node: 18 || 20 || >=22} + '@rollup/rollup-darwin-x64@4.60.1': + resolution: {integrity: sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==} + cpu: [x64] + os: [darwin] - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + '@rollup/rollup-freebsd-arm64@4.60.1': + resolution: {integrity: sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==} + cpu: [arm64] + os: [freebsd] - browserslist@4.28.2: - resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + '@rollup/rollup-freebsd-x64@4.60.1': + resolution: {integrity: sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==} + cpu: [x64] + os: [freebsd] - builtin-modules@5.0.0: - resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} - engines: {node: '>=18.20'} + '@rollup/rollup-linux-arm-gnueabihf@4.60.1': + resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==} + cpu: [arm] + os: [linux] + libc: [glibc] - bundle-name@4.1.0: - resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} - engines: {node: '>=18'} + '@rollup/rollup-linux-arm-musleabihf@4.60.1': + resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==} + cpu: [arm] + os: [linux] + libc: [musl] - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} + '@rollup/rollup-linux-arm64-gnu@4.60.1': + resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==} + cpu: [arm64] + os: [linux] + libc: [glibc] - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} + '@rollup/rollup-linux-arm64-musl@4.60.1': + resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==} + cpu: [arm64] + os: [linux] + libc: [musl] - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} + '@rollup/rollup-linux-loong64-gnu@4.60.1': + resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==} + cpu: [loong64] + os: [linux] + libc: [glibc] - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + '@rollup/rollup-linux-loong64-musl@4.60.1': + resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==} + cpu: [loong64] + os: [linux] + libc: [musl] - caniuse-lite@1.0.30001786: - resolution: {integrity: sha512-4oxTZEvqmLLrERwxO76yfKM7acZo310U+v4kqexI2TL1DkkUEMT8UijrxxcnVdxR3qkVf5awGRX+4Z6aPHVKrA==} + '@rollup/rollup-linux-ppc64-gnu@4.60.1': + resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==} + cpu: [ppc64] + os: [linux] + libc: [glibc] - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + '@rollup/rollup-linux-ppc64-musl@4.60.1': + resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==} + cpu: [ppc64] + os: [linux] + libc: [musl] - change-case@5.4.4: - resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + '@rollup/rollup-linux-riscv64-gnu@4.60.1': + resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==} + cpu: [riscv64] + os: [linux] + libc: [glibc] - ci-info@4.4.0: - resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} - engines: {node: '>=8'} + '@rollup/rollup-linux-riscv64-musl@4.60.1': + resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==} + cpu: [riscv64] + os: [linux] + libc: [musl] - clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} + '@rollup/rollup-linux-s390x-gnu@4.60.1': + resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] - cli-cursor@5.0.0: - resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} - engines: {node: '>=18'} + '@rollup/rollup-linux-x64-gnu@4.60.1': + resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==} + cpu: [x64] + os: [linux] + libc: [glibc] - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} + '@rollup/rollup-linux-x64-musl@4.60.1': + resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==} + cpu: [x64] + os: [linux] + libc: [musl] - commander@14.0.3: - resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} - engines: {node: '>=20'} + '@rollup/rollup-openbsd-x64@4.60.1': + resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==} + cpu: [x64] + os: [openbsd] - comment-parser@1.4.6: - resolution: {integrity: sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==} - engines: {node: '>= 12.0.0'} + '@rollup/rollup-openharmony-arm64@4.60.1': + resolution: {integrity: sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.60.1': + resolution: {integrity: sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.60.1': + resolution: {integrity: sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==} + cpu: [ia32] + os: [win32] - common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + '@rollup/rollup-win32-x64-gnu@4.60.1': + resolution: {integrity: sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==} + cpu: [x64] + os: [win32] - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + '@rollup/rollup-win32-x64-msvc@4.60.1': + resolution: {integrity: sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==} + cpu: [x64] + os: [win32] - confusing-browser-globals@1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + '@sindresorhus/tsconfig@8.1.0': + resolution: {integrity: sha512-MggpguA4jNdtyoUy2Hs54nb4lP4rbhH34CsOiFId1q6fmFPnipqeo70ZRkjp5p4Z7wdyspALtSAcKaxL2/3waQ==} + engines: {node: '>=20'} - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - core-js-compat@3.49.0: - resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - cosmiconfig@9.0.1: - resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} - engines: {node: '>=14'} - peerDependencies: - typescript: ^6.0.2 - peerDependenciesMeta: - typescript: - optional: true + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} + '@types/node@25.5.2': + resolution: {integrity: sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==} - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} + '@vitest/expect@2.1.9': + resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} + '@vitest/mocker@2.1.9': + resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==} peerDependencies: - supports-color: '*' + msw: ^2.4.9 + vite: ^5.0.0 peerDependenciesMeta: - supports-color: + msw: + optional: true + vite: optional: true - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - default-browser-id@5.0.1: - resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} - engines: {node: '>=18'} - - default-browser@5.5.0: - resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} - engines: {node: '>=18'} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - del-cli@7.0.0: - resolution: {integrity: sha512-fRl4pWJYu9WFQH8jXdQUYvcD0IMtij9WEc7qmB7xOyJEweNJNuE7iKmqNeoOT1DbBUjtRjxlw8Y63qKBI/NQ1g==} - engines: {node: '>=18'} - hasBin: true - - del@8.0.1: - resolution: {integrity: sha512-gPqh0mKTPvaUZGAuHbrBUYKZWBNAeHG7TU3QH5EhVwPMyKvmfJaNXhcD2jTcXsJRRcffuho4vaYweu80dRrMGA==} - engines: {node: '>=18'} - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - electron-to-chromium@1.5.332: - resolution: {integrity: sha512-7OOtytmh/rINMLwaFTbcMVvYXO3AUm029X0LcyfYk0B557RlPkdpTpnH9+htMlfu5dKwOmT0+Zs2Aw+lnn6TeQ==} - - emoji-regex@10.6.0: - resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} - - enhance-visitors@1.0.0: - resolution: {integrity: sha512-+29eJLiUixTEDRaZ35Vu8jP3gPLNcQQkQkOQjLp2X+6cZGGPDD/uasbFzvLsJKnGZnvmyZ0srxudwOtskHeIDA==} - engines: {node: '>=4.0.0'} - - enhanced-resolve@5.20.1: - resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} - engines: {node: '>=10.13.0'} - - env-editor@1.3.0: - resolution: {integrity: sha512-EqiD/j01PooUbeWk+etUo2TWoocjoxMfGNYpS9e47glIJ5r8WepycIki+LCbonFbPdwlqY5ETeSTAJVMih4z4w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - - environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} - - error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - - es-abstract@1.24.1: - resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-iterator-helpers@1.3.1: - resolution: {integrity: sha512-zWwRvqWiuBPr0muUG/78cW3aHROFCNIQ3zpmYDpwdbnt2m+xlNyRWpHBpa2lJjSBit7BQ+RXA1iwbSmu5yJ/EQ==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} + '@vitest/pretty-format@2.1.9': + resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + '@vitest/runner@2.1.9': + resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==} - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + '@vitest/snapshot@2.1.9': + resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} - eslint-compat-utils@0.5.1: - resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} - engines: {node: '>=12'} - peerDependencies: - eslint: '>=6.0.0' + '@vitest/spy@2.1.9': + resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==} - eslint-config-prettier@10.1.8: - resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' + '@vitest/utils@2.1.9': + resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} - eslint-config-xo-react@0.29.0: - resolution: {integrity: sha512-OiA3fnGu5tkQkcFhXV1J9ZTUr25DDVoGpBdA2dowH6rNZFDed+WtxzcoUNwQNFXqWRAjsFjuxAzw3c1iAHom0Q==} - engines: {node: '>=18.18'} + '@voidzero-dev/vite-plus-core@0.1.18': + resolution: {integrity: sha512-3PmXOL26yHzlw8ET9SwXCmglGzUYq2fOTYf2t0mxvVIs7ua3bnf6tOnmR+6YX5k1Ez26B0ooYzx+znc8k+CAMw==} + engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: - eslint: '>=9.18.0' + '@arethetypeswrong/core': ^0.18.1 + '@tsdown/css': 0.21.8 + '@tsdown/exe': 0.21.8 + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + publint: ^0.3.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + typescript: ^5.0.0 || ^6.0.0 + unplugin-unused: ^0.5.0 + yaml: ^2.4.2 + peerDependenciesMeta: + '@arethetypeswrong/core': + optional: true + '@tsdown/css': + optional: true + '@tsdown/exe': + optional: true + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + publint: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + typescript: + optional: true + unplugin-unused: + optional: true + yaml: + optional: true - eslint-config-xo-typescript@10.0.0: - resolution: {integrity: sha512-WoyK93F9WCoEv4teY+Ah6PttfS+ckRkpTeasWJ/VYD5IfONzAx9muRrn3VQXf0zUJUEPGrujz02ghgGKdpsTfw==} - engines: {node: '>=20.19'} - peerDependencies: - eslint: '>=10' - typescript: ^6.0.2 + '@voidzero-dev/vite-plus-darwin-arm64@0.1.18': + resolution: {integrity: sha512-bw2pWWE8RZRELWjXcdxdmRaOaYjmGmsxEm23TxvGxQXFb7k9l51W8tpjxariPGLxrEl+Cw5u601IL5LASaPJ5w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] - eslint-config-xo@0.50.0: - resolution: {integrity: sha512-IC+G7r8cIZkspJX5Ug97Si3aHyLatx+eZ5w/dyLuBo0HDZj13uIsZy+mlbXM18aN2/MLarIn0vq4R/a75Gmfcg==} - engines: {node: '>=20.19'} - peerDependencies: - eslint: '>=10' + '@voidzero-dev/vite-plus-darwin-x64@0.1.18': + resolution: {integrity: sha512-8TFj6yJNsumoH+yFc+6zf3g2UuzvrPHq2FAAVORffaVZ29PWnDSsXjegaIBmoAtGO5Xb4lcilQx7NoF9hONrZg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] - eslint-formatter-pretty@7.0.0: - resolution: {integrity: sha512-1CaE7Pnce8Csy+tlTEbFC2q5qgT5cJo2a0UkEOds+Y5+mI1nX3DApIhcBP8EPwV8TgTpLlzOfw8mcBJBAs3Y9Q==} - engines: {node: '>=18'} + '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.18': + resolution: {integrity: sha512-xHRqncKanOZ0zNnZSufL4Yx/gWrIFkCjU6jFzCukBOOCrcemq3SrALPHrNf+Nw1RLwNptGUZn2Vx/IjRLzUQDw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] - eslint-import-context@0.1.9: - resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - peerDependencies: - unrs-resolver: ^1.0.0 - peerDependenciesMeta: - unrs-resolver: - optional: true + '@voidzero-dev/vite-plus-linux-arm64-musl@0.1.18': + resolution: {integrity: sha512-CA6XxZbkT8lYwWzS2yAj6exr7nHl3R8Sz+ZdOhYCU4yR2qvzGatdVgFr7oPnrkHLF426cHJ172rmNNj8NKie/w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] - eslint-plugin-ava@16.0.1: - resolution: {integrity: sha512-1QsYwUulr9m9o6EFndkI0J10wZyVimmrQ1epB8zEowulW0o8fW/ahIHrPwTMT53AWbObD+8S78Uz9aKM3zS9+A==} - engines: {node: '>=20.19'} - peerDependencies: - eslint: '>=10' + '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.18': + resolution: {integrity: sha512-xBO3MtLGVASPjH/GDRxexfLCT0othVpiFMdEQ83Y+woVNbrrzcdQTGFUuFG4cAiMhtmjytyFwPBtZ76BWsDO3w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] - eslint-plugin-es-x@7.8.0: - resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '>=8' + '@voidzero-dev/vite-plus-linux-x64-musl@0.1.18': + resolution: {integrity: sha512-ADNis6SMarY7i8+b2ynUJ1PiqCHqnVwY7EQ+fSGug5zZ+W/cZq14+VWPxOvGR9LJk+iol8XuqsHy4BaV2+gjzw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] - eslint-plugin-import-x@4.16.2: - resolution: {integrity: sha512-rM9K8UBHcWKpzQzStn1YRN2T5NvdeIfSVoKu/lKF41znQXHAUcBbYXe5wd6GNjZjTrP7viQ49n1D83x/2gYgIw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@voidzero-dev/vite-plus-test@0.1.18': + resolution: {integrity: sha512-dovC2kJgiwMI8ay0i+3NvQGCDWPj8HQB2ONP/HbdJ5/XQVPq13+BihnCq8/ztz6uGhiDD8Nu4OZ3RgB14uvTfA==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} peerDependencies: - '@typescript-eslint/utils': ^8.56.0 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - eslint-import-resolver-node: '*' + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/coverage-istanbul': 4.1.4 + '@vitest/coverage-v8': 4.1.4 + '@vitest/ui': 4.1.4 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: - '@typescript-eslint/utils': + '@edge-runtime/vm': optional: true - eslint-import-resolver-node: + '@opentelemetry/api': optional: true - - eslint-plugin-n@17.24.0: - resolution: {integrity: sha512-/gC7/KAYmfNnPNOb3eu8vw+TdVnV0zhdQwexsw6FLXbhzroVj20vRn2qL8lDWDGnAQ2J8DhdfvXxX9EoxvERvw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: '>=8.23.0' - - eslint-plugin-prettier@5.5.5: - resolution: {integrity: sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': + '@types/node': optional: true - eslint-config-prettier: + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: optional: true - eslint-plugin-react-hooks@7.0.1: - resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} - engines: {node: '>=18'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.18': + resolution: {integrity: sha512-EcDETMHG8xgjIlMizIu/wf0UtRZLGz+lHFvYFZVCkz4vLLz93a06vZ+3Oi9xY2Kc8aOHsCf8Gj5/dox/03cscw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] - eslint-plugin-react@7.37.5: - resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.18': + resolution: {integrity: sha512-jBgL4ZjSJJu3FDcrqj4muzbr0WKlU6Ym1ilHQnq8R+2TRvE0AtvAMMuphICDslZGi6EK3fwJ+r2Lv7GU1AipQA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] - eslint-plugin-unicorn@63.0.0: - resolution: {integrity: sha512-Iqecl9118uQEXYh7adylgEmGfkn5es3/mlQTLLkd4pXkIk9CTGrAbeUux+YljSa2ohXCBmQQ0+Ej1kZaFgcfkA==} - engines: {node: ^20.10.0 || >=21.0.0} - peerDependencies: - eslint: '>=9.38.0' + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} - eslint-rule-docs@1.1.235: - resolution: {integrity: sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} - eslint-scope@9.1.2: - resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} - eslint-visitor-keys@5.0.1: - resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - eslint@10.2.0: - resolution: {integrity: sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} - espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} - espree@11.2.0: - resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} - espurify@3.2.0: - resolution: {integrity: sha512-+jfGpC1eUu7s4M8sXnnoUsQfEQ1qqkEr/S+V47QR+GC/NODe98s4iPYq/2KrNaS1guTjHBhMS4j9N3NOObT1WQ==} + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} - esquery@1.7.0: - resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} - engines: {node: '>=0.10'} + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + engines: {node: '>=18'} - execa@9.6.1: - resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} - engines: {node: ^18.19.0 || >=20.5.0} + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - fastq@1.20.1: - resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} @@ -957,2867 +1012,1291 @@ packages: picomatch: optional: true - figures@6.1.0: - resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} engines: {node: '>=18'} - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true - find-cache-directory@6.0.0: - resolution: {integrity: sha512-CvFd5ivA6HcSHbD+59P7CyzINHXzwhuQK8RY7CxJZtgDSAtRlHiCaQpZQ2lMR/WRyUIEmzUvL6G2AGurMfegZA==} - engines: {node: '>=20'} + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} - find-up-simple@1.0.1: - resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} - engines: {node: '>=18'} + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} - flatted@3.4.2: - resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + ky@1.14.3: + resolution: {integrity: sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==} + engines: {node: '>=18'} - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - generator-function@2.0.1: - resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} - engines: {node: '>= 0.4'} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] - get-east-asian-width@1.5.0: - resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} - engines: {node: '>=18'} + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] - get-stdin@10.0.0: - resolution: {integrity: sha512-eWSePJ4zXFdqz+/Lyfopob4rIcoF/U2XfE8nJc7iZV6lnebWc9k7DoQQpX+2a9jc0AOvBsXvbe5YkjXl/MHbpg==} - engines: {node: '>=20'} + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] - get-stream@9.0.1: - resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} - engines: {node: '>=18'} + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] - get-tsconfig@4.13.7: - resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] - globals@15.15.0: - resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} - engines: {node: '>=18'} + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} - globals@16.5.0: - resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} engines: {node: '>=18'} - globals@17.4.0: - resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==} - engines: {node: '>=18'} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - globby@14.1.0: - resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - globby@16.2.0: - resolution: {integrity: sha512-QrJia2qDf5BB/V6HYlDTs0I0lBahyjLzpGQg3KT7FnCdTonAyPy2RtY802m2k4ALx6Dp752f82WsOczEVr3l6Q==} - engines: {node: '>=20'} - - globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - - has-flag@5.0.1: - resolution: {integrity: sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==} - engines: {node: '>=12'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - hermes-estree@0.25.1: - resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} - - hermes-parser@0.25.1: - resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} - - human-signals@8.0.1: - resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} - engines: {node: '>=18.18.0'} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - indent-string@5.0.0: - resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} - engines: {node: '>=12'} - - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - - irregular-plurals@3.5.0: - resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==} - engines: {node: '>=8'} - - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-builtin-module@5.0.0: - resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==} - engines: {node: '>=18.20'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - - is-generator-function@1.1.2: - resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} - engines: {node: '>= 0.4'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} - is-in-ssh@1.0.0: - resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==} - engines: {node: '>=20'} + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - is-interactive@2.0.0: - resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} - engines: {node: '>=12'} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-path-cwd@3.0.0: - resolution: {integrity: sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - is-path-inside@4.0.0: - resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} - engines: {node: '>=12'} - - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - - is-stream@4.0.1: - resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - - is-unicode-supported@1.3.0: - resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} - engines: {node: '>=12'} - - is-unicode-supported@2.1.0: - resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - is-wsl@3.1.1: - resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} - engines: {node: '>=16'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + ora@8.2.0: + resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} + engines: {node: '>=18'} - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + oxfmt@0.45.0: + resolution: {integrity: sha512-0o/COoN9fY50bjVeM7PQsNgbhndKurBIeTIcspW033OumksjJJmIVDKjAk5HMwU/GHTxSOdGDdhJ6BRzGPmsHg==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} + oxlint-tsgolint@0.20.0: + resolution: {integrity: sha512-/Uc9TQyN1l8w9QNvXtVHYtz+SzDJHKpb5X0UnHodl0BVzijUPk0LPlDOHAvogd1UI+iy9ZSF6gQxEqfzUxCULQ==} hasBin: true - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} + oxlint@1.60.0: + resolution: {integrity: sha512-tnRzTWiWJ9pg3ftRWnD0+Oqh78L6ZSwcEudvCZaER0PIqiAnNyXj5N1dPwjmNpDalkKS9m/WMLN1CTPUBPmsgw==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + peerDependencies: + oxlint-tsgolint: '>=0.18.0' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - ky@1.14.3: - resolution: {integrity: sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==} - engines: {node: '>=18'} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - line-column-path@4.0.0: - resolution: {integrity: sha512-Zvpvd56i9FRV5kaJFiiY1t+FNMEH+dGEaLyQprqKlGHBAxJXmdSk+8tVsh6b9YlxbfyyuLrhJCkzwB+AmOBZ0g==} - engines: {node: '>=20'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - lodash@4.18.1: - resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} - log-symbols@6.0.0: - resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} - engines: {node: '>=18'} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - log-symbols@7.0.1: - resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} - engines: {node: '>=18'} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + pixelmatch@7.1.0: + resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==} hasBin: true - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - mdn-data@2.23.0: - resolution: {integrity: sha512-786vq1+4079JSeu2XdcDjrhi/Ry7BWtjDl9WtGPWLiIHb2T66GvIVflZTBoSNZ5JqTtJGYEVMuFA/lbQlMOyDQ==} + pngjs@7.0.0: + resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} + engines: {node: '>=14.19.0'} - meow@14.1.0: - resolution: {integrity: sha512-EDYo6VlmtnumlcBCbh1gLJ//9jvM/ndXHfVXIFrZVr6fGcwTUyCTFNTLCKuY3ffbK8L/+3Mzqnd58RojiZqHVw==} - engines: {node: '>=20'} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micro-spelling-correcter@1.1.1: - resolution: {integrity: sha512-lkJ3Rj/mtjlRcHk6YyCbvZhyWTOzdBvTHsxMmZSk5jxN1YyVSQ+JETAom55mdzfcyDrY/49Z7UCW760BK30crg==} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + postcss@8.5.10: + resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} + engines: {node: ^10 || ^12 || >=14} - mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} - minimatch@10.2.5: - resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} - engines: {node: 18 || 20 || >=22} - - minimatch@3.1.5: - resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + rolldown@1.0.0-rc.15: + resolution: {integrity: sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true - napi-postinstall@0.3.4: - resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + rollup@4.60.1: + resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} - node-exports-info@1.6.0: - resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==} - engines: {node: '>= 0.4'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - node-releases@2.0.37: - resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} - npm-run-path@6.0.0: - resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - object.entries@1.1.9: - resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} - engines: {node: '>= 0.4'} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} - onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} - engines: {node: '>=18'} - - open-editor@6.0.0: - resolution: {integrity: sha512-LGd2Xn6NvFlbx/lg/HK69w6Dbg+21MzJzcPDPQRgDRqc+qiR+2/SN99rzZSo7Qa1ck1hcGYig0CAo53cmXCE0w==} - engines: {node: '>=20'} - - open@10.2.0: - resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} engines: {node: '>=18'} - open@11.0.0: - resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==} - engines: {node: '>=20'} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - ora@8.2.0: - resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - p-map@7.0.4: - resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} - engines: {node: '>=18'} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - parse-ms@4.0.0: - resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + tinyexec@1.1.1: + resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==} engines: {node: '>=18'} - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + tinypool@2.1.0: + resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} + engines: {node: ^20.0.0 || >=22.0.0} - path-type@6.0.0: - resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} - engines: {node: '>=18'} + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} - picomatch@2.3.2: - resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} - engines: {node: '>=8.6'} + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} - engines: {node: '>=12'} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - pkg-dir@8.0.0: - resolution: {integrity: sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==} - engines: {node: '>=18'} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true - plur@5.1.0: - resolution: {integrity: sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} - pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} + vite-node@2.1.9: + resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} + vite-plus@0.1.18: + resolution: {integrity: sha512-RiWUoOmQiJMtd4Dfm6WD0v0Selqh/nQzmaGVIrkfnr+2s5UxGVZy7n2TCO5ZnR7w9noMIgtUAQN8GtKhwHEiOQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true - powershell-utils@0.1.0: - resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} - engines: {node: '>=20'} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - presentable-error@0.0.1: - resolution: {integrity: sha512-E6rsNU1QNJgB3sjj7OANinGncFKuK+164sLXw1/CqBjj/EkXSoSdHCtWQGBNlREIGLnL7IEUEGa08YFVUbrhVg==} - engines: {node: '>=16'} - - prettier-linter-helpers@1.0.1: - resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} - engines: {node: '>=6.0.0'} - - prettier@3.8.1: - resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} - engines: {node: '>=14'} - hasBin: true - - pretty-ms@9.3.0: - resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} - engines: {node: '>=18'} - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - - regjsparser@0.13.1: - resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==} - hasBin: true - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve@2.0.0-next.6: - resolution: {integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==} - engines: {node: '>= 0.4'} - hasBin: true - - restore-cursor@5.1.0: - resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} - engines: {node: '>=18'} - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - run-applescript@7.1.0: - resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} - engines: {node: '>=18'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} - - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} - engines: {node: '>=10'} - hasBin: true - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - stable-hash-x@0.2.0: - resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} - engines: {node: '>=12.0.0'} - - stdin-discarder@0.2.2: - resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} - engines: {node: '>=18'} - - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} - - string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} - - string-width@8.2.0: - resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} - engines: {node: '>=20'} - - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - strip-ansi@7.2.0: - resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} - engines: {node: '>=12'} - - strip-final-newline@4.0.0: - resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} - engines: {node: '>=18'} - - strip-indent@4.1.1: - resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} - engines: {node: '>=12'} - - supports-color@10.2.2: - resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} - engines: {node: '>=18'} - - supports-hyperlinks@4.4.0: - resolution: {integrity: sha512-UKbpT93hN5Nr9go5UY7bopIB9YQlMz9nm/ct4IXt/irb5YRkn9WaqrOBJGZ5Pwvsd5FQzSVeYlGdXoCAPQZrPg==} - engines: {node: '>=20'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - synckit@0.11.12: - resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==} - engines: {node: ^14.18.0 || >=16.0.0} - - tagged-tag@1.0.0: - resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} - engines: {node: '>=20'} - - tapable@2.3.2: - resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==} - engines: {node: '>=6'} - - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - ts-api-utils@2.5.0: - resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: ^6.0.2 - - ts-declaration-location@1.0.7: - resolution: {integrity: sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==} - peerDependencies: - typescript: ^6.0.2 - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-fest@5.5.0: - resolution: {integrity: sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==} - engines: {node: '>=20'} - - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} - - typescript-eslint@8.58.0: - resolution: {integrity: sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ^6.0.2 - - typescript@6.0.2: - resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==} - engines: {node: '>=14.17'} - hasBin: true - - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - - undici-types@7.18.2: - resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} - - unicorn-magic@0.3.0: - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} - engines: {node: '>=18'} - - unicorn-magic@0.4.0: - resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} - engines: {node: '>=20'} - - unrs-resolver@1.11.1: - resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - - update-browserslist-db@1.2.3: - resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + vite@5.4.21: + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.20: - resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - 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'} + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true - xo@2.0.2: - resolution: {integrity: sha512-08L33hcKMksZyUAK7P8f6Hx5oiEgmya2NjgidvH2e3mBjot9kHz5vlxBjUPX5nparSgxBre/+xVPicat8P2WLQ==} - engines: {node: '>=20.19'} + vite@8.0.8: + resolution: {integrity: sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - webpack: '>=1.11.0' + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 peerDependenciesMeta: - webpack: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: optional: true - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - yoctocolors@2.1.2: - resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} - engines: {node: '>=18'} - - zod-validation-error@4.0.2: - resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} - engines: {node: '>=18.0.0'} - peerDependencies: - zod: ^3.25.0 || ^4.0.0 - - zod@4.3.6: - resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} - -snapshots: - - '@babel/code-frame@7.29.0': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.29.0': {} - - '@babel/core@7.29.0': - 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 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.29.1': - dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/helper-compilation-targets@7.28.6': - dependencies: - '@babel/compat-data': 7.29.0 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.2 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-globals@7.28.0': {} - - '@babel/helper-module-imports@7.28.6': - dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': - 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 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-validator-identifier@7.28.5': {} - - '@babel/helper-validator-option@7.27.1': {} - - '@babel/helpers@7.29.2': - dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - - '@babel/parser@7.29.2': - dependencies: - '@babel/types': 7.29.0 - - '@babel/template@7.28.6': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 - - '@babel/traverse@7.29.0': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.2 - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - 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 - - '@emnapi/core@1.9.2': - dependencies: - '@emnapi/wasi-threads': 1.2.1 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.9.2': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.2.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@eslint-community/eslint-plugin-eslint-comments@4.7.1(eslint@10.2.0)': - dependencies: - escape-string-regexp: 4.0.0 - eslint: 10.2.0 - ignore: 7.0.5 - - '@eslint-community/eslint-utils@4.9.1(eslint@10.2.0)': - dependencies: - eslint: 10.2.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.2': {} - - '@eslint/compat@2.0.4(eslint@10.2.0)': - dependencies: - '@eslint/core': 1.2.0 - optionalDependencies: - eslint: 10.2.0 - - '@eslint/config-array@0.23.4': - dependencies: - '@eslint/object-schema': 3.0.4 - debug: 4.4.3 - minimatch: 10.2.5 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.5.4': - dependencies: - '@eslint/core': 1.2.0 - - '@eslint/core@0.17.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/core@1.2.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/css-tree@3.6.9': - dependencies: - mdn-data: 2.23.0 - source-map-js: 1.2.1 - - '@eslint/css@0.14.1': - dependencies: - '@eslint/core': 0.17.0 - '@eslint/css-tree': 3.6.9 - '@eslint/plugin-kit': 0.4.1 - - '@eslint/json@1.2.0': - dependencies: - '@eslint/core': 1.2.0 - '@eslint/plugin-kit': 0.6.1 - '@humanwhocodes/momoa': 3.3.10 - natural-compare: 1.4.0 - - '@eslint/object-schema@3.0.4': {} - - '@eslint/plugin-kit@0.4.1': - dependencies: - '@eslint/core': 0.17.0 - levn: 0.4.1 - - '@eslint/plugin-kit@0.6.1': - dependencies: - '@eslint/core': 1.2.0 - levn: 0.4.1 - - '@eslint/plugin-kit@0.7.0': - dependencies: - '@eslint/core': 1.2.0 - levn: 0.4.1 - - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.7': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.4.3 - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/momoa@3.3.10': {} - - '@humanwhocodes/retry@0.4.3': {} - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@marswave/listenhub-sdk@0.0.4': - dependencies: - ky: 1.14.3 - - '@napi-rs/wasm-runtime@0.2.12': - dependencies: - '@emnapi/core': 1.9.2 - '@emnapi/runtime': 1.9.2 - '@tybys/wasm-util': 0.10.1 - optional: true - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.20.1 - - '@package-json/types@0.0.12': {} - - '@pkgr/core@0.2.9': {} - - '@sec-ant/readable-stream@0.4.1': {} - - '@sindresorhus/merge-streams@2.3.0': {} - - '@sindresorhus/merge-streams@4.0.0': {} - - '@sindresorhus/tsconfig@8.1.0': {} - - '@stylistic/eslint-plugin@5.10.0(eslint@10.2.0)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0) - '@typescript-eslint/types': 8.58.0 - eslint: 10.2.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - estraverse: 5.3.0 - picomatch: 4.0.4 - - '@tybys/wasm-util@0.10.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@types/eslint@9.6.1': - dependencies: - '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 - - '@types/esrecurse@4.3.1': {} - - '@types/estree@1.0.8': {} - - '@types/json-schema@7.0.15': {} - - '@types/node@25.5.2': - dependencies: - undici-types: 7.18.2 - - '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.2.0)(typescript@6.0.2))(eslint@10.2.0)(typescript@6.0.2)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.58.0(eslint@10.2.0)(typescript@6.0.2) - '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/type-utils': 8.58.0(eslint@10.2.0)(typescript@6.0.2) - '@typescript-eslint/utils': 8.58.0(eslint@10.2.0)(typescript@6.0.2) - '@typescript-eslint/visitor-keys': 8.58.0 - eslint: 10.2.0 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.5.0(typescript@6.0.2) - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.58.0(eslint@10.2.0)(typescript@6.0.2)': - dependencies: - '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) - '@typescript-eslint/visitor-keys': 8.58.0 - debug: 4.4.3 - eslint: 10.2.0 - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.58.0(typescript@6.0.2)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@6.0.2) - '@typescript-eslint/types': 8.58.0 - debug: 4.4.3 - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.58.0': - dependencies: - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/visitor-keys': 8.58.0 - - '@typescript-eslint/tsconfig-utils@8.58.0(typescript@6.0.2)': - dependencies: - typescript: 6.0.2 - - '@typescript-eslint/type-utils@8.58.0(eslint@10.2.0)(typescript@6.0.2)': - dependencies: - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) - '@typescript-eslint/utils': 8.58.0(eslint@10.2.0)(typescript@6.0.2) - debug: 4.4.3 - eslint: 10.2.0 - ts-api-utils: 2.5.0(typescript@6.0.2) - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.58.0': {} - - '@typescript-eslint/typescript-estree@8.58.0(typescript@6.0.2)': - dependencies: - '@typescript-eslint/project-service': 8.58.0(typescript@6.0.2) - '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@6.0.2) - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/visitor-keys': 8.58.0 - debug: 4.4.3 - minimatch: 10.2.5 - semver: 7.7.4 - tinyglobby: 0.2.15 - ts-api-utils: 2.5.0(typescript@6.0.2) - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.58.0(eslint@10.2.0)(typescript@6.0.2)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0) - '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) - eslint: 10.2.0 - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.58.0': - dependencies: - '@typescript-eslint/types': 8.58.0 - eslint-visitor-keys: 5.0.1 - - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - optional: true - - '@unrs/resolver-binding-android-arm64@1.11.1': - optional: true - - '@unrs/resolver-binding-darwin-arm64@1.11.1': - optional: true - - '@unrs/resolver-binding-darwin-x64@1.11.1': - optional: true - - '@unrs/resolver-binding-freebsd-x64@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - dependencies: - '@napi-rs/wasm-runtime': 0.2.12 - optional: true - - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - optional: true - - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - optional: true - - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - optional: true - - acorn-jsx@5.3.2(acorn@8.16.0): - dependencies: - acorn: 8.16.0 - - acorn@8.16.0: {} - - ajv@6.14.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ansi-escapes@7.3.0: - dependencies: - environment: 1.1.0 - - ansi-regex@6.2.2: {} - - argparse@2.0.1: {} - - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - array-includes@3.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - math-intrinsics: 1.1.0 - - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 - - array.prototype.flat@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-shim-unscopables: 1.1.0 - - array.prototype.flatmap@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-shim-unscopables: 1.1.0 - - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - es-shim-unscopables: 1.1.0 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - - arrify@3.0.0: {} - - async-function@1.0.0: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - - balanced-match@1.0.2: {} - - balanced-match@4.0.4: {} - - baseline-browser-mapping@2.10.16: {} - - brace-expansion@1.1.13: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@5.0.5: - dependencies: - balanced-match: 4.0.4 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - browserslist@4.28.2: - dependencies: - baseline-browser-mapping: 2.10.16 - caniuse-lite: 1.0.30001786 - electron-to-chromium: 1.5.332 - node-releases: 2.0.37 - update-browserslist-db: 1.2.3(browserslist@4.28.2) - - builtin-modules@5.0.0: {} - - bundle-name@4.1.0: - dependencies: - run-applescript: 7.1.0 - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} - - caniuse-lite@1.0.30001786: {} - - chalk@5.6.2: {} - - change-case@5.4.4: {} - - ci-info@4.4.0: {} - - clean-regexp@1.0.0: - dependencies: - escape-string-regexp: 1.0.5 - - cli-cursor@5.0.0: - dependencies: - restore-cursor: 5.1.0 - - cli-spinners@2.9.2: {} - - commander@14.0.3: {} - - comment-parser@1.4.6: {} - - common-path-prefix@3.0.0: {} - - concat-map@0.0.1: {} - - confusing-browser-globals@1.0.11: {} - - convert-source-map@2.0.0: {} - - core-js-compat@3.49.0: - dependencies: - browserslist: 4.28.2 - - cosmiconfig@9.0.1(typescript@6.0.2): - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.1 - js-yaml: 4.1.1 - parse-json: 5.2.0 - optionalDependencies: - typescript: 6.0.2 - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - deep-is@0.1.4: {} - - default-browser-id@5.0.1: {} - - default-browser@5.5.0: - dependencies: - bundle-name: 4.1.0 - default-browser-id: 5.0.1 - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-lazy-prop@3.0.0: {} - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - del-cli@7.0.0: - dependencies: - del: 8.0.1 - meow: 14.1.0 - presentable-error: 0.0.1 - - del@8.0.1: - dependencies: - globby: 14.1.0 - is-glob: 4.0.3 - is-path-cwd: 3.0.0 - is-path-inside: 4.0.0 - p-map: 7.0.4 - presentable-error: 0.0.1 - slash: 5.1.0 - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - electron-to-chromium@1.5.332: {} - - emoji-regex@10.6.0: {} - - enhance-visitors@1.0.0: - dependencies: - lodash: 4.18.1 - - enhanced-resolve@5.20.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.3.2 - - env-editor@1.3.0: {} - - env-paths@2.2.1: {} - - environment@1.1.0: {} - - error-ex@1.3.4: - dependencies: - is-arrayish: 0.2.1 - - es-abstract@1.24.1: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.20 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-iterator-helpers@1.3.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - es-set-tostringtag: 2.1.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - iterator.prototype: 1.1.5 - math-intrinsics: 1.1.0 - safe-array-concat: 1.1.3 - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.1.0: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - escalade@3.2.0: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@4.0.0: {} - - eslint-compat-utils@0.5.1(eslint@10.2.0): - dependencies: - eslint: 10.2.0 - semver: 7.7.4 - - eslint-config-prettier@10.1.8(eslint@10.2.0): - dependencies: - eslint: 10.2.0 + vitest@2.1.9: + resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 2.1.9 + '@vitest/ui': 2.1.9 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true - eslint-config-xo-react@0.29.0(eslint@10.2.0): - dependencies: - eslint: 10.2.0 - eslint-plugin-react: 7.37.5(eslint@10.2.0) - eslint-plugin-react-hooks: 7.0.1(eslint@10.2.0) - transitivePeerDependencies: - - supports-color + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true - eslint-config-xo-typescript@10.0.0(eslint@10.2.0)(typescript@6.0.2): - dependencies: - '@stylistic/eslint-plugin': 5.10.0(eslint@10.2.0) - eslint: 10.2.0 - eslint-config-xo: 0.50.0(eslint@10.2.0) - typescript: 6.0.2 - typescript-eslint: 8.58.0(eslint@10.2.0)(typescript@6.0.2) - transitivePeerDependencies: - - supports-color + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + 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 - eslint-config-xo@0.50.0(eslint@10.2.0): - dependencies: - '@eslint/css': 0.14.1 - '@eslint/json': 1.2.0 - '@stylistic/eslint-plugin': 5.10.0(eslint@10.2.0) - confusing-browser-globals: 1.0.11 - eslint: 10.2.0 - globals: 17.4.0 - - eslint-formatter-pretty@7.0.0: - dependencies: - '@types/eslint': 9.6.1 - ansi-escapes: 7.3.0 - chalk: 5.6.2 - eslint-rule-docs: 1.1.235 - log-symbols: 7.0.1 - plur: 5.1.0 - string-width: 8.2.0 - supports-hyperlinks: 4.4.0 + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} - eslint-import-context@0.1.9(unrs-resolver@1.11.1): - dependencies: - get-tsconfig: 4.13.7 - stable-hash-x: 0.2.0 - optionalDependencies: - unrs-resolver: 1.11.1 +snapshots: - eslint-plugin-ava@16.0.1(eslint@10.2.0): - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0) - '@eslint/json': 1.2.0 - enhance-visitors: 1.0.0 - eslint: 10.2.0 - espree: 11.2.0 - espurify: 3.2.0 - micro-spelling-correcter: 1.1.1 - resolve-from: 5.0.0 - - eslint-plugin-es-x@7.8.0(eslint@10.2.0): + '@emnapi/core@1.9.2': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0) - '@eslint-community/regexpp': 4.12.2 - eslint: 10.2.0 - eslint-compat-utils: 0.5.1(eslint@10.2.0) + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true - eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.58.0(eslint@10.2.0)(typescript@6.0.2))(eslint@10.2.0): + '@emnapi/runtime@1.9.2': dependencies: - '@package-json/types': 0.0.12 - '@typescript-eslint/types': 8.58.0 - comment-parser: 1.4.6 - debug: 4.4.3 - eslint: 10.2.0 - eslint-import-context: 0.1.9(unrs-resolver@1.11.1) - is-glob: 4.0.3 - minimatch: 10.2.5 - semver: 7.7.4 - stable-hash-x: 0.2.0 - unrs-resolver: 1.11.1 - optionalDependencies: - '@typescript-eslint/utils': 8.58.0(eslint@10.2.0)(typescript@6.0.2) - transitivePeerDependencies: - - supports-color + tslib: 2.8.1 + optional: true - eslint-plugin-n@17.24.0(eslint@10.2.0)(typescript@6.0.2): + '@emnapi/wasi-threads@1.2.1': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0) - enhanced-resolve: 5.20.1 - eslint: 10.2.0 - eslint-plugin-es-x: 7.8.0(eslint@10.2.0) - get-tsconfig: 4.13.7 - globals: 15.15.0 - globrex: 0.1.2 - ignore: 5.3.2 - semver: 7.7.4 - ts-declaration-location: 1.0.7(typescript@6.0.2) - transitivePeerDependencies: - - typescript + tslib: 2.8.1 + optional: true - eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.0))(eslint@10.2.0)(prettier@3.8.1): - dependencies: - eslint: 10.2.0 - prettier: 3.8.1 - prettier-linter-helpers: 1.0.1 - synckit: 0.11.12 - optionalDependencies: - '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.8(eslint@10.2.0) + '@esbuild/aix-ppc64@0.21.5': + optional: true - eslint-plugin-react-hooks@7.0.1(eslint@10.2.0): - dependencies: - '@babel/core': 7.29.0 - '@babel/parser': 7.29.2 - eslint: 10.2.0 - hermes-parser: 0.25.1 - zod: 4.3.6 - zod-validation-error: 4.0.2(zod@4.3.6) - transitivePeerDependencies: - - supports-color + '@esbuild/android-arm64@0.21.5': + optional: true - eslint-plugin-react@7.37.5(eslint@10.2.0): - dependencies: - array-includes: 3.1.9 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.3.1 - eslint: 10.2.0 - estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.5 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.6 - semver: 6.3.1 - string.prototype.matchall: 4.0.12 - string.prototype.repeat: 1.0.0 - - eslint-plugin-unicorn@63.0.0(eslint@10.2.0): - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0) - change-case: 5.4.4 - ci-info: 4.4.0 - clean-regexp: 1.0.0 - core-js-compat: 3.49.0 - eslint: 10.2.0 - find-up-simple: 1.0.1 - globals: 16.5.0 - indent-string: 5.0.0 - is-builtin-module: 5.0.0 - jsesc: 3.1.0 - pluralize: 8.0.0 - regexp-tree: 0.1.27 - regjsparser: 0.13.1 - semver: 7.7.4 - strip-indent: 4.1.1 - - eslint-rule-docs@1.1.235: {} - - eslint-scope@9.1.2: - dependencies: - '@types/esrecurse': 4.3.1 - '@types/estree': 1.0.8 - esrecurse: 4.3.0 - estraverse: 5.3.0 + '@esbuild/android-arm@0.21.5': + optional: true - eslint-visitor-keys@3.4.3: {} + '@esbuild/android-x64@0.21.5': + optional: true - eslint-visitor-keys@4.2.1: {} + '@esbuild/darwin-arm64@0.21.5': + optional: true - eslint-visitor-keys@5.0.1: {} + '@esbuild/darwin-x64@0.21.5': + optional: true - eslint@10.2.0: - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0) - '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.4 - '@eslint/config-helpers': 0.5.4 - '@eslint/core': 1.2.0 - '@eslint/plugin-kit': 0.7.0 - '@humanfs/node': 0.16.7 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - ajv: 6.14.0 - cross-spawn: 7.0.6 - debug: 4.4.3 - escape-string-regexp: 4.0.0 - eslint-scope: 9.1.2 - eslint-visitor-keys: 5.0.1 - espree: 11.2.0 - esquery: 1.7.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - minimatch: 10.2.5 - natural-compare: 1.4.0 - optionator: 0.9.4 - transitivePeerDependencies: - - supports-color + '@esbuild/freebsd-arm64@0.21.5': + optional: true - espree@10.4.0: - dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) - eslint-visitor-keys: 4.2.1 + '@esbuild/freebsd-x64@0.21.5': + optional: true - espree@11.2.0: - dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) - eslint-visitor-keys: 5.0.1 + '@esbuild/linux-arm64@0.21.5': + optional: true - espurify@3.2.0: {} + '@esbuild/linux-arm@0.21.5': + optional: true - esquery@1.7.0: - dependencies: - estraverse: 5.3.0 + '@esbuild/linux-ia32@0.21.5': + optional: true - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 + '@esbuild/linux-loong64@0.21.5': + optional: true - estraverse@5.3.0: {} + '@esbuild/linux-mips64el@0.21.5': + optional: true - esutils@2.0.3: {} + '@esbuild/linux-ppc64@0.21.5': + optional: true - execa@9.6.1: - dependencies: - '@sindresorhus/merge-streams': 4.0.0 - cross-spawn: 7.0.6 - figures: 6.1.0 - get-stream: 9.0.1 - human-signals: 8.0.1 - is-plain-obj: 4.1.0 - is-stream: 4.0.1 - npm-run-path: 6.0.0 - pretty-ms: 9.3.0 - signal-exit: 4.1.0 - strip-final-newline: 4.0.0 - yoctocolors: 2.1.2 + '@esbuild/linux-riscv64@0.21.5': + optional: true - fast-deep-equal@3.1.3: {} + '@esbuild/linux-s390x@0.21.5': + optional: true - fast-diff@1.3.0: {} + '@esbuild/linux-x64@0.21.5': + optional: true - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 + '@esbuild/netbsd-x64@0.21.5': + optional: true - fast-json-stable-stringify@2.1.0: {} + '@esbuild/openbsd-x64@0.21.5': + optional: true - fast-levenshtein@2.0.6: {} + '@esbuild/sunos-x64@0.21.5': + optional: true - fastq@1.20.1: - dependencies: - reusify: 1.1.0 + '@esbuild/win32-arm64@0.21.5': + optional: true - fdir@6.5.0(picomatch@4.0.4): - optionalDependencies: - picomatch: 4.0.4 + '@esbuild/win32-ia32@0.21.5': + optional: true - figures@6.1.0: - dependencies: - is-unicode-supported: 2.1.0 + '@esbuild/win32-x64@0.21.5': + optional: true - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 + '@jridgewell/sourcemap-codec@1.5.5': {} - fill-range@7.1.1: + '@marswave/listenhub-sdk@0.0.4': dependencies: - to-regex-range: 5.0.1 + ky: 1.14.3 - find-cache-directory@6.0.0: + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: - common-path-prefix: 3.0.0 - pkg-dir: 8.0.0 + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@tybys/wasm-util': 0.10.1 + optional: true - find-up-simple@1.0.1: {} + '@oxc-project/runtime@0.124.0': {} - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 + '@oxc-project/types@0.124.0': {} - flat-cache@4.0.1: - dependencies: - flatted: 3.4.2 - keyv: 4.5.4 + '@oxfmt/binding-android-arm-eabi@0.45.0': + optional: true - flatted@3.4.2: {} + '@oxfmt/binding-android-arm64@0.45.0': + optional: true - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 + '@oxfmt/binding-darwin-arm64@0.45.0': + optional: true - function-bind@1.1.2: {} + '@oxfmt/binding-darwin-x64@0.45.0': + optional: true - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 + '@oxfmt/binding-freebsd-x64@0.45.0': + optional: true - functions-have-names@1.2.3: {} + '@oxfmt/binding-linux-arm-gnueabihf@0.45.0': + optional: true - generator-function@2.0.1: {} + '@oxfmt/binding-linux-arm-musleabihf@0.45.0': + optional: true - gensync@1.0.0-beta.2: {} + '@oxfmt/binding-linux-arm64-gnu@0.45.0': + optional: true - get-east-asian-width@1.5.0: {} + '@oxfmt/binding-linux-arm64-musl@0.45.0': + optional: true - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 + '@oxfmt/binding-linux-ppc64-gnu@0.45.0': + optional: true - get-stdin@10.0.0: {} + '@oxfmt/binding-linux-riscv64-gnu@0.45.0': + optional: true - get-stream@9.0.1: - dependencies: - '@sec-ant/readable-stream': 0.4.1 - is-stream: 4.0.1 + '@oxfmt/binding-linux-riscv64-musl@0.45.0': + optional: true - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 + '@oxfmt/binding-linux-s390x-gnu@0.45.0': + optional: true - get-tsconfig@4.13.7: - dependencies: - resolve-pkg-maps: 1.0.0 + '@oxfmt/binding-linux-x64-gnu@0.45.0': + optional: true - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 + '@oxfmt/binding-linux-x64-musl@0.45.0': + optional: true - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 + '@oxfmt/binding-openharmony-arm64@0.45.0': + optional: true - globals@15.15.0: {} + '@oxfmt/binding-win32-arm64-msvc@0.45.0': + optional: true - globals@16.5.0: {} + '@oxfmt/binding-win32-ia32-msvc@0.45.0': + optional: true - globals@17.4.0: {} + '@oxfmt/binding-win32-x64-msvc@0.45.0': + optional: true - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 + '@oxlint-tsgolint/darwin-arm64@0.20.0': + optional: true - globby@14.1.0: - dependencies: - '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.3 - ignore: 7.0.5 - path-type: 6.0.0 - slash: 5.1.0 - unicorn-magic: 0.3.0 - - globby@16.2.0: - dependencies: - '@sindresorhus/merge-streams': 4.0.0 - fast-glob: 3.3.3 - ignore: 7.0.5 - is-path-inside: 4.0.0 - slash: 5.1.0 - unicorn-magic: 0.4.0 + '@oxlint-tsgolint/darwin-x64@0.20.0': + optional: true - globrex@0.1.2: {} + '@oxlint-tsgolint/linux-arm64@0.20.0': + optional: true - gopd@1.2.0: {} + '@oxlint-tsgolint/linux-x64@0.20.0': + optional: true - graceful-fs@4.2.11: {} + '@oxlint-tsgolint/win32-arm64@0.20.0': + optional: true - has-bigints@1.1.0: {} + '@oxlint-tsgolint/win32-x64@0.20.0': + optional: true - has-flag@5.0.1: {} + '@oxlint/binding-android-arm-eabi@1.60.0': + optional: true - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 + '@oxlint/binding-android-arm64@1.60.0': + optional: true - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 + '@oxlint/binding-darwin-arm64@1.60.0': + optional: true - has-symbols@1.1.0: {} + '@oxlint/binding-darwin-x64@1.60.0': + optional: true - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 + '@oxlint/binding-freebsd-x64@1.60.0': + optional: true - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 + '@oxlint/binding-linux-arm-gnueabihf@1.60.0': + optional: true - hermes-estree@0.25.1: {} + '@oxlint/binding-linux-arm-musleabihf@1.60.0': + optional: true - hermes-parser@0.25.1: - dependencies: - hermes-estree: 0.25.1 + '@oxlint/binding-linux-arm64-gnu@1.60.0': + optional: true - human-signals@8.0.1: {} + '@oxlint/binding-linux-arm64-musl@1.60.0': + optional: true - ignore@5.3.2: {} + '@oxlint/binding-linux-ppc64-gnu@1.60.0': + optional: true - ignore@7.0.5: {} + '@oxlint/binding-linux-riscv64-gnu@1.60.0': + optional: true - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 + '@oxlint/binding-linux-riscv64-musl@1.60.0': + optional: true - imurmurhash@0.1.4: {} + '@oxlint/binding-linux-s390x-gnu@1.60.0': + optional: true - indent-string@5.0.0: {} + '@oxlint/binding-linux-x64-gnu@1.60.0': + optional: true - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 + '@oxlint/binding-linux-x64-musl@1.60.0': + optional: true - irregular-plurals@3.5.0: {} + '@oxlint/binding-openharmony-arm64@1.60.0': + optional: true - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 + '@oxlint/binding-win32-arm64-msvc@1.60.0': + optional: true - is-arrayish@0.2.1: {} + '@oxlint/binding-win32-ia32-msvc@1.60.0': + optional: true - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 + '@oxlint/binding-win32-x64-msvc@1.60.0': + optional: true - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 + '@polka/url@1.0.0-next.29': {} - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 + '@rolldown/binding-android-arm64@1.0.0-rc.15': + optional: true - is-builtin-module@5.0.0: - dependencies: - builtin-modules: 5.0.0 + '@rolldown/binding-darwin-arm64@1.0.0-rc.15': + optional: true - is-callable@1.2.7: {} + '@rolldown/binding-darwin-x64@1.0.0-rc.15': + optional: true - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 + '@rolldown/binding-freebsd-x64@1.0.0-rc.15': + optional: true - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': + optional: true - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': + optional: true - is-docker@3.0.0: {} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': + optional: true - is-extglob@2.1.1: {} + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': + optional: true - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': + optional: true - is-generator-function@1.1.2: - dependencies: - call-bound: 1.0.4 - generator-function: 2.0.1 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': + optional: true - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 + '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': + optional: true - is-in-ssh@1.0.0: {} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': + optional: true - is-inside-container@1.0.0: + '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': dependencies: - is-docker: 3.0.0 - - is-interactive@2.0.0: {} - - is-map@2.0.3: {} + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + optional: true - is-negative-zero@2.0.3: {} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': + optional: true - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': + optional: true - is-number@7.0.0: {} + '@rolldown/pluginutils@1.0.0-rc.15': {} - is-path-cwd@3.0.0: {} + '@rollup/rollup-android-arm-eabi@4.60.1': + optional: true - is-path-inside@4.0.0: {} + '@rollup/rollup-android-arm64@4.60.1': + optional: true - is-plain-obj@4.1.0: {} + '@rollup/rollup-darwin-arm64@4.60.1': + optional: true - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 + '@rollup/rollup-darwin-x64@4.60.1': + optional: true - is-set@2.0.3: {} + '@rollup/rollup-freebsd-arm64@4.60.1': + optional: true - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 + '@rollup/rollup-freebsd-x64@4.60.1': + optional: true - is-stream@4.0.1: {} + '@rollup/rollup-linux-arm-gnueabihf@4.60.1': + optional: true - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 + '@rollup/rollup-linux-arm-musleabihf@4.60.1': + optional: true - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 + '@rollup/rollup-linux-arm64-gnu@4.60.1': + optional: true - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.20 + '@rollup/rollup-linux-arm64-musl@4.60.1': + optional: true - is-unicode-supported@1.3.0: {} + '@rollup/rollup-linux-loong64-gnu@4.60.1': + optional: true - is-unicode-supported@2.1.0: {} + '@rollup/rollup-linux-loong64-musl@4.60.1': + optional: true - is-weakmap@2.0.2: {} + '@rollup/rollup-linux-ppc64-gnu@4.60.1': + optional: true - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 + '@rollup/rollup-linux-ppc64-musl@4.60.1': + optional: true - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 + '@rollup/rollup-linux-riscv64-gnu@4.60.1': + optional: true - is-wsl@3.1.1: - dependencies: - is-inside-container: 1.0.0 + '@rollup/rollup-linux-riscv64-musl@4.60.1': + optional: true - isarray@2.0.5: {} + '@rollup/rollup-linux-s390x-gnu@4.60.1': + optional: true - isexe@2.0.0: {} + '@rollup/rollup-linux-x64-gnu@4.60.1': + optional: true - iterator.prototype@1.1.5: - dependencies: - define-data-property: 1.1.4 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - has-symbols: 1.1.0 - set-function-name: 2.0.2 + '@rollup/rollup-linux-x64-musl@4.60.1': + optional: true - js-tokens@4.0.0: {} + '@rollup/rollup-openbsd-x64@4.60.1': + optional: true - js-yaml@4.1.1: - dependencies: - argparse: 2.0.1 + '@rollup/rollup-openharmony-arm64@4.60.1': + optional: true - jsesc@3.1.0: {} + '@rollup/rollup-win32-arm64-msvc@4.60.1': + optional: true - json-buffer@3.0.1: {} + '@rollup/rollup-win32-ia32-msvc@4.60.1': + optional: true - json-parse-even-better-errors@2.3.1: {} + '@rollup/rollup-win32-x64-gnu@4.60.1': + optional: true - json-schema-traverse@0.4.1: {} + '@rollup/rollup-win32-x64-msvc@4.60.1': + optional: true - json-stable-stringify-without-jsonify@1.0.1: {} + '@sindresorhus/tsconfig@8.1.0': {} - json5@2.2.3: {} + '@standard-schema/spec@1.1.0': {} - jsx-ast-utils@3.3.5: + '@tybys/wasm-util@0.10.1': dependencies: - array-includes: 3.1.9 - array.prototype.flat: 1.3.3 - object.assign: 4.1.7 - object.values: 1.2.1 + tslib: 2.8.1 + optional: true - keyv@4.5.4: + '@types/chai@5.2.3': dependencies: - json-buffer: 3.0.1 + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 - ky@1.14.3: {} + '@types/deep-eql@4.0.2': {} - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 + '@types/estree@1.0.8': {} - line-column-path@4.0.0: + '@types/node@25.5.2': dependencies: - unicorn-magic: 0.4.0 + undici-types: 7.18.2 - lines-and-columns@1.2.4: {} + '@vitest/expect@2.1.9': + dependencies: + '@vitest/spy': 2.1.9 + '@vitest/utils': 2.1.9 + chai: 5.3.3 + tinyrainbow: 1.2.0 - locate-path@6.0.0: + '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@25.5.2)(lightningcss@1.32.0))': dependencies: - p-locate: 5.0.0 + '@vitest/spy': 2.1.9 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 5.4.21(@types/node@25.5.2)(lightningcss@1.32.0) - lodash@4.18.1: {} + '@vitest/pretty-format@2.1.9': + dependencies: + tinyrainbow: 1.2.0 - log-symbols@6.0.0: + '@vitest/runner@2.1.9': dependencies: - chalk: 5.6.2 - is-unicode-supported: 1.3.0 + '@vitest/utils': 2.1.9 + pathe: 1.1.2 - log-symbols@7.0.1: + '@vitest/snapshot@2.1.9': dependencies: - is-unicode-supported: 2.1.0 - yoctocolors: 2.1.2 + '@vitest/pretty-format': 2.1.9 + magic-string: 0.30.21 + pathe: 1.1.2 - loose-envify@1.4.0: + '@vitest/spy@2.1.9': dependencies: - js-tokens: 4.0.0 + tinyspy: 3.0.2 - lru-cache@5.1.1: + '@vitest/utils@2.1.9': dependencies: - yallist: 3.1.1 + '@vitest/pretty-format': 2.1.9 + loupe: 3.2.1 + tinyrainbow: 1.2.0 - math-intrinsics@1.1.0: {} + '@voidzero-dev/vite-plus-core@0.1.18(@types/node@25.5.2)(typescript@5.9.3)': + dependencies: + '@oxc-project/runtime': 0.124.0 + '@oxc-project/types': 0.124.0 + lightningcss: 1.32.0 + postcss: 8.5.10 + optionalDependencies: + '@types/node': 25.5.2 + fsevents: 2.3.3 + typescript: 5.9.3 - mdn-data@2.23.0: {} + '@voidzero-dev/vite-plus-darwin-arm64@0.1.18': + optional: true - meow@14.1.0: {} + '@voidzero-dev/vite-plus-darwin-x64@0.1.18': + optional: true - merge2@1.4.1: {} + '@voidzero-dev/vite-plus-linux-arm64-gnu@0.1.18': + optional: true - micro-spelling-correcter@1.1.1: {} + '@voidzero-dev/vite-plus-linux-arm64-musl@0.1.18': + optional: true - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.2 + '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.18': + optional: true - mimic-function@5.0.1: {} + '@voidzero-dev/vite-plus-linux-x64-musl@0.1.18': + optional: true - minimatch@10.2.5: - dependencies: - brace-expansion: 5.0.5 + '@voidzero-dev/vite-plus-test@0.1.18(@types/node@25.5.2)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2))': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@voidzero-dev/vite-plus-core': 0.1.18(@types/node@25.5.2)(typescript@5.9.3) + es-module-lexer: 1.7.0 + obug: 2.1.1 + pixelmatch: 7.1.0 + pngjs: 7.0.0 + sirv: 3.0.2 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.1.1 + tinyglobby: 0.2.15 + vite: 8.0.8(@types/node@25.5.2) + ws: 8.20.0 + optionalDependencies: + '@types/node': 25.5.2 + transitivePeerDependencies: + - '@arethetypeswrong/core' + - '@tsdown/css' + - '@tsdown/exe' + - '@vitejs/devtools' + - bufferutil + - esbuild + - jiti + - less + - publint + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - typescript + - unplugin-unused + - utf-8-validate + - yaml - minimatch@3.1.5: - dependencies: - brace-expansion: 1.1.13 + '@voidzero-dev/vite-plus-win32-arm64-msvc@0.1.18': + optional: true - ms@2.1.3: {} + '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.18': + optional: true - napi-postinstall@0.3.4: {} + ansi-regex@6.2.2: {} - natural-compare@1.4.0: {} + assertion-error@2.0.1: {} - node-exports-info@1.6.0: + bundle-name@4.1.0: dependencies: - array.prototype.flatmap: 1.3.3 - es-errors: 1.3.0 - object.entries: 1.1.9 - semver: 6.3.1 + run-applescript: 7.1.0 - node-releases@2.0.37: {} + cac@6.7.14: {} - npm-run-path@6.0.0: + chai@5.3.3: dependencies: - path-key: 4.0.0 - unicorn-magic: 0.3.0 + assertion-error: 2.0.1 + check-error: 2.1.3 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 - object-assign@4.1.1: {} - - object-inspect@1.13.4: {} + chalk@5.6.2: {} - object-keys@1.1.1: {} + check-error@2.1.3: {} - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - object.entries@1.1.9: + cli-cursor@5.0.0: dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 + restore-cursor: 5.1.0 - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-object-atoms: 1.1.1 + cli-spinners@2.9.2: {} - object.values@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 + commander@14.0.3: {} - onetime@7.0.0: + debug@4.4.3: dependencies: - mimic-function: 5.0.1 + ms: 2.1.3 - open-editor@6.0.0: - dependencies: - env-editor: 1.3.0 - execa: 9.6.1 - line-column-path: 4.0.0 - open: 11.0.0 + deep-eql@5.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 + default-browser-id@5.0.1: {} - open@11.0.0: + default-browser@5.5.0: dependencies: - default-browser: 5.5.0 - define-lazy-prop: 3.0.0 - is-in-ssh: 1.0.0 - is-inside-container: 1.0.0 - powershell-utils: 0.1.0 - wsl-utils: 0.3.1 + bundle-name: 4.1.0 + default-browser-id: 5.0.1 - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 + define-lazy-prop@3.0.0: {} - ora@8.2.0: - dependencies: - chalk: 5.6.2 - cli-cursor: 5.0.0 - cli-spinners: 2.9.2 - is-interactive: 2.0.0 - is-unicode-supported: 2.1.0 - log-symbols: 6.0.0 - stdin-discarder: 0.2.2 - string-width: 7.2.0 - strip-ansi: 7.2.0 + detect-libc@2.1.2: {} - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 + emoji-regex@10.6.0: {} - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 + es-module-lexer@1.7.0: {} - p-locate@5.0.0: + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + estree-walker@3.0.3: dependencies: - p-limit: 3.1.0 + '@types/estree': 1.0.8 - p-map@7.0.4: {} + expect-type@1.3.0: {} - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.29.0 - error-ex: 1.3.4 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 + fsevents@2.3.3: + optional: true - parse-ms@4.0.0: {} + get-east-asian-width@1.5.0: {} - path-exists@4.0.0: {} + is-docker@3.0.0: {} - path-exists@5.0.0: {} + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 - path-key@3.1.1: {} + is-interactive@2.0.0: {} - path-key@4.0.0: {} + is-unicode-supported@1.3.0: {} - path-parse@1.0.7: {} + is-unicode-supported@2.1.0: {} - path-type@6.0.0: {} + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 - picocolors@1.1.1: {} + ky@1.14.3: {} - picomatch@2.3.2: {} + lightningcss-android-arm64@1.32.0: + optional: true - picomatch@4.0.4: {} + lightningcss-darwin-arm64@1.32.0: + optional: true - pkg-dir@8.0.0: - dependencies: - find-up-simple: 1.0.1 + lightningcss-darwin-x64@1.32.0: + optional: true - plur@5.1.0: - dependencies: - irregular-plurals: 3.5.0 + lightningcss-freebsd-x64@1.32.0: + optional: true - pluralize@8.0.0: {} + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true - possible-typed-array-names@1.1.0: {} + lightningcss-linux-arm64-gnu@1.32.0: + optional: true - powershell-utils@0.1.0: {} + lightningcss-linux-arm64-musl@1.32.0: + optional: true - prelude-ls@1.2.1: {} + lightningcss-linux-x64-gnu@1.32.0: + optional: true - presentable-error@0.0.1: {} + lightningcss-linux-x64-musl@1.32.0: + optional: true - prettier-linter-helpers@1.0.1: - dependencies: - fast-diff: 1.3.0 + lightningcss-win32-arm64-msvc@1.32.0: + optional: true - prettier@3.8.1: {} + lightningcss-win32-x64-msvc@1.32.0: + optional: true - pretty-ms@9.3.0: + lightningcss@1.32.0: dependencies: - parse-ms: 4.0.0 + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 - prop-types@15.8.1: + log-symbols@6.0.0: dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - punycode@2.3.1: {} - - queue-microtask@1.2.3: {} + chalk: 5.6.2 + is-unicode-supported: 1.3.0 - react-is@16.13.1: {} + loupe@3.2.1: {} - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regexp-tree@0.1.27: {} - - regexp.prototype.flags@1.5.4: + magic-string@0.30.21: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - - regjsparser@0.13.1: - dependencies: - jsesc: 3.1.0 - - resolve-from@4.0.0: {} - - resolve-from@5.0.0: {} + '@jridgewell/sourcemap-codec': 1.5.5 - resolve-pkg-maps@1.0.0: {} + mimic-function@5.0.1: {} - resolve@2.0.0-next.6: - dependencies: - es-errors: 1.3.0 - is-core-module: 2.16.1 - node-exports-info: 1.6.0 - object-keys: 1.1.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 + mrmime@2.0.1: {} - restore-cursor@5.1.0: - dependencies: - onetime: 7.0.0 - signal-exit: 4.1.0 + ms@2.1.3: {} - reusify@1.1.0: {} + nanoid@3.3.11: {} - run-applescript@7.1.0: {} + obug@2.1.1: {} - run-parallel@1.2.0: + onetime@7.0.0: dependencies: - queue-microtask: 1.2.3 + mimic-function: 5.0.1 - safe-array-concat@1.1.3: + open@10.2.0: dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 - safe-push-apply@1.0.0: + ora@8.2.0: dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.2.0 - safe-regex-test@1.1.0: + oxfmt@0.45.0: dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 + tinypool: 2.1.0 + optionalDependencies: + '@oxfmt/binding-android-arm-eabi': 0.45.0 + '@oxfmt/binding-android-arm64': 0.45.0 + '@oxfmt/binding-darwin-arm64': 0.45.0 + '@oxfmt/binding-darwin-x64': 0.45.0 + '@oxfmt/binding-freebsd-x64': 0.45.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.45.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.45.0 + '@oxfmt/binding-linux-arm64-gnu': 0.45.0 + '@oxfmt/binding-linux-arm64-musl': 0.45.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.45.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.45.0 + '@oxfmt/binding-linux-riscv64-musl': 0.45.0 + '@oxfmt/binding-linux-s390x-gnu': 0.45.0 + '@oxfmt/binding-linux-x64-gnu': 0.45.0 + '@oxfmt/binding-linux-x64-musl': 0.45.0 + '@oxfmt/binding-openharmony-arm64': 0.45.0 + '@oxfmt/binding-win32-arm64-msvc': 0.45.0 + '@oxfmt/binding-win32-ia32-msvc': 0.45.0 + '@oxfmt/binding-win32-x64-msvc': 0.45.0 + + oxlint-tsgolint@0.20.0: + optionalDependencies: + '@oxlint-tsgolint/darwin-arm64': 0.20.0 + '@oxlint-tsgolint/darwin-x64': 0.20.0 + '@oxlint-tsgolint/linux-arm64': 0.20.0 + '@oxlint-tsgolint/linux-x64': 0.20.0 + '@oxlint-tsgolint/win32-arm64': 0.20.0 + '@oxlint-tsgolint/win32-x64': 0.20.0 + + oxlint@1.60.0(oxlint-tsgolint@0.20.0): + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.60.0 + '@oxlint/binding-android-arm64': 1.60.0 + '@oxlint/binding-darwin-arm64': 1.60.0 + '@oxlint/binding-darwin-x64': 1.60.0 + '@oxlint/binding-freebsd-x64': 1.60.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.60.0 + '@oxlint/binding-linux-arm-musleabihf': 1.60.0 + '@oxlint/binding-linux-arm64-gnu': 1.60.0 + '@oxlint/binding-linux-arm64-musl': 1.60.0 + '@oxlint/binding-linux-ppc64-gnu': 1.60.0 + '@oxlint/binding-linux-riscv64-gnu': 1.60.0 + '@oxlint/binding-linux-riscv64-musl': 1.60.0 + '@oxlint/binding-linux-s390x-gnu': 1.60.0 + '@oxlint/binding-linux-x64-gnu': 1.60.0 + '@oxlint/binding-linux-x64-musl': 1.60.0 + '@oxlint/binding-openharmony-arm64': 1.60.0 + '@oxlint/binding-win32-arm64-msvc': 1.60.0 + '@oxlint/binding-win32-ia32-msvc': 1.60.0 + '@oxlint/binding-win32-x64-msvc': 1.60.0 + oxlint-tsgolint: 0.20.0 + + pathe@1.1.2: {} + + pathval@2.0.1: {} - semver@6.3.1: {} + picocolors@1.1.1: {} - semver@7.7.4: {} + picomatch@4.0.4: {} - set-function-length@1.2.2: + pixelmatch@7.1.0: dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 + pngjs: 7.0.0 - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 + pngjs@7.0.0: {} - shebang-command@2.0.0: + postcss@8.5.10: dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 - side-channel-list@1.0.0: + restore-cursor@5.1.0: dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 + onetime: 7.0.0 + signal-exit: 4.1.0 - side-channel-map@1.0.1: + rolldown@1.0.0-rc.15: dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: + '@oxc-project/types': 0.124.0 + '@rolldown/pluginutils': 1.0.0-rc.15 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.15 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.15 + '@rolldown/binding-darwin-x64': 1.0.0-rc.15 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.15 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.15 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.15 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.15 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.15 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.15 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.15 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.15 + + rollup@4.60.1: dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 + '@types/estree': 1.0.8 + 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 + fsevents: 2.3.3 - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 + run-applescript@7.1.0: {} + + siginfo@2.0.0: {} signal-exit@4.1.0: {} - slash@5.1.0: {} + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 source-map-js@1.2.1: {} - stable-hash-x@0.2.0: {} + stackback@0.0.2: {} - stdin-discarder@0.2.2: {} + std-env@3.10.0: {} - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 + std-env@4.1.0: {} + + stdin-discarder@0.2.2: {} string-width@7.2.0: dependencies: @@ -3825,304 +2304,166 @@ snapshots: get-east-asian-width: 1.5.0 strip-ansi: 7.2.0 - string-width@8.2.0: - dependencies: - get-east-asian-width: 1.5.0 - strip-ansi: 7.2.0 - - string.prototype.matchall@4.0.12: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.0 - - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.24.1 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - strip-ansi@7.2.0: dependencies: ansi-regex: 6.2.2 - strip-final-newline@4.0.0: {} - - strip-indent@4.1.1: {} - - supports-color@10.2.2: {} - - supports-hyperlinks@4.4.0: - dependencies: - has-flag: 5.0.1 - supports-color: 10.2.2 - - supports-preserve-symlinks-flag@1.0.0: {} - - synckit@0.11.12: - dependencies: - '@pkgr/core': 0.2.9 + tinybench@2.9.0: {} - tagged-tag@1.0.0: {} + tinyexec@0.3.2: {} - tapable@2.3.2: {} + tinyexec@1.1.1: {} tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 + tinypool@1.1.1: {} - ts-api-utils@2.5.0(typescript@6.0.2): - dependencies: - typescript: 6.0.2 + tinypool@2.1.0: {} - ts-declaration-location@1.0.7(typescript@6.0.2): - dependencies: - picomatch: 4.0.4 - typescript: 6.0.2 + tinyrainbow@1.2.0: {} - tslib@2.8.1: - optional: true + tinyspy@3.0.2: {} - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 + totalist@3.0.1: {} - type-fest@5.5.0: - dependencies: - tagged-tag: 1.0.0 + tslib@2.8.1: + optional: true - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 + typescript@5.9.3: {} - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 + undici-types@7.18.2: {} - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - - typescript-eslint@8.58.0(eslint@10.2.0)(typescript@6.0.2): + vite-node@2.1.9(@types/node@25.5.2)(lightningcss@1.32.0): dependencies: - '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.2.0)(typescript@6.0.2))(eslint@10.2.0)(typescript@6.0.2) - '@typescript-eslint/parser': 8.58.0(eslint@10.2.0)(typescript@6.0.2) - '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2) - '@typescript-eslint/utils': 8.58.0(eslint@10.2.0)(typescript@6.0.2) - eslint: 10.2.0 - typescript: 6.0.2 + cac: 6.7.14 + debug: 4.4.3 + es-module-lexer: 1.7.0 + pathe: 1.1.2 + vite: 5.4.21(@types/node@25.5.2)(lightningcss@1.32.0) transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss - supports-color + - terser - typescript@6.0.2: {} - - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - - undici-types@7.18.2: {} - - unicorn-magic@0.3.0: {} - - unicorn-magic@0.4.0: {} - - unrs-resolver@1.11.1: + vite-plus@0.1.18(@types/node@25.5.2)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)): dependencies: - napi-postinstall: 0.3.4 + '@oxc-project/types': 0.124.0 + '@voidzero-dev/vite-plus-core': 0.1.18(@types/node@25.5.2)(typescript@5.9.3) + '@voidzero-dev/vite-plus-test': 0.1.18(@types/node@25.5.2)(typescript@5.9.3)(vite@8.0.8(@types/node@25.5.2)) + oxfmt: 0.45.0 + oxlint: 1.60.0(oxlint-tsgolint@0.20.0) + oxlint-tsgolint: 0.20.0 optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.11.1 - '@unrs/resolver-binding-android-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-x64': 1.11.1 - '@unrs/resolver-binding-freebsd-x64': 1.11.1 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 - '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-musl': 1.11.1 - '@unrs/resolver-binding-wasm32-wasi': 1.11.1 - '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 - '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 - '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - - update-browserslist-db@1.2.3(browserslist@4.28.2): - dependencies: - browserslist: 4.28.2 - escalade: 3.2.0 - picocolors: 1.1.1 - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 + '@voidzero-dev/vite-plus-darwin-arm64': 0.1.18 + '@voidzero-dev/vite-plus-darwin-x64': 0.1.18 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.18 + '@voidzero-dev/vite-plus-linux-arm64-musl': 0.1.18 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.18 + '@voidzero-dev/vite-plus-linux-x64-musl': 0.1.18 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.18 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.18 + transitivePeerDependencies: + - '@arethetypeswrong/core' + - '@edge-runtime/vm' + - '@opentelemetry/api' + - '@tsdown/css' + - '@tsdown/exe' + - '@types/node' + - '@vitejs/devtools' + - '@vitest/coverage-istanbul' + - '@vitest/coverage-v8' + - '@vitest/ui' + - bufferutil + - esbuild + - happy-dom + - jiti + - jsdom + - less + - publint + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - typescript + - unplugin-unused + - utf-8-validate + - vite + - yaml - which-boxed-primitive@1.1.1: + vite@5.4.21(@types/node@25.5.2)(lightningcss@1.32.0): dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 + esbuild: 0.21.5 + postcss: 8.5.10 + rollup: 4.60.1 + optionalDependencies: + '@types/node': 25.5.2 + fsevents: 2.3.3 + lightningcss: 1.32.0 - which-builtin-type@1.2.1: + vite@8.0.8(@types/node@25.5.2): dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.2 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.20 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.10 + rolldown: 1.0.0-rc.15 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 25.5.2 + fsevents: 2.3.3 + + vitest@2.1.9(@types/node@25.5.2)(lightningcss@1.32.0): + dependencies: + '@vitest/expect': 2.1.9 + '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@25.5.2)(lightningcss@1.32.0)) + '@vitest/pretty-format': 2.1.9 + '@vitest/runner': 2.1.9 + '@vitest/snapshot': 2.1.9 + '@vitest/spy': 2.1.9 + '@vitest/utils': 2.1.9 + chai: 5.3.3 + debug: 4.4.3 + expect-type: 1.3.0 + magic-string: 0.30.21 + pathe: 1.1.2 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.1.1 + tinyrainbow: 1.2.0 + vite: 5.4.21(@types/node@25.5.2)(lightningcss@1.32.0) + vite-node: 2.1.9(@types/node@25.5.2)(lightningcss@1.32.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 25.5.2 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser - which-typed-array@1.1.20: + why-is-node-running@2.3.0: dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - - which@2.0.2: - dependencies: - isexe: 2.0.0 + siginfo: 2.0.0 + stackback: 0.0.2 - word-wrap@1.2.5: {} + ws@8.20.0: {} wsl-utils@0.1.0: dependencies: is-wsl: 3.1.1 - - wsl-utils@0.3.1: - dependencies: - is-wsl: 3.1.1 - powershell-utils: 0.1.0 - - xo@2.0.2(@types/eslint@9.6.1)(@typescript-eslint/utils@8.58.0(eslint@10.2.0)(typescript@6.0.2)): - dependencies: - '@eslint-community/eslint-plugin-eslint-comments': 4.7.1(eslint@10.2.0) - '@eslint/compat': 2.0.4(eslint@10.2.0) - '@sindresorhus/tsconfig': 8.1.0 - arrify: 3.0.0 - cosmiconfig: 9.0.1(typescript@6.0.2) - define-lazy-prop: 3.0.0 - eslint: 10.2.0 - eslint-config-prettier: 10.1.8(eslint@10.2.0) - eslint-config-xo-react: 0.29.0(eslint@10.2.0) - eslint-config-xo-typescript: 10.0.0(eslint@10.2.0)(typescript@6.0.2) - eslint-formatter-pretty: 7.0.0 - eslint-plugin-ava: 16.0.1(eslint@10.2.0) - eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.58.0(eslint@10.2.0)(typescript@6.0.2))(eslint@10.2.0) - eslint-plugin-n: 17.24.0(eslint@10.2.0)(typescript@6.0.2) - eslint-plugin-prettier: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.0))(eslint@10.2.0)(prettier@3.8.1) - eslint-plugin-unicorn: 63.0.0(eslint@10.2.0) - find-cache-directory: 6.0.0 - get-stdin: 10.0.0 - get-tsconfig: 4.13.7 - globals: 17.4.0 - globby: 16.2.0 - meow: 14.1.0 - micromatch: 4.0.8 - open-editor: 6.0.0 - path-exists: 5.0.0 - prettier: 3.8.1 - type-fest: 5.5.0 - typescript: 6.0.2 - typescript-eslint: 8.58.0(eslint@10.2.0)(typescript@6.0.2) - transitivePeerDependencies: - - '@types/eslint' - - '@typescript-eslint/utils' - - eslint-import-resolver-node - - jiti - - supports-color - - yallist@3.1.1: {} - - yocto-queue@0.1.0: {} - - yoctocolors@2.1.2: {} - - zod-validation-error@4.0.2(zod@4.3.6): - dependencies: - zod: 4.3.6 - - zod@4.3.6: {} From 8bb3bb35e275f902702e9dd5b58ce6405c02c363 Mon Sep 17 00:00:00 2001 From: 0XFANGO Date: Sat, 18 Apr 2026 19:20:19 +0800 Subject: [PATCH 06/16] chore: update scripts to vp commands, point bin to dist/cli.mjs --- package.json | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index c9f84d1..5c887fe 100644 --- a/package.json +++ b/package.json @@ -5,19 +5,24 @@ "repository": "marswaveai/listenhub-cli", "type": "module", "bin": { - "listenhub": "distribution/source/cli.js" + "listenhub": "dist/cli.mjs" }, "files": [ - "distribution/source" + "dist" ], "license": "MIT", "scripts": { - "prepublishOnly": "pnpm run build", - "clean": "del-cli distribution", - "dev": "pnpm run clean && tsc --watch", - "build": "pnpm run clean && tsc && chmod +x distribution/source/cli.js", - "pretest": "pnpm run build", - "test": "xo" + "dev": "vp pack --watch", + "build": "vp pack", + "lint": "vp lint", + "lint:fix": "vp lint --fix", + "fmt": "vp fmt", + "fmt:check": "vp fmt --check", + "check": "vp check", + "test": "vp test run", + "test:watch": "vp test", + "ready": "vp check && vp test run", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@marswave/listenhub-sdk": "^0.0.4", From 924dce6e4e7441f313b89f377a7ddfd84386ef0b Mon Sep 17 00:00:00 2001 From: 0XFANGO Date: Sat, 18 Apr 2026 19:20:28 +0800 Subject: [PATCH 07/16] chore: simplify tsconfig for vp check (no longer used for compilation) --- tsconfig.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 6bd6cb9..55c43c0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,7 @@ { "extends": "@sindresorhus/tsconfig", "compilerOptions": { - "declaration": false, - "rootDir": ".", - "outDir": "distribution", + "rootDir": "source", "types": ["node"] }, "include": ["source"] From 149c0120c6d4a92c8757cc8a25e3de460fd6a550 Mon Sep 17 00:00:00 2001 From: 0XFANGO Date: Sat, 18 Apr 2026 19:20:41 +0800 Subject: [PATCH 08/16] chore: remove xo config, update gitignore for dist/ --- .gitignore | 2 +- xo.config.mjs | 34 ---------------------------------- 2 files changed, 1 insertion(+), 35 deletions(-) delete mode 100644 xo.config.mjs diff --git a/.gitignore b/.gitignore index 2f202c6..f4e2c6d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ node_modules/ -distribution/ +dist/ *.tsbuildinfo diff --git a/xo.config.mjs b/xo.config.mjs deleted file mode 100644 index 4589d91..0000000 --- a/xo.config.mjs +++ /dev/null @@ -1,34 +0,0 @@ -const xoConfig = [ - { - prettier: true, - rules: { - '@typescript-eslint/only-throw-error': 'off', - 'sort-imports': [ - 'error', - { - ignoreCase: false, - ignoreDeclarationSort: true, - ignoreMemberSort: false, - memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'], - allowSeparatedGroups: false, - }, - ], - 'import-x/no-named-as-default': 'off', - 'import-x/extensions': 'off', - 'import-x/order': [ - 'error', - { - groups: ['builtin', 'external', 'parent', 'sibling', 'index'], - alphabetize: { - order: 'asc', - caseInsensitive: true, - }, - warnOnUnassignedImports: true, - 'newlines-between': 'never', - }, - ], - }, - }, -]; - -export default xoConfig; From 2b2db99c600eeaa83ed95f9ce9e9c7be59e0843a Mon Sep 17 00:00:00 2001 From: 0XFANGO Date: Sat, 18 Apr 2026 19:20:50 +0800 Subject: [PATCH 09/16] chore: add vitest.config.ts skeleton --- vitest.config.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 vitest.config.ts diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..cc2a4b6 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,7 @@ +import {defineConfig} from 'vitest/config'; + +export default defineConfig({ + test: { + clearMocks: true, + }, +}); From e7d1c956a7ccef39c6a19f4d21c2a272f6236904 Mon Sep 17 00:00:00 2001 From: 0XFANGO Date: Sat, 18 Apr 2026 19:23:17 +0800 Subject: [PATCH 10/16] style: reformat codebase with oxfmt and fix oxlint issues --- README.md | 58 +-- README.zh-CN.md | 56 +-- docs/plans/listenhub-cli--60-plan.md | 69 ++-- docs/specs/listenhub-cli--60-design.md | 33 +- package.json | 4 +- source/_shared/client.ts | 68 ++-- source/_shared/credentials.ts | 84 +++-- source/_shared/language.ts | 10 +- source/_shared/output.ts | 97 +++-- source/_shared/polling.ts | 288 ++++++++------- source/_shared/sources.ts | 23 +- source/_shared/speaker-resolver.ts | 68 ++-- source/_shared/upload.ts | 193 +++++----- source/auth/_cli.ts | 70 ++-- source/auth/auth.ts | 166 +++++---- source/auth/login-server.ts | 104 +++--- source/cli.ts | 24 +- source/creation/_cli.ts | 58 +-- source/creation/creation.ts | 52 +-- source/explainer/_cli.ts | 100 +++--- source/explainer/explainer.ts | 188 +++++----- source/image/_cli.ts | 136 +++---- source/image/image.ts | 216 ++++++----- source/lyrics/_cli.ts | 107 +++--- source/lyrics/lyrics.ts | 214 ++++++----- source/music/_cli.ts | 229 ++++++------ source/music/music.ts | 473 ++++++++++++------------- source/podcast/_cli.ts | 90 ++--- source/podcast/podcast.ts | 156 ++++---- source/slides/_cli.ts | 96 ++--- source/slides/slides.ts | 186 +++++----- source/speakers/_cli.ts | 36 +- source/speakers/speakers.ts | 33 +- source/tts/_cli.ts | 87 +++-- source/tts/tts.ts | 158 ++++----- vite.config.ts | 24 +- vitest.config.ts | 8 +- 37 files changed, 2006 insertions(+), 2056 deletions(-) diff --git a/README.md b/README.md index d4e0cc3..648f0a4 100644 --- a/README.md +++ b/README.md @@ -40,49 +40,49 @@ listenhub tts create --text "Hello, world" --lang en ### Auth -| Command | Description | -|---------|-------------| -| `listenhub auth login` | Log in via browser OAuth | +| Command | Description | +| ----------------------- | ------------------------- | +| `listenhub auth login` | Log in via browser OAuth | | `listenhub auth logout` | Log out and revoke tokens | | `listenhub auth status` | Show current login status | ### Music -| Command | Description | -|---------|-------------| -| `listenhub music generate` | Generate music from a text prompt | -| `listenhub music cover` | Create a cover from reference audio | -| `listenhub music list` | List music tasks | -| `listenhub music get ` | Get music task details | +| Command | Description | +| -------------------------- | ----------------------------------- | +| `listenhub music generate` | Generate music from a text prompt | +| `listenhub music cover` | Create a cover from reference audio | +| `listenhub music list` | List music tasks | +| `listenhub music get ` | Get music task details | ### Content Creation -| Command | Description | -|---------|-------------| -| `listenhub podcast create` | Create a podcast episode | -| `listenhub podcast list` | List podcast episodes | -| `listenhub tts create` | Create text-to-speech audio | -| `listenhub tts list` | List TTS creations | -| `listenhub explainer create` | Create an explainer video | -| `listenhub explainer list` | List explainer videos | -| `listenhub slides create` | Create a slide deck | -| `listenhub slides list` | List slide decks | +| Command | Description | +| ---------------------------- | --------------------------- | +| `listenhub podcast create` | Create a podcast episode | +| `listenhub podcast list` | List podcast episodes | +| `listenhub tts create` | Create text-to-speech audio | +| `listenhub tts list` | List TTS creations | +| `listenhub explainer create` | Create an explainer video | +| `listenhub explainer list` | List explainer videos | +| `listenhub slides create` | Create a slide deck | +| `listenhub slides list` | List slide decks | ### Images -| Command | Description | -|---------|-------------| -| `listenhub image create` | Generate an AI image | -| `listenhub image list` | List AI images | -| `listenhub image get ` | Get image details | +| Command | Description | +| -------------------------- | -------------------- | +| `listenhub image create` | Generate an AI image | +| `listenhub image list` | List AI images | +| `listenhub image get ` | Get image details | ### Other -| Command | Description | -|---------|-------------| -| `listenhub speakers list` | List available speakers | -| `listenhub creation get ` | Get creation details | -| `listenhub creation delete ` | Delete creations | +| Command | Description | +| ----------------------------------- | ----------------------- | +| `listenhub speakers list` | List available speakers | +| `listenhub creation get ` | Get creation details | +| `listenhub creation delete ` | Delete creations | Run `listenhub --help` for full options. diff --git a/README.zh-CN.md b/README.zh-CN.md index a813913..fb08f75 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -40,49 +40,49 @@ listenhub tts create --text "你好世界" --lang zh ### 认证 -| 命令 | 说明 | -|------|------| -| `listenhub auth login` | 浏览器 OAuth 登录 | -| `listenhub auth logout` | 登出并撤销 token | -| `listenhub auth status` | 查看登录状态 | +| 命令 | 说明 | +| ----------------------- | ----------------- | +| `listenhub auth login` | 浏览器 OAuth 登录 | +| `listenhub auth logout` | 登出并撤销 token | +| `listenhub auth status` | 查看登录状态 | ### 音乐 -| 命令 | 说明 | -|------|------| +| 命令 | 说明 | +| -------------------------- | -------------------- | | `listenhub music generate` | 根据文字描述生成音乐 | -| `listenhub music cover` | 用参考音频创建翻唱 | -| `listenhub music list` | 列出音乐任务 | -| `listenhub music get ` | 查看音乐任务详情 | +| `listenhub music cover` | 用参考音频创建翻唱 | +| `listenhub music list` | 列出音乐任务 | +| `listenhub music get ` | 查看音乐任务详情 | ### 内容创作 -| 命令 | 说明 | -|------|------| -| `listenhub podcast create` | 创建播客 | -| `listenhub podcast list` | 列出播客 | -| `listenhub tts create` | 创建语音合成 | -| `listenhub tts list` | 列出语音合成 | +| 命令 | 说明 | +| ---------------------------- | ------------ | +| `listenhub podcast create` | 创建播客 | +| `listenhub podcast list` | 列出播客 | +| `listenhub tts create` | 创建语音合成 | +| `listenhub tts list` | 列出语音合成 | | `listenhub explainer create` | 创建讲解视频 | -| `listenhub explainer list` | 列出讲解视频 | -| `listenhub slides create` | 创建幻灯片 | -| `listenhub slides list` | 列出幻灯片 | +| `listenhub explainer list` | 列出讲解视频 | +| `listenhub slides create` | 创建幻灯片 | +| `listenhub slides list` | 列出幻灯片 | ### 图片 -| 命令 | 说明 | -|------|------| -| `listenhub image create` | AI 生图 | -| `listenhub image list` | 列出图片 | +| 命令 | 说明 | +| -------------------------- | ------------ | +| `listenhub image create` | AI 生图 | +| `listenhub image list` | 列出图片 | | `listenhub image get ` | 查看图片详情 | ### 其他 -| 命令 | 说明 | -|------|------| -| `listenhub speakers list` | 列出可用声音 | -| `listenhub creation get ` | 查看作品详情 | -| `listenhub creation delete ` | 删除作品 | +| 命令 | 说明 | +| ----------------------------------- | ------------ | +| `listenhub speakers list` | 列出可用声音 | +| `listenhub creation get ` | 查看作品详情 | +| `listenhub creation delete ` | 删除作品 | 每个命令都可以加 `--help` 查看完整选项。 diff --git a/docs/plans/listenhub-cli--60-plan.md b/docs/plans/listenhub-cli--60-plan.md index 5c0d7f9..26703cb 100644 --- a/docs/plans/listenhub-cli--60-plan.md +++ b/docs/plans/listenhub-cli--60-plan.md @@ -14,19 +14,19 @@ ## File Map -| Action | File | Purpose | -|--------|------|---------| -| Create | `vite.config.ts` | Central vp config (pack entry, lint options) | -| Create | `vitest.config.ts` | Vitest test runner config | -| Modify | `package.json` | Scripts, deps, bin, files, remove overrides | -| Modify | `tsconfig.json` | Remove outDir/declaration (no longer compiling via tsc) | -| Modify | `.gitignore` | Replace `distribution/` with `dist/` | -| Delete | `xo.config.mjs` | Replaced by vp lint (oxlint) | +| Action | File | Purpose | +| ------ | ------------------ | ------------------------------------------------------- | +| Create | `vite.config.ts` | Central vp config (pack entry, lint options) | +| Create | `vitest.config.ts` | Vitest test runner config | +| Modify | `package.json` | Scripts, deps, bin, files, remove overrides | +| Modify | `tsconfig.json` | Remove outDir/declaration (no longer compiling via tsc) | +| Modify | `.gitignore` | Replace `distribution/` with `dist/` | +| Delete | `xo.config.mjs` | Replaced by vp lint (oxlint) | SDK (separate repo, separate commit): -| Action | File | Purpose | -|--------|------|---------| +| Action | File | Purpose | +| ------ | ---------------------------------------------- | ---------------------------- | | Modify | `~/coding/marswave/listenhub-sdk/package.json` | Upgrade vite-plus to ^0.1.18 | --- @@ -34,25 +34,26 @@ SDK (separate repo, separate commit): ### Task 1: Create vite.config.ts **Files:** + - Create: `vite.config.ts` - [ ] **Step 1: Create `vite.config.ts`** ```ts -import {defineConfig} from 'vite-plus'; +import { defineConfig } from "vite-plus"; export default defineConfig({ - pack: { - entry: ['source/cli.ts'], - platform: 'node', - format: ['esm'], - }, - lint: { - options: { - typeAware: true, - typeCheck: true, - }, - }, + pack: { + entry: ["source/cli.ts"], + platform: "node", + format: ["esm"], + }, + lint: { + options: { + typeAware: true, + typeCheck: true, + }, + }, }); ``` @@ -68,6 +69,7 @@ git commit -m "chore: add vite.config.ts for vp pack/lint/check" ### Task 2: Update package.json — dependencies and overrides **Files:** + - Modify: `package.json` This task only changes dependencies, overrides, and engine-related fields. Scripts are updated in Task 3. @@ -75,18 +77,22 @@ This task only changes dependencies, overrides, and engine-related fields. Scrip - [ ] **Step 1: Remove old dev dependencies and add new ones** Remove these devDependencies: + - `xo` - `del-cli` Downgrade: + - `typescript`: `^6.0.2` → `^5.9.3` Add new devDependencies: + - `vite-plus`: `^0.1.18` - `vite`: `^8.0.3` - `vitest`: `^2.0.0` Keep unchanged: + - `@sindresorhus/tsconfig`: `^8.1.0` - `@types/node`: `^25.5.0` @@ -128,6 +134,7 @@ git commit -m "chore: migrate deps to vite-plus, downgrade typescript to 5.x" ### Task 3: Update package.json — scripts, bin, files **Files:** + - Modify: `package.json` - [ ] **Step 1: Replace all scripts** @@ -155,6 +162,7 @@ Removed scripts: `clean`, `pretest`. - [ ] **Step 2: Update bin and files** Change `bin` from: + ```json "bin": { "listenhub": "distribution/source/cli.js" @@ -162,6 +170,7 @@ Change `bin` from: ``` To: + ```json "bin": { "listenhub": "dist/cli.mjs" @@ -169,6 +178,7 @@ To: ``` Change `files` from: + ```json "files": [ "distribution/source" @@ -176,6 +186,7 @@ Change `files` from: ``` To: + ```json "files": [ "dist" @@ -194,6 +205,7 @@ git commit -m "chore: update scripts to vp commands, point bin to dist/cli.mjs" ### Task 4: Update tsconfig.json **Files:** + - Modify: `tsconfig.json` - [ ] **Step 1: Simplify tsconfig.json** @@ -212,6 +224,7 @@ Replace the entire file with: ``` Changes from current: + - Removed `"declaration": false` (tsc no longer compiles) - Removed `"outDir": "distribution"` (vp pack handles output) - Changed `"rootDir": "."` → `"rootDir": "source"` (matches SDK pattern, scopes type-check to source only) @@ -228,6 +241,7 @@ git commit -m "chore: simplify tsconfig for vp check (no longer used for compila ### Task 5: Delete xo.config.mjs and update .gitignore **Files:** + - Delete: `xo.config.mjs` - Modify: `.gitignore` @@ -261,17 +275,18 @@ git commit -m "chore: remove xo config, update gitignore for dist/" ### Task 6: Create vitest.config.ts **Files:** + - Create: `vitest.config.ts` - [ ] **Step 1: Create vitest config** ```ts -import {defineConfig} from 'vitest/config'; +import { defineConfig } from "vitest/config"; export default defineConfig({ - test: { - clearMocks: true, - }, + test: { + clearMocks: true, + }, }); ``` @@ -379,6 +394,7 @@ pnpm lint ``` If there are remaining errors, fix them manually. Common issues: + - Unused variables: remove or prefix with `_` - Missing return types: add explicit return type annotations - Any `throw` of non-Error objects: wrap in `new Error()` @@ -456,6 +472,7 @@ git commit -m "fix: resolve type/lint errors from vp check" ### Task 10: SDK — upgrade vite-plus **Files:** + - Modify: `~/coding/marswave/listenhub-sdk/package.json` This task operates in the **listenhub-sdk** repo, not the CLI worktree. A separate worktree for SDK is not needed — this is a single-line dep bump. diff --git a/docs/specs/listenhub-cli--60-design.md b/docs/specs/listenhub-cli--60-design.md index ee8a0c9..d31f057 100644 --- a/docs/specs/listenhub-cli--60-design.md +++ b/docs/specs/listenhub-cli--60-design.md @@ -21,9 +21,9 @@ ListenHub-SDK 已经在使用 vite-plus 作为统一工具链(构建、lint、 ## 涉及仓库 -| 仓库 | 改动范围 | -|------|---------| -| listenhub-cli | 全量工具链迁移 | +| 仓库 | 改动范围 | +| ------------- | ------------------ | +| listenhub-cli | 全量工具链迁移 | | listenhub-sdk | vite-plus 版本升级 | ## 设计详情 @@ -35,6 +35,7 @@ ListenHub-SDK 已经在使用 vite-plus 作为统一工具链(构建、lint、 **目标**:`vp pack` 以 `source/cli.ts` 为入口(在 `vite.config.ts` 中配置),bundle 成单文件 `dist/cli.mjs`。 变更点: + - 入口文件 `source/cli.ts` 顶部的 `#!/usr/bin/env node` shebang 保留,vp pack 打包后自动带入 - `package.json` 的 `bin` 改为 `"listenhub": "dist/cli.mjs"` - `package.json` 的 `files` 改为 `["dist"]` @@ -48,6 +49,7 @@ ListenHub-SDK 已经在使用 vite-plus 作为统一工具链(构建、lint、 **目标**:`vp lint`(oxlint,Rust 实现)。 变更点: + - 删除 `xo.config.mjs` - 移除 xo 依赖 - 现有自定义规则处理: @@ -62,6 +64,7 @@ ListenHub-SDK 已经在使用 vite-plus 作为统一工具链(构建、lint、 **目标**:`vp fmt`(oxfmt,Rust 实现)。 变更点: + - 首次运行会重新格式化全部代码,产生一次性大 diff - 后续开发使用 `vp fmt` 保持格式一致 @@ -72,6 +75,7 @@ ListenHub-SDK 已经在使用 vite-plus 作为统一工具链(构建、lint、 **目标**:引入 vitest 框架,搭好骨架。 变更点: + - 创建 `vitest.config.ts`,参考 SDK 配置 - 不在本次迁移中编写测试用例 - `test` script 改为 `vp test run` @@ -107,18 +111,22 @@ ListenHub-SDK 已经在使用 vite-plus 作为统一工具链(构建、lint、 ### 6. 依赖变更 **新增 devDependencies**: + - `vite-plus: ^0.1.18` - `vite: ^8.0.3` - `vitest: ^2.0.0` **降级 devDependencies**: + - `typescript`:从 `^6.0.2` 降级到 `^5.9.3`,与 SDK 对齐。vite-plus-core 的 peer dependency 要求 `typescript: ^5.0.0`,CLI 当前的 6.x 不在范围内。同时移除 `package.json` 中的 `pnpm.overrides.typescript` override **移除 devDependencies**: + - `xo` - `@sindresorhus/tsconfig` 保留(SDK 也在用,与 vp check 兼容) **运行时依赖不变**: + - `@marswave/listenhub-sdk` - `commander` - `open` @@ -149,13 +157,13 @@ ListenHub-SDK 已经在使用 vite-plus 作为统一工具链(构建、lint、 所有 vp 子命令(pack、lint、fmt、check)的行为集中到 `vite.config.ts`,不依赖 CLI 参数传递: ```ts -import { defineConfig } from 'vite-plus'; +import { defineConfig } from "vite-plus"; export default defineConfig({ pack: { - entry: ['source/cli.ts'], - platform: 'node', - format: ['esm'], + entry: ["source/cli.ts"], + platform: "node", + format: ["esm"], }, lint: { options: { @@ -167,6 +175,7 @@ export default defineConfig({ ``` 配置要点: + - `pack.entry`:固定入口为 `source/cli.ts`,输出到 `dist/cli.mjs` - `pack.platform: 'node'`:Node 内置模块自动 external - `pack.format: ['esm']`:保持 ESM only,与现有 `"type": "module"` 一致 @@ -185,12 +194,12 @@ export default defineConfig({ ## 风险与应对 -| 风险 | 影响 | 应对 | -|------|------|------| +| 风险 | 影响 | 应对 | +| ----------------------------------------------------------- | ---- | ----------------------------------------------------------------- | | vp pack 打包 CLI 后运行时报错(动态 import、Node 内置模块) | 阻塞 | 配置 externals 排除 Node 内置模块;动态 import 用 `import()` 保留 | -| oxlint 规则与现有代码冲突多 | 低 | `vp lint --fix` 自动修复大部分问题 | -| oxfmt 格式化结果与 Prettier 差异大 | 低 | 一次性 diff,审核后接受即可 | -| @sindresorhus/tsconfig 与 vp check 不兼容 | 低 | 移除 preset,手动配置 strict flags | +| oxlint 规则与现有代码冲突多 | 低 | `vp lint --fix` 自动修复大部分问题 | +| oxfmt 格式化结果与 Prettier 差异大 | 低 | 一次性 diff,审核后接受即可 | +| @sindresorhus/tsconfig 与 vp check 不兼容 | 低 | 移除 preset,手动配置 strict flags | ## 不做的事 diff --git a/package.json b/package.json index 5c887fe..f1c4283 100644 --- a/package.json +++ b/package.json @@ -2,15 +2,15 @@ "name": "@marswave/listenhub-cli", "version": "0.0.3", "description": "Command-line interface for ListenHub", + "license": "MIT", "repository": "marswaveai/listenhub-cli", - "type": "module", "bin": { "listenhub": "dist/cli.mjs" }, "files": [ "dist" ], - "license": "MIT", + "type": "module", "scripts": { "dev": "vp pack --watch", "build": "vp pack", diff --git a/source/_shared/client.ts b/source/_shared/client.ts index be945b2..e01a5cd 100644 --- a/source/_shared/client.ts +++ b/source/_shared/client.ts @@ -1,6 +1,6 @@ -import {ListenHubClient} from '@marswave/listenhub-sdk'; -import {loadCredentials, saveCredentials} from './credentials.js'; -import {CliAuthError} from './output.js'; +import { ListenHubClient } from "@marswave/listenhub-sdk"; +import { loadCredentials, saveCredentials } from "./credentials.js"; +import { CliAuthError } from "./output.js"; const refreshBufferMs = 60_000; @@ -8,41 +8,41 @@ const refreshBufferMs = 60_000; let refreshPromise: Promise | undefined; async function ensureFreshCredentials(): Promise { - const creds = await loadCredentials(); - if (!creds) { - throw new CliAuthError('Not logged in. Run `listenhub auth login` first.'); - } - - if (creds.expiresAt - Date.now() >= refreshBufferMs) { - return; // Still fresh - } - - const temporaryClient = new ListenHubClient({ - accessToken: creds.accessToken, - }); - const tokens = await temporaryClient.refresh({ - refreshToken: creds.refreshToken, - }); - await saveCredentials({ - ...creds, - accessToken: tokens.accessToken, - refreshToken: tokens.refreshToken, - expiresAt: Date.now() + tokens.expiresIn * 1000, - }); + const creds = await loadCredentials(); + if (!creds) { + throw new CliAuthError("Not logged in. Run `listenhub auth login` first."); + } + + if (creds.expiresAt - Date.now() >= refreshBufferMs) { + return; // Still fresh + } + + const temporaryClient = new ListenHubClient({ + accessToken: creds.accessToken, + }); + const tokens = await temporaryClient.refresh({ + refreshToken: creds.refreshToken, + }); + await saveCredentials({ + ...creds, + accessToken: tokens.accessToken, + refreshToken: tokens.refreshToken, + expiresAt: Date.now() + tokens.expiresIn * 1000, + }); } export async function getClient(): Promise { - // Single-flight: concurrent callers share one refresh - refreshPromise ??= ensureFreshCredentials().finally(() => { - refreshPromise = undefined; - }); + // Single-flight: concurrent callers share one refresh + refreshPromise ??= ensureFreshCredentials().finally(() => { + refreshPromise = undefined; + }); - await refreshPromise; + await refreshPromise; - const creds = await loadCredentials(); - if (!creds) { - throw new CliAuthError('Not logged in. Run `listenhub auth login` first.'); - } + const creds = await loadCredentials(); + if (!creds) { + throw new CliAuthError("Not logged in. Run `listenhub auth login` first."); + } - return new ListenHubClient({accessToken: creds.accessToken}); + return new ListenHubClient({ accessToken: creds.accessToken }); } diff --git a/source/_shared/credentials.ts b/source/_shared/credentials.ts index 5e14fd9..779eaed 100644 --- a/source/_shared/credentials.ts +++ b/source/_shared/credentials.ts @@ -1,59 +1,57 @@ -import fs from 'node:fs'; -import os from 'node:os'; -import path from 'node:path'; -import process from 'node:process'; -import type {StoredCredentials} from '@marswave/listenhub-sdk'; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import process from "node:process"; +import type { StoredCredentials } from "@marswave/listenhub-sdk"; function getConfigDir(): string { - const xdg = process.env['XDG_CONFIG_HOME']; - return path.join(xdg ?? path.join(os.homedir(), '.config'), 'listenhub'); + const xdg = process.env["XDG_CONFIG_HOME"]; + return path.join(xdg ?? path.join(os.homedir(), ".config"), "listenhub"); } function getCredentialsPath(): string { - return path.join(getConfigDir(), 'credentials.json'); + return path.join(getConfigDir(), "credentials.json"); } -export async function loadCredentials(): Promise< - StoredCredentials | undefined -> { - const filePath = getCredentialsPath(); - try { - const raw = fs.readFileSync(filePath, 'utf8'); - // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- JSON structure matches StoredCredentials - return JSON.parse(raw) as StoredCredentials; - } catch { - return undefined; - } +export async function loadCredentials(): Promise { + const filePath = getCredentialsPath(); + try { + const raw = fs.readFileSync(filePath, "utf8"); + // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- JSON structure matches StoredCredentials + return JSON.parse(raw) as StoredCredentials; + } catch { + return undefined; + } } export async function saveCredentials(creds: StoredCredentials): Promise { - const dir = getConfigDir(); - fs.mkdirSync(dir, {recursive: true}); + const dir = getConfigDir(); + fs.mkdirSync(dir, { recursive: true }); - const filePath = getCredentialsPath(); - const temporaryPath = `${filePath}.tmp.${process.pid}`; + const filePath = getCredentialsPath(); + const temporaryPath = `${filePath}.tmp.${process.pid}`; - fs.writeFileSync(temporaryPath, JSON.stringify(creds, null, '\t'), { - mode: 0o600, - }); - fs.renameSync(temporaryPath, filePath); + fs.writeFileSync(temporaryPath, JSON.stringify(creds, null, "\t"), { + mode: 0o600, + }); + fs.renameSync(temporaryPath, filePath); } export async function deleteCredentials(): Promise { - const filePath = getCredentialsPath(); - try { - fs.unlinkSync(filePath); - } catch (error) { - // ENOENT is fine (already gone), anything else is a real problem - if ( - error instanceof Error && - 'code' in error && - // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- checking errno code on Error with 'code' property - (error as NodeJS.ErrnoException).code === 'ENOENT' - ) { - return; - } - - throw error; - } + const filePath = getCredentialsPath(); + try { + fs.unlinkSync(filePath); + } catch (error) { + // ENOENT is fine (already gone), anything else is a real problem + if ( + error instanceof Error && + "code" in error && + // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- checking errno code on Error with 'code' property + (error as NodeJS.ErrnoException).code === "ENOENT" + ) { + return; + } + + throw error; + } } diff --git a/source/_shared/language.ts b/source/_shared/language.ts index ea2b51b..b144fd0 100644 --- a/source/_shared/language.ts +++ b/source/_shared/language.ts @@ -1,11 +1,11 @@ -import type {Language} from '@marswave/listenhub-sdk'; +import type { Language } from "@marswave/listenhub-sdk"; const cjkRegex = /[\u4E00-\u9FFF\u3400-\u4DBF]/v; const kanaRegex = /[\u3040-\u309F\u30A0-\u30FF]/v; export function inferLanguage(text?: string): Language { - if (!text) return 'en'; - if (kanaRegex.test(text)) return 'ja'; - if (cjkRegex.test(text)) return 'zh'; - return 'en'; + if (!text) return "en"; + if (kanaRegex.test(text)) return "ja"; + if (cjkRegex.test(text)) return "zh"; + return "en"; } diff --git a/source/_shared/output.ts b/source/_shared/output.ts index 1a2e47b..71310c9 100644 --- a/source/_shared/output.ts +++ b/source/_shared/output.ts @@ -1,72 +1,69 @@ -import process from 'node:process'; -import {ListenHubError} from '@marswave/listenhub-sdk'; +import process from "node:process"; +import { ListenHubError } from "@marswave/listenhub-sdk"; export function printJson(data: unknown): void { - console.log(JSON.stringify(data, null, 2)); + console.log(JSON.stringify(data, null, 2)); } export function printDetail( - label: string, - rows: Array<[string, string | number | undefined]>, + label: string, + rows: Array<[string, string | number | undefined]>, ): void { - console.log(`\u2713 ${label}\n`); - for (const [key, value] of rows) { - if (value !== undefined) { - console.log(` ${key.padEnd(10)} ${String(value)}`); - } - } + console.log(`\u2713 ${label}\n`); + for (const [key, value] of rows) { + if (value !== undefined) { + console.log(` ${key.padEnd(10)} ${String(value)}`); + } + } } export function printTable(headers: string[], rows: string[][]): void { - const widths = headers.map((h, i) => - Math.max(h.length, ...rows.map((r) => (r[i] ?? '').length)), - ); - console.log(' ' + headers.map((h, i) => h.padEnd(widths[i]!)).join(' ')); - for (const row of rows) { - console.log(' ' + row.map((c, i) => c.padEnd(widths[i]!)).join(' ')); - } + const widths = headers.map((h, i) => Math.max(h.length, ...rows.map((r) => (r[i] ?? "").length))); + console.log(" " + headers.map((h, i) => h.padEnd(widths[i]!)).join(" ")); + for (const row of rows) { + console.log(" " + row.map((c, i) => c.padEnd(widths[i]!)).join(" ")); + } } export class CliTimeoutError extends Error { - constructor(message: string) { - super(message); - this.name = 'CliTimeoutError'; - } + constructor(message: string) { + super(message); + this.name = "CliTimeoutError"; + } } export class CliAuthError extends Error { - constructor(message: string) { - super(message); - this.name = 'CliAuthError'; - } + constructor(message: string) { + super(message); + this.name = "CliAuthError"; + } } export function handleError(error: unknown, json: boolean): never { - if (json) { - const message = - error instanceof ListenHubError - ? {error: error.message, code: error.code, requestId: error.requestId} - : { - error: error instanceof Error ? error.message : String(error), - code: 'UNKNOWN', - }; - console.error(JSON.stringify(message, null, 2)); - } else { - const message = error instanceof Error ? error.message : String(error); - console.error(`\u2717 Error: ${message}`); - } + if (json) { + const message = + error instanceof ListenHubError + ? { error: error.message, code: error.code, requestId: error.requestId } + : { + error: error instanceof Error ? error.message : String(error), + code: "UNKNOWN", + }; + console.error(JSON.stringify(message, null, 2)); + } else { + const message = error instanceof Error ? error.message : String(error); + console.error(`\u2717 Error: ${message}`); + } - if ( - error instanceof CliAuthError || - (error instanceof ListenHubError && - (error.status === 401 || error.status === 403)) - ) { - process.exit(2); // eslint-disable-line unicorn/no-process-exit - } + if ( + error instanceof CliAuthError || + (error instanceof ListenHubError && (error.status === 401 || error.status === 403)) + ) { + process.exit(2); // eslint-disable-line unicorn/no-process-exit + } - if (error instanceof CliTimeoutError) { - process.exit(3); // eslint-disable-line unicorn/no-process-exit - } + if (error instanceof CliTimeoutError) { + process.exit(3); // eslint-disable-line unicorn/no-process-exit + } - process.exit(1); // eslint-disable-line unicorn/no-process-exit + process.exit(1); // eslint-disable-line unicorn/no-process-exit } diff --git a/source/_shared/polling.ts b/source/_shared/polling.ts index 8b6f135..ab2c4bb 100644 --- a/source/_shared/polling.ts +++ b/source/_shared/polling.ts @@ -1,170 +1,168 @@ import type { - AIImageItem, - EpisodeDetail, - ListenHubClient, - LyricsTaskDetail, - MusicTaskDetail, -} from '@marswave/listenhub-sdk'; -import ora from 'ora'; -import {CliTimeoutError} from './output.js'; + AIImageItem, + EpisodeDetail, + ListenHubClient, + LyricsTaskDetail, + MusicTaskDetail, +} from "@marswave/listenhub-sdk"; +import ora from "ora"; +import { CliTimeoutError } from "./output.js"; const pollIntervalMs = 10_000; const defaultTimeoutS = 300; async function sleep(ms: number): Promise { - return new Promise((resolve) => { - setTimeout(resolve, ms); - }); + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); } export async function pollUntilDone( - client: ListenHubClient, - episodeId: string, - options: {timeout?: number; label?: string; json?: boolean}, + client: ListenHubClient, + episodeId: string, + options: { timeout?: number; label?: string; json?: boolean }, ): Promise { - const timeoutS = options.timeout ?? defaultTimeoutS; - const maxAttempts = Math.ceil(timeoutS / (pollIntervalMs / 1000)); - const spinner = options.json - ? undefined - : ora({ - text: `${options.label ?? 'Creating'}... (1/${maxAttempts})`, - }).start(); - - for (let i = 0; i < maxAttempts; i++) { - if (i > 0) { - await sleep(pollIntervalMs); // eslint-disable-line no-await-in-loop - } - - const detail = await client.getCreation(episodeId); // eslint-disable-line no-await-in-loop - if (detail.processStatus === 'success') { - spinner?.succeed(`${options.label ?? 'Created'} successfully`); - return detail; - } - - if (detail.processStatus === 'fail') { - spinner?.fail('Creation failed'); - throw new Error(`Creation failed (code: ${detail.failCode})`); - } - - if (spinner) { - spinner.text = `${options.label ?? 'Creating'}... (${String(i + 2)}/${maxAttempts})`; - } - } - - spinner?.fail('Timed out'); - throw new CliTimeoutError(`Timed out after ${timeoutS}s`); + const timeoutS = options.timeout ?? defaultTimeoutS; + const maxAttempts = Math.ceil(timeoutS / (pollIntervalMs / 1000)); + const spinner = options.json + ? undefined + : ora({ + text: `${options.label ?? "Creating"}... (1/${maxAttempts})`, + }).start(); + + for (let i = 0; i < maxAttempts; i++) { + if (i > 0) { + await sleep(pollIntervalMs); // eslint-disable-line no-await-in-loop + } + + const detail = await client.getCreation(episodeId); // eslint-disable-line no-await-in-loop + if (detail.processStatus === "success") { + spinner?.succeed(`${options.label ?? "Created"} successfully`); + return detail; + } + + if (detail.processStatus === "fail") { + spinner?.fail("Creation failed"); + throw new Error(`Creation failed (code: ${detail.failCode})`); + } + + if (spinner) { + spinner.text = `${options.label ?? "Creating"}... (${String(i + 2)}/${maxAttempts})`; + } + } + + spinner?.fail("Timed out"); + throw new CliTimeoutError(`Timed out after ${timeoutS}s`); } export async function pollImageUntilDone( - client: ListenHubClient, - imageId: string, - options: {timeout?: number; json?: boolean}, + client: ListenHubClient, + imageId: string, + options: { timeout?: number; json?: boolean }, ): Promise { - const timeoutS = options.timeout ?? 120; - const maxAttempts = Math.ceil(timeoutS / (pollIntervalMs / 1000)); - const spinner = options.json - ? undefined - : ora({text: `Creating image... (1/${maxAttempts})`}).start(); - - for (let i = 0; i < maxAttempts; i++) { - if (i > 0) { - await sleep(pollIntervalMs); // eslint-disable-line no-await-in-loop - } - - const item = await client.getAIImage(imageId); // eslint-disable-line no-await-in-loop - if (item.status === 'success') { - spinner?.succeed('Image created successfully'); - return item; - } - - if (item.status === 'fail') { - spinner?.fail('Image creation failed'); - throw new Error('Image creation failed'); - } - - if (spinner) { - spinner.text = `Creating image... (${String(i + 2)}/${maxAttempts})`; - } - } - - spinner?.fail('Timed out'); - throw new CliTimeoutError(`Timed out after ${timeoutS}s`); + const timeoutS = options.timeout ?? 120; + const maxAttempts = Math.ceil(timeoutS / (pollIntervalMs / 1000)); + const spinner = options.json + ? undefined + : ora({ text: `Creating image... (1/${maxAttempts})` }).start(); + + for (let i = 0; i < maxAttempts; i++) { + if (i > 0) { + await sleep(pollIntervalMs); // eslint-disable-line no-await-in-loop + } + + const item = await client.getAIImage(imageId); // eslint-disable-line no-await-in-loop + if (item.status === "success") { + spinner?.succeed("Image created successfully"); + return item; + } + + if (item.status === "fail") { + spinner?.fail("Image creation failed"); + throw new Error("Image creation failed"); + } + + if (spinner) { + spinner.text = `Creating image... (${String(i + 2)}/${maxAttempts})`; + } + } + + spinner?.fail("Timed out"); + throw new CliTimeoutError(`Timed out after ${timeoutS}s`); } export async function pollMusicTaskUntilDone( - client: ListenHubClient, - taskId: string, - options: {timeout?: number; json?: boolean}, + client: ListenHubClient, + taskId: string, + options: { timeout?: number; json?: boolean }, ): Promise { - const timeoutS = options.timeout ?? 600; - const maxAttempts = Math.ceil(timeoutS / (pollIntervalMs / 1000)); - const spinner = options.json - ? undefined - : ora({text: `Creating music... (1/${maxAttempts})`}).start(); - - for (let i = 0; i < maxAttempts; i++) { - if (i > 0) { - await sleep(pollIntervalMs); // eslint-disable-line no-await-in-loop - } - - const task = await client.getMusicTask(taskId); // eslint-disable-line no-await-in-loop - if (task.status === 'success') { - spinner?.succeed('Music created successfully'); - return task; - } - - if (task.status === 'failed') { - spinner?.fail('Music creation failed'); - throw new Error( - `Music creation failed${task.errorMessage ? `: ${task.errorMessage}` : ''}`, - ); - } - - if (spinner) { - spinner.text = `Creating music... (${String(i + 2)}/${maxAttempts})`; - } - } - - spinner?.fail('Timed out'); - throw new CliTimeoutError(`Timed out after ${timeoutS}s`); + const timeoutS = options.timeout ?? 600; + const maxAttempts = Math.ceil(timeoutS / (pollIntervalMs / 1000)); + const spinner = options.json + ? undefined + : ora({ text: `Creating music... (1/${maxAttempts})` }).start(); + + for (let i = 0; i < maxAttempts; i++) { + if (i > 0) { + await sleep(pollIntervalMs); // eslint-disable-line no-await-in-loop + } + + const task = await client.getMusicTask(taskId); // eslint-disable-line no-await-in-loop + if (task.status === "success") { + spinner?.succeed("Music created successfully"); + return task; + } + + if (task.status === "failed") { + spinner?.fail("Music creation failed"); + throw new Error(`Music creation failed${task.errorMessage ? `: ${task.errorMessage}` : ""}`); + } + + if (spinner) { + spinner.text = `Creating music... (${String(i + 2)}/${maxAttempts})`; + } + } + + spinner?.fail("Timed out"); + throw new CliTimeoutError(`Timed out after ${timeoutS}s`); } const lyricsIntervalMs = 5000; export async function pollLyricsTaskUntilDone( - client: ListenHubClient, - taskId: string, - options: {timeout?: number; json?: boolean}, + client: ListenHubClient, + taskId: string, + options: { timeout?: number; json?: boolean }, ): Promise { - const timeoutS = options.timeout ?? 120; - const maxAttempts = Math.ceil(timeoutS / (lyricsIntervalMs / 1000)); - const spinner = options.json - ? undefined - : ora({text: `Creating lyrics... (1/${maxAttempts})`}).start(); - - for (let i = 0; i < maxAttempts; i++) { - if (i > 0) { - await sleep(lyricsIntervalMs); // eslint-disable-line no-await-in-loop - } - - const task = await client.getLyricsTask(taskId); // eslint-disable-line no-await-in-loop - if (task.status === 'success') { - spinner?.succeed('Lyrics generated successfully'); - return task; - } - - if (task.status === 'failed') { - spinner?.fail('Lyrics generation failed'); - throw new Error( - `Lyrics generation failed${task.errorMessage ? `: ${task.errorMessage}` : ''}`, - ); - } - - if (spinner) { - spinner.text = `Creating lyrics... (${String(i + 2)}/${maxAttempts})`; - } - } - - spinner?.fail('Timed out'); - throw new CliTimeoutError(`Timed out after ${timeoutS}s`); + const timeoutS = options.timeout ?? 120; + const maxAttempts = Math.ceil(timeoutS / (lyricsIntervalMs / 1000)); + const spinner = options.json + ? undefined + : ora({ text: `Creating lyrics... (1/${maxAttempts})` }).start(); + + for (let i = 0; i < maxAttempts; i++) { + if (i > 0) { + await sleep(lyricsIntervalMs); // eslint-disable-line no-await-in-loop + } + + const task = await client.getLyricsTask(taskId); // eslint-disable-line no-await-in-loop + if (task.status === "success") { + spinner?.succeed("Lyrics generated successfully"); + return task; + } + + if (task.status === "failed") { + spinner?.fail("Lyrics generation failed"); + throw new Error( + `Lyrics generation failed${task.errorMessage ? `: ${task.errorMessage}` : ""}`, + ); + } + + if (spinner) { + spinner.text = `Creating lyrics... (${String(i + 2)}/${maxAttempts})`; + } + } + + spinner?.fail("Timed out"); + throw new CliTimeoutError(`Timed out after ${timeoutS}s`); } diff --git a/source/_shared/sources.ts b/source/_shared/sources.ts index b156a3e..8b19a22 100644 --- a/source/_shared/sources.ts +++ b/source/_shared/sources.ts @@ -1,17 +1,14 @@ -import type {ContentSource} from '@marswave/listenhub-sdk'; +import type { ContentSource } from "@marswave/listenhub-sdk"; -export function buildSources( - urls?: string[], - texts?: string[], -): ContentSource[] { - const sources: ContentSource[] = []; - for (const uri of urls ?? []) { - sources.push({type: 'url', uri}); - } +export function buildSources(urls?: string[], texts?: string[]): ContentSource[] { + const sources: ContentSource[] = []; + for (const uri of urls ?? []) { + sources.push({ type: "url", uri }); + } - for (const content of texts ?? []) { - sources.push({type: 'text', content}); - } + for (const content of texts ?? []) { + sources.push({ type: "text", content }); + } - return sources; + return sources; } diff --git a/source/_shared/speaker-resolver.ts b/source/_shared/speaker-resolver.ts index 18c3d18..28a8b01 100644 --- a/source/_shared/speaker-resolver.ts +++ b/source/_shared/speaker-resolver.ts @@ -1,48 +1,46 @@ -import type {Language, ListenHubClient} from '@marswave/listenhub-sdk'; +import type { Language, ListenHubClient } from "@marswave/listenhub-sdk"; // Default speaker innerIds per language (confirmed from skills shared/speaker-selection.md) const defaultSpeakers: Record = { - zh: ['CN-Man-Beijing-V2', 'gaoqing3-bfb5c88a'], - en: ['cozy-man-english', 'travel-girl-english'], - ja: ['tianzhongdunzi-5d612542', '1shenguhaoshivocals-c002bc47'], + zh: ["CN-Man-Beijing-V2", "gaoqing3-bfb5c88a"], + en: ["cozy-man-english", "travel-girl-english"], + ja: ["tianzhongdunzi-5d612542", "1shenguhaoshivocals-c002bc47"], }; export async function resolveSpeakers( - client: ListenHubClient, - options: { - speakerNames?: string[]; - speakerIds?: string[]; - language: Language; - count?: number; - }, + client: ListenHubClient, + options: { + speakerNames?: string[]; + speakerIds?: string[]; + language: Language; + count?: number; + }, ): Promise { - // Direct IDs bypass resolution - if (options.speakerIds?.length) { - return options.speakerIds; - } + // Direct IDs bypass resolution + if (options.speakerIds?.length) { + return options.speakerIds; + } - // No speaker specified -> use defaults - if (!options.speakerNames?.length) { - const defaults = defaultSpeakers[options.language] ?? defaultSpeakers.en; - const count = options.count ?? defaults.length; - return defaults.slice(0, count); - } + // No speaker specified -> use defaults + if (!options.speakerNames?.length) { + const defaults = defaultSpeakers[options.language] ?? defaultSpeakers.en; + const count = options.count ?? defaults.length; + return defaults.slice(0, count); + } - // Resolve names via API - const {items} = await client.listSpeakers({language: options.language}); - const resolved: string[] = []; + // Resolve names via API + const { items } = await client.listSpeakers({ language: options.language }); + const resolved: string[] = []; - for (const name of options.speakerNames) { - const match = items.find( - (s) => s.name.toLowerCase() === name.toLowerCase(), - ); - if (!match) { - const available = items.map((s) => s.name).join(', '); - throw new Error(`Speaker "${name}" not found. Available: ${available}`); - } + for (const name of options.speakerNames) { + const match = items.find((s) => s.name.toLowerCase() === name.toLowerCase()); + if (!match) { + const available = items.map((s) => s.name).join(", "); + throw new Error(`Speaker "${name}" not found. Available: ${available}`); + } - resolved.push(match.speakerInnerId); - } + resolved.push(match.speakerInnerId); + } - return resolved; + return resolved; } diff --git a/source/_shared/upload.ts b/source/_shared/upload.ts index 024dc6d..e85883f 100644 --- a/source/_shared/upload.ts +++ b/source/_shared/upload.ts @@ -1,119 +1,106 @@ -import {access, readFile, stat} from 'node:fs/promises'; -import path from 'node:path'; -import type {ListenHubClient} from '@marswave/listenhub-sdk'; - -type FileAcceptType = 'audio' | 'image'; - -const audioExtensions = new Set([ - '.mp3', - '.wav', - '.flac', - '.m4a', - '.ogg', - '.aac', -]); -const imageExtensions = new Set(['.jpg', '.jpeg', '.png', '.webp', '.gif']); +import { access, readFile, stat } from "node:fs/promises"; +import path from "node:path"; +import type { ListenHubClient } from "@marswave/listenhub-sdk"; + +type FileAcceptType = "audio" | "image"; + +const audioExtensions = new Set([".mp3", ".wav", ".flac", ".m4a", ".ogg", ".aac"]); +const imageExtensions = new Set([".jpg", ".jpeg", ".png", ".webp", ".gif"]); const maxSizeBytes: Record = { - audio: 20 * 1024 * 1024, - image: 10 * 1024 * 1024, + audio: 20 * 1024 * 1024, + image: 10 * 1024 * 1024, }; const categoryForType: Record = { - audio: 'episode', - image: 'banana', + audio: "episode", + image: "banana", }; const mimeTypes = new Map([ - ['.mp3', 'audio/mpeg'], - ['.wav', 'audio/wav'], - ['.flac', 'audio/flac'], - ['.m4a', 'audio/mp4'], - ['.ogg', 'audio/ogg'], - ['.aac', 'audio/aac'], - ['.jpg', 'image/jpeg'], - ['.jpeg', 'image/jpeg'], - ['.png', 'image/png'], - ['.webp', 'image/webp'], - ['.gif', 'image/gif'], + [".mp3", "audio/mpeg"], + [".wav", "audio/wav"], + [".flac", "audio/flac"], + [".m4a", "audio/mp4"], + [".ogg", "audio/ogg"], + [".aac", "audio/aac"], + [".jpg", "image/jpeg"], + [".jpeg", "image/jpeg"], + [".png", "image/png"], + [".webp", "image/webp"], + [".gif", "image/gif"], ]); function allowedExtensions(accept: FileAcceptType): Set { - return accept === 'audio' ? audioExtensions : imageExtensions; + return accept === "audio" ? audioExtensions : imageExtensions; } export async function resolveFileOrUrl( - client: ListenHubClient, - input: string, - options: {accept: FileAcceptType}, + client: ListenHubClient, + input: string, + options: { accept: FileAcceptType }, ): Promise { - const trimmed = input.trim(); - - // URL — pass through - if (trimmed.startsWith('http://') || trimmed.startsWith('https://')) { - return trimmed; - } - - // Local file — resolve to absolute path - const filePath = path.resolve(trimmed); - - // Existence check - try { - await access(filePath); - } catch { - throw new Error(`File not found: ${trimmed}`); - } - - // Extension check - const ext = path.extname(filePath).toLowerCase(); - const allowed = allowedExtensions(options.accept); - if (!allowed.has(ext)) { - const expected = [...allowed].join(', '); - throw new Error( - `Unsupported ${options.accept} format: ${ext} (expected: ${expected})`, - ); - } - - // Size check - const fileStat = await stat(filePath); - const maxBytes = maxSizeBytes[options.accept]; - if (fileStat.size > maxBytes) { - const sizeMb = (fileStat.size / (1024 * 1024)).toFixed(1); - const maxMb = maxBytes / (1024 * 1024); - throw new Error( - `File too large: ${sizeMb} MB (max ${String(maxMb)} MB for ${options.accept})`, - ); - } - - // Get presigned upload URL - const contentType = mimeTypes.get(ext)!; - const fileKey = path.basename(filePath); - const category = categoryForType[options.accept]; - const {presignedUrl, fileUrl} = await client.createFileUpload({ - fileKey, - contentType, - category, - }); - - // Upload to GCS - const buffer = await readFile(filePath); - const response = await fetch(presignedUrl, { - method: 'PUT', - body: buffer, - headers: { - 'Content-Type': contentType, - 'Content-Length': String(buffer.length), - }, - }); - - if (!response.ok) { - throw new Error( - `Upload failed: ${String(response.status)} ${response.statusText}`, - ); - } - - // Return a storage.googleapis.com URL so the server's resolveUploadUrl - // can correctly strip the bucket name prefix and re-sign for downstream use. - const {pathname} = new URL(fileUrl); - return `https://storage.googleapis.com${pathname}`; + const trimmed = input.trim(); + + // URL — pass through + if (trimmed.startsWith("http://") || trimmed.startsWith("https://")) { + return trimmed; + } + + // Local file — resolve to absolute path + const filePath = path.resolve(trimmed); + + // Existence check + try { + await access(filePath); + } catch { + throw new Error(`File not found: ${trimmed}`); + } + + // Extension check + const ext = path.extname(filePath).toLowerCase(); + const allowed = allowedExtensions(options.accept); + if (!allowed.has(ext)) { + const expected = [...allowed].join(", "); + throw new Error(`Unsupported ${options.accept} format: ${ext} (expected: ${expected})`); + } + + // Size check + const fileStat = await stat(filePath); + const maxBytes = maxSizeBytes[options.accept]; + if (fileStat.size > maxBytes) { + const sizeMb = (fileStat.size / (1024 * 1024)).toFixed(1); + const maxMb = maxBytes / (1024 * 1024); + throw new Error(`File too large: ${sizeMb} MB (max ${String(maxMb)} MB for ${options.accept})`); + } + + // Get presigned upload URL + const contentType = mimeTypes.get(ext)!; + const fileKey = path.basename(filePath); + const category = categoryForType[options.accept]; + const { presignedUrl, fileUrl } = await client.createFileUpload({ + fileKey, + contentType, + category, + }); + + // Upload to GCS + const buffer = await readFile(filePath); + const response = await fetch(presignedUrl, { + method: "PUT", + body: buffer, + headers: { + "Content-Type": contentType, + "Content-Length": String(buffer.length), + }, + }); + + if (!response.ok) { + throw new Error(`Upload failed: ${String(response.status)} ${response.statusText}`); + } + + // Return a storage.googleapis.com URL so the server's resolveUploadUrl + // can correctly strip the bucket name prefix and re-sign for downstream use. + const { pathname } = new URL(fileUrl); + return `https://storage.googleapis.com${pathname}`; } diff --git a/source/auth/_cli.ts b/source/auth/_cli.ts index 741ea76..12b3062 100644 --- a/source/auth/_cli.ts +++ b/source/auth/_cli.ts @@ -1,41 +1,41 @@ -import type {Command} from 'commander'; -import {handleError} from '../_shared/output.js'; -import {runLogin, runLogout, runStatus} from './auth.js'; +import type { Command } from "commander"; +import { handleError } from "../_shared/output.js"; +import { runLogin, runLogout, runStatus } from "./auth.js"; export function register(program: Command) { - const auth = program.command('auth').description('Manage authentication'); + const auth = program.command("auth").description("Manage authentication"); - auth - .command('login') - .description('Log in via browser OAuth') - .action(async () => { - try { - await runLogin(); - } catch (error) { - handleError(error, false); - } - }); + auth + .command("login") + .description("Log in via browser OAuth") + .action(async () => { + try { + await runLogin(); + } catch (error) { + handleError(error, false); + } + }); - auth - .command('logout') - .description('Log out and revoke tokens') - .action(async () => { - try { - await runLogout(); - } catch (error) { - handleError(error, false); - } - }); + auth + .command("logout") + .description("Log out and revoke tokens") + .action(async () => { + try { + await runLogout(); + } catch (error) { + handleError(error, false); + } + }); - auth - .command('status') - .description('Show current login status') - .option('-j, --json', 'Output JSON', false) - .action(async (options: {json: boolean}) => { - try { - await runStatus(options.json); - } catch (error) { - handleError(error, options.json); - } - }); + auth + .command("status") + .description("Show current login status") + .option("-j, --json", "Output JSON", false) + .action(async (options: { json: boolean }) => { + try { + await runStatus(options.json); + } catch (error) { + handleError(error, options.json); + } + }); } diff --git a/source/auth/auth.ts b/source/auth/auth.ts index cff7cac..6ab80d9 100644 --- a/source/auth/auth.ts +++ b/source/auth/auth.ts @@ -1,104 +1,98 @@ -import process from 'node:process'; -import {ListenHubClient} from '@marswave/listenhub-sdk'; -import { - deleteCredentials, - loadCredentials, - saveCredentials, -} from '../_shared/credentials.js'; -import {startCallbackServer} from './login-server.js'; +import process from "node:process"; +import { ListenHubClient } from "@marswave/listenhub-sdk"; +import { deleteCredentials, loadCredentials, saveCredentials } from "../_shared/credentials.js"; +import { startCallbackServer } from "./login-server.js"; export async function runLogin(): Promise { - const server = await startCallbackServer(); - try { - const client = new ListenHubClient(); - const {sessionId, authUrl} = await client.connectInit({ - callbackPort: server.port, - }); + const server = await startCallbackServer(); + try { + const client = new ListenHubClient(); + const { sessionId, authUrl } = await client.connectInit({ + callbackPort: server.port, + }); - console.error('Opening browser for login...'); - // Dynamic import because `open` is ESM-only - const {default: open} = await import('open'); - await open(authUrl); + console.error("Opening browser for login..."); + // Dynamic import because `open` is ESM-only + const { default: open } = await import("open"); + await open(authUrl); - const {code} = await server.waitForCode(); - const tokens = await client.connectToken({sessionId, code}); + const { code } = await server.waitForCode(); + const tokens = await client.connectToken({ sessionId, code }); - await saveCredentials({ - accessToken: tokens.accessToken, - refreshToken: tokens.refreshToken, - expiresAt: Date.now() + tokens.expiresIn * 1000, - }); + await saveCredentials({ + accessToken: tokens.accessToken, + refreshToken: tokens.refreshToken, + expiresAt: Date.now() + tokens.expiresIn * 1000, + }); - // Fetch username to confirm - const authedClient = new ListenHubClient({ - accessToken: tokens.accessToken, - }); - const user = await authedClient.getCurrentUser(); - console.log(`\u2713 Logged in as ${user.nickname || user.email || 'user'}`); - } finally { - server.close(); - } + // Fetch username to confirm + const authedClient = new ListenHubClient({ + accessToken: tokens.accessToken, + }); + const user = await authedClient.getCurrentUser(); + console.log(`\u2713 Logged in as ${user.nickname || user.email || "user"}`); + } finally { + server.close(); + } } export async function runLogout(): Promise { - const creds = await loadCredentials(); - if (creds?.refreshToken) { - try { - const client = new ListenHubClient({accessToken: creds.accessToken}); - await client.revoke({refreshToken: creds.refreshToken}); - } catch { - console.error('Warning: remote revoke failed, local credentials cleared'); - } - } + const creds = await loadCredentials(); + if (creds?.refreshToken) { + try { + const client = new ListenHubClient({ accessToken: creds.accessToken }); + await client.revoke({ refreshToken: creds.refreshToken }); + } catch { + console.error("Warning: remote revoke failed, local credentials cleared"); + } + } - await deleteCredentials(); - console.log('\u2713 Logged out'); + await deleteCredentials(); + console.log("\u2713 Logged out"); } export async function runStatus(json: boolean): Promise { - const creds = await loadCredentials(); - if (!creds) { - if (json) { - console.log(JSON.stringify({loggedIn: false})); - } else { - console.log('Not logged in'); - } + const creds = await loadCredentials(); + if (!creds) { + if (json) { + console.log(JSON.stringify({ loggedIn: false })); + } else { + console.log("Not logged in"); + } - process.exit(1); // eslint-disable-line unicorn/no-process-exit - } + process.exit(1); // eslint-disable-line unicorn/no-process-exit + } - try { - const client = new ListenHubClient({accessToken: creds.accessToken}); - const user = await client.getCurrentUser(); - const expiresAt = new Date(creds.expiresAt).toISOString(); + try { + const client = new ListenHubClient({ accessToken: creds.accessToken }); + const user = await client.getCurrentUser(); + const expiresAt = new Date(creds.expiresAt).toISOString(); - if (json) { - console.log( - JSON.stringify( - { - loggedIn: true, - user: user.nickname, - email: user.email, - expiresAt, - }, - null, - 2, - ), - ); - } else { - console.log(`\u2713 Logged in as ${user.nickname || 'user'}`); - console.log(` Email: ${user.email}`); - console.log(` Expires at: ${expiresAt}`); - } - } catch { - if (json) { - console.log( - JSON.stringify({loggedIn: false, error: 'Token expired or invalid'}), - ); - } else { - console.log('Not logged in (token expired or invalid)'); - } + if (json) { + console.log( + JSON.stringify( + { + loggedIn: true, + user: user.nickname, + email: user.email, + expiresAt, + }, + null, + 2, + ), + ); + } else { + console.log(`\u2713 Logged in as ${user.nickname || "user"}`); + console.log(` Email: ${user.email}`); + console.log(` Expires at: ${expiresAt}`); + } + } catch { + if (json) { + console.log(JSON.stringify({ loggedIn: false, error: "Token expired or invalid" })); + } else { + console.log("Not logged in (token expired or invalid)"); + } - process.exit(1); // eslint-disable-line unicorn/no-process-exit - } + process.exit(1); // eslint-disable-line unicorn/no-process-exit + } } diff --git a/source/auth/login-server.ts b/source/auth/login-server.ts index d7398ac..29e9187 100644 --- a/source/auth/login-server.ts +++ b/source/auth/login-server.ts @@ -1,66 +1,66 @@ -import http from 'node:http'; -import type {AddressInfo} from 'node:net'; +import http from "node:http"; +import type { AddressInfo } from "node:net"; -type CallbackResult = {code: string}; +type CallbackResult = { code: string }; const loginTimeoutMs = 5 * 60 * 1000; // 5 minutes export async function startCallbackServer(): Promise<{ - port: number; - waitForCode: () => Promise; - close: () => void; + port: number; + waitForCode: () => Promise; + close: () => void; }> { - let resolveCode!: (result: CallbackResult) => void; - let rejectCode!: (error: Error) => void; - const codePromise = new Promise((resolve, reject) => { - resolveCode = resolve; - rejectCode = reject; - }); + let resolveCode!: (result: CallbackResult) => void; + let rejectCode!: (error: Error) => void; + const codePromise = new Promise((resolve, reject) => { + resolveCode = resolve; + rejectCode = reject; + }); - const timeout = setTimeout(() => { - rejectCode(new Error('Login timed out after 5 minutes. Please try again.')); - }, loginTimeoutMs); + const timeout = setTimeout(() => { + rejectCode(new Error("Login timed out after 5 minutes. Please try again.")); + }, loginTimeoutMs); - const server = http.createServer((request, response) => { - const url = new URL(request.url!, 'http://localhost'); - const code = url.searchParams.get('code'); - const error = url.searchParams.get('error'); + const server = http.createServer((request, response) => { + const url = new URL(request.url!, "http://localhost"); + const code = url.searchParams.get("code"); + const error = url.searchParams.get("error"); - if (error) { - const description = url.searchParams.get('error_description') ?? error; - response.writeHead(200, {'Content-Type': 'text/plain'}); - response.end(`Login failed: ${description}`); - clearTimeout(timeout); - rejectCode(new Error(`OAuth error: ${description}`)); - return; - } + if (error) { + const description = url.searchParams.get("error_description") ?? error; + response.writeHead(200, { "Content-Type": "text/plain" }); + response.end(`Login failed: ${description}`); + clearTimeout(timeout); + rejectCode(new Error(`OAuth error: ${description}`)); + return; + } - if (code) { - response.writeHead(200, {'Content-Type': 'text/html'}); - response.end( - '

Login successful!

You can close this tab.

', - ); - clearTimeout(timeout); - resolveCode({code}); - } else { - response.writeHead(400, {'Content-Type': 'text/plain'}); - response.end('Missing code parameter'); - } - }); + if (code) { + response.writeHead(200, { "Content-Type": "text/html" }); + response.end( + "

Login successful!

You can close this tab.

", + ); + clearTimeout(timeout); + resolveCode({ code }); + } else { + response.writeHead(400, { "Content-Type": "text/plain" }); + response.end("Missing code parameter"); + } + }); - await new Promise((resolve) => { - server.listen(0, '127.0.0.1', resolve); - }); + await new Promise((resolve) => { + server.listen(0, "127.0.0.1", resolve); + }); - // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- server.listen on '127.0.0.1' always returns AddressInfo - const {port} = server.address() as AddressInfo; + // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- server.listen on '127.0.0.1' always returns AddressInfo + const { port } = server.address() as AddressInfo; - return { - port, - waitForCode: async () => codePromise, - close() { - clearTimeout(timeout); - server.close(); - }, - }; + return { + port, + waitForCode: async () => codePromise, + close() { + clearTimeout(timeout); + server.close(); + }, + }; } diff --git a/source/cli.ts b/source/cli.ts index 7390544..a15345d 100644 --- a/source/cli.ts +++ b/source/cli.ts @@ -1,18 +1,18 @@ #!/usr/bin/env node -import {Command} from 'commander'; -import {register as registerAuth} from './auth/_cli.js'; -import {register as registerCreation} from './creation/_cli.js'; -import {register as registerExplainer} from './explainer/_cli.js'; -import {register as registerImage} from './image/_cli.js'; -import {register as registerLyrics} from './lyrics/_cli.js'; -import {register as registerMusic} from './music/_cli.js'; -import {register as registerPodcast} from './podcast/_cli.js'; -import {register as registerSlides} from './slides/_cli.js'; -import {register as registerSpeakers} from './speakers/_cli.js'; -import {register as registerTts} from './tts/_cli.js'; +import { Command } from "commander"; +import { register as registerAuth } from "./auth/_cli.js"; +import { register as registerCreation } from "./creation/_cli.js"; +import { register as registerExplainer } from "./explainer/_cli.js"; +import { register as registerImage } from "./image/_cli.js"; +import { register as registerLyrics } from "./lyrics/_cli.js"; +import { register as registerMusic } from "./music/_cli.js"; +import { register as registerPodcast } from "./podcast/_cli.js"; +import { register as registerSlides } from "./slides/_cli.js"; +import { register as registerSpeakers } from "./speakers/_cli.js"; +import { register as registerTts } from "./tts/_cli.js"; const program = new Command(); -program.name('listenhub').description('ListenHub CLI').version('0.1.0'); +program.name("listenhub").description("ListenHub CLI").version("0.1.0"); registerAuth(program); registerPodcast(program); diff --git a/source/creation/_cli.ts b/source/creation/_cli.ts index 228dcce..c3546e5 100644 --- a/source/creation/_cli.ts +++ b/source/creation/_cli.ts @@ -1,34 +1,34 @@ -import type {Command} from 'commander'; -import {getClient} from '../_shared/client.js'; -import {handleError} from '../_shared/output.js'; -import {deleteCreations, getCreation} from './creation.js'; +import type { Command } from "commander"; +import { getClient } from "../_shared/client.js"; +import { handleError } from "../_shared/output.js"; +import { deleteCreations, getCreation } from "./creation.js"; export function register(program: Command) { - const cmd = program.command('creation').description('Manage creations'); + const cmd = program.command("creation").description("Manage creations"); - cmd - .command('get ') - .description('Get creation details') - .option('-j, --json', 'Output JSON', false) - .action(async (id: string, options: {json: boolean}) => { - try { - const client = await getClient(); - await getCreation(client, id, options.json); - } catch (error) { - handleError(error, options.json); - } - }); + cmd + .command("get ") + .description("Get creation details") + .option("-j, --json", "Output JSON", false) + .action(async (id: string, options: { json: boolean }) => { + try { + const client = await getClient(); + await getCreation(client, id, options.json); + } catch (error) { + handleError(error, options.json); + } + }); - cmd - .command('delete ') - .description('Delete one or more creations') - .option('-j, --json', 'Output JSON', false) - .action(async (ids: string[], options: {json: boolean}) => { - try { - const client = await getClient(); - await deleteCreations(client, ids, options.json); - } catch (error) { - handleError(error, options.json); - } - }); + cmd + .command("delete ") + .description("Delete one or more creations") + .option("-j, --json", "Output JSON", false) + .action(async (ids: string[], options: { json: boolean }) => { + try { + const client = await getClient(); + await deleteCreations(client, ids, options.json); + } catch (error) { + handleError(error, options.json); + } + }); } diff --git a/source/creation/creation.ts b/source/creation/creation.ts index 9082592..6ca5407 100644 --- a/source/creation/creation.ts +++ b/source/creation/creation.ts @@ -1,37 +1,37 @@ -import type {ListenHubClient} from '@marswave/listenhub-sdk'; -import {printDetail, printJson} from '../_shared/output.js'; +import type { ListenHubClient } from "@marswave/listenhub-sdk"; +import { printDetail, printJson } from "../_shared/output.js"; export async function getCreation( - client: ListenHubClient, - episodeId: string, - json: boolean, + client: ListenHubClient, + episodeId: string, + json: boolean, ): Promise { - const detail = await client.getCreation(episodeId); + const detail = await client.getCreation(episodeId); - if (json) { - printJson(detail); - return; - } + if (json) { + printJson(detail); + return; + } - printDetail('Creation details', [ - ['ID:', detail.id], - ['Type:', detail.generationType], - ['Status:', detail.processStatus], - ['Language:', detail.language], - ['Created:', new Date(detail.createdAt).toISOString()], - ]); + printDetail("Creation details", [ + ["ID:", detail.id], + ["Type:", detail.generationType], + ["Status:", detail.processStatus], + ["Language:", detail.language], + ["Created:", new Date(detail.createdAt).toISOString()], + ]); } export async function deleteCreations( - client: ListenHubClient, - ids: string[], - json: boolean, + client: ListenHubClient, + ids: string[], + json: boolean, ): Promise { - await client.deleteCreations({ids}); + await client.deleteCreations({ ids }); - if (json) { - printJson({deleted: ids}); - } else { - console.log(`\u2713 Deleted ${String(ids.length)} creation(s)`); - } + if (json) { + printJson({ deleted: ids }); + } else { + console.log(`\u2713 Deleted ${String(ids.length)} creation(s)`); + } } diff --git a/source/explainer/_cli.ts b/source/explainer/_cli.ts index 2f26196..696e440 100644 --- a/source/explainer/_cli.ts +++ b/source/explainer/_cli.ts @@ -1,60 +1,58 @@ -import type {Command} from 'commander'; -import {getClient} from '../_shared/client.js'; -import {handleError} from '../_shared/output.js'; +import type { Command } from "commander"; +import { getClient } from "../_shared/client.js"; +import { handleError } from "../_shared/output.js"; import { - type ExplainerCreateOptions, - type ExplainerListOptions, - createExplainer, - listExplainerVideos, -} from './explainer.js'; + type ExplainerCreateOptions, + type ExplainerListOptions, + createExplainer, + listExplainerVideos, +} from "./explainer.js"; function collect(value: string, previous: string[]): string[] { - return [...previous, value]; + return [...previous, value]; } export function register(program: Command) { - const cmd = program - .command('explainer') - .description('Explainer video generation'); + const cmd = program.command("explainer").description("Explainer video generation"); - cmd - .command('create') - .description('Create an explainer video') - .option('--query ', 'Topic text') - .option('--source-url ', 'Reference URL (repeatable)', collect, []) - .option('--source-text ', 'Reference text (repeatable)', collect, []) - .option('--mode ', 'Generation mode: info, story', 'info') - .option('--lang ', 'Language: en, zh, ja (auto-detected if omitted)') - .option('--speaker ', 'Speaker name') - .option('--speaker-id ', 'Speaker inner ID') - .option('--skip-audio', 'Skip audio generation', false) - .option('--image-size ', 'Image size: 2K, 4K', '2K') - .option('--aspect-ratio ', 'Aspect ratio: 16:9, 9:16, 1:1', '16:9') - .option('--style