Compare commits

...

20 Commits

Author SHA1 Message Date
78cd3a786c Update changelog for v3.10.0 2025-07-13 08:26:54 +00:00
adb88991d9 Bump version to 3.10.0 2025-07-13 17:10:18 +09:00
4dad68d255 fix(downloader): code splitting (happy-dom) 2025-07-13 17:04:38 +09:00
33a09cc8e1 fix(api-server): fix #3572 2025-07-13 16:43:29 +09:00
e2c849f6c4 fix(store): fix synced lyrics config 2025-07-13 16:38:38 +09:00
7b41775b26 fix(store): fix migrator 2025-07-13 16:36:51 +09:00
6284b87fc7 fix(deps): update dependency butterchurn to v3.0.0-beta.5 (#3610)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-13 16:32:03 +09:00
f3f63d4fcd fix: bump @hono/zod-openapi version 2025-07-13 16:24:38 +09:00
cf80dd396c fix: remove the weird scrollbar
- Bump electron version to v38
- Remove `FluentScrollbar`
2025-07-13 16:06:46 +09:00
c79fc799b2 chore(i18n): Translated using Weblate (Basque)
Currently translated at 0.6% (3 of 430 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/eu/
2025-07-13 08:16:01 +02:00
7789d5d444 chore(i18n): Added translation using Weblate (Basque) 2025-07-13 08:14:58 +02:00
e0dbd4b88f chore(i18n): Translated using Weblate (Azerbaijani)
Currently translated at 0.6% (3 of 430 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/az/
2025-07-13 08:14:08 +02:00
1c74bbd954 chore(i18n): Translated using Weblate (Korean)
Currently translated at 100.0% (430 of 430 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ko/
2025-07-13 08:10:35 +02:00
d949e3550f chore(deps): update eslint monorepo to v9.31.0 (#3600)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-13 14:19:01 +09:00
d76115ab5d chore(i18n): Translated using Weblate (Arabic)
Currently translated at 100.0% (430 of 430 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ar/
2025-07-13 07:01:56 +02:00
5be467a869 chore(i18n): Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (430 of 430 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hant/
2025-07-13 07:01:54 +02:00
b2dfbe1ed3 chore(i18n): Translated using Weblate (Turkish)
Currently translated at 100.0% (430 of 430 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/tr/
2025-07-13 07:01:52 +02:00
a9e9e0bdc2 chore(i18n): Translated using Weblate (Turkish)
Currently translated at 100.0% (430 of 430 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/tr/
2025-07-13 07:01:50 +02:00
93ce9cc359 chore(i18n): Translated using Weblate (Russian)
Currently translated at 99.7% (429 of 430 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/ru/
2025-07-13 07:01:47 +02:00
2a626a5ff1 chore(deps): update dependency rollup to v4.45.0 (#3568)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-13 13:53:37 +09:00
15 changed files with 552 additions and 242 deletions

View File

@ -2,8 +2,181 @@
All notable changes to this project will be documented in this file. Dates are displayed in UTC. All notable changes to this project will be documented in this file. Dates are displayed in UTC.
#### [v3.10.0](https://github.com/th-ch/youtube-music/compare/v3.9.0...v3.10.0)
- fix(deps): update dependency butterchurn to v3.0.0-beta.5 [`#3610`](https://github.com/th-ch/youtube-music/pull/3610)
- chore(deps): update eslint monorepo to v9.31.0 [`#3600`](https://github.com/th-ch/youtube-music/pull/3600)
- chore(deps): update dependency rollup to v4.45.0 [`#3568`](https://github.com/th-ch/youtube-music/pull/3568)
- feat: code splitting [`#3593`](https://github.com/th-ch/youtube-music/pull/3593)
- fix(deps): update dependency @ghostery/adblocker-electron-preload to v2.11.1 [`#3571`](https://github.com/th-ch/youtube-music/pull/3571)
- fix(deps): update dependency @ghostery/adblocker-electron to v2.11.1 [`#3570`](https://github.com/th-ch/youtube-music/pull/3570)
- chore(deps): update playwright monorepo to v1.54.1 [`#3599`](https://github.com/th-ch/youtube-music/pull/3599)
- chore(deps): update playwright monorepo to v1.54.0 [`#3591`](https://github.com/th-ch/youtube-music/pull/3591)
- chore(deps): update dependency electron to v37.2.1 [`#3559`](https://github.com/th-ch/youtube-music/pull/3559)
- fix(deps): update dependency socks to v2.8.6 [`#3598`](https://github.com/th-ch/youtube-music/pull/3598)
- fix(deps): update dependency zod to v4.0.5 [`#3594`](https://github.com/th-ch/youtube-music/pull/3594)
- chore(deps): update dependency vite to v7.0.8 [`#3597`](https://github.com/th-ch/youtube-music/pull/3597)
- chore(deps): update dependency vite to v7.0.7 [`#3590`](https://github.com/th-ch/youtube-music/pull/3590)
- chore(deps): update dependency @electron/universal to v3 [`#3565`](https://github.com/th-ch/youtube-music/pull/3565)
- fix(deps): update dependency electron-unhandled to v5 [`#2088`](https://github.com/th-ch/youtube-music/pull/2088)
- feat: enable the ESM for main [`#3588`](https://github.com/th-ch/youtube-music/pull/3588)
- fix(deps): update dependency zod to v4 [`#3587`](https://github.com/th-ch/youtube-music/pull/3587)
- feat: migrate from raw HTML to JSX (TSX / SolidJS) [`#3583`](https://github.com/th-ch/youtube-music/pull/3583)
- docs: add Unobtrusive Player in available plugins [`#3582`](https://github.com/th-ch/youtube-music/pull/3582)
- fix(deps): update dependency @hono/node-server to v1.15.0 [`#3557`](https://github.com/th-ch/youtube-music/pull/3557)
- chore(deps): update dependency vitefu to v1.1.1 [`#3564`](https://github.com/th-ch/youtube-music/pull/3564)
- chore(deps): update dependency discord-api-types to v0.38.15 [`#3562`](https://github.com/th-ch/youtube-music/pull/3562)
- fix(deps): update dependency es-hangul to v2.3.5 [`#3563`](https://github.com/th-ch/youtube-music/pull/3563)
- fix(deps): update dependency zod to v3.25.71 [`#3558`](https://github.com/th-ch/youtube-music/pull/3558)
- fix(deps): update dependency @ghostery/adblocker-electron to v2.9.2 [`#3560`](https://github.com/th-ch/youtube-music/pull/3560)
- fix(deps): update dependency @ghostery/adblocker-electron-preload to v2.9.2 [`#3561`](https://github.com/th-ch/youtube-music/pull/3561)
- fix(deps): update dependency @ghostery/adblocker-electron to v2.9.0 [`#3555`](https://github.com/th-ch/youtube-music/pull/3555)
- fix(deps): update dependency @ghostery/adblocker-electron-preload to v2.9.0 [`#3556`](https://github.com/th-ch/youtube-music/pull/3556)
- chore(deps): update eslint monorepo to v9.30.1 [`#3552`](https://github.com/th-ch/youtube-music/pull/3552)
- Fixed play/pause discord rich presence by fixing lastsonginfo tracking [`#3551`](https://github.com/th-ch/youtube-music/pull/3551)
- feat: enable rolldown native plugin [`#3502`](https://github.com/th-ch/youtube-music/pull/3502)
- fix(deps): update dependency virtua to v0.41.5 [`#3549`](https://github.com/th-ch/youtube-music/pull/3549)
- chore(deps): update dependency typescript-eslint to v8.35.1 [`#3545`](https://github.com/th-ch/youtube-music/pull/3545)
- chore(deps): update dependency discord-api-types to v0.38.14 [`#3546`](https://github.com/th-ch/youtube-music/pull/3546)
- chore(deps): update playwright monorepo to v1.53.2 [`#3547`](https://github.com/th-ch/youtube-music/pull/3547)
- fix(deps): update dependency i18next to v25.3.0 [`#3548`](https://github.com/th-ch/youtube-music/pull/3548)
- perf(synced-lyrics): virtual scrolling [`#3162`](https://github.com/th-ch/youtube-music/pull/3162)
- chore(deps): update dependency vite to v7 [`#3524`](https://github.com/th-ch/youtube-music/pull/3524)
- feat(synced-lyrics): Musixmatch [`#3261`](https://github.com/th-ch/youtube-music/pull/3261)
- feat(api-server): add optional params for search [`#3440`](https://github.com/th-ch/youtube-music/pull/3440)
- chore(deps): update dependency vite-plugin-inspect to v11.3.0 [`#3543`](https://github.com/th-ch/youtube-music/pull/3543)
- chore(deps): update eslint monorepo to v9.30.0 [`#3544`](https://github.com/th-ch/youtube-music/pull/3544)
- chore(deps): update dependency rollup to v4.44.1 [`#3537`](https://github.com/th-ch/youtube-music/pull/3537)
- chore(deps): update dependency ws to v8.18.3 [`#3538`](https://github.com/th-ch/youtube-music/pull/3538)
- fix(deps): update dependency @hono/zod-openapi to v0.19.9 [`#3540`](https://github.com/th-ch/youtube-music/pull/3540)
- fix(deps): update dependency @floating-ui/dom to v1.7.2 [`#3539`](https://github.com/th-ch/youtube-music/pull/3539)
- fix(deps): update dependency es-hangul to v2.3.4 [`#3541`](https://github.com/th-ch/youtube-music/pull/3541)
- fix(deps): update dependency hono to v4.8.3 [`#3542`](https://github.com/th-ch/youtube-music/pull/3542)
- fix(style): fix duplicated scrollbar [`#3483`](https://github.com/th-ch/youtube-music/pull/3483)
- chore(deps): update dependency typescript-eslint to v8.35.0 [`#3518`](https://github.com/th-ch/youtube-music/pull/3518)
- chore(deps): update dependency vite-plugin-solid to v2.11.7 [`#3520`](https://github.com/th-ch/youtube-music/pull/3520)
- chore(deps): update dependency discord-api-types to v0.38.13 [`#3517`](https://github.com/th-ch/youtube-music/pull/3517)
- chore(deps): update dependency eslint-import-resolver-typescript to v4.4.4 [`#3534`](https://github.com/th-ch/youtube-music/pull/3534)
- fix(deps): update dependency @ghostery/adblocker-electron to v2.8.0 [`#3521`](https://github.com/th-ch/youtube-music/pull/3521)
- chore(deps): update dependency eslint-plugin-prettier to v5.5.1 [`#3535`](https://github.com/th-ch/youtube-music/pull/3535)
- fix(deps): update dependency @ghostery/adblocker-electron-preload to v2.8.0 [`#3522`](https://github.com/th-ch/youtube-music/pull/3522)
- chore(deps): update dependency electron to v37 [`#3527`](https://github.com/th-ch/youtube-music/pull/3527)
- feat: Add instructional note to Swagger documentation [`#3532`](https://github.com/th-ch/youtube-music/pull/3532)
- chore(deps): update playwright monorepo to v1.53.1 [`#3504`](https://github.com/th-ch/youtube-music/pull/3504)
- chore(deps): update dependency rollup to v4.44.0 [`#3508`](https://github.com/th-ch/youtube-music/pull/3508)
- chore(deps): update dependency eslint-plugin-import to v2.32.0 [`#3513`](https://github.com/th-ch/youtube-music/pull/3513)
- fix(deps): update dependency hono to v4.8.2 [`#3509`](https://github.com/th-ch/youtube-music/pull/3509)
- chore(deps): update dependency electron to v36.5.0 [`#3503`](https://github.com/th-ch/youtube-music/pull/3503)
- chore(deps): update stefanzweifel/git-auto-commit-action action to v6 [`#3500`](https://github.com/th-ch/youtube-music/pull/3500)
- chore(deps): update dependency vite to v6.3.21 [`#3492`](https://github.com/th-ch/youtube-music/pull/3492)
- fix(deps): update dependency hono to v4.8.0 [`#3499`](https://github.com/th-ch/youtube-music/pull/3499)
- chore(deps): update playwright monorepo to v1.53.0 [`#3497`](https://github.com/th-ch/youtube-music/pull/3497)
- chore(deps): update eslint monorepo to v9.29.0 [`#3496`](https://github.com/th-ch/youtube-music/pull/3496)
- chore(deps): update dependency vite-plugin-inspect to v11.2.0 [`#3495`](https://github.com/th-ch/youtube-music/pull/3495)
- fix(deps): update dependency happy-dom to v18 [`#3501`](https://github.com/th-ch/youtube-music/pull/3501)
- fix(deps): update dependency electron-store to v10.1.0 [`#3498`](https://github.com/th-ch/youtube-music/pull/3498)
- chore(deps): update dependency eslint-plugin-prettier to v5.5.0 [`#3493`](https://github.com/th-ch/youtube-music/pull/3493)
- chore(deps): update dependency rollup to v4.43.0 [`#3494`](https://github.com/th-ch/youtube-music/pull/3494)
- fix(deps): update dependency @ghostery/adblocker-electron to v2.7.0 [`#3466`](https://github.com/th-ch/youtube-music/pull/3466)
- fix(deps): update dependency @hono/swagger-ui to v0.5.2 [`#3465`](https://github.com/th-ch/youtube-music/pull/3465)
- fix(deps): update dependency @ghostery/adblocker-electron-preload to v2.7.0 [`#3467`](https://github.com/th-ch/youtube-music/pull/3467)
- fix(deps): update dependency youtubei.js to v14 [`#3468`](https://github.com/th-ch/youtube-music/pull/3468)
- chore(deps): update dependency discord-api-types to v0.38.12 [`#3490`](https://github.com/th-ch/youtube-music/pull/3490)
- chore(deps): update dependency glob to v11.0.3 [`#3491`](https://github.com/th-ch/youtube-music/pull/3491)
- chore(deps): update dependency typescript-eslint to v8.34.1 [`#3469`](https://github.com/th-ch/youtube-music/pull/3469)
- fix(deps): update dependency socks to v2.8.5 [`#3470`](https://github.com/th-ch/youtube-music/pull/3470)
- fix(deps): update dependency zod to v3.25.67 [`#3471`](https://github.com/th-ch/youtube-music/pull/3471)
- chore(deps): update dependency @babel/runtime to v7.27.6 [`#3451`](https://github.com/th-ch/youtube-music/pull/3451)
- chore(deps): update dependency eslint-import-resolver-typescript to v4.4.3 [`#3453`](https://github.com/th-ch/youtube-music/pull/3453)
- fix(deps): update dependency zod to v3.25.56 [`#3454`](https://github.com/th-ch/youtube-music/pull/3454)
- fix(deps): update dependency @hono/node-server to v1.14.4 [`#3456`](https://github.com/th-ch/youtube-music/pull/3456)
- chore(deps): update dependency rollup to v4.42.0 [`#3457`](https://github.com/th-ch/youtube-music/pull/3457)
- fix(deps): update dependency conf to v14 [`#3458`](https://github.com/th-ch/youtube-music/pull/3458)
- fix(deps): update dependency peerjs to v1.5.5 [`#3460`](https://github.com/th-ch/youtube-music/pull/3460)
- chore(deps): update dependency @stylistic/eslint-plugin-js to v4.4.1 [`#3444`](https://github.com/th-ch/youtube-music/pull/3444)
- chore(deps): update dependency discord-api-types to v0.38.11 [`#3445`](https://github.com/th-ch/youtube-music/pull/3445)
- chore(deps): update dependency electron to v36.4.0 [`#3447`](https://github.com/th-ch/youtube-music/pull/3447)
- fix(deps): update dependency zod to v3.25.51 [`#3446`](https://github.com/th-ch/youtube-music/pull/3446)
- fix(deps): update dependency hono to v4.7.11 [`#3435`](https://github.com/th-ch/youtube-music/pull/3435)
- fix(deps): update dependency @floating-ui/dom to v1.7.1 [`#3434`](https://github.com/th-ch/youtube-music/pull/3434)
- chore(deps): update dependency eslint-import-resolver-typescript to v4.4.2 [`#3432`](https://github.com/th-ch/youtube-music/pull/3432)
- chore(deps): update dependency eslint-plugin-prettier to v5.4.1 [`#3433`](https://github.com/th-ch/youtube-music/pull/3433)
- fix(deps): update dependency zod to v3.25.50 [`#3443`](https://github.com/th-ch/youtube-music/pull/3443)
- fix(deps): update dependency happy-dom to v17.6.3 [`#3438`](https://github.com/th-ch/youtube-music/pull/3438)
- fix(deps): update dependency zod to v3.25.49 [`#3436`](https://github.com/th-ch/youtube-music/pull/3436)
- chore(deps): update eslint monorepo to v9.28.0 [`#3437`](https://github.com/th-ch/youtube-music/pull/3437)
- fix(deps): update dependency @hono/zod-openapi to v0.19.8 [`#3411`](https://github.com/th-ch/youtube-music/pull/3411)
- fix: use gtk 3 switch as workaround [`#3366`](https://github.com/th-ch/youtube-music/pull/3366)
- chore(deps): update dependency electron to v36.3.2 [`#3431`](https://github.com/th-ch/youtube-music/pull/3431)
- fix(deps): update dependency @xhayper/discord-rpc to v1.2.2 [`#3413`](https://github.com/th-ch/youtube-music/pull/3413)
- fix(deps): update dependency happy-dom to v17.5.6 [`#3417`](https://github.com/th-ch/youtube-music/pull/3417)
- fix(deps): update dependency @hono/zod-validator to v0.7.0 [`#3414`](https://github.com/th-ch/youtube-music/pull/3414)
- chore(deps): update dependency discord-api-types to v0.38.10 [`#3430`](https://github.com/th-ch/youtube-music/pull/3430)
- chore(deps): update dependency typescript-eslint to v8.33.1 [`#3416`](https://github.com/th-ch/youtube-music/pull/3416)
- chore(docs): Improve README-es.md by adjusting the bad Spanish translation [`#3424`](https://github.com/th-ch/youtube-music/pull/3424)
- chore(docs): Improve README.md by removing the extra flag for Spanish translation [`#3422`](https://github.com/th-ch/youtube-music/pull/3422)
- chore(deps): update dependency @babel/runtime to v7.27.4 [`#3410`](https://github.com/th-ch/youtube-music/pull/3410)
- fix(deps): update dependency ts-morph to v26 [`#3409`](https://github.com/th-ch/youtube-music/pull/3409)
- fix(deps): update dependency @ghostery/adblocker-electron-preload to v2.6.1 [`#3407`](https://github.com/th-ch/youtube-music/pull/3407)
- fix(deps): update dependency zod to v3.25.30 [`#3408`](https://github.com/th-ch/youtube-music/pull/3408)
- fix(precise-volume): replace constructor check for volume slider [`#3362`](https://github.com/th-ch/youtube-music/pull/3362)
- chore(deps): update dependency vite-plugin-inspect to v11.1.0 [`#3393`](https://github.com/th-ch/youtube-music/pull/3393)
- chore(deps): update dependency eslint-import-resolver-typescript to v4.4.1 [`#3406`](https://github.com/th-ch/youtube-music/pull/3406)
- chore(deps): update dependency @stylistic/eslint-plugin-js to v4.4.0 [`#3391`](https://github.com/th-ch/youtube-music/pull/3391)
- fix(deps): update dependency i18next to v25.2.1 [`#3405`](https://github.com/th-ch/youtube-music/pull/3405)
- chore(deps): update dependency esbuild to v0.25.5 [`#3403`](https://github.com/th-ch/youtube-music/pull/3403)
- fix(deps): update dependency @hono/node-server to v1.14.3 [`#3404`](https://github.com/th-ch/youtube-music/pull/3404)
- chore(deps): update dependency rollup to v4.41.1 [`#3392`](https://github.com/th-ch/youtube-music/pull/3392)
- chore(deps): update eslint monorepo to v9.27.0 [`#3394`](https://github.com/th-ch/youtube-music/pull/3394)
- fix(deps): update dependency @ghostery/adblocker-electron to v2.6.1 [`#3395`](https://github.com/th-ch/youtube-music/pull/3395)
- fix(deps): update dependency hono to v4.7.10 [`#3390`](https://github.com/th-ch/youtube-music/pull/3390)
- chore(deps): update dependency eslint-import-resolver-typescript to v4.3.5 [`#3388`](https://github.com/th-ch/youtube-music/pull/3388)
- fix(deps): update dependency @hono/node-server to v1.14.2 [`#3389`](https://github.com/th-ch/youtube-music/pull/3389)
- chore(deps): update dependency electron to v36.3.1 [`#3372`](https://github.com/th-ch/youtube-music/pull/3372)
- chore(deps): update dependency typescript-eslint to v8.32.1 [`#3364`](https://github.com/th-ch/youtube-music/pull/3364)
- fix(deps): update dependency semver to v7.7.2 [`#3365`](https://github.com/th-ch/youtube-music/pull/3365)
- fix(album-actions): update playlist and button selectors [`#3367`](https://github.com/th-ch/youtube-music/pull/3367)
- fix(deps): update dependency i18next to v25.2.0 [`#3370`](https://github.com/th-ch/youtube-music/pull/3370)
- chore(deps): update dependency discord-api-types to v0.38.8 [`#3361`](https://github.com/th-ch/youtube-music/pull/3361)
- fix(deps): update dependency solid-js to v1.9.7 [`#3375`](https://github.com/th-ch/youtube-music/pull/3375)
- chore(deps): update dependency electron to v36 [`#3307`](https://github.com/th-ch/youtube-music/pull/3307)
- fix(deps): update dependency @floating-ui/dom to v1.7.0 [`#3357`](https://github.com/th-ch/youtube-music/pull/3357)
- chore(deps): update eslint monorepo to v9.26.0 [`#3356`](https://github.com/th-ch/youtube-music/pull/3356)
- chore(deps): update dependency eslint-plugin-prettier to v5.4.0 [`#3355`](https://github.com/th-ch/youtube-music/pull/3355)
- fix(deps): update dependency zod to v3.24.4 [`#3354`](https://github.com/th-ch/youtube-music/pull/3354)
- fix(deps): update dependency solid-js to v1.9.6 [`#3353`](https://github.com/th-ch/youtube-music/pull/3353)
- fix(deps): update dependency @ghostery/adblocker-electron-preload to v2.5.2 [`#3350`](https://github.com/th-ch/youtube-music/pull/3350)
- fix(deps): update dependency happy-dom to v17.4.7 [`#3352`](https://github.com/th-ch/youtube-music/pull/3352)
- fix(deps): update dependency @ghostery/adblocker-electron to v2.5.2 [`#3349`](https://github.com/th-ch/youtube-music/pull/3349)
- chore(deps): update dependency vite to v6.3.5 [`#3346`](https://github.com/th-ch/youtube-music/pull/3346)
- chore(deps): update dependency ws to v8.18.2 [`#3347`](https://github.com/th-ch/youtube-music/pull/3347)
- feat(plugin): support authenticated proxy [`#3175`](https://github.com/th-ch/youtube-music/pull/3175)
- chore(deps): update dependency esbuild to v0.25.4 [`#3344`](https://github.com/th-ch/youtube-music/pull/3344)
- chore(deps): update dependency eslint-config-prettier to v10.1.5 [`#3345`](https://github.com/th-ch/youtube-music/pull/3345)
- fix(deps): update dependency hono to v4.7.9 [`#3302`](https://github.com/th-ch/youtube-music/pull/3302)
- chore(deps): update dependency electron to v34.5.5 [`#3343`](https://github.com/th-ch/youtube-music/pull/3343)
- docs: Add Ukrainian translation [`#3338`](https://github.com/th-ch/youtube-music/pull/3338)
- chore(deps): update dependency discord-api-types to v0.38.4 [`#3342`](https://github.com/th-ch/youtube-music/pull/3342)
- chore(deps): update dependency rollup to v4.40.2 [`#3301`](https://github.com/th-ch/youtube-music/pull/3301)
- chore(deps): update dependency @electron/universal to v2.0.3 [`#3341`](https://github.com/th-ch/youtube-music/pull/3341)
- fix(deps): update dependency @hono/zod-validator to v0.5.0 [`#3295`](https://github.com/th-ch/youtube-music/pull/3295)
- chore(deps): update dependency @babel/runtime to v7.27.1 [`#3340`](https://github.com/th-ch/youtube-music/pull/3340)
- fix(deps): update dependency i18next to v25.1.2 [`#3305`](https://github.com/th-ch/youtube-music/pull/3305)
- fix(album-actions): use playlist shelf for playlist detection [`#3306`](https://github.com/th-ch/youtube-music/pull/3306)
- chore(deps): update dependency typescript-eslint to v8.32.0 [`#3304`](https://github.com/th-ch/youtube-music/pull/3304)
- chore(deps): update dependency vite to v6.3.4 [security] [`#3313`](https://github.com/th-ch/youtube-music/pull/3313)
- fix(deps): update dependency @hono/zod-openapi to v0.19.6 [`#3294`](https://github.com/th-ch/youtube-music/pull/3294)
- fix(deps): update dependency es-hangul to v2.3.3 [`#3293`](https://github.com/th-ch/youtube-music/pull/3293)
- fix(api-server): fix #3572 [`#3572`](https://github.com/th-ch/youtube-music/issues/3572)
- fix(youtube-music): fix #3296, and macOS traffic lights [`#3296`](https://github.com/th-ch/youtube-music/issues/3296)
- fix: kuromoji zlib and apply rolldown-vite [`f047dd2`](https://github.com/th-ch/youtube-music/commit/f047dd2d2df189b55b60188392c451aad65b7a1b)
- fix: apply fix from eslint [`1da83ff`](https://github.com/th-ch/youtube-music/commit/1da83ff27c2ccfcdf48c0b0b125033b1a1c194d2)
- feat: refactor [`51b3f53`](https://github.com/th-ch/youtube-music/commit/51b3f535695c0f19cd252049985578d11a853ccb)
#### [v3.9.0](https://github.com/th-ch/youtube-music/compare/v3.8.1...v3.9.0) #### [v3.9.0](https://github.com/th-ch/youtube-music/compare/v3.8.1...v3.9.0)
> 27 April 2025
- feat(tuna-obs): added alternativeTitle and tags to tuna [`#3288`](https://github.com/th-ch/youtube-music/pull/3288) - feat(tuna-obs): added alternativeTitle and tags to tuna [`#3288`](https://github.com/th-ch/youtube-music/pull/3288)
- fix: rollback electron version to v34 (for fix #3216) [`#3216`](https://github.com/th-ch/youtube-music/issues/3216) - fix: rollback electron version to v34 (for fix #3216) [`#3216`](https://github.com/th-ch/youtube-music/issues/3216)
- fix(synced-lyrics): fix #3157 [`#3157`](https://github.com/th-ch/youtube-music/issues/3157) - fix(synced-lyrics): fix #3157 [`#3157`](https://github.com/th-ch/youtube-music/issues/3157)

View File

@ -2,7 +2,7 @@
"name": "youtube-music", "name": "youtube-music",
"desktopName": "com.github.th_ch.youtube_music", "desktopName": "com.github.th_ch.youtube_music",
"productName": "YouTube Music", "productName": "YouTube Music",
"version": "3.9.0", "version": "3.10.0",
"description": "YouTube Music Desktop App - including custom plugins", "description": "YouTube Music Desktop App - including custom plugins",
"main": "./dist/main/index.js", "main": "./dist/main/index.js",
"type": "module", "type": "module",
@ -72,7 +72,7 @@
"@ghostery/adblocker-electron-preload": "2.11.1", "@ghostery/adblocker-electron-preload": "2.11.1",
"@hono/node-server": "1.15.0", "@hono/node-server": "1.15.0",
"@hono/swagger-ui": "0.5.2", "@hono/swagger-ui": "0.5.2",
"@hono/zod-openapi": "0.19.9", "@hono/zod-openapi": "1.0.0-beta.1",
"@hono/zod-validator": "0.7.0", "@hono/zod-validator": "0.7.0",
"@jellybrick/dbus-next": "0.10.3", "@jellybrick/dbus-next": "0.10.3",
"@jellybrick/electron-better-web-request": "1.0.4", "@jellybrick/electron-better-web-request": "1.0.4",
@ -82,7 +82,7 @@
"@xhayper/discord-rpc": "1.2.2", "@xhayper/discord-rpc": "1.2.2",
"async-mutex": "0.5.0", "async-mutex": "0.5.0",
"bgutils-js": "3.2.0", "bgutils-js": "3.2.0",
"butterchurn": "3.0.0-beta.4", "butterchurn": "3.0.0-beta.5",
"butterchurn-presets": "3.0.0-beta.4", "butterchurn-presets": "3.0.0-beta.4",
"color": "5.0.0", "color": "5.0.0",
"conf": "14.0.0", "conf": "14.0.0",
@ -136,7 +136,7 @@
"zod": "4.0.5" "zod": "4.0.5"
}, },
"devDependencies": { "devDependencies": {
"@eslint/js": "9.30.1", "@eslint/js": "9.31.0",
"@malept/flatpak-bundler": "0.4.0", "@malept/flatpak-bundler": "0.4.0",
"@playwright/test": "1.54.1", "@playwright/test": "1.54.1",
"@stylistic/eslint-plugin": "5.1.0", "@stylistic/eslint-plugin": "5.1.0",
@ -151,13 +151,13 @@
"cross-env": "7.0.3", "cross-env": "7.0.3",
"del-cli": "6.0.0", "del-cli": "6.0.0",
"discord-api-types": "0.38.15", "discord-api-types": "0.38.15",
"electron": "37.2.1", "electron": "38.0.0-alpha.5",
"electron-builder": "26.0.12", "electron-builder": "26.0.12",
"electron-builder-squirrel-windows": "26.0.12", "electron-builder-squirrel-windows": "26.0.12",
"electron-devtools-installer": "4.0.0", "electron-devtools-installer": "4.0.0",
"electron-vite": "4.0.0", "electron-vite": "4.0.0",
"esbuild": "0.25.6", "esbuild": "0.25.6",
"eslint": "9.30.1", "eslint": "9.31.0",
"eslint-config-prettier": "10.1.5", "eslint-config-prettier": "10.1.5",
"eslint-import-resolver-exports": "1.0.0-beta.5", "eslint-import-resolver-exports": "1.0.0-beta.5",
"eslint-import-resolver-typescript": "4.4.4", "eslint-import-resolver-typescript": "4.4.4",
@ -167,7 +167,7 @@
"glob": "11.0.3", "glob": "11.0.3",
"node-gyp": "11.2.0", "node-gyp": "11.2.0",
"playwright": "1.54.1", "playwright": "1.54.1",
"rollup": "4.44.2", "rollup": "4.45.0",
"typescript": "5.8.3", "typescript": "5.8.3",
"typescript-eslint": "8.36.0", "typescript-eslint": "8.36.0",
"utf-8-validate": "6.0.5", "utf-8-validate": "6.0.5",

395
pnpm-lock.yaml generated
View File

@ -36,7 +36,7 @@ importers:
version: 1.0.1(@types/node@22.13.5) version: 1.0.1(@types/node@22.13.5)
'@electron/remote': '@electron/remote':
specifier: 2.1.3 specifier: 2.1.3
version: 2.1.3(electron@37.2.1) version: 2.1.3(electron@38.0.0-alpha.5)
'@ffmpeg.wasm/core-mt': '@ffmpeg.wasm/core-mt':
specifier: 0.12.0 specifier: 0.12.0
version: 0.12.0 version: 0.12.0
@ -51,10 +51,10 @@ importers:
version: 2.0.5 version: 2.0.5
'@ghostery/adblocker-electron': '@ghostery/adblocker-electron':
specifier: 2.11.1 specifier: 2.11.1
version: 2.11.1(electron@37.2.1) version: 2.11.1(electron@38.0.0-alpha.5)
'@ghostery/adblocker-electron-preload': '@ghostery/adblocker-electron-preload':
specifier: 2.11.1 specifier: 2.11.1
version: 2.11.1(electron@37.2.1) version: 2.11.1(electron@38.0.0-alpha.5)
'@hono/node-server': '@hono/node-server':
specifier: 1.15.0 specifier: 1.15.0
version: 1.15.0(hono@4.8.4) version: 1.15.0(hono@4.8.4)
@ -62,8 +62,8 @@ importers:
specifier: 0.5.2 specifier: 0.5.2
version: 0.5.2(hono@4.8.4) version: 0.5.2(hono@4.8.4)
'@hono/zod-openapi': '@hono/zod-openapi':
specifier: 0.19.9 specifier: 1.0.0-beta.1
version: 0.19.9(hono@4.8.4)(zod@4.0.5) version: 1.0.0-beta.1(hono@4.8.4)(zod@4.0.5)
'@hono/zod-validator': '@hono/zod-validator':
specifier: 0.7.0 specifier: 0.7.0
version: 0.7.0(hono@4.8.4)(zod@4.0.5) version: 0.7.0(hono@4.8.4)(zod@4.0.5)
@ -92,8 +92,8 @@ importers:
specifier: 3.2.0 specifier: 3.2.0
version: 3.2.0 version: 3.2.0
butterchurn: butterchurn:
specifier: 3.0.0-beta.4 specifier: 3.0.0-beta.5
version: 3.0.0-beta.4 version: 3.0.0-beta.5
butterchurn-presets: butterchurn-presets:
specifier: 3.0.0-beta.4 specifier: 3.0.0-beta.4
version: 3.0.0-beta.4 version: 3.0.0-beta.4
@ -105,7 +105,7 @@ importers:
version: 14.0.0 version: 14.0.0
custom-electron-prompt: custom-electron-prompt:
specifier: 1.5.8 specifier: 1.5.8
version: 1.5.8(electron@37.2.1) version: 1.5.8(electron@38.0.0-alpha.5)
deepmerge-ts: deepmerge-ts:
specifier: 7.1.5 specifier: 7.1.5
version: 7.1.5 version: 7.1.5
@ -249,8 +249,8 @@ importers:
version: 4.0.5 version: 4.0.5
devDependencies: devDependencies:
'@eslint/js': '@eslint/js':
specifier: 9.30.1 specifier: 9.31.0
version: 9.30.1 version: 9.31.0
'@malept/flatpak-bundler': '@malept/flatpak-bundler':
specifier: 0.4.0 specifier: 0.4.0
version: 0.4.0(patch_hash=c787371eeb2af011ea934e8818a0dad6d7dcb2df31bbb1686babc7231af0183c) version: 0.4.0(patch_hash=c787371eeb2af011ea934e8818a0dad6d7dcb2df31bbb1686babc7231af0183c)
@ -259,7 +259,7 @@ importers:
version: 1.54.1 version: 1.54.1
'@stylistic/eslint-plugin': '@stylistic/eslint-plugin':
specifier: 5.1.0 specifier: 5.1.0
version: 5.1.0(eslint@9.30.1) version: 5.1.0(eslint@9.31.0)
'@total-typescript/ts-reset': '@total-typescript/ts-reset':
specifier: 0.6.1 specifier: 0.6.1
version: 0.6.1 version: 0.6.1
@ -294,8 +294,8 @@ importers:
specifier: 0.38.15 specifier: 0.38.15
version: 0.38.15 version: 0.38.15
electron: electron:
specifier: 37.2.1 specifier: 38.0.0-alpha.5
version: 37.2.1 version: 38.0.0-alpha.5
electron-builder: electron-builder:
specifier: 26.0.12 specifier: 26.0.12
version: 26.0.12(electron-builder-squirrel-windows@26.0.12) version: 26.0.12(electron-builder-squirrel-windows@26.0.12)
@ -312,26 +312,26 @@ importers:
specifier: 0.25.6 specifier: 0.25.6
version: 0.25.6 version: 0.25.6
eslint: eslint:
specifier: 9.30.1 specifier: 9.31.0
version: 9.30.1 version: 9.31.0
eslint-config-prettier: eslint-config-prettier:
specifier: 10.1.5 specifier: 10.1.5
version: 10.1.5(eslint@9.30.1) version: 10.1.5(eslint@9.31.0)
eslint-import-resolver-exports: eslint-import-resolver-exports:
specifier: 1.0.0-beta.5 specifier: 1.0.0-beta.5
version: 1.0.0-beta.5(eslint-plugin-import@2.32.0)(eslint@9.30.1) version: 1.0.0-beta.5(eslint-plugin-import@2.32.0)(eslint@9.31.0)
eslint-import-resolver-typescript: eslint-import-resolver-typescript:
specifier: 4.4.4 specifier: 4.4.4
version: 4.4.4(eslint-plugin-import@2.32.0)(eslint@9.30.1) version: 4.4.4(eslint-plugin-import@2.32.0)(eslint@9.31.0)
eslint-plugin-import: eslint-plugin-import:
specifier: 2.32.0 specifier: 2.32.0
version: 2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1)(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.30.1) version: 2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0)(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.31.0)
eslint-plugin-prettier: eslint-plugin-prettier:
specifier: 5.5.1 specifier: 5.5.1
version: 5.5.1(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.30.1))(eslint@9.30.1)(prettier@3.5.2) version: 5.5.1(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.31.0))(eslint@9.31.0)(prettier@3.5.2)
eslint-plugin-solid: eslint-plugin-solid:
specifier: 0.14.5 specifier: 0.14.5
version: 0.14.5(eslint@9.30.1)(typescript@5.8.3) version: 0.14.5(eslint@9.31.0)(typescript@5.8.3)
glob: glob:
specifier: 11.0.3 specifier: 11.0.3
version: 11.0.3 version: 11.0.3
@ -342,14 +342,14 @@ importers:
specifier: 1.54.1 specifier: 1.54.1
version: 1.54.1 version: 1.54.1
rollup: rollup:
specifier: 4.44.2 specifier: 4.45.0
version: 4.44.2 version: 4.45.0
typescript: typescript:
specifier: 5.8.3 specifier: 5.8.3
version: 5.8.3 version: 5.8.3
typescript-eslint: typescript-eslint:
specifier: 8.36.0 specifier: 8.36.0
version: 8.36.0(eslint@9.30.1)(typescript@5.8.3) version: 8.36.0(eslint@9.31.0)(typescript@5.8.3)
utf-8-validate: utf-8-validate:
specifier: 6.0.5 specifier: 6.0.5
version: 6.0.5 version: 6.0.5
@ -381,10 +381,10 @@ packages:
'@assemblyscript/loader@0.17.14': '@assemblyscript/loader@0.17.14':
resolution: {integrity: sha512-+PVTOfla/0XMLRTQLJFPg4u40XcdTfon6GGea70hBGi8Pd7ZymIXyVUR+vK8wt5Jb4MVKTKPIz43Myyebw5mZA==} resolution: {integrity: sha512-+PVTOfla/0XMLRTQLJFPg4u40XcdTfon6GGea70hBGi8Pd7ZymIXyVUR+vK8wt5Jb4MVKTKPIz43Myyebw5mZA==}
'@asteasolutions/zod-to-openapi@7.3.0': '@asteasolutions/zod-to-openapi@8.0.0-beta.4':
resolution: {integrity: sha512-7tE/r1gXwMIvGnXVUdIqUhCU1RevEFC4Jk6Bussa0fk1ecbnnINkZzj1EOAJyE/M3AI25DnHT/zKQL1/FPFi8Q==} resolution: {integrity: sha512-om7KH4B6/Rd/jjrxUjV3yC7vUwKKQcM1m7R8jd12uZyBqYd4ihqa1mMHp9MG3Hau8M/ha6teNJLouDUvwZXpNg==}
peerDependencies: peerDependencies:
zod: ^3.20.2 zod: ~3.25.1
'@babel/code-frame@7.27.1': '@babel/code-frame@7.27.1':
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
@ -741,12 +741,16 @@ packages:
resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/core@0.15.1':
resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.3.1': '@eslint/eslintrc@3.3.1':
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.30.1': '@eslint/js@9.31.0':
resolution: {integrity: sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==} resolution: {integrity: sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.6': '@eslint/object-schema@2.1.6':
@ -816,12 +820,12 @@ packages:
peerDependencies: peerDependencies:
hono: '*' hono: '*'
'@hono/zod-openapi@0.19.9': '@hono/zod-openapi@1.0.0-beta.1':
resolution: {integrity: sha512-TonPfh8xUdsdzWNMiKOYSG4Wk2DkZIShHZoXkdOSjPmqpnobXpvSQU3w3XmB7N2t12I2NnnoGSHyMj+BXk+1bw==} resolution: {integrity: sha512-4GYMrB1+Ni0kCCBLUOPlVEGA5XcYzBShKheoXoxJjpitcxgZPwwoinunhgNqGCOF/VY0oLw5GXOiKtK0tkpOhA==}
engines: {node: '>=16.0.0'} engines: {node: '>=16.0.0'}
peerDependencies: peerDependencies:
hono: '>=4.3.6' hono: '>=4.3.6'
zod: 3.* zod: ^3.25.0
'@hono/zod-validator@0.7.0': '@hono/zod-validator@0.7.0':
resolution: {integrity: sha512-qe2ZE6sHFE98dcUrbYMtS3bAV8hqcCOflykvZga2S7XhmNSZzT+dIz4OuMILsjLHkJw9JMn912/dB7dQOmuPvg==} resolution: {integrity: sha512-qe2ZE6sHFE98dcUrbYMtS3bAV8hqcCOflykvZga2S7XhmNSZzT+dIz4OuMILsjLHkJw9JMn912/dB7dQOmuPvg==}
@ -1156,103 +1160,103 @@ packages:
'@rolldown/pluginutils@1.0.0-beta.26': '@rolldown/pluginutils@1.0.0-beta.26':
resolution: {integrity: sha512-r/5po89voz/QRPDmoErL10+hVuTAuz1SHvokx+yWBlOIPB5C41jC7QhLqq9kaebx/+EHyoV3z22/qBfX81Ns8A==} resolution: {integrity: sha512-r/5po89voz/QRPDmoErL10+hVuTAuz1SHvokx+yWBlOIPB5C41jC7QhLqq9kaebx/+EHyoV3z22/qBfX81Ns8A==}
'@rollup/rollup-android-arm-eabi@4.44.2': '@rollup/rollup-android-arm-eabi@4.45.0':
resolution: {integrity: sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==} resolution: {integrity: sha512-2o/FgACbji4tW1dzXOqAV15Eu7DdgbKsF2QKcxfG4xbh5iwU7yr5RRP5/U+0asQliSYv5M4o7BevlGIoSL0LXg==}
cpu: [arm] cpu: [arm]
os: [android] os: [android]
'@rollup/rollup-android-arm64@4.44.2': '@rollup/rollup-android-arm64@4.45.0':
resolution: {integrity: sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==} resolution: {integrity: sha512-PSZ0SvMOjEAxwZeTx32eI/j5xSYtDCRxGu5k9zvzoY77xUNssZM+WV6HYBLROpY5CkXsbQjvz40fBb7WPwDqtQ==}
cpu: [arm64] cpu: [arm64]
os: [android] os: [android]
'@rollup/rollup-darwin-arm64@4.44.2': '@rollup/rollup-darwin-arm64@4.45.0':
resolution: {integrity: sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==} resolution: {integrity: sha512-BA4yPIPssPB2aRAWzmqzQ3y2/KotkLyZukVB7j3psK/U3nVJdceo6qr9pLM2xN6iRP/wKfxEbOb1yrlZH6sYZg==}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@rollup/rollup-darwin-x64@4.44.2': '@rollup/rollup-darwin-x64@4.45.0':
resolution: {integrity: sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==} resolution: {integrity: sha512-Pr2o0lvTwsiG4HCr43Zy9xXrHspyMvsvEw4FwKYqhli4FuLE5FjcZzuQ4cfPe0iUFCvSQG6lACI0xj74FDZKRA==}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@rollup/rollup-freebsd-arm64@4.44.2': '@rollup/rollup-freebsd-arm64@4.45.0':
resolution: {integrity: sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==} resolution: {integrity: sha512-lYE8LkE5h4a/+6VnnLiL14zWMPnx6wNbDG23GcYFpRW1V9hYWHAw9lBZ6ZUIrOaoK7NliF1sdwYGiVmziUF4vA==}
cpu: [arm64] cpu: [arm64]
os: [freebsd] os: [freebsd]
'@rollup/rollup-freebsd-x64@4.44.2': '@rollup/rollup-freebsd-x64@4.45.0':
resolution: {integrity: sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==} resolution: {integrity: sha512-PVQWZK9sbzpvqC9Q0GlehNNSVHR+4m7+wET+7FgSnKG3ci5nAMgGmr9mGBXzAuE5SvguCKJ6mHL6vq1JaJ/gvw==}
cpu: [x64] cpu: [x64]
os: [freebsd] os: [freebsd]
'@rollup/rollup-linux-arm-gnueabihf@4.44.2': '@rollup/rollup-linux-arm-gnueabihf@4.45.0':
resolution: {integrity: sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==} resolution: {integrity: sha512-hLrmRl53prCcD+YXTfNvXd776HTxNh8wPAMllusQ+amcQmtgo3V5i/nkhPN6FakW+QVLoUUr2AsbtIRPFU3xIA==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm-musleabihf@4.44.2': '@rollup/rollup-linux-arm-musleabihf@4.45.0':
resolution: {integrity: sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==} resolution: {integrity: sha512-XBKGSYcrkdiRRjl+8XvrUR3AosXU0NvF7VuqMsm7s5nRy+nt58ZMB19Jdp1RdqewLcaYnpk8zeVs/4MlLZEJxw==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm64-gnu@4.44.2': '@rollup/rollup-linux-arm64-gnu@4.45.0':
resolution: {integrity: sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==} resolution: {integrity: sha512-fRvZZPUiBz7NztBE/2QnCS5AtqLVhXmUOPj9IHlfGEXkapgImf4W9+FSkL8cWqoAjozyUzqFmSc4zh2ooaeF6g==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm64-musl@4.44.2': '@rollup/rollup-linux-arm64-musl@4.45.0':
resolution: {integrity: sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==} resolution: {integrity: sha512-Btv2WRZOcUGi8XU80XwIvzTg4U6+l6D0V6sZTrZx214nrwxw5nAi8hysaXj/mctyClWgesyuxbeLylCBNauimg==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@rollup/rollup-linux-loongarch64-gnu@4.44.2': '@rollup/rollup-linux-loongarch64-gnu@4.45.0':
resolution: {integrity: sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==} resolution: {integrity: sha512-Li0emNnwtUZdLwHjQPBxn4VWztcrw/h7mgLyHiEI5Z0MhpeFGlzaiBHpSNVOMB/xucjXTTcO+dhv469Djr16KA==}
cpu: [loong64] cpu: [loong64]
os: [linux] os: [linux]
'@rollup/rollup-linux-powerpc64le-gnu@4.44.2': '@rollup/rollup-linux-powerpc64le-gnu@4.45.0':
resolution: {integrity: sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==} resolution: {integrity: sha512-sB8+pfkYx2kvpDCfd63d5ScYT0Fz1LO6jIb2zLZvmK9ob2D8DeVqrmBDE0iDK8KlBVmsTNzrjr3G1xV4eUZhSw==}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
'@rollup/rollup-linux-riscv64-gnu@4.44.2': '@rollup/rollup-linux-riscv64-gnu@4.45.0':
resolution: {integrity: sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==} resolution: {integrity: sha512-5GQ6PFhh7E6jQm70p1aW05G2cap5zMOvO0se5JMecHeAdj5ZhWEHbJ4hiKpfi1nnnEdTauDXxPgXae/mqjow9w==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
'@rollup/rollup-linux-riscv64-musl@4.44.2': '@rollup/rollup-linux-riscv64-musl@4.45.0':
resolution: {integrity: sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==} resolution: {integrity: sha512-N/euLsBd1rekWcuduakTo/dJw6U6sBP3eUq+RXM9RNfPuWTvG2w/WObDkIvJ2KChy6oxZmOSC08Ak2OJA0UiAA==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
'@rollup/rollup-linux-s390x-gnu@4.44.2': '@rollup/rollup-linux-s390x-gnu@4.45.0':
resolution: {integrity: sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==} resolution: {integrity: sha512-2l9sA7d7QdikL0xQwNMO3xURBUNEWyHVHfAsHsUdq+E/pgLTUcCE+gih5PCdmyHmfTDeXUWVhqL0WZzg0nua3g==}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
'@rollup/rollup-linux-x64-gnu@4.44.2': '@rollup/rollup-linux-x64-gnu@4.45.0':
resolution: {integrity: sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==} resolution: {integrity: sha512-XZdD3fEEQcwG2KrJDdEQu7NrHonPxxaV0/w2HpvINBdcqebz1aL+0vM2WFJq4DeiAVT6F5SUQas65HY5JDqoPw==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@rollup/rollup-linux-x64-musl@4.44.2': '@rollup/rollup-linux-x64-musl@4.45.0':
resolution: {integrity: sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==} resolution: {integrity: sha512-7ayfgvtmmWgKWBkCGg5+xTQ0r5V1owVm67zTrsEY1008L5ro7mCyGYORomARt/OquB9KY7LpxVBZes+oSniAAQ==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@rollup/rollup-win32-arm64-msvc@4.44.2': '@rollup/rollup-win32-arm64-msvc@4.45.0':
resolution: {integrity: sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==} resolution: {integrity: sha512-B+IJgcBnE2bm93jEW5kHisqvPITs4ddLOROAcOc/diBgrEiQJJ6Qcjby75rFSmH5eMGrqJryUgJDhrfj942apQ==}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@rollup/rollup-win32-ia32-msvc@4.44.2': '@rollup/rollup-win32-ia32-msvc@4.45.0':
resolution: {integrity: sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==} resolution: {integrity: sha512-+CXwwG66g0/FpWOnP/v1HnrGVSOygK/osUbu3wPRy8ECXjoYKjRAyfxYpDQOfghC5qPJYLPH0oN4MCOjwgdMug==}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
'@rollup/rollup-win32-x64-msvc@4.44.2': '@rollup/rollup-win32-x64-msvc@4.45.0':
resolution: {integrity: sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==} resolution: {integrity: sha512-SRf1cytG7wqcHVLrBc9VtPK4pU5wxiB/lNIkNmW2ApKXIg+RpqwHfsaEK+e7eH4A1BpI6BX/aBWXxZCIrJg3uA==}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@ -1839,8 +1843,8 @@ packages:
butterchurn-presets@3.0.0-beta.4: butterchurn-presets@3.0.0-beta.4:
resolution: {integrity: sha512-TbQLUPvGOYMZAtWKoCmBtludh9aQZ6NaMGQU4lvPeadBPy3Du3yNmwBjlTMLP5c5mRWElxQPjTL1PtR7FZK3OQ==} resolution: {integrity: sha512-TbQLUPvGOYMZAtWKoCmBtludh9aQZ6NaMGQU4lvPeadBPy3Du3yNmwBjlTMLP5c5mRWElxQPjTL1PtR7FZK3OQ==}
butterchurn@3.0.0-beta.4: butterchurn@3.0.0-beta.5:
resolution: {integrity: sha512-hiY1ktHYHQ8MT65nnZi7GjrgZZ6sl/ipT5rBqEfaYJd90L4SvOtB6lVxtKadtzAyJo2TQJc4gJfEca4cpZo0DA==} resolution: {integrity: sha512-BStK4OAbBb9Pvt8PuQlS4WVmYBwU1KuDMRHF1V89QjoIFauAqq7tpV4EpYXj7K563r5daLrMX+2y5DBhZZ9Xig==}
bytes@3.0.0: bytes@3.0.0:
resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==}
@ -2251,8 +2255,8 @@ packages:
ecma-proposal-math-extensions@0.0.2: ecma-proposal-math-extensions@0.0.2:
resolution: {integrity: sha512-80BnDp2Fn7RxXlEr5HHZblniY4aQ97MOAicdWWpSo0vkQiISSE9wLR4SqxKsu4gCtXFBIPPzy8JMhay4NWRg/Q==} resolution: {integrity: sha512-80BnDp2Fn7RxXlEr5HHZblniY4aQ97MOAicdWWpSo0vkQiISSE9wLR4SqxKsu4gCtXFBIPPzy8JMhay4NWRg/Q==}
eel-wasm@0.0.15: eel-wasm@0.0.16:
resolution: {integrity: sha512-FSTWf6lwGn7Zc3QiV+KxWTznIqq4j9eST/aXmyN/cC39+1Arqs13YOMosHQ7tqUt+OjQmG79Vd41f9gu+w1lvA==} resolution: {integrity: sha512-1tkId7I7E1Vs4fXTRsH83Sjn2S/AbzrVQKLBRGys6NLc3eVH4NBffJsdEeLHOWWUgQpVXBEP3CV/srUZNIuBnw==}
ejs@3.1.10: ejs@3.1.10:
resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
@ -2327,6 +2331,11 @@ packages:
engines: {node: '>= 12.20.55'} engines: {node: '>= 12.20.55'}
hasBin: true hasBin: true
electron@38.0.0-alpha.5:
resolution: {integrity: sha512-h3IB0Z5hGf5zjBDVM9H/B6mNGS8m5NCPcNDe+nOg8qyI3yfKPcE3VVDb8RpAc9cqFhhCvyN7pCt8o5z9a8gejQ==}
engines: {node: '>= 12.20.55'}
hasBin: true
emoji-regex@8.0.0: emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@ -2519,8 +2528,8 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint@9.30.1: eslint@9.31.0:
resolution: {integrity: sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==} resolution: {integrity: sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@ -4157,8 +4166,8 @@ packages:
resolution: {integrity: sha512-2rad1JDFst/GD1J86RuqN1SIP8O8Xv4UbqNyKaVayXTjgF0D6HpvTnUZ1RQ6tANpZweGmq4v6Ay0uyRNEycFPw==} resolution: {integrity: sha512-2rad1JDFst/GD1J86RuqN1SIP8O8Xv4UbqNyKaVayXTjgF0D6HpvTnUZ1RQ6tANpZweGmq4v6Ay0uyRNEycFPw==}
hasBin: true hasBin: true
rollup@4.44.2: rollup@4.45.0:
resolution: {integrity: sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==} resolution: {integrity: sha512-WLjEcJRIo7i3WDDgOIJqVI2d+lAC3EwvOGy+Xfq6hs+GQuAA4Di/H72xmXkOhrIWFg2PFYSKZYfH0f4vfKXN4A==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'} engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true hasBin: true
@ -4932,7 +4941,7 @@ snapshots:
'@assemblyscript/loader@0.17.14': {} '@assemblyscript/loader@0.17.14': {}
'@asteasolutions/zod-to-openapi@7.3.0(zod@4.0.5)': '@asteasolutions/zod-to-openapi@8.0.0-beta.4(zod@4.0.5)':
dependencies: dependencies:
openapi3-ts: 4.5.0 openapi3-ts: 4.5.0
zod: 4.0.5 zod: 4.0.5
@ -5173,9 +5182,9 @@ snapshots:
- bluebird - bluebird
- supports-color - supports-color
'@electron/remote@2.1.3(electron@37.2.1)': '@electron/remote@2.1.3(electron@38.0.0-alpha.5)':
dependencies: dependencies:
electron: 37.2.1 electron: 38.0.0-alpha.5
'@electron/universal@3.0.0': '@electron/universal@3.0.0':
dependencies: dependencies:
@ -5293,9 +5302,9 @@ snapshots:
'@esbuild/win32-x64@0.25.6': '@esbuild/win32-x64@0.25.6':
optional: true optional: true
'@eslint-community/eslint-utils@4.7.0(eslint@9.30.1)': '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0)':
dependencies: dependencies:
eslint: 9.30.1 eslint: 9.31.0
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {} '@eslint-community/regexpp@4.12.1': {}
@ -5314,6 +5323,10 @@ snapshots:
dependencies: dependencies:
'@types/json-schema': 7.0.15 '@types/json-schema': 7.0.15
'@eslint/core@0.15.1':
dependencies:
'@types/json-schema': 7.0.15
'@eslint/eslintrc@3.3.1': '@eslint/eslintrc@3.3.1':
dependencies: dependencies:
ajv: 6.12.6 ajv: 6.12.6
@ -5328,7 +5341,7 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@eslint/js@9.30.1': {} '@eslint/js@9.31.0': {}
'@eslint/object-schema@2.1.6': {} '@eslint/object-schema@2.1.6': {}
@ -5366,16 +5379,16 @@ snapshots:
dependencies: dependencies:
'@ghostery/adblocker-extended-selectors': 2.11.1 '@ghostery/adblocker-extended-selectors': 2.11.1
'@ghostery/adblocker-electron-preload@2.11.1(electron@37.2.1)': '@ghostery/adblocker-electron-preload@2.11.1(electron@38.0.0-alpha.5)':
dependencies: dependencies:
'@ghostery/adblocker-content': 2.11.1 '@ghostery/adblocker-content': 2.11.1
electron: 37.2.1 electron: 38.0.0-alpha.5
'@ghostery/adblocker-electron@2.11.1(electron@37.2.1)': '@ghostery/adblocker-electron@2.11.1(electron@38.0.0-alpha.5)':
dependencies: dependencies:
'@ghostery/adblocker': 2.11.1 '@ghostery/adblocker': 2.11.1
'@ghostery/adblocker-electron-preload': 2.11.1(electron@37.2.1) '@ghostery/adblocker-electron-preload': 2.11.1(electron@38.0.0-alpha.5)
electron: 37.2.1 electron: 38.0.0-alpha.5
tldts-experimental: 7.0.9 tldts-experimental: 7.0.9
'@ghostery/adblocker-extended-selectors@2.11.1': {} '@ghostery/adblocker-extended-selectors@2.11.1': {}
@ -5402,12 +5415,11 @@ snapshots:
dependencies: dependencies:
hono: 4.8.4 hono: 4.8.4
'@hono/zod-openapi@0.19.9(hono@4.8.4)(zod@4.0.5)': '@hono/zod-openapi@1.0.0-beta.1(hono@4.8.4)(zod@4.0.5)':
dependencies: dependencies:
'@asteasolutions/zod-to-openapi': 7.3.0(zod@4.0.5) '@asteasolutions/zod-to-openapi': 8.0.0-beta.4(zod@4.0.5)
'@hono/zod-validator': 0.7.0(hono@4.8.4)(zod@4.0.5) '@hono/zod-validator': 0.7.0(hono@4.8.4)(zod@4.0.5)
hono: 4.8.4 hono: 4.8.4
openapi3-ts: 4.5.0
zod: 4.0.5 zod: 4.0.5
'@hono/zod-validator@0.7.0(hono@4.8.4)(zod@4.0.5)': '@hono/zod-validator@0.7.0(hono@4.8.4)(zod@4.0.5)':
@ -5805,64 +5817,64 @@ snapshots:
'@rolldown/pluginutils@1.0.0-beta.26': {} '@rolldown/pluginutils@1.0.0-beta.26': {}
'@rollup/rollup-android-arm-eabi@4.44.2': '@rollup/rollup-android-arm-eabi@4.45.0':
optional: true optional: true
'@rollup/rollup-android-arm64@4.44.2': '@rollup/rollup-android-arm64@4.45.0':
optional: true optional: true
'@rollup/rollup-darwin-arm64@4.44.2': '@rollup/rollup-darwin-arm64@4.45.0':
optional: true optional: true
'@rollup/rollup-darwin-x64@4.44.2': '@rollup/rollup-darwin-x64@4.45.0':
optional: true optional: true
'@rollup/rollup-freebsd-arm64@4.44.2': '@rollup/rollup-freebsd-arm64@4.45.0':
optional: true optional: true
'@rollup/rollup-freebsd-x64@4.44.2': '@rollup/rollup-freebsd-x64@4.45.0':
optional: true optional: true
'@rollup/rollup-linux-arm-gnueabihf@4.44.2': '@rollup/rollup-linux-arm-gnueabihf@4.45.0':
optional: true optional: true
'@rollup/rollup-linux-arm-musleabihf@4.44.2': '@rollup/rollup-linux-arm-musleabihf@4.45.0':
optional: true optional: true
'@rollup/rollup-linux-arm64-gnu@4.44.2': '@rollup/rollup-linux-arm64-gnu@4.45.0':
optional: true optional: true
'@rollup/rollup-linux-arm64-musl@4.44.2': '@rollup/rollup-linux-arm64-musl@4.45.0':
optional: true optional: true
'@rollup/rollup-linux-loongarch64-gnu@4.44.2': '@rollup/rollup-linux-loongarch64-gnu@4.45.0':
optional: true optional: true
'@rollup/rollup-linux-powerpc64le-gnu@4.44.2': '@rollup/rollup-linux-powerpc64le-gnu@4.45.0':
optional: true optional: true
'@rollup/rollup-linux-riscv64-gnu@4.44.2': '@rollup/rollup-linux-riscv64-gnu@4.45.0':
optional: true optional: true
'@rollup/rollup-linux-riscv64-musl@4.44.2': '@rollup/rollup-linux-riscv64-musl@4.45.0':
optional: true optional: true
'@rollup/rollup-linux-s390x-gnu@4.44.2': '@rollup/rollup-linux-s390x-gnu@4.45.0':
optional: true optional: true
'@rollup/rollup-linux-x64-gnu@4.44.2': '@rollup/rollup-linux-x64-gnu@4.45.0':
optional: true optional: true
'@rollup/rollup-linux-x64-musl@4.44.2': '@rollup/rollup-linux-x64-musl@4.45.0':
optional: true optional: true
'@rollup/rollup-win32-arm64-msvc@4.44.2': '@rollup/rollup-win32-arm64-msvc@4.45.0':
optional: true optional: true
'@rollup/rollup-win32-ia32-msvc@4.44.2': '@rollup/rollup-win32-ia32-msvc@4.45.0':
optional: true optional: true
'@rollup/rollup-win32-x64-msvc@4.44.2': '@rollup/rollup-win32-x64-msvc@4.45.0':
optional: true optional: true
'@rtsao/scc@1.1.0': {} '@rtsao/scc@1.1.0': {}
@ -5895,11 +5907,11 @@ snapshots:
dependencies: dependencies:
solid-js: 1.9.7 solid-js: 1.9.7
'@stylistic/eslint-plugin@5.1.0(eslint@9.30.1)': '@stylistic/eslint-plugin@5.1.0(eslint@9.31.0)':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1) '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0)
'@typescript-eslint/types': 8.36.0 '@typescript-eslint/types': 8.36.0
eslint: 9.30.1 eslint: 9.31.0
eslint-visitor-keys: 4.2.1 eslint-visitor-keys: 4.2.1
espree: 10.4.0 espree: 10.4.0
estraverse: 5.3.0 estraverse: 5.3.0
@ -6028,15 +6040,15 @@ snapshots:
'@types/node': 22.13.5 '@types/node': 22.13.5
optional: true optional: true
'@typescript-eslint/eslint-plugin@8.36.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1)(typescript@5.8.3))(eslint@9.30.1)(typescript@5.8.3)': '@typescript-eslint/eslint-plugin@8.36.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0)(typescript@5.8.3))(eslint@9.31.0)(typescript@5.8.3)':
dependencies: dependencies:
'@eslint-community/regexpp': 4.12.1 '@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.36.0(eslint@9.30.1)(typescript@5.8.3) '@typescript-eslint/parser': 8.36.0(eslint@9.31.0)(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.36.0 '@typescript-eslint/scope-manager': 8.36.0
'@typescript-eslint/type-utils': 8.36.0(eslint@9.30.1)(typescript@5.8.3) '@typescript-eslint/type-utils': 8.36.0(eslint@9.31.0)(typescript@5.8.3)
'@typescript-eslint/utils': 8.36.0(eslint@9.30.1)(typescript@5.8.3) '@typescript-eslint/utils': 8.36.0(eslint@9.31.0)(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.36.0 '@typescript-eslint/visitor-keys': 8.36.0
eslint: 9.30.1 eslint: 9.31.0
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 7.0.3 ignore: 7.0.3
natural-compare: 1.4.0 natural-compare: 1.4.0
@ -6045,14 +6057,14 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/parser@8.36.0(eslint@9.30.1)(typescript@5.8.3)': '@typescript-eslint/parser@8.36.0(eslint@9.31.0)(typescript@5.8.3)':
dependencies: dependencies:
'@typescript-eslint/scope-manager': 8.36.0 '@typescript-eslint/scope-manager': 8.36.0
'@typescript-eslint/types': 8.36.0 '@typescript-eslint/types': 8.36.0
'@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3) '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.36.0 '@typescript-eslint/visitor-keys': 8.36.0
debug: 4.4.1 debug: 4.4.1
eslint: 9.30.1 eslint: 9.31.0
typescript: 5.8.3 typescript: 5.8.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -6075,12 +6087,12 @@ snapshots:
dependencies: dependencies:
typescript: 5.8.3 typescript: 5.8.3
'@typescript-eslint/type-utils@8.36.0(eslint@9.30.1)(typescript@5.8.3)': '@typescript-eslint/type-utils@8.36.0(eslint@9.31.0)(typescript@5.8.3)':
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3) '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3)
'@typescript-eslint/utils': 8.36.0(eslint@9.30.1)(typescript@5.8.3) '@typescript-eslint/utils': 8.36.0(eslint@9.31.0)(typescript@5.8.3)
debug: 4.4.1 debug: 4.4.1
eslint: 9.30.1 eslint: 9.31.0
ts-api-utils: 2.1.0(typescript@5.8.3) ts-api-utils: 2.1.0(typescript@5.8.3)
typescript: 5.8.3 typescript: 5.8.3
transitivePeerDependencies: transitivePeerDependencies:
@ -6104,13 +6116,13 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/utils@8.36.0(eslint@9.30.1)(typescript@5.8.3)': '@typescript-eslint/utils@8.36.0(eslint@9.31.0)(typescript@5.8.3)':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1) '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0)
'@typescript-eslint/scope-manager': 8.36.0 '@typescript-eslint/scope-manager': 8.36.0
'@typescript-eslint/types': 8.36.0 '@typescript-eslint/types': 8.36.0
'@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3) '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3)
eslint: 9.30.1 eslint: 9.31.0
typescript: 5.8.3 typescript: 5.8.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -6546,12 +6558,11 @@ snapshots:
dependencies: dependencies:
'@babel/runtime': 7.27.6 '@babel/runtime': 7.27.6
butterchurn@3.0.0-beta.4: butterchurn@3.0.0-beta.5:
dependencies: dependencies:
'@assemblyscript/loader': 0.17.14 '@assemblyscript/loader': 0.17.14
'@babel/runtime': 7.27.6
ecma-proposal-math-extensions: 0.0.2 ecma-proposal-math-extensions: 0.0.2
eel-wasm: 0.0.15 eel-wasm: 0.0.16
bytes@3.0.0: {} bytes@3.0.0: {}
@ -6807,9 +6818,9 @@ snapshots:
csstype@3.1.3: {} csstype@3.1.3: {}
custom-electron-prompt@1.5.8(electron@37.2.1): custom-electron-prompt@1.5.8(electron@38.0.0-alpha.5):
dependencies: dependencies:
electron: 37.2.1 electron: 38.0.0-alpha.5
data-uri-to-buffer@4.0.1: {} data-uri-to-buffer@4.0.1: {}
@ -7012,7 +7023,7 @@ snapshots:
ecma-proposal-math-extensions@0.0.2: {} ecma-proposal-math-extensions@0.0.2: {}
eel-wasm@0.0.15: {} eel-wasm@0.0.16: {}
ejs@3.1.10: ejs@3.1.10:
dependencies: dependencies:
@ -7149,6 +7160,14 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
electron@38.0.0-alpha.5:
dependencies:
'@electron/get': 2.0.3
'@types/node': 22.13.5
extract-zip: 2.0.1
transitivePeerDependencies:
- supports-color
emoji-regex@8.0.0: {} emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {} emoji-regex@9.2.2: {}
@ -7312,9 +7331,9 @@ snapshots:
escape-string-regexp@5.0.0: {} escape-string-regexp@5.0.0: {}
eslint-config-prettier@10.1.5(eslint@9.30.1): eslint-config-prettier@10.1.5(eslint@9.31.0):
dependencies: dependencies:
eslint: 9.30.1 eslint: 9.31.0
eslint-import-context@0.1.8(unrs-resolver@1.7.11): eslint-import-context@0.1.8(unrs-resolver@1.7.11):
dependencies: dependencies:
@ -7323,10 +7342,10 @@ snapshots:
optionalDependencies: optionalDependencies:
unrs-resolver: 1.7.11 unrs-resolver: 1.7.11
eslint-import-resolver-exports@1.0.0-beta.5(eslint-plugin-import@2.32.0)(eslint@9.30.1): eslint-import-resolver-exports@1.0.0-beta.5(eslint-plugin-import@2.32.0)(eslint@9.31.0):
dependencies: dependencies:
eslint: 9.30.1 eslint: 9.31.0
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1)(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.30.1) eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0)(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.31.0)
resolve.exports: 2.0.3 resolve.exports: 2.0.3
eslint-import-resolver-node@0.3.9: eslint-import-resolver-node@0.3.9:
@ -7337,10 +7356,10 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-import-resolver-typescript@4.4.4(eslint-plugin-import@2.32.0)(eslint@9.30.1): eslint-import-resolver-typescript@4.4.4(eslint-plugin-import@2.32.0)(eslint@9.31.0):
dependencies: dependencies:
debug: 4.4.1 debug: 4.4.1
eslint: 9.30.1 eslint: 9.31.0
eslint-import-context: 0.1.8(unrs-resolver@1.7.11) eslint-import-context: 0.1.8(unrs-resolver@1.7.11)
get-tsconfig: 4.10.1 get-tsconfig: 4.10.1
is-bun-module: 2.0.0 is-bun-module: 2.0.0
@ -7348,22 +7367,22 @@ snapshots:
tinyglobby: 0.2.14 tinyglobby: 0.2.14
unrs-resolver: 1.7.11 unrs-resolver: 1.7.11
optionalDependencies: optionalDependencies:
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1)(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.30.1) eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0)(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.31.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.36.0(eslint@9.30.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.30.1): eslint-module-utils@2.12.1(@typescript-eslint/parser@8.36.0(eslint@9.31.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.31.0):
dependencies: dependencies:
debug: 3.2.7 debug: 3.2.7
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.36.0(eslint@9.30.1)(typescript@5.8.3) '@typescript-eslint/parser': 8.36.0(eslint@9.31.0)(typescript@5.8.3)
eslint: 9.30.1 eslint: 9.31.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import@2.32.0)(eslint@9.30.1) eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import@2.32.0)(eslint@9.31.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1)(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.30.1): eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0)(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.31.0):
dependencies: dependencies:
'@rtsao/scc': 1.1.0 '@rtsao/scc': 1.1.0
array-includes: 3.1.9 array-includes: 3.1.9
@ -7372,9 +7391,9 @@ snapshots:
array.prototype.flatmap: 1.3.3 array.prototype.flatmap: 1.3.3
debug: 3.2.7 debug: 3.2.7
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 9.30.1 eslint: 9.31.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.36.0(eslint@9.30.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.30.1) eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.36.0(eslint@9.31.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.31.0)
hasown: 2.0.2 hasown: 2.0.2
is-core-module: 2.16.1 is-core-module: 2.16.1
is-glob: 4.0.3 is-glob: 4.0.3
@ -7386,26 +7405,26 @@ snapshots:
string.prototype.trimend: 1.0.9 string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0 tsconfig-paths: 3.15.0
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.36.0(eslint@9.30.1)(typescript@5.8.3) '@typescript-eslint/parser': 8.36.0(eslint@9.31.0)(typescript@5.8.3)
transitivePeerDependencies: transitivePeerDependencies:
- eslint-import-resolver-typescript - eslint-import-resolver-typescript
- eslint-import-resolver-webpack - eslint-import-resolver-webpack
- supports-color - supports-color
eslint-plugin-prettier@5.5.1(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.30.1))(eslint@9.30.1)(prettier@3.5.2): eslint-plugin-prettier@5.5.1(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.31.0))(eslint@9.31.0)(prettier@3.5.2):
dependencies: dependencies:
eslint: 9.30.1 eslint: 9.31.0
prettier: 3.5.2 prettier: 3.5.2
prettier-linter-helpers: 1.0.0 prettier-linter-helpers: 1.0.0
synckit: 0.11.8 synckit: 0.11.8
optionalDependencies: optionalDependencies:
'@types/eslint': 9.6.1 '@types/eslint': 9.6.1
eslint-config-prettier: 10.1.5(eslint@9.30.1) eslint-config-prettier: 10.1.5(eslint@9.31.0)
eslint-plugin-solid@0.14.5(eslint@9.30.1)(typescript@5.8.3): eslint-plugin-solid@0.14.5(eslint@9.31.0)(typescript@5.8.3):
dependencies: dependencies:
'@typescript-eslint/utils': 8.36.0(eslint@9.30.1)(typescript@5.8.3) '@typescript-eslint/utils': 8.36.0(eslint@9.31.0)(typescript@5.8.3)
eslint: 9.30.1 eslint: 9.31.0
estraverse: 5.3.0 estraverse: 5.3.0
is-html: 2.0.0 is-html: 2.0.0
kebab-case: 1.0.2 kebab-case: 1.0.2
@ -7424,15 +7443,15 @@ snapshots:
eslint-visitor-keys@4.2.1: {} eslint-visitor-keys@4.2.1: {}
eslint@9.30.1: eslint@9.31.0:
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1) '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0)
'@eslint-community/regexpp': 4.12.1 '@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.21.0 '@eslint/config-array': 0.21.0
'@eslint/config-helpers': 0.3.0 '@eslint/config-helpers': 0.3.0
'@eslint/core': 0.14.0 '@eslint/core': 0.15.1
'@eslint/eslintrc': 3.3.1 '@eslint/eslintrc': 3.3.1
'@eslint/js': 9.30.1 '@eslint/js': 9.31.0
'@eslint/plugin-kit': 0.3.1 '@eslint/plugin-kit': 0.3.1
'@humanfs/node': 0.16.6 '@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/module-importer': 1.0.1
@ -9094,30 +9113,30 @@ snapshots:
'@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.26 '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.26
'@rolldown/binding-win32-x64-msvc': 1.0.0-beta.26 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.26
rollup@4.44.2: rollup@4.45.0:
dependencies: dependencies:
'@types/estree': 1.0.8 '@types/estree': 1.0.8
optionalDependencies: optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.44.2 '@rollup/rollup-android-arm-eabi': 4.45.0
'@rollup/rollup-android-arm64': 4.44.2 '@rollup/rollup-android-arm64': 4.45.0
'@rollup/rollup-darwin-arm64': 4.44.2 '@rollup/rollup-darwin-arm64': 4.45.0
'@rollup/rollup-darwin-x64': 4.44.2 '@rollup/rollup-darwin-x64': 4.45.0
'@rollup/rollup-freebsd-arm64': 4.44.2 '@rollup/rollup-freebsd-arm64': 4.45.0
'@rollup/rollup-freebsd-x64': 4.44.2 '@rollup/rollup-freebsd-x64': 4.45.0
'@rollup/rollup-linux-arm-gnueabihf': 4.44.2 '@rollup/rollup-linux-arm-gnueabihf': 4.45.0
'@rollup/rollup-linux-arm-musleabihf': 4.44.2 '@rollup/rollup-linux-arm-musleabihf': 4.45.0
'@rollup/rollup-linux-arm64-gnu': 4.44.2 '@rollup/rollup-linux-arm64-gnu': 4.45.0
'@rollup/rollup-linux-arm64-musl': 4.44.2 '@rollup/rollup-linux-arm64-musl': 4.45.0
'@rollup/rollup-linux-loongarch64-gnu': 4.44.2 '@rollup/rollup-linux-loongarch64-gnu': 4.45.0
'@rollup/rollup-linux-powerpc64le-gnu': 4.44.2 '@rollup/rollup-linux-powerpc64le-gnu': 4.45.0
'@rollup/rollup-linux-riscv64-gnu': 4.44.2 '@rollup/rollup-linux-riscv64-gnu': 4.45.0
'@rollup/rollup-linux-riscv64-musl': 4.44.2 '@rollup/rollup-linux-riscv64-musl': 4.45.0
'@rollup/rollup-linux-s390x-gnu': 4.44.2 '@rollup/rollup-linux-s390x-gnu': 4.45.0
'@rollup/rollup-linux-x64-gnu': 4.44.2 '@rollup/rollup-linux-x64-gnu': 4.45.0
'@rollup/rollup-linux-x64-musl': 4.44.2 '@rollup/rollup-linux-x64-musl': 4.45.0
'@rollup/rollup-win32-arm64-msvc': 4.44.2 '@rollup/rollup-win32-arm64-msvc': 4.45.0
'@rollup/rollup-win32-ia32-msvc': 4.44.2 '@rollup/rollup-win32-ia32-msvc': 4.45.0
'@rollup/rollup-win32-x64-msvc': 4.44.2 '@rollup/rollup-win32-x64-msvc': 4.45.0
fsevents: 2.3.3 fsevents: 2.3.3
run-applescript@7.0.0: {} run-applescript@7.0.0: {}
@ -9623,12 +9642,12 @@ snapshots:
possible-typed-array-names: 1.1.0 possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10 reflect.getprototypeof: 1.0.10
typescript-eslint@8.36.0(eslint@9.30.1)(typescript@5.8.3): typescript-eslint@8.36.0(eslint@9.31.0)(typescript@5.8.3):
dependencies: dependencies:
'@typescript-eslint/eslint-plugin': 8.36.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1)(typescript@5.8.3))(eslint@9.30.1)(typescript@5.8.3) '@typescript-eslint/eslint-plugin': 8.36.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0)(typescript@5.8.3))(eslint@9.31.0)(typescript@5.8.3)
'@typescript-eslint/parser': 8.36.0(eslint@9.30.1)(typescript@5.8.3) '@typescript-eslint/parser': 8.36.0(eslint@9.31.0)(typescript@5.8.3)
'@typescript-eslint/utils': 8.36.0(eslint@9.30.1)(typescript@5.8.3) '@typescript-eslint/utils': 8.36.0(eslint@9.31.0)(typescript@5.8.3)
eslint: 9.30.1 eslint: 9.31.0
typescript: 5.8.3 typescript: 5.8.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color

View File

@ -11,7 +11,7 @@ export type IStore = InstanceType<
>; >;
const migrations = { const migrations = {
'>=3.4.0'(store: IStore) { '>=3.10.0'(store: IStore) {
const lyricGeniusConfig = store.get('plugins.lyrics-genius') as const lyricGeniusConfig = store.get('plugins.lyrics-genius') as
| { | {
enabled?: boolean; enabled?: boolean;
@ -23,10 +23,16 @@ const migrations = {
const syncedLyricsConfig = store.get('plugins.synced-lyrics') as const syncedLyricsConfig = store.get('plugins.synced-lyrics') as
| SyncedLyricsPluginConfig | SyncedLyricsPluginConfig
| undefined; | undefined;
store.set('plugins.synced-lyrics', {
...syncedLyricsConfig, if (
enabled: lyricGeniusConfig.enabled, !syncedLyricsConfig ||
}); syncedLyricsConfig?.enabled !== lyricGeniusConfig?.enabled
) {
store.set('plugins.synced-lyrics', {
...syncedLyricsConfig,
enabled: lyricGeniusConfig.enabled,
});
}
store.delete('plugins.lyrics-genius'); store.delete('plugins.lyrics-genius');
} }

View File

@ -381,6 +381,11 @@
}, },
"templates": { "templates": {
"title": "فتح محدد الترجمة" "title": "فتح محدد الترجمة"
},
"toast": {
"caption-changed": "تم تغيير الترجمة الى {{language}}",
"caption-disabled": "الترجمة معطلة",
"no-captions": "الترجمة لهاته الأغنية غير متاحة"
} }
}, },
"compact-sidebar": { "compact-sidebar": {
@ -600,7 +605,15 @@
}, },
"navigation": { "navigation": {
"description": "أسهم التنقل \"التالي/السابق\" مدمجة مباشرة في الواجهة، كما في متصفحك", "description": "أسهم التنقل \"التالي/السابق\" مدمجة مباشرة في الواجهة، كما في متصفحك",
"name": "التنقل" "name": "التنقل",
"templates": {
"back": {
"title": "العودة إلى الصفحة السابقة"
},
"forward": {
"title": "إذهب إلى الصفحة المقبلة"
}
}
}, },
"no-google-login": { "no-google-login": {
"description": "إزالة أزرار وروابط تسجيل الدخول بجوجل من الواجهة", "description": "إزالة أزرار وروابط تسجيل الدخول بجوجل من الواجهة",
@ -692,7 +705,12 @@
} }
}, },
"description": "يسمح بتغيير جودة الفيديو باستخدام زر على صورة الفيديو", "description": "يسمح بتغيير جودة الفيديو باستخدام زر على صورة الفيديو",
"name": "مغير جودة الفيديو" "name": "مغير جودة الفيديو",
"renderer": {
"quality-settings-button": {
"label": "إفتح مغير الجودة"
}
}
}, },
"scrobbler": { "scrobbler": {
"description": "إضافة دعم Scrobbling (مثل Last.fm، ListenBrainz)", "description": "إضافة دعم Scrobbling (مثل Last.fm، ListenBrainz)",
@ -859,7 +877,8 @@
}, },
"name": "تفعيل الفيديو", "name": "تفعيل الفيديو",
"templates": { "templates": {
"button-song": "أغنية" "button-song": "أغنية",
"button-video": "فيديو"
} }
}, },
"visualizer": { "visualizer": {

View File

@ -1 +1,7 @@
{} {
"language": {
"code": "az",
"local-name": "Azərbaycan dili",
"name": "Azerbaijani"
}
}

View File

@ -0,0 +1,7 @@
{
"language": {
"code": "eu",
"local-name": "Euskara",
"name": "Basque"
}
}

View File

@ -381,6 +381,11 @@
}, },
"templates": { "templates": {
"title": "자막 선택기 열기" "title": "자막 선택기 열기"
},
"toast": {
"caption-changed": "자막 언어가 {{language}}(으)로 변경되었습니다",
"caption-disabled": "자막이 비활성화 되었습니다",
"no-captions": "이 곡에는 자막이 없습니다"
} }
}, },
"compact-sidebar": { "compact-sidebar": {
@ -600,7 +605,15 @@
}, },
"navigation": { "navigation": {
"description": "브라우저에서처럼, UI에 직접 통합된 앞으로/뒤로 탐색하는 화살표", "description": "브라우저에서처럼, UI에 직접 통합된 앞으로/뒤로 탐색하는 화살표",
"name": "탐색" "name": "탐색",
"templates": {
"back": {
"title": "이전 페이지로 이동"
},
"forward": {
"title": "다음 페이지로 이동"
}
}
}, },
"no-google-login": { "no-google-login": {
"description": "UI에서 Google 로그인 버튼 및 링크 제거하기", "description": "UI에서 Google 로그인 버튼 및 링크 제거하기",
@ -692,7 +705,12 @@
} }
}, },
"description": "영상 오버레이의 버튼으로 영상 품질을 변경할 수 있습니다", "description": "영상 오버레이의 버튼으로 영상 품질을 변경할 수 있습니다",
"name": "영상 품질 체인저" "name": "영상 품질 체인저",
"renderer": {
"quality-settings-button": {
"label": "영상 품질 선택기 열기"
}
}
}, },
"scrobbler": { "scrobbler": {
"description": "스크로블링 지원을 추가합니다 (예: last.fm, Listenbrainz)", "description": "스크로블링 지원을 추가합니다 (예: last.fm, Listenbrainz)",

View File

@ -381,6 +381,11 @@
}, },
"templates": { "templates": {
"title": "Открыть выбор субтитров" "title": "Открыть выбор субтитров"
},
"toast": {
"caption-changed": "Субтитры изменены на {{language}}",
"caption-disabled": "Субтитры отключены",
"no-captions": "Нет доступных субтитров для этой песни"
} }
}, },
"compact-sidebar": { "compact-sidebar": {
@ -600,7 +605,15 @@
}, },
"navigation": { "navigation": {
"description": "Стрелки навигации \"вперед/назад\" интегрированы в интерфейс, как в вашем любимом браузере", "description": "Стрелки навигации \"вперед/назад\" интегрированы в интерфейс, как в вашем любимом браузере",
"name": "Навигация" "name": "Навигация",
"templates": {
"back": {
"title": "Предыдущая страница"
},
"forward": {
"title": "Следующая страница"
}
}
}, },
"no-google-login": { "no-google-login": {
"description": "Убрать из интерфейса кнопки и ссылки для входа через Google", "description": "Убрать из интерфейса кнопки и ссылки для входа через Google",
@ -692,7 +705,12 @@
} }
}, },
"description": "Позволяет изменять качество видео с помощью кнопки на оверлее видео", "description": "Позволяет изменять качество видео с помощью кнопки на оверлее видео",
"name": "Изменение качества видео" "name": "Изменение качества видео",
"renderer": {
"quality-settings-button": {
"label": "Открыть настройки качества плеера"
}
}
}, },
"scrobbler": { "scrobbler": {
"description": "Добавляет поддержку скробблинга (last.fm, Listenbrainz)", "description": "Добавляет поддержку скробблинга (last.fm, Listenbrainz)",
@ -859,7 +877,8 @@
}, },
"name": "Переключатель видео", "name": "Переключатель видео",
"templates": { "templates": {
"button-song": "Песня" "button-song": "Песня",
"button-video": "Видео"
} }
}, },
"visualizer": { "visualizer": {

View File

@ -36,7 +36,7 @@
"details": "Yanıt verilmedi!\n{{error}}" "details": "Yanıt verilmedi!\n{{error}}"
}, },
"when-ready": { "when-ready": {
"clearing-cache-after-20s": "Uygulama ön belleği temizleme" "clearing-cache-after-20s": "Uygulama ön belleği temizle"
}, },
"window": { "window": {
"tried-to-render-offscreen": "Pencere ekranın dışında oluşturulmaya çalışıldı, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}" "tried-to-render-offscreen": "Pencere ekranın dışında oluşturulmaya çalışıldı, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
@ -209,7 +209,7 @@
"plugins": { "plugins": {
"ad-speedup": { "ad-speedup": {
"description": "Bir reklam oynatılırsa sesi kapatır ve oynatma hızını 16x olarak ayarlar", "description": "Bir reklam oynatılırsa sesi kapatır ve oynatma hızını 16x olarak ayarlar",
"name": "Hızlandırma" "name": "Reklam Hızlandırma"
}, },
"adblocker": { "adblocker": {
"description": "Tüm reklamları ve izleyicileri engelle", "description": "Tüm reklamları ve izleyicileri engelle",
@ -287,7 +287,7 @@
} }
}, },
"api-server": { "api-server": {
"description": "APİ ekle ve oynatıcıyı kontrol et", "description": "Oynatıcıyı kontrol etmek için bir API sunucusu ekle",
"dialog": { "dialog": {
"request": { "request": {
"buttons": { "buttons": {
@ -321,7 +321,7 @@
"prompt": { "prompt": {
"hostname": { "hostname": {
"label": "API sunucusu için hostname (örneğin 0.0.0.0) girin:", "label": "API sunucusu için hostname (örneğin 0.0.0.0) girin:",
"title": "Hostname" "title": "Hostname(Ana bilgisayar adı)"
}, },
"port": { "port": {
"label": "API sunucusu için port girin:", "label": "API sunucusu için port girin:",
@ -381,6 +381,11 @@
}, },
"templates": { "templates": {
"title": "Altyazı seçiciyi aç" "title": "Altyazı seçiciyi aç"
},
"toast": {
"caption-changed": "Başlık {{language}} olarak değiştirildi",
"caption-disabled": "Altyazılar devre dışı",
"no-captions": "Bu şarkı için altyazı mevcut değil"
} }
}, },
"compact-sidebar": { "compact-sidebar": {
@ -600,7 +605,15 @@
}, },
"navigation": { "navigation": {
"description": "Favori tarayıcınızdaki gibi doğrudan arayüze entegre edilmiş İleri/Geri gezinme okları", "description": "Favori tarayıcınızdaki gibi doğrudan arayüze entegre edilmiş İleri/Geri gezinme okları",
"name": "Navigasyon" "name": "Navigasyon",
"templates": {
"back": {
"title": "Önceki sayfaya git"
},
"forward": {
"title": "Sonraki sayfaya geç"
}
}
}, },
"no-google-login": { "no-google-login": {
"description": "Google giriş düğmelerini ve bağlantılarını arayüzden kaldır", "description": "Google giriş düğmelerini ve bağlantılarını arayüzden kaldır",
@ -692,7 +705,12 @@
} }
}, },
"description": "Video katmanı üzerindeki bir düğme ile video kalitesinin değiştirilmesine izin verir", "description": "Video katmanı üzerindeki bir düğme ile video kalitesinin değiştirilmesine izin verir",
"name": "Video Kalitesi Değiştirici" "name": "Video Kalitesi Değiştirici",
"renderer": {
"quality-settings-button": {
"label": "Açık oynatıcı kalite değiştirici"
}
}
}, },
"scrobbler": { "scrobbler": {
"description": "Listeleme desteği ekler (lastfm, listenbrainz ve benzeri)", "description": "Listeleme desteği ekler (lastfm, listenbrainz ve benzeri)",
@ -859,7 +877,8 @@
}, },
"name": "Video Geçiş", "name": "Video Geçiş",
"templates": { "templates": {
"button-song": "Şarkı" "button-song": "Şarkı",
"button-video": "Video"
} }
}, },
"visualizer": { "visualizer": {

View File

@ -381,6 +381,11 @@
}, },
"templates": { "templates": {
"title": "打開標題選擇器" "title": "打開標題選擇器"
},
"toast": {
"caption-changed": "字幕語言更改為{{language}}",
"caption-disabled": "停用字幕",
"no-captions": "此歌曲無標題"
} }
}, },
"compact-sidebar": { "compact-sidebar": {
@ -600,7 +605,15 @@
}, },
"navigation": { "navigation": {
"description": "允許應用程式上方顯示上一頁/下一頁按鈕", "description": "允許應用程式上方顯示上一頁/下一頁按鈕",
"name": "導覽列" "name": "導覽列",
"templates": {
"back": {
"title": "回到上一頁"
},
"forward": {
"title": "前往下一頁"
}
}
}, },
"no-google-login": { "no-google-login": {
"description": "移除 Google 登入按鈕及連結", "description": "移除 Google 登入按鈕及連結",
@ -692,7 +705,12 @@
} }
}, },
"description": "允許在影片內進行畫質更改", "description": "允許在影片內進行畫質更改",
"name": "允許變更影片畫質" "name": "允許變更影片畫質",
"renderer": {
"quality-settings-button": {
"label": "開啟畫質調整器"
}
}
}, },
"scrobbler": { "scrobbler": {
"description": "額外新增 scrobbling 支援 (例如last.fm, Listenbrainz)", "description": "額外新增 scrobbling 支援 (例如last.fm, Listenbrainz)",
@ -859,7 +877,8 @@
}, },
"name": "歌曲/影片切換", "name": "歌曲/影片切換",
"templates": { "templates": {
"button-song": "歌曲" "button-song": "歌曲",
"button-video": "影片"
} }
}, },
"visualizer": { "visualizer": {

View File

@ -126,6 +126,8 @@ app.commandLine.appendSwitch(
'enable-features', 'enable-features',
'OverlayScrollbar,SharedArrayBuffer,UseOzonePlatform,WaylandWindowDecorations', 'OverlayScrollbar,SharedArrayBuffer,UseOzonePlatform,WaylandWindowDecorations',
); );
// Disable Fluent Scrollbar (for OverlayScrollbar)
app.commandLine.appendSwitch('disable-features', 'FluentScrollbar');
if (config.get('options.disableHardwareAcceleration')) { if (config.get('options.disableHardwareAcceleration')) {
if (is.dev()) { if (is.dev()) {
console.log('Disabling hardware acceleration'); console.log('Disabling hardware acceleration');

View File

@ -19,7 +19,7 @@ export const backend = createBackend<BackendType, APIServerConfig>({
async start(ctx) { async start(ctx) {
const config = await ctx.getConfig(); const config = await ctx.getConfig();
await this.init(ctx); this.init(ctx);
registerCallback((songInfo) => { registerCallback((songInfo) => {
this.songInfo = songInfo; this.songInfo = songInfo;
}); });
@ -60,8 +60,7 @@ export const backend = createBackend<BackendType, APIServerConfig>({
}, },
// Custom // Custom
async init(ctx) { init(backendCtx) {
const config = await ctx.getConfig();
this.app = new Hono(); this.app = new Hono();
this.app.use('*', cors()); this.app.use('*', cors());
@ -74,6 +73,8 @@ export const backend = createBackend<BackendType, APIServerConfig>({
// middlewares // middlewares
this.app.use('/api/*', async (ctx, next) => { this.app.use('/api/*', async (ctx, next) => {
const config = await backendCtx.getConfig();
if (config.authStrategy !== AuthStrategy.NONE) { if (config.authStrategy !== AuthStrategy.NONE) {
return await jwt({ return await jwt({
secret: config.secret, secret: config.secret,
@ -83,6 +84,7 @@ export const backend = createBackend<BackendType, APIServerConfig>({
}); });
this.app.use('/api/*', async (ctx, next) => { this.app.use('/api/*', async (ctx, next) => {
const result = await JWTPayloadSchema.spa(await ctx.get('jwtPayload')); const result = await JWTPayloadSchema.spa(await ctx.get('jwtPayload'));
const config = await backendCtx.getConfig();
const isAuthorized = const isAuthorized =
config.authStrategy === AuthStrategy.NONE || config.authStrategy === AuthStrategy.NONE ||
@ -98,12 +100,12 @@ export const backend = createBackend<BackendType, APIServerConfig>({
// routes // routes
registerControl( registerControl(
this.app, this.app,
ctx, backendCtx,
() => this.songInfo, () => this.songInfo,
() => this.currentRepeatMode, () => this.currentRepeatMode,
() => this.volume, () => this.volume,
); );
registerAuth(this.app, ctx); registerAuth(this.app, backendCtx);
// swagger // swagger
this.app.openAPIRegistry.registerComponent( this.app.openAPIRegistry.registerComponent(

View File

@ -15,7 +15,7 @@ export type BackendType = {
currentRepeatMode?: RepeatMode; currentRepeatMode?: RepeatMode;
volume?: number; volume?: number;
init: (ctx: BackendContext<APIServerConfig>) => Promise<void>; init: (ctx: BackendContext<APIServerConfig>) => void;
run: (hostname: string, port: number) => void; run: (hostname: string, port: number) => void;
end: () => void; end: () => void;
}; };

View File

@ -7,11 +7,9 @@ import { Innertube, UniversalCache, Utils, YTNodes } from 'youtubei.js';
import is from 'electron-is'; import is from 'electron-is';
import filenamify from 'filenamify'; import filenamify from 'filenamify';
import { Mutex } from 'async-mutex'; import { Mutex } from 'async-mutex';
import { createFFmpeg } from '@ffmpeg.wasm/main';
import NodeID3, { TagConstants } from 'node-id3'; import NodeID3, { TagConstants } from 'node-id3';
import { Window } from 'happy-dom';
import { BG, type BgConfig } from 'bgutils-js'; import { BG, type BgConfig } from 'bgutils-js';
import { lazy } from 'lazy-var';
import { import {
cropMaxWidth, cropMaxWidth,
@ -44,11 +42,13 @@ import type {
type CustomSongInfo = SongInfo & { trackId?: string }; type CustomSongInfo = SongInfo & { trackId?: string };
const ffmpeg = createFFmpeg({ const ffmpeg = lazy(async () =>
log: false, (await import('@ffmpeg.wasm/main')).createFFmpeg({
logger() {}, // Console.log, log: false,
progress() {}, // Console.log, logger() {}, // Console.log,
}); progress() {}, // Console.log,
}),
);
const ffmpegMutex = new Mutex(); const ffmpegMutex = new Mutex();
let yt: Innertube; let yt: Innertube;
@ -142,7 +142,7 @@ export const onMainLoad = async ({
try { try {
const [width, height] = win.getSize(); const [width, height] = win.getSize();
// emulate jsdom using linkedom // emulate jsdom using linkedom
const window = new Window({ const window = new (await import('happy-dom')).Window({
width, width,
height, height,
console, console,
@ -505,12 +505,13 @@ async function iterableStreamToProcessedUint8Array(
return await ffmpegMutex.runExclusive(async () => { return await ffmpegMutex.runExclusive(async () => {
try { try {
if (!ffmpeg.isLoaded()) { const ffmpegInstance = await ffmpeg.get();
await ffmpeg.load(); if (!ffmpegInstance.isLoaded()) {
await ffmpegInstance.load();
} }
sendFeedback(t('plugins.downloader.backend.feedback.preparing-file')); sendFeedback(t('plugins.downloader.backend.feedback.preparing-file'));
ffmpeg.FS( ffmpegInstance.FS(
'writeFile', 'writeFile',
safeVideoName, safeVideoName,
Buffer.concat( Buffer.concat(
@ -525,7 +526,7 @@ async function iterableStreamToProcessedUint8Array(
sendFeedback(t('plugins.downloader.backend.feedback.converting')); sendFeedback(t('plugins.downloader.backend.feedback.converting'));
ffmpeg.setProgress(({ ratio }) => { ffmpegInstance.setProgress(({ ratio }) => {
sendFeedback( sendFeedback(
t('plugins.downloader.backend.feedback.conversion-progress', { t('plugins.downloader.backend.feedback.conversion-progress', {
percent: Math.floor(ratio * 100), percent: Math.floor(ratio * 100),
@ -537,7 +538,7 @@ async function iterableStreamToProcessedUint8Array(
const safeVideoNameWithExtension = `${safeVideoName}.${extension}`; const safeVideoNameWithExtension = `${safeVideoName}.${extension}`;
try { try {
await ffmpeg.run( await ffmpegInstance.run(
'-i', '-i',
safeVideoName, safeVideoName,
...presetFfmpegArgs, ...presetFfmpegArgs,
@ -545,15 +546,15 @@ async function iterableStreamToProcessedUint8Array(
safeVideoNameWithExtension, safeVideoNameWithExtension,
); );
} finally { } finally {
ffmpeg.FS('unlink', safeVideoName); ffmpegInstance.FS('unlink', safeVideoName);
} }
sendFeedback(t('plugins.downloader.backend.feedback.saving')); sendFeedback(t('plugins.downloader.backend.feedback.saving'));
try { try {
return ffmpeg.FS('readFile', safeVideoNameWithExtension); return ffmpegInstance.FS('readFile', safeVideoNameWithExtension);
} finally { } finally {
ffmpeg.FS('unlink', safeVideoNameWithExtension); ffmpegInstance.FS('unlink', safeVideoNameWithExtension);
} }
} catch (error: unknown) { } catch (error: unknown) {
sendError(error as Error, safeVideoName); sendError(error as Error, safeVideoName);