mirror of
https://github.com/nimbold/Firelink.git
synced 2026-10-25 13:10:50 +00:00
fix(deps): refresh locked packages and Deno runtime
- update Lucide, Vitest, compatible Cargo locks, and Deno 2.9.7 payloads - remove unused frontend build dependencies - make update checks fail closed with independent provider and hash status rows - preserve FFmpeg, yt-dlp, and patched Aria2 payloads until verified artifacts exist
This commit is contained in:
@@ -8,9 +8,9 @@
|
||||
"sha256": "30b4c14aafab6082becff7881e41b76df46dc43ea7633479410a91e29da492bf"
|
||||
},
|
||||
"deno": {
|
||||
"version": "2.9.6",
|
||||
"url": "https://github.com/denoland/deno/releases/download/v2.9.6/deno-x86_64-pc-windows-msvc.zip",
|
||||
"sha256": "15e5300b0ba3c3695a7621d90160a746ec9e710228cee639afa9d580f6e3cd11"
|
||||
"version": "2.9.7",
|
||||
"url": "https://github.com/denoland/deno/releases/download/v2.9.7/deno-x86_64-pc-windows-msvc.zip",
|
||||
"sha256": "a0c3101b4158d1dfb7d6a78a7bf0f3de80c96bb423c152beec8beb22786f2238"
|
||||
},
|
||||
"ffmpeg": {
|
||||
"version": "9.0.1-29-gad500d59cb",
|
||||
@@ -40,9 +40,9 @@
|
||||
"sha256": "32e72032766bef9199d99d15beb69fd52e46df8f8b06f0d8745db59e04d339e9"
|
||||
},
|
||||
"deno": {
|
||||
"version": "2.9.6",
|
||||
"url": "https://github.com/denoland/deno/releases/download/v2.9.6/deno-x86_64-unknown-linux-gnu.zip",
|
||||
"sha256": "394f07f4da2bebe6ce6f1e7ce0fa16429b29b08c35e3fac3fe25972676dff4b2"
|
||||
"version": "2.9.7",
|
||||
"url": "https://github.com/denoland/deno/releases/download/v2.9.7/deno-x86_64-unknown-linux-gnu.zip",
|
||||
"sha256": "c6527f24f4b16031d3ae4fa9f658d5f11534c8d84ce7dc8502420280919c3490"
|
||||
},
|
||||
"ffmpeg": {
|
||||
"version": "9.0.1-29-gad500d59cb",
|
||||
|
||||
+2
-2
@@ -32,10 +32,10 @@
|
||||
"sha256": "393e4c395020a1cb7cbd77fbe00599ce69d1c6466fee0dbd59d13f86a81a1611"
|
||||
},
|
||||
"deno": {
|
||||
"version": "2.9.6",
|
||||
"version": "2.9.7",
|
||||
"source": "https://github.com/denoland/deno",
|
||||
"build": "official aarch64-apple-darwin executable",
|
||||
"sha256": "b3ac3bd206e48c26026cadd80c1367e96c149f9c66130952382a642b09fa8a71"
|
||||
"sha256": "b73737579d5a84c160e3316487594783fa5c15f4e13252a6a07050b755317f1a"
|
||||
}
|
||||
},
|
||||
"runtimeTrees": {
|
||||
|
||||
Generated
+28
-221
@@ -15,7 +15,6 @@
|
||||
"@fontsource-variable/outfit": "^5.3.0",
|
||||
"@fontsource-variable/roboto": "^5.3.0",
|
||||
"@fontsource-variable/vazirmatn": "^5.3.0",
|
||||
"@formkit/auto-animate": "^0.10.0",
|
||||
"@tailwindcss/vite": "^4.3.3",
|
||||
"@tauri-apps/api": "^2.11.1",
|
||||
"@tauri-apps/plugin-clipboard-manager": "^2.3.3",
|
||||
@@ -25,7 +24,7 @@
|
||||
"@tauri-apps/plugin-notification": "^2.4.0",
|
||||
"@tauri-apps/plugin-opener": "^2.5.5",
|
||||
"i18next": "^26.4.2",
|
||||
"lucide-react": "^1.46.0",
|
||||
"lucide-react": "^1.47.0",
|
||||
"react": "^19.3.0",
|
||||
"react-dom": "^19.3.0",
|
||||
"react-i18next": "^17.0.14",
|
||||
@@ -36,12 +35,10 @@
|
||||
"@types/react": "^19.3.0",
|
||||
"@types/react-dom": "^19.3.0",
|
||||
"@vitejs/plugin-react": "^6.1.1",
|
||||
"autoprefixer": "^10.6.0",
|
||||
"postcss": "^8.5.28",
|
||||
"tailwindcss": "^4.3.3",
|
||||
"typescript": "^7.0.2",
|
||||
"vite": "^8.3.0",
|
||||
"vitest": "^5.0.0"
|
||||
"vitest": "^5.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=22.12"
|
||||
@@ -110,12 +107,6 @@
|
||||
"url": "https://github.com/sponsors/ayuhito"
|
||||
}
|
||||
},
|
||||
"node_modules/@formkit/auto-animate": {
|
||||
"version": "0.10.0",
|
||||
"resolved": "https://registry.npmjs.org/@formkit/auto-animate/-/auto-animate-0.10.0.tgz",
|
||||
"integrity": "sha512-KGomRttjUfORuPUaR/ZGQw+6xfMrTM+sxnILv7JAd9AmabU9rg9i6gF/iC0Ih+QpKCubJpCA/1DX9UHKE8cX+A==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@jridgewell/gen-mapping": {
|
||||
"version": "0.3.13",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
|
||||
@@ -146,9 +137,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/sourcemap-codec": {
|
||||
"version": "1.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
|
||||
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz",
|
||||
"integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@jridgewell/trace-mapping": {
|
||||
@@ -1455,14 +1446,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/mocker": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.0.tgz",
|
||||
"integrity": "sha512-66PGTMIiVJP3t4a5yxU9qPtf7MdTBs8jmToMvy+HVflB3Yy13WJZTtPePdvU+wjRV02SKK5doLbSA6o9pwOmiA==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.1.tgz",
|
||||
"integrity": "sha512-6K1DoBNAPGvuOcSsGA4D6x+5zEEff/KmOOP3uetT2TrGpVfI+HRHRnJJfKi5ib/g1vx8IYHQD8s0pbJz8WQI7Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/trace-mapping": "0.3.31",
|
||||
"@vitest/spy": "5.0.0",
|
||||
"@vitest/spy": "5.0.1",
|
||||
"estree-walker": "^3.0.3",
|
||||
"magic-string": "^1.2.3"
|
||||
},
|
||||
@@ -1483,19 +1474,19 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/mocker/node_modules/magic-string": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.2.3.tgz",
|
||||
"integrity": "sha512-Bpb0W2TbLKOZ7vJnOUnVRGq3WL2p+ISV29M6hYPL1AFCpyKZpdr5ytiXoTSSxRVhg8YW7f65+6gbG8WG6PCa/g==",
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.4.1.tgz",
|
||||
"integrity": "sha512-8lyCu36ErXR0J9uaGKlKQoiLZKmtI63YGLE8G2o9jyRPdr4X47LusSOwgOJOzcVtp81fTAAjxR7BwKz682Jhow==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/sourcemap-codec": "^1.5.5"
|
||||
"@jridgewell/sourcemap-codec": "^1.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/spy": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.0.tgz",
|
||||
"integrity": "sha512-uy+luWBAPw9XfthoHi5AkfHUnuPYEESjl0p/r+meoBnU8bxg5GDQ3Ey8MjcJ6sqahkL4PFyrvfMJJBw7LbU06g==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.1.tgz",
|
||||
"integrity": "sha512-rbto/mF/SGERxEgYOek7Xm6B9b+y+mVoo+f4b2LymYO8zM1b7uB5nHuhVMTP2hxdzgxvGiZYGxGIaMvL5y180Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
@@ -1512,111 +1503,6 @@
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/autoprefixer": {
|
||||
"version": "10.6.0",
|
||||
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.6.0.tgz",
|
||||
"integrity": "sha512-A26d6qs9kqGgkmImIXMYvXTzqb4Qv7AVgpY1NXzr9Y659J8qHHnLOO/zE8ewIGFMprOolAoRAQYDgNryXIJKBw==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/postcss/"
|
||||
},
|
||||
{
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/autoprefixer"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"browserslist": "^4.28.9",
|
||||
"caniuse-lite": "^1.0.30001810",
|
||||
"fraction.js": "^5.3.4",
|
||||
"picocolors": "^1.1.1",
|
||||
"postcss-value-parser": "^4.2.0"
|
||||
},
|
||||
"bin": {
|
||||
"autoprefixer": "bin/autoprefixer"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || >=14"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"postcss": "^8.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/baseline-browser-mapping": {
|
||||
"version": "2.11.21",
|
||||
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.21.tgz",
|
||||
"integrity": "sha512-uh8vpY/1/YyFkunIDFH/12p7/7VdPKA1hejMVEbdkEaWnUz0Hesvx5EbiU6XxjyHZIOju+ZMbQJkRh+es3/spQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"baseline-browser-mapping": "dist/cli.cjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/browserslist": {
|
||||
"version": "4.28.9",
|
||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.9.tgz",
|
||||
"integrity": "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"baseline-browser-mapping": "^2.11.20",
|
||||
"caniuse-lite": "^1.0.30001810",
|
||||
"electron-to-chromium": "^1.5.420",
|
||||
"node-releases": "^2.0.54",
|
||||
"update-browserslist-db": "^1.3.2"
|
||||
},
|
||||
"bin": {
|
||||
"browserslist": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
|
||||
}
|
||||
},
|
||||
"node_modules/caniuse-lite": {
|
||||
"version": "1.0.30001810",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz",
|
||||
"integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "CC-BY-4.0"
|
||||
},
|
||||
"node_modules/chai": {
|
||||
"version": "6.2.2",
|
||||
"resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz",
|
||||
@@ -1643,13 +1529,6 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/electron-to-chromium": {
|
||||
"version": "1.5.422",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.422.tgz",
|
||||
"integrity": "sha512-UvA/32XqrLDdZSn7Jllo1AYNcWji/G0d5M0GTViE7KoGBiMunw3a34Sb2KO4ZZyrSEhqsxFoVhWWJshdyfKqJA==",
|
||||
"dev": true,
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/enhanced-resolve": {
|
||||
"version": "5.24.5",
|
||||
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz",
|
||||
@@ -1670,16 +1549,6 @@
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/escalade": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
|
||||
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/estree-walker": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
|
||||
@@ -1717,20 +1586,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/fraction.js": {
|
||||
"version": "5.3.4",
|
||||
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz",
|
||||
"integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": "*"
|
||||
},
|
||||
"funding": {
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/rawify"
|
||||
}
|
||||
},
|
||||
"node_modules/fsevents": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
||||
@@ -2059,9 +1914,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/lucide-react": {
|
||||
"version": "1.46.0",
|
||||
"resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.46.0.tgz",
|
||||
"integrity": "sha512-Bv+FZXgZPrxc/NCl1e7JJVQFLdiCxYgxNVhqoV7X0p6I8ADJo8DxBnK1auH0fZz4AmqOJ3jgneL4f1i8LJQRAA==",
|
||||
"version": "1.47.0",
|
||||
"resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.47.0.tgz",
|
||||
"integrity": "sha512-o8C23aXpNQypRY73W7fW02EyvWJinEMXgKeGjFoKym0zj3Q73hD97A1IQps1g8C14HTGsOpZL0Am+xjfgFZAbg==",
|
||||
"license": "ISC",
|
||||
"peerDependencies": {
|
||||
"react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
@@ -2094,16 +1949,6 @@
|
||||
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/node-releases": {
|
||||
"version": "2.0.54",
|
||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.54.tgz",
|
||||
"integrity": "sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/obug": {
|
||||
"version": "2.1.4",
|
||||
"resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz",
|
||||
@@ -2164,13 +2009,6 @@
|
||||
"node": "^10 || ^12 || >=14"
|
||||
}
|
||||
},
|
||||
"node_modules/postcss-value-parser": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
|
||||
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/react": {
|
||||
"version": "19.3.0",
|
||||
"resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz",
|
||||
@@ -2378,37 +2216,6 @@
|
||||
"@typescript/typescript-win32-x64": "7.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/update-browserslist-db": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.2.tgz",
|
||||
"integrity": "sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"escalade": "^3.2.0",
|
||||
"picocolors": "^1.1.1"
|
||||
},
|
||||
"bin": {
|
||||
"update-browserslist-db": "cli.js"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"browserslist": ">= 4.21.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",
|
||||
@@ -2757,14 +2564,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/vitest": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/vitest/-/vitest-5.0.0.tgz",
|
||||
"integrity": "sha512-gpsMNoRhMjMktVxPtstOH4/PJuPyovVaMDr4oDilXaGH1EcqM2OE96SoHT2VIQ6fTGtTjqmHDrEu2X9RQiXf8Q==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/vitest/-/vitest-5.0.1.tgz",
|
||||
"integrity": "sha512-iA95lQbKEkvrtTkdAgnWbXfbipWiiWe/hDl2P5tMi6WFwD76G0NxXAGp/M9EOcYupeGJRr6wppMc7CoA41TQjg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/chai": "^5.2.2",
|
||||
"@vitest/mocker": "5.0.0",
|
||||
"@vitest/mocker": "5.0.1",
|
||||
"chai": "^6.2.2",
|
||||
"es-module-lexer": "^2.3.2",
|
||||
"expect-type": "^1.4.0",
|
||||
@@ -2790,12 +2597,12 @@
|
||||
"@edge-runtime/vm": "*",
|
||||
"@opentelemetry/api": "^1.9.0",
|
||||
"@types/node": "^22.0.0 || >=24.0.0",
|
||||
"@vitest/browser-playwright": "5.0.0",
|
||||
"@vitest/browser-preview": "5.0.0",
|
||||
"@vitest/browser-playwright": "5.0.1",
|
||||
"@vitest/browser-preview": "5.0.1",
|
||||
"@vitest/browser-webdriverio": "^5.0.0-beta.5 || >=5.0.0",
|
||||
"@vitest/coverage-istanbul": "5.0.0",
|
||||
"@vitest/coverage-v8": "5.0.0",
|
||||
"@vitest/ui": "5.0.0",
|
||||
"@vitest/coverage-istanbul": "5.0.1",
|
||||
"@vitest/coverage-v8": "5.0.1",
|
||||
"@vitest/ui": "5.0.1",
|
||||
"happy-dom": "*",
|
||||
"jsdom": "*",
|
||||
"vite": "^6.4.0 || ^7.0.0 || ^8.0.0"
|
||||
|
||||
+2
-5
@@ -51,7 +51,6 @@
|
||||
"@fontsource-variable/outfit": "^5.3.0",
|
||||
"@fontsource-variable/roboto": "^5.3.0",
|
||||
"@fontsource-variable/vazirmatn": "^5.3.0",
|
||||
"@formkit/auto-animate": "^0.10.0",
|
||||
"@tailwindcss/vite": "^4.3.3",
|
||||
"@tauri-apps/api": "^2.11.1",
|
||||
"@tauri-apps/plugin-clipboard-manager": "^2.3.3",
|
||||
@@ -61,7 +60,7 @@
|
||||
"@tauri-apps/plugin-notification": "^2.4.0",
|
||||
"@tauri-apps/plugin-opener": "^2.5.5",
|
||||
"i18next": "^26.4.2",
|
||||
"lucide-react": "^1.46.0",
|
||||
"lucide-react": "^1.47.0",
|
||||
"react": "^19.3.0",
|
||||
"react-dom": "^19.3.0",
|
||||
"react-i18next": "^17.0.14",
|
||||
@@ -72,11 +71,9 @@
|
||||
"@types/react": "^19.3.0",
|
||||
"@types/react-dom": "^19.3.0",
|
||||
"@vitejs/plugin-react": "^6.1.1",
|
||||
"autoprefixer": "^10.6.0",
|
||||
"postcss": "^8.5.28",
|
||||
"tailwindcss": "^4.3.3",
|
||||
"typescript": "^7.0.2",
|
||||
"vite": "^8.3.0",
|
||||
"vitest": "^5.0.0"
|
||||
"vitest": "^5.0.1"
|
||||
}
|
||||
}
|
||||
|
||||
+188
-56
@@ -323,6 +323,18 @@ function printCargoReport(updates) {
|
||||
return updates.length;
|
||||
}
|
||||
|
||||
function hasUpdateCheckFailures({
|
||||
outdatedCount,
|
||||
engineIssueCount,
|
||||
providerFailures,
|
||||
providerBehind,
|
||||
}) {
|
||||
return outdatedCount > 0
|
||||
|| engineIssueCount > 0
|
||||
|| providerFailures.length > 0
|
||||
|| providerBehind.length > 0;
|
||||
}
|
||||
|
||||
function printNpmReport(label, outdated) {
|
||||
const entries = Object.entries(outdated);
|
||||
if (!entries.length) {
|
||||
@@ -370,14 +382,6 @@ function packagedEngineVersions(engineLock) {
|
||||
return rows;
|
||||
}
|
||||
|
||||
function unavailableLatestVersionError(target, engine, targetSpecific) {
|
||||
const error = new Error(
|
||||
`${targetSpecific ? 'Latest provider version' : 'Latest version'} is unavailable for ${target} ${engine}`
|
||||
);
|
||||
error.code = 'LATEST_VERSION_UNAVAILABLE';
|
||||
return error;
|
||||
}
|
||||
|
||||
function checkRows(
|
||||
rows,
|
||||
latestByEngine,
|
||||
@@ -386,17 +390,74 @@ function checkRows(
|
||||
targetSpecificEngines = new Set(),
|
||||
latestHashesByTargetEngine = {},
|
||||
latestHashesByUrl = {},
|
||||
providerStatusesByTargetEngine = {},
|
||||
providerStatusesByEngine = {},
|
||||
) {
|
||||
let outdated = 0;
|
||||
const report = {
|
||||
rows: [],
|
||||
counts: {
|
||||
current: 0,
|
||||
outdated: 0,
|
||||
'hash-mismatch': 0,
|
||||
'provider-behind': 0,
|
||||
unverified: 0,
|
||||
},
|
||||
};
|
||||
|
||||
const providerStatus = value => {
|
||||
if (!value) return undefined;
|
||||
if (typeof value === 'string') return { status: value };
|
||||
return value;
|
||||
};
|
||||
|
||||
const printRow = rowResult => {
|
||||
const wanted = rowResult.latest || 'unavailable';
|
||||
console.log(` ${rowResult.target} ${rowResult.engine}: ${rowResult.current} -> ${wanted} ${rowResult.status}`);
|
||||
if (rowResult.reason) console.log(` reason: ${rowResult.reason}`);
|
||||
if (rowResult.source) console.log(` source: ${rowResult.source}`);
|
||||
if (rowResult.hash) {
|
||||
console.log(` source sha256: ${rowResult.hash.current || 'missing'} -> ${rowResult.hash.latest || 'unavailable'}`);
|
||||
}
|
||||
};
|
||||
|
||||
for (const row of rows) {
|
||||
const targetSpecific = targetSpecificEngines.has(row.engine);
|
||||
const targetKey = `${row.target}:${row.engine}`;
|
||||
const provider = providerStatus(
|
||||
providerStatusesByTargetEngine[targetKey] || providerStatusesByEngine[row.engine],
|
||||
);
|
||||
const latest = targetSpecific
|
||||
? latestByTargetEngine[targetKey]
|
||||
: latestByTargetEngine[targetKey] || latestByEngine[row.engine];
|
||||
if (typeof latest !== 'string' || !latest.trim()) {
|
||||
throw unavailableLatestVersionError(row.target, row.engine, targetSpecific);
|
||||
|
||||
if (provider?.status === 'provider-behind' || provider?.status === 'unverified') {
|
||||
const rowResult = {
|
||||
...row,
|
||||
current: normalizeVersion(row.version),
|
||||
latest: latest ? normalizeVersion(latest) : undefined,
|
||||
status: provider.status,
|
||||
reason: provider.detail,
|
||||
};
|
||||
report.rows.push(rowResult);
|
||||
report.counts[provider.status] += 1;
|
||||
printRow(rowResult);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (typeof latest !== 'string' || !latest.trim()) {
|
||||
const rowResult = {
|
||||
...row,
|
||||
current: normalizeVersion(row.version),
|
||||
latest: undefined,
|
||||
status: 'unverified',
|
||||
reason: `${targetSpecific ? 'target-specific provider' : 'latest provider'} version is unavailable`,
|
||||
};
|
||||
report.rows.push(rowResult);
|
||||
report.counts.unverified += 1;
|
||||
printRow(rowResult);
|
||||
continue;
|
||||
}
|
||||
|
||||
const current = normalizeVersion(row.version);
|
||||
const wanted = normalizeVersion(latest);
|
||||
const latestUrl = latestUrlsByTargetEngine[targetKey];
|
||||
@@ -405,20 +466,35 @@ function checkRows(
|
||||
const latestHash = latestHashesByTargetEngine[targetKey] || latestHashesByUrl[row.url];
|
||||
const checkedHash = row.sourceSha256 || row.sha256;
|
||||
const currentHash = typeof checkedHash === 'string' ? checkedHash.toLowerCase() : '';
|
||||
const hashOutdated = Boolean(latestHash && currentHash !== latestHash);
|
||||
const hashMismatch = Boolean(latestHash && currentHash !== latestHash);
|
||||
const hashRequired = Object.hasOwn(row, 'sourceSha256') || Object.hasOwn(row, 'sha256');
|
||||
const hashUnavailable = Boolean(hashRequired && !latestHash);
|
||||
const status = versionOutdated
|
||||
? 'outdated'
|
||||
: sourceOutdated
|
||||
? 'source-outdated'
|
||||
: hashOutdated
|
||||
? 'hash-outdated'
|
||||
: 'current';
|
||||
if (status !== 'current') outdated += 1;
|
||||
console.log(` ${row.target} ${row.engine}: ${current} -> ${wanted} ${status}`);
|
||||
if (sourceOutdated) console.log(` source: ${row.url} -> ${latestUrl}`);
|
||||
if (hashOutdated) console.log(` source sha256: ${checkedHash || 'missing'} -> ${latestHash}`);
|
||||
? 'outdated'
|
||||
: hashMismatch
|
||||
? 'hash-mismatch'
|
||||
: hashUnavailable
|
||||
? 'unverified'
|
||||
: 'current';
|
||||
|
||||
const rowResult = {
|
||||
...row,
|
||||
current,
|
||||
latest: wanted,
|
||||
status,
|
||||
source: sourceOutdated ? `${row.url} -> ${latestUrl}` : undefined,
|
||||
hash: hashMismatch || hashUnavailable
|
||||
? { current: checkedHash, latest: latestHash }
|
||||
: undefined,
|
||||
reason: hashUnavailable ? 'provider did not supply a verifiable SHA-256 digest' : undefined,
|
||||
};
|
||||
report.rows.push(rowResult);
|
||||
report.counts[status] += 1;
|
||||
printRow(rowResult);
|
||||
}
|
||||
return outdated;
|
||||
return report;
|
||||
}
|
||||
|
||||
async function main() {
|
||||
@@ -433,15 +509,24 @@ async function main() {
|
||||
|
||||
const ffmpegStablePromise = latestFfmpegStable();
|
||||
const providerChecks = [
|
||||
['yt-dlp latest release', () => githubLatest('yt-dlp/yt-dlp')],
|
||||
['Deno latest release', () => githubLatest('denoland/deno')],
|
||||
['aria2 latest release', () => githubLatest('aria2/aria2')],
|
||||
['yt-dlp latest release', async () => ({
|
||||
status: 'available',
|
||||
value: await githubLatest('yt-dlp/yt-dlp'),
|
||||
})],
|
||||
['Deno latest release', async () => ({
|
||||
status: 'available',
|
||||
value: await githubLatest('denoland/deno'),
|
||||
})],
|
||||
['aria2 latest release', async () => ({
|
||||
status: 'available',
|
||||
value: await githubLatest('aria2/aria2'),
|
||||
})],
|
||||
[
|
||||
'FFmpeg stable release',
|
||||
async () => {
|
||||
const version = await ffmpegStablePromise;
|
||||
if (!version) throw new Error('FFmpeg release provider response has no usable version');
|
||||
return version;
|
||||
return { status: 'available', value: version };
|
||||
},
|
||||
],
|
||||
[
|
||||
@@ -455,9 +540,12 @@ async function main() {
|
||||
!build.sha256 ||
|
||||
compareVersions(build.version, stableVersion) !== 0
|
||||
) {
|
||||
throw new Error('Martin Riedl FFmpeg provider response has no complete matching macOS arm64 stable build');
|
||||
return {
|
||||
status: 'provider-behind',
|
||||
detail: 'no complete matching macOS arm64 stable build is published',
|
||||
};
|
||||
}
|
||||
return build;
|
||||
return { status: 'available', value: build };
|
||||
},
|
||||
],
|
||||
[
|
||||
@@ -471,24 +559,44 @@ async function main() {
|
||||
!build.hashes?.windows ||
|
||||
!build.hashes?.linux
|
||||
) {
|
||||
throw new Error('BtbN FFmpeg provider response has no complete Windows/Linux build with SHA-256 digests');
|
||||
return {
|
||||
status: 'provider-behind',
|
||||
detail: 'no complete matching Windows/Linux stable build with SHA-256 digests is published',
|
||||
};
|
||||
}
|
||||
return build;
|
||||
return { status: 'available', value: build };
|
||||
},
|
||||
],
|
||||
];
|
||||
const providerResults = await Promise.allSettled(providerChecks.map(([, check]) => check()));
|
||||
const providerFailures = [];
|
||||
for (const [index, [label]] of providerChecks.entries()) {
|
||||
const providerBehind = [];
|
||||
const providerOutcomes = providerChecks.map(([label], index) => {
|
||||
const result = providerResults[index];
|
||||
if (result.status === 'rejected') {
|
||||
const detail = result.reason instanceof Error ? result.reason.message : String(result.reason);
|
||||
return { status: 'unverified', detail, label };
|
||||
}
|
||||
if (
|
||||
!result.value ||
|
||||
!['available', 'provider-behind'].includes(result.value.status)
|
||||
) {
|
||||
return { status: 'unverified', detail: 'provider returned an invalid result', label };
|
||||
}
|
||||
return { ...result.value, label };
|
||||
});
|
||||
for (const [index, [label]] of providerChecks.entries()) {
|
||||
const outcome = providerOutcomes[index];
|
||||
if (outcome.status === 'unverified') {
|
||||
providerFailures.push(label);
|
||||
console.error(`provider unavailable: ${label}: ${detail}`);
|
||||
console.error(`provider unavailable: ${label}: ${outcome.detail}`);
|
||||
} else if (outcome.status === 'provider-behind') {
|
||||
providerBehind.push(label);
|
||||
console.error(`provider behind: ${label}: ${outcome.detail}`);
|
||||
}
|
||||
}
|
||||
const providerValue = index =>
|
||||
providerResults[index].status === 'fulfilled' ? providerResults[index].value : undefined;
|
||||
providerOutcomes[index].status === 'available' ? providerOutcomes[index].value : undefined;
|
||||
const ytDlp = providerValue(0);
|
||||
const deno = providerValue(1);
|
||||
const aria2 = providerValue(2);
|
||||
@@ -505,6 +613,19 @@ async function main() {
|
||||
const latestUrlsByTargetEngine = {};
|
||||
const latestHashesByTargetEngine = {};
|
||||
const latestHashesByUrl = providerAssetHashes({ ytDlp, deno, aria2 });
|
||||
const providerStatus = outcome => outcome.status === 'available'
|
||||
? undefined
|
||||
: { status: outcome.status, detail: outcome.detail };
|
||||
const providerStatusesByEngine = {
|
||||
'yt-dlp': providerStatus(providerOutcomes[0]),
|
||||
deno: providerStatus(providerOutcomes[1]),
|
||||
aria2c: providerStatus(providerOutcomes[2]),
|
||||
};
|
||||
const providerStatusesByTargetEngine = {
|
||||
'aarch64-apple-darwin:ffmpeg': providerStatus(providerOutcomes[4]),
|
||||
'x86_64-pc-windows-msvc:ffmpeg': providerStatus(providerOutcomes[5]),
|
||||
'x86_64-unknown-linux-gnu:ffmpeg': providerStatus(providerOutcomes[5]),
|
||||
};
|
||||
if (btbnFfmpegStableBuild?.version && btbnFfmpegStableBuild.urls?.windows && btbnFfmpegStableBuild.urls?.linux) {
|
||||
latestByTargetEngine['x86_64-pc-windows-msvc:ffmpeg'] = btbnFfmpegStableBuild.version;
|
||||
latestByTargetEngine['x86_64-unknown-linux-gnu:ffmpeg'] = btbnFfmpegStableBuild.version;
|
||||
@@ -529,50 +650,60 @@ async function main() {
|
||||
console.log(` Martin Riedl FFmpeg macOS arm64 stable: ${displayVersion(martinRiedlMacArm64Release?.version)}`);
|
||||
|
||||
const targetSpecificEngines = new Set(['ffmpeg']);
|
||||
const engineCheckFailures = [];
|
||||
const engineReports = [];
|
||||
const runEngineCheck = (label, rows) => {
|
||||
try {
|
||||
return checkRows(
|
||||
rows,
|
||||
latestByEngine,
|
||||
latestByTargetEngine,
|
||||
latestUrlsByTargetEngine,
|
||||
targetSpecificEngines,
|
||||
latestHashesByTargetEngine,
|
||||
latestHashesByUrl,
|
||||
);
|
||||
} catch (error) {
|
||||
if (error?.code !== 'LATEST_VERSION_UNAVAILABLE') throw error;
|
||||
const detail = error instanceof Error ? error.message : String(error);
|
||||
engineCheckFailures.push(label);
|
||||
console.error(`engine provider unavailable: ${label}: ${detail}`);
|
||||
return 0;
|
||||
}
|
||||
const report = checkRows(
|
||||
rows,
|
||||
latestByEngine,
|
||||
latestByTargetEngine,
|
||||
latestUrlsByTargetEngine,
|
||||
targetSpecificEngines,
|
||||
latestHashesByTargetEngine,
|
||||
latestHashesByUrl,
|
||||
providerStatusesByTargetEngine,
|
||||
providerStatusesByEngine,
|
||||
);
|
||||
engineReports.push({ label, ...report });
|
||||
return report;
|
||||
};
|
||||
|
||||
console.log('\nengine source lock:');
|
||||
outdatedCount += runEngineCheck(
|
||||
runEngineCheck(
|
||||
'engine source lock',
|
||||
sourceEngineVersions(parseJsonFile('engine-sources.lock.json')),
|
||||
);
|
||||
|
||||
console.log('\npackaged engine lock:');
|
||||
outdatedCount += runEngineCheck(
|
||||
runEngineCheck(
|
||||
'packaged engine lock',
|
||||
packagedEngineVersions(parseJsonFile('engines.lock.json')),
|
||||
);
|
||||
|
||||
const engineCounts = engineReports.reduce((totals, report) => {
|
||||
for (const [status, count] of Object.entries(report.counts)) totals[status] += count;
|
||||
return totals;
|
||||
}, { current: 0, outdated: 0, 'hash-mismatch': 0, 'provider-behind': 0, unverified: 0 });
|
||||
const engineIssueCount = Object.entries(engineCounts)
|
||||
.filter(([status]) => status !== 'current')
|
||||
.reduce((total, [, count]) => total + count, 0);
|
||||
|
||||
if (engineIssueCount > 0) {
|
||||
console.error('\nengine row status summary:');
|
||||
for (const [status, count] of Object.entries(engineCounts)) {
|
||||
if (status !== 'current' && count > 0) console.error(` ${status}: ${count}`);
|
||||
}
|
||||
}
|
||||
|
||||
if (outdatedCount > 0) {
|
||||
console.error(`\n${outdatedCount} outdated item(s) found.`);
|
||||
process.exit(1);
|
||||
}
|
||||
if (providerFailures.length > 0) {
|
||||
console.error(`\n${providerFailures.length} provider check(s) unavailable; refusing to claim that all updates are current.`);
|
||||
}
|
||||
if (engineCheckFailures.length > 0) {
|
||||
console.error(`\n${engineCheckFailures.length} engine lock check(s) unavailable; refusing to claim that all engines are current.`);
|
||||
if (providerBehind.length > 0) {
|
||||
console.error(`\n${providerBehind.length} provider build check(s) are behind the latest stable release; refusing to claim that all updates are current.`);
|
||||
}
|
||||
if (providerFailures.length > 0 || engineCheckFailures.length > 0) {
|
||||
if (hasUpdateCheckFailures({ outdatedCount, engineIssueCount, providerFailures, providerBehind })) {
|
||||
process.exit(1);
|
||||
}
|
||||
console.log('\nAll checked packages and engines are current.');
|
||||
@@ -591,6 +722,7 @@ export {
|
||||
fetchJson,
|
||||
fetchText,
|
||||
fetchWithContext,
|
||||
hasUpdateCheckFailures,
|
||||
latestBtbnFfmpegStableBuild,
|
||||
latestMartinRiedlMacArm64Release,
|
||||
npmExecutable,
|
||||
|
||||
@@ -8,6 +8,7 @@ import {
|
||||
fetchText,
|
||||
latestBtbnFfmpegStableBuild,
|
||||
latestMartinRiedlMacArm64Release,
|
||||
hasUpdateCheckFailures,
|
||||
npmExecutable,
|
||||
providerAssetHashes,
|
||||
} from './check-updates.js';
|
||||
@@ -50,33 +51,31 @@ test('fetchText does not retry terminal HTTP responses', async () => {
|
||||
assert.equal(attempts, 1);
|
||||
});
|
||||
|
||||
test('checkRows fails closed when a latest version is unavailable', () => {
|
||||
assert.throws(
|
||||
() =>
|
||||
checkRows(
|
||||
[{ target: 'test-target', engine: 'test-engine', version: '1.0.0', url: 'https://example.test/engine' }],
|
||||
{}
|
||||
),
|
||||
/Latest version is unavailable for test-target test-engine/
|
||||
test('checkRows reports an unverified row when a latest version is unavailable', () => {
|
||||
const report = checkRows(
|
||||
[{ target: 'test-target', engine: 'test-engine', version: '1.0.0', url: 'https://example.test/engine' }],
|
||||
{},
|
||||
);
|
||||
|
||||
assert.equal(report.rows[0].status, 'unverified');
|
||||
assert.equal(report.counts.unverified, 1);
|
||||
});
|
||||
|
||||
test('checkRows does not fall back to the generic release for target-specific engines', () => {
|
||||
assert.throws(
|
||||
() =>
|
||||
checkRows(
|
||||
[{ target: 'test-target', engine: 'ffmpeg', version: '8.1.2', url: 'https://example.test/engine' }],
|
||||
{ ffmpeg: '9.0.1' },
|
||||
{},
|
||||
{},
|
||||
new Set(['ffmpeg'])
|
||||
),
|
||||
/Latest provider version is unavailable for test-target ffmpeg/
|
||||
const report = checkRows(
|
||||
[{ target: 'test-target', engine: 'ffmpeg', version: '8.1.2', url: 'https://example.test/engine' }],
|
||||
{ ffmpeg: '9.0.1' },
|
||||
{},
|
||||
{},
|
||||
new Set(['ffmpeg']),
|
||||
);
|
||||
|
||||
assert.equal(report.rows[0].status, 'unverified');
|
||||
assert.equal(report.counts.unverified, 1);
|
||||
});
|
||||
|
||||
test('checkRows detects a provider hash change when version and URL are current', () => {
|
||||
const outdated = checkRows(
|
||||
const report = checkRows(
|
||||
[{
|
||||
target: 'test-target',
|
||||
engine: 'test-engine',
|
||||
@@ -92,11 +91,29 @@ test('checkRows detects a provider hash change when version and URL are current'
|
||||
{ 'https://example.test/engine': 'b'.repeat(64) },
|
||||
);
|
||||
|
||||
assert.equal(outdated, 1);
|
||||
assert.equal(report.rows[0].status, 'hash-mismatch');
|
||||
assert.equal(report.counts['hash-mismatch'], 1);
|
||||
});
|
||||
|
||||
test('checkRows fails closed when the provider supplies no digest', () => {
|
||||
const report = checkRows(
|
||||
[{
|
||||
target: 'test-target',
|
||||
engine: 'test-engine',
|
||||
version: '1.0.0',
|
||||
url: 'https://example.test/engine',
|
||||
sha256: 'a'.repeat(64),
|
||||
}],
|
||||
{ 'test-engine': '1.0.0' },
|
||||
);
|
||||
|
||||
assert.equal(report.rows[0].status, 'unverified');
|
||||
assert.match(report.rows[0].reason, /verifiable SHA-256/);
|
||||
assert.equal(report.counts.unverified, 1);
|
||||
});
|
||||
|
||||
test('checkRows compares packaged source provenance without confusing the payload digest', () => {
|
||||
const outdated = checkRows(
|
||||
const report = checkRows(
|
||||
[{
|
||||
target: 'aarch64-apple-darwin',
|
||||
engine: 'ffmpeg',
|
||||
@@ -112,7 +129,8 @@ test('checkRows compares packaged source provenance without confusing the payloa
|
||||
{ 'aarch64-apple-darwin:ffmpeg': 'a'.repeat(64) },
|
||||
);
|
||||
|
||||
assert.equal(outdated, 0);
|
||||
assert.equal(report.rows[0].status, 'current');
|
||||
assert.equal(report.counts.current, 1);
|
||||
});
|
||||
|
||||
test('checkRows detects an aria2 asset digest change when the provider supplies it', () => {
|
||||
@@ -122,7 +140,7 @@ test('checkRows detects an aria2 asset digest change when the provider supplies
|
||||
aria2: { assets: [{ browser_download_url: url, digest: `sha256:${digest}` }] },
|
||||
});
|
||||
|
||||
const outdated = checkRows(
|
||||
const report = checkRows(
|
||||
[{
|
||||
target: 'x86_64-pc-windows-msvc',
|
||||
engine: 'aria2c',
|
||||
@@ -138,7 +156,91 @@ test('checkRows detects an aria2 asset digest change when the provider supplies
|
||||
hashes,
|
||||
);
|
||||
|
||||
assert.equal(outdated, 1);
|
||||
assert.equal(report.rows[0].status, 'hash-mismatch');
|
||||
assert.equal(report.counts['hash-mismatch'], 1);
|
||||
});
|
||||
|
||||
test('checkRows preserves independent row results when one provider is unavailable', () => {
|
||||
const report = checkRows(
|
||||
[
|
||||
{ target: 'test-target', engine: 'yt-dlp', version: '1.0.0', url: 'https://example.test/yt-dlp' },
|
||||
{ target: 'test-target', engine: 'deno', version: '1.0.0', url: 'https://example.test/deno' },
|
||||
],
|
||||
{ 'yt-dlp': '1.0.0', deno: '1.0.0' },
|
||||
{},
|
||||
{},
|
||||
new Set(),
|
||||
{},
|
||||
{},
|
||||
{},
|
||||
{ deno: { status: 'unverified', detail: 'GitHub response failed' } },
|
||||
);
|
||||
|
||||
assert.deepEqual(
|
||||
report.rows.map(row => [row.engine, row.status]),
|
||||
[['yt-dlp', 'current'], ['deno', 'unverified']],
|
||||
);
|
||||
assert.equal(report.counts.current, 1);
|
||||
assert.equal(report.counts.unverified, 1);
|
||||
});
|
||||
|
||||
test('checkRows reports provider-behind instead of using generic FFmpeg data', () => {
|
||||
const report = checkRows(
|
||||
[{ target: 'test-target', engine: 'ffmpeg', version: '9.0.1', url: 'https://example.test/ffmpeg' }],
|
||||
{ ffmpeg: '9.0.2' },
|
||||
{},
|
||||
{},
|
||||
new Set(['ffmpeg']),
|
||||
{},
|
||||
{},
|
||||
{ 'test-target:ffmpeg': { status: 'provider-behind', detail: 'matching target build is not published' } },
|
||||
);
|
||||
|
||||
assert.equal(report.rows[0].status, 'provider-behind');
|
||||
assert.equal(report.rows[0].latest, undefined);
|
||||
assert.equal(report.counts['provider-behind'], 1);
|
||||
});
|
||||
|
||||
test('checkRows still reports Deno after an FFmpeg provider failure', () => {
|
||||
const report = checkRows(
|
||||
[
|
||||
{ target: 'test-target', engine: 'ffmpeg', version: '9.0.1', url: 'https://example.test/ffmpeg' },
|
||||
{ target: 'test-target', engine: 'deno', version: '2.9.6', url: 'https://example.test/deno' },
|
||||
],
|
||||
{ ffmpeg: '9.0.2', deno: '2.9.7' },
|
||||
{ 'test-target:deno': '2.9.7' },
|
||||
{},
|
||||
new Set(['ffmpeg']),
|
||||
{},
|
||||
{},
|
||||
{ 'test-target:ffmpeg': { status: 'unverified', detail: 'FFmpeg provider request failed' } },
|
||||
);
|
||||
|
||||
assert.deepEqual(
|
||||
report.rows.map(row => [row.engine, row.status]),
|
||||
[['ffmpeg', 'unverified'], ['deno', 'outdated']],
|
||||
);
|
||||
assert.equal(report.rows.length, 2);
|
||||
assert.equal(report.counts.unverified, 1);
|
||||
assert.equal(report.counts.outdated, 1);
|
||||
});
|
||||
|
||||
test('update checks fail when npm or Cargo rows are outdated', () => {
|
||||
assert.equal(hasUpdateCheckFailures({
|
||||
outdatedCount: 1,
|
||||
engineIssueCount: 0,
|
||||
providerFailures: [],
|
||||
providerBehind: [],
|
||||
}), true);
|
||||
});
|
||||
|
||||
test('update checks pass only when every blocking count is clear', () => {
|
||||
assert.equal(hasUpdateCheckFailures({
|
||||
outdatedCount: 0,
|
||||
engineIssueCount: 0,
|
||||
providerFailures: [],
|
||||
providerBehind: [],
|
||||
}), false);
|
||||
});
|
||||
|
||||
test('npm executable selection uses the Windows command shim when needed', () => {
|
||||
|
||||
Generated
+45
-46
@@ -235,7 +235,7 @@ checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -526,9 +526,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "camino"
|
||||
version = "1.2.5"
|
||||
version = "1.2.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bb1307f12aa967b5a58416e87b3653360e0fd614a016b6e970db08fecbb1b80d"
|
||||
checksum = "bbbad30e4b4c14a39e3cc8aed085a12a327257c316619c93581e017bc52be591"
|
||||
dependencies = [
|
||||
"serde_core",
|
||||
]
|
||||
@@ -577,9 +577,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.4.6"
|
||||
version = "1.4.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4"
|
||||
checksum = "54413ede23c2daf518f35156dfde027feb2374004d63bd497f983c8db9c0e313"
|
||||
dependencies = [
|
||||
"find-msvc-tools",
|
||||
"shlex",
|
||||
@@ -614,9 +614,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.4"
|
||||
version = "1.0.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
||||
checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600"
|
||||
|
||||
[[package]]
|
||||
name = "cfg_aliases"
|
||||
@@ -940,7 +940,7 @@ dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"strsim",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -962,7 +962,7 @@ checksum = "2ac7135c3ef02b2f7833bbeb1be5ba7f966dcde8a87c6b87f65a778d71a02785"
|
||||
dependencies = [
|
||||
"darling_core 0.24.1",
|
||||
"quote",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1137,7 +1137,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1423,9 +1423,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "find-msvc-tools"
|
||||
version = "0.1.12"
|
||||
version = "0.1.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d"
|
||||
checksum = "ef25905e51abafe4dcea6c15fec58c57b601cdbd0ee53d22ea1d3016c587d39b"
|
||||
|
||||
[[package]]
|
||||
name = "firelink"
|
||||
@@ -1533,7 +1533,7 @@ checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1604,7 +1604,7 @@ checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -2848,7 +2848,7 @@ dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"rustversion",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -3792,11 +3792,10 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "redox_users"
|
||||
version = "0.5.2"
|
||||
version = "0.5.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
|
||||
checksum = "60dc65c0ff1a7ae1294b0c67b9f14baf70b644404010370171787bfac1038fc0"
|
||||
dependencies = [
|
||||
"getrandom 0.2.17",
|
||||
"libredox",
|
||||
"thiserror 2.0.20",
|
||||
]
|
||||
@@ -3818,7 +3817,7 @@ checksum = "92ecd8964f8453721699a1ed72037b0db49ce2f5a5138486ee89bed6f67cdf3a"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -3979,9 +3978,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rustix"
|
||||
version = "1.1.4"
|
||||
version = "1.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
|
||||
checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d"
|
||||
dependencies = [
|
||||
"bitflags 2.13.2",
|
||||
"errno",
|
||||
@@ -4260,7 +4259,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -4306,7 +4305,7 @@ checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -4369,7 +4368,7 @@ dependencies = [
|
||||
"darling 0.24.1",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -4682,9 +4681,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "3.0.5"
|
||||
version = "3.0.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9"
|
||||
checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@@ -4702,13 +4701,13 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "synstructure"
|
||||
version = "0.13.2"
|
||||
version = "0.14.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
|
||||
checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.119",
|
||||
"syn 3.0.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -5293,7 +5292,7 @@ checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -5391,7 +5390,7 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -5806,9 +5805,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.24"
|
||||
version = "1.0.26"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
|
||||
checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-normalization"
|
||||
@@ -5994,7 +5993,7 @@ dependencies = [
|
||||
"bumpalo",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
@@ -6886,13 +6885,13 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "yoke-derive"
|
||||
version = "0.8.2"
|
||||
version = "0.8.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e"
|
||||
checksum = "33811428bee40dbceb6d545e95754741d17a6aef9a4849f0fd62e2ba4f412a78"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.119",
|
||||
"syn 3.0.6",
|
||||
"synstructure",
|
||||
]
|
||||
|
||||
@@ -6951,7 +6950,7 @@ dependencies = [
|
||||
"proc-macro-crate 3.5.0",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
"zbus_names",
|
||||
"zvariant",
|
||||
"zvariant_utils",
|
||||
@@ -7008,13 +7007,13 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "zerofrom-derive"
|
||||
version = "0.1.7"
|
||||
version = "0.1.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1"
|
||||
checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.119",
|
||||
"syn 3.0.6",
|
||||
"synstructure",
|
||||
]
|
||||
|
||||
@@ -7054,14 +7053,14 @@ checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zlib-rs"
|
||||
version = "0.6.7"
|
||||
version = "0.6.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "34b31d188d9d685a4f9c7b46d6e36631b07058d2cfe190267adce54dc230bf12"
|
||||
checksum = "b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112"
|
||||
|
||||
[[package]]
|
||||
name = "zmij"
|
||||
@@ -7108,7 +7107,7 @@ dependencies = [
|
||||
"proc-macro-crate 3.5.0",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
"zvariant_utils",
|
||||
]
|
||||
|
||||
@@ -7121,6 +7120,6 @@ dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"serde",
|
||||
"syn 3.0.5",
|
||||
"syn 3.0.6",
|
||||
"winnow 1.0.4",
|
||||
]
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user