From 9d69508f872407314d85b5a4bb428f1c34f3fba1 Mon Sep 17 00:00:00 2001 From: Suyunmeng Date: Tue, 2 Dec 2025 21:48:59 +0800 Subject: [PATCH 1/7] feat(linux): remove bundled rclone, use system rclone instead - Remove rclone from externalBin in tauri.conf.json and tauri.linux.conf.json - Add rclone as recommends dependency in deb/rpm packages - Modify get_rclone_binary_path() to fallback to system PATH on Linux/macOS - Skip rclone download in prepare.js for Linux platform This prevents package conflicts when users install rclone from system package manager. --- scripts/prepare.js | 19 +++++++++++++------ src-tauri/src/utils/path.rs | 21 ++++++++++++++++++++- src-tauri/tauri.conf.json | 1 - src-tauri/tauri.linux.conf.json | 5 +++-- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/scripts/prepare.js b/scripts/prepare.js index ce6564d..fe03f64 100644 --- a/scripts/prepare.js +++ b/scripts/prepare.js @@ -249,12 +249,19 @@ async function main() { ) ) - await retryTask('rclone', async () => { - await getLatestRcloneVersion() - await resolveSidecar( - createBinaryInfo('rclone', getRcloneArchMap(rcloneVersion), `https://downloads.rclone.org`, rcloneVersion) - ) - }) + // Only bundle rclone for Windows and macOS, Linux users should install rclone from system package manager + const isLinux = platform === 'linux' + if (!isLinux) { + await retryTask('rclone', async () => { + await getLatestRcloneVersion() + await resolveSidecar( + createBinaryInfo('rclone', getRcloneArchMap(rcloneVersion), `https://downloads.rclone.org`, rcloneVersion) + ) + }) + } else { + console.log('Skipping rclone download for Linux - users should install rclone from system package manager') + } + if (isWin) { await resolvePlugins() } diff --git a/src-tauri/src/utils/path.rs b/src-tauri/src/utils/path.rs index 4fc3e26..3215a84 100644 --- a/src-tauri/src/utils/path.rs +++ b/src-tauri/src/utils/path.rs @@ -115,7 +115,26 @@ pub fn get_openlist_binary_path() -> Result { } pub fn get_rclone_binary_path() -> Result { - get_binary_path("rclone", "Rclone") + // First, check if rclone is bundled with the app + if let Ok(bundled_path) = get_binary_path("rclone", "Rclone") { + return Ok(bundled_path); + } + + // Fallback: find rclone in system PATH (Linux/macOS) + #[cfg(not(target_os = "windows"))] + { + use std::process::Command; + if let Ok(output) = Command::new("which").arg("rclone").output() { + if output.status.success() { + let path_str = String::from_utf8_lossy(&output.stdout).trim().to_string(); + if !path_str.is_empty() { + return Ok(PathBuf::from(path_str)); + } + } + } + } + + Err("Rclone not found. Please install it from https://rclone.org/install/".to_string()) } pub fn get_app_config_dir() -> Result { diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 7fb2d5d..76ef9e3 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -35,7 +35,6 @@ "icon": ["icons/32x32.png", "icons/128x128.png", "icons/128x128@2x.png", "icons/icon.icns", "icons/icon.ico"], "externalBin": [ "binary/openlist", - "binary/rclone", "binary/install-openlist-service", "binary/openlist-desktop-service", "binary/uninstall-openlist-service" diff --git a/src-tauri/tauri.linux.conf.json b/src-tauri/tauri.linux.conf.json index 384b00f..dd3851d 100644 --- a/src-tauri/tauri.linux.conf.json +++ b/src-tauri/tauri.linux.conf.json @@ -6,6 +6,7 @@ "linux": { "deb": { "depends": ["openssl"], + "recommends": ["rclone"], "desktopTemplate": "./packages/linux/openlist.desktop", "provides": ["openlist-desktop"], "conflicts": ["openlist-desktop"], @@ -15,6 +16,7 @@ }, "rpm": { "depends": ["openssl"], + "recommends": ["rclone"], "desktopTemplate": "./packages/linux/openlist.desktop", "provides": ["openlist-desktop"], "conflicts": ["openlist-desktop"], @@ -27,8 +29,7 @@ "./binary/install-openlist-service", "./binary/uninstall-openlist-service", "./binary/openlist-desktop-service", - "./binary/openlist", - "./binary/rclone" + "./binary/openlist" ] } } From feb50d9d909a0eb3938d890677f4fefd6a2b7fde Mon Sep 17 00:00:00 2001 From: Suyunmeng Date: Tue, 2 Dec 2025 21:53:55 +0800 Subject: [PATCH 2/7] feat(linux): add rclone availability check and installation tip - Add check_rclone_available command in Rust backend - Add rcloneAvailable state and checkRcloneAvailable method in rclone store - Add TauriAPI.rclone.backend.isAvailable() API call - Add rclone installation tip UI for Linux users when rclone is not found - Add i18n texts for rclone tip in en.json and zh.json - Add CSS styles for rclone-tip component --- src-tauri/src/cmd/rclone_core.rs | 5 ++ src-tauri/src/lib.rs | 4 +- src-tauri/src/utils/path.rs | 12 ++--- src/api/tauri.ts | 3 +- src/i18n/locales/en.json | 2 + src/i18n/locales/zh.json | 2 + src/stores/rclone.ts | 14 +++++- src/views/MountView.vue | 34 +++++++++++++ src/views/css/MountView.css | 82 ++++++++++++++++++++++++++++++++ 9 files changed, 149 insertions(+), 9 deletions(-) diff --git a/src-tauri/src/cmd/rclone_core.rs b/src-tauri/src/cmd/rclone_core.rs index 88a3fab..06a962d 100644 --- a/src-tauri/src/cmd/rclone_core.rs +++ b/src-tauri/src/cmd/rclone_core.rs @@ -10,6 +10,11 @@ use crate::utils::path::{get_app_logs_dir, get_rclone_binary_path, get_rclone_co // admin:admin base64 encoded pub const RCLONE_AUTH: &str = "Basic YWRtaW46YWRtaW4="; +#[tauri::command] +pub async fn check_rclone_available() -> Result { + get_rclone_binary_path().map(|_| true).or(Ok(false)) +} + #[tauri::command] pub async fn create_and_start_rclone_backend( state: State<'_, AppState>, diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 0328a6d..68f36bd 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -27,7 +27,8 @@ use cmd::os_operate::{ open_url_in_browser, select_directory, update_tool_version, }; use cmd::rclone_core::{ - create_and_start_rclone_backend, create_rclone_backend_process, get_rclone_backend_status, + check_rclone_available, create_and_start_rclone_backend, create_rclone_backend_process, + get_rclone_backend_status, }; use cmd::rclone_mount::{ check_mount_status, create_rclone_mount_remote_process, get_mount_info_list, @@ -126,6 +127,7 @@ pub fn run() { create_openlist_core_process, get_openlist_core_status, get_rclone_backend_status, + check_rclone_available, create_rclone_backend_process, create_and_start_rclone_backend, rclone_list_config, diff --git a/src-tauri/src/utils/path.rs b/src-tauri/src/utils/path.rs index 3215a84..a58f742 100644 --- a/src-tauri/src/utils/path.rs +++ b/src-tauri/src/utils/path.rs @@ -124,12 +124,12 @@ pub fn get_rclone_binary_path() -> Result { #[cfg(not(target_os = "windows"))] { use std::process::Command; - if let Ok(output) = Command::new("which").arg("rclone").output() { - if output.status.success() { - let path_str = String::from_utf8_lossy(&output.stdout).trim().to_string(); - if !path_str.is_empty() { - return Ok(PathBuf::from(path_str)); - } + if let Ok(output) = Command::new("which").arg("rclone").output() + && output.status.success() + { + let path_str = String::from_utf8_lossy(&output.stdout).trim().to_string(); + if !path_str.is_empty() { + return Ok(PathBuf::from(path_str)); } } } diff --git a/src/api/tauri.ts b/src/api/tauri.ts index 72ce1e5..4fc81df 100644 --- a/src/api/tauri.ts +++ b/src/api/tauri.ts @@ -36,7 +36,8 @@ export class TauriAPI { backend: { create: (): Promise => call('create_rclone_backend_process'), createAndStart: (): Promise => call('create_and_start_rclone_backend'), - isRunning: (): Promise => call('get_rclone_backend_status') + isRunning: (): Promise => call('get_rclone_backend_status'), + isAvailable: (): Promise => call('check_rclone_available') }, remotes: { list: (): Promise => call('rclone_list_remotes'), diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index c98beb5..8649c90 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -468,6 +468,8 @@ "webdavMessage": "Before mounting remotes, please ensure WebDAV management for specific user is enabled in OpenList Core.", "winfspTitle": "WinFSP Installation Required", "winfspMessage": "On Windows, you need to install WinFSP first to use mount functionality. Please download and install it from GitHub: https://github.com/winfsp/winfsp/releases", + "rcloneTitle": "Rclone Installation Required", + "rcloneMessage": "On Linux, rclone is not bundled with the application. Please install it using your package manager (e.g., sudo apt install rclone) or from https://rclone.org/install/", "dismissForever": "Dismiss forever" } }, diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json index 5b2510b..b65cac1 100644 --- a/src/i18n/locales/zh.json +++ b/src/i18n/locales/zh.json @@ -468,6 +468,8 @@ "webdavMessage": "在挂载远程存储之前,请确保在 OpenList 核心中为用户启用了 WebDAV 管理功能", "winfspTitle": "需要安装 WinFSP", "winfspMessage": "在 Windows 系统上,您需要先安装 WinFSP 才能使用挂载功能。请从 GitHub 下载并安装:https://github.com/winfsp/winfsp/releases", + "rcloneTitle": "需要安装 Rclone", + "rcloneMessage": "在 Linux 系统上,rclone 不随应用程序捆绑。请使用包管理器安装(例如:sudo apt install rclone)或从 https://rclone.org/install/ 下载安装", "dismissForever": "永久关闭" } }, diff --git a/src/stores/rclone.ts b/src/stores/rclone.ts index 1f5be0c..bae12b9 100644 --- a/src/stores/rclone.ts +++ b/src/stores/rclone.ts @@ -7,6 +7,7 @@ export const useRcloneStore = defineStore('rclone', () => { const loading = ref(false) const error = ref() const serviceRunning = ref(false) + const rcloneAvailable = ref(true) const setError = (msg?: string) => (error.value = msg) @@ -65,16 +66,27 @@ export const useRcloneStore = defineStore('rclone', () => { return running } - const init = () => console.log('Initializing Rclone store...') + const checkRcloneAvailable = async () => { + const available = await TauriAPI.rclone.backend.isAvailable().catch(() => false) + rcloneAvailable.value = available + return available + } + + const init = () => { + console.log('Initializing Rclone store...') + checkRcloneAvailable() + } return { loading, error, serviceRunning, + rcloneAvailable, clearError, startRcloneBackend, stopRcloneBackend, checkRcloneBackendStatus, + checkRcloneAvailable, init } }) diff --git a/src/views/MountView.vue b/src/views/MountView.vue index 6d6e9e3..c6adb80 100644 --- a/src/views/MountView.vue +++ b/src/views/MountView.vue @@ -465,10 +465,23 @@ const dismissWinfspTip = () => { localStorage.setItem('winfsp_tip_dismissed', 'true') } +const isLinux = computed(() => { + return typeof OS_PLATFORM !== 'undefined' && OS_PLATFORM === 'linux' +}) +const showRcloneTip = ref(false) + +const dismissRcloneTip = () => { + showRcloneTip.value = false + localStorage.setItem('rclone_tip_dismissed', 'true') +} + const shouldShowWebdavTip = computed(() => { if (isWindows.value) { return !showWinfspTip.value && showWebdavTip.value } + if (isLinux.value && showRcloneTip.value) { + return false + } return showWebdavTip.value }) @@ -482,6 +495,12 @@ onMounted(async () => { rcloneStore.checkRcloneBackendStatus() }, 15 * 1000) rcloneStore.init() + + // Check rclone availability on Linux + if (isLinux.value && !localStorage.getItem('rclone_tip_dismissed')) { + const available = await rcloneStore.checkRcloneAvailable() + showRcloneTip.value = !available + } }) onUnmounted(() => { @@ -580,6 +599,21 @@ onUnmounted(() => { +
+
+
+ +
+
+

{{ t('mount.tip.rcloneTitle') }}

+

{{ t('mount.tip.rcloneMessage') }}

+
+ +
+
+
diff --git a/src/views/css/MountView.css b/src/views/css/MountView.css index 05b1c98..04e8e03 100644 --- a/src/views/css/MountView.css +++ b/src/views/css/MountView.css @@ -1570,6 +1570,88 @@ color: #60a5fa; } +/* Rclone tip - orange theme for Linux */ +.rclone-tip { + position: relative; + z-index: 1; + margin: 0 28px 12px; + background: linear-gradient(135deg, #ffedd5 0%, #fed7aa 100%); + border: 1px solid #f97316; + border-radius: 8px; + box-shadow: 0 1px 4px rgba(249, 115, 22, 0.1); + overflow: hidden; +} + +.rclone-tip .tip-icon { + background: rgba(249, 115, 22, 0.1); +} + +.rclone-tip .tip-icon .icon { + color: #c2410c; +} + +.rclone-tip .tip-title { + color: #9a3412; +} + +.rclone-tip .tip-description { + color: #c2410c; +} + +.rclone-tip .tip-close { + background: rgba(249, 115, 22, 0.1); +} + +.rclone-tip .tip-close:hover { + background: rgba(249, 115, 22, 0.2); +} + +.rclone-tip .tip-close .close-icon { + color: #c2410c; +} + +:root.dark .rclone-tip, +:root.auto.dark .rclone-tip { + background: linear-gradient(135deg, #431407 0%, #7c2d12 100%); + border-color: #f97316; + box-shadow: 0 1px 4px rgba(249, 115, 22, 0.1); +} + +:root.dark .rclone-tip .tip-icon, +:root.auto.dark .rclone-tip .tip-icon { + background: rgba(249, 115, 22, 0.1); +} + +:root.dark .rclone-tip .tip-icon .icon, +:root.auto.dark .rclone-tip .tip-icon .icon { + color: #fb923c; +} + +:root.dark .rclone-tip .tip-title, +:root.auto.dark .rclone-tip .tip-title { + color: #fdba74; +} + +:root.dark .rclone-tip .tip-description, +:root.auto.dark .rclone-tip .tip-description { + color: #fb923c; +} + +:root.dark .rclone-tip .tip-close, +:root.auto.dark .rclone-tip .tip-close { + background: rgba(249, 115, 22, 0.1); +} + +:root.dark .rclone-tip .tip-close:hover, +:root.auto.dark .rclone-tip .tip-close:hover { + background: rgba(249, 115, 22, 0.2); +} + +:root.dark .rclone-tip .tip-close .close-icon, +:root.auto.dark .rclone-tip .tip-close .close-icon { + color: #fb923c; +} + @media (max-width: 1024px) { .header-content { grid-template-columns: 1fr; From 009c871939dabf266833e42a47fe12196479dc20 Mon Sep 17 00:00:00 2001 From: Suyunmeng Date: Tue, 2 Dec 2025 22:53:32 +0800 Subject: [PATCH 3/7] fix(deps): resolve security vulnerabilities in dependencies - Change overrides to resolutions (yarn compatibility) - Add js-yaml >=4.1.1 to fix prototype pollution vulnerability - Add glob >=10.5.0 to fix command injection vulnerability - Keep tmp >=0.2.4 to fix arbitrary file write vulnerability --- package.json | 6 +- yarn.lock | 381 +++++++++++++++++---------------------------------- 2 files changed, 132 insertions(+), 255 deletions(-) diff --git a/package.json b/package.json index eee7f95..b3cb251 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,9 @@ "vue-eslint-parser": "^10.2.0", "vue-tsc": "^3.0.6" }, - "overrides": { - "tmp": "^0.2.4" + "resolutions": { + "tmp": "^0.2.4", + "js-yaml": "^4.1.1", + "glob": "^10.5.0" } } diff --git a/yarn.lock b/yarn.lock index 93429e1..9a8a722 100644 --- a/yarn.lock +++ b/yarn.lock @@ -100,7 +100,7 @@ "@commitlint/rules" "^19.8.1" "@commitlint/types" "^19.8.1" -"@commitlint/load@^19.8.1", "@commitlint/load@>6.1.1": +"@commitlint/load@>6.1.1", "@commitlint/load@^19.8.1": version "19.8.1" resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-19.8.1.tgz" integrity sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A== @@ -197,16 +197,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz" integrity sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA== -"@esbuild/android-arm@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.5.tgz" - integrity sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA== - "@esbuild/android-arm64@0.25.5": version "0.25.5" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz" integrity sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg== +"@esbuild/android-arm@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.5.tgz" + integrity sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA== + "@esbuild/android-x64@0.25.5": version "0.25.5" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.5.tgz" @@ -232,16 +232,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz" integrity sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw== -"@esbuild/linux-arm@0.25.5": - version "0.25.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz" - integrity sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw== - "@esbuild/linux-arm64@0.25.5": version "0.25.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz" integrity sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg== +"@esbuild/linux-arm@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz" + integrity sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw== + "@esbuild/linux-ia32@0.25.5": version "0.25.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz" @@ -596,7 +596,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -872,7 +872,7 @@ dependencies: "@types/node" "*" -"@types/estree@^1.0.6", "@types/estree@1.0.8": +"@types/estree@1.0.8", "@types/estree@^1.0.6": version "1.0.8" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== @@ -882,7 +882,7 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/node@*", "@types/node@^20.19.0 || >=22.12.0", "@types/node@^24.3.0", "@types/node@>=18": +"@types/node@*", "@types/node@^24.3.0": version "24.3.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-24.3.0.tgz" integrity sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow== @@ -901,7 +901,7 @@ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz" integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== -"@typescript-eslint/eslint-plugin@^8.41.0", "@typescript-eslint/eslint-plugin@8.41.0": +"@typescript-eslint/eslint-plugin@8.41.0", "@typescript-eslint/eslint-plugin@^8.41.0": version "8.41.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.41.0.tgz" integrity sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw== @@ -916,7 +916,7 @@ natural-compare "^1.4.0" ts-api-utils "^2.1.0" -"@typescript-eslint/parser@^7.0.0 || ^8.0.0", "@typescript-eslint/parser@^8.41.0", "@typescript-eslint/parser@8.41.0": +"@typescript-eslint/parser@8.41.0", "@typescript-eslint/parser@^8.41.0": version "8.41.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.41.0.tgz" integrity sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg== @@ -944,7 +944,7 @@ "@typescript-eslint/types" "8.41.0" "@typescript-eslint/visitor-keys" "8.41.0" -"@typescript-eslint/tsconfig-utils@^8.41.0", "@typescript-eslint/tsconfig-utils@8.41.0": +"@typescript-eslint/tsconfig-utils@8.41.0", "@typescript-eslint/tsconfig-utils@^8.41.0": version "8.41.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.41.0.tgz" integrity sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw== @@ -960,7 +960,7 @@ debug "^4.3.4" ts-api-utils "^2.1.0" -"@typescript-eslint/types@^8.41.0", "@typescript-eslint/types@8.41.0": +"@typescript-eslint/types@8.41.0", "@typescript-eslint/types@^8.41.0": version "8.41.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.41.0.tgz" integrity sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag== @@ -981,7 +981,7 @@ semver "^7.6.0" ts-api-utils "^2.1.0" -"@typescript-eslint/utils@^8.26.1", "@typescript-eslint/utils@8.41.0": +"@typescript-eslint/utils@8.41.0", "@typescript-eslint/utils@^8.26.1": version "8.41.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.41.0.tgz" integrity sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A== @@ -1038,7 +1038,7 @@ estree-walker "^2.0.2" source-map-js "^1.2.1" -"@vue/compiler-dom@^3.5.0", "@vue/compiler-dom@3.5.19": +"@vue/compiler-dom@3.5.19", "@vue/compiler-dom@^3.5.0": version "3.5.19" resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.19.tgz" integrity sha512-Drs6rPHQZx/pN9S6ml3Z3K/TWCIRPvzG2B/o5kFK9X0MNHt8/E+38tiRfojufrYBfA6FQUFB2qBBRXlcSXWtOA== @@ -1077,12 +1077,7 @@ de-indent "^1.0.2" he "^1.2.0" -"@vue/devtools-api@^6.5.0": - version "6.6.4" - resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz" - integrity sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g== - -"@vue/devtools-api@^6.6.4": +"@vue/devtools-api@^6.5.0", "@vue/devtools-api@^6.6.4": version "6.6.4" resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz" integrity sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g== @@ -1161,17 +1156,25 @@ "@vue/compiler-ssr" "3.5.19" "@vue/shared" "3.5.19" -"@vue/shared@^3.5.0", "@vue/shared@3.5.19": +"@vue/shared@3.5.19", "@vue/shared@^3.5.0": version "3.5.19" resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.19.tgz" integrity sha512-IhXCOn08wgKrLQxRFKKlSacWg4Goi1BolrdEeLYn6tgHjJNXVrWJ5nzoxZqNwl5p88aLlQ8LOaoMa3AYvaKJ/Q== +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.15.0: +acorn@^8.15.0: version "8.15.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== @@ -1216,14 +1219,7 @@ ansi-escapes@^3.2.0: resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-escapes@^4.3.2: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -1271,17 +1267,7 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -ansi-styles@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -ansi-styles@^6.2.1: +ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== @@ -1352,7 +1338,7 @@ braces@^3.0.3: dependencies: fill-range "^7.1.1" -browserslist@^4.25.3, "browserslist@>= 4.21.0": +browserslist@^4.25.3: version "4.25.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.3.tgz" integrity sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ== @@ -1390,16 +1376,7 @@ caniuse-lite@^1.0.30001735: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001737.tgz" integrity sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw== -chalk@^2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^2.4.2: +chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1537,16 +1514,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + colorette@^2.0.20: version "2.0.20" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz" @@ -1641,8 +1618,8 @@ conventional-commits-parser@^5.0.0: resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz" integrity sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA== dependencies: - is-text-path "^2.0.0" JSONStream "^1.3.5" + is-text-path "^2.0.0" meow "^12.0.1" split2 "^4.0.0" @@ -1674,7 +1651,7 @@ cosmiconfig-typescript-loader@^6.1.0: dependencies: jiti "^2.4.1" -cosmiconfig@^9.0.0, cosmiconfig@>=9: +cosmiconfig@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz" integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== @@ -1756,7 +1733,7 @@ de-indent@^1.0.2: resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz" integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== -debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0, debug@^4.4.1, debug@4: +debug@4, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0, debug@^4.4.1: version "4.4.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz" integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== @@ -1923,7 +1900,7 @@ eslint-compat-utils@^0.5.1: dependencies: semver "^7.5.4" -eslint-config-prettier@^10.1.8, "eslint-config-prettier@>= 7.0.0 <10.0.0 || >=10.1.0": +eslint-config-prettier@^10.1.8: version "10.1.8" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz" integrity sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w== @@ -2015,17 +1992,12 @@ eslint-visitor-keys@^3.4.3: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint-visitor-keys@^4.2.0: +eslint-visitor-keys@^4.2.0, eslint-visitor-keys@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz" integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== -eslint-visitor-keys@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz" - integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== - -"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^8.57.0 || ^9.0.0", eslint@^9.34.0, eslint@>=5.0.0, eslint@>=6.0.0, eslint@>=7.0.0, eslint@>=8, eslint@>=8.0.0, eslint@>=8.23.0, eslint@>=9.29.0: +eslint@^9.34.0: version "9.34.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.34.0.tgz" integrity sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg== @@ -2296,15 +2268,6 @@ formdata-polyfill@^4.0.10: dependencies: fetch-blob "^3.1.2" -fs-extra@^11.1.1, fs-extra@^11.3.1: - version "11.3.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.1.tgz" - integrity sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs-extra@9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz" @@ -2315,10 +2278,14 @@ fs-extra@9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fs-extra@^11.1.1, fs-extra@^11.3.1: + version "11.3.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.1.tgz" + integrity sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" @@ -2365,10 +2332,10 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@^10.3.4: - version "10.4.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz" - integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== +glob@7.2.3, glob@^10.3.4, glob@^10.5.0, glob@^7.1.3: + version "10.5.0" + resolved "https://registry.npmmirror.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== dependencies: foreground-child "^3.1.0" jackspeak "^3.1.2" @@ -2377,30 +2344,6 @@ glob@^10.3.4: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - 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" - -glob@7.2.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - 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" - global-directory@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/global-directory/-/global-directory-4.0.1.tgz" @@ -2524,12 +2467,7 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.2.0: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -ignore@^5.3.2: +ignore@^5.2.0, ignore@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== @@ -2562,28 +2500,41 @@ indent-string@^5.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz" integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@^2.0.3, inherits@^2.0.4, inherits@2: +inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz" + integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== + ini@^1.3.4: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -ini@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz" - integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== +inquirer@8.2.5: + version "8.2.5" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz" + integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" inquirer@^12.6.3: version "12.6.3" @@ -2617,27 +2568,6 @@ inquirer@^6.3.1: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@8.2.5: - version "8.2.5" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz" - integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^7.0.0" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz" @@ -2755,7 +2685,7 @@ jackspeak@^3.1.2: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" -jiti@*, jiti@^2.4.1, jiti@>=1.21.0: +jiti@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.4.2.tgz" integrity sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A== @@ -2765,10 +2695,10 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== +js-yaml@^4.1.0, js-yaml@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== dependencies: argparse "^2.0.1" @@ -2821,14 +2751,6 @@ jsonparse@^1.2.0: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz" @@ -2946,7 +2868,7 @@ lodash.upperfirst@^4.3.1: resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz" integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== -lodash@^4.17.12, lodash@^4.17.19, lodash@^4.17.21, lodash@4.17.21: +lodash@4.17.21, lodash@^4.17.12, lodash@^4.17.19, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3010,16 +2932,16 @@ meow@^13.0.0: resolved "https://registry.yarnpkg.com/meow/-/meow-13.2.0.tgz" integrity sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA== -merge@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz" - integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== - merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +merge@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz" + integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== + micromatch@^4.0.2, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz" @@ -3048,13 +2970,6 @@ min-indent@^1.0.1: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz" @@ -3069,16 +2984,16 @@ minimatch@^9.0.4, minimatch@^9.0.5: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - minimist@1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== +minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4, minipass@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz" @@ -3118,11 +3033,6 @@ muggle-string@^0.4.1: resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.4.1.tgz" integrity sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ== -mute-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz" - integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== - mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz" @@ -3133,6 +3043,11 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +mute-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz" + integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== + nano-spawn@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/nano-spawn/-/nano-spawn-1.0.2.tgz" @@ -3206,13 +3121,6 @@ nth-check@^2.1.1: dependencies: boolbase "^1.0.0" -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz" @@ -3351,11 +3259,6 @@ path-exists@^5.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz" integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz" @@ -3384,16 +3287,16 @@ picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -"picomatch@^3 || ^4", picomatch@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz" - integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== - picomatch@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz" integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== +picomatch@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + pidtree@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz" @@ -3440,7 +3343,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^3.6.2, prettier@>=3.0.0: +prettier@^3.6.2: version "3.6.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz" integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ== @@ -3579,12 +3482,7 @@ rollup@^4.43.0: "@rollup/rollup-win32-x64-msvc" "4.48.1" fsevents "~2.3.2" -run-async@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-async@^2.4.0: +run-async@^2.2.0, run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== @@ -3719,13 +3617,6 @@ stdin-discarder@^0.2.2: resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.2.2.tgz" integrity sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ== -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - string-argv@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz" @@ -3748,16 +3639,7 @@ string-width@^2.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -3775,7 +3657,7 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string-width@^7.0.0: +string-width@^7.0.0, string-width@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz" integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== @@ -3784,14 +3666,12 @@ string-width@^7.0.0: get-east-asian-width "^1.0.0" strip-ansi "^7.1.0" -string-width@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz" - integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: - emoji-regex "^10.3.0" - get-east-asian-width "^1.0.0" - strip-ansi "^7.1.0" + safe-buffer "~5.2.0" "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" @@ -3840,7 +3720,7 @@ strip-indent@^4.0.0: dependencies: min-indent "^1.0.1" -strip-json-comments@^3.1.1, strip-json-comments@3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -3903,7 +3783,7 @@ text-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.4.0.tgz" integrity sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== -through@^2.3.6, "through@>=2.2.7 <3": +"through@>=2.2.7 <3", through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== @@ -3921,7 +3801,7 @@ tinyglobby@^0.2.15: fdir "^6.5.0" picomatch "^4.0.3" -tmp@^0.2.4: +tmp@^0.0.33, tmp@^0.2.4: version "0.2.5" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz" integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== @@ -3977,7 +3857,7 @@ typescript-eslint@^8.41.0: "@typescript-eslint/typescript-estree" "8.41.0" "@typescript-eslint/utils" "8.41.0" -typescript@*, typescript@^5.2.2, typescript@^5.8.3, typescript@>=4.0.0, typescript@>=4.4.4, typescript@>=4.8.4, "typescript@>=4.8.4 <6.0.0", typescript@>=4.9.5, typescript@>=5, typescript@>=5.0.0: +typescript@^5.2.2, typescript@^5.8.3: version "5.8.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz" integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== @@ -4042,7 +3922,7 @@ validate-npm-package-license@^3.0.4: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -"vite@^5.0.0 || ^6.0.0 || ^7.0.0", vite@^7.1.11: +vite@^7.1.11: version "7.1.12" resolved "https://registry.yarnpkg.com/vite/-/vite-7.1.12.tgz" integrity sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug== @@ -4061,7 +3941,7 @@ vscode-uri@^3.0.8: resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.1.0.tgz" integrity sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ== -vue-eslint-parser@^10.0.0, vue-eslint-parser@^10.2.0: +vue-eslint-parser@^10.2.0: version "10.2.0" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-10.2.0.tgz" integrity sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw== @@ -4097,7 +3977,7 @@ vue-tsc@^3.0.6: "@volar/typescript" "2.4.23" "@vue/language-core" "3.0.6" -"vue@^2.7.0 || ^3.5.11", vue@^3.0.0, vue@^3.2.0, vue@^3.2.25, vue@^3.5.19, vue@>=3.0.1, vue@3.5.19: +vue@^3.5.19: version "3.5.19" resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.19.tgz" integrity sha512-ZRh0HTmw6KChRYWgN8Ox/wi7VhpuGlvMPrHjIsdRbzKNgECFLzy+dKL5z9yGaBSjCpmcfJCbh3I1tNSRmBz2tg== @@ -4194,11 +4074,6 @@ wrap-ansi@^9.0.0: string-width "^7.0.0" strip-ansi "^7.1.0" -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - xml-name-validator@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz" @@ -4214,7 +4089,7 @@ yallist@^5.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz" integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== -yaml@^2.4.2, yaml@^2.8.1: +yaml@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.1.tgz" integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw== From 217940e37fb9f6e7cdb1c17cbd2de88db1802e3c Mon Sep 17 00:00:00 2001 From: Suyunmeng Date: Wed, 3 Dec 2025 20:42:20 +0800 Subject: [PATCH 4/7] feat(bundle): add externalBin config for Windows and macOS - Add externalBin to tauri.windows.conf.json with openlist and rclone - Add externalBin to tauri.macos.conf.json with openlist and rclone - Ensures rclone is properly bundled with the app on these platforms - Linux already has externalBin but excludes rclone (installed via package manager) --- src-tauri/Cargo.lock | 2 +- src-tauri/src/utils/path.rs | 6 +++--- src-tauri/tauri.macos.conf.json | 9 ++++++++- src-tauri/tauri.windows.conf.json | 9 ++++++++- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 9ba00d8..f9da55f 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -2940,7 +2940,7 @@ dependencies = [ [[package]] name = "openlist-desktop" -version = "0.7.0" +version = "0.8.0" dependencies = [ "anyhow", "base64 0.22.1", diff --git a/src-tauri/src/utils/path.rs b/src-tauri/src/utils/path.rs index a58f742..f889fd5 100644 --- a/src-tauri/src/utils/path.rs +++ b/src-tauri/src/utils/path.rs @@ -115,13 +115,13 @@ pub fn get_openlist_binary_path() -> Result { } pub fn get_rclone_binary_path() -> Result { - // First, check if rclone is bundled with the app + // First, check if rclone is bundled with the app (Windows/macOS) if let Ok(bundled_path) = get_binary_path("rclone", "Rclone") { return Ok(bundled_path); } - // Fallback: find rclone in system PATH (Linux/macOS) - #[cfg(not(target_os = "windows"))] + // Fallback: find rclone in system PATH (Linux only) + #[cfg(target_os = "linux")] { use std::process::Command; if let Ok(output) = Command::new("which").arg("rclone").output() diff --git a/src-tauri/tauri.macos.conf.json b/src-tauri/tauri.macos.conf.json index 0d5c2a3..b04f983 100644 --- a/src-tauri/tauri.macos.conf.json +++ b/src-tauri/tauri.macos.conf.json @@ -29,6 +29,13 @@ "exceptionDomain": "", "signingIdentity": null, "entitlements": "packages/macos/entitlements.plist" - } + }, + "externalBin": [ + "./binary/install-openlist-service", + "./binary/uninstall-openlist-service", + "./binary/openlist-desktop-service", + "./binary/openlist", + "./binary/rclone" + ] } } diff --git a/src-tauri/tauri.windows.conf.json b/src-tauri/tauri.windows.conf.json index d39acd2..265224e 100644 --- a/src-tauri/tauri.windows.conf.json +++ b/src-tauri/tauri.windows.conf.json @@ -18,6 +18,13 @@ "installMode": "perMachine", "template": "./packages/windows/installer.nsi" } - } + }, + "externalBin": [ + "./binary/install-openlist-service", + "./binary/uninstall-openlist-service", + "./binary/openlist-desktop-service", + "./binary/openlist", + "./binary/rclone" + ] } } From 8048e928b771499659459098034f327cc1df7b44 Mon Sep 17 00:00:00 2001 From: Suyunmeng Date: Wed, 3 Dec 2025 20:57:57 +0800 Subject: [PATCH 5/7] refactor(linux): use system rclone only on Linux - Windows/macOS: get rclone from bundled binary - Linux: get rclone from system PATH only (not bundled) - Update error message to suggest package manager installation --- src-tauri/src/utils/path.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src-tauri/src/utils/path.rs b/src-tauri/src/utils/path.rs index f889fd5..eaf4f3d 100644 --- a/src-tauri/src/utils/path.rs +++ b/src-tauri/src/utils/path.rs @@ -115,12 +115,13 @@ pub fn get_openlist_binary_path() -> Result { } pub fn get_rclone_binary_path() -> Result { - // First, check if rclone is bundled with the app (Windows/macOS) - if let Ok(bundled_path) = get_binary_path("rclone", "Rclone") { - return Ok(bundled_path); + // Windows/macOS: rclone is bundled with the app + #[cfg(not(target_os = "linux"))] + { + return get_binary_path("rclone", "Rclone"); } - // Fallback: find rclone in system PATH (Linux only) + // Linux: rclone is not bundled, find it in system PATH #[cfg(target_os = "linux")] { use std::process::Command; @@ -132,9 +133,8 @@ pub fn get_rclone_binary_path() -> Result { return Ok(PathBuf::from(path_str)); } } + Err("Rclone not found. Please install it via your package manager (e.g., apt install rclone)".to_string()) } - - Err("Rclone not found. Please install it from https://rclone.org/install/".to_string()) } pub fn get_app_config_dir() -> Result { From 3ee82d75456047b86c8c7457acc60b21245d177d Mon Sep 17 00:00:00 2001 From: Suyunmeng Date: Wed, 3 Dec 2025 21:10:47 +0800 Subject: [PATCH 6/7] style(rust): fix cargo fmt long string formatting --- src-tauri/src/utils/path.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src-tauri/src/utils/path.rs b/src-tauri/src/utils/path.rs index eaf4f3d..d64ef5e 100644 --- a/src-tauri/src/utils/path.rs +++ b/src-tauri/src/utils/path.rs @@ -133,7 +133,11 @@ pub fn get_rclone_binary_path() -> Result { return Ok(PathBuf::from(path_str)); } } - Err("Rclone not found. Please install it via your package manager (e.g., apt install rclone)".to_string()) + Err( + "Rclone not found. Please install it via your package manager (e.g., apt install \ + rclone)" + .to_string(), + ) } } From 1f575d65f31f6ae1b38a44425c973eb92d1acc49 Mon Sep 17 00:00:00 2001 From: Suyunmeng Date: Wed, 3 Dec 2025 21:13:52 +0800 Subject: [PATCH 7/7] fix(clippy): remove needless return statement --- src-tauri/src/utils/path.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-tauri/src/utils/path.rs b/src-tauri/src/utils/path.rs index d64ef5e..bede4d3 100644 --- a/src-tauri/src/utils/path.rs +++ b/src-tauri/src/utils/path.rs @@ -118,7 +118,7 @@ pub fn get_rclone_binary_path() -> Result { // Windows/macOS: rclone is bundled with the app #[cfg(not(target_os = "linux"))] { - return get_binary_path("rclone", "Rclone"); + get_binary_path("rclone", "Rclone") } // Linux: rclone is not bundled, find it in system PATH