diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b846293b..0600ec79 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,16 +14,6 @@ jobs: - name: Check out Git repository uses: actions/checkout@v4 - - name: Test Upload build - env: - BRANCH_NAME: ${{ github.head_ref || github.ref_name }} - S3_ENDPOINT: ${{ secrets.S3_ENDPOINT }} - S3_ACCESS_KEY: ${{ secrets.S3_ACCESS_KEY }} - S3_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY }} - S3_BUILDS_BUCKET_NAME: ${{ secrets.S3_BUILDS_BUCKET_NAME }} - BUILD_WEBHOOK_URL: ${{ secrets.BUILD_WEBHOOK_URL }} - run: node scripts/upload-build.cjs - - name: Install Node.js uses: actions/setup-node@v4 with: @@ -57,6 +47,7 @@ jobs: RENDERER_VITE_INTERCOM_APP_ID: ${{ vars.RENDERER_VITE_INTERCOM_APP_ID }} RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.RENDERER_VITE_EXTERNAL_RESOURCES_URL }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.MAIN_VITE_EXTERNAL_RESOURCES_URL }} - name: Build Windows if: matrix.os == 'windows-latest' @@ -69,6 +60,19 @@ jobs: RENDERER_VITE_INTERCOM_APP_ID: ${{ vars.RENDERER_VITE_INTERCOM_APP_ID }} RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.RENDERER_VITE_EXTERNAL_RESOURCES_URL }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.MAIN_VITE_EXTERNAL_RESOURCES_URL }} + + - name: Test Upload build + env: + BRANCH_NAME: ${{ github.head_ref || github.ref_name }} + S3_ENDPOINT: ${{ secrets.S3_ENDPOINT }} + S3_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID }} + S3_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY }} + S3_BUILDS_BUCKET_NAME: ${{ secrets.S3_BUILDS_BUCKET_NAME }} + BUILDS_URL: ${{ secrets.BUILDS_URL }} + BUILD_WEBHOOK_URL: ${{ secrets.BUILD_WEBHOOK_URL }} + GITHUB_ACTOR: ${{ github.actor }} + run: node scripts/upload-build.cjs - name: Create artifact uses: actions/upload-artifact@v4 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b91cc743..2f1d3188 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -49,6 +49,7 @@ jobs: RENDERER_VITE_INTERCOM_APP_ID: ${{ vars.RENDERER_VITE_INTERCOM_APP_ID }} RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.RENDERER_VITE_EXTERNAL_RESOURCES_URL }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.MAIN_VITE_EXTERNAL_RESOURCES_URL }} - name: Build Windows if: matrix.os == 'windows-latest' run: yarn build:win @@ -60,6 +61,7 @@ jobs: RENDERER_VITE_INTERCOM_APP_ID: ${{ vars.RENDERER_VITE_INTERCOM_APP_ID }} RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.RENDERER_VITE_EXTERNAL_RESOURCES_URL }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.MAIN_VITE_EXTERNAL_RESOURCES_URL }} - name: Create artifact uses: actions/upload-artifact@v4 with: diff --git a/README.md b/README.md index cf014c63..a24e4cf9 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.be.md b/docs/README.be.md index 2bdde26d..51d9552e 100644 --- a/docs/README.be.md +++ b/docs/README.be.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.cs.md b/docs/README.cs.md index 30bb39b7..ce45e990 100644 --- a/docs/README.cs.md +++ b/docs/README.cs.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.da.md b/docs/README.da.md index 79513fe3..979d03f7 100644 --- a/docs/README.da.md +++ b/docs/README.da.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.de.md b/docs/README.de.md index 45ef0fec..f9b27a62 100644 --- a/docs/README.de.md +++ b/docs/README.de.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.es.md b/docs/README.es.md index 4209e94f..d47cf134 100644 --- a/docs/README.es.md +++ b/docs/README.es.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.et.md b/docs/README.et.md index c54c5b71..50df3536 100644 --- a/docs/README.et.md +++ b/docs/README.et.md @@ -1,6 +1,6 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.fr.md b/docs/README.fr.md index 0c35e059..65604a0a 100644 --- a/docs/README.fr.md +++ b/docs/README.fr.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.it.md b/docs/README.it.md index e87cf28e..dea63eb2 100644 --- a/docs/README.it.md +++ b/docs/README.it.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.nb.md b/docs/README.nb.md index 1ec4744b..b821799e 100644 --- a/docs/README.nb.md +++ b/docs/README.nb.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.pl.md b/docs/README.pl.md index 2fb31a6d..59ef046b 100644 --- a/docs/README.pl.md +++ b/docs/README.pl.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.pt-BR.md b/docs/README.pt-BR.md index 7a2971c8..a929b88c 100644 --- a/docs/README.pt-BR.md +++ b/docs/README.pt-BR.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.ru.md b/docs/README.ru.md index 1ce831f7..57a75cde 100644 --- a/docs/README.ru.md +++ b/docs/README.ru.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.uk-UA.md b/docs/README.uk-UA.md index 8fec8508..e6189126 100644 --- a/docs/README.uk-UA.md +++ b/docs/README.uk-UA.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/package.json b/package.json index f59715ab..43c8ee05 100644 --- a/package.json +++ b/package.json @@ -34,24 +34,24 @@ "dependencies": { "@electron-toolkit/preload": "^3.0.0", "@electron-toolkit/utils": "^3.0.0", - "@fontsource/noto-sans": "^5.0.22", - "@hookform/resolvers": "^3.9.0", + "@fontsource/noto-sans": "^5.1.0", + "@hookform/resolvers": "^3.9.1", "@primer/octicons-react": "^19.9.0", "@reduxjs/toolkit": "^2.2.3", "@vanilla-extract/css": "^1.14.2", - "@vanilla-extract/dynamic": "^2.1.1", + "@vanilla-extract/dynamic": "^2.1.2", "@vanilla-extract/recipes": "^0.5.2", "auto-launch": "^5.0.6", - "axios": "^1.7.7", - "better-sqlite3": "^11.3.0", + "axios": "^1.7.9", + "better-sqlite3": "^11.7.0", "check-disk-space": "^3.4.0", "classnames": "^2.5.1", "color": "^4.2.3", "color.js": "^1.2.0", "create-desktop-shortcuts": "^1.11.0", "date-fns": "^3.6.0", - "dexie": "^4.0.9", - "electron-log": "^5.2.0", + "dexie": "^4.0.10", + "electron-log": "^5.2.4", "electron-updater": "^6.3.9", "file-type": "^19.6.0", "flexsearch": "^0.7.43", @@ -72,15 +72,15 @@ "sudo-prompt": "^9.2.1", "tar": "^7.4.3", "typeorm": "^0.3.20", - "user-agents": "^1.1.193", - "yaml": "^2.4.1", - "yup": "^1.4.0", - "zod": "^3.23.8" + "user-agents": "^1.1.387", + "yaml": "^2.6.1", + "yup": "^1.5.0", + "zod": "^3.24.1" }, "devDependencies": { "@aws-sdk/client-s3": "^3.705.0", - "@commitlint/cli": "^19.5.0", - "@commitlint/config-conventional": "^19.5.0", + "@commitlint/cli": "^19.6.0", + "@commitlint/config-conventional": "^19.6.0", "@electron-toolkit/eslint-config-prettier": "^2.0.0", "@electron-toolkit/eslint-config-ts": "^2.0.0", "@electron-toolkit/tsconfig": "^1.0.1", @@ -88,8 +88,8 @@ "@types/auto-launch": "^5.0.5", "@types/color": "^3.0.6", "@types/folder-hash": "^4.0.4", - "@types/jsdom": "^21.1.6", - "@types/jsonwebtoken": "^9.0.6", + "@types/jsdom": "^21.1.7", + "@types/jsonwebtoken": "^9.0.7", "@types/lodash-es": "^4.17.12", "@types/node": "^20.12.7", "@types/parse-torrent": "^5.8.7", @@ -99,15 +99,15 @@ "@types/user-agents": "^1.0.4", "@vanilla-extract/vite-plugin": "^4.0.7", "@vitejs/plugin-react": "^4.2.1", - "electron": "^30.3.0", + "electron": "^31.7.6", "electron-builder": "^25.1.8", "electron-vite": "^2.0.0", "eslint": "^8.56.0", - "eslint-plugin-jsx-a11y": "^6.8.0", - "eslint-plugin-react": "^7.33.2", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-react": "^7.37.2", "eslint-plugin-react-hooks": "^4.6.0", - "husky": "^9.0.11", - "prettier": "^3.2.4", + "husky": "^9.1.7", + "prettier": "^3.4.2", "react": "^18.2.0", "react-dom": "^18.2.0", "sass-embedded": "^1.80.6", diff --git a/scripts/postinstall.cjs b/scripts/postinstall.cjs new file mode 100644 index 00000000..25d27c0a --- /dev/null +++ b/scripts/postinstall.cjs @@ -0,0 +1,49 @@ +const { default: axios } = require("axios"); +const util = require("node:util"); +const fs = require("node:fs"); +const path = require("node:path"); + +const exec = util.promisify(require("node:child_process").exec); + +const fileName = { + win32: "ludusavi-v0.25.0-win64.zip", + linux: "ludusavi-v0.25.0-linux.zip", + darwin: "ludusavi-v0.25.0-mac.zip", +}; + +const downloadLudusavi = async () => { + if (fs.existsSync("ludusavi")) { + console.log("Ludusavi already exists, skipping download..."); + return; + } + + const file = fileName[process.platform]; + const downloadUrl = `https://github.com/mtkennerly/ludusavi/releases/download/v0.25.0/${file}`; + + console.log(`Downloading ${file}...`); + + const response = await axios.get(downloadUrl, { responseType: "stream" }); + + const stream = response.data.pipe(fs.createWriteStream(file)); + + stream.on("finish", async () => { + console.log(`Downloaded ${file}, extracting...`); + + const pwd = process.cwd(); + + const targetPath = path.join(pwd, "ludusavi"); + + await exec(`npx extract-zip ${file} ${targetPath}`); + + if (process.platform !== "win32") { + fs.chmodSync(path.join(targetPath, "ludusavi"), 0o755); + } + + console.log("Extracted. Renaming folder..."); + + console.log(`Extracted ${file}, removing compressed downloaded file...`); + fs.rmSync(file); + }); +}; + +downloadLudusavi(); diff --git a/scripts/upload-build.cjs b/scripts/upload-build.cjs new file mode 100644 index 00000000..9f19ca89 --- /dev/null +++ b/scripts/upload-build.cjs @@ -0,0 +1,64 @@ +const fs = require("node:fs"); +const { S3Client, PutObjectCommand } = require("@aws-sdk/client-s3"); +const path = require("node:path"); +const packageJson = require("../package.json"); + +if (!process.env.BUILD_WEBHOOK_URL) { + console.log("No BUILD_WEBHOOK_URL provided, skipping upload"); + process.exit(0); +} + +const s3 = new S3Client({ + region: "auto", + endpoint: process.env.S3_ENDPOINT, + forcePathStyle: true, + credentials: { + accessKeyId: process.env.S3_ACCESS_KEY_ID, + secretAccessKey: process.env.S3_SECRET_ACCESS_KEY, + }, +}); + +const dist = path.resolve(__dirname, "..", "dist"); + +const extensionsToUpload = [".deb", ".exe"]; + +fs.readdir(dist, async (err, files) => { + if (err) throw err; + + const uploads = await Promise.all( + files + .filter((file) => extensionsToUpload.includes(path.extname(file))) + .map(async (file) => { + console.log(`⌛️ Uploading ${file}...`); + const fileName = `${new Date().getTime()}-${file}`; + + const command = new PutObjectCommand({ + Bucket: process.env.S3_BUILDS_BUCKET_NAME, + Key: fileName, + Body: fs.createReadStream(path.resolve(dist, file)), + }); + + await s3.send(command); + + return { + url: `${process.env.BUILDS_URL}/${fileName}`, + name: fileName, + }; + }) + ); + + if (uploads.length > 0) { + await fetch(process.env.BUILD_WEBHOOK_URL, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + uploads, + branchName: process.env.BRANCH_NAME, + version: packageJson.version, + githubActor: process.env.GITHUB_ACTOR, + }), + }); + } +}); diff --git a/src/locales/ar/translation.json b/src/locales/ar/translation.json index 67628f95..156c3da4 100644 --- a/src/locales/ar/translation.json +++ b/src/locales/ar/translation.json @@ -1,33 +1,49 @@ { "language_name": "اَلْعَرَبِيَّةُ", + "app": { + "successfully_signed_in": "تم تسجيل الدخول بنجاح" + }, "home": { "featured": "مميّز", "surprise_me": "فاجئني", - "no_results": "لم يتم العثور على نتائج" + "no_results": "لم يتم العثور على نتائج", + "start_typing": "بدء الكتابة للبحث...", + "hot": "الأكثر رواجا الآن", + "weekly": "📅 أفضل ألعاب الأسبوع", + "achievements": "🏆 ألعاب للتغلب عليها" }, "sidebar": { "catalogue": "قائمة الألعاب", - "downloads": "التحميلات", + "downloads": "التنزيلات", "settings": "إعدادات", "my_library": "مكتبتي", "downloading_metadata": "{{title}} (جارٍ تنزيل البيانات الوصفية...)", - "paused": "{{title}} (متوقف)", - "downloading": "{{title}} ({{percentage}} - جارٍ التنزيل...)", + "paused": "{{title}} (متوقف مؤقتًا)", + "downloading": "{{title}} ({{percentage}} - جاري التنزيل...)", "filter": "بحث في المكتبة", - "home": "الرئيسية" + "home": "الرئيسية", + "queued": "{{title}} (في قائمة الانتظار)", + "game_has_no_executable": "لم يتم تحديد اللعبة القابلة للتنفيذ", + "sign_in": "تسجيل الدخول", + "friends": "أصدقاء", + "need_help": "بحاجة الى مساعدة؟" }, "header": { "search": "ابحث عن الألعاب", "home": "الرئيسية", "catalogue": "قائمة الألعاب", - "downloads": "التحميلات", + "downloads": "التنزيلات", "search_results": "نتائج البحث", - "settings": "إعدادات" + "settings": "إعدادات", + "version_available_install": "إصدار {{version}} متاح. ", + "version_available_download": "إصدار {{version}} متاح. " }, "bottom_panel": { - "no_downloads_in_progress": "لا يوجد تنزيلات جارية", - "downloading_metadata": "جارٍ تنزيل بيانات وصف {{title}}", - "downloading": "جارٍ تنزيل {{title}}… ({{percentage}} مكتملة) - الانتهاء {{eta}} - {{speed}}" + "no_downloads_in_progress": "لا توجد تنزيلات قيد التقدم", + "downloading_metadata": "جارٍ التنزيل {{title}} البيانات الوصفية...", + "downloading": "جارٍ التنزيل {{title}}… ({{percentage}} مكتملة) - الانتهاء {{eta}} - {{speed}}", + "calculating_eta": "جارٍ التنزيل {{title}}… ({{percentage}} مكتمل) - حساب الوقت المتبقي...", + "checking_files": "التحقق {{title}} ملفات…({{percentage}} مكتمل)" }, "catalogue": { "next_page": "الصفحة التالية", @@ -35,101 +51,242 @@ }, "game_details": { "open_download_options": "افتح خيارات التنزيل", - "download_options_zero": "لا يوجد خيار تنزيل", - "download_options_one": "{{count}} خيار تنزيل", - "download_options_other": "{{count}} خيار تنزيل", + "download_options_zero": "{{count}} خيارات التنزيل", "updated_at": "تم التحديث {{updated_at}}", - "install": "تثبيت", + "install": "ثَبَّتَ", "resume": "استئناف", "pause": "إيقاف", "cancel": "إلغاء", "remove": "إزالة", "space_left_on_disk": "{{space}} متبقية على القرص", "eta": "الوقت المتبقي {{eta}}", - "downloading_metadata": "جاري تنزيل البيانات الوصفية...", - "filter": "تصفية حزم إعادة التجميع", + "calculating_eta": "جارٍ حساب الوقت المتبقي…", + "downloading_metadata": "جارٍ تنزيل البيانات الوصفية…", + "filter": "إعادة حزم التصفية", "requirements": "متطلبات النظام", "minimum": "الحد الأدنى", - "recommended": "موصى به", - "release_date": "تم الإصدار في {{date}}", - "publisher": "نشر بواسطة {{publisher}}", + "recommended": "مُستَحسَن", + "paused": "متوقف مؤقتًا", + "release_date": "صدر بتاريخ {{date}}", + "publisher": "نشرت من قبل {{publisher}}", "hours": "ساعات", "minutes": "دقائق", "amount_hours": "{{amount}} ساعات", "amount_minutes": "{{amount}} دقائق", - "accuracy": "دقة {{accuracy}}%", - "add_to_library": "إضافة إلى المكتبة", + "accuracy": "{{accuracy}}٪ دقة", + "add_to_library": "أضف إلى المكتبة", "remove_from_library": "إزالة من المكتبة", - "no_downloads": "لا توجد تنزيلات متاحة", + "no_downloads": "لا التنزيلات المتاحة", "play_time": "تم اللعب لمدة {{amount}}", - "last_time_played": "آخر مرة لعبت {{period}}", - "not_played_yet": "لم تلعب {{title}} بعد", + "last_time_played": "لعبت آخر مرة {{period}}", + "not_played_yet": "أنت لم تلعب {{title}} حتى الآن", "next_suggestion": "الاقتراح التالي", "play": "لعب", - "deleting": "جاري حذف المثبت...", + "deleting": "جارٍ حذف المثبت…", "close": "إغلاق", - "playing_now": "قيد التشغيل الآن", + "playing_now": "قيداللعب الآن", "change": "تغيير", "repacks_modal_description": "اختر الحزمة التي تريد تنزيلها", - "select_folder_hint": "لتغيير المجلد الافتراضي، انتقل إلى الإعدادات", - "download_now": "تنزيل الآن", - "no_shop_details": "لم يتم استرداد تفاصيل المتجر.", + "select_folder_hint": "لتغيير المجلد الافتراضي، انتقل إلى <0>إعدادات", + "download_now": "قم بالتنزيل الآن", + "no_shop_details": "لا يمكن استرداد تفاصيل المتجر.", "download_options": "خيارات التنزيل", - "download_path": "مسار التنزيل", + "download_path": "مسار التحميل", "previous_screenshot": "لقطة الشاشة السابقة", "next_screenshot": "لقطة الشاشة التالية", - "screenshot": "لقطة شاشة {{number}}", - "open_screenshot": "افتح لقطة الشاشة {{number}}" + "screenshot": "لقطة الشاشة {{number}}", + "open_screenshot": "فتح لقطة الشاشة {{number}}", + "download_settings": "تحميل الإعدادات", + "downloader": "أداة التنزيل", + "select_executable": "يختار", + "no_executable_selected": "لم يتم تحديد أي ملف قابل للتنفيذ", + "open_folder": "افتح المجلد", + "open_download_location": "انظر الملفات التي تم تنزيلها", + "create_shortcut": "إنشاء اختصار سطح المكتب", + "clear": "واضح", + "remove_files": "إزالة الملفات", + "remove_from_library_title": "هل أنت متأكد؟", + "remove_from_library_description": "سيتم إزالة هذا {{game}} من مكتبتك", + "options": "خيارات", + "executable_section_title": "قابل للتنفيذ", + "executable_section_description": "مسار الملف الذي سيتم تنفيذه عند النقر فوق \"تشغيل\".", + "downloads_secion_title": "التنزيلات", + "downloads_section_description": "تحقق من التحديثات أو الإصدارات الأخرى من هذه اللعبة", + "danger_zone_section_title": "منطقة الخطر", + "danger_zone_section_description": "قم بإزالة هذه اللعبة من مكتبتك أو الملفات التي تم تنزيلها بواسطة Hydra", + "download_in_progress": "التنزيل قيد التقدم", + "download_paused": "تم إيقاف التنزيل مؤقتًا", + "last_downloaded_option": "آخر خيار تم تنزيله", + "create_shortcut_success": "تم إنشاء الاختصار بنجاح", + "create_shortcut_error": "حدث خطأ أثناء إنشاء الاختصار", + "nsfw_content_title": "تحتوي هذه اللعبة على محتوى غير مناسب", + "nsfw_content_description": "{{title}} يحتوي على محتوى قد لا يكون مناسبًا لجميع الأعمار. ", + "allow_nsfw_content": "اسمح", + "refuse_nsfw_content": "عُد", + "stats": "احصائيات", + "download_count": "التنزيلات", + "player_count": "اللاعبين النشطين", + "download_error": "خيار التنزيل هذا غير متوفر", + "download": "تحميل", + "executable_path_in_use": "قابل للتنفيذ قيد الاستخدام بالفعل بواسطة \"{{game}}\"", + "warning": "تحذير:", + "hydra_needs_to_remain_open": "لإجراء هذا التنزيل، يجب أن يظل Hydra مفتوحًا حتى اكتماله. ", + "achievements": "الإنجازات", + "achievements_count": "الإنجازات {{unlockedCount}}/{{achievementsCount}}", + "cloud_save": "حفظ السحابة", + "cloud_save_description": "احفظ تقدمك في السحابة واستمر في اللعب على أي جهاز", + "backups": "النسخ الاحتياطية", + "install_backup": "ثَبَّتَ", + "delete_backup": "يمسح", + "create_backup": "نسخة احتياطية جديدة", + "last_backup_date": "آخر نسخة احتياطية قيد التشغيل {{date}}", + "no_backup_preview": "لم يتم العثور على ألعاب محفوظة لهذا العنوان", + "restoring_backup": "استعادة النسخة الاحتياطية ({{progress}} مكتمل)…", + "uploading_backup": "جارٍ تحميل النسخة الاحتياطية…", + "no_backups": "لم تقم بإنشاء أي نسخ احتياطية لهذه اللعبة حتى الآن", + "backup_uploaded": "تم تحميل النسخة الاحتياطية", + "backup_deleted": "تم حذف النسخة الاحتياطية", + "backup_restored": "تمت استعادة النسخة الاحتياطية", + "see_all_achievements": "شاهد جميع الإنجازات", + "sign_in_to_see_achievements": "قم بتسجيل الدخول لرؤية الإنجازات", + "mapping_method_automatic": "تلقائي", + "mapping_method_manual": "يدوي", + "mapping_method_label": "طريقة رسم الخرائط", + "files_automatically_mapped": "تم تعيين الملفات تلقائيًا", + "no_backups_created": "لم يتم إنشاء نسخ احتياطية لهذه اللعبة", + "manage_files": "إدارة الملفات", + "loading_save_preview": "جارٍ البحث عن حفظ الألعاب...", + "wine_prefix": "بادئة النبيذ", + "wine_prefix_description": "بادئة Wine المستخدمة لتشغيل هذه اللعبة", + "no_download_option_info": "لا توجد معلومات متاحة", + "backup_deletion_failed": "فشل في حذف النسخة الاحتياطية", + "max_number_of_artifacts_reached": "تم الوصول إلى الحد الأقصى لعدد النسخ الاحتياطية لهذه اللعبة", + "achievements_not_sync": "لا تتم مزامنة إنجازاتك", + "manage_files_description": "إدارة الملفات التي سيتم نسخها احتياطيًا واستعادتها", + "select_folder": "حدد المجلد", + "backup_from": "نسخة احتياطية من {{date}}", + "custom_backup_location_set": "تعيين موقع النسخ الاحتياطي المخصص", + "no_directory_selected": "لم يتم تحديد أي دليل", + "download_options_one": "{{count}} خيار التنزيل", + "download_options_two": "{{count}} خيارات التنزيل", + "download_options_few": "{{count}} خيارات التنزيل", + "download_options_many": "{{count}} خيارات التنزيل", + "download_options_other": "{{count}} خيارات التنزيل" }, "activation": { - "title": "تفعيل هايدرا", + "title": "تفعيل Hydra", "installation_id": "معرف التثبيت:", "enter_activation_code": "أدخل رمز التفعيل الخاص بك", - "message": "إذا كنت لا تعرف أين تسأل عن هذا ، فلا يجب أن يكون لديك هذا.", - "activate": "تفعيل", - "loading": "جار التحميل…" + "message": "إذا كنت لا تعرف أين تطلب هذا، فلا ينبغي أن يكون لديك هذا.", + "activate": "فعل", + "loading": "تحميل…" }, "downloads": { "resume": "استئناف", "pause": "إيقاف مؤقت", "eta": "الوقت المتبقي {{eta}}", - "paused": "متوقفة مؤقتًا", - "verifying": "جار التحقق…", - "completed": "اكتمل", + "paused": "متوقف مؤقتًا", + "verifying": "جارٍ التحقق…", + "completed": "مكتمل", + "removed": "لم يتم تحميلها", "cancel": "إلغاء", "filter": "تصفية الألعاب التي تم تنزيلها", "remove": "إزالة", - "downloading_metadata": "جار تنزيل البيانات الوصفية…", - "deleting": "جار حذف المثبت…", + "downloading_metadata": "جارٍ تنزيل البيانات الوصفية…", + "deleting": "جارٍ حذف المثبت…", "delete": "إزالة المثبت", "delete_modal_title": "هل أنت متأكد؟", - "delete_modal_description": "سيؤدي هذا إلى إزالة جميع ملفات التثبيت من جهاز الكمبيوتر الخاص بك", - "install": "تثبيت" + "delete_modal_description": "سيؤدي هذا إلى إزالة كافة ملفات التثبيت من جهاز الكمبيوتر الخاص بك", + "install": "ثَبَّتَ", + "download_in_progress": "في تَقَدم", + "queued_downloads": "التنزيلات في قائمة الانتظار", + "downloads_completed": "مكتمل", + "queued": "في قائمة الانتظار", + "no_downloads_title": "هذا فارغ", + "no_downloads_description": "لم تقم بتنزيل أي شيء باستخدام Hydra بعد، ولكن لم يفت الأوان بعد للبدء.", + "checking_files": "جارٍ فحص الملفات…" }, "settings": { "downloads_path": "مسار التنزيلات", "change": "تحديث", - "notifications": "الإشعارات", + "notifications": "إشعارات", "enable_download_notifications": "عند اكتمال التنزيل", "enable_repack_list_notifications": "عند إضافة حزمة جديدة", - "real_debrid_api_token_label": "رمز واجهة برمجة التطبيقات (API) لـReal-Debrid ", - "quit_app_instead_hiding": "إنهاء هايدرا بدلاً من التصغير الى شريط الحالة", - "launch_with_system": "تشغيل هايدرا عند بدء تشغيل النظام", + "real_debrid_api_token_label": "رمز Real-Debrid API", + "quit_app_instead_hiding": "لا تخفي Hydra عند الإغلاق", + "launch_with_system": "قم بتشغيل Hydra عند بدء تشغيل النظام", "general": "عام", - "behavior": "السلوك", - "enable_real_debrid": "تفعيل Real-Debrid ", - "real_debrid_api_token_hint": "يمكنك الحصول على مفتاح API الخاص بك هنا", - "save_changes": "حفظ التغييرات" + "behavior": "سلوك", + "download_sources": "تحميل المصادر", + "language": "لغة", + "real_debrid_api_token": "رمز API", + "enable_real_debrid": "تمكين ريال ديبريد", + "real_debrid_description": "Real-Debrid هو برنامج تنزيل غير مقيد يسمح لك بتنزيل الملفات بسرعة، ولا يقتصر ذلك إلا على سرعة الإنترنت لديك.", + "real_debrid_invalid_token": "رمز API غير صالح", + "real_debrid_api_token_hint": "يمكنك الحصول على رمز API الخاص بك <0>هنا", + "real_debrid_free_account_error": "الحساب \"{{username}}\" هو حساب مجاني. يرجى الاشتراك في Real-Debrid", + "real_debrid_linked_message": "حساب \"{{username}}\"مرتبط", + "save_changes": "حفظ التغييرات", + "changes_saved": "تم حفظ التغييرات بنجاح", + "download_sources_description": "ستقوم Hydra بجلب روابط التنزيل من هذه المصادر. ", + "validate_download_source": "التحقق من صحة", + "remove_download_source": "إزالة", + "add_download_source": "أضف المصدر", + "download_count_zero": "{{countFormatted}} خيارات التنزيل", + "download_source_url": "تنزيل عنوان URL المصدر", + "add_download_source_description": "أدخل عنوان URL لملف .json", + "download_source_up_to_date": "محدث", + "download_source_errored": "خطأ", + "sync_download_sources": "مصادر المزامنة", + "removed_download_source": "تمت إزالة مصدر التنزيل", + "added_download_source": "تمت إضافة مصدر التنزيل", + "download_sources_synced": "تتم مزامنة جميع مصادر التنزيل", + "insert_valid_json_url": "أدخل عنوان URL صالحًا لـ JSON", + "found_download_option_zero": "وجد {{countFormatted}} خيارات التنزيل", + "import": "يستورد", + "public": "عام", + "private": "خاص", + "friends_only": "الأصدقاء فقط", + "privacy": "خصوصية", + "profile_visibility": "رؤية الملف الشخصي", + "profile_visibility_description": "اختر من يمكنه رؤية ملفك الشخصي ومكتبتك", + "required_field": "هذه الخانة مطلوبه", + "source_already_exists": "تمت إضافة هذا المصدر بالفعل", + "must_be_valid_url": "يجب أن يكون المصدر عنوان URL صالحًا", + "blocked_users": "المستخدمين المحظورين", + "user_unblocked": "تم إلغاء حظر المستخدم", + "enable_achievement_notifications": "عندما يتم فتح الإنجاز", + "launch_minimized": "تم تصغير إطلاق Hydra", + "disable_nsfw_alert": "تعطيل تنبيه NSFW", + "show_hidden_achievement_description": "إظهار وصف الإنجازات المخفية قبل فتحها", + "download_count_one": "{{countFormatted}} خيار التنزيل", + "download_count_two": "{{countFormatted}} خيارات التنزيل", + "download_count_few": "{{countFormatted}} خيارات التنزيل", + "download_count_many": "{{countFormatted}} خيارات التنزيل", + "download_count_other": "{{countFormatted}} خيارات التنزيل", + "found_download_option_one": "وجد {{countFormatted}} خيار التنزيل", + "found_download_option_two": "وجد {{countFormatted}} خيارات التنزيل", + "found_download_option_few": "وجد {{countFormatted}} خيارات التنزيل", + "found_download_option_many": "وجد {{countFormatted}} خيارات التنزيل", + "found_download_option_other": "وجد {{countFormatted}} خيارات التنزيل" }, "notifications": { - "download_complete": "تم التحميل", - "game_ready_to_install": "{{title}} جاهزة للتثبيت", - "repack_list_updated": "قائمة التجميعات المحدثة", - "repack_count_one": "{{count}} حزمة مضافة", - "repack_count_other": "{{count}} حزم مُضافة" + "download_complete": "اكتمل التنزيل", + "game_ready_to_install": "{{title}} جاهز للتثبيت", + "repack_list_updated": "تم تحديث قائمة إعادة التعبئة", + "new_update_available": "إصدار {{version}} متاح", + "restart_to_install_update": "أعد تشغيل Hydra لتثبيت التحديث", + "notification_achievement_unlocked_title": "تم فتح الإنجاز لـ {{game}}", + "notification_achievement_unlocked_body": "{{achievement}} وغيرها {{count}} تم فتحها", + "repack_count_zero": "{{count}} تمت إضافة العبوات", + "repack_count_one": "{{count}} تمت إضافة أعد حزم", + "repack_count_two": "{{count}} تمت إضافة العبوات", + "repack_count_few": "{{count}} تمت إضافة العبوات", + "repack_count_many": "{{count}} تمت إضافة العبوات", + "repack_count_other": "{{count}} تمت إضافة العبوات" }, "system_tray": { - "open": "فتح هايدرا", + "open": "افتح Hydra", "quit": "خروج" }, "game_card": { @@ -137,10 +294,109 @@ }, "binary_not_found_modal": { "title": "البرامج غير مثبتة", - "description": "لم يتم العثور على ملفات Wine أو Lutris التنفيذية على نظامك", - "instructions": "تحقق من الطريقة الصحيحة لتثبيت أي منها على توزيعة Linux الخاصة بك حتى تعمل اللعبة بشكل طبيعي" + "description": "لم يتم العثور على الملفات التنفيذية الخاصة بـ Wine أو Lutris على نظامك", + "instructions": "تحقق من الطريقة الصحيحة لتثبيت أي منها على توزيعة Linux لديك حتى تعمل اللعبة بشكل طبيعي" }, "modal": { - "close": "زر إغلاق" + "close": "زر الإغلاق" + }, + "forms": { + "toggle_password_visibility": "تبديل رؤية كلمة المرور" + }, + "user_profile": { + "amount_hours": "{{amount}} ساعات", + "amount_minutes": "{{amount}} دقائق", + "last_time_played": "لعبت آخر مرة {{period}}", + "activity": "النشاط الأخير", + "library": "مكتبة", + "total_play_time": "إجمالي وقت اللعب: {{amount}}", + "no_recent_activity_title": "هممم... لا شيء هنا", + "no_recent_activity_description": "لم تلعب أي مباراة مؤخرًا. ", + "display_name": "اسم العرض", + "saving": "توفير", + "save": "يحفظ", + "edit_profile": "تحرير الملف الشخصي", + "saved_successfully": "تم الحفظ بنجاح", + "try_again": "من فضلك، حاول مرة أخرى", + "sign_out_modal_title": "هل أنت متأكد؟", + "cancel": "إلغاء", + "successfully_signed_out": "تم تسجيل الخروج بنجاح", + "sign_out": "تسجيل الخروج", + "playing_for": "اللعب من أجل {{amount}}", + "sign_out_modal_text": "مكتبتك مرتبطة بحسابك الحالي. ", + "add_friends": "أضف أصدقاء", + "add": "يضيف", + "friend_code": "رمز الصديق", + "see_profile": "انظر الملف الشخصي", + "sending": "إرسال", + "friend_request_sent": "تم إرسال طلب الصداقة", + "friends": "أصدقاء", + "friends_list": "قائمة الأصدقاء", + "user_not_found": "لم يتم العثور على المستخدم", + "block_user": "حظر المستخدم", + "add_friend": "إضافة صديق", + "request_sent": "تم إرسال الطلب", + "request_received": "تم استلام الطلب", + "accept_request": "قبول الطلب", + "ignore_request": "تجاهل الطلب", + "cancel_request": "إلغاء الطلب", + "undo_friendship": "التراجع عن الصداقة", + "request_accepted": "تم قبول الطلب", + "user_blocked_successfully": "تم حظر المستخدم بنجاح", + "user_block_modal_text": "هذا سوف يمنع {{displayName}}", + "blocked_users": "المستخدمين المحظورين", + "unblock": "إلغاء الحظر", + "no_friends_added": "ليس لديك أي أصدقاء مضافين", + "pending": "قيد الانتظار", + "no_pending_invites": "ليس لديك أي دعوات معلقة", + "no_blocked_users": "ليس لديك أي مستخدمين محظورين", + "friend_code_copied": "تم نسخ رمز الصديق", + "undo_friendship_modal_text": "سيؤدي هذا إلى التراجع عن صداقتك معه {{displayName}}", + "privacy_hint": "لضبط من يمكنه رؤية هذا، انتقل إلى <0>إعدادات", + "locked_profile": "هذا الملف الشخصي خاص", + "image_process_failure": "فشل أثناء معالجة الصورة", + "required_field": "هذه الخانة مطلوبه", + "displayname_min_length": "يجب أن يتكون اسم العرض من 3 أحرف على الأقل", + "displayname_max_length": "يجب ألا يزيد طول اسم العرض عن 50 حرفًا", + "report_profile": "الإبلاغ عن هذا الملف الشخصي", + "report_reason": "لماذا تقوم بالإبلاغ عن هذا الملف الشخصي؟", + "report_description": "معلومات إضافية", + "report_description_placeholder": "معلومات إضافية", + "report": "تقرير", + "report_reason_hate": "خطاب الكراهية", + "report_reason_sexual_content": "المحتوى الجنسي", + "report_reason_violence": "عنف", + "report_reason_spam": "رسائل إلكترونية مزعجة", + "profile_reported": "تم الإبلاغ عن الملف الشخصي", + "your_friend_code": "رمز صديقك:", + "upload_banner": "تحميل لافتة", + "uploading_banner": "جارٍ تحميل البانر…", + "background_image_updated": "تم تحديث صورة الخلفية", + "report_reason_zero": "آخر", + "report_reason_one": "لماذا تقوم بالإبلاغ عن هذا الملف الشخصي؟", + "report_reason_two": "آخر", + "report_reason_few": "آخر", + "report_reason_many": "آخر", + "report_reason_other": "آخر" + }, + "achievement": { + "achievement_unlocked": "تم فتح الإنجاز", + "user_achievements": "{{displayName}}إنجازات", + "your_achievements": "إنجازاتك", + "unlocked_at": "مقفلة في:", + "subscription_needed": "مطلوب اشتراك Hydra Cloud لرؤية هذا المحتوى", + "new_achievements_unlocked": "مفتوح {{achievementCount}} انجازات جديدة من {{gameCount}} ألعاب", + "achievement_progress": "{{unlockedCount}}/{{totalCount}} الإنجازات", + "achievements_unlocked_for_game": "مفتوح {{achievementCount}} انجازات جديدة ل {{gameTitle}}" + }, + "tour": { + "subscription_tour_title": "اشتراك Hydra كلاود", + "subscribe_now": "اشترك الآن", + "cloud_saving": "الحفظ السحابي", + "cloud_achievements": "احفظ إنجازاتك على السحابة", + "animated_profile_picture": "صور شخصية متحركة", + "premium_support": "دعم متميز", + "show_and_compare_achievements": "عرض ومقارنة إنجازاتك مع المستخدمين الآخرين", + "animated_profile_banner": "لافتة الملف الشخصي المتحركة" } } diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index 940e3185..b3e1caed 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -258,7 +258,8 @@ "user_unblocked": "User has been unblocked", "enable_achievement_notifications": "When an achievement is unlocked", "launch_minimized": "Launch Hydra minimized", - "disable_nsfw_alert": "Disable NSFW alert" + "disable_nsfw_alert": "Disable NSFW alert", + "show_hidden_achievement_description": "Show hidden achievements description before unlocking them" }, "notifications": { "download_complete": "Download complete", diff --git a/src/locales/es/translation.json b/src/locales/es/translation.json index ab34be1f..a766be1c 100644 --- a/src/locales/es/translation.json +++ b/src/locales/es/translation.json @@ -79,7 +79,7 @@ "add_to_library": "Agregar a la biblioteca", "remove_from_library": "Eliminar de la biblioteca", "no_downloads": "No hay descargas disponibles", - "play_time": "Jugado por {{amount}}", + "play_time": "Has jugado {{amount}}", "last_time_played": "Jugado por última vez: {{period}}", "not_played_yet": "Aún no has jugado a {{title}}", "next_suggestion": "Siguiente sugerencia", @@ -308,7 +308,7 @@ "cancel": "Cancelar", "successfully_signed_out": "Sesión cerrada exitosamente", "sign_out": "Cerrar sesión", - "playing_for": "Jugando por {{amount}}", + "playing_for": "Llevas jugando {{amount}}", "sign_out_modal_text": "Tu biblioteca se ha vinculado con tu cuenta. Cuando cierres sesión, tú biblioteca ya no será visible y cualquier progreso no se guardará. ¿Continuar con el cierre de sesión?", "add_friends": "Añadir amigos", "add": "Añadir", diff --git a/src/locales/pt-BR/translation.json b/src/locales/pt-BR/translation.json index e724cdc3..a1197c78 100644 --- a/src/locales/pt-BR/translation.json +++ b/src/locales/pt-BR/translation.json @@ -254,7 +254,8 @@ "user_unblocked": "Usuário desbloqueado", "enable_achievement_notifications": "Quando uma conquista é desbloqueada", "launch_minimized": "Iniciar o Hydra minimizado", - "disable_nsfw_alert": "Desativar alerta de conteúdo inapropriado" + "disable_nsfw_alert": "Desativar alerta de conteúdo inapropriado", + "show_hidden_achievement_description": "Mostrar descrição de conquistas ocultas antes de debloqueá-las" }, "notifications": { "download_complete": "Download concluído", diff --git a/src/locales/ru/translation.json b/src/locales/ru/translation.json index d1282951..ddeace23 100644 --- a/src/locales/ru/translation.json +++ b/src/locales/ru/translation.json @@ -4,12 +4,13 @@ "successfully_signed_in": "Успешный вход" }, "home": { - "featured": "Рекомендованное", + "featured": "Рекомендации", "surprise_me": "Удиви меня", "no_results": "Ничего не найдено", "hot": "Сейчас в топе", "start_typing": "Начинаю вводить текст для поиска...", - "weekly": "📅 Лучшие игры недели" + "weekly": "📅 Лучшие игры недели", + "achievements": "🏆 Игры, в которых нужно победить" }, "sidebar": { "catalogue": "Каталог", @@ -19,7 +20,7 @@ "downloading_metadata": "{{title}} (Загрузка метаданных…)", "paused": "{{title}} (Приостановлено)", "downloading": "{{title}} ({{percentage}} - Загрузка…)", - "filter": "Фильтр библиотеки", + "filter": "Поиск", "home": "Главная", "queued": "{{title}} (В очереди)", "game_has_no_executable": "Файл запуска игры не выбран", @@ -49,10 +50,10 @@ "previous_page": "Предыдущая страница" }, "game_details": { - "open_download_options": "Открыть варианты загрузки", - "download_options_zero": "Нет вариантов загрузки", - "download_options_one": "{{count}} вариант загрузки", - "download_options_other": "{{count}} вариантов загрузки", + "open_download_options": "Открыть источники", + "download_options_zero": "Нет источников", + "download_options_one": "{{count}} источник", + "download_options_other": "{{count}} источников", "updated_at": "Обновлено {{updated_at}}", "install": "Установить", "resume": "Возобновить", @@ -63,7 +64,7 @@ "eta": "Окончание {{eta}}", "calculating_eta": "Подсчёт оставшегося времени…", "downloading_metadata": "Загрузка метаданных…", - "filter": "Фильтр репаков", + "filter": "Поиск репаков", "requirements": "Системные требования", "minimum": "Минимальные", "recommended": "Рекомендуемые", @@ -77,7 +78,7 @@ "accuracy": "точность {{accuracy}}%", "add_to_library": "Добавить в библиотеку", "remove_from_library": "Удалить из библиотеки", - "no_downloads": "Нет доступных загрузок", + "no_downloads": "Нет доступных источников", "play_time": "Сыграно {{amount}}", "last_time_played": "Последний запуск {{period}}", "not_played_yet": "Вы ещё не играли в {{title}}", @@ -91,7 +92,7 @@ "select_folder_hint": "Чтобы изменить папку загрузок по умолчанию, откройте <0>Настройки", "download_now": "Загрузить сейчас", "no_shop_details": "Не удалось получить описание", - "download_options": "Вариантов загрузки", + "download_options": "Источники", "download_path": "Путь для загрузок", "previous_screenshot": "Предыдущий скриншот", "next_screenshot": "Следующий скриншот", @@ -119,16 +120,53 @@ "last_downloaded_option": "Последний вариант загрузки", "create_shortcut_success": "Ярлык создан", "create_shortcut_error": "Не удалось создать ярлык", - "allow_nsfw_content": "Продолжать", + "allow_nsfw_content": "Продолжить", "download": "Скачать", "download_count": "Загрузки", "download_error": "Этот вариант загрузки недоступен", "executable_path_in_use": "Исполняемый файл уже используется \"{{game}}\"", "nsfw_content_description": "{{title}} содержит контент, который может не подходить для всех возрастов. \nВы уверены, что хотите продолжить?", "nsfw_content_title": "Эта игра содержит неприемлемый контент", + "refuse_nsfw_content": "Назад", + "stats": "Статистика", "player_count": "Активные игроки", - "refuse_nsfw_content": "Возвращаться", - "stats": "Статистика" + "warning": "Внимание:", + "hydra_needs_to_remain_open": "Для этой загрузки Hydra должна оставаться открытой до завершения. Если Hydra закроется до завершения, вы потеряете прогресс.", + "achievements": "Достижения", + "achievements_count": "Достижения {{unlockedCount}}/{{achievementsCount}}", + "cloud_save": "Облачное сохранение", + "cloud_save_description": "Сохраняйте ваш прогресс в облаке и продолжайте играть на любом устройстве", + "backups": "Резервные копии", + "install_backup": "Установить", + "delete_backup": "Удалить", + "create_backup": "Создать новую резервную копию", + "last_backup_date": "Последняя резервная копия от {{date}}", + "no_backup_preview": "Сохранения для этого заголовка не найдены", + "restoring_backup": "Восстановление резервной копии ({{progress}} завершено)…", + "uploading_backup": "Загрузка резервной копии…", + "no_backups": "Вы еще не создали резервных копий для этой игры", + "backup_uploaded": "Резервная копия загружена", + "backup_deleted": "Резервная копия удалена", + "backup_restored": "Резервная копия восстановлена", + "see_all_achievements": "Просмотреть все достижения", + "sign_in_to_see_achievements": "Войдите, чтобы увидеть достижения", + "mapping_method_automatic": "Автоматическая", + "mapping_method_manual": "Ручная", + "mapping_method_label": "Метод сопоставления", + "files_automatically_mapped": "Файлы автоматически сопоставлены", + "no_backups_created": "Для этой игры не создано резервных копий", + "manage_files": "Управление файлами", + "loading_save_preview": "Поиск сохранений…", + "wine_prefix": "Префикс Wine", + "wine_prefix_description": "Префикс Wine, используемый для запуска этой игры", + "no_download_option_info": "Информация недоступна", + "backup_deletion_failed": "Не удалось удалить резервную копию", + "max_number_of_artifacts_reached": "Достигнуто максимальное количество резервных копий для этой игры", + "achievements_not_sync": "Ваши достижения не синхронизированы", + "manage_files_description": "Управляйте файлами, которые будут сохраняться и восстанавливаться", + "select_folder": "Выбрать папку", + "backup_from": "Резервная копия от {{date}}", + "custom_backup_location_set": "Установлено настраиваемое местоположение резервной копии" }, "activation": { "title": "Активировать Hydra", @@ -147,7 +185,7 @@ "completed": "Завершено", "removed": "Не скачано", "cancel": "Отмена", - "filter": "Фильтр загруженных игр", + "filter": "Поиск загруженных игр", "remove": "Удалить", "downloading_metadata": "Загрузка метаданных…", "deleting": "Удаление установщика…", @@ -168,10 +206,13 @@ "change": "Изменить", "notifications": "Уведомления", "enable_download_notifications": "По завершении загрузки", + "enable_achievement_notifications": "Когда достижение разблокировано", "enable_repack_list_notifications": "При добавлении нового репака", "real_debrid_api_token_label": "Real-Debrid API-токен", "quit_app_instead_hiding": "Закрывать приложение вместо сворачивания в трей", "launch_with_system": "Запускать Hydra вместе с системой", + "launch_minimized": "Запустить Hydra в свернутом виде", + "disable_nsfw_alert": "Отключить предупреждение о непристойном контенте", "general": "Основные", "behavior": "Поведение", "download_sources": "Источники загрузки", @@ -196,7 +237,7 @@ "add_download_source_description": "Вставьте ссылку на .json-файл", "download_source_up_to_date": "Обновлён", "download_source_errored": "Ошибка", - "sync_download_sources": "Синхронизировать источники", + "sync_download_sources": "Обновить источники", "removed_download_source": "Источник загрузок удален", "added_download_source": "Источник загрузок добавлен", "download_sources_synced": "Все источники загрузок синхронизированы", @@ -206,13 +247,13 @@ "found_download_option_other": "Найдено {{countFormatted}} вариантов загрузки", "import": "Импортировать", "blocked_users": "Заблокированные пользователи", - "friends_only": "Только друзья", + "friends_only": "Только для друзей", "must_be_valid_url": "Источник должен быть действительным URL-адресом.", "privacy": "Конфиденциальность", "private": "Частный", "profile_visibility": "Видимость профиля", "profile_visibility_description": "Выберите, кто может видеть ваш профиль и библиотеку", - "public": "Общественный", + "public": "Публичный", "required_field": "Это поле обязательно к заполнению", "source_already_exists": "Этот источник уже добавлен", "user_unblocked": "Пользователь разблокирован" @@ -223,15 +264,17 @@ "repack_list_updated": "Список репаков обновлен", "repack_count_one": "{{count}} репак добавлен", "repack_count_other": "{{count}} репаков добавлено", - "new_update_available": "Доступна версия {{version}}", - "restart_to_install_update": "Перезапустите Hydra для установки обновления" + "new_update_available": "Доступна новая версия {{version}}", + "restart_to_install_update": "Перезапустите Hydra для установки обновления", + "notification_achievement_unlocked_title": "Достижение разблокировано для {{game}}", + "notification_achievement_unlocked_body": "были разблокированы {{achievement}} и другие {{count}}" }, "system_tray": { "open": "Открыть Hydra", "quit": "Выйти" }, "game_card": { - "no_downloads": "Нет доступных загрузок" + "no_downloads": "Нет доступных источников" }, "binary_not_found_modal": { "title": "Программы не установлены", @@ -310,5 +353,25 @@ "report_reason_violence": "Насилие", "required_field": "Это поле обязательно к заполнению", "undo_friendship_modal_text": "Это отменит вашу дружбу с {{displayName}}." + }, + "achievement": { + "achievement_unlocked": "Достижение разблокировано", + "user_achievements": "Достижения {{displayName}}", + "your_achievements": "Ваши достижения", + "unlocked_at": "Разблокировано:", + "subscription_needed": "Для просмотра этого содержимого необходима подписка на Hydra Cloud", + "new_achievements_unlocked": "Разблокировано {{achievementCount}} новых достижений из {{gameCount}} игр", + "achievement_progress": "{{unlockedCount}}/{{totalCount}} достижений", + "achievements_unlocked_for_game": "Разблокировано {{achievementCount}} новых достижений для {{gameTitle}}" + }, + "tour": { + "subscription_tour_title": "Подписка Hydra Cloud", + "subscribe_now": "Подпишитесь прямо сейчас", + "cloud_saving": "Сохранение в облаке", + "cloud_achievements": "Сохраняйте свои достижения в облаке", + "animated_profile_picture": "Анимированные фотографии профиля", + "premium_support": "Премиальная поддержка", + "show_and_compare_achievements": "Показывайте и сравнивайте свои достижения с достижениями других пользователей", + "animated_profile_banner": "Анимированный баннер профиля" } } diff --git a/src/main/entity/user-preferences.entity.ts b/src/main/entity/user-preferences.entity.ts index 357dfb50..6fe7ab77 100644 --- a/src/main/entity/user-preferences.entity.ts +++ b/src/main/entity/user-preferences.entity.ts @@ -41,6 +41,9 @@ export class UserPreferences { @Column("boolean", { default: false }) disableNsfwAlert: boolean; + @Column("boolean", { default: false }) + showHiddenAchievementsDescription: boolean; + @CreateDateColumn() createdAt: Date; diff --git a/src/main/events/torrenting/start-game-download.ts b/src/main/events/torrenting/start-game-download.ts index ce16e97b..de10b07d 100644 --- a/src/main/events/torrenting/start-game-download.ts +++ b/src/main/events/torrenting/start-game-download.ts @@ -1,6 +1,6 @@ import { registerEvent } from "../register-event"; import type { StartGameDownloadPayload } from "@types"; -import { DownloadManager, HydraApi, logger } from "@main/services"; +import { DownloadManager, HydraApi } from "@main/services"; import { Not } from "typeorm"; import { steamGamesWorker } from "@main/workers"; @@ -76,24 +76,23 @@ const startGameDownload = async ( }, }); - createGame(updatedGame!).catch(() => {}); - - HydraApi.post( - "/games/download", - { - objectId: updatedGame!.objectID, - shop: updatedGame!.shop, - }, - { needsAuth: false } - ).catch((err) => { - logger.error("Failed to create game download", err); - }); - await DownloadManager.cancelDownload(updatedGame!.id); await DownloadManager.startDownload(updatedGame!); await downloadQueueRepository.delete({ game: { id: updatedGame!.id } }); await downloadQueueRepository.insert({ game: { id: updatedGame!.id } }); + + await Promise.all([ + createGame(updatedGame!).catch(() => {}), + HydraApi.post( + "/games/download", + { + objectId: updatedGame!.objectID, + shop: updatedGame!.shop, + }, + { needsAuth: false } + ).catch(() => {}), + ]); }); }; diff --git a/src/main/events/user/get-unlocked-achievements.ts b/src/main/events/user/get-unlocked-achievements.ts index a831bc50..ffa25399 100644 --- a/src/main/events/user/get-unlocked-achievements.ts +++ b/src/main/events/user/get-unlocked-achievements.ts @@ -1,6 +1,9 @@ import type { GameShop, UnlockedAchievement, UserAchievement } from "@types"; import { registerEvent } from "../register-event"; -import { gameAchievementRepository } from "@main/repository"; +import { + gameAchievementRepository, + userPreferencesRepository, +} from "@main/repository"; import { getGameAchievementData } from "@main/services/achievements/get-game-achievement-data"; export const getUnlockedAchievements = async ( @@ -12,10 +15,17 @@ export const getUnlockedAchievements = async ( where: { objectId, shop }, }); + const userPreferences = await userPreferencesRepository.findOne({ + where: { id: 1 }, + }); + + const showHiddenAchievementsDescription = + userPreferences?.showHiddenAchievementsDescription || false; + const achievementsData = await getGameAchievementData( objectId, shop, - useCachedData + useCachedData ? cachedAchievements : null ); const unlockedAchievements = JSON.parse( @@ -50,6 +60,10 @@ export const getUnlockedAchievements = async ( unlocked: false, unlockTime: null, icongray: icongray, + description: + !achievementData.hidden || showHiddenAchievementsDescription + ? achievementData.description + : undefined, } as UserAchievement; }) .sort((a, b) => { diff --git a/src/main/knex-client.ts b/src/main/knex-client.ts index 988d42da..bfb4a430 100644 --- a/src/main/knex-client.ts +++ b/src/main/knex-client.ts @@ -13,6 +13,8 @@ import { AddBackgroundImageUrl } from "./migrations/20241016100249_add_backgroun import { AddWinePrefixToGame } from "./migrations/20241019081648_add_wine_prefix_to_game"; import { AddStartMinimizedColumn } from "./migrations/20241030171454_add_start_minimized_column"; import { AddDisableNsfwAlertColumn } from "./migrations/20241106053733_add_disable_nsfw_alert_column"; +import { AddHiddenAchievementDescriptionColumn } from "./migrations/20241216140633_add_hidden_achievement_description_column "; + export type HydraMigration = Knex.Migration & { name: string }; class MigrationSource implements Knex.MigrationSource { @@ -30,6 +32,7 @@ class MigrationSource implements Knex.MigrationSource { AddWinePrefixToGame, AddStartMinimizedColumn, AddDisableNsfwAlertColumn, + AddHiddenAchievementDescriptionColumn, ]); } getMigrationName(migration: HydraMigration): string { diff --git a/src/main/migrations/20241216140633_add_hidden_achievement_description_column .ts b/src/main/migrations/20241216140633_add_hidden_achievement_description_column .ts new file mode 100644 index 00000000..36771c43 --- /dev/null +++ b/src/main/migrations/20241216140633_add_hidden_achievement_description_column .ts @@ -0,0 +1,20 @@ +import type { HydraMigration } from "@main/knex-client"; +import type { Knex } from "knex"; + +export const AddHiddenAchievementDescriptionColumn: HydraMigration = { + name: "AddHiddenAchievementDescriptionColumn", + up: (knex: Knex) => { + return knex.schema.alterTable("user_preferences", (table) => { + return table + .boolean("showHiddenAchievementsDescription") + .notNullable() + .defaultTo(0); + }); + }, + + down: async (knex: Knex) => { + return knex.schema.alterTable("user_preferences", (table) => { + return table.dropColumn("showHiddenAchievementsDescription"); + }); + }, +}; diff --git a/src/main/scripts/get-games-icon-hash.ts b/src/main/scripts/get-games-icon-hash.ts deleted file mode 100644 index 36ecd35e..00000000 --- a/src/main/scripts/get-games-icon-hash.ts +++ /dev/null @@ -1,40 +0,0 @@ -import path from "node:path"; -import fs from "node:fs"; - -import { getSteamGameClientIcon, logger } from "@main/services"; -import { chunk } from "lodash-es"; -import { seedsPath } from "@main/constants"; - -import type { SteamGame } from "@types"; - -const steamGamesPath = path.join(seedsPath, "steam-games.json"); - -const steamGames = JSON.parse( - fs.readFileSync(steamGamesPath, "utf-8") -) as SteamGame[]; - -const chunks = chunk(steamGames, 1500); - -for (const chunk of chunks) { - await Promise.all( - chunk.map(async (steamGame) => { - if (steamGame.clientIcon) return; - - const index = steamGames.findIndex((game) => game.id === steamGame.id); - - try { - const clientIcon = await getSteamGameClientIcon(String(steamGame.id)); - - steamGames[index].clientIcon = clientIcon; - - logger.log("info", `Set ${steamGame.name} client icon`); - } catch (err) { - steamGames[index].clientIcon = null; - logger.log("info", `Could not set icon for ${steamGame.name}`); - } - }) - ); - - fs.writeFileSync(steamGamesPath, JSON.stringify(steamGames)); - logger.log("info", "Updated steam games"); -} diff --git a/src/main/services/achievements/achievement-watcher-manager.ts b/src/main/services/achievements/achievement-watcher-manager.ts index b7c71f86..6a1eb11c 100644 --- a/src/main/services/achievements/achievement-watcher-manager.ts +++ b/src/main/services/achievements/achievement-watcher-manager.ts @@ -236,24 +236,28 @@ export class AchievementWatcherManager { }; public static preSearchAchievements = async () => { - const newAchievementsCount = - process.platform === "win32" - ? await this.preSearchAchievementsWindows() - : await this.preSearchAchievementsWithWine(); + try { + const newAchievementsCount = + process.platform === "win32" + ? await this.preSearchAchievementsWindows() + : await this.preSearchAchievementsWithWine(); - const totalNewGamesWithAchievements = newAchievementsCount.filter( - (achievements) => achievements - ).length; - const totalNewAchievements = newAchievementsCount.reduce( - (acc, val) => acc + val, - 0 - ); - - if (totalNewAchievements > 0) { - publishCombinedNewAchievementNotification( - totalNewAchievements, - totalNewGamesWithAchievements + const totalNewGamesWithAchievements = newAchievementsCount.filter( + (achievements) => achievements + ).length; + const totalNewAchievements = newAchievementsCount.reduce( + (acc, val) => acc + val, + 0 ); + + if (totalNewAchievements > 0) { + publishCombinedNewAchievementNotification( + totalNewAchievements, + totalNewGamesWithAchievements + ); + } + } catch (err) { + achievementsLogger.error("Error on preSearchAchievements", err); } this.hasFinishedMergingWithRemote = true; diff --git a/src/main/services/achievements/get-game-achievement-data.ts b/src/main/services/achievements/get-game-achievement-data.ts index 02019dab..daac7e11 100644 --- a/src/main/services/achievements/get-game-achievement-data.ts +++ b/src/main/services/achievements/get-game-achievement-data.ts @@ -6,20 +6,15 @@ import { HydraApi } from "../hydra-api"; import type { AchievementData, GameShop } from "@types"; import { UserNotLoggedInError } from "@shared"; import { logger } from "../logger"; +import { GameAchievement } from "@main/entity"; export const getGameAchievementData = async ( objectId: string, shop: GameShop, - useCachedData: boolean + cachedAchievements: GameAchievement | null ) => { - if (useCachedData) { - const cachedAchievements = await gameAchievementRepository.findOne({ - where: { objectId, shop }, - }); - - if (cachedAchievements && cachedAchievements.achievements) { - return JSON.parse(cachedAchievements.achievements) as AchievementData[]; - } + if (cachedAchievements && cachedAchievements.achievements) { + return JSON.parse(cachedAchievements.achievements) as AchievementData[]; } const userPreferences = await userPreferencesRepository.findOne({ diff --git a/src/main/services/achievements/parse-achievement-file.ts b/src/main/services/achievements/parse-achievement-file.ts index 3aecadd6..18f0c25b 100644 --- a/src/main/services/achievements/parse-achievement-file.ts +++ b/src/main/services/achievements/parse-achievement-file.ts @@ -9,144 +9,134 @@ export const parseAchievementFile = ( ): UnlockedAchievement[] => { if (!existsSync(filePath)) return []; - if (type == Cracker.codex) { - const parsed = iniParse(filePath); - return processDefault(parsed); + try { + if (type == Cracker.codex) { + const parsed = iniParse(filePath); + return processDefault(parsed); + } + + if (type == Cracker.rune) { + const parsed = iniParse(filePath); + return processDefault(parsed); + } + + if (type === Cracker.onlineFix) { + const parsed = iniParse(filePath); + return processOnlineFix(parsed); + } + + if (type === Cracker.goldberg) { + const parsed = jsonParse(filePath); + return processGoldberg(parsed); + } + + if (type == Cracker.userstats) { + const parsed = iniParse(filePath); + return processUserStats(parsed); + } + + if (type == Cracker.rld) { + const parsed = iniParse(filePath); + return processRld(parsed); + } + + if (type === Cracker.skidrow) { + const parsed = iniParse(filePath); + return processSkidrow(parsed); + } + + if (type === Cracker._3dm) { + const parsed = iniParse(filePath); + return process3DM(parsed); + } + + if (type === Cracker.flt) { + const achievements = readdirSync(filePath); + + return achievements.map((achievement) => { + return { + name: achievement, + unlockTime: Date.now(), + }; + }); + } + + if (type === Cracker.creamAPI) { + const parsed = iniParse(filePath); + return processCreamAPI(parsed); + } + + if (type === Cracker.empress) { + const parsed = jsonParse(filePath); + return processGoldberg(parsed); + } + + if (type === Cracker.razor1911) { + return processRazor1911(filePath); + } + + achievementsLogger.log( + `Unprocessed ${type} achievements found on ${filePath}` + ); + return []; + } catch (err) { + achievementsLogger.error(`Error parsing ${type} - ${filePath}`, err); + return []; } - - if (type == Cracker.rune) { - const parsed = iniParse(filePath); - return processDefault(parsed); - } - - if (type === Cracker.onlineFix) { - const parsed = iniParse(filePath); - return processOnlineFix(parsed); - } - - if (type === Cracker.goldberg) { - const parsed = jsonParse(filePath); - return processGoldberg(parsed); - } - - if (type == Cracker.userstats) { - const parsed = iniParse(filePath); - return processUserStats(parsed); - } - - if (type == Cracker.rld) { - const parsed = iniParse(filePath); - return processRld(parsed); - } - - if (type === Cracker.skidrow) { - const parsed = iniParse(filePath); - return processSkidrow(parsed); - } - - if (type === Cracker._3dm) { - const parsed = iniParse(filePath); - return process3DM(parsed); - } - - if (type === Cracker.flt) { - const achievements = readdirSync(filePath); - - return achievements.map((achievement) => { - return { - name: achievement, - unlockTime: Date.now(), - }; - }); - } - - if (type === Cracker.creamAPI) { - const parsed = iniParse(filePath); - return processCreamAPI(parsed); - } - - if (type === Cracker.empress) { - const parsed = jsonParse(filePath); - return processGoldberg(parsed); - } - - if (type === Cracker.razor1911) { - return processRazor1911(filePath); - } - - achievementsLogger.log( - `Unprocessed ${type} achievements found on ${filePath}` - ); - return []; }; const iniParse = (filePath: string) => { - try { - const fileContent = readFileSync(filePath, "utf-8"); + const fileContent = readFileSync(filePath, "utf-8"); - const lines = - fileContent.charCodeAt(0) === 0xfeff - ? fileContent.slice(1).split(/[\r\n]+/) - : fileContent.split(/[\r\n]+/); + const lines = + fileContent.charCodeAt(0) === 0xfeff + ? fileContent.slice(1).split(/[\r\n]+/) + : fileContent.split(/[\r\n]+/); - let objectName = ""; - const object: Record> = {}; + let objectName = ""; + const object: Record> = {}; - for (const line of lines) { - if (line.startsWith("###") || !line.length) continue; + for (const line of lines) { + if (line.startsWith("###") || !line.length) continue; - if (line.startsWith("[") && line.endsWith("]")) { - objectName = line.slice(1, -1); - object[objectName] = {}; - } else { - const [name, ...value] = line.split("="); - object[objectName][name.trim()] = value.join("=").trim(); - } + if (line.startsWith("[") && line.endsWith("]")) { + objectName = line.slice(1, -1); + object[objectName] = {}; + } else { + const [name, ...value] = line.split("="); + object[objectName][name.trim()] = value.join("=").trim(); } - - return object; - } catch (err) { - achievementsLogger.error(`Error parsing ${filePath}`, err); - return {}; } + + return object; }; const jsonParse = (filePath: string) => { - try { - return JSON.parse(readFileSync(filePath, "utf-8")); - } catch (err) { - achievementsLogger.error(`Error parsing ${filePath}`, err); - return {}; - } + return JSON.parse(readFileSync(filePath, "utf-8")); }; const processRazor1911 = (filePath: string): UnlockedAchievement[] => { - try { - const fileContent = readFileSync(filePath, "utf-8"); + const fileContent = readFileSync(filePath, "utf-8"); - const lines = - fileContent.charCodeAt(0) === 0xfeff - ? fileContent.slice(1).split(/[\r\n]+/) - : fileContent.split(/[\r\n]+/); + const lines = + fileContent.charCodeAt(0) === 0xfeff + ? fileContent.slice(1).split(/[\r\n]+/) + : fileContent.split(/[\r\n]+/); - const achievements: UnlockedAchievement[] = []; - for (const line of lines) { - if (!line.length) continue; + const achievements: UnlockedAchievement[] = []; + for (const line of lines) { + if (!line.length) continue; - const [name, unlocked, unlockTime] = line.split(" "); - if (unlocked === "1") { - achievements.push({ - name, - unlockTime: Number(unlockTime) * 1000, - }); - } + const [name, unlocked, unlockTime] = line.split(" "); + if (unlocked === "1") { + achievements.push({ + name, + unlockTime: Number(unlockTime) * 1000, + }); } - - return achievements; - } catch (err) { - achievementsLogger.error(`Error processing ${filePath}`, err); - return []; } + + return achievements; }; const processOnlineFix = (unlockedAchievements: any): UnlockedAchievement[] => { diff --git a/src/main/services/index.ts b/src/main/services/index.ts index 498159c9..5aaf5322 100644 --- a/src/main/services/index.ts +++ b/src/main/services/index.ts @@ -1,7 +1,6 @@ export * from "./logger"; export * from "./steam"; export * from "./steam-250"; -export * from "./steam-grid"; export * from "./window-manager"; export * from "./download"; export * from "./process-watcher"; diff --git a/src/main/services/process-watcher.ts b/src/main/services/process-watcher.ts index fd9bb148..b95b93cf 100644 --- a/src/main/services/process-watcher.ts +++ b/src/main/services/process-watcher.ts @@ -1,53 +1,172 @@ -import { IsNull, Not } from "typeorm"; import { gameRepository } from "@main/repository"; import { WindowManager } from "./window-manager"; import { createGame, updateGamePlaytime } from "./library-sync"; import type { GameRunning } from "@types"; import { PythonInstance } from "./download"; import { Game } from "@main/entity"; +import axios from "axios"; +import { exec } from "child_process"; + +const commands = { + findWineDir: `lsof -c wine 2>/dev/null | grep '/drive_c/windows$' | head -n 1 | awk '{for(i=9;i<=NF;i++) printf "%s ", $i; print ""}'`, + findWineExecutables: `lsof -c wine 2>/dev/null | grep '\\.exe$' | awk '{for(i=9;i<=NF;i++) printf "%s ", $i; print ""}'`, +}; export const gamesPlaytime = new Map< number, { lastTick: number; firstTick: number; lastSyncTick: number } >(); +interface ExecutableInfo { + name: string; + os: string; +} + +interface GameExecutables { + [key: string]: ExecutableInfo[]; +} + const TICKS_TO_UPDATE_API = 120; let currentTick = 1; -const getSystemProcessSet = async () => { - const processes = await PythonInstance.getProcessList(); +const gameExecutables = ( + await axios + .get( + import.meta.env.MAIN_VITE_EXTERNAL_RESOURCES_URL + + "/game-executables.json" + ) + .catch(() => { + return { data: {} }; + }) +).data as GameExecutables; - if (process.platform === "linux") - return new Set(processes.map((process) => process.name)); - return new Set(processes.map((process) => process.exe)); +const findGamePathByProcess = ( + processMap: Map>, + gameId: string +) => { + const executables = gameExecutables[gameId].filter((info) => { + if (process.platform === "linux" && info.os === "linux") return true; + return info.os === "win32"; + }); + + for (const executable of executables) { + const exe = executable.name.slice(executable.name.lastIndexOf("/") + 1); + + if (!exe) continue; + + const pathSet = processMap.get(exe); + + if (pathSet) { + const executableName = + process.platform === "win32" + ? executable.name.replace(/\//g, "\\") + : executable.name; + + pathSet.forEach((path) => { + if (path.toLowerCase().endsWith(executableName)) { + gameRepository.update( + { objectID: gameId, shop: "steam" }, + { executablePath: path } + ); + + if (process.platform === "linux") { + exec(commands.findWineDir, (err, out) => { + if (err) return; + + gameRepository.update( + { objectID: gameId, shop: "steam" }, + { + winePrefixPath: out.trim().replace("/drive_c/windows", ""), + } + ); + }); + } + } + }); + } + } }; -const getExecutable = (game: Game) => { - if (process.platform === "linux") - return game.executablePath?.split("/").at(-1); - return game.executablePath; +const getSystemProcessMap = async () => { + const processes = await PythonInstance.getProcessList(); + + const map = new Map>(); + + processes.forEach((process) => { + const key = process.name.toLowerCase(); + const value = process.exe; + + if (!key || !value) return; + + const currentSet = map.get(key) ?? new Set(); + map.set(key, currentSet.add(value)); + }); + + if (process.platform === "linux") { + await new Promise((res) => { + exec(commands.findWineExecutables, (err, out) => { + if (err) { + res(null); + return; + } + + const pathSet = new Set( + out + .trim() + .split("\n") + .map((path) => path.trim()) + ); + + pathSet.forEach((path) => { + if (path.startsWith("/usr")) return; + + const key = path.slice(path.lastIndexOf("/") + 1).toLowerCase(); + + if (!key || !path) return; + + const currentSet = map.get(key) ?? new Set(); + map.set(key, currentSet.add(path)); + }); + + res(null); + }); + }); + } + + return map; }; export const watchProcesses = async () => { const games = await gameRepository.find({ where: { - executablePath: Not(IsNull()), isDeleted: false, }, }); - if (games.length === 0) return; + if (!games.length) return; - const processSet = await getSystemProcessSet(); + const processMap = await getSystemProcessMap(); for (const game of games) { - const executable = getExecutable(game); + const executablePath = game.executablePath; - if (!executable) continue; + if (!executablePath) { + if (gameExecutables[game.objectID]) { + findGamePathByProcess(processMap, game.objectID); + } + continue; + } - const gameProcess = processSet.has(executable); + const executable = executablePath + .slice( + executablePath.lastIndexOf(process.platform === "win32" ? "\\" : "/") + + 1 + ) + .toLowerCase(); - if (gameProcess) { + const hasProcess = processMap.get(executable)?.has(executablePath); + + if (hasProcess) { if (gamesPlaytime.has(game.id)) { onTickGame(game); } else { diff --git a/src/main/services/steam-grid.ts b/src/main/services/steam-grid.ts deleted file mode 100644 index 540e5857..00000000 --- a/src/main/services/steam-grid.ts +++ /dev/null @@ -1,69 +0,0 @@ -import type { GameShop } from "@types"; -import axios from "axios"; - -export interface SteamGridResponse { - success: boolean; - data: { - id: number; - }; -} - -export interface SteamGridGameResponse { - data: { - platforms: { - steam: { - metadata: { - clienticon: string; - }; - }; - }; - }; -} - -export const getSteamGridData = async ( - objectId: string, - path: string, - shop: GameShop, - params: Record = {} -): Promise => { - const searchParams = new URLSearchParams(params); - - if (!import.meta.env.MAIN_VITE_STEAMGRIDDB_API_KEY) { - throw new Error("MAIN_VITE_STEAMGRIDDB_API_KEY is not set"); - } - - const response = await axios.get( - `https://www.steamgriddb.com/api/v2/${path}/${shop}/${objectId}?${searchParams.toString()}`, - { - headers: { - Authorization: `Bearer ${import.meta.env.MAIN_VITE_STEAMGRIDDB_API_KEY}`, - }, - } - ); - - return response.data; -}; - -export const getSteamGridGameById = async ( - id: number -): Promise => { - const response = await axios.get( - `https://www.steamgriddb.com/api/public/game/${id}`, - { - headers: { - Referer: "https://www.steamgriddb.com/", - }, - } - ); - - return response.data; -}; - -export const getSteamGameClientIcon = async (objectId: string) => { - const { - data: { id: steamGridGameId }, - } = await getSteamGridData(objectId, "games", "steam"); - - const steamGridGame = await getSteamGridGameById(steamGridGameId); - return steamGridGame.data.platforms.steam.metadata.clienticon; -}; diff --git a/src/main/vite-env.d.ts b/src/main/vite-env.d.ts index 86aa9d33..af40cf5f 100644 --- a/src/main/vite-env.d.ts +++ b/src/main/vite-env.d.ts @@ -6,6 +6,7 @@ interface ImportMetaEnv { readonly MAIN_VITE_ANALYTICS_API_URL: string; readonly MAIN_VITE_AUTH_URL: string; readonly MAIN_VITE_CHECKOUT_URL: string; + readonly MAIN_VITE_EXTERNAL_RESOURCES_URL: string; } interface ImportMeta { diff --git a/src/preload/index.ts b/src/preload/index.ts index d143b73d..cab56fe2 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -12,10 +12,10 @@ import type { FriendRequestAction, UpdateProfileRequest, CatalogueSearchPayload, + GameAchievement, } from "@types"; import type { CatalogueCategory } from "@shared"; import type { AxiosProgressEvent } from "axios"; -import { GameAchievement } from "@main/entity"; contextBridge.exposeInMainWorld("electron", { /* Torrenting */ diff --git a/src/renderer/src/app.tsx b/src/renderer/src/app.tsx index 2f571f2f..944657b2 100644 --- a/src/renderer/src/app.tsx +++ b/src/renderer/src/app.tsx @@ -121,7 +121,7 @@ export function App() { const $script = document.createElement("script"); $script.id = "external-resources"; - $script.src = `${import.meta.env.RENDERER_VITE_EXTERNAL_RESOURCES_URL}?t=${Date.now()}`; + $script.src = `${import.meta.env.RENDERER_VITE_EXTERNAL_RESOURCES_URL}/bundle.js?t=${Date.now()}`; document.head.appendChild($script); }); }, [fetchUserDetails, syncFriendRequests, updateUserDetails, dispatch]); diff --git a/src/renderer/src/pages/settings/settings-behavior.tsx b/src/renderer/src/pages/settings/settings-behavior.tsx index b4b91dd2..478cdffc 100644 --- a/src/renderer/src/pages/settings/settings-behavior.tsx +++ b/src/renderer/src/pages/settings/settings-behavior.tsx @@ -19,6 +19,7 @@ export function SettingsBehavior() { runAtStartup: false, startMinimized: false, disableNsfwAlert: false, + showHiddenAchievementsDescription: false, }); const { t } = useTranslation("settings"); @@ -30,6 +31,8 @@ export function SettingsBehavior() { runAtStartup: userPreferences.runAtStartup, startMinimized: userPreferences.startMinimized, disableNsfwAlert: userPreferences.disableNsfwAlert, + showHiddenAchievementsDescription: + userPreferences.showHiddenAchievementsDescription, }); } }, [userPreferences]); @@ -96,6 +99,17 @@ export function SettingsBehavior() { handleChange({ disableNsfwAlert: !form.disableNsfwAlert }) } /> + + + handleChange({ + showHiddenAchievementsDescription: + !form.showHiddenAchievementsDescription, + }) + } + /> ); } diff --git a/src/types/index.ts b/src/types/index.ts index f048b3f1..e69a725c 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -150,6 +150,7 @@ export interface UserPreferences { runAtStartup: boolean; startMinimized: boolean; disableNsfwAlert: boolean; + showHiddenAchievementsDescription: boolean; } export interface Steam250Game { diff --git a/yarn.lock b/yarn.lock index c8bbd83e..b96d134a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -84,33 +84,33 @@ tslib "^2.6.2" "@aws-sdk/client-s3@^3.705.0": - version "3.712.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.712.0.tgz#2911e9c7a65fd9e5679926fdb838311a0b29e37c" - integrity sha512-Hq1IIwOFutmHtTz3mROR1XhTDL8rxcYbYw3ajjgeMJB5tjcvodpfkfz/L4dxXZMwqylWf6SNQNAiaGh5mlsGGQ== + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.714.0.tgz#74d056a57525a1289c7934015f2ce3f3714e7464" + integrity sha512-DqzfbecKrhUEpsYTsYRIm4cKKlIvAl4I/A2NpzDPDSiA2EmCWLy0T5fK1ivUA4XL+09+4pHJGNVTpMyDs7n6vg== dependencies: "@aws-crypto/sha1-browser" "5.2.0" "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.712.0" - "@aws-sdk/client-sts" "3.712.0" - "@aws-sdk/core" "3.709.0" - "@aws-sdk/credential-provider-node" "3.712.0" - "@aws-sdk/middleware-bucket-endpoint" "3.709.0" - "@aws-sdk/middleware-expect-continue" "3.709.0" - "@aws-sdk/middleware-flexible-checksums" "3.709.0" - "@aws-sdk/middleware-host-header" "3.709.0" - "@aws-sdk/middleware-location-constraint" "3.709.0" - "@aws-sdk/middleware-logger" "3.709.0" - "@aws-sdk/middleware-recursion-detection" "3.709.0" - "@aws-sdk/middleware-sdk-s3" "3.709.0" - "@aws-sdk/middleware-ssec" "3.709.0" - "@aws-sdk/middleware-user-agent" "3.709.0" - "@aws-sdk/region-config-resolver" "3.709.0" - "@aws-sdk/signature-v4-multi-region" "3.709.0" - "@aws-sdk/types" "3.709.0" - "@aws-sdk/util-endpoints" "3.709.0" - "@aws-sdk/util-user-agent-browser" "3.709.0" - "@aws-sdk/util-user-agent-node" "3.712.0" + "@aws-sdk/client-sso-oidc" "3.714.0" + "@aws-sdk/client-sts" "3.714.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/credential-provider-node" "3.714.0" + "@aws-sdk/middleware-bucket-endpoint" "3.714.0" + "@aws-sdk/middleware-expect-continue" "3.714.0" + "@aws-sdk/middleware-flexible-checksums" "3.714.0" + "@aws-sdk/middleware-host-header" "3.714.0" + "@aws-sdk/middleware-location-constraint" "3.714.0" + "@aws-sdk/middleware-logger" "3.714.0" + "@aws-sdk/middleware-recursion-detection" "3.714.0" + "@aws-sdk/middleware-sdk-s3" "3.714.0" + "@aws-sdk/middleware-ssec" "3.714.0" + "@aws-sdk/middleware-user-agent" "3.714.0" + "@aws-sdk/region-config-resolver" "3.714.0" + "@aws-sdk/signature-v4-multi-region" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@aws-sdk/util-endpoints" "3.714.0" + "@aws-sdk/util-user-agent-browser" "3.714.0" + "@aws-sdk/util-user-agent-node" "3.714.0" "@aws-sdk/xml-builder" "3.709.0" "@smithy/config-resolver" "^3.0.13" "@smithy/core" "^2.5.5" @@ -147,24 +147,24 @@ "@smithy/util-waiter" "^3.2.0" tslib "^2.6.2" -"@aws-sdk/client-sso-oidc@3.712.0": - version "3.712.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.712.0.tgz#ba3c9ae1b74f3c44e406397c60c812bb9e2e98a4" - integrity sha512-xNFrG9syrG6pxUP7Ld/nu3afQ9+rbJM9qrE+wDNz4VnNZ3vLiJty4fH85zBFhOQ5OF2DIJTWsFzXGi2FYjsCMA== +"@aws-sdk/client-sso-oidc@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.714.0.tgz#ddbb500ce93003f21c26d05ac45593c961d8b8e2" + integrity sha512-dMvpPUaL3v01psPY1ZyCzQ/w2tOgQTH1if0zBF5r2q7Vc0oOPzbBZgNAhG1bDWlRCBW0iXmoqRFoWUwQ5rtx+A== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.709.0" - "@aws-sdk/credential-provider-node" "3.712.0" - "@aws-sdk/middleware-host-header" "3.709.0" - "@aws-sdk/middleware-logger" "3.709.0" - "@aws-sdk/middleware-recursion-detection" "3.709.0" - "@aws-sdk/middleware-user-agent" "3.709.0" - "@aws-sdk/region-config-resolver" "3.709.0" - "@aws-sdk/types" "3.709.0" - "@aws-sdk/util-endpoints" "3.709.0" - "@aws-sdk/util-user-agent-browser" "3.709.0" - "@aws-sdk/util-user-agent-node" "3.712.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/credential-provider-node" "3.714.0" + "@aws-sdk/middleware-host-header" "3.714.0" + "@aws-sdk/middleware-logger" "3.714.0" + "@aws-sdk/middleware-recursion-detection" "3.714.0" + "@aws-sdk/middleware-user-agent" "3.714.0" + "@aws-sdk/region-config-resolver" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@aws-sdk/util-endpoints" "3.714.0" + "@aws-sdk/util-user-agent-browser" "3.714.0" + "@aws-sdk/util-user-agent-node" "3.714.0" "@smithy/config-resolver" "^3.0.13" "@smithy/core" "^2.5.5" "@smithy/fetch-http-handler" "^4.1.2" @@ -192,23 +192,23 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/client-sso@3.712.0": - version "3.712.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.712.0.tgz#9644585700f5d96a16151bdb5387755adc524db8" - integrity sha512-tBo/eW3YpZ9f3Q1qA7aA8uliNFJJX0OP7R2IUJ8t6rqVTk15wWCEPNmXzUZKgruDnKUfCaF4+r9q/Yy4fBc9PA== +"@aws-sdk/client-sso@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.714.0.tgz#a98358f499fcffec7895f9fb0fb8650b3c993bc4" + integrity sha512-pFtjY5Ga91qrryo0UfbjetdT2p9rOgtHofogAeEuGjxx7/rupBpdlW0WDOtD/7jhmbhM8WZEr6aH7GLzzkKfCA== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.709.0" - "@aws-sdk/middleware-host-header" "3.709.0" - "@aws-sdk/middleware-logger" "3.709.0" - "@aws-sdk/middleware-recursion-detection" "3.709.0" - "@aws-sdk/middleware-user-agent" "3.709.0" - "@aws-sdk/region-config-resolver" "3.709.0" - "@aws-sdk/types" "3.709.0" - "@aws-sdk/util-endpoints" "3.709.0" - "@aws-sdk/util-user-agent-browser" "3.709.0" - "@aws-sdk/util-user-agent-node" "3.712.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/middleware-host-header" "3.714.0" + "@aws-sdk/middleware-logger" "3.714.0" + "@aws-sdk/middleware-recursion-detection" "3.714.0" + "@aws-sdk/middleware-user-agent" "3.714.0" + "@aws-sdk/region-config-resolver" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@aws-sdk/util-endpoints" "3.714.0" + "@aws-sdk/util-user-agent-browser" "3.714.0" + "@aws-sdk/util-user-agent-node" "3.714.0" "@smithy/config-resolver" "^3.0.13" "@smithy/core" "^2.5.5" "@smithy/fetch-http-handler" "^4.1.2" @@ -236,25 +236,25 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/client-sts@3.712.0": - version "3.712.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.712.0.tgz#455daebd946369c60c7795efbd7a6b5981d0662a" - integrity sha512-gIO6BD+hkEe3GKQhbiFP0zcNQv0EkP1Cl9SOstxS+X9CeudEgVX/xEPUjyoFVkfkntPBJ1g0I1u5xOzzRExl4g== +"@aws-sdk/client-sts@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.714.0.tgz#3222b498ae1dd83490379558eb1af27d5d89601c" + integrity sha512-ThcXgolapPsOzeavJF4Am312umFyoFBBeiTYD8PQGIiYkbJi4hXcjoWacmtkq6moMmMZSP9iK/ellls7vwY2JQ== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.712.0" - "@aws-sdk/core" "3.709.0" - "@aws-sdk/credential-provider-node" "3.712.0" - "@aws-sdk/middleware-host-header" "3.709.0" - "@aws-sdk/middleware-logger" "3.709.0" - "@aws-sdk/middleware-recursion-detection" "3.709.0" - "@aws-sdk/middleware-user-agent" "3.709.0" - "@aws-sdk/region-config-resolver" "3.709.0" - "@aws-sdk/types" "3.709.0" - "@aws-sdk/util-endpoints" "3.709.0" - "@aws-sdk/util-user-agent-browser" "3.709.0" - "@aws-sdk/util-user-agent-node" "3.712.0" + "@aws-sdk/client-sso-oidc" "3.714.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/credential-provider-node" "3.714.0" + "@aws-sdk/middleware-host-header" "3.714.0" + "@aws-sdk/middleware-logger" "3.714.0" + "@aws-sdk/middleware-recursion-detection" "3.714.0" + "@aws-sdk/middleware-user-agent" "3.714.0" + "@aws-sdk/region-config-resolver" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@aws-sdk/util-endpoints" "3.714.0" + "@aws-sdk/util-user-agent-browser" "3.714.0" + "@aws-sdk/util-user-agent-node" "3.714.0" "@smithy/config-resolver" "^3.0.13" "@smithy/core" "^2.5.5" "@smithy/fetch-http-handler" "^4.1.2" @@ -282,12 +282,12 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/core@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.709.0.tgz#d2b3d5b90f6614e3afc109ebdcaaedbb54c2d68b" - integrity sha512-7kuSpzdOTAE026j85wq/fN9UDZ70n0OHw81vFqMWwlEFtm5IQ/MRCLKcC4HkXxTdfy1PqFlmoXxWqeBa15tujw== +"@aws-sdk/core@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.714.0.tgz#f53dbf5aa579f66bf3aa3e3e312b624e70ae871d" + integrity sha512-TlZ50d8MEPVp9O03SvisOmcmxjxhMDKHJJcrBgYjgDej6QmNfiFwtCRkReXDdkEeXP29ehMs7uPXtmVvPqziYw== dependencies: - "@aws-sdk/types" "3.709.0" + "@aws-sdk/types" "3.714.0" "@smithy/core" "^2.5.5" "@smithy/node-config-provider" "^3.1.12" "@smithy/property-provider" "^3.1.11" @@ -299,24 +299,24 @@ fast-xml-parser "4.4.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-env@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.709.0.tgz#a7f75375d8a413f9ab2bc42f743b943da6d3362d" - integrity sha512-ZMAp9LSikvHDFVa84dKpQmow6wsg956Um20cKuioPpX2GGreJFur7oduD+tRJT6FtIOHn+64YH+0MwiXLhsaIQ== +"@aws-sdk/credential-provider-env@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.714.0.tgz#87b9e71d6477fbed1d4c8c3fc561c11994ba573c" + integrity sha512-0S4nKE1a+EHXAInXUeuWkyzVnXzmwIbwLStVidAIoyl6sJF8xGdw+r3AaoTr7p0YXzdoDUsn3wBTCA6ZwgXVbA== dependencies: - "@aws-sdk/core" "3.709.0" - "@aws-sdk/types" "3.709.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/types" "3.714.0" "@smithy/property-provider" "^3.1.11" "@smithy/types" "^3.7.2" tslib "^2.6.2" -"@aws-sdk/credential-provider-http@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.709.0.tgz#a378cbcc4cf373cc277944f1e84e9952f3884f5d" - integrity sha512-lIS7XLwCOyJnLD70f+VIRr8DNV1HPQe9oN6aguYrhoczqz7vDiVZLe3lh714cJqq9rdxzFypK5DqKHmcscMEPQ== +"@aws-sdk/credential-provider-http@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.714.0.tgz#06dc80fc910ef85aadb920d9be9b6aba971ea31a" + integrity sha512-1AXEfUSQUQg+x/DpH1XJhjf2yEgTHHatM3cvYu7FZMhRXF28Q5OJDbEFPfdqrK+vmCiYRWhszDb+zuUIvz46bw== dependencies: - "@aws-sdk/core" "3.709.0" - "@aws-sdk/types" "3.709.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/types" "3.714.0" "@smithy/fetch-http-handler" "^4.1.2" "@smithy/node-http-handler" "^3.3.2" "@smithy/property-provider" "^3.1.11" @@ -326,85 +326,85 @@ "@smithy/util-stream" "^3.3.2" tslib "^2.6.2" -"@aws-sdk/credential-provider-ini@3.712.0": - version "3.712.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.712.0.tgz#21d94d3fbaf5cece29bc62d56cf7f0dfb8b7d25e" - integrity sha512-sTsdQ/Fm/suqMdpjhMuss/5uKL18vcuWnNTQVrG9iGNRqZLbq65MXquwbUpgzfoUmIcH+4CrY6H2ebpTIECIag== +"@aws-sdk/credential-provider-ini@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.714.0.tgz#7fbe0a9c2ef00f1eee59f1bc24194f66c77fdaf2" + integrity sha512-w5wOcgBngfcvVev5wnYWXoc/W2ewVmGJkfRdGquhFt8pkUxktyd8eXehqkP7u31SONVlgy96EFTdSCzWpTrqOw== dependencies: - "@aws-sdk/core" "3.709.0" - "@aws-sdk/credential-provider-env" "3.709.0" - "@aws-sdk/credential-provider-http" "3.709.0" - "@aws-sdk/credential-provider-process" "3.709.0" - "@aws-sdk/credential-provider-sso" "3.712.0" - "@aws-sdk/credential-provider-web-identity" "3.709.0" - "@aws-sdk/types" "3.709.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/credential-provider-env" "3.714.0" + "@aws-sdk/credential-provider-http" "3.714.0" + "@aws-sdk/credential-provider-process" "3.714.0" + "@aws-sdk/credential-provider-sso" "3.714.0" + "@aws-sdk/credential-provider-web-identity" "3.714.0" + "@aws-sdk/types" "3.714.0" "@smithy/credential-provider-imds" "^3.2.8" "@smithy/property-provider" "^3.1.11" "@smithy/shared-ini-file-loader" "^3.1.12" "@smithy/types" "^3.7.2" tslib "^2.6.2" -"@aws-sdk/credential-provider-node@3.712.0": - version "3.712.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.712.0.tgz#6f017382b1182578cf62798310f42264b652e36e" - integrity sha512-gXrHymW3rMRYORkPVQwL8Gi5Lu92F16SoZR543x03qCi7rm00oL9tRD85ACxkhprS1Wh8lUIUMNoeiwnYWTNuQ== +"@aws-sdk/credential-provider-node@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.714.0.tgz#48c90bf53e55b31b23bf464b420816ec9259f0c1" + integrity sha512-ebho1HYNKzaw0ZfbI9kEicSW8J7tsOoV6EJajsjfFnuP+GY9J5Oi4759GEq1Qqj7GxIhrySOZFzif/hxAXPWtQ== dependencies: - "@aws-sdk/credential-provider-env" "3.709.0" - "@aws-sdk/credential-provider-http" "3.709.0" - "@aws-sdk/credential-provider-ini" "3.712.0" - "@aws-sdk/credential-provider-process" "3.709.0" - "@aws-sdk/credential-provider-sso" "3.712.0" - "@aws-sdk/credential-provider-web-identity" "3.709.0" - "@aws-sdk/types" "3.709.0" + "@aws-sdk/credential-provider-env" "3.714.0" + "@aws-sdk/credential-provider-http" "3.714.0" + "@aws-sdk/credential-provider-ini" "3.714.0" + "@aws-sdk/credential-provider-process" "3.714.0" + "@aws-sdk/credential-provider-sso" "3.714.0" + "@aws-sdk/credential-provider-web-identity" "3.714.0" + "@aws-sdk/types" "3.714.0" "@smithy/credential-provider-imds" "^3.2.8" "@smithy/property-provider" "^3.1.11" "@smithy/shared-ini-file-loader" "^3.1.12" "@smithy/types" "^3.7.2" tslib "^2.6.2" -"@aws-sdk/credential-provider-process@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.709.0.tgz#2521f810590f0874c54cc842d3d56f455a728325" - integrity sha512-IAC+jPlGQII6jhIylHOwh3RgSobqlgL59nw2qYTURr8hMCI0Z1p5y2ee646HTVt4WeCYyzUAXfxr6YI/Vitv+Q== +"@aws-sdk/credential-provider-process@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.714.0.tgz#1fd25ddda0bac94fad7d2cbeeeb84d5746af3f2a" + integrity sha512-mHM+zYJDUiXggBx4YvQgMOhbkV07KUib8/jWPnAZbUJcRncN/yevAp/WNocjUN4VaBWkooJUgoTET/okRK+TCQ== dependencies: - "@aws-sdk/core" "3.709.0" - "@aws-sdk/types" "3.709.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/types" "3.714.0" "@smithy/property-provider" "^3.1.11" "@smithy/shared-ini-file-loader" "^3.1.12" "@smithy/types" "^3.7.2" tslib "^2.6.2" -"@aws-sdk/credential-provider-sso@3.712.0": - version "3.712.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.712.0.tgz#d29c8c14e2460a817ed2eb7ad5d205d7914817af" - integrity sha512-8lCMxY7Lb9VK9qdlNXRJXE3W1UDVURnJZ3a4XWYNY6yr1TfQaN40mMyXX1oNlXXJtMV0szRvjM8dZj37E/ESAw== +"@aws-sdk/credential-provider-sso@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.714.0.tgz#803a21cbd558a2b47ab102c68ec9ed92e999523f" + integrity sha512-LQyHUQd+/A0PO96m6/A3KeekRplRpG9AmwLn8VPknlmACAhhbWHehzerCTd42V8dClf5pigr25/aVqh/2p/sRw== dependencies: - "@aws-sdk/client-sso" "3.712.0" - "@aws-sdk/core" "3.709.0" - "@aws-sdk/token-providers" "3.709.0" - "@aws-sdk/types" "3.709.0" + "@aws-sdk/client-sso" "3.714.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/token-providers" "3.714.0" + "@aws-sdk/types" "3.714.0" "@smithy/property-provider" "^3.1.11" "@smithy/shared-ini-file-loader" "^3.1.12" "@smithy/types" "^3.7.2" tslib "^2.6.2" -"@aws-sdk/credential-provider-web-identity@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.709.0.tgz#c2b03541cb57ae4c7d6abdca98f99a6a56833ea6" - integrity sha512-2lbDfE0IQ6gma/7BB2JpkjW5G0wGe4AS0x80oybYAYYviJmUtIR3Cn2pXun6bnAWElt4wYKl4su7oC36rs5rNA== +"@aws-sdk/credential-provider-web-identity@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.714.0.tgz#975b11d07c0f87bc4f6470cb45aef5aee590b78c" + integrity sha512-piKfEJvLrGZ0bH4NPO19d1dtfCZi2p6YJUK/9vRCD1rvJidOuHNeUwIcxTnkIMovQHX12rZVvU9ub0C3CwegUQ== dependencies: - "@aws-sdk/core" "3.709.0" - "@aws-sdk/types" "3.709.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/types" "3.714.0" "@smithy/property-provider" "^3.1.11" "@smithy/types" "^3.7.2" tslib "^2.6.2" -"@aws-sdk/middleware-bucket-endpoint@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.709.0.tgz#a69bdebfebb7b5b174d3a396f2361f5025d168f4" - integrity sha512-03+tJOd7KIZOiqWH7Z8BOfQIWkKJgjcpKOJKZ6FR2KjWGUOE1G+bo11wF4UuHQ0RmpKnApt+pQghZmSnE7WEeg== +"@aws-sdk/middleware-bucket-endpoint@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.714.0.tgz#c184781eb3e00648e9ca0f6db4522be8e8fbde4e" + integrity sha512-I/xSOskiseJJ8i183Z522BgqbgYzLKP7jGcg2Qeib/IWoG2IP+9DH8pwqagKaPAycyswtnoKBJiiFXY43n0CkA== dependencies: - "@aws-sdk/types" "3.709.0" + "@aws-sdk/types" "3.714.0" "@aws-sdk/util-arn-parser" "3.693.0" "@smithy/node-config-provider" "^3.1.12" "@smithy/protocol-http" "^4.1.8" @@ -412,26 +412,26 @@ "@smithy/util-config-provider" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-expect-continue@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.709.0.tgz#a7fec776da9de32e15088badfc09d69118f5d5ab" - integrity sha512-Tbl/DFvE4rHl8lMb9IzetwK4tf5R3VeHZkvEXQalsWoK0tbEQ8kXWi7wAYO4qbE7bFVvaxKX+irjJjTxf3BrCQ== +"@aws-sdk/middleware-expect-continue@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.714.0.tgz#8ea3941adf191c94246a9bc56c443d350fd32589" + integrity sha512-rlzsXdG8Lzo4Qpl35ZnpOBAWlzvDHpP9++0AXoUwAJA0QmMm7auIRmgxJuNj91VwT9h15ZU6xjU4S7fJl4W0+w== dependencies: - "@aws-sdk/types" "3.709.0" + "@aws-sdk/types" "3.714.0" "@smithy/protocol-http" "^4.1.8" "@smithy/types" "^3.7.2" tslib "^2.6.2" -"@aws-sdk/middleware-flexible-checksums@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.709.0.tgz#f0fb543c2db724cb43bae215ff0aea942d06a967" - integrity sha512-wbYm9tkyCaqMeU82yjaXw7V5BxCSlSLNupENW63LC7Fvyo/aQzj6LjSMHcBpR2QwjBEhXCtF47L7aQ8SPTNhdw== +"@aws-sdk/middleware-flexible-checksums@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.714.0.tgz#a42c12bfc3d619f40bc1c05d00ce535b4c3264fa" + integrity sha512-y5I2mRmTDRQ/SYa+F30RRE4xchTHmDPDiYKFRRoENxFhVcrv/FbjA3hfhB8Z95JfSalzJVr+XQjd+N+t4M2gMw== dependencies: "@aws-crypto/crc32" "5.2.0" "@aws-crypto/crc32c" "5.2.0" "@aws-crypto/util" "5.2.0" - "@aws-sdk/core" "3.709.0" - "@aws-sdk/types" "3.709.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/types" "3.714.0" "@smithy/is-array-buffer" "^3.0.0" "@smithy/node-config-provider" "^3.1.12" "@smithy/protocol-http" "^4.1.8" @@ -441,51 +441,51 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-host-header@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.709.0.tgz#f44f5c62f9bd7e5a443603fed68143d2d9725219" - integrity sha512-8gQYCYAaIw4lOCd5WYdf15Y/61MgRsAnrb2eiTl+icMlUOOzl8aOl5iDwm/Idp0oHZTflwxM4XSvGXO83PRWcw== +"@aws-sdk/middleware-host-header@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.714.0.tgz#c14707c2501e70a4343644f876bea5b575dc74e2" + integrity sha512-6l68kjNrh5QC8FGX3I3geBDavWN5Tg1RLHJ2HLA8ByGBtJyCwnz3hEkKfaxn0bBx0hF9DzbfjEOUF6cDqy2Kjg== dependencies: - "@aws-sdk/types" "3.709.0" + "@aws-sdk/types" "3.714.0" "@smithy/protocol-http" "^4.1.8" "@smithy/types" "^3.7.2" tslib "^2.6.2" -"@aws-sdk/middleware-location-constraint@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.709.0.tgz#4437d3d3cfbbdfca60664b1f237d600b94fd06a5" - integrity sha512-5YQWPXfZq7OE0jB2G0PP8K10GBod/YPJXb+1CfJS6FbQaglRoIm8KZmVEvJNnptSKyGtE62veeCcCQcfAUfFig== +"@aws-sdk/middleware-location-constraint@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.714.0.tgz#67bcc4552287481ac631be1c7a3326601be70f9b" + integrity sha512-MX7M+V+FblujKck3fyuzePVIAy9530gY719IiSxV6uN1qLHl7VDJxNblpF/KpXakD6rOg8OpvtmqsXj9aBMftw== dependencies: - "@aws-sdk/types" "3.709.0" + "@aws-sdk/types" "3.714.0" "@smithy/types" "^3.7.2" tslib "^2.6.2" -"@aws-sdk/middleware-logger@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.709.0.tgz#b9a0b016b7ae09cb502cc4faf45964d4b5745824" - integrity sha512-jDoGSccXv9zebnpUoisjWd5u5ZPIalrmm6TjvPzZ8UqzQt3Beiz0tnQwmxQD6KRc7ADweWP5Ntiqzbw9xpVajg== +"@aws-sdk/middleware-logger@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.714.0.tgz#c059e1aabf28fdfc647db6a3dba625a9813787cd" + integrity sha512-RkqHlMvQWUaRklU1bMfUuBvdWwxgUtEqpADaHXlGVj3vtEY2UgBjy+57CveC4MByqKIunNvVHBBbjrGVtwY7Lg== dependencies: - "@aws-sdk/types" "3.709.0" + "@aws-sdk/types" "3.714.0" "@smithy/types" "^3.7.2" tslib "^2.6.2" -"@aws-sdk/middleware-recursion-detection@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.709.0.tgz#d7dc253d4858d496caeb12dd6cddd87b250fb98b" - integrity sha512-PObL/wLr4lkfbQ0yXUWaoCWu/jcwfwZzCjsUiXW/H6hW9b/00enZxmx7OhtJYaR6xmh/Lcx5wbhIoDCbzdv0tw== +"@aws-sdk/middleware-recursion-detection@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.714.0.tgz#c2d20d335c035196ac1cd5cdf3f58c5f31b01bdb" + integrity sha512-AVU5ixnh93nqtsfgNc284oXsXaadyHGPHpql/jwgaaqQfEXjS/1/j3j9E/vpacfTTz2Vzo7hAOjnvrOXSEVDaA== dependencies: - "@aws-sdk/types" "3.709.0" + "@aws-sdk/types" "3.714.0" "@smithy/protocol-http" "^4.1.8" "@smithy/types" "^3.7.2" tslib "^2.6.2" -"@aws-sdk/middleware-sdk-s3@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.709.0.tgz#b6f22c77e64760869eb06255af58376f879742b2" - integrity sha512-FwtOG9t9xsLoLOQZ6qAdsWOjx9dsO6t28IjIDV1l6Ixiu2oC0Yks7goONjJUH0IDE4pDDDGzmuq0sn1XtHhheA== +"@aws-sdk/middleware-sdk-s3@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.714.0.tgz#d07f48aef867bf9f937031406ba70ec98d021ee5" + integrity sha512-YYhX+JefwwEsUxYs0YXn5Mfb97Lo3hwnk3qRIlUkcotCsHYwgCX4jVWjeh8HK+RFFx3Krbh/8/YmzTkI/Z4Z9Q== dependencies: - "@aws-sdk/core" "3.709.0" - "@aws-sdk/types" "3.709.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/types" "3.714.0" "@aws-sdk/util-arn-parser" "3.693.0" "@smithy/core" "^2.5.5" "@smithy/node-config-provider" "^3.1.12" @@ -499,67 +499,67 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-ssec@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.709.0.tgz#bbf5253cdce45ed2759a108fd924fff4b8e049d5" - integrity sha512-2muiLe7YkmlwZp2SKz+goZrDThGfRq3o0FcJF3Puc0XGmcEPEDjih537mCoTrGgcXNFlBc7YChd84r3t72ySaQ== +"@aws-sdk/middleware-ssec@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.714.0.tgz#a5112a5537da9330ab476c8f9c549e3e9ffba510" + integrity sha512-RkK8REAVwNUQmYbIDRw8eYbMJ8F1Rw4C9mlME4BBMhFlelGcD3ErU2ce24moQbDxBjNwHNESmIqgmdQk93CDCQ== dependencies: - "@aws-sdk/types" "3.709.0" + "@aws-sdk/types" "3.714.0" "@smithy/types" "^3.7.2" tslib "^2.6.2" -"@aws-sdk/middleware-user-agent@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.709.0.tgz#2a467f14b3f4a9270bcdfde32e3d4e38701aaafe" - integrity sha512-ooc9ZJvgkjPhi9q05XwSfNTXkEBEIfL4hleo5rQBKwHG3aTHvwOM7LLzhdX56QZVa6sorPBp6fwULuRDSqiQHw== +"@aws-sdk/middleware-user-agent@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.714.0.tgz#15cebf91f8bf51f494174911fd8808b32bf3a905" + integrity sha512-OgLjJf7WxUqA2OgiqGCfIc68gsbXlIG8LjObBiF0qlMStAd0L23AGuK5VmYinJlsle9qUpwQvWgKFKaDgdQXgA== dependencies: - "@aws-sdk/core" "3.709.0" - "@aws-sdk/types" "3.709.0" - "@aws-sdk/util-endpoints" "3.709.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@aws-sdk/util-endpoints" "3.714.0" "@smithy/core" "^2.5.5" "@smithy/protocol-http" "^4.1.8" "@smithy/types" "^3.7.2" tslib "^2.6.2" -"@aws-sdk/region-config-resolver@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.709.0.tgz#64547b333842e5804e1793e4d6d29578c0b34a68" - integrity sha512-/NoCAMEVKAg3kBKOrNtgOfL+ECt6nrl+L7q2SyYmrcY4tVCmwuECVqewQaHc03fTnJijfKLccw0Fj+6wOCnB6w== +"@aws-sdk/region-config-resolver@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.714.0.tgz#26449aeb67daa00560c69bb80cb6cd187ee18dc9" + integrity sha512-HJzsQxgMOAzZrbf/YIqEx30or4tZK1oNAk6Wm6xecUQx+23JXIaePRu1YFUOLBBERQ4QBPpISFurZWBMZ5ibAw== dependencies: - "@aws-sdk/types" "3.709.0" + "@aws-sdk/types" "3.714.0" "@smithy/node-config-provider" "^3.1.12" "@smithy/types" "^3.7.2" "@smithy/util-config-provider" "^3.0.0" "@smithy/util-middleware" "^3.0.11" tslib "^2.6.2" -"@aws-sdk/signature-v4-multi-region@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.709.0.tgz#0c6f9d3e2978158163b63a4085356616237223c9" - integrity sha512-m0vhJEy6SLbjL11K9cHzX/ZhCIj//1GkTbYk2d4tTQFSuPyJEkjmoeHk9dYm2mJy0wH48j29OJadI1JUsR5bOw== +"@aws-sdk/signature-v4-multi-region@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.714.0.tgz#91db060340d0006083cc750a4291a3144b4c4392" + integrity sha512-xIQyx0ILRtJZnSUPpMsWkwASuFDYh9GPnr7p+pmfsV5KtRQluHuoH1wPkPTeNuTnAl7RDHUOmcOgTPUCDxiKxg== dependencies: - "@aws-sdk/middleware-sdk-s3" "3.709.0" - "@aws-sdk/types" "3.709.0" + "@aws-sdk/middleware-sdk-s3" "3.714.0" + "@aws-sdk/types" "3.714.0" "@smithy/protocol-http" "^4.1.8" "@smithy/signature-v4" "^4.2.4" "@smithy/types" "^3.7.2" tslib "^2.6.2" -"@aws-sdk/token-providers@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.709.0.tgz#56305ab187660a711fd172c329dc953ca754fa80" - integrity sha512-q5Ar6k71nci43IbULFgC8a89d/3EHpmd7HvBzqVGRcHnoPwh8eZDBfbBXKH83NGwcS1qPSRYiDbVfeWPm4/1jA== +"@aws-sdk/token-providers@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.714.0.tgz#c308dff77d18978f630188000aebb87be38f5526" + integrity sha512-vKN064aLE3kl+Zl16Ony3jltHnMddMBT7JRkP1L+lLywhA0PcAKxpdvComul/sTBWnbnwLnaS5NsDUhcWySH8A== dependencies: - "@aws-sdk/types" "3.709.0" + "@aws-sdk/types" "3.714.0" "@smithy/property-provider" "^3.1.11" "@smithy/shared-ini-file-loader" "^3.1.12" "@smithy/types" "^3.7.2" tslib "^2.6.2" -"@aws-sdk/types@3.709.0", "@aws-sdk/types@^3.222.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.709.0.tgz#f8d7ab07e253d3ed0e3b360e09fc67c7430a73b9" - integrity sha512-ArtLTMxgjf13Kfu3gWH3Ez9Q5TkDdcRZUofpKH3pMGB/C6KAbeSCtIIDKfoRTUABzyGlPyCrZdnFjKyH+ypIpg== +"@aws-sdk/types@3.714.0", "@aws-sdk/types@^3.222.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.714.0.tgz#de6afee1436d2d95364efa0663887f3bf0b1303a" + integrity sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA== dependencies: "@smithy/types" "^3.7.2" tslib "^2.6.2" @@ -571,12 +571,12 @@ dependencies: tslib "^2.6.2" -"@aws-sdk/util-endpoints@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.709.0.tgz#32dfe339d78b699ada68392bbb3bec25441bae5c" - integrity sha512-Mbc7AtL5WGCTKC16IGeUTz+sjpC3ptBda2t0CcK0kMVw3THDdcSq6ZlNKO747cNqdbwUvW34oHteUiHv4/z88Q== +"@aws-sdk/util-endpoints@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.714.0.tgz#f059c27bedf329584358b1f837cd9a5c220f34e2" + integrity sha512-Xv+Z2lhe7w7ZZRsgBwBMZgGTVmS+dkkj2S13uNHAx9lhB5ovM8PhK5G/j28xYf6vIibeuHkRAbb7/ozdZIGR+A== dependencies: - "@aws-sdk/types" "3.709.0" + "@aws-sdk/types" "3.714.0" "@smithy/types" "^3.7.2" "@smithy/util-endpoints" "^2.1.7" tslib "^2.6.2" @@ -588,23 +588,23 @@ dependencies: tslib "^2.6.2" -"@aws-sdk/util-user-agent-browser@3.709.0": - version "3.709.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.709.0.tgz#ad6e867bdd348923ec10ddd6c37740ce0986cd8f" - integrity sha512-/rL2GasJzdTWUURCQKFldw2wqBtY4k4kCiA2tVZSKg3y4Ey7zO34SW8ebaeCE2/xoWOyLR2/etdKyphoo4Zrtg== +"@aws-sdk/util-user-agent-browser@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.714.0.tgz#7768660fa92a70b78406810a30174fb20508eb61" + integrity sha512-OdJJ03cP9/MgIVToPJPCPUImbpZzTcwdIgbXC0tUQPJhbD7b7cB4LdnkhNHko+MptpOrCq4CPY/33EpOjRdofw== dependencies: - "@aws-sdk/types" "3.709.0" + "@aws-sdk/types" "3.714.0" "@smithy/types" "^3.7.2" bowser "^2.11.0" tslib "^2.6.2" -"@aws-sdk/util-user-agent-node@3.712.0": - version "3.712.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.712.0.tgz#7634627775e0993eace70dea1dd915122f1a053f" - integrity sha512-26X21bZ4FWsVpqs33uOXiB60TOWQdVlr7T7XONDFL/XN7GEpUJkWuuIB4PTok6VOmh1viYcdxZQqekXPuzXexQ== +"@aws-sdk/util-user-agent-node@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.714.0.tgz#b9c86713fb0c9770cec9935eac93a74cf70844fd" + integrity sha512-x8JoZb7yBEbNUmHUNoRAP4L++6A5uZCVf2yFLw8CZKpH4q+Cf1a68ou48OfnND3H0rbBnLXc/3uOlseRvd57/g== dependencies: - "@aws-sdk/middleware-user-agent" "3.709.0" - "@aws-sdk/types" "3.709.0" + "@aws-sdk/middleware-user-agent" "3.714.0" + "@aws-sdk/types" "3.714.0" "@smithy/node-config-provider" "^3.1.12" "@smithy/types" "^3.7.2" tslib "^2.6.2" @@ -1082,23 +1082,23 @@ resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-2.2.2.tgz#1a6d89603fb215dc4d4178052d05b30b83c75402" integrity sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A== -"@commitlint/cli@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.5.0.tgz#a6e2f7f8397ddf9abd5ee5870e30a1bf51b7be2b" - integrity sha512-gaGqSliGwB86MDmAAKAtV9SV1SHdmN8pnGq4EJU4+hLisQ7IFfx4jvU4s+pk6tl0+9bv6yT+CaZkufOinkSJIQ== +"@commitlint/cli@^19.6.0": + version "19.6.0" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.6.0.tgz#98e7fc8501cc38b6eef4b7f61e19b15f3c53700e" + integrity sha512-v17BgGD9w5KnthaKxXnEg6KLq6DYiAxyiN44TpiRtqyW8NSq+Kx99mkEG8Qo6uu6cI5eMzMojW2muJxjmPnF8w== dependencies: "@commitlint/format" "^19.5.0" - "@commitlint/lint" "^19.5.0" + "@commitlint/lint" "^19.6.0" "@commitlint/load" "^19.5.0" "@commitlint/read" "^19.5.0" "@commitlint/types" "^19.5.0" tinyexec "^0.3.0" yargs "^17.0.0" -"@commitlint/config-conventional@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-19.5.0.tgz#f838cdaed0e0e223cdc2e865f055d474a49fe18c" - integrity sha512-OBhdtJyHNPryZKg0fFpZNOBM1ZDbntMvqMuSmpfyP86XSfwzGw4CaoYRG4RutUPg0BTK07VMRIkNJT6wi2zthg== +"@commitlint/config-conventional@^19.6.0": + version "19.6.0" + resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-19.6.0.tgz#badba72c8639ea79291e2941001bd7ea7fad3a2c" + integrity sha512-DJT40iMnTYtBtUfw9ApbsLZFke1zKh6llITVJ+x9mtpHD08gsNXaIRqHTmwTZL3dNX5+WoyK7pCN/5zswvkBCQ== dependencies: "@commitlint/types" "^19.5.0" conventional-changelog-conventionalcommits "^7.0.2" @@ -1136,22 +1136,22 @@ "@commitlint/types" "^19.5.0" chalk "^5.3.0" -"@commitlint/is-ignored@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-19.5.0.tgz#f8b7f365887acc1e3bdb31b17117bb435585dddf" - integrity sha512-0XQ7Llsf9iL/ANtwyZ6G0NGp5Y3EQ8eDQSxv/SRcfJ0awlBY4tHFAvwWbw66FVUaWICH7iE5en+FD9TQsokZ5w== +"@commitlint/is-ignored@^19.6.0": + version "19.6.0" + resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-19.6.0.tgz#6adb9097d36b68e00b9c06a73d7a08e9f54c54dc" + integrity sha512-Ov6iBgxJQFR9koOupDPHvcHU9keFupDgtB3lObdEZDroiG4jj1rzky60fbQozFKVYRTUdrBGICHG0YVmRuAJmw== dependencies: "@commitlint/types" "^19.5.0" semver "^7.6.0" -"@commitlint/lint@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-19.5.0.tgz#f4e162e7857a1c0694b20b92527704897558ff70" - integrity sha512-cAAQwJcRtiBxQWO0eprrAbOurtJz8U6MgYqLz+p9kLElirzSCc0vGMcyCaA1O7AqBuxo11l1XsY3FhOFowLAAg== +"@commitlint/lint@^19.6.0": + version "19.6.0" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-19.6.0.tgz#f9fc9b11b808c96bd3f85e882e056daabac40c36" + integrity sha512-LRo7zDkXtcIrpco9RnfhOKeg8PAnE3oDDoalnrVU/EVaKHYBWYL1DlRR7+3AWn0JiBqD8yKOfetVxJGdEtZ0tg== dependencies: - "@commitlint/is-ignored" "^19.5.0" + "@commitlint/is-ignored" "^19.6.0" "@commitlint/parse" "^19.5.0" - "@commitlint/rules" "^19.5.0" + "@commitlint/rules" "^19.6.0" "@commitlint/types" "^19.5.0" "@commitlint/load@^19.5.0": @@ -1207,10 +1207,10 @@ lodash.mergewith "^4.6.2" resolve-from "^5.0.0" -"@commitlint/rules@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-19.5.0.tgz#2a72ab506d49d7f33eda56f0ae072a3479429e74" - integrity sha512-hDW5TPyf/h1/EufSHEKSp6Hs+YVsDMHazfJ2azIk9tHPXS6UqSz1dIRs1gpqS3eMXgtkT7JH6TW4IShdqOwhAw== +"@commitlint/rules@^19.6.0": + version "19.6.0" + resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-19.6.0.tgz#2436da7974c3cf2a7236257f3ef5dd40c4d91312" + integrity sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw== dependencies: "@commitlint/ensure" "^19.5.0" "@commitlint/message" "^19.5.0" @@ -1634,20 +1634,20 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@fontsource/noto-sans@^5.0.22": - version "5.0.22" - resolved "https://registry.yarnpkg.com/@fontsource/noto-sans/-/noto-sans-5.0.22.tgz#2c5249347ba84fef16e71a58e0ec01b460174093" - integrity sha512-PwjvKPGFbgpwfKjWZj1zeUvd7ExUW2AqHE9PF9ysAJ2gOuzIHWE6mEVIlchYif7WC2pQhn+g0w6xooCObVi+4A== +"@fontsource/noto-sans@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@fontsource/noto-sans/-/noto-sans-5.1.0.tgz#54a5edd1b2b8c8e17bec6a85d4ee3a53b4b89c1f" + integrity sha512-P6X+ynPOteCsbUHI7rU4UIpRJcuraJ3OllKqPIjKgxPZS0yPtxFyquADb4SmcgZosRrgqDy34/dcSIhio3Qx4Q== "@gar/promisify@^1.1.3": version "1.1.3" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@hookform/resolvers@^3.9.0": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-3.9.0.tgz#cf540ac21c6c0cd24a40cf53d8e6d64391fb753d" - integrity sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg== +"@hookform/resolvers@^3.9.1": + version "3.9.1" + resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-3.9.1.tgz#a23883c40bfd449cb6c6ab5a0fa0729184c950ff" + integrity sha512-ud2HqmGBM0P0IABqoskKWI6PEf6ZDDBZkFqe2Vnl+mTHCEHzr3ISjjZyCwTjC/qpL25JC9aIDkloQejvMeq0ug== "@humanwhocodes/config-array@^0.13.0": version "0.13.0" @@ -2836,19 +2836,19 @@ resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz" integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== -"@types/jsdom@^21.1.6": - version "21.1.6" - resolved "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.6.tgz" - integrity sha512-/7kkMsC+/kMs7gAYmmBR9P0vGTnOoLhQhyhQJSlXGI5bzTHp6xdo0TtKWQAsz6pmSAeVqKSbqeyP6hytqr9FDw== +"@types/jsdom@^21.1.7": + version "21.1.7" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-21.1.7.tgz#9edcb09e0b07ce876e7833922d3274149c898cfa" + integrity sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA== dependencies: "@types/node" "*" "@types/tough-cookie" "*" parse5 "^7.0.0" -"@types/jsonwebtoken@^9.0.6": - version "9.0.6" - resolved "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.6.tgz" - integrity sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw== +"@types/jsonwebtoken@^9.0.7": + version "9.0.7" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz#e49b96c2b29356ed462e9708fc73b833014727d2" + integrity sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg== dependencies: "@types/node" "*" @@ -3097,12 +3097,12 @@ modern-ahocorasick "^1.0.0" picocolors "^1.0.0" -"@vanilla-extract/dynamic@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@vanilla-extract/dynamic/-/dynamic-2.1.1.tgz#bc93a577b127a7dcb6f254973d13a863029a7faf" - integrity sha512-iqf736036ujEIKsIq28UsBEMaLC2vR2DhwKyrG3NDb/fRy9qL9FKl1TqTtBV4daU30Uh3saeik4vRzN8bzQMbw== +"@vanilla-extract/dynamic@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@vanilla-extract/dynamic/-/dynamic-2.1.2.tgz#b1d1c1e0e392934c5a3bbb53f99069a7721311ac" + integrity sha512-9BGMciD8rO1hdSPIAh1ntsG4LPD3IYKhywR7VOmmz9OO4Lx1hlwkSg3E6X07ujFx7YuBfx0GDQnApG9ESHvB2A== dependencies: - "@vanilla-extract/private" "^1.0.5" + "@vanilla-extract/private" "^1.0.6" "@vanilla-extract/integration@^7.1.3": version "7.1.4" @@ -3127,10 +3127,10 @@ resolved "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.4.tgz" integrity sha512-8FGD6AejeC/nXcblgNCM5rnZb9KXa4WNkR03HCWtdJBpANjTgjHEglNLFnhuvdQ78tC6afaxBPI+g7F2NX3tgg== -"@vanilla-extract/private@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@vanilla-extract/private/-/private-1.0.5.tgz#8c08ac4851f4cc89a3dcdb858d8938e69b1481c4" - integrity sha512-6YXeOEKYTA3UV+RC8DeAjFk+/okoNz/h88R+McnzA2zpaVqTR/Ep+vszkWYlGBcMNO7vEkqbq5nT/JMMvhi+tw== +"@vanilla-extract/private@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@vanilla-extract/private/-/private-1.0.6.tgz#f10bbf3189f7b827d0bd7f804a6219dd03ddbdd4" + integrity sha512-ytsG/JLweEjw7DBuZ/0JCN4WAQgM9erfSTdS1NQY778hFQSZ6cfCDEZZ0sgVm4k54uNz6ImKB33AYvSR//fjxw== "@vanilla-extract/recipes@^0.5.2": version "0.5.2" @@ -3366,14 +3366,12 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== - dependencies: - deep-equal "^2.0.5" +aria-query@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== -array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: +array-buffer-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== @@ -3518,10 +3516,10 @@ axe-core@^4.10.0: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.0.tgz#d9e56ab0147278272739a000880196cdfe113b59" integrity sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g== -axios@^1.7.7: - version "1.7.7" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" - integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== +axios@^1.7.9: + version "1.7.9" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" + integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" @@ -3559,10 +3557,10 @@ bep53-range@^2.0.0: resolved "https://registry.yarnpkg.com/bep53-range/-/bep53-range-2.0.0.tgz#a1770475661b4b814c4359e4b66f7cbd88de2b10" integrity sha512-sMm2sV5PRs0YOVk0LTKtjuIprVzxgTQUsrGX/7Yph2Rm4FO2Fqqtq7hNjsOB5xezM4v4+5rljCgK++UeQJZguA== -better-sqlite3@^11.3.0: - version "11.3.0" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-11.3.0.tgz#f10b32ddff665c33176d148e707bd1e57dfd0284" - integrity sha512-iHt9j8NPYF3oKCNOO5ZI4JwThjt3Z6J6XrcwG85VNMVzv1ByqrHWv5VILEbCMFWDsoHhXvQ7oC8vgRXFAKgl9w== +better-sqlite3@^11.7.0: + version "11.7.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-11.7.0.tgz#3eaa0f54f9e57d0a100d980e42320f8b9a4cd676" + integrity sha512-mXpa5jnIKKHeoGzBrUJrc65cXFKcILGZpU3FXR0pradUEm9MA7UZz02qfEejaMcm9iXrSOCenwwYMJ/tZ1y5Ig== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -3750,6 +3748,14 @@ cacheable-request@^7.0.2: normalize-url "^6.0.1" responselike "^2.0.0" +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" + integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" @@ -3761,6 +3767,24 @@ call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.1" +call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.2.tgz#9dbd4daf9f5f753bec3e4c8fbb8a2ecc4de6c39b" + integrity sha512-0lk0PHFe/uz0vl527fG9CgdE9WdafjDbCXvBbs+LUv000TVt2Jjhqbs4Jwm8gz070w8xXyEAxrPOMullsxXeGg== + dependencies: + call-bind "^1.0.8" + get-intrinsic "^1.2.5" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -4223,30 +4247,6 @@ dedent@^1.5.1, dedent@^1.5.3: resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== -deep-equal@^2.0.5: - version "2.2.3" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" - integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.5" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.2" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.13" - deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -4317,10 +4317,10 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== -dexie@^4.0.9: - version "4.0.9" - resolved "https://registry.yarnpkg.com/dexie/-/dexie-4.0.9.tgz#8c4e827815a84ef4fdc6aa7923f89ea2cda87610" - integrity sha512-VQG1huEVSAdDZssb9Bb9mFy+d3jAE0PT4d1nIRYlT46ip1fzbs1tXi0SlUayRDgV3tTbJG8ZRqAo2um49gtynA== +dexie@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/dexie/-/dexie-4.0.10.tgz#979e3ee75993b44eea3852f97ceb198019d5b287" + integrity sha512-eM2RzuR3i+M046r2Q0Optl3pS31qTWf8aFuA7H9wnsHTwl8EPvroVLwvQene/6paAs39Tbk6fWZcn2aZaHkc/w== diff@^4.0.1: version "4.0.2" @@ -4411,6 +4411,15 @@ dotenv@^16.0.3, dotenv@^16.4.4, dotenv@^16.4.5: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== +dunder-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.0.tgz#c2fce098b3c8f8899554905f4377b6d85dabaa80" + integrity sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-errors "^1.3.0" + gopd "^1.2.0" + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -4446,10 +4455,10 @@ electron-builder@^25.1.8: simple-update-notifier "2.0.0" yargs "^17.6.2" -electron-log@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.2.0.tgz#505716926dfcf9cb3e74f42b1003be6d865bcb88" - integrity sha512-VjLkvaLmbP3AOGOh5Fob9M8bFU0mmeSAb5G2EoTBx+kQLf2XA/0byzjsVGBTHhikbT+m1AB27NEQUv9wX9nM8w== +electron-log@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.2.4.tgz#6b488d9db80aa3c6f3dc39bcd635fc9d1f79c8af" + integrity sha512-iX12WXc5XAaKeHg2QpiFjVwL+S1NVHPFd3V5RXtCmKhpAzXsVQnR3UEc0LovM6p6NkUQxDWnkdkaam9FNUVmCA== electron-publish@25.1.7: version "25.1.7" @@ -4495,10 +4504,10 @@ electron-vite@^2.0.0: magic-string "^0.30.10" picocolors "^1.0.1" -electron@^30.3.0: - version "30.5.1" - resolved "https://registry.yarnpkg.com/electron/-/electron-30.5.1.tgz#9f6060ce5b869c3803cbf8064305e9c3056c0744" - integrity sha512-AhL7+mZ8Lg14iaNfoYTkXQ2qee8mmsQyllKdqxlpv/zrKgfxz6jNVtcRRbQtLxtF8yzcImWdfTQROpYiPumdbw== +electron@^31.7.6: + version "31.7.6" + resolved "https://registry.yarnpkg.com/electron/-/electron-31.7.6.tgz#c3eccfdd2209cd782e9c2a1fc3b9a5532406928d" + integrity sha512-fc2kMaEc/zxGTW6oCxbuE7BQNOlDucSo+351AiovBAcp7G0iQkVu3k2kHIQolSsD38+tPdBj/N02DVpZTzi7rg== dependencies: "@electron/get" "^2.0.0" "@types/node" "^20.9.0" @@ -4550,7 +4559,7 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: +es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2, es-abstract@^1.23.3: version "1.23.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== @@ -4602,6 +4611,58 @@ es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23 unbox-primitive "^1.0.2" which-typed-array "^1.1.15" +es-abstract@^1.23.5: + version "1.23.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.5.tgz#f4599a4946d57ed467515ed10e4f157289cd52fb" + integrity sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.3" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + es-define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" @@ -4609,30 +4670,20 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - -es-iterator-helpers@^1.0.19: - version "1.0.19" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" - integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== +es-iterator-helpers@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz#2f1a3ab998b30cb2d10b195b587c6d9ebdebf152" + integrity sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q== dependencies: call-bind "^1.0.7" define-properties "^1.2.1" @@ -4641,12 +4692,13 @@ es-iterator-helpers@^1.0.19: es-set-tostringtag "^2.0.3" function-bind "^1.1.2" get-intrinsic "^1.2.4" - globalthis "^1.0.3" + globalthis "^1.0.4" + gopd "^1.0.1" has-property-descriptors "^1.0.2" has-proto "^1.0.3" has-symbols "^1.0.3" internal-slot "^1.0.7" - iterator.prototype "^1.1.2" + iterator.prototype "^1.1.3" safe-array-concat "^1.1.2" es-object-atoms@^1.0.0: @@ -4764,12 +4816,12 @@ eslint-config-prettier@^9.1.0: resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== -eslint-plugin-jsx-a11y@^6.8.0: - version "6.10.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz#36fb9dead91cafd085ddbe3829602fb10ef28339" - integrity sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg== +eslint-plugin-jsx-a11y@^6.10.2: + version "6.10.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz#d2812bb23bf1ab4665f1718ea442e8372e638483" + integrity sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== dependencies: - aria-query "~5.1.3" + aria-query "^5.3.2" array-includes "^3.1.8" array.prototype.flatmap "^1.3.2" ast-types-flow "^0.0.8" @@ -4777,14 +4829,13 @@ eslint-plugin-jsx-a11y@^6.8.0: axobject-query "^4.1.0" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" - es-iterator-helpers "^1.0.19" hasown "^2.0.2" jsx-ast-utils "^3.3.5" language-tags "^1.0.9" minimatch "^3.1.2" object.fromentries "^2.0.8" safe-regex-test "^1.0.3" - string.prototype.includes "^2.0.0" + string.prototype.includes "^2.0.1" eslint-plugin-prettier@^5.0.1: version "5.2.1" @@ -4799,17 +4850,17 @@ eslint-plugin-react-hooks@^4.6.0: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== -eslint-plugin-react@^7.33.2: - version "7.37.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz#56493d7d69174d0d828bc83afeffe96903fdadbd" - integrity sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg== +eslint-plugin-react@^7.37.2: + version "7.37.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz#cd0935987876ba2900df2f58339f6d92305acc7a" + integrity sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w== dependencies: array-includes "^3.1.8" array.prototype.findlast "^1.2.5" array.prototype.flatmap "^1.3.2" array.prototype.tosorted "^1.1.4" doctrine "^2.1.0" - es-iterator-helpers "^1.0.19" + es-iterator-helpers "^1.1.0" estraverse "^5.3.0" hasown "^2.0.2" jsx-ast-utils "^2.4.1 || ^3.0.0" @@ -5233,7 +5284,7 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -5244,6 +5295,22 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" +get-intrinsic@^1.2.5, get-intrinsic@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.6.tgz#43dd3dd0e7b49b82b2dfcad10dc824bf7fc265d5" + integrity sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA== + dependencies: + call-bind-apply-helpers "^1.0.1" + dunder-proto "^1.0.0" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + function-bind "^1.1.2" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.0.0" + get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" @@ -5388,7 +5455,7 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globalthis@^1.0.1, globalthis@^1.0.3: +globalthis@^1.0.1, globalthis@^1.0.3, globalthis@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== @@ -5415,6 +5482,11 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + got@^11.7.0, got@^11.8.5: version "11.8.6" resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" @@ -5474,6 +5546,11 @@ has-symbols@^1.0.2, has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" @@ -5572,10 +5649,10 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -husky@^9.0.11: - version "9.1.6" - resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.6.tgz#e23aa996b6203ab33534bdc82306b0cf2cb07d6c" - integrity sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A== +husky@^9.1.7: + version "9.1.7" + resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d" + integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA== i18next-browser-languagedetector@^7.2.1: version "7.2.1" @@ -5677,7 +5754,7 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.0.4, internal-slot@^1.0.7: +internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== @@ -5699,15 +5776,7 @@ ip-address@^9.0.5: jsbn "1.1.0" sprintf-js "^1.1.3" -is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: +is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== @@ -5739,6 +5808,13 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + is-boolean-object@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" @@ -5747,6 +5823,14 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-boolean-object@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.1.tgz#c20d0c654be05da4fbc23c562635c019e93daf89" + integrity sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" @@ -5773,24 +5857,32 @@ is-data-view@^1.0.1: dependencies: is-typed-array "^1.1.13" -is-date-object@^1.0.1, is-date-object@^1.0.5: +is-date-object@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: has-tostringtag "^1.0.0" +is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== +is-finalizationregistry@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz#d74a7d0c5f3578e34a20729e69202e578d495dc2" + integrity sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -5821,7 +5913,7 @@ is-lambda@^1.0.1: resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== -is-map@^2.0.2, is-map@^2.0.3: +is-map@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== @@ -5838,6 +5930,14 @@ is-number-object@^1.0.4: dependencies: has-tostringtag "^1.0.0" +is-number-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.0.tgz#5a867e9ecc3d294dda740d9f127835857af7eb05" + integrity sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw== + dependencies: + call-bind "^1.0.7" + has-tostringtag "^1.0.2" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -5866,7 +5966,17 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-set@^2.0.2, is-set@^2.0.3: +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-set@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== @@ -5890,6 +6000,14 @@ is-string@^1.0.5, is-string@^1.0.7: dependencies: has-tostringtag "^1.0.0" +is-string@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.0.tgz#8cb83c5d57311bf8058bc6c8db294711641da45d" + integrity sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g== + dependencies: + call-bind "^1.0.7" + has-tostringtag "^1.0.2" + is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" @@ -5897,6 +6015,15 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-symbol@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== + dependencies: + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" + is-text-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" @@ -5956,16 +6083,17 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -iterator.prototype@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" - integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== +iterator.prototype@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.4.tgz#4ae6cf98b97fdc717b7e159d79dc25f8fc9482f1" + integrity sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA== dependencies: - define-properties "^1.2.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - reflect.getprototypeof "^1.0.4" - set-function-name "^2.0.1" + define-data-property "^1.1.4" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + reflect.getprototypeof "^1.0.8" + set-function-name "^2.0.2" jackspeak@^2.3.6: version "2.3.6" @@ -6425,6 +6553,11 @@ matcher@^3.0.0: dependencies: escape-string-regexp "^4.0.0" +math-intrinsics@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.0.0.tgz#4e04bf87c85aa51e90d078dac2252b4eb5260817" + integrity sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA== + media-query-parser@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/media-query-parser/-/media-query-parser-2.0.2.tgz#ff79e56cee92615a304a1c2fa4f2bd056c0a1d29" @@ -6768,13 +6901,10 @@ object-inspect@^1.13.1: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== -object-is@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" - integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" +object-inspect@^1.13.3: + version "1.13.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" + integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== object-keys@^1.1.1: version "1.1.1" @@ -7100,10 +7230,10 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^3.2.4: - version "3.3.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" - integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== +prettier@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" + integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== progress@^2.0.3: version "2.0.3" @@ -7289,25 +7419,26 @@ reflect-metadata@^0.2.1: resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== -reflect.getprototypeof@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" - integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== +reflect.getprototypeof@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz#c58afb17a4007b4d1118c07b92c23fca422c5d82" + integrity sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" define-properties "^1.2.1" - es-abstract "^1.23.1" + dunder-proto "^1.0.0" + es-abstract "^1.23.5" es-errors "^1.3.0" get-intrinsic "^1.2.4" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" + gopd "^1.2.0" + which-builtin-type "^1.2.0" regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== -regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: +regexp.prototype.flags@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== @@ -7317,6 +7448,16 @@ regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: es-errors "^1.3.0" set-function-name "^2.0.1" +regexp.prototype.flags@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" + integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -7501,6 +7642,15 @@ safe-regex-test@^1.0.3: es-errors "^1.3.0" is-regex "^1.1.4" +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -7693,7 +7843,7 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-function-length@^1.2.1: +set-function-length@^1.2.1, set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== @@ -7872,13 +8022,6 @@ stat-mode@^1.0.0: resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465" integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg== -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" - "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -7906,13 +8049,14 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.includes@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz#8986d57aee66d5460c144620a6d873778ad7289f" - integrity sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg== +string.prototype.includes@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz#eceef21283640761a81dbe16d6c7171a4edf7d92" + integrity sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" string.prototype.matchall@^4.0.11: version "4.0.11" @@ -8475,10 +8619,10 @@ use-sync-external-store@^1.0.0: resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw== -user-agents@^1.1.193: - version "1.1.325" - resolved "https://registry.yarnpkg.com/user-agents/-/user-agents-1.1.325.tgz#12c3602d6b0175468f45564b3c684c390c3be57e" - integrity sha512-BmVDscJOZsBBztMPHg+wf65QwbT+N3C46YEsuW8BmcxRxwKh2AbdSaKEjzoC7rDlyuECXEUXO+C2eW3QAhbl2A== +user-agents@^1.1.387: + version "1.1.387" + resolved "https://registry.yarnpkg.com/user-agents/-/user-agents-1.1.387.tgz#afc69da00b50eee7ffa17724890e755a6672b99f" + integrity sha512-EQ1tx80ucECUrw+mY/lI4lVQTEN7nYflGpuLwqZS6vXw+pfzHMnhKPwZN9NiR+Mo9QxmDeNmk+2ZDEvInsxrxw== dependencies: lodash.clonedeep "^4.5.0" @@ -8607,25 +8751,37 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-builtin-type@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" - integrity sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w== +which-boxed-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.0.tgz#2d850d6c4ac37b95441a67890e19f3fda8b6c6d9" + integrity sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng== dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.0" + is-number-object "^1.1.0" + is-string "^1.1.0" + is-symbol "^1.1.0" + +which-builtin-type@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" function.prototype.name "^1.1.6" has-tostringtag "^1.0.2" is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" is-generator-function "^1.0.10" - is-regex "^1.1.4" + is-regex "^1.2.1" is-weakref "^1.0.2" isarray "^2.0.5" - which-boxed-primitive "^1.0.2" + which-boxed-primitive "^1.1.0" which-collection "^1.0.2" - which-typed-array "^1.1.15" + which-typed-array "^1.1.16" -which-collection@^1.0.1, which-collection@^1.0.2: +which-collection@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== @@ -8635,7 +8791,7 @@ which-collection@^1.0.1, which-collection@^1.0.2: is-weakmap "^2.0.2" is-weakset "^2.0.3" -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15: +which-typed-array@^1.1.14, which-typed-array@^1.1.15: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== @@ -8646,6 +8802,17 @@ which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15: gopd "^1.0.1" has-tostringtag "^1.0.2" +which-typed-array@^1.1.16: + version "1.1.16" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.16.tgz#db4db429c4706feca2f01677a144278e4a8c216b" + integrity sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + which@2.0.2, which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -8742,10 +8909,10 @@ yallist@^5.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== -yaml@^2.4.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.5.1.tgz#c9772aacf62cb7494a95b0c4f1fb065b563db130" - integrity sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q== +yaml@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.1.tgz#42f2b1ba89203f374609572d5349fb8686500773" + integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg== yargs-parser@^20.2.2: version "20.2.9" @@ -8806,17 +8973,17 @@ yocto-queue@^1.0.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== -yup@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/yup/-/yup-1.4.0.tgz#898dcd660f9fb97c41f181839d3d65c3ee15a43e" - integrity sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg== +yup@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/yup/-/yup-1.5.0.tgz#1aaa5e453f04424094b9c8a0e5292e0ac2d97246" + integrity sha512-NJfBIHnp1QbqZwxcgl6irnDMIsb/7d1prNhFx02f1kp8h+orpi4xs3w90szNpOh68a/iHPdMsYvhZWoDmUvXBQ== dependencies: property-expr "^2.0.5" tiny-case "^1.0.3" toposort "^2.0.2" type-fest "^2.19.0" -zod@^3.23.8: - version "3.23.8" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" - integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== +zod@^3.24.1: + version "3.24.1" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.1.tgz#27445c912738c8ad1e9de1bea0359fa44d9d35ee" + integrity sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==