diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..1f1ab58 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,125 @@ +# 美家卡智影 - GitLab CI/CD 配置 +# ======================================= +# 覆盖范围: 前端多平台构建 (macOS Universal + Windows x64) +# +# Runner 环境要求: +# - macOS runner (标签: macos, arm64): +# Apple Silicon Mac, 已安装: +# - Xcode Command Line Tools (15+) +# - Node.js 22+ (建议通过 nvm 管理) +# - Rust 1.94+ (通过 rustup) +# - GitLab Runner (shell executor) +# - Windows runner (标签: windows, x86_64): +# Windows 10/11 x64, 已安装: +# - Visual Studio 2022 Build Tools (含 C++ 桌面开发工具链) +# - Node.js 22+ (建议通过 nvm-windows 管理) +# - Rust 1.94+ (通过 rustup) +# - GitLab Runner (shell executor) +# +# 触发条件: master 分支推送 或 tag 推送 +# 产物保留: 30 天 + +variables: + ARTIFACT_EXPIRE_DAYS: "30" + +stages: + - build-frontend + +# ========================================== +# 通用模板: 前端构建 +# ========================================== +.frontend_build: + stage: build-frontend + only: + - master + - tags + cache: + # Node 依赖缓存(基于 package-lock.json 变更) + - key: + files: + - tauri-app/package-lock.json + paths: + - tauri-app/node_modules/ + # Rust 编译缓存(基于 Cargo.lock 变更) + - key: + files: + - tauri-app/src-tauri/Cargo.lock + paths: + - tauri-app/src-tauri/target/ + +# ========================================== +# Job: macOS Universal 构建 (ARM64 + Intel) +# ========================================== +# 说明: +# - 在 Apple Silicon Mac 上同时编译 ARM64 和 x86_64 两个架构 +# - 使用 lipo 合并为 universal Mach-O 可执行文件 +# - 产物为单一 .dmg,同时支持 M 系列和 Intel Mac +build-frontend-macos: + extends: .frontend_build + tags: + - macos + - arm64 + before_script: + # 激活 Rust 环境 (rustup 默认安装路径) + - source "$HOME/.cargo/env" 2>/dev/null || true + # 安装 Intel 目标平台(构建 universal binary 必需) + - rustup target add x86_64-apple-darwin + # 验证构建环境 + - node --version + - npm --version + - cargo --version + - rustc --print host + script: + - cd tauri-app + - npm ci + # 构建 universal macOS 应用 + # Tauri 会自动分别编译 aarch64 和 x86_64,再合并为 universal binary + - npm run tauri -- build --target universal-apple-darwin + artifacts: + name: "meijiaka-macos-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" + paths: + # DMG 安装包 (推荐用户下载) + - tauri-app/src-tauri/target/universal-apple-darwin/release/bundle/dmg/*.dmg + # .app bundle (供进一步分发或公证使用) + - tauri-app/src-tauri/target/universal-apple-darwin/release/bundle/macos/*.app + expire_in: "${ARTIFACT_EXPIRE_DAYS} days" + timeout: 45 minutes + retry: + max: 1 + when: runner_system_failure + +# ========================================== +# Job: Windows x64 构建 +# ========================================== +# 说明: +# - 产物包含 NSIS (.exe) 和 MSI 两种安装包格式 +# - NSIS 已配置为简体中文安装界面 +# - sidecar (ffmpeg/ffprobe) 会自动嵌入 .exe 同目录 +build-frontend-windows: + extends: .frontend_build + tags: + - windows + - x86_64 + before_script: + # 验证构建环境 + - rustc --version + - cargo --version + - node --version + - npm --version + script: + - cd tauri-app + - npm ci + # 构建 Windows x64 应用 + - npm run tauri -- build --target x86_64-pc-windows-msvc + artifacts: + name: "meijiaka-windows-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" + paths: + # NSIS 安装包 (推荐用户下载) + - tauri-app/src-tauri/target/x86_64-pc-windows-msvc/release/bundle/nsis/*.exe + # MSI 安装包 (企业部署场景) + - tauri-app/src-tauri/target/x86_64-pc-windows-msvc/release/bundle/msi/*.msi + expire_in: "${ARTIFACT_EXPIRE_DAYS} days" + timeout: 45 minutes + retry: + max: 1 + when: runner_system_failure diff --git a/AGENTS.md b/AGENTS.md index 6eb0a2b..b03f18b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -9,7 +9,7 @@ **美家卡智影**是一款面向桌面端的 AI 视频创作应用,采用"Python 后端 API + Tauri 桌面前端"的混合架构。 - **产品标识**: `cn.meijiaka.ai-video` / `cn.meijiaka.ai-zy` -- **版本**: `0.1.0` +- **版本**: `1.5.15` - **核心功能**: AI 脚本生成、AI 配音合成(TTS)、声音复刻、视频生成(Vidu)、视频字幕生成、压制成片(FFmpeg)、项目本地持久化 ### 技术栈总览 diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..f6ed435 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.5.15 diff --git a/python-api/.env.example b/python-api/.env.example index 40658cd..da9645d 100644 --- a/python-api/.env.example +++ b/python-api/.env.example @@ -4,7 +4,7 @@ # === 基础配置 === APP_NAME=美家卡智影 API -APP_VERSION=0.1.0 +APP_VERSION=1.5.15 # ⚠️ 生产环境必须设为 false DEBUG=true ENV=development diff --git a/python-api/app/config.py b/python-api/app/config.py index f3d3819..9859e38 100644 --- a/python-api/app/config.py +++ b/python-api/app/config.py @@ -24,7 +24,7 @@ class Settings(BaseSettings): # 应用基础配置 APP_NAME: str = Field(default="美家卡智影 API", description="应用名称") - APP_VERSION: str = Field(default="0.1.0", description="应用版本") + APP_VERSION: str = Field(default="1.5.15", description="应用版本") DEBUG: bool = Field(default=False, description="调试模式") ENV: Literal["development", "staging", "production"] = Field( default="development", description="运行环境" diff --git a/python-api/pyproject.toml b/python-api/pyproject.toml index 44eb696..bc4066f 100644 --- a/python-api/pyproject.toml +++ b/python-api/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "meijiaka-ai-api" -version = "0.1.0" +version = "1.5.15" description = "美家卡智影 - AI 视频创作后端 API" authors = [{ name = "Meijiaka Team" }] readme = "README.md" diff --git a/python-api/uv.lock b/python-api/uv.lock index ad7f980..0f57907 100644 --- a/python-api/uv.lock +++ b/python-api/uv.lock @@ -944,7 +944,7 @@ wheels = [ [[package]] name = "meijiaka-ai-api" -version = "0.1.0" +version = "1.5.15" source = { virtual = "." } dependencies = [ { name = "aiohttp" }, diff --git a/scripts/bump-version.py b/scripts/bump-version.py new file mode 100644 index 0000000..0ecccba --- /dev/null +++ b/scripts/bump-version.py @@ -0,0 +1,234 @@ +#!/usr/bin/env python3 +"""统一版本号管理脚本。 + +用法: + python scripts/bump-version.py # 读取 VERSION 文件并同步到所有配置 + python scripts/bump-version.py 1.5.15 # 更新 VERSION 并同步(同时打 Git tag) + +覆盖文件: + - VERSION + - AGENTS.md + - tauri-app/AGENTS.md + - tauri-app/package.json + - tauri-app/src-tauri/Cargo.toml + - tauri-app/src-tauri/tauri.conf.json + - tauri-app/src-tauri/Cargo.lock + - tauri-app/package-lock.json + - tauri-app/src/store/authStore.ts + - python-api/pyproject.toml + - python-api/uv.lock + - python-api/app/config.py + - python-api/.env.example +""" + +import json +import re +import subprocess +import sys +from pathlib import Path + +ROOT = Path(__file__).parent.parent +VERSION_FILE = ROOT / "VERSION" + + +def read_version() -> str: + return VERSION_FILE.read_text().strip() + + +def write_version(version: str) -> None: + VERSION_FILE.write_text(version + "\n") + + +def bump_agents_md(path: Path, version: str) -> None: + content = path.read_text() + content = re.sub( + r'\*\*版本\*\*: `[^`]+`', + f'**版本**: `{version}`', + content, + ) + path.write_text(content) + + +def bump_cargo_toml(version: str) -> None: + path = ROOT / "tauri-app" / "src-tauri" / "Cargo.toml" + content = path.read_text() + content = re.sub( + r'^version = "[^"]+"', + f'version = "{version}"', + content, + flags=re.MULTILINE, + ) + path.write_text(content) + + +def bump_cargo_lock(version: str) -> None: + path = ROOT / "tauri-app" / "src-tauri" / "Cargo.lock" + content = path.read_text() + # Cargo.lock 中 tauri-app 包的版本行 + content = re.sub( + r'(\[\[package\]\]\nname = "tauri-app"\nversion = ")([^"]+)(")', + rf'\g<1>{version}\g<3>', + content, + ) + path.write_text(content) + + +def bump_tauri_conf(version: str) -> None: + path = ROOT / "tauri-app" / "src-tauri" / "tauri.conf.json" + data = json.loads(path.read_text()) + data["version"] = version + path.write_text(json.dumps(data, indent=2, ensure_ascii=False) + "\n") + + +def bump_package_json(version: str) -> None: + path = ROOT / "tauri-app" / "package.json" + data = json.loads(path.read_text()) + data["version"] = version + path.write_text(json.dumps(data, indent=2, ensure_ascii=False) + "\n") + + +def bump_package_lock_json(version: str) -> None: + path = ROOT / "tauri-app" / "package-lock.json" + content = path.read_text() + # package-lock.json 顶层的 version + content = re.sub( + r'^\s+"version": "[^"]+"', + f' "version": "{version}"', + content, + count=1, + flags=re.MULTILINE, + ) + # 顶层 packages[""] 中的 version(lockfile v3) + content = re.sub( + r'("\": \{\n[^}]*"version": ")([^"]+)(")', + rf'\g<1>{version}\g<3>', + content, + count=1, + ) + path.write_text(content) + + +def bump_auth_store(version: str) -> None: + path = ROOT / "tauri-app" / "src" / "store" / "authStore.ts" + content = path.read_text() + content = re.sub( + r"appVersion: '[^']+'", + f"appVersion: '{version}'", + content, + ) + path.write_text(content) + + +def bump_pyproject_toml(version: str) -> None: + path = ROOT / "python-api" / "pyproject.toml" + content = path.read_text() + content = re.sub( + r'^version = "[^"]+"', + f'version = "{version}"', + content, + flags=re.MULTILINE, + ) + path.write_text(content) + + +def bump_uv_lock(version: str) -> None: + path = ROOT / "python-api" / "uv.lock" + content = path.read_text() + # uv.lock 中当前包的版本(name = "meijiaka-ai-api" 后的 version) + content = re.sub( + r'(name = "meijiaka-ai-api"\nversion = ")([^"]+)(")', + rf'\g<1>{version}\g<3>', + content, + ) + path.write_text(content) + + +def bump_config_py(version: str) -> None: + path = ROOT / "python-api" / "app" / "config.py" + content = path.read_text() + content = re.sub( + r'APP_VERSION: str = Field\(default="[^"]+"', + f'APP_VERSION: str = Field(default="{version}"', + content, + ) + path.write_text(content) + + +def bump_env_example(version: str) -> None: + path = ROOT / "python-api" / ".env.example" + content = path.read_text() + content = re.sub( + r'^APP_VERSION=[^\n]+', + f'APP_VERSION={version}', + content, + flags=re.MULTILINE, + ) + path.write_text(content) + + +def create_git_tag(version: str) -> None: + tag = f"v{version}" + try: + subprocess.run( + ["git", "tag", "-a", tag, "-m", f"Release {tag}"], + cwd=ROOT, + check=True, + capture_output=True, + text=True, + ) + print(f"✅ Git tag 已创建: {tag}") + except subprocess.CalledProcessError as e: + if "already exists" in e.stderr: + print(f"⚠️ Git tag {tag} 已存在,跳过") + else: + print(f"❌ 创建 Git tag 失败: {e.stderr}") + raise + + +def main(): + if len(sys.argv) > 1: + version = sys.argv[1] + write_version(version) + print(f"VERSION 已更新为: {version}") + else: + version = read_version() + print(f"读取 VERSION: {version}") + + bump_agents_md(ROOT / "AGENTS.md", version) + bump_agents_md(ROOT / "tauri-app" / "AGENTS.md", version) + bump_cargo_toml(version) + bump_cargo_lock(version) + bump_tauri_conf(version) + bump_package_json(version) + bump_package_lock_json(version) + bump_auth_store(version) + bump_pyproject_toml(version) + bump_uv_lock(version) + bump_config_py(version) + bump_env_example(version) + + print(f"\n✅ 版本号已统一更新为: {version}") + print("\n修改的文件列表:") + print(" - VERSION") + print(" - AGENTS.md") + print(" - tauri-app/AGENTS.md") + print(" - tauri-app/package.json") + print(" - tauri-app/package-lock.json") + print(" - tauri-app/src-tauri/Cargo.toml") + print(" - tauri-app/src-tauri/Cargo.lock") + print(" - tauri-app/src-tauri/tauri.conf.json") + print(" - tauri-app/src/store/authStore.ts") + print(" - python-api/pyproject.toml") + print(" - python-api/uv.lock") + print(" - python-api/app/config.py") + print(" - python-api/.env.example") + + if len(sys.argv) > 1: + create_git_tag(version) + print("\n下一步:") + print(f" git add -A && git commit -m 'bump version to {version}'") + print(f" git push && git push origin v{version}") + + +if __name__ == "__main__": + main() diff --git a/tauri-app/.gitignore b/tauri-app/.gitignore index 7ceb59f..38de68f 100644 --- a/tauri-app/.gitignore +++ b/tauri-app/.gitignore @@ -23,3 +23,8 @@ dist-ssr *.sln *.sw? .env +dist/ +src-tauri/target/ + +# FFmpeg sidecar 二进制(CI 构建时下载或本地放置) +src-tauri/binaries/ diff --git a/tauri-app/AGENTS.md b/tauri-app/AGENTS.md index 6425fc1..f7b06ac 100644 --- a/tauri-app/AGENTS.md +++ b/tauri-app/AGENTS.md @@ -9,7 +9,7 @@ **美家卡智影**(产品名)是一款基于 Tauri v2 + React 19 + TypeScript 的桌面端 AI 视频创作应用。 - **产品标识**: `cn.meijiaka.ai-video` -- **版本**: `0.1.0` +- **版本**: `1.5.15` - **窗口尺寸**: 1200×800,不可缩放(`resizable: false`) - **核心功能**: AI 脚本生成、AI 配音合成、视频生成、压制成片(FFmpeg)、项目本地持久化 diff --git a/tauri-app/package-lock.json b/tauri-app/package-lock.json index 52bf940..d1abdac 100644 --- a/tauri-app/package-lock.json +++ b/tauri-app/package-lock.json @@ -1,12 +1,12 @@ { "name": "tauri-app", - "version": "0.1.0", + "version": "1.5.15", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "tauri-app", - "version": "0.1.0", + "version": "1.5.15", "dependencies": { "@microsoft/fetch-event-source": "^2.0.1", "@tanstack/react-virtual": "^3.13.23", @@ -15,7 +15,7 @@ "@tauri-apps/plugin-fs": "^2.5.0", "@tauri-apps/plugin-opener": "^2", "date-fns": "^4.1.0", - "fabric": "^6.9.1", + "fabric": "^7.3.1", "immer": "^11.1.4", "qrcode": "^1.5.4", "react": "^19.1.0", @@ -1376,67 +1376,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", - "optional": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@microsoft/fetch-event-source": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz", @@ -2190,16 +2129,6 @@ } } }, - "node_modules/@tootallnate/once": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.1.tgz", - "integrity": "sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/@types/aria-query": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", @@ -2738,26 +2667,11 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "license": "BSD-3-Clause", - "optional": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "license": "ISC", - "optional": true - }, "node_modules/acorn": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "devOptional": true, + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -2766,17 +2680,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "license": "MIT", - "optional": true, - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -2787,17 +2690,14 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", - "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "license": "MIT", "optional": true, - "dependencies": { - "acorn": "^8.11.0" - }, "engines": { - "node": ">=0.4.0" + "node": ">= 14" } }, "node_modules/ajv": { @@ -2847,28 +2747,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/aproba": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", - "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", - "license": "ISC", - "optional": true - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -3064,13 +2942,6 @@ "node": ">= 0.4" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT", - "optional": true - }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -3091,9 +2962,30 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "devOptional": true, + "dev": true, "license": "MIT" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true + }, "node_modules/baseline-browser-mapping": { "version": "2.10.0", "dev": true, @@ -3115,6 +3007,18 @@ "require-from-string": "^2.0.2" } }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "optional": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -3160,6 +3064,31 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/cacheable": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.4.tgz", @@ -3207,7 +3136,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -3272,6 +3201,21 @@ ], "license": "CC-BY-4.0" }, + "node_modules/canvas": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-3.2.3.tgz", + "integrity": "sha512-PzE5nJZPz72YUAfo8oTp0u3fqqY7IzlTubneAihqDYAUcBk7ryeCmBbdJBEdaH0bptSOe2VT2Zwcb3UaFyaSWw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.3" + }, + "engines": { + "node": "^18.12.0 || >= 20.9.0" + } + }, "node_modules/chai": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", @@ -3328,6 +3272,13 @@ "node": ">=8" } }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC", + "optional": true + }, "node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -3357,16 +3308,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "license": "ISC", - "optional": true, - "bin": { - "color-support": "bin.js" - } - }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -3374,33 +3315,13 @@ "dev": true, "license": "MIT" }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "optional": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "devOptional": true, + "dev": true, "license": "MIT" }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "license": "ISC", - "optional": true - }, "node_modules/convert-source-map": { "version": "2.0.0", "dev": true, @@ -3524,31 +3445,154 @@ "node": ">=4" } }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "license": "MIT", - "optional": true - }, "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", "license": "MIT", "optional": true, "dependencies": { - "cssom": "~0.3.6" + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "node_modules/cssstyle/node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", "license": "MIT", + "optional": true, + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/cssstyle/node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/cssstyle/node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/cssstyle/node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/cssstyle/node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/cssstyle/node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/cssstyle/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC", "optional": true }, "node_modules/csstype": { @@ -3666,6 +3710,32 @@ "devOptional": true, "license": "MIT" }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -3709,23 +3779,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "license": "MIT", - "optional": true - }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -3785,35 +3838,11 @@ "license": "MIT", "peer": true }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "deprecated": "Use your platform's native DOMException instead", - "license": "MIT", - "optional": true, - "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "license": "BSD-2-Clause", - "optional": true, - "engines": { - "node": ">=12" - } - }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -3835,6 +3864,16 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "optional": true, + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/entities": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", @@ -3941,7 +3980,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3951,7 +3990,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3997,7 +4036,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -4010,7 +4049,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -4114,28 +4153,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "license": "BSD-2-Clause", - "optional": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, "node_modules/eslint": { "version": "9.39.4", "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", @@ -4355,20 +4372,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "optional": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/esquery": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", @@ -4399,7 +4402,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -4419,12 +4422,22 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "optional": true, + "engines": { + "node": ">=6" + } + }, "node_modules/expect-type": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", @@ -4436,141 +4449,78 @@ } }, "node_modules/fabric": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/fabric/-/fabric-6.9.1.tgz", - "integrity": "sha512-TqG08Xbt4rtlPsXgCjSUcZz/RsyEP57Qo21nCVRkw7zz9nR0co4SLkL9Q/zQh3tC1Yxap6M5jKFHUKV6SgPovg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/fabric/-/fabric-7.3.1.tgz", + "integrity": "sha512-RoLAQzUX+/3RNMYKliuN0P2HXdSDEGzyjS7FnmEbo3nhb8LFh59T+l3f6ApIu5LT4YB49YfMNrEajeIbutmD7Q==", "license": "MIT", "engines": { - "node": ">=16.20.0" + "node": ">=20.0.0" }, "optionalDependencies": { - "canvas": "^2.11.2", - "jsdom": "^20.0.1" - } - }, - "node_modules/fabric/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/fabric/node_modules/canvas": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", - "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.17.0", - "simple-get": "^3.0.3" - }, - "engines": { - "node": ">=6" + "canvas": "^3.2.0", + "jsdom": "^26.1.0" } }, "node_modules/fabric/node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", "license": "MIT", "optional": true, "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" }, "engines": { - "node": ">=12" - } - }, - "node_modules/fabric/node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "license": "MIT", - "optional": true, - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" + "node": ">=18" } }, "node_modules/fabric/node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "license": "MIT", "optional": true, "dependencies": { - "whatwg-encoding": "^2.0.0" + "whatwg-encoding": "^3.1.1" }, "engines": { - "node": ">=12" - } - }, - "node_modules/fabric/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", - "optional": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" + "node": ">=18" } }, "node_modules/fabric/node_modules/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "license": "MIT", "optional": true, "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" }, "peerDependencies": { - "canvas": "^2.5.0" + "canvas": "^3.0.0" }, "peerDependenciesMeta": { "canvas": { @@ -4578,19 +4528,6 @@ } } }, - "node_modules/fabric/node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/fabric/node_modules/parse5": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", @@ -4604,58 +4541,50 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/fabric/node_modules/simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "node_modules/fabric/node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", "license": "MIT", "optional": true, "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" } }, + "node_modules/fabric/node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "license": "MIT", + "optional": true + }, "node_modules/fabric/node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", "license": "BSD-3-Clause", "optional": true, "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^6.1.32" }, "engines": { - "node": ">=6" + "node": ">=16" } }, "node_modules/fabric/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", "license": "MIT", "optional": true, "dependencies": { - "punycode": "^2.1.1" + "punycode": "^2.3.1" }, "engines": { - "node": ">=12" - } - }, - "node_modules/fabric/node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", - "license": "MIT", - "optional": true, - "dependencies": { - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/fabric/node_modules/webidl-conversions": { @@ -4669,37 +4598,27 @@ } }, "node_modules/fabric/node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "license": "MIT", "optional": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/fabric/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", "license": "MIT", "optional": true, "dependencies": { - "tr46": "^3.0.0", + "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=12" - } - }, - "node_modules/fabric/node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/fast-deep-equal": { @@ -4754,9 +4673,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", "dev": true, "funding": [ { @@ -4886,61 +4805,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "license": "MIT", - "optional": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "license": "ISC", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC", - "optional": true - }, - "node_modules/fs.realpath": { + "node_modules/fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT", "optional": true }, "node_modules/fsevents": { @@ -4959,7 +4828,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "devOptional": true, + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4996,35 +4865,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "optional": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gauge/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC", - "optional": true - }, "node_modules/generator-function": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", @@ -5056,7 +4896,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -5081,7 +4921,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -5109,27 +4949,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "license": "ISC", - "optional": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT", + "optional": true }, "node_modules/glob-parent": { "version": "6.0.2", @@ -5144,30 +4969,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "license": "MIT", - "optional": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "license": "ISC", - "optional": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", @@ -5271,7 +5072,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5336,7 +5137,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5349,7 +5150,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -5361,13 +5162,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "license": "ISC", - "optional": true - }, "node_modules/hashery": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", @@ -5385,7 +5179,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -5445,31 +5239,31 @@ } }, "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "license": "MIT", "optional": true, "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", "optional": true, "dependencies": { + "agent-base": "^7.1.2", "debug": "4" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/iconv-lite": { @@ -5485,6 +5279,27 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause", + "optional": true + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -5542,18 +5357,6 @@ "node": ">=8" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", - "optional": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -5565,7 +5368,7 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/internal-slot": { @@ -6295,27 +6098,11 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "license": "MIT", - "optional": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6389,27 +6176,17 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "license": "MIT", "optional": true, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "optional": true, - "dependencies": { - "mime-db": "1.52.0" + "node": ">=10" }, - "engines": { - "node": ">= 0.6" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/min-indent": { @@ -6422,75 +6199,28 @@ "node": ">=4" } }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "license": "ISC", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "license": "MIT", "optional": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC", + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT", "optional": true }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "optional": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ms": { "version": "2.1.3", "devOptional": true, "license": "MIT" }, - "node_modules/nan": { - "version": "2.26.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.26.2.tgz", - "integrity": "sha512-0tTvBTYkt3tdGw22nrAy50x7gpbGCCFH3AFcyS5WiUu7Eu4vWlri1woE6qHBSfy11vksDqkiwjOnlR7WV8G1Hw==", - "license": "MIT", - "optional": true - }, "node_modules/nanoid": { "version": "3.3.11", "dev": true, @@ -6508,6 +6238,13 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT", + "optional": true + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -6515,6 +6252,39 @@ "dev": true, "license": "MIT" }, + "node_modules/node-abi": { + "version": "3.92.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.92.0.tgz", + "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT", + "optional": true + }, "node_modules/node-exports-info": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", @@ -6534,73 +6304,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "optional": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT", - "optional": true - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause", - "optional": true - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "optional": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/node-releases": { "version": "2.0.27", "dev": true, "license": "MIT" }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "license": "ISC", - "optional": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -6611,20 +6319,6 @@ "node": ">=0.10.0" } }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "deprecated": "This package is no longer supported.", - "license": "ISC", - "optional": true, - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, "node_modules/nwsapi": { "version": "2.2.23", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.23.tgz", @@ -6636,7 +6330,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6873,16 +6567,6 @@ "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -7038,6 +6722,34 @@ "dev": true, "license": "MIT" }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -7099,17 +6811,15 @@ "dev": true, "license": "MIT" }, - "node_modules/psl": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", - "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "license": "MIT", "optional": true, "dependencies": { - "punycode": "^2.3.1" - }, - "funding": { - "url": "https://github.com/sponsors/lupomontero" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "node_modules/punycode": { @@ -7159,13 +6869,6 @@ "node": ">=10.13.0" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "license": "MIT", - "optional": true - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -7187,6 +6890,32 @@ ], "license": "MIT" }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react": { "version": "19.2.4", "license": "MIT", @@ -7376,13 +7105,6 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "license": "ISC" }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "license": "MIT", - "optional": true - }, "node_modules/resolve": { "version": "2.0.0-next.6", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz", @@ -7428,23 +7150,6 @@ "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "optional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rollup": { "version": "4.59.0", "dev": true, @@ -7488,6 +7193,13 @@ "fsevents": "~2.3.2" } }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "license": "MIT", + "optional": true + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -7614,7 +7326,7 @@ }, "node_modules/semver": { "version": "6.3.1", - "devOptional": true, + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -7821,6 +7533,32 @@ "license": "MIT", "optional": true }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -7865,16 +7603,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "dev": true, @@ -8403,42 +8131,36 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "license": "ISC", + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", "optional": true, "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/tar/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "license": "ISC", - "optional": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC", - "optional": true - }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", @@ -8553,6 +8275,19 @@ "typescript": ">=4.8.4" } }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -8716,16 +8451,6 @@ "dev": true, "license": "MIT" }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/update-browserslist-db": { "version": "1.2.3", "dev": true, @@ -8765,17 +8490,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/use-sync-external-store": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", @@ -8953,7 +8667,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "xml-name-validator": "^5.0.0" @@ -8973,9 +8687,9 @@ } }, "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", "license": "MIT", "optional": true, @@ -8983,7 +8697,7 @@ "iconv-lite": "0.6.3" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/whatwg-mimetype": { @@ -9139,16 +8853,6 @@ "node": ">=8" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "license": "ISC", - "optional": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -9210,9 +8914,9 @@ } }, "node_modules/ws": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", - "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", "license": "MIT", "optional": true, "engines": { @@ -9235,7 +8939,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "engines": { "node": ">=18" diff --git a/tauri-app/package.json b/tauri-app/package.json index 9a0f785..8a4b7b8 100644 --- a/tauri-app/package.json +++ b/tauri-app/package.json @@ -1,7 +1,7 @@ { "name": "tauri-app", "private": true, - "version": "0.1.0", + "version": "1.5.15", "type": "module", "scripts": { "dev": "vite", @@ -26,7 +26,7 @@ "@tauri-apps/plugin-fs": "^2.5.0", "@tauri-apps/plugin-opener": "^2", "date-fns": "^4.1.0", - "fabric": "^6.9.1", + "fabric": "^7.3.1", "immer": "^11.1.4", "qrcode": "^1.5.4", "react": "^19.1.0", diff --git a/tauri-app/public/audio/presets/ai_huangyaoshi_712.mp3 b/tauri-app/public/audio/presets/ai_huangyaoshi_712.mp3 deleted file mode 100644 index 453fe53..0000000 Binary files a/tauri-app/public/audio/presets/ai_huangyaoshi_712.mp3 and /dev/null differ diff --git a/tauri-app/public/audio/presets/ai_taiwan_man2_speech02.mp3 b/tauri-app/public/audio/presets/ai_taiwan_man2_speech02.mp3 deleted file mode 100644 index dec9e95..0000000 Binary files a/tauri-app/public/audio/presets/ai_taiwan_man2_speech02.mp3 and /dev/null differ diff --git a/tauri-app/public/audio/presets/chat1_female_new-3.mp3 b/tauri-app/public/audio/presets/chat1_female_new-3.mp3 deleted file mode 100644 index 6602a1a..0000000 Binary files a/tauri-app/public/audio/presets/chat1_female_new-3.mp3 and /dev/null differ diff --git a/tauri-app/public/audio/presets/chengshu_jiejie.mp3 b/tauri-app/public/audio/presets/chengshu_jiejie.mp3 deleted file mode 100644 index 1949e24..0000000 Binary files a/tauri-app/public/audio/presets/chengshu_jiejie.mp3 and /dev/null differ diff --git a/tauri-app/public/audio/presets/girlfriend_2_speech02.mp3 b/tauri-app/public/audio/presets/girlfriend_2_speech02.mp3 deleted file mode 100644 index b4d887e..0000000 Binary files a/tauri-app/public/audio/presets/girlfriend_2_speech02.mp3 and /dev/null differ diff --git a/tauri-app/public/audio/presets/tiexin_nanyou.mp3 b/tauri-app/public/audio/presets/tiexin_nanyou.mp3 deleted file mode 100644 index 2f2fa22..0000000 Binary files a/tauri-app/public/audio/presets/tiexin_nanyou.mp3 and /dev/null differ diff --git a/tauri-app/public/audio/presets/yizhipiannan-v1.mp3 b/tauri-app/public/audio/presets/yizhipiannan-v1.mp3 deleted file mode 100644 index ab7dab4..0000000 Binary files a/tauri-app/public/audio/presets/yizhipiannan-v1.mp3 and /dev/null differ diff --git a/tauri-app/public/audio/presets/you_pingjing.mp3 b/tauri-app/public/audio/presets/you_pingjing.mp3 deleted file mode 100644 index 91265b2..0000000 Binary files a/tauri-app/public/audio/presets/you_pingjing.mp3 and /dev/null differ diff --git a/tauri-app/public/bg-config.json b/tauri-app/public/bg-config.json deleted file mode 100644 index 496c767..0000000 --- a/tauri-app/public/bg-config.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "backgrounds": [ - { "id": "1", "src": "https://img.liche.cn/meijiaka-zy/cover_templete/20260421150752_182_28.jpg", "name": "背景1" }, - { "id": "2", "src": "https://img.liche.cn/meijiaka-zy/cover_templete/20260421150753_183_28.jpg", "name": "背景2" }, - { "id": "3", "src": "https://img.liche.cn/meijiaka-zy/cover_templete/20260421150754_184_28.jpg", "name": "背景3" }, - { "id": "4", "src": "https://img.liche.cn/meijiaka-zy/cover_templete/20260421150754_185_28.jpg", "name": "背景4" }, - { "id": "5", "src": "https://img.liche.cn/meijiaka-zy/cover_templete/20260421150755_186_28.jpg", "name": "背景5" }, - { "id": "6", "src": "https://img.liche.cn/meijiaka-zy/cover_templete/20260421150756_187_28.jpg", "name": "背景6" }, - { "id": "7", "src": "https://img.liche.cn/meijiaka-zy/cover_templete/20260421150757_188_28.jpg", "name": "背景7" } - ] -} diff --git a/tauri-app/public/tauri.svg b/tauri-app/public/tauri.svg deleted file mode 100644 index 31b62c9..0000000 --- a/tauri-app/public/tauri.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/tauri-app/public/vite.svg b/tauri-app/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/tauri-app/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tauri-app/src-tauri/Cargo.lock b/tauri-app/src-tauri/Cargo.lock index 3ec9b74..5c22671 100644 --- a/tauri-app/src-tauri/Cargo.lock +++ b/tauri-app/src-tauri/Cargo.lock @@ -4101,7 +4101,7 @@ dependencies = [ [[package]] name = "tauri-app" -version = "0.1.0" +version = "1.5.15" dependencies = [ "base64 0.22.1", "chrono", diff --git a/tauri-app/src-tauri/Cargo.toml b/tauri-app/src-tauri/Cargo.toml index d21f209..1d4ad77 100644 --- a/tauri-app/src-tauri/Cargo.toml +++ b/tauri-app/src-tauri/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "tauri-app" -version = "0.1.0" -description = "A Tauri App" -authors = ["you"] +version = "1.5.15" +description = "美家卡智影 - AI 视频创作桌面应用" +authors = ["美家卡科技"] edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/tauri-app/src-tauri/icons/128x128.png b/tauri-app/src-tauri/icons/128x128.png index 6be5e50..18befff 100644 Binary files a/tauri-app/src-tauri/icons/128x128.png and b/tauri-app/src-tauri/icons/128x128.png differ diff --git a/tauri-app/src-tauri/icons/128x128@2x.png b/tauri-app/src-tauri/icons/128x128@2x.png index e81bece..55c4009 100644 Binary files a/tauri-app/src-tauri/icons/128x128@2x.png and b/tauri-app/src-tauri/icons/128x128@2x.png differ diff --git a/tauri-app/src-tauri/icons/32x32.png b/tauri-app/src-tauri/icons/32x32.png index a437dd5..576cc1b 100644 Binary files a/tauri-app/src-tauri/icons/32x32.png and b/tauri-app/src-tauri/icons/32x32.png differ diff --git a/tauri-app/src-tauri/icons/64x64.png b/tauri-app/src-tauri/icons/64x64.png new file mode 100644 index 0000000..6d7216f Binary files /dev/null and b/tauri-app/src-tauri/icons/64x64.png differ diff --git a/tauri-app/src-tauri/icons/Square107x107Logo.png b/tauri-app/src-tauri/icons/Square107x107Logo.png index 0ca4f27..deab995 100644 Binary files a/tauri-app/src-tauri/icons/Square107x107Logo.png and b/tauri-app/src-tauri/icons/Square107x107Logo.png differ diff --git a/tauri-app/src-tauri/icons/Square142x142Logo.png b/tauri-app/src-tauri/icons/Square142x142Logo.png index b81f820..dfff2fd 100644 Binary files a/tauri-app/src-tauri/icons/Square142x142Logo.png and b/tauri-app/src-tauri/icons/Square142x142Logo.png differ diff --git a/tauri-app/src-tauri/icons/Square150x150Logo.png b/tauri-app/src-tauri/icons/Square150x150Logo.png index 624c7bf..a11a14b 100644 Binary files a/tauri-app/src-tauri/icons/Square150x150Logo.png and b/tauri-app/src-tauri/icons/Square150x150Logo.png differ diff --git a/tauri-app/src-tauri/icons/Square284x284Logo.png b/tauri-app/src-tauri/icons/Square284x284Logo.png index c021d2b..f379e8d 100644 Binary files a/tauri-app/src-tauri/icons/Square284x284Logo.png and b/tauri-app/src-tauri/icons/Square284x284Logo.png differ diff --git a/tauri-app/src-tauri/icons/Square30x30Logo.png b/tauri-app/src-tauri/icons/Square30x30Logo.png index 6219700..a617c10 100644 Binary files a/tauri-app/src-tauri/icons/Square30x30Logo.png and b/tauri-app/src-tauri/icons/Square30x30Logo.png differ diff --git a/tauri-app/src-tauri/icons/Square310x310Logo.png b/tauri-app/src-tauri/icons/Square310x310Logo.png index f9bc048..cb05754 100644 Binary files a/tauri-app/src-tauri/icons/Square310x310Logo.png and b/tauri-app/src-tauri/icons/Square310x310Logo.png differ diff --git a/tauri-app/src-tauri/icons/Square44x44Logo.png b/tauri-app/src-tauri/icons/Square44x44Logo.png index d5fbfb2..ab2a31a 100644 Binary files a/tauri-app/src-tauri/icons/Square44x44Logo.png and b/tauri-app/src-tauri/icons/Square44x44Logo.png differ diff --git a/tauri-app/src-tauri/icons/Square71x71Logo.png b/tauri-app/src-tauri/icons/Square71x71Logo.png index 63440d7..cdacc14 100644 Binary files a/tauri-app/src-tauri/icons/Square71x71Logo.png and b/tauri-app/src-tauri/icons/Square71x71Logo.png differ diff --git a/tauri-app/src-tauri/icons/Square89x89Logo.png b/tauri-app/src-tauri/icons/Square89x89Logo.png index f3f705a..a9ef755 100644 Binary files a/tauri-app/src-tauri/icons/Square89x89Logo.png and b/tauri-app/src-tauri/icons/Square89x89Logo.png differ diff --git a/tauri-app/src-tauri/icons/StoreLogo.png b/tauri-app/src-tauri/icons/StoreLogo.png index 4556388..596fe99 100644 Binary files a/tauri-app/src-tauri/icons/StoreLogo.png and b/tauri-app/src-tauri/icons/StoreLogo.png differ diff --git a/tauri-app/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml b/tauri-app/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..2ffbf24 --- /dev/null +++ b/tauri-app/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/tauri-app/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png b/tauri-app/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..5b748c1 Binary files /dev/null and b/tauri-app/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png differ diff --git a/tauri-app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png b/tauri-app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..aa9788f Binary files /dev/null and b/tauri-app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/tauri-app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png b/tauri-app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000..7194d97 Binary files /dev/null and b/tauri-app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png differ diff --git a/tauri-app/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png b/tauri-app/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..cf4c2f7 Binary files /dev/null and b/tauri-app/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png differ diff --git a/tauri-app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png b/tauri-app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..6fac34d Binary files /dev/null and b/tauri-app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/tauri-app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png b/tauri-app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000..7aa23ba Binary files /dev/null and b/tauri-app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png differ diff --git a/tauri-app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png b/tauri-app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..5f62a50 Binary files /dev/null and b/tauri-app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png differ diff --git a/tauri-app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png b/tauri-app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..dfa59d8 Binary files /dev/null and b/tauri-app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/tauri-app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png b/tauri-app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000..ddafd31 Binary files /dev/null and b/tauri-app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/tauri-app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png b/tauri-app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..c18ffa6 Binary files /dev/null and b/tauri-app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png differ diff --git a/tauri-app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png b/tauri-app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..66f0f45 Binary files /dev/null and b/tauri-app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/tauri-app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png b/tauri-app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..3d1b21f Binary files /dev/null and b/tauri-app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/tauri-app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png b/tauri-app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..a9a3822 Binary files /dev/null and b/tauri-app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/tauri-app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png b/tauri-app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..8704f1f Binary files /dev/null and b/tauri-app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/tauri-app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png b/tauri-app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..ce719f0 Binary files /dev/null and b/tauri-app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/tauri-app/src-tauri/icons/android/values/ic_launcher_background.xml b/tauri-app/src-tauri/icons/android/values/ic_launcher_background.xml new file mode 100644 index 0000000..ea9c223 --- /dev/null +++ b/tauri-app/src-tauri/icons/android/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #fff + \ No newline at end of file diff --git a/tauri-app/src-tauri/icons/icon.icns b/tauri-app/src-tauri/icons/icon.icns index 12a5bce..7f479ab 100644 Binary files a/tauri-app/src-tauri/icons/icon.icns and b/tauri-app/src-tauri/icons/icon.icns differ diff --git a/tauri-app/src-tauri/icons/icon.ico b/tauri-app/src-tauri/icons/icon.ico index b3636e4..0e3dab4 100644 Binary files a/tauri-app/src-tauri/icons/icon.ico and b/tauri-app/src-tauri/icons/icon.ico differ diff --git a/tauri-app/src-tauri/icons/icon.png b/tauri-app/src-tauri/icons/icon.png index e1cd261..340ce28 100644 Binary files a/tauri-app/src-tauri/icons/icon.png and b/tauri-app/src-tauri/icons/icon.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-20x20@1x.png b/tauri-app/src-tauri/icons/ios/AppIcon-20x20@1x.png new file mode 100644 index 0000000..263bcfe Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-20x20@1x.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-20x20@2x-1.png b/tauri-app/src-tauri/icons/ios/AppIcon-20x20@2x-1.png new file mode 100644 index 0000000..cacfa27 Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-20x20@2x-1.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-20x20@2x.png b/tauri-app/src-tauri/icons/ios/AppIcon-20x20@2x.png new file mode 100644 index 0000000..cacfa27 Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-20x20@2x.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-20x20@3x.png b/tauri-app/src-tauri/icons/ios/AppIcon-20x20@3x.png new file mode 100644 index 0000000..cc9c192 Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-20x20@3x.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-29x29@1x.png b/tauri-app/src-tauri/icons/ios/AppIcon-29x29@1x.png new file mode 100644 index 0000000..47ab892 Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-29x29@1x.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-29x29@2x-1.png b/tauri-app/src-tauri/icons/ios/AppIcon-29x29@2x-1.png new file mode 100644 index 0000000..4d9b82b Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-29x29@2x-1.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-29x29@2x.png b/tauri-app/src-tauri/icons/ios/AppIcon-29x29@2x.png new file mode 100644 index 0000000..4d9b82b Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-29x29@2x.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-29x29@3x.png b/tauri-app/src-tauri/icons/ios/AppIcon-29x29@3x.png new file mode 100644 index 0000000..d92dd42 Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-29x29@3x.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-40x40@1x.png b/tauri-app/src-tauri/icons/ios/AppIcon-40x40@1x.png new file mode 100644 index 0000000..cacfa27 Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-40x40@1x.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-40x40@2x-1.png b/tauri-app/src-tauri/icons/ios/AppIcon-40x40@2x-1.png new file mode 100644 index 0000000..e8b241b Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-40x40@2x-1.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-40x40@2x.png b/tauri-app/src-tauri/icons/ios/AppIcon-40x40@2x.png new file mode 100644 index 0000000..e8b241b Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-40x40@2x.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-40x40@3x.png b/tauri-app/src-tauri/icons/ios/AppIcon-40x40@3x.png new file mode 100644 index 0000000..c729649 Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-40x40@3x.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-512@2x.png b/tauri-app/src-tauri/icons/ios/AppIcon-512@2x.png new file mode 100644 index 0000000..ea97e6c Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-512@2x.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-60x60@2x.png b/tauri-app/src-tauri/icons/ios/AppIcon-60x60@2x.png new file mode 100644 index 0000000..c729649 Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-60x60@2x.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-60x60@3x.png b/tauri-app/src-tauri/icons/ios/AppIcon-60x60@3x.png new file mode 100644 index 0000000..e99397c Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-60x60@3x.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-76x76@1x.png b/tauri-app/src-tauri/icons/ios/AppIcon-76x76@1x.png new file mode 100644 index 0000000..5c6718b Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-76x76@1x.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-76x76@2x.png b/tauri-app/src-tauri/icons/ios/AppIcon-76x76@2x.png new file mode 100644 index 0000000..f75b8f0 Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-76x76@2x.png differ diff --git a/tauri-app/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png b/tauri-app/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png new file mode 100644 index 0000000..19e1f15 Binary files /dev/null and b/tauri-app/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png differ diff --git a/tauri-app/src-tauri/tauri.conf.json b/tauri-app/src-tauri/tauri.conf.json index 400a3aa..41fccda 100644 --- a/tauri-app/src-tauri/tauri.conf.json +++ b/tauri-app/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "美家卡智影", - "version": "0.1.0", + "version": "1.5.15", "identifier": "cn.meijiaka.ai-zy", "build": { "beforeDevCommand": "npm run dev", @@ -64,7 +64,9 @@ }, "windows": { "nsis": { - "languages": ["SimpChinese"], + "languages": [ + "SimpChinese" + ], "displayLanguageSelector": false } } diff --git a/tauri-app/src/api/modules/localStorage.ts b/tauri-app/src/api/modules/localStorage.ts index 7963420..925a9ff 100644 --- a/tauri-app/src/api/modules/localStorage.ts +++ b/tauri-app/src/api/modules/localStorage.ts @@ -27,7 +27,6 @@ const safeInvoke = async (cmd: string, args?: Record): Promi const tauriAvailable = isTauri(); if (!tauriAvailable) { - console.warn(`[localStorage] Tauri not available, command: ${cmd} skipped`); return null; } diff --git a/tauri-app/src/api/modules/points.ts b/tauri-app/src/api/modules/points.ts index 6d34572..10045e3 100644 --- a/tauri-app/src/api/modules/points.ts +++ b/tauri-app/src/api/modules/points.ts @@ -156,10 +156,10 @@ export const pointsApi = { const query = new URLSearchParams(); query.set('page', String(page)); query.set('page_size', String(pageSize)); - if (txType) query.set('tx_type', txType); - if (sourceType) query.set('source_type', sourceType); - if (startTime) query.set('start_time', startTime); - if (endTime) query.set('end_time', endTime); + if (txType) {query.set('tx_type', txType);} + if (sourceType) {query.set('source_type', sourceType);} + if (startTime) {query.set('start_time', startTime);} + if (endTime) {query.set('end_time', endTime);} return client.get( `/points/transactions?${query.toString()}`, ); diff --git a/tauri-app/src/components/DatePicker/DatePicker.tsx b/tauri-app/src/components/DatePicker/DatePicker.tsx index 3e71429..0b608c6 100644 --- a/tauri-app/src/components/DatePicker/DatePicker.tsx +++ b/tauri-app/src/components/DatePicker/DatePicker.tsx @@ -17,7 +17,7 @@ export default function DatePicker({ value, onChange, placeholder = '选择日 // 点击外部关闭 useEffect(() => { - if (!open) return; + if (!open) {return;} const handleClick = (e: MouseEvent) => { if (containerRef.current && !containerRef.current.contains(e.target as Node)) { setOpen(false); diff --git a/tauri-app/src/components/DatePicker/DateRangePicker.tsx b/tauri-app/src/components/DatePicker/DateRangePicker.tsx index b5f0c08..e6654fe 100644 --- a/tauri-app/src/components/DatePicker/DateRangePicker.tsx +++ b/tauri-app/src/components/DatePicker/DateRangePicker.tsx @@ -31,7 +31,7 @@ export default function DateRangePicker({ from, to, onChange }: DateRangePickerP // 点击外部关闭 useEffect(() => { - if (!open) return; + if (!open) {return;} const handleClick = (e: MouseEvent) => { if (containerRef.current && !containerRef.current.contains(e.target as Node)) { setOpen(false); diff --git a/tauri-app/src/components/Modal/TermsModal.tsx b/tauri-app/src/components/Modal/TermsModal.tsx index baf7d67..ede1304 100644 --- a/tauri-app/src/components/Modal/TermsModal.tsx +++ b/tauri-app/src/components/Modal/TermsModal.tsx @@ -163,7 +163,7 @@ export default function TermsModal({ open, defaultTab = 'terms', onClose }: Term
{content.split('\n').map((line, i) => { - if (line.trim() === '') return
; + if (line.trim() === '') {return
;} if (line.match(/^(?[一二三四五六七八九十]+[)、]/)) { return

{line.trim()}

; } diff --git a/tauri-app/src/components/RechargeModal/RechargeModal.tsx b/tauri-app/src/components/RechargeModal/RechargeModal.tsx index 92be6cc..abfe327 100644 --- a/tauri-app/src/components/RechargeModal/RechargeModal.tsx +++ b/tauri-app/src/components/RechargeModal/RechargeModal.tsx @@ -177,7 +177,7 @@ export default function RechargeModal({ // 用户点击【我已支付】手动查询 const handleQueryPayment = async () => { const orderId = orderIdRef.current; - if (!orderId) return; + if (!orderId) {return;} // 二维码已过期,直接提示 if (Date.now() >= expireAtRef.current) { @@ -193,7 +193,7 @@ export default function RechargeModal({ // 刷新二维码(过期后重新下单) const handleRefreshQrcode = async () => { - if (!selectedOption) return; + if (!selectedOption) {return;} setIsExpired(false); setQrcodeDataUrl(''); setCountdown(''); diff --git a/tauri-app/src/hooks/useCoverFabric.ts b/tauri-app/src/hooks/useCoverFabric.ts index 10ac31c..2cfba3e 100644 --- a/tauri-app/src/hooks/useCoverFabric.ts +++ b/tauri-app/src/hooks/useCoverFabric.ts @@ -209,8 +209,8 @@ export function useCoverFabric() { canvas.add(fabricImg); canvas.sendObjectToBack(fabricImg); canvas.renderAll(); - } catch (err) { - console.warn('[useCoverFabric] 背景图加载失败:', err); + } catch { + // no-op: 背景图加载失败已在内部处理 } }, [] @@ -224,7 +224,6 @@ export function useCoverFabric() { // 确保自定义字体已加载(有缓存检查,不会重复加载) await loadCustomFont().catch(() => { - console.warn('[useCoverFabric] 字体加载失败,使用 fallback 字体'); }); canvas.clear(); @@ -234,8 +233,8 @@ export function useCoverFabric() { if (config.backgroundImage) { try { await loadBackground(canvas, config.backgroundImage); - } catch (err) { - console.warn('[useCoverFabric] 背景图加载失败:', err); + } catch { + // no-op: 背景图加载失败已在内部处理 } } diff --git a/tauri-app/src/pages/Profile/Profile.tsx b/tauri-app/src/pages/Profile/Profile.tsx index e598317..b9f7e62 100644 --- a/tauri-app/src/pages/Profile/Profile.tsx +++ b/tauri-app/src/pages/Profile/Profile.tsx @@ -32,7 +32,7 @@ const TYPE_LABELS: Record = { }; function maskMobile(mobile: string): string { - if (!mobile || mobile.length !== 11) return mobile; + if (!mobile || mobile.length !== 11) {return mobile;} return `${mobile.slice(0, 3)}****${mobile.slice(7)}`; } @@ -64,12 +64,12 @@ export default function Profile() { setUser(profileData); setNickname(profileData.nickname || ''); } - if (balanceData) setBalance(balanceData); + if (balanceData) {setBalance(balanceData);} const txData = await pointsApi .getTransactions({ page: 1, pageSize: 10 }) .catch(() => null); - if (txData) setRecentTx(txData.items); + if (txData) {setRecentTx(txData.items);} } catch (e) { console.error('[Profile] 加载数据失败:', e); } finally { @@ -107,7 +107,7 @@ export default function Profile() { }; const handleLogout = async () => { - if (!window.confirm('确定要退出登录吗?')) return; + if (!window.confirm('确定要退出登录吗?')) {return;} await logout(); window.location.reload(); }; @@ -149,7 +149,7 @@ export default function Profile() { fontFamily: 'inherit', }} onKeyDown={(e) => { - if (e.key === 'Enter') handleSaveNickname(); + if (e.key === 'Enter') {handleSaveNickname();} if (e.key === 'Escape') { setEditing(false); setNickname(displayName); diff --git a/tauri-app/src/pages/Profile/UsageDetail.tsx b/tauri-app/src/pages/Profile/UsageDetail.tsx index 56c671d..3f3066c 100644 --- a/tauri-app/src/pages/Profile/UsageDetail.tsx +++ b/tauri-app/src/pages/Profile/UsageDetail.tsx @@ -250,7 +250,7 @@ export default function UsageDetail() { // 加载数据 const load = useCallback(async () => { - if (!startDate || !endDate) return; + if (!startDate || !endDate) {return;} setLoading(true); setDateError(''); try { @@ -483,7 +483,7 @@ export default function UsageDetail() { )} {activeTab === 'consume' && ( - {tx.duration != null ? `${tx.duration.toFixed(1)}s` : '-'} + {typeof tx.duration === 'number' ? `${tx.duration.toFixed(1)}s` : '-'} )} {tx.description || '-'} diff --git a/tauri-app/src/pages/VideoCreation/CoverDesign.tsx b/tauri-app/src/pages/VideoCreation/CoverDesign.tsx index deeb01c..34d89ea 100644 --- a/tauri-app/src/pages/VideoCreation/CoverDesign.tsx +++ b/tauri-app/src/pages/VideoCreation/CoverDesign.tsx @@ -102,7 +102,7 @@ export default function CoverDesign() { // 前置积分检查 const titlePoints = usePointStore.getState().getRule('title')?.points || 1; const canProceed = await checkBalance(titlePoints, '标题生成', true); - if (!canProceed) return; + if (!canProceed) {return;} const scriptContent = utterances.map(u => u.text).join('\n'); const maxLength = titleType === 'main' ? 6 : 26; @@ -144,7 +144,6 @@ export default function CoverDesign() { useEffect(() => { const loadBackgrounds = async () => { if (!categoryCode) { - console.warn('[CoverDesign] 未选择脚本大类,无法加载背景图'); return; } try { @@ -231,8 +230,8 @@ export default function CoverDesign() { projectId, filePath: oldCoverPath, }); - } catch (e) { - console.warn('[CoverDesign] 删除旧封面失败:', e); + } catch { + // no-op: 删除旧封面失败不影响主流程 } } diff --git a/tauri-app/src/pages/VideoCreation/ScriptCreation.tsx b/tauri-app/src/pages/VideoCreation/ScriptCreation.tsx index 981c9f7..e65aeec 100644 --- a/tauri-app/src/pages/VideoCreation/ScriptCreation.tsx +++ b/tauri-app/src/pages/VideoCreation/ScriptCreation.tsx @@ -130,7 +130,7 @@ export default function ScriptCreation() { // 前置积分检查:脚本生成 const scriptPoints = usePointStore.getState().getRule('script')?.points || 5; const ok = await checkBalance(scriptPoints, '脚本生成'); - if (!ok) return; + if (!ok) {return;} // 请求去重锁:防止网络延迟期间快速点击发起多个请求 if (requestLock.current) { @@ -286,7 +286,7 @@ export default function ScriptCreation() { // 前置积分检查:润色 const polishPoints = usePointStore.getState().getRule('polish')?.points || 1; const ok = await checkBalance(polishPoints, type === 'voiceover' ? '文案润色' : '画面润色'); - if (!ok) return; + if (!ok) {return;} setPolishingState({ id, type }); try { @@ -298,7 +298,7 @@ export default function ScriptCreation() { const result = await scriptApi.polish(id, content, polishType, shotType); handleFieldChange(id, type, result); } catch (error) { - if (handleError(error, type === 'voiceover' ? '文案润色' : '画面润色', 1)) return; + if (handleError(error, type === 'voiceover' ? '文案润色' : '画面润色', 1)) {return;} console.error('润色失败:', error); toast.error('润色失败,请重试'); } finally { diff --git a/tauri-app/src/pages/VideoCreation/SubtitleBurning.tsx b/tauri-app/src/pages/VideoCreation/SubtitleBurning.tsx index ea50292..484db3a 100644 --- a/tauri-app/src/pages/VideoCreation/SubtitleBurning.tsx +++ b/tauri-app/src/pages/VideoCreation/SubtitleBurning.tsx @@ -126,7 +126,7 @@ export default function SubtitleBurning() { // 前置积分检查 const titlePoints = usePointStore.getState().getRule('title')?.points || 1; const canProceed = await checkBalance(titlePoints, '标题生成', true); - if (!canProceed) return; + if (!canProceed) {return;} const scriptContent = utterances.map(u => u.text).join('\n'); const maxLength = titleType === 'main' ? 8 : 10; diff --git a/tauri-app/src/pages/VideoCreation/VideoCompose.tsx b/tauri-app/src/pages/VideoCreation/VideoCompose.tsx index 5a69a28..bc26fa9 100644 --- a/tauri-app/src/pages/VideoCreation/VideoCompose.tsx +++ b/tauri-app/src/pages/VideoCreation/VideoCompose.tsx @@ -367,14 +367,14 @@ export default function VideoCompose() { className="btn btn-primary" style={{ flex: 1 }} onClick={async () => { - if (!resultPath) return; + if (!resultPath) {return;} try { const filename = resultPath.split(/[\\/]/).pop() || 'video.mp4'; const targetPath = await save({ defaultPath: filename, filters: [{ name: '视频', extensions: ['mp4'] }], }); - if (!targetPath) return; + if (!targetPath) {return;} const res = await invoke<{ code: number; data?: string; message: string }>('export_product', { sourcePath: resultPath, targetPath, diff --git a/tauri-app/src/pages/VideoCreation/VoiceSynthesis.tsx b/tauri-app/src/pages/VideoCreation/VoiceSynthesis.tsx index aa6de40..c1fa398 100644 --- a/tauri-app/src/pages/VideoCreation/VoiceSynthesis.tsx +++ b/tauri-app/src/pages/VideoCreation/VoiceSynthesis.tsx @@ -79,7 +79,7 @@ export default function VoiceSynthesis() { // 加上镜头切换停顿(segment↔empty_shot: 0.5s,同类型: 0.3s),每 5 秒 1 积分,最低 1 积分 const estimatedTtsPoints = useMemo(() => { const validSegments = segments.filter(s => s.voiceover?.trim()); - if (validSegments.length === 0) return { min: 0, max: 0 }; + if (validSegments.length === 0) {return { min: 0, max: 0 };} // 纯朗读时间(与后端配置 seconds_per_char: 0.25 保持一致) const totalChars = validSegments.reduce((sum, s) => sum + s.voiceover!.trim().length, 0); @@ -188,7 +188,6 @@ export default function VoiceSynthesis() { return; } if (!alignResult.utterances?.length) { - console.warn('[VoiceSynthesis] 打轴返回空结果'); progress.error('字幕处理异常'); return; } @@ -199,7 +198,6 @@ export default function VoiceSynthesis() { .map(s => ({ id: s.id, voiceover: s.voiceover || '' })); const matched = matchSegmentsToUtterances(matchSegments, alignResult.utterances); if (!matched.length) { - console.warn('[VoiceSynthesis] 文本匹配无结果'); progress.error('音频对齐失败'); return; } @@ -304,7 +302,7 @@ export default function VoiceSynthesis() { // 前置积分检查(宽松模式:余额为正即可执行,TTS 实际消耗不确定,允许欠费) const ok = await checkBalance(estimatedTtsPoints, '配音合成', false); - if (!ok) return; + if (!ok) {return;} const progress = useProgressStore.getState(); setIsGenerating(true); diff --git a/tauri-app/src/pages/VideoGeneration/hooks/useVideoGeneration.ts b/tauri-app/src/pages/VideoGeneration/hooks/useVideoGeneration.ts index cbca4c0..70fc99d 100644 --- a/tauri-app/src/pages/VideoGeneration/hooks/useVideoGeneration.ts +++ b/tauri-app/src/pages/VideoGeneration/hooks/useVideoGeneration.ts @@ -95,7 +95,7 @@ export function useVideoGeneration({ // 前置积分检查(严格模式) const canProceed = await checkBalance(estimatedVideoPoints, '视频生成', true); - if (!canProceed) return; + if (!canProceed) {return;} setIsComposing(true); const progress = useProgressStore.getState(); @@ -152,13 +152,12 @@ export function useVideoGeneration({ projectId, filePath: clipPath, }); - } catch (e) { - console.warn(`[VideoGeneration] 删除临时截取片段失败: ${clipPath}`, e); + } catch { + // no-op: 删除临时文件失败不影响主流程 } // 1d. 提交视频生成任务(仅当该分镜有 clipAudioUrl 时) if (!shot.clipAudioUrl) { - console.warn(`[VideoGeneration] Segment ${shot.id} 无 clipAudioUrl,跳过视频生成`); continue; } @@ -374,8 +373,8 @@ export function useVideoGeneration({ projectId, filePath: shot.lipSyncVideoPath, }); - } catch (e) { - console.warn(`[VideoGeneration] 删除生成视频失败: ${shot.lipSyncVideoPath}`, e); + } catch { + // no-op: 删除生成视频失败不影响主流程 } } if (shot.clipVideoPath) { @@ -384,8 +383,8 @@ export function useVideoGeneration({ projectId, filePath: shot.clipVideoPath, }); - } catch (e) { - console.warn(`[VideoGeneration] 删除片段视频失败: ${shot.clipVideoPath}`, e); + } catch { + // no-op: 删除片段视频失败不影响主流程 } } } diff --git a/tauri-app/src/pages/VideoGeneration/index.tsx b/tauri-app/src/pages/VideoGeneration/index.tsx index de9cab3..be73213 100644 --- a/tauri-app/src/pages/VideoGeneration/index.tsx +++ b/tauri-app/src/pages/VideoGeneration/index.tsx @@ -95,7 +95,6 @@ export default function VideoGeneration() { try { const fileExists = await exists(meta.avatarMaterialPath); if (!fileExists) { - console.warn('[VideoGeneration] 人物素材文件已不存在:', meta.avatarMaterialPath); useProjectStore.setState({ avatarMaterialPath: undefined, avatarMaterialName: undefined, @@ -107,8 +106,8 @@ export default function VideoGeneration() { avatarMaterialDuration: undefined, }); } - } catch (e) { - console.warn('[VideoGeneration] 验证人物素材文件失败:', e); + } catch { + // no-op: 验证素材文件失败不影响主流程 } } @@ -256,7 +255,7 @@ export default function VideoGeneration() { } const filePath = selected; - const fileName = filePath.split(/[\/]/).pop() || '未知文件'; + const fileName = filePath.split(/[/\\]/).pop() || '未知文件'; const result = await validateLocalVideo(filePath); diff --git a/tauri-app/src/store/authStore.ts b/tauri-app/src/store/authStore.ts index af5ff58..01f95aa 100644 --- a/tauri-app/src/store/authStore.ts +++ b/tauri-app/src/store/authStore.ts @@ -10,6 +10,7 @@ import { create } from 'zustand'; import { invoke } from '@tauri-apps/api/core'; +import { getVersion } from '@tauri-apps/api/app'; import { client, clearAuthCache, PYTHON_API_BASE_URL, setOnTokenRefreshed, setOnAuthFailed } from '../api/client'; import { isTauri } from '../utils/env'; // uiStore 不再直接导入,弹窗由 React 组件通过状态驱动渲染 @@ -70,9 +71,8 @@ function connectSSE(accessToken: string) { try { const data = JSON.parse(event.data); if (data.type === 'kick') { - console.warn('[SSE] 收到踢人消息:', data); const state = useAuthStore.getState(); - if (!state.isAuthenticated || state.showKickModal) return; + if (!state.isAuthenticated || state.showKickModal) {return;} // 先弹窗,不清除状态;用户点击确认后再清除 useAuthStore.setState({ showKickModal: true, @@ -145,6 +145,21 @@ const generateDeviceId = () => { return newId; }; +// 缓存应用版本号,避免每次登录都调用 IPC +let appVersionCache: string | null = null; + +async function getAppVersion(): Promise { + if (appVersionCache) { + return appVersionCache; + } + try { + appVersionCache = await getVersion(); + } catch { + appVersionCache = 'unknown'; + } + return appVersionCache; +} + // 注册 Token 刷新回调:client.ts 的 doRefreshToken 成功后会触发此回调, // 确保新 Token 被持久化到 Tauri 文件存储 / localStorage setOnTokenRefreshed((tokens) => { @@ -164,7 +179,7 @@ setOnTokenRefreshed((tokens) => { // 注意:不能调用 logout(),因为 logout() 内部会请求 /auth/logout,又可能触发 401 循环 setOnAuthFailed(() => { const state = useAuthStore.getState(); - if (!state.isAuthenticated || state.showKickModal) return; + if (!state.isAuthenticated || state.showKickModal) {return;} // 先弹窗,不清除状态;用户点击确认后再清除 useAuthStore.setState({ showKickModal: true, @@ -237,7 +252,7 @@ export const useAuthStore = create((set, get) => ({ deviceId: generateDeviceId(), deviceName: '美家卡智影桌面端', osInfo: navigator.userAgent, - appVersion: '0.1.0', + appVersion: await getAppVersion(), }); const newState = { @@ -254,6 +269,10 @@ export const useAuthStore = create((set, get) => ({ await saveAuthState(newState); clearAuthCache(); connectSSE(data.accessToken); + } catch (error) { + console.error('[authStore] 登录失败:', error); + isLoggingIn = false; + throw error; } finally { isLoggingIn = false; } @@ -271,9 +290,8 @@ export const useAuthStore = create((set, get) => ({ // 先调用后端登出 API(清理设备记录) try { await client.post('/auth/logout'); - } catch (e) { + } catch { // 后端登出失败不影响前端状态清理 - console.warn('[Auth] 后端登出调用失败:', e); } // 重置状态 diff --git a/tauri-app/src/store/pointStore.ts b/tauri-app/src/store/pointStore.ts index 7644f1c..b7f38f9 100644 --- a/tauri-app/src/store/pointStore.ts +++ b/tauri-app/src/store/pointStore.ts @@ -48,7 +48,7 @@ export const usePointStore = create((set, get) => ({ }, loadRules: async () => { - if (get().rulesLoaded) return; + if (get().rulesLoaded) {return;} try { const rules = await pointsApi.getRules(); set({ rules, rulesLoaded: true }); diff --git a/tauri-app/src/store/projectStore.ts b/tauri-app/src/store/projectStore.ts index 4a522f3..cdfba59 100644 --- a/tauri-app/src/store/projectStore.ts +++ b/tauri-app/src/store/projectStore.ts @@ -143,7 +143,7 @@ export const useProjectStore = create()( state.segments[shotIndex] = updatedShot as ScriptShot; state.updatedAt = Date.now(); } else { - console.warn('[ProjectStore] Shot not found:', id); + // no-op: 分镜不存在时不处理 } // 自动保存已移除,数据将在点击下一步时统一落盘 }), diff --git a/tauri-app/src/utils/audioAlign.ts b/tauri-app/src/utils/audioAlign.ts index 1ebec26..61cef16 100644 --- a/tauri-app/src/utils/audioAlign.ts +++ b/tauri-app/src/utils/audioAlign.ts @@ -107,10 +107,6 @@ export function matchSegmentsToUtterances( }); } else { // 匹配失败:已消费的 utterances 确实属于这个失败的 segment,不回退 uIdx - console.warn( - `[audioAlign] Segment ${seg.id} 匹配失败: ` + - `target="${targetNorm}" accumulated="${accumulatedNorm}"` - ); } } diff --git a/tauri-app/src/utils/canvasSubtitleDrawer.ts b/tauri-app/src/utils/canvasSubtitleDrawer.ts index 793486e..e523f80 100644 --- a/tauri-app/src/utils/canvasSubtitleDrawer.ts +++ b/tauri-app/src/utils/canvasSubtitleDrawer.ts @@ -223,7 +223,7 @@ export async function loadCustomFont(): Promise { }); await fontFace.load(); document.fonts.add(fontFace); - } catch (e) { - console.warn('[CanvasSubtitle] 字体加载失败,将使用系统字体回退:', e); + } catch { + // no-op: 字体加载失败已在内部处理 } }