From 1db5a9c295dde3a4a18134225dda39e0cd3ece11 Mon Sep 17 00:00:00 2001 From: Hydra Date: Sun, 21 Apr 2024 06:26:29 +0100 Subject: [PATCH] feat: migrating to electron-vite --- .editorconfig | 9 + .env.example | 5 + .eslintignore | 4 + .eslintrc.cjs | 9 + .gitignore | 6 + .npmrc | 3 + .prettierignore | 6 + .prettierrc.yaml | 4 + .vscode/extensions.json | 3 + .vscode/launch.json | 39 + .vscode/settings.json | 14 + README.md | 92 + build/entitlements.mac.plist | 12 + build/icon.icns | Bin 0 -> 85649 bytes build/icon.ico | Bin 0 -> 123545 bytes build/icon.png | Bin 0 -> 35949 bytes docs/screenshot.png | Bin 0 -> 398943 bytes electron-builder.yml | 45 + electron.vite.config.ts | 43 + package.json | 81 + requirements.txt | 5 + resources/icon.png | Bin 0 -> 35949 bytes src/locales/en/translation.json | 141 + src/locales/es/translation.json | 141 + src/locales/fr/translation.json | 141 + src/locales/index.ts | 4 + src/locales/pt/translation.json | 141 + src/main/constants.ts | 55 + src/main/data-source.ts | 35 + src/main/entity/game-shop-cache.entity.ts | 32 + src/main/entity/game.entity.ts | 69 + src/main/entity/image-cache.entity.ts | 25 + src/main/entity/index.ts | 8 + src/main/entity/migration-script.entity.ts | 22 + src/main/entity/repack.entity.ts | 37 + .../entity/repacker-friendly-name.entity.ts | 25 + src/main/entity/steam-game.entity.ts | 10 + src/main/entity/user-preferences.entity.ts | 34 + src/main/events/catalogue/get-catalogue.ts | 117 + .../events/catalogue/get-game-shop-details.ts | 72 + src/main/events/catalogue/get-games.ts | 44 + .../events/catalogue/get-how-long-to-beat.ts | 48 + src/main/events/catalogue/get-random-game.ts | 29 + src/main/events/catalogue/search-games.ts | 11 + .../events/hardware/get-disk-free-space.ts | 11 + .../events/helpers/generate-lutris-yaml.ts | 44 + src/main/events/helpers/get-downloads-path.ts | 15 + src/main/events/helpers/search-games.ts | 71 + src/main/events/index.ts | 32 + .../events/library/add-game-to-library.ts | 29 + src/main/events/library/close-game.ts | 35 + src/main/events/library/delete-game-folder.ts | 47 + .../events/library/get-game-by-object-id.ts | 20 + src/main/events/library/get-library.ts | 30 + .../library/get-repackers-friendly-names.ts | 12 + .../events/library/open-game-installer.ts | 58 + src/main/events/library/open-game.ts | 18 + src/main/events/library/remove-game.ts | 11 + src/main/events/misc/get-or-cache-image.ts | 37 + src/main/events/misc/open-external.ts | 9 + src/main/events/misc/show-open-dialog.ts | 12 + src/main/events/register-event.ts | 39 + .../events/torrenting/cancel-game-download.ts | 53 + .../events/torrenting/pause-game-download.ts | 34 + .../events/torrenting/resume-game-download.ts | 56 + .../events/torrenting/start-game-download.ts | 110 + .../user-preferences/get-user-preferences.ts | 11 + .../update-user-preferences.ts | 21 + src/main/helpers/formatters.test.ts | 98 + src/main/helpers/formatters.ts | 56 + src/main/helpers/index.ts | 85 + src/main/helpers/ps.ts | 12 + src/main/index.ts | 102 + src/main/main.ts | 129 + src/main/repository.ts | 30 + src/main/services/fifo.ts | 38 + src/main/services/how-long-to-beat.ts | 60 + src/main/services/index.ts | 11 + src/main/services/logger.ts | 11 + src/main/services/process-watcher.ts | 80 + src/main/services/repack-tracker/1337x.ts | 135 + .../services/repack-tracker/cpg-repacks.ts | 65 + src/main/services/repack-tracker/gog.ts | 78 + src/main/services/repack-tracker/helpers.ts | 18 + src/main/services/repack-tracker/index.ts | 5 + .../services/repack-tracker/online-fix.ts | 207 + src/main/services/repack-tracker/xatab.ts | 95 + src/main/services/steam-250.ts | 34 + src/main/services/steam-grid.ts | 71 + src/main/services/steam.ts | 35 + src/main/services/torrent-client.ts | 170 + src/main/services/update-resolver.ts | 159 + src/main/services/window-manager.ts | 109 + src/main/state-manager.ts | 33 + src/main/vite-env.d.ts | 12 + src/preload/index.d.ts | 104 + src/preload/index.ts | 104 + src/renderer/index.html | 17 + src/renderer/src/app.css.ts | 107 + src/renderer/src/app.tsx | 122 + src/renderer/src/assets/discord-icon.svg | 1 + src/renderer/src/assets/epic-games-logo.svg | 1 + .../src/assets/lottie/downloading.json | 843 +++ src/renderer/src/assets/lottie/settings.json | 1054 +++ src/renderer/src/assets/lottie/stars.json | 928 +++ src/renderer/src/assets/steam-logo.svg | 1 + src/renderer/src/assets/x-icon.svg | 1 + .../components/async-image/async-image.tsx | 27 + .../bottom-panel/bottom-panel.css.ts | 23 + .../components/bottom-panel/bottom-panel.tsx | 68 + .../src/components/button/button.css.ts | 52 + src/renderer/src/components/button/button.tsx | 27 + .../checkbox-field/checkbox-field.css.ts | 40 + .../checkbox-field/checkbox-field.tsx | 32 + .../src/components/game-card/game-card.css.ts | 127 + .../src/components/game-card/game-card.tsx | 87 + .../src/components/header/header.css.ts | 148 + src/renderer/src/components/header/header.tsx | 126 + src/renderer/src/components/hero/hero.css.ts | 64 + src/renderer/src/components/hero/hero.tsx | 59 + src/renderer/src/components/index.ts | 10 + .../src/components/modal/modal.css.ts | 108 + src/renderer/src/components/modal/modal.tsx | 69 + .../src/components/sidebar/download-icon.tsx | 22 + .../src/components/sidebar/routes.tsx | 27 + .../src/components/sidebar/sidebar.css.ts | 170 + .../src/components/sidebar/sidebar.tsx | 255 + .../components/text-field/text-field.css.ts | 59 + .../src/components/text-field/text-field.tsx | 42 + src/renderer/src/constants.ts | 1 + src/renderer/src/declaration.d.ts | 95 + src/renderer/src/features/download-slice.ts | 49 + src/renderer/src/features/index.ts | 6 + src/renderer/src/features/library-slice.ts | 24 + .../repackers-friendly-names-slice.ts | 26 + src/renderer/src/features/search-slice.ts | 25 + .../src/features/use-preferences-slice.ts | 23 + src/renderer/src/features/window-slice.ts | 27 + src/renderer/src/helpers.ts | 25 + src/renderer/src/hooks/index.ts | 3 + src/renderer/src/hooks/redux.ts | 7 + src/renderer/src/hooks/use-date.ts | 33 + src/renderer/src/hooks/use-download.ts | 132 + src/renderer/src/hooks/use-library.ts | 16 + src/renderer/src/main.tsx | 102 + .../src/pages/catalogue/catalogue.tsx | 115 + .../src/pages/downloads/delete-modal.css.ts | 10 + .../src/pages/downloads/delete-modal.tsx | 43 + .../src/pages/downloads/downloads.css.ts | 90 + .../src/pages/downloads/downloads.tsx | 272 + .../pages/game-details/description-header.tsx | 84 + .../game-details/game-details-skeleton.tsx | 89 + .../pages/game-details/game-details.css.ts | 259 + .../src/pages/game-details/game-details.tsx | 289 + .../pages/game-details/hero-panel-actions.tsx | 212 + .../src/pages/game-details/hero-panel.css.ts | 32 + .../src/pages/game-details/hero-panel.tsx | 196 + .../game-details/how-long-to-beat-section.tsx | 69 + .../pages/game-details/repacks-modal.css.ts | 18 + .../src/pages/game-details/repacks-modal.tsx | 101 + .../src/pages/home/catalogue-home.css.ts | 26 + src/renderer/src/pages/home/home.css.ts | 65 + src/renderer/src/pages/home/home.tsx | 143 + .../src/pages/home/search-results.tsx | 86 + src/renderer/src/pages/index.ts | 6 + .../patch-notes/patch-notes-skeleton.tsx | 0 .../src/pages/settings/settings.css.ts | 26 + src/renderer/src/pages/settings/settings.tsx | 113 + .../shared-modals/binary-not-found-modal.tsx | 25 + src/renderer/src/store.ts | 23 + src/renderer/src/theme.css.ts | 19 + src/renderer/src/utils/format-bytes.ts | 15 + src/renderer/src/utils/index.ts | 1 + src/renderer/src/vite-env.d.ts | 10 + src/types/index.ts | 114 + .../__pycache__/fifo.cpython-39.pyc | Bin 0 -> 1276 bytes torrent-client/fifo.py | 32 + torrent-client/main.py | 103 + torrent-client/setup.py | 20 + tsconfig.json | 4 + tsconfig.node.json | 19 + tsconfig.web.json | 22 + yarn.lock | 5891 +++++++++++++++++ 183 files changed, 18535 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .eslintignore create mode 100644 .eslintrc.cjs create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .prettierignore create mode 100644 .prettierrc.yaml create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 README.md create mode 100644 build/entitlements.mac.plist create mode 100644 build/icon.icns create mode 100644 build/icon.ico create mode 100644 build/icon.png create mode 100644 docs/screenshot.png create mode 100644 electron-builder.yml create mode 100644 electron.vite.config.ts create mode 100644 package.json create mode 100644 requirements.txt create mode 100644 resources/icon.png create mode 100644 src/locales/en/translation.json create mode 100644 src/locales/es/translation.json create mode 100644 src/locales/fr/translation.json create mode 100644 src/locales/index.ts create mode 100644 src/locales/pt/translation.json create mode 100644 src/main/constants.ts create mode 100644 src/main/data-source.ts create mode 100644 src/main/entity/game-shop-cache.entity.ts create mode 100644 src/main/entity/game.entity.ts create mode 100644 src/main/entity/image-cache.entity.ts create mode 100644 src/main/entity/index.ts create mode 100644 src/main/entity/migration-script.entity.ts create mode 100644 src/main/entity/repack.entity.ts create mode 100644 src/main/entity/repacker-friendly-name.entity.ts create mode 100644 src/main/entity/steam-game.entity.ts create mode 100644 src/main/entity/user-preferences.entity.ts create mode 100644 src/main/events/catalogue/get-catalogue.ts create mode 100644 src/main/events/catalogue/get-game-shop-details.ts create mode 100644 src/main/events/catalogue/get-games.ts create mode 100644 src/main/events/catalogue/get-how-long-to-beat.ts create mode 100644 src/main/events/catalogue/get-random-game.ts create mode 100644 src/main/events/catalogue/search-games.ts create mode 100644 src/main/events/hardware/get-disk-free-space.ts create mode 100644 src/main/events/helpers/generate-lutris-yaml.ts create mode 100644 src/main/events/helpers/get-downloads-path.ts create mode 100644 src/main/events/helpers/search-games.ts create mode 100644 src/main/events/index.ts create mode 100644 src/main/events/library/add-game-to-library.ts create mode 100644 src/main/events/library/close-game.ts create mode 100644 src/main/events/library/delete-game-folder.ts create mode 100644 src/main/events/library/get-game-by-object-id.ts create mode 100644 src/main/events/library/get-library.ts create mode 100644 src/main/events/library/get-repackers-friendly-names.ts create mode 100644 src/main/events/library/open-game-installer.ts create mode 100644 src/main/events/library/open-game.ts create mode 100644 src/main/events/library/remove-game.ts create mode 100644 src/main/events/misc/get-or-cache-image.ts create mode 100644 src/main/events/misc/open-external.ts create mode 100644 src/main/events/misc/show-open-dialog.ts create mode 100644 src/main/events/register-event.ts create mode 100644 src/main/events/torrenting/cancel-game-download.ts create mode 100644 src/main/events/torrenting/pause-game-download.ts create mode 100644 src/main/events/torrenting/resume-game-download.ts create mode 100644 src/main/events/torrenting/start-game-download.ts create mode 100644 src/main/events/user-preferences/get-user-preferences.ts create mode 100644 src/main/events/user-preferences/update-user-preferences.ts create mode 100644 src/main/helpers/formatters.test.ts create mode 100644 src/main/helpers/formatters.ts create mode 100644 src/main/helpers/index.ts create mode 100644 src/main/helpers/ps.ts create mode 100644 src/main/index.ts create mode 100644 src/main/main.ts create mode 100644 src/main/repository.ts create mode 100644 src/main/services/fifo.ts create mode 100644 src/main/services/how-long-to-beat.ts create mode 100644 src/main/services/index.ts create mode 100644 src/main/services/logger.ts create mode 100644 src/main/services/process-watcher.ts create mode 100644 src/main/services/repack-tracker/1337x.ts create mode 100644 src/main/services/repack-tracker/cpg-repacks.ts create mode 100644 src/main/services/repack-tracker/gog.ts create mode 100644 src/main/services/repack-tracker/helpers.ts create mode 100644 src/main/services/repack-tracker/index.ts create mode 100644 src/main/services/repack-tracker/online-fix.ts create mode 100644 src/main/services/repack-tracker/xatab.ts create mode 100644 src/main/services/steam-250.ts create mode 100644 src/main/services/steam-grid.ts create mode 100644 src/main/services/steam.ts create mode 100644 src/main/services/torrent-client.ts create mode 100644 src/main/services/update-resolver.ts create mode 100644 src/main/services/window-manager.ts create mode 100644 src/main/state-manager.ts create mode 100644 src/main/vite-env.d.ts create mode 100644 src/preload/index.d.ts create mode 100644 src/preload/index.ts create mode 100644 src/renderer/index.html create mode 100644 src/renderer/src/app.css.ts create mode 100644 src/renderer/src/app.tsx create mode 100644 src/renderer/src/assets/discord-icon.svg create mode 100644 src/renderer/src/assets/epic-games-logo.svg create mode 100644 src/renderer/src/assets/lottie/downloading.json create mode 100644 src/renderer/src/assets/lottie/settings.json create mode 100644 src/renderer/src/assets/lottie/stars.json create mode 100644 src/renderer/src/assets/steam-logo.svg create mode 100644 src/renderer/src/assets/x-icon.svg create mode 100644 src/renderer/src/components/async-image/async-image.tsx create mode 100644 src/renderer/src/components/bottom-panel/bottom-panel.css.ts create mode 100644 src/renderer/src/components/bottom-panel/bottom-panel.tsx create mode 100644 src/renderer/src/components/button/button.css.ts create mode 100644 src/renderer/src/components/button/button.tsx create mode 100644 src/renderer/src/components/checkbox-field/checkbox-field.css.ts create mode 100644 src/renderer/src/components/checkbox-field/checkbox-field.tsx create mode 100644 src/renderer/src/components/game-card/game-card.css.ts create mode 100644 src/renderer/src/components/game-card/game-card.tsx create mode 100644 src/renderer/src/components/header/header.css.ts create mode 100644 src/renderer/src/components/header/header.tsx create mode 100644 src/renderer/src/components/hero/hero.css.ts create mode 100644 src/renderer/src/components/hero/hero.tsx create mode 100644 src/renderer/src/components/index.ts create mode 100644 src/renderer/src/components/modal/modal.css.ts create mode 100644 src/renderer/src/components/modal/modal.tsx create mode 100644 src/renderer/src/components/sidebar/download-icon.tsx create mode 100644 src/renderer/src/components/sidebar/routes.tsx create mode 100644 src/renderer/src/components/sidebar/sidebar.css.ts create mode 100644 src/renderer/src/components/sidebar/sidebar.tsx create mode 100644 src/renderer/src/components/text-field/text-field.css.ts create mode 100644 src/renderer/src/components/text-field/text-field.tsx create mode 100644 src/renderer/src/constants.ts create mode 100644 src/renderer/src/declaration.d.ts create mode 100644 src/renderer/src/features/download-slice.ts create mode 100644 src/renderer/src/features/index.ts create mode 100644 src/renderer/src/features/library-slice.ts create mode 100644 src/renderer/src/features/repackers-friendly-names-slice.ts create mode 100644 src/renderer/src/features/search-slice.ts create mode 100644 src/renderer/src/features/use-preferences-slice.ts create mode 100644 src/renderer/src/features/window-slice.ts create mode 100644 src/renderer/src/helpers.ts create mode 100644 src/renderer/src/hooks/index.ts create mode 100644 src/renderer/src/hooks/redux.ts create mode 100644 src/renderer/src/hooks/use-date.ts create mode 100644 src/renderer/src/hooks/use-download.ts create mode 100644 src/renderer/src/hooks/use-library.ts create mode 100644 src/renderer/src/main.tsx create mode 100644 src/renderer/src/pages/catalogue/catalogue.tsx create mode 100644 src/renderer/src/pages/downloads/delete-modal.css.ts create mode 100644 src/renderer/src/pages/downloads/delete-modal.tsx create mode 100644 src/renderer/src/pages/downloads/downloads.css.ts create mode 100644 src/renderer/src/pages/downloads/downloads.tsx create mode 100644 src/renderer/src/pages/game-details/description-header.tsx create mode 100644 src/renderer/src/pages/game-details/game-details-skeleton.tsx create mode 100644 src/renderer/src/pages/game-details/game-details.css.ts create mode 100644 src/renderer/src/pages/game-details/game-details.tsx create mode 100644 src/renderer/src/pages/game-details/hero-panel-actions.tsx create mode 100644 src/renderer/src/pages/game-details/hero-panel.css.ts create mode 100644 src/renderer/src/pages/game-details/hero-panel.tsx create mode 100644 src/renderer/src/pages/game-details/how-long-to-beat-section.tsx create mode 100644 src/renderer/src/pages/game-details/repacks-modal.css.ts create mode 100644 src/renderer/src/pages/game-details/repacks-modal.tsx create mode 100644 src/renderer/src/pages/home/catalogue-home.css.ts create mode 100644 src/renderer/src/pages/home/home.css.ts create mode 100644 src/renderer/src/pages/home/home.tsx create mode 100644 src/renderer/src/pages/home/search-results.tsx create mode 100644 src/renderer/src/pages/index.ts create mode 100644 src/renderer/src/pages/patch-notes/patch-notes-skeleton.tsx create mode 100644 src/renderer/src/pages/settings/settings.css.ts create mode 100644 src/renderer/src/pages/settings/settings.tsx create mode 100644 src/renderer/src/pages/shared-modals/binary-not-found-modal.tsx create mode 100644 src/renderer/src/store.ts create mode 100644 src/renderer/src/theme.css.ts create mode 100644 src/renderer/src/utils/format-bytes.ts create mode 100644 src/renderer/src/utils/index.ts create mode 100644 src/renderer/src/vite-env.d.ts create mode 100644 src/types/index.ts create mode 100644 torrent-client/__pycache__/fifo.cpython-39.pyc create mode 100644 torrent-client/fifo.py create mode 100644 torrent-client/main.py create mode 100644 torrent-client/setup.py create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 tsconfig.web.json create mode 100644 yarn.lock diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..cf640d53 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true \ No newline at end of file diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..7946dbc1 --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +MAIN_VITE_STEAMGRIDDB_API_KEY=YOUR_API_KEY +MAIN_VITE_ONLINEFIX_USERNAME=YOUR_USERNAME +MAIN_VITE_ONLINEFIX_PASSWORD=YOUR_PASSWORD +MAIN_VITE_SENTRY_DSN=YOUR_SENTRY_DSN +RENDERER_VITE_SENTRY_DSN=YOUR_SENTRY_DSN diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..a6f34fea --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +node_modules +dist +out +.gitignore diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 00000000..ed84d7c7 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,9 @@ +module.exports = { + extends: [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:react/jsx-runtime", + "@electron-toolkit/eslint-config-ts/recommended", + "@electron-toolkit/eslint-config-prettier", + ], +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..8a00eaf7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +node_modules +dist +out +.DS_Store +*.log* +.env diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..2ced9527 --- /dev/null +++ b/.npmrc @@ -0,0 +1,3 @@ +electron_mirror=https://npmmirror.com/mirrors/electron/ +electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/ +shamefully-hoist=true diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..9c6b791d --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +out +dist +pnpm-lock.yaml +LICENSE.md +tsconfig.json +tsconfig.*.json diff --git a/.prettierrc.yaml b/.prettierrc.yaml new file mode 100644 index 00000000..f9711fb4 --- /dev/null +++ b/.prettierrc.yaml @@ -0,0 +1,4 @@ +singleQuote: false +semi: true +tabWidth: 2 +trailingComma: es5 diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..940260d8 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["dbaeumer.vscode-eslint"] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..0b6b9a64 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,39 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug Main Process", + "type": "node", + "request": "launch", + "cwd": "${workspaceRoot}", + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron-vite", + "windows": { + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron-vite.cmd" + }, + "runtimeArgs": ["--sourcemap"], + "env": { + "REMOTE_DEBUGGING_PORT": "9222" + } + }, + { + "name": "Debug Renderer Process", + "port": 9222, + "request": "attach", + "type": "chrome", + "webRoot": "${workspaceFolder}/src/renderer", + "timeout": 60000, + "presentation": { + "hidden": true + } + } + ], + "compounds": [ + { + "name": "Debug All", + "configurations": ["Debug Main Process", "Debug Renderer Process"], + "presentation": { + "order": 1 + } + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..0ff36a58 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,14 @@ +{ + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "i18n-ally.localesPaths": ["src/locales"], + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true +} diff --git a/README.md b/README.md new file mode 100644 index 00000000..cdde5460 --- /dev/null +++ b/README.md @@ -0,0 +1,92 @@ +# Hydra + +![Discord](https://img.shields.io/discord/1220692017311645737?style=flat&logo=discord&label=Hydra&labelColor=%231c1c1c) +![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/hydralauncher/hydra/build.yml) +![GitHub package.json version](https://img.shields.io/github/package-json/v/hydralauncher/hydra) + +Hydra is a game launcher with its own embedded bittorrent client and a self-managed repack scraper. +The launcher is written in TypeScript (Electron) and Python, which handles the torrenting system by using [libtorrent](https://www.libtorrent.org/). + +![Hydra Catalogue](./docs/screenshot.png) + +## Installation + +### Install Node.js + +Ensure you have Node.js installed on your machine. If not, download and install it from [nodejs.org](https://nodejs.org/). + +### Install Yarn + +Yarn is a package manager for Node.js. If you haven't installed Yarn yet, you can do so by following the instructions on [yarnpkg.com](https://classic.yarnpkg.com/lang/en/docs/install/). + +### Clone the Repository + +```bash +git clone https://github.com/hydralauncher/hydra.git +``` + +### Install Node Dependencies + +Navigate to the project directory and install the Node dependencies using Yarn: + +```bash +cd hydra +yarn +``` + +### Install Python 3.9 + +Ensure you have Python installed on your machine. You can download and install it from [python.org](https://www.python.org/downloads/release/python-3919/). + +### Install Python Dependencies + +Install the required Python dependencies using pip: + +```bash +pip install -r requirements.txt +``` + +## Environment variables + +You'll need an SteamGridDB API Key in order to fetch the game icons on installation. +If you want to have onlinefix as a repacker you'll need to add your credentials to the .env + +Once you have it, you can paste the `.env.example` file and put it on `STEAMGRIDDB_API_KEY`, `ONLINEFIX_USERNAME`, `ONLINEFIX_PASSWORD`. + +## Running + +Once you've got all things set up, you can run the following command to start both the Electron process and the bittorrent client: + +```bash +yarn start +``` + +## Build + +### Build the bittorrent client + +Build the bittorrent client by using this command: + +```bash +python torrent-client/setup.py build +``` + +### Build the Electron application + +Build the Electron application by using this command: + +```bash +yarn make +``` + +## Contributors + + + + + +Made with [contrib.rocks](https://contrib.rocks). + +## License + +Hydra is licensed under the [MIT License](LICENSE). diff --git a/build/entitlements.mac.plist b/build/entitlements.mac.plist new file mode 100644 index 00000000..38c887b2 --- /dev/null +++ b/build/entitlements.mac.plist @@ -0,0 +1,12 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.allow-dyld-environment-variables + + + diff --git a/build/icon.icns b/build/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..28644aa9d97942c50008d03bc0f93505f7824737 GIT binary patch literal 85649 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

-KY5Dg)0#~?~rEbJH_9`n*G*i+1Ec#;TIAa-b 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 literal 0 HcmV?d00001 diff --git a/build/icon.ico b/build/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..72c391ebcc280e8c34ec175fabb4337e34804b3d GIT binary patch literal 123545 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 bqOm^PqC+~3h1FmPI^vm>($fM-eXsuqO4ic& literal 0 HcmV?d00001 diff --git a/build/icon.png b/build/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cf9e8b2c87b5c18ac0b26913af6fd3ed00ec3bfb GIT binary patch literal 35949 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

(|V7O%OOlsc*vU+P^72X!U7K_eX*CG zHAE(K#Sq+(x5UBCM{mxG=Q5i`%PnL$0|F1t9H|A9u%cPmh#RYtohi01Qzc$IBkrf8 zL1~WOU3Y!u`0~jmD@JpBe|t)Gu;QiqJ5El#_Sgutt7>lgZ;e+XHlvCeeUWt0rEf|* zwYX`Uct!8)(ZGWqkG!rGB5&x9TFjzWDR;jw5Rz~%n+!9a@6S}d$Qy6H2Sco? z9!itW;?wJUdhAjPR9mO#)I=KAoa5$Pp;Kdy@sp9ry!EeVw!I_q21Xpuow>0sh;Pho zZtji$_)FHChROQFq`jwA3AsCxw!v>cyZ1*#B{?VLdWsZ}#Jhhr;a)W^9J2*(4xqq$3-YNf{O>E$oNYZpROM-dp4EXU8(=q>2w; z1?~Szrt|GdM_zh<+Y{NTC)zS3uJC4mp~TO3{vc5Xf_atU{E+0;J2E*z6m zd}K*~SpR$8^3K|3I9sXfJ)|XyWantj+@QU&7lWA%8#xAqvU%psFXjb<-=`d2NzgsX z1u{qyCO%7npB{1gR}~uPRPhrZ$m-q4We5y#zbbYRZ z%Fc!TT8Pna8KKSPB3hmQ-CRaQ@ zrl`YXrU(fS!yz_@W;}zJgjge z*gVNudgr_^K%(+l&6;n`A8 zV>0cd%;}blD(T|OotQQ8(-njvUopcuN7n}OM!0EHm{R4X!}nMsPDk>s?9Cq}PLn5x z^LrLYAQh#BdiVGXEu9k|xmLw>ABIRVi)skzO@6;2h_dfT zIApwVN^zs7e!8nP|5Px1F}Fe>TzAW=dE&QADB{!JYmM4I7QeH}36w^=$1RPCi3cN% z9;hX2E4|{{X5Gp^Q_X~J`P=sDxK3Qj&A~~WnFbror!3wF#RE!v z+wzEsl8-ku576fx9G0{tr<9D^<;eO5W|hCTnKM$t_$4E)4kQj)<)*yZ!i>sUbi^&K zFI#fLiKuG^nF#c*T-!c*2~CRQPWi_-v}7(e7k?H*MF{WD&aSiUzB^FG>d zB-t59+cAPpH0Ufg_<#h80qL-paM|P;KFGYm8qq%=Kri>Y5}-9m4`$_gC7zI|m{9<9 zW`RbGG19ufIBbJyn_`N6M6Tgc7+jX25Sg>Kq?vMFhbSJ6cY;p_zBXM=cSSVIsK?g6 z^L4ZSCB-L>8*6TUv`WcjdcQ<=>+93G%8s!o=?KW$HQwu@lVfT;l00huR}Z((I=-E# z>DWyr>Elq*5mB$Utq4spk20!)U}tANKVUPWg#D*8maE*W*-fCtlrnL$Zmitt@<-{K zal-UijRe|2N40M9b|n}cNJa+U4q0OC&pftcwKI6E(mu*A{S_KUv7Q$7VSOFbY)rxJ zd7z<1=gt%fI=(%=#6B*J`2N$;Xf*ke0&AP5`iCW6%>v*i!VHFuuWSq&R)lnZd>D34 z8kgo2acGt4^Qh6ia%K9qRI_yD{7I!X#RLs;;taO>PyGYT@WszhnT&2$Z3(LzO~D?;ThPU|7B3g zhgQz6l@XT0Qk}dUf3n{C-wFCU*^0&m`67|X^7h{S^Pto4Bo0AgIbL=K*~+v&A(>eZ zZj>9;v;4@RTAXwR<@Ur;f0CkgW6 zUV47&kFlO;qaJ9ecRWbJV1e5Nh%z+>f^b7@5G2YO}^$lN6Tn333mmA#PIJYgfa@iJI3t zP)qrSb&m@j&njl|R3hAU*7YDKv74Y}=;CA`!TajUln-Yc1&+i^;3VHJa3fFQYuk*A!f?9q0YbNQ_|<7{uciK$_zS}218eA0Md?6o8U^Or}9D#D;HMYfwrVAflA2odL z;Z@^!@SreRV4|2OzC&bJ=m|E>;h1P>U)q>)X1ZY5;o^@IFrGE?Lug%gYjCEFc(c#T z;zaInC-!@FlCtCLhRydW1=WVGQGD|$L*EQurkcs1`X=gkhlSc45M-fu{ZJxjahN8l ztbylh_UNBPqsyuZamqX0MPbMvOPTh?CQQcTBcm?9nyy{&Vq!8+b_PAGGv^xOEILmL zpIxC1Uw;hsdH>ck2t?4c>6Ittvv7j&)68F6s+>cVM+MQt$;b^&LNZypmcPOdhLc;58 z3ddW+@3&kQyPVBCLAsy$HCd-!Q*KDR?=U2B-=Qn#ODN zP7vKaSHB`>NcN0PdQ2r&5dZ*TArm^R+*>m;2Jt;Pd&S`iWmG3M{A1M@}=v(b}4$UX2lmiWh&2bNcSC;(4Xv?lY23{N!!waV>2$PWFxB zFXPU)rxtKuOL-{W_-&QJ8w*ztgZsChq$nxOMgMJINOekpzJ;W=8G9=8hH{ zrwzpfcX5?Z24`$7h5B+{TeA#WGl{E|eNMgPoB>6Kd>kWLiNUmxX$rg8_#afGL~}!) zE}Qoz>nz^Yh64$z@{5h(%=wi^jxzN&Tcm+T=Mg*S4XXRb#r0VXZ3HY+D}Cv>#!AFb zDn2WH%G1hCV??{J5#n)HKe+4jyY1sD55P z@(Gg6lb06RJudo`u}m+*!{*qyj|~NltvVHj$%iva$OT_qb&+Wz&mZYBcdv}~iKc%g z?(*HN>dS;>EaKF4;(P5f$s;so26 zlF|I7bNa)HGL18khdU+;Xl5x>VqtLeZkI6ID>pQo%}WMrOl`lvUQ-*$tE^(v&B77Z zuecxevOi4T$M*s?ltWPTlOElVa32UhoWX|YH2X#5Q-4cm&1_S zUv#8>-&4>mlur1S^ZM+-)Az-!!bc2VoxnRRa3mj_X_s>PwM>F{PrUDtk;Az{T{K7+ z2|({mmh0Dc`Ld!tWv0Dg2a9r9_Sk4^)Lzx@OxLiX;SHS8v!o$WVY@Z^Cts>`-)y^T z)@nc6j*vn&5??>Jv`D_e-`x}=V1httdgVLItZ$&2>FLf{vu}>0ay*MybB#ii#Ggky zUd2_C?QPV&6+eC~ACD*!_bn%bCXtyuX*#*9TeFAxaX1!cBtK7rK~4R;Z^@vlfZ|-# zOoIaNk=h-V&6lE?8rR!}Llj9L+Pt$~ff>ZCi)>HDP|&4!$qfQT0V=vZ#?84Qg^A zd+_9bgYw}IgXZ8@JR%On+h^-C+sw4`SWsom?ui}AK+%~w_CaHnsS;9`a{Z@vSFz6V z=qr7@>-aeKp`oFShIR6vbc!=QjOwK8Z)iS=7SCMOUkJvgXX$;j%x+4d`ApEbc5}UZ zxzrvxvDdKnt{t~Op|?Yx`z#Kse_-s=;L_rc~%$U`vjbeCJ&2V zpJ7dwp(Rr-P+#+ge^^Z<@gsvZVfPPYtYQ%5>V~^1COn*;kFI%Z^?Pi{ciYs8-TN6T z_FYT5hxec9U2tX|(ULSyUmqjg<4rzXOeCWKy=>sa1XbKKp##Q+u3* zDy#gn$c)y+=&>2W>qcgiaHJUyw4rd9^k!?CR;b5bv1@M;7lsd+O$p%Xu2G}MY~oQ)SBHmejTae?xStX2X!WZMo!E#&PG`T;no+`C$dEB8l2~&x zeJ26wr|jOaOnEic+`(VTsPa)+De9TbH}ni1RT5~@y)r~+nSD$~rC=@$&&1Mi9me4~zz&M#k0VXkc7(FFFPvr)3t5K@b1ZkYb5Ne;7S&jD&8LVZJMz zokCcAwIVtFSJlTf(CixtX*y}T2j`=-Db5}84TV!pGoxOIh1!?;4$GB(mDqre&Y+zr{c3rot)jBQI&-jyEsrWPZxbj9+4#WbeFnDoZj}CfMQRfbOY7urLDf=eu0g;bJMrvD-zDWeG4? zZW`J6V|N}fVZWbMu8%z!6b)6#lRRyfP6DWh5ZCaYDJ=B+C9CiC=G;%=`5t6F3qC3w z0fAqB2Jbh1Wuwqu0B^ zRTB^PBeXi~b=NF?LulH_M?e#d1J>_1?-cy^Ru=z> z|7Tx}C60Y&->O#ImsT-8C>YI0L|@2F&U{Fjx{Tm_)K(tCpYe`zPxP6}2J^ z6brpAK~~!tpMD-c{v!fa?wSJGrY3jwfyBoNP#$`8wT7~b9*BWx`UnOtgh8&P7lAOj zrg3w-gm)TN2fRjN8^4bQo{t4Q`tDt;i&=EdRMT|FkEh%D*5&W6pY5Urj*9(%UyeZ> zF$t=FgK}V@w{v*igEEgYss8Rz9(HVM!a))CS^^!JhXf@ANs-9L+qH@bmlU05?0>%n zXVuOOETJ|+n_q?yZQf9LZA96NTDCa(ROnAMe#MvcYks33_W8NDi>=_Lc`Ewr7gGHH%84QnIwcD(yuw5jW`tE&x&*$>be>;lPy6kF(tt(YtDJBj zU7XVA3OsfSMJz`buI-P_hB-KxPx0tqt^kzR1P69~yS5|Bga=D9`ctc)?(=dD7NGS>Qka z)*Srg&l&)1`pE6KR_*JpubRT7L4+>0<7`CdyKOCO_yeguYJZvq?d3+ipJ1HQgYkM% zX#MFRf_Xd)3q|iFT0##?Ww12JSJ1J!6c^2vmm4b{_+WaI`3>DGCJ!ClQ0DfAe0ggT zEby}BPN~G36Eb3UW3f(A^=|ovyPWI>RaEatMa0{WJ=3F}OGmst<6L*kfxxb1!6>O^ zh~IO5Ms#dE7SCHrkOuVn-RT62`?F0amU3^{H-8>?hLdb>JK zOn#0FTfeLNtf;fJ)ZjRa4I(Z<9{Gl)NWugYMgx9n2sjU#2Bfr#HwJz>X!c1>T@$Ds z{6&<7<{ohYqUi*aPg7>%>(|fzL&Om9+r}KxXCZDsPwIlGkjQ&iMix-Ku@sNH+l~Unyq)^Mrt?G?qZC8LNIp54y`|P6`mnOGAhNHi#YF(+WmLQJKg}m zNtY2{zOh-Zq-*mObB|^p7%G?>X3?#DC@i?lHglzSc4p;Jgvb(|fv62=!?9NS;$Fps2L|$Xby$oWp%p_l zsbAdt^sf1)sIfp)$M?p5)0+dkqksJz6NxMSla41}@}2MWPYk%NvdP{capY5XCqtrJ z)aGSlf^3ZPq~)Alk8)zJTqCsBiuB@SG`!~}nya>&5N~o`uLIGD^QWzxXuJ#Q% zX!kXxChjkWVDkQ<5JNbpQ=I)w;N2G<#YAy* E`T9pxN5i1O>p>VAy6%lIREYyb! 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 Kl11VsAO0U5dJ04U literal 0 HcmV?d00001 diff --git a/docs/screenshot.png b/docs/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..b98fab7565ee4ee122e6268c83879c6abb90f709 GIT binary patch literal 398943 zcmd?RcQl;e_6Mv)NraI|bVdsjK@hzR5u_3kLWnkM41!=7OhU9MLqu;$Bq7m>-XhBA zCB%%9(R&$vnEHJ@dlHZK~QGsUjDx({ya>IyyZ_H=TEIMUGEicU^BeSH+h zhlEooa6bjcumr~q%R_hS?=TVdud(T^=AGR7;YxM&!|sVOEuG9+d?)?@AB6a>{|*sC^Z@7Z!;i% zjjx@Z(v?D)Ku^>9tV!^Yc#8Yw?zwS={Ra{fQ9+?Y7dKe~6W*;!*y(J{y|h^J$=}OY z)!E=s>&<$BE3jCq&?Jh%lDG(i-u%-sm%b*oo=JDKu6N$P8uKtr%()|aD!sCgvp-wP z@Jw<$2lVP~Qqk*#ZHs}0Na>u#{ZFg?hkT68~U@?FQscGiwuxsYJZq9q z@;D+IGX2AX@g6(d)mH**V?UUnj@xFA_gH6hu2@OWAtfA!(pT2!hArsgSLy0M*L_x` zG4b?Wx)Q{k5fYYQzixH)fF>~9U|6{vEW>GeR@+32<_==XUX4KWeu;Jn-FYrX-q}9w zEAXli?Ue+k9&G^^dV1T?LnjvgS5n)jnuTayzr0n(|6H5y7OhCx`GuFPLcj~5o3>n% z^aLG6m9z1$INqPmqUHK=@j3kz?b8{#6$bhlMQ+ACTmDcXjhnAr668P8uHNWOxYYhK zOW3FjcqUZj1Gl8$d2M@1rU~YYH}oFxJUabbyX8jy2bLkl0**lD10CHV*a}PR4+nEW zv#vPU5CeQG@vsaEJrNIOt3CjmG=@Lh(rsxA9^U51B6~ zet-4o&NtDg;+n$232)#2dRvkDM5H72iLB`rU#qomk8($yEBMEwHVos%W4bN7BfFNn z0o_2!3vUEFlF#dPzlVGteIWBN$5`w3$fx_CEq+<8`u#@G zD;nJx;z#{Lo%!AK`x`3o+x=foE=X4{w;ET#y35MdU){rBe+PWJJL@plOMl<%)uVmmemok*nn-xdoV&o_7#yk%Dr#dyp zi7$`AEUGLvF;+30F}M`{6#icCUV_;LDcM3_vwkydQCxAr7@-J=9)fU=Ln>S=kDs|Y zOH~wC3RH}g$CMYAt=n}e(D7JuKi(`q^f+AK7(~PU%6z+?tITev=0$_w&YwfJhT~ZR zSO8Zy{C|1dtDCAFsEuTUv*3PPzQZr<8XnbY`2Y4>tQUL{+%J)yNHS4d{UV4rGN*LY-l`xK{kp@y7P5-PdxJBHppG z(rhg6^xY7L7TXs2mSwU&S%i|Jw=FWQr_QBmQPf~wR(qM|R2iKgqXz3J;2sOn{j|sJ znYX)_WJ9lpdWTMgxwcA$B2FP9YQrHc0sPO{udunZwmIzSm5;q1wtZV0X7tsz3@YW!Py8{t1q6 zzgI?&Hr+@xH-qSHTtjA8X6|LI_ed|X?PNjq8dJRtz4W}ob_{pa=OfQsoxgJ)v;F7T zk?0?-6;0qkzNLH1cIm!&qy#FT{h|FsLzab8w?prKUHe-2P(8f!XONv|hVDekce}*g z6$_vDML26Xl-^bMSA=EVQk`BMP&vXA(rwafnTw)? z;Q&>~zm7i=bMD7y9#W!?6DeS%Q(-?$2`)9mX(fAI_Uh#<^v`i`l0;1I9eBnRZ%q|A zbF(^l(rc1ovcbQ0L&ZwW@}22ui_h>tr+uK8&JOaal;2aSa+&d#% zIh!!?p7TBRJ%4)Er5;HsJ&xU6+-hnV^tJgDQbh_Uv=I9!$2y<=9l^=grnePK)GF~E zugd5*TdswCRW0x?+nzz`hUzv&hOyavD=+-2`Z3VKQrb$YL_m!yw^IeELYyWXTe{|c`QD?{9a`L)j3FR#B~mb#V(Mw;^{pYU7q zhA5CWhj{uG7M(8+c(`4vTB*3!X>+fR-HiTBC5 z6>zggMJQ}d7S-axW^fkJ$kCJ;)Up`18>tH{235zMir3(~&m#boI{HLh-FEI=K9rrc zv5qgz`eF1gM3FeL+mD@0>VDUKTiCKaCxwoA?YR{{4HiJF9ewJh9}~^5Up&&9?nANU zT=DH(sJ^FBrZmlOO`6vZ^fPdlmzs_R@ATG9@@Sbqee^P*v9!1yWQH?z+jq5yT-(3G z;e(*5(c;?-*#=||W2X;DgBS0aRxwhnC=6f&rmKVc`EykMYUXHu+v)y&nk&>cGYxH| zE6pitigz*-9PR!2)(EON1I-odXGlOMECY>>bD8l+tJa( z$Hnsn=PU7N)S*zWkIY|~-@m5@_H>uAbMUlxl!3ZGKj}iF0ac?m-5p=p2|?W<9zJSN zO_9HzP@}d_F3XAt{q@KTH%$@q`wxV4J-r=;lw_{STochcBP1lG;qBn0_VA|u-@8-) z(iCxd@#49ftgOGkzl^_vjHkD=temQJ!pF0Uj^xpwb>bqJJCYALHC~ z^Z|RjK7Zlr=^=D7uARN7?+Z;4k&}u3=jU(l=?HcG=S&_xe_s}LfwCueWaVV8$^OsS z)UFyQSJfW4LLDI%H(lMS+e4j0OGQCm!cZcUMy% zM{iwEcj}xkwEiiYzt8)xH~-#IL-u6p|FRW-+vmToQa4)bjE3z02umX*kZsT9S&@YU;O|d_A%K*ww+h zW!1sJfl|!k=!mCj^7%7#Izr5+UJ0?E3e{$3{{QA5&p|hB4J((j$M$^qcmfwDy4~&~ znt~nGb1*7vzj4iw*}+Zhf#G?~VCx!v^)+M`~?@VgJB z01xkyG3)d)b7Hb)`*Tv5HU2^XS(U6AqQWVJkUE;3*AHG7EtPIUrXn-dkZb+JOORu` zmW9FN!JSsGSuYW6`3>yO;?9?W^1yfr(yZ|OPXOVoXYfMRXXWPOQB^a~cqQjv0O1lm z9v%;fXF+fTAT9CTO-yVBaXz);!U z1)wdP*4(%~fVxH3Z^Il~K}ef{7EJnZj%W^_OT=Ow`D}^m%>02EDtC%90e-m`Ar}l| z3uqMTB}w3b@#hLO^);0AyUTIhH)N*;VS@gL?vTy?SFEEG1$>u~819wD#F{wn*wsn& zL?%67L6x!co%klXq28Lhez)n)F$_OiyEv}i*n1=Hm9=2NWK?Tfb6jzgYT2tNe7<=L zXg>O;pv=j}|9=e{oSB#LdTWpwIs<(k#o!$!m<?xBd|kUho==qf!61Xnoq|uoAcw$l zcx~X z1Xln)3m)ck+e#&J#)m{3Em(zoSON+IGro8N8EZ=>OtZ_hEpw_Y;*-`rw?JWT-P@{f z35drd(J1s3oDq4Jd67J#ZaA?gfrX0;a!D)g?$?po1}=Hcx`YlMaES$uT7#<(4^XO~ zrw!S+Z}K+JNILWI+it!JFP8YA;g=B7Ww|TlKL4ZUaFfAERqie5s0JB_%&Isv->Y?X z6x7|vchwxKk{Ok)yv{Xn*39It1CcM0H(@0KQ{Uwg!h@>5=;}jNiZ{6m$%tfmN1)7D z(F3l1TqN?@(#kx5X|CQ5gsVmf$t8Ji`jEO0Bv83q*H?25V!cV(&_7)V$|rlywEP-% z5Bqh$ICf{OnIa##nRChuX2Z;c46dr<$+M}kHfxBVN*e~>4cqsfL;p8;LwJjX&la0l5{bC14R4bE$R%kRCs$F9(Du3RPtdQ z?o7!h`TO75ce`ROTfI+CYJ5wu>D*nJRFyjKJc*p zJd6|<+0@*5gAq~e_1)hZEi{7U?y_uII00pE@*=)1*=w#TPonz(1&hR;f8I@Uo(sN? zo5qa4B}G1t+i0nv^pPiF5jggN_(lqMqh~Lnw2{(7DBWBqaiQdKs#Eh2>&cb!9WoPO zyluVh7<=%*T2u2iFfQvzXX$Yye-8JgbY1PHBW<&*Q}fh{*g_B>LiYUbq25w>=&1S^ z+z%HUh?lF)f)Z1;8?*UoKHtsOp(W*1 z{O~5QEW}WNAM|(WFpHJtEn8t zWW;Am`8Ky1bIQds*B53tr&qai;|Jm650j{cj>=gUxd`s{`LyOsb2@^jj167V>Pas4#qP*I!_Y_Ger<9hiRR%)_6xRbh9 z>R&v=o47tWQ=hqxooSwJ5<5}jN=g@5iZIyfp+>+qQo0DGt;Y$t+yF|G^cb+#u%_MX zOcj<=ge{x?T#gz>Sd(5HoDI@sp9$8f$}{l1y2+#4Q?5{Ij@R!?+vK*i=K*AX z-7Oqx?zeeL*o*KNTr!!C?>FK&)g%rjzD7+k3Ar?^fWWu3H-JliDKZKONUYTy|XxbeLdLU}32gzw&U1B3Vx zR^33N4{?#$O9hhYDY!SKpDaq%3=j;qHB0h7oDQJ05~RCuj{+#kCp-T~T|z@vLpg#l zyY9LM;8>S!1mI5JES1`yS@C7+6Dt2*BC*+RneB}*o*#;7DP=j1GdR1jWM-{5$#%N4 zS|JZ}?^HuJ7tJr43-8Ozg$*L&6@?AP-fE$>Cq`gHN1-BohssKtI{}qUb}_lhSS3*P zQX7*ugl#WR8Pw?4X{)u8oCFZGT*77=Z6pk@TaFv*m%?{(*Upf`N~ODYlxwS@IZ(F0 zucnnGdZI*iN=_82{vYO!!$ru`W5-i}ybV2j5Ganf*_!EfX-=8q6wqbwmIiCsGIB-2c6Y9SoC&GqA zk<@71jvip=mZcQ3i?c?|();!NOk zjY2k5qbNriA_wkT214HZ!Qb4=G^|sksH_&NMk>|37nyhPIXg|qYBchtB3oLPJC2Jh z!8N`-GIfHBK{ar%s(f+v5|p>)R5akG5&vBEF%L{fKpF14TI&AgxI2*;h5{WeAN3w1 zFFF#}fz{TQKBQGUTDJ2V?xP2wzbh9hH8@flmy1bOAWRFg5f{%sga<293E#;~M`Ss)vkrQ|h0xM2%zl{KJm^`IgUaZLT zgI6_0)IE^h~}voe8@$ZmkG zt+EH1lf!$s&oTDvE?BnC4B08qR@e6`wzeCj64EYygo_tKWb#va#CeB_JrGqe=Chtu z7C`_&7x3zm4?^{}Ky{Qr#NW-Ok}^O*G*V`)X#zZ{I3*|;K>4jMuJoH=gpduy0k_*D zXM{0G?fIEffoiMX*zhbUe{ZK9M7NXBHM?$e@nDaG1-6l8;z&>((rM=%@HE`z%kK}L z=KSnOYkA!(>Ff`hSB!vL2|gS*X(E|4AhZv*%Pv9#UrbcX7ASQVIc4Y8{T_j}igNC( zx^@lo)l`sFh5bDi(rhf=Co2{IZEZf6 zs0p#W*ZQ?X@o(}o&GUciI+%Q@v4elRZuB>|LWM7^S_0`YfC&qjGN_<1gky4Y=kuEK zoha!f|Ax|@ljV025L@2kzZECk9AP<7xa&0hW#)ZNQUM-7NUkQg2N)F1?g4nJ+YW&9 zMky`z`(K+V=}e$?qwT&-jg@G3U8dDYesyN+Ch+_<%*S?zYQ{QS9XqyArfIs@(%|Jg zvMc-7_t83`18HG{wQbbktYQK82?Ql zihz}_H^ni3xGk^ALvlWiN(;&&`$_)Kx2RA~kX_cLq92ZL)As^~P(o6{*+32imhrvF zg7O;HX-Yu0c(12S&_N*t1S&0U&MSczPdgm%q?WlNdz9UbeiiFAzDy9RhrT>GbweCF z;CrM8zGup92`xC7?GWYCEEk3pKX0pH4ajU^BkasrTFx7$0AafyJ@?d|_uVz1_J+y8 zY_0hv6crpO3#IUXc+dqk`T))F!M`I0@+I!~>K0{Uk=%RnlRqo1LKnDO3rEFxA4)$d z)y?q`_~(*5q4Z3f1C|mD?=S!9OaBa4xZ*>(PqI@wNHs=|yuiX$*z(oL8iod&@F>k^ z6qAl5LCOWyKky2DA6Rp(hrQ@t#vQ?^@?s81H^|WY?!rRE4Xs!2BNM9jh8P93iUqV? z*PU{>Xs%gWLS;4R;``8tE8B`rjuL2>{Gdl6HZw|~khbH*;n>#tne4}o>bwK0iSWw&y?@HEjj=A^FNK2Y>#vR~1BM z@?gC_s{f*{&E*itF)d|uNLDx@IYBl_q~!>L(N^oGX3b)LJ>|_;-1h9A(ed_iWG=2^ ztkcRpB)BTChOB5B0(J#^W_9o8O&2*_d{HU>wbkOiPy!1kPPtKyCc@deM`|*0ch=nf zQe9Oza?FWs5%WDkH}=Efk6~mMr<5jpLQ*b<{&PjJd<}V@oyvREU$}>Ku1y?d0!fhF z`Bb9j*$EW4RVZbKNRQx$Yo7Hcvyv;tQMnko*5kx=Pe4ri6y*mMAE)3djNTN1DX^++ z1(gG};Xo%~e{k)D4wcU0rn9I4l_RA?(c5GLRM*+JMDF!cu?TsQK*+)r;4)aT@Ursv z%+u%R504%rcL0etK-lwF?MS&mZ-t0_*Sz?U%A};}sc5USLZ|68WtFsr@~dQT3HVia z3B4LN1leojt7RXuJRf{UbKOlMMHvQkbc9?b&c^AM4n8_Av~bSPT{kEJ226wrU{GKc zP)Ixa!to?`Hwa2P3Bj`9R<25oWZ}OU#UW-kICfopK{JNH+aByaN-B*@q)Gy`)p8;! zW!&`Eukn@?@8X5}GmBKa@`PdgNHsOcE^?lKa2L7IKW^$5!Dvl?NRkN4z%(wbj`R7H z`cQh&coWA4^R3*c2t~1lg1KdmIf z9OLtWW`6G7aKrN{fl3$XEnwgx9Wt#JpJ?>syJD&K$jAhD&$n8mE}=Pe7g#26!B*ue z`0Ox8WSu&|F=-K1({J;Kpz@w8DSg3Tup4x+4kW5h1ac4i#Oet8P=h)11tK5iZ>mWf zV?}|XxCex{-|JA>-*a|^6&wa#pvIKSRFPU4oS2{g6wb!Vs43#d@(GwAbxs0gFa9B+ zz^(Fl=LX6%gj9)oJD)Gf*tz-H7)X3}SQjs^T>7-DX!dIjl1aYwK%%oRj(h9U#FXjO z>ae??{lm;8DJm^J zi2d1Rr#_YvBgclcqcj`qKhHxJj_!8;WDEI5?EDqU-PLz`5Fa;a4n*1L1ve3E*Okq7 zaq&Fc^hq-y6|xVJb)fXGfWN=*pvM0ybnruDW9mzepe?v2zy2mjBc=T;F=3G!4I&7G zCwQ}nr}1*%&iG66{45E`$RG^mAUxx_+ebT4p^Uh?(5pMt@eK=t76c^3P=D{DbP!`yrv zmOtq6}>|`;9#IhUR0~9yBtW3{l8f9Z;lUdml=WvTCCvS zq{VwH=aw1YQI)x69KOGGk!qgLXRKAX$f@g5I1Bs+sFE5tR^~7#Ysk)=G!+O&1Fr?W zJhVqPL9J&k%lS%L-tTGTd167n=+cg}x$u?uN|YwwduP|~?j~<8JF_j}$S&mBrmzqz zmK}wb^&fy6pl1}lkOlT?ysAy0&j?3kjz*tjCHrY5iMsd3F&Cf^D-EA>+E7{(CygJv z28gqo+LukN^@7s_$`X-G%~ed0g@og5VDNy;=n3HZfO)3j{-!v7N0I8m~3 zz$St)>{1kl6pH0YTqHflz%5w1sEdB*K2LJCEXdp-0ZUO1%f2wuUSkcescIRtGaF2j znrx!zGX{XF$YFhr+nuJR!F)zA{47xrj_0U6@Ff+W&AhKK^CF4C3V6$QGW>%GFvf0n zMTqNk8vb;VreCqFx9ccxl&(UH(&1Xv@Y3tlGGD`iwz`_*a^(_luzjhaI@tS~_R^#H zdpVeZAr1g+A@5e*@za*-&KsboA?}k}$A7~tYv;xiwAA21zW<+r1OG!@%VBeySBJ_8 z6nj&;Nk~F0P5`!evg9_B$cYzKWfQ|)umbLqYa-8>Yg?&XS{F@(z%cN-$QRiP0VE4$ zm9wSOg!`tx?dT)44~a+oU?COxB`$6%Xl{DKR?1GQm5&4DJ#@E|-Z4r9GD&!` zRo1>0w2=SGfdrz?3?ya2o7T^oL;t*wY&09XTSs2NXA%ZyLe?}>d>pb!k;{)7rgcte zQ?3;?DDNk?_zT#!%vQa%?x9ADh!eg(6U>L}^`ms4-8vi&xJpD#nkb4ge(g?EzqSty znqVrBCWJayr@NK?cLFFlVl!bL)!CVvuM&sk-wB(7Kgs1CKnVUs&0Qv=tJLOAcRCX} z(6y5E*x6`x*Q4`-QS0SP$1`H4{b)3%{K%XNc!UByc3B8%QqgtZYLd9SG%{V@y#F_Mh2?ff0OAD@ z)Raozpj|xQU|k9>hy#R_Za&Gtd2KxBU!bN50Vw7uFfEmH;DA`*2}x9MjGRHc;P|CW zi;)O$iIla?iJLyzik2+|!KmcbycMO^`o<=S%O(S5Q&KzzSIL!pU4xob+nD^x!6Gl- z)L5<_hDY+RtqKSFx`!Ok65}V2+Fb_W*o$cG*yQvY6UYWI%mcztoD8qxi106`^4_bb zFskpv48#lCWIw9L8sBf=%CfiN%a1DrRMW9ytww9+l|W4I+_v?od)e3zz}CiLGYSKL z;=BJWDd(>%gUVxHX}&H#jvHA*ab-6jb=L$!y~W_z0~T^qOaby%d`oLU(jKDlRtc3A zFHyl8Yl~?2O(Za|?qU*2$QcZ+%s8C&kiyR=sC<&TII;M3Ck%Xn#H4o>`yqg$SnKKC z^3ti2;(-&fS05)Kfe0O0GXDGVZ21Qr^sSzBDLHN!1=%U5b$vr^84 zxB-)If!;F3f;mnhYtQ)MZ`W%cYpv%vWQJz3YsUE93!vq9N%Xg`VF$Yv@$9!o8hYIehWl*^(04r;) zJ3%Ni;B5vZdGuM$Gc~P(V?%wO{I2R-5;K}BG>VYQB4^gDP(3MHJ z*D%Wk*=rhJ2a0AFeZA-2=OYDw>D#=xUJy6PZR60xqwcvk>1KIf?S@uX?#}a&&Lw5D z%+dqlNVg8oU(PC^`B@^`C>aPuq2}_8c9|&DOskLNGVpQIiOUz5ifl4^ZuM81`w$qm z_k$3=97T}o+@hT1D-;OWXl%_c*?Buh8r!l^8}QSRP(mYFYS` zQ}Yuh z;?BvV4D6ZF_3VLMm)Q@|=jm-AL5Y?yC|5jC<8WVtq;ds*(f=l7WqU%U@Tg0yPCDx~tY!t{=2+gVq*=W7?>|=Xi8} zlH}>w5H!G57m#2VW29cHwlO#CdEwj(a8!47yGZo7OqLwWY@A(#OXudt^)kLn+vQ6x zu{#XR4m7N?<`a*NC42s%i6&VxzC#d+r<@#(&`J$}B*>o1OUj?mk$ z`VgQ`?w;4fT25iODbBK?S zdSSH!Zql>GM*Vmp31?Le85j1)1UT0%=fHZJa2U%q9pkMAY;%RjpQ7@jSzYSMI>hx9 zo65{f?>1It$m;iQuK#q(Zu{`mQeV1>--K(vy#Llzg>7qSh0E~A3Y0Z$xTNK1F2=KE z^-E^+lWb5+v&HmBNtfUlG^g-ovsN&ZTxWcJYD|rM4B~6v&nZ!b~;wvm%G8!&Ba~ak=>sUr+85#lkuG0FY)K=|0+nWR?EY&jAQO6nuO6xYG=pwiU|Mx>DQp_cDP^Gm#V3y^+ zDO?u;s-7^;Q~+qWKO&XBan={-MzIj8<<5!sI$UM0))w;QDs7@sbt>=T);&6X9qe6i zJ2%`XYQ9o#S=$^5zeO5O|NSWW`1AUI-y>~yG$*@xrPFmOY<)rB0j+$6Wk?OVkx zIZ9TP3Uc-PHL*3t59Bd!adu zpv_$$FZxPk1zMHpQ816&b|!W$NOrZ-opwK~^Ry=)+Ov)nBJ!hKifo%Ms*yCE!zD}XFz zPfSioT|VtErvIbps5tHiKI1q2nnr=Ug$ek{Sj)`U7~}1cPCOTb?gqD;5rUt$B;QWr zL!O06o`2CjJ|9Wt(tuc1SI`KZn6|c<(AWOxAqCZa!-@)lx-O-N_tyYHS0#JqUHBn! zM%Hs5!jQRg)RGg;_nbohi_QZlmUimDyp65pjh7i0s|wZft5Z6Wg~fHo&`*L?wUMim zU9-j)P*3YkvvYC+c>>p+@RmcPT$WL_V=Vo%Rt(am$&`B3WggLw*RfFLl zbjM_(7HEL9)B+q4xT=l*+L7WxbOdnZ%3 z#}|Zz*Po0{bDK~;iaQm@;M1$Bdk)76p5iz*j=8PjWrg)hl^t5{`_8d9P2EIG~WA&i2zo|H#|Y(%hiYpg$iu*N&qim zqR=yUcJCk|FmItm_EITrzTEn#OwZ}0#sg2_pLQK}NZG}+;(c^kwO}r7{_c+VZhLtW zU*tQFcw*!l$+7>pm~Ou0_dV)MT(qES$bQ=a$N@a8!f;E%Q=7~6q4;cQnGV}&X3hTYk0V?;-Sy1w z3~6%JD{-&lWYGmCo7MlfL;Y7 zI_L)mm45pC`|O%KL%Mjo7-03v)z`dvZ`6M3Px@J}|K@1$I+Gx#Ac--2Ib+z>EtDrm zOZpDpkvX4^K-3RiS+iG{a8GO-iCzB~-5PXN->f?KF?&LI=)Y686Pw}@DtkWrvw}(@ zQnLLq={Bp`ubl6N{Wy$1A#*)F$x^*&V=&Rs~DM z#yUZ+6q*H1hTG}Na57=-gYjNyvxaB&t}d-vs*C=q{8l;8p*ioqttOjWExRQb7sFa= z%Nt4c>%D9EkyV8c410c8T3`b*i#0};kK$E7;T~EY?^s;ru?yeOUfZj=8XT2gFoU!e~<}So25}) zOU-l$>+fx8;QUhv*i2e0Ar8(>?b=j*}wZ%`~ zM8SspQM+ZDILYtM{NA>zSj*H@n-YHPxj*!{981ix1T1+TKp#P?xzTkTez>o|mApq; zJKXJ^d=0Zzc#~NY3pJu<@wov!h;I~D)WSCK_Nlb^ zG)ay;9kJJG{5Q`^$RH3&dHz3>HzAX9^7cHra%6V-p1!3UOQDIwr`}rUAiUeuQ9T1W zIWLB2!RiPwp?!oaPQa6YGTeDf)vqxf9WQV_;y=K7*&op#rB6+spJsR^bWQu^M~&r9 zPN8QOqeBJ0!$g!Wo;61Zy(T(yB zR0OL-v)|MRqK!}s+|TeIljx-+6Tc+F`fwkOo>SJ7r5$k z{s$^Pd5vywssApmH(yAwd{uE6jb6Zs{)|oEQ}m#^M{ZwvUb&S-V}&sN-_t{^sOd5) zs}p7ORXPpaXV*~cY?piNXkfzU^1Va*O>vU;6(djnw{Nq`S@Z{Qt|Y2<_xM$#3k?{5 z;1wda^K{U^gaYQ(By7Zxn(NZr{{6wtoSEX|8C98nr*Zw;sa4ATSI%Gh?_`hnRDq}Q z$VZHxJEQ{7)giGCIWpJyh2hPRD?qvGQd4+O;LxD&#gJTs2sU0*%DSugapAn!n&HOB z;vzY}58Ui|acvF(_c(s0h}YQ$0y*@sB342>Gu_}IpX$2pOSv?1jM{TGe!eO&{8sin zoEDqxf1eV}Gu@;Q{gOM949dm$Z5nkF7Tqg~oBV<%SDm?H{-X;2r78DczEqT1vm5J9 z7@wF(J&=8)zqXnFMp0u8JlgGY{y^Rh(*8PMSRw)pU4N0hxjri#49jyR$D4erbcvFV zle?Y9yznXgg7?1R!=aVLSp;iSeUG1m#^MAY5cDP`HqI_bMw>+c{wObUMma<4D25Li zFBiWV*&H~C-svoVdhpp1jLeMQMC*XL|AWx~rpsk=%nyvh3fy;sW2sC?jTcOHhhwOB zCQNx|`cL~J2JmT`@mO)AXpa= z1qOe-dPCD|#zO3Md}tm^hf(upawbQ1K(guZ#_A@D)EESh%@=|{N9~4gzSuuxF?)x# zQ70wEfoeVOxB973%ikw^CUQ%%28xQBoE%$~{(IC|)-SC6v`>wT=x`wGUI4Sxm1f1r zDJnr+l73GY)P0C7>S&b`^|;%Uo?4~to^b!Rd+67*tS<7f1;aE3p26<-k3A5v(R640 zdS;{DHhK6%4Zrn3EyplxfI?HeeQkI>vhEu~FudVlNm0CSq5|G0iI7vRRH`x_P82QN)CUos0 z-Q83{W5d9%?!}cn;G-1TmO?919x(Z?EWxkt_)8|B~5b`q9D9;KT76en0eVa0`_fRayD;8xg>1bw0}}Nrr(gHiu!r zpwc2MRXj+^sj^uw#_uvf^Vn{&c0OJfhHWycJDhN%&P#r86*B&Lv6=9t#p6(dQ~clT zvus{O`+iIyPnCR>TwEZRk)BA4KMAe;&@6t)4w+V;rgzKD5q}O~N!lzd5Z&*3qAG7M zqCh=A4_eRxUAph~pebGQ^vZ2I+6b0ckx}8Xr(KsthFf)eX8N%rSDmV>SIY8I%fb@c zz@BGA&SwN%D;>=78BlGo4mn;-{sVn-&Dk*E@NHOc62RIj9^;OZnKA8s{0?9R2M0|0 zQj^i5uE_io4mKFlC$o4vU-pUtaLN*6iYmQK*-3`=OlraWrM0R{5B9zMGeG%QgNW9S zv*`dyAHXI_{%|6<_)1}OZBY?^VRNw==B(7Rs?aII3<>^c-taJbqj7Iw@nUI^`(r47 z^2VHJP%*K8y0Kh}*tG8me<*m|HDZu{;0QnFD!rU)wOdR+I+lgrR-KPE;ChoFZJb3| zG0=L1*@>@7Ue;KyTl7Lu4w?fuClnV~jbQf5DyO1WzB(4*0dSSmF6G3joFP}#+E=8aIVx~=+krOC5~ zYO9~TTN${vgM$%YZk~x~)cI6nd&`cgspDpjhOxd;8?ru29_Bkb9D7@XS8d}- zw)}zVAH+20okXMCe9e4QLyh<2Q%;F}VPY4j7fwnm^4^G|wQHm6j>-7~Z1P)+3Y+TS z=$#Xl8x@Z1i(yOm(XJW3`D#ZRMJ#gT6DVSQ|KljdsAOg0OO(MYuSEloO=>HZn~G&; z*`aNG7;`qQg`rorQR)ZhTAt+WFXX4d;e+at*GB-CujT|SS%|V;zD34+67zR=5bziD znhZ?_qm9!A9fMz2UI8?og=W}aF}k^XVQ%RQI6mNcz|LK=%dhJVTlH?oc_1=&v2i-! zPR{GB3!f$bg=v;;iag&aMXtzHfnte<;>MIDCiwo;(e)#|H#SD7K1%;xaQu}%)e z1>Ub=U%^YGzl;1Wm`o5&ud@R;hwWHaNB9mp(X&j(kHhl)4U;!fJ2U0^#<_X-?_5~> zBJ%c{aE4BH6xg?2I42M)F(VemG)oU)UwNV()yvHn$eaV65Dkk!HcE!(c{-qbq%NE+EG!ado&L)1GX969OJ;soNgqhuT39Zlb z%GJ!rXrxv(^}s^w>D5Dw@^p~TA7@J0ly|T6ujdCtMlI)c*`_-m86ZjzKoDX3_k2|Sl*)F|zeacNbxu2b z$i1=yfA4$t&``9h*M0&=sswU7v>PF-g+G^hZIJ(7B|XiHkrRO8sMBBhBg&J%e*^?Zxop z=W`i9qMm+eP*Tc+vR>y zg@A=@UQM%psiyvDPgEqRoJwNz=fy;r9M1jHK>ymN)(nM64`lEwZ7UHCnp;JO9NKTD z3+ZHufx}kaL8y7@A>Oyt^lYk zn*Eg1>mP`c`e&ge3+HT;co6yZ?)YHPx1il5pj4sR4$!DFFN{sC7JC%u8PqgrgxnTY z*jtue$pHHEEc*Q1kvQz2;NjCxtVtOyE1j^dy2s;S1k9giQ+RaI%G^ z-=LGSNFiI+?Z3U-10O{!SOp)LUg|*hzY4Vfmmu4APsH{WHQOJ6_ez8A?z{m8wR|_a z#WoqM?o`?Y8LuemF9u~Dbs1|avyn0X$nrf7u#LlFU!R{@xe;3@Q{E6H_jisSoy@jVn@uzfIY`~%7Wm5dyp5{mH5|E7^T*%&zALrqzLsj01XuxI4YffM zXG2~sW1X`WI4NHv99IP3H8%V2`Jp(#z*cN{!pb`Xf?f7%Kz`%?aD5E=P~F3r-J-O^ z5KGX~i)H4QT+v8M`5i$16#Q9(@4T)d2lKB}4~r8^YdN0MvoE$+>M4dZQI~#O439w| zuJ)POe1PNerfBwj;dylX3sMcb=Icb(&a6Qt#4dd51HErQNl{OIp&Ai_S0vI*W`)X} zr5m(nQn^Nm=8h5S{VO!t-7-E!O7CSMX(6VtSVE8$q~8E#JoRueB#B$nH0Ye(Yj!@? z=ecWL1(WS&I0pLWJk)+8gaY&%w`X4zzV65Hjn-)!_vQ>%hEK@dz2LYA9_+ZRgzT;M z8)JjoPQhdpR~(nWlkqM-$gyGCcNTR2UTl<;GPiaYo#&*wSpU%2idly4|00~+Q-u2B zUY%0(2NE*qayRX_xy)jP{6XU2>m3x)muSHdnaQy)4JeF5#BZM<5^51B&dk zju7z8g0r(_&{Z8|@b_>d8*^m+UdzSf+^Z1Q&JnYl&!UTuc!Q?;1ddD@BR_IL73+NNc*l&j@R z)f*RErz)LU)jS?G6aNN*apj>(1T<6zR4<29rUbnG!`8o%^G3?y|F)6de`0Kf4M?oR zC93>4v1`> zm}3bW_KHp4aT*wRkq)^OH)J7@Q0)w5>LBbfEC#;Jm1ckF0zaMG8;2QbGzmz5hbWB{ zo;#s^o*MtV&)1qS^PzzD9MZjMJ^N(!t;<=@u?`$N;i`;#4D!x;H){r)Z}E99?SaDW zdNr~!WFICLJe0~Bga*}`GaZD{`d*o!&?|t#y64(i=*!1tkIhwSz+R!R8DA@|oA~o`mzE2QAeVA`x@WhUQZ>#OB5HuFZ7F%3%3%tuF4nBFR7#^sSYxQxON)095GN=KR9*7We+p#IgkIMN`KiU+9rTMYhGe` zpbEP@IJnPy0{l^{tEubKC6M)@1#!2O?qCM@fi?B)vwzjd|J8YKKz%(bF%RnnD*f+S z04>a}tYf+rrV6KXQI}XjP>v<2$$j&8g`6P}^HZ$#ofkGPvLRcvtTnNDsyBT4uZv|wO>vx%E^&4(Vpx*Jg4}xSyQ-f!2D**lFi~$ z&)`ic{E0A|#9*x_CA_1y2_jSD-uDa^PhWI3P#`_Z^ZqbcfGcz666?VMS{oMI$}kya zrPm?~SgXRjE%rBl1FFVaJoyPwa^m_v2ea|BvGWoABPy@mJ6nJ@!7pyxLt-rX4s|Mp zJGJ817A~lBPQ)2#YCBt#ln4)O7_(Hr-s{y$?55*C8{QM&YpSYR%$v&F0B+;<$t)Ou znA|ToX{hDcj6n<)2gJWm1e?pePa=9vYqtfCIcItdILMvW@fe;hM+c+WPYT&Xb@&Q= z*pRUG)CP=RY)Q*1xF7-4Mkwm*{}i_wNw_E+m~ni|gkIM{Tm3=Cot3AfsqtBN^oZWZ z!A^RpZ+- z#U85TPin7JP9H8@%wJ_4W~?8Z9*xFLww#czR#Evk&}l>6Er;m1-9C*0#>|%2^kwcv zOOHv>7@F?uYX9EztNnbqn{F09=BWQ8OSs1}q11k1OOu81>+Gbb5Eb}kCr=+3ziNk8 z(&;il0a(r({3+@(0N2w$k6C^W;{jhGb^2jw9x#vOWrXWm-tcbt8Z_!$Vf!CmdFx5w z%PT@lw3m$RCE7y;|JMn-k)1FZ9AIL0&BiX-2S$}nAt?#6j2&f0aw=*6Pv6d>eEUEgkZMkktP-65}U!T)I_gmmedx|n3^40S>H6&T_i{=+?&%&{K zA_FZI;|tELI&?%%TvjjRSXfF=q**(aWX(Mx&f?7QgPn?Q(7yNmM4f+WQYn%*V9-ma z<4l+oR>s5Z=nGyqj3))((JlR(6a+z+sh;5#96Za?DdEWnRoS?=Iv*~_*`$pjTeVrb z@D5-2&~^%z_Yt!0c$EiQ0eN=nLowik+#iukKDN+7@J!>^gyEy0JcC2=;q5N_M0JUS zulO}J=BTjtl``VEMybQ?daFGuf^%8Ns5pnk(KGPbn}7nGh~*bVF1R~d(ZnXeMmTn+&F zXX`QCd50ouiiIW{zJ3vxmeC@p|_tAagmTF#MNd@J?!2;FnECu}EnY?9WE2w2V zbgpX?NX?K0(n)QsYgW>YrA>#Apzp3GJ$#Z)=JdHkm&cB>PyJTOuQuS5vHfNC3+@`Y zx*j&EgHfy<6#RT=EXr;YoG)Y5+gQ ziF(~u>%mLr9PK~;tFYbWrD^!ASW2@XPz$I?HRj1$PA~dXdJ`?G*XO`s{LnC;qAqP z0xSFLAMv>L47Z`&eja#JWe!l|dCLE-pW&}QI7VU)GQ$A0(0>|w)j5}s?v`%x{RD{D z9puw=KI59JCs^q!|JigH?;cSH5*9kn{qMZ3xivfJjRA+b@;X1PwHZkvcmB9$1BL1QZoL%>tqRmz90ep2}Z?=4*mcJ+a z&uUw{p0sMkQGqWpv84RJv#(;C(LXpEg?_&mr>v~8D?PWFtXZ}&NB<-L;FoXB%>xZ* z<@gN*x8fdMx3&F4lE918^(4NYC{orOe~Q9Yha zJ;s>E(;-LmMaI`&8nYs>#Ra4z&m=GV{9v+R5ZpO;iCkiu<3@@#_Y_^=x1K>fi-!Kv6 zNbNa|24fdYXx{r|5OA?|&FDB_Arz5~<;Vgdm#|8}AvR|>W0E`@6rRb^S>hOnUe zUK8F?{hSlTb|OFdy54l8{1+2Gk;pqsLFN1+Vs|0;_@aZS_`AA?3)`8^mNuBoA5?hz zCPd0^l=DkN_B+0qSV1gSoXjYKLHWP9|91xkh%y$p3ZbNvUDO89JcOVjwB1T;9A%q= zmkZf%#|T@rp94)+GraR3kg|+_QQd{by?l7GaA$;o=~)Q*goXzt?wFtTgp#Df#%#%M z6zKcUDPR(=)qY2Ul=u+KCEwyXpZNm%kEr&~i&mki4;UU>us|f1%7Ytign-kTnc-p? zD)9sWj5w%IFN7Eya3Uq6_X*pABG5=cRQAs(JCZ?Y{3b=f?x?qqWJTU@UFhKw0pRH4 zvE&Y<*q!Y~ChueJ8=|E3yaQl`Im3*b%ZMaifNt7C1?hGE2|E8=!`~0gd%jzUVm&QN z&V}}nKVOmm;1=}9ZuWSQ24s&00KS!HX9w=vNLZFOgz{&3)YRmMWxKkK8H~v}K`?8% z1$xln?y$3=ib_e@k&mB#_c9`>uZhaoNPX^ENhH0{))r<0NS+Ga5UG_AZ|zJSS|t!w z0qDHqkI-vcBkBKljs8DZmU1ibGlx!+5l~1xaOjX(z(-!Y{R%K;UyU~wChMg$3s!1k zgjeDNw#+htx+`B299}3XD7dqDU}9eqdnOSOY5x{Ce5pNm8n~x*@rq5B*oXC-62bj} zm7br~B=)?T@fl5@%GoHzTxXb>$*v}3$jl0ng`H$B#vQI7gT?az zc~E&ZjMkAIUWZ>_MHfNeI@YhQ(OdZFDgB3s-TwBiKNiCu{&@FU&qR@qQz*?-i+fWi z_r9=0mt%z;BO^8YbKfaS#`w~h$HvT~G&I8`C2A0}8><{Mo5iSUif&|TMY+PTE_CU6 za4kNZgw}K<&yC^p&a2dAM-!Y(`@L&c5jV0aUdIhY8U$*u-=dM5l2IjjLdnNEPsvnW zwB&ewYBYk71|)7aMlmUB%|oPJy*$dSj{AJb0r%C1ngFVf8X)KUYeMP%r;+t1Hmly( zt+v(HYw`CveQ16+o?n6IMEuE(hby9NBEmJ-G_NYp%QLHAtRP1GUGLNQ+L@2H{mffa zj3v>tgT;tosk7&2j~_I-Y?d@mn^}<@4;c8_4~(&tEKB8lX|)1CK0;WPnn5t_LrG#5 zrVd#jv4oV45Bmo;O1SuTaZTU9(S)JAK_2gw4{TR$NTEB;M@D-^S2qQSPKUgjO8i%t zLFjHsw>V0NlACVh>OA|Z!hdZndwZ+>UqSi*4TB8#>UL^o`T#x%C3#1Ak>%m7T^P}R zg&jb})H)i~1K@hi!&~FWFT?oy|W5}ORGk)YDD2O)iNILEw zmi<;OaYPFOdE1u^^VW0;XAncpr&>=VujTc0F1>dlXE1ejxMBJwFS(mAt9O)G*FxN& z`;4YGHqtorv*gaep6pK+m>WhXQ2#@bucv_1{AJ~sx;SPgD1Yjed=#vtg-daW+pOt7 z>{5W!r@zHsH|vE8umD(Z9L(G)Gxe$6y{Sr~*WR;$@YB$x)oM_F)+6ildKgJ%W~-0r zD-6^;4cf4o(ucOI*Gp|A@P-N3V4tJW9_Su&8!KE18~w`De2?a&?xDx@M}lOBj=A(z zcyfXrd1M8}6J3?5Yj-6hF*e;BnRLy7cwxHLe}k#}Mklp6eCs~#(#xUgj2N42M^Ac#f9L939Kd8u2Fh9U(T_j<`8Z$L;n zs(fV)aH}3d*_8ROQf*_l%%73%vIQHYEI2>nVmN(M zrsw8#3V*dDzc%c&^&K+-_gbRD4P}bgN~~4DIF#rPTK_b9B$h#UauESfr8AO~H|G8P zx*us+Ww~_et$w&k##uY->sEhRsnU9ONWC_EG=(ItmcLtsHuJaF@vN_ zd^JYcXBiOg2)=S1RJg^c`z=4=2iw7Bed%4zm{ALNUU4L!8%6Xbfoix=bzP((3Cc6Ma$LvxqfKRq_+_byNQytwSwa z#FF&`bZ=kdJT7o|dFC$aI3LahzHD1>Smf=NsB1bL1{?S)^ksDdU;QM^{syh0VRCSF ziIc9*Eww&7F2H#%PF8{UgQzr8C?;@L61d1roC+A*y}F1YbVT|)d|8*g>RipkH1ePT zr?+}({~y`iKQ3s)Um9HH5-67RBdHQfKL3(?nDGvQKy<{*A$E%4qs+_DygEv^jR))GobJ)mu8STeY;adCM$|tu!|4NBmB>KhNp7bSVF&r~hs1rW$ZW~LIyk%(c4X#6b_9z857uzvR@kIdqF4NVuG*DspJWDs)nQwe#}X-LIS9@ zv=XKM2P*L2XWjed`{h8HY*&X@SX9C};|9~H`9FjgM&A!7cvh>VC>fj5Aq24yM=f6V zC;>*V>Xutigq360T##7)dGK`^rlQnad1}sGUmo0vuM+VlVt6wTNU5r_221VC{A7G= z?eY6k@xHFVD26Z3oLt4WirxBL$fa69UX?c%)}^ne|HdbFPNuC;QsnIvkzBZK zt4U0@qkks{*Z?|fx&F=wip7f)p6{}knnO+#KKS|;9wl$9V z?sI;Nxe3E(YZLQ*Q;$Q=GNGa}b6#Y8Am-+tm+X)37M7!wPg6tWG!lI2ZiTs{w_ioW zHe7;8tmEGeDP__uTLpgX=-D^po%&)W(}PrIRw{!L3+iZlNO6Y%y?X9zY-A2qqmYXo zu=Utza?9EI;RXDv3BnXFy9)H*=(e0T@41(DlS$q`4;==NkWW)`--qC~s6GqhF|=rk z7`J{De3Q!p6>z#WQ#0^KJ<7s04zpkFkQ=`qlDeoU`LXQN_i-=x_*vf{m($5@`djit zsT+_3;g)y1rMF*gN?#=dQ$@VnoWwYzDY?)H`Qm@*O8+>vT3Ka2U@1u-mqzOu3 zV|a)I#!>MGZg~ZI%*#qjBm7;6T=n#VC~;Z~!2Z~` z{okrb*l|r#9@7s{(#i)3=kzWe39AVnEtl5@UjS$CZhLObKh&9j92%D4A3TKpa&@nA zr4)Diu~e8B+kgesjR07z9)^iKE^T(mC z^FG69jfG#`7^#K;psDTD;>AvPnTANkDX%ptyZOA&I$wCz?)i0^ySb>Qvn|Y>zWMH7 zJoPIEIPZt_!_t7Mr)MRdzfYf-^Ph9-KVUgm&@~{xHynpEqQU;0Y4ccG-#_Ib`aSkF z;TRRIx4S^k<20X*@7dpV97zt_fUcR(nenJI#LBUS>K4T>#rxM^sXp*!%b8Uc&kxss z%}J1!I3HSnZAtE|-;UpYI4{dVYQ1%KVUuc{fc;ZR(GQ`l`HOk4Wb&pf)J5R@DW2SE zzazJA*dI$laW_7iif8w&gx=Jfi-Rqea0bK=v{Js_@2*jRYwz=$KN{lhq1sYvw`o7d z!q18--8b*IFZ~~POo->kcvE4rCRN^$MM+Vmkt7K{Uqk~H{KF1)s?>g0`In9q0!?Up z60hj$W^W)#?vUabnX%s%RC~O(8)UouY>RC#m4sF9bwo!zMdy9`$czw*9HlPV1+`pB zv&Ulg@wLF%P)H9`psm?sSeCB9wHKCl2Au}UXCg;~!l?1=j@kO72AEJS>R<|T`M7_m59#;+CdHXU4J44lY!lpzPvTm9=>r*96M@$RD&PyG4x8!%FHE%dCo1Rfm4Xp%V3kWWCIluw396bN zKd$SRG?DGG=ui4g1>Yd=OTSv&yNe>OcckZ$`CrN+z)E<}&p3jB6GKaB*FVlR~R&V_9bgnU0M+h(9^oIJkMfDqY23fEIryNFY4B54^R3 ztM(YmPB2}MxzjlY-HG|r>cN+hcrvwoeO2vhAA#jSP!LC5?7{1rfI4IE@{er%nWOX! zA3`mRa@CslsGY-B{=qFSXT;|X?!(JCkrv4FlePE{*JQ)0~enodzDu9>|GT5bQ1 z_d|5#ku5$c|NGCFW`6nWUYat_&JKZMC)0$QkvZ&?kzHWq&PsKsc(<-}4Lf=n-=z_~ z3NCbf*8NTtPl+3;71}6{GJ%oNG@VnA(baaoicZy*T)sTBzr~w*y`(-FER&tFOP_PK zp>&0M75-=89jDwa%P9PW2^`$$sdkrv`Q~N-oBS zOY5Jbxv_sq_fEngn%U%k`*^_a_@6txT$AWEd9YAEUg3JQ2%zjN<>u+ZX5IoHL{9tE zdxq=s5ZA6#d`(k8Q9k0L=2MOi>M0(0Qoy7&lsi(};xPp-lsefsn|%R+KvH~CZl+4O zuC|xUrb_DQ;V|Cn{Wva-#@Aem zUJ1rPBWAzPAGiD*9hKhmJ#|qD#w8RlDD4w4gJq~^|M)mO3z^Zf5o?9w+0Zsp5|I(9 z?g$yVe``ML<^INg1-11J3+)NQ-X$iXv-@SSauSq5^uF%gAz5MM(Zb}O*Cr{SY&i#e zFwQ)8$8N%&5BuSx*;dw`b#G=FHvynlBRB_ddOmv#H7HnjG-R=Qlzp-Nbuo3gK8uw3SFaj@56` znmw7!Vi3i8267Jg)VdWJjyk80R*RGqIs(!^x zWHG!!(UQ6@07`IqD0N=&fQm$P;>u*WEK5y^2E8La5^$b{*`-SLtAAWB_8aTID>bb5 zVEtSy^PW&{fq1oXtTZAzgeu`qm$t|osbAJ>!53(j2ylHi*WiFh0Y>L!p2dgN=RENF zPO5|Wa%O`}b0VVGU99v6{}&-d`OMp`^uL7Z!VdyYCj{NE^tnFK^DbiSY`7NfA`+eo zT`RAdZ&};AUgx|Nv64wPz(j9U~hr_%jV?;j9c0@Sfm(jMfr z(MSR&xGb905l|Jq2TVfX?%tR9BhOU=J>%}uo&`gYDh*pg)z)+VUC|KwZbHd!Q@>&t zh9fa&^*q{j!C%>+N5>iS*B9s3k~_8prtLcI+U*2VA?e^*p%*gy%MB!93!9=Hjrb&{xRKGO8SaX#5^`#OJ03$h}VTNAa+ofM(SSk`S;FLIEIN~@N%svH>=zX zaU~PUKNzy5ZFKFUh|B|imrs0MAjy{anwVBsz22Pv(f8@V%7b54J6b}RF=d|jpu9bNL|Hj;D_aj}nO(v&eYeR3WG~ z-80${i}P$rN?qvba>iet&kcFo?}n z@E1^eiH0Etzu)f0SR^UfbJ{VvI+nO=-Yb1HQc+M<4^y(_o3pok<4@;ja!Mgr%5kY= z;x`xwI>-)hBB?5YRwOJtM0rS#RCgho17u!*FM%(PIbIX?z;iPZ+x9B+CM@20Z84>WqFO9^unuc z4Ti1%tfwVy@}j_zlEqjfS;wIySUrYl4={^ZB|JH1i95 zYijx`$eK#}&t5wxJ7SXgt!C7-43ruLS<2`0ETk*uD*o|vd;##d{ht`&9gB#BM*QgT6=#S&v z60^m{yP=d&*3NDOU^>rlHI!He1j`JMio$mvoxdHZJ}r6X_4b!>wZDtC&W+80cb1Cc zJDAD1?}vG2!=lRpZ0m149#@-LG|rURHFPi^2m7>EAP;O7#9PRd&IY@@o@e*Ef9egl znx$k2_ZY;4IST--g0&0ZlL2ScN=qG>jfRMA@DRMbc5!93XVl77Uy2<<`#IH)mz=iO z&=E8D`d%;@R5H}qGi{mBO7oe#-#2erq$PU6bkupyNHWk7e?5czlk)qXZjxRqS=Iqz z0*RA*<%H!4mu)rnTMl}BmGPW+wn8uCS+?fpYW)ySJGinc+w31=>$84CJ2SO*UXyx$ z&6CEB>Jz0NMd%M(>aVsCFf|n_hJY2DphM=XeRD$ah{a9z$L^PXaUNP)_ccZCB5BR9 z(RB-uzH%+LH(yVXxeQ-4qT=Kh z53aF5o&9>uUlOLZTxTBRNQQ|u^97LIotKA(`bQ2uR!W57emjDso~`NaJShwI+0?1| z3$O3e$&Gu^2j5uWZ7KD(74=J8J8wVLZruJpF7C;rGYPSRR?iISD(xBl$kLzIDcRtB zretu>HBd39!|kI^c0=JzP8n;T1zwM$NTI zIA*&&;DD@Ymt=$bjjWBe`jTO^aBJfAI4vxm9mWedVA5$L03aiOWj0JIJo_31Ki~a= zI#B|-htGD~li{i@TH`i-4(^n{@xiDW1VUz>Q?eOEuCj2v6RMazoSI*|Vl^x&<_ZzD zy>DSC?Ugzt$57E+nEGzUzv~9M?6=EY=jlgpKeVlr&TMaGa2ZP=%(Kw?5hFTAapNwX z2@g`e7xuL;9%MH>#uf4~V3E|7?m4}}LN;x;m(?I6e_d6kb5p;uA3?LqJz01aD05Ru zCh)pKyXeh4COO^*5o%v*sHp|gZsfw$%*|;Ve}699086Zx6Y3xHNS^bbjD(Sp&`kZH zDHqJW5-cUh(#L&TaSal2F7|5wAe|LYS~6)2hhS-0$Zs=SajXe;?){K7(@@FVbTAuU z&M{Ln+i$$h&wO})$_W_TeyUC@J>zVKm*J%RoXHfS#`Zw>8S_fsVosO*qeP9xYM3F( zlpV})ue^;JHf&!zw({c{XBkrbA!#Y~%G2s(kr(kEXB;lr^qOKliIa%f=IgI+g~tTe z*aovLeS5Z-@BZz!|4$=l8<$(=;)(hLgv4^rQDGIz1ci_lFHC~Aqfglipcv{KxpY1< z7Fo)rZt?e=)_rJHVFKp0#RooDJ!BZkDUrPC0yTk0d8beGO!`|xAHo8{aN+gS)pnCp z_~(ru39Y1#LSfzad_IB}{P|liM-%N9gGLQ#xejap0@vR&H$0y1o-XK*4M>s|f9>_+ zMzwUbC!k`#1+tuCkXgky{~sXSvt$Q>14`0Is1%TAYLlXMR-~vfOj(?%jHEk-+o}HB z0Yu8Um)}kdi@d9nhd@lFoC@fiC|&NBPeu%d>W} z7Y<;gQ`zeoIIOaLqfyLepzrD8w^)xQA%pelmTltBx35j+>VDcnJLa82-IptVtkNeS zXKjWFFRb09S$ORxi{ZEuK$|OFM%dlJ|cMZ z5pCJ!n%?t1ePmq|suj~Jbfu`Sc3Xath~ie%E#+)dU+mhqT;^YV>}lo{Nd!+Air!$S z-n{5BAx3}F!F+q8mF^>E47r@0O1mNE&~fs+ z3P#wEItK)P61jIX)eaJUZ%Uy^tQi`L(J42eMMIG%!d-n3YL^p>U3YuC*-cuHk-S%T z%$FNGV1p8eJr)#xhFg_OnyQ>zUo_^-VF>Q<63^Obw>FDMDqFZnL~bcH8}Sos~66XK(symh$qO4YojJ=`MJ;O;8hLA4oyKA-(Y3w3syrG5PyOR%DI1Z7le zq$*va{WnG-HeR+8-QuzSiIF(!WGqB2K001a??v?NSmMPSbZAVHzd%X#_gAvzYL*Wi zN*auO9gc;NU+Y-+wXbAjLNuw&#?*X9-qLkQiZnjQ@Jy_JF$;gfI!I3QeXHgvmCuif z9K!4{hm9YTy&!+@1#DUmp?jzNZ0tKqM&6hwq!GWY-(GL+e)cPeS-fXSzTxF`Vp9V8 zR<4HD{_oIyk@Cn4A#Z_g-aAv1MhOUynJ6WpFaO%pB^lT06%co-BQVVOl#)G=;_R4d z4QgSBgym%NxI^@^R-JX*;^^Is?wV1noz;?s!sw~DX(tzWS-;RXHs<{EdY7&1JDW@vAbSy z1If$%b|YKjZxrNaO!@2C&=$z{Z$kel`Z4Uk#t)GQ9Xbs*<2c0bj!5gKncm+0DgL>hC${a! z1pSV8hVfZt`|h~eWlNl>EtPT89)Z zX?l-5bYDK4?FvDUj1OeGX&`x%?kPGik$I;M6titz0b`aAH*BsGthd=&YU$6~kZ5~Z zgsK=@1RwScEoH-Je;+$OAPdG%b}B=#XOym)FgiHlXN{!Yat%-*B_#D`iIJf||50g* z#Me<|7kxgt_p`i{O?vJ+3ZA^U_~1msOo;hY8(3HJ=CmTgG-LElH?yM4iATpI$O6s> z(q>2{2^xKi`HW6$~lMli6?D`=TWnmB62}dy-wsNI*2Xo_4+_W z1<0bt7VLHTOxWps|_K)<+6Mg&ZqT>6Me_(haueozJdta* zG4V`EzpI!0%-;DP}}LJ zpAW^iH7a!qc^;D5q-1CNGnF$057r5Zn60VfZ+m4r8&>xlJHwlrOo??G+ncOd-RRma1uWs^HaDntaPatkYSUIoN$v0g^B{yKwbVC|0uT z8kgh#Q{h(krzt|@eH^!q94w?hZ@nrQ#`hW(Jtw#c6W^^vpDn|}cS7m+-2FGGZ+|Up zR|FrERR>C}lURc{`TV}D$w8L!laH9)Pn3kJnPC!@QM6vj-|UG;a)$P^6Ww#L%N&b0 z?KShzKKjI;K=ViS1VEricDeX|%q(e}^r~(wrcksEXBo_sGvhiS)QWPpvtPAkU8=l0 z9+v(JMIypG(y;W`?0vBJop0olk4ib=9GJwqm9i^JCp)F3M!xyjp_8{? z-Oue~E^RnA9qQByhrb_6-7z)v@_n%P^jzV9hFI-{LMSepTemN|W%~Ur74_%1JfjyK z@Of;qt!2tnqoW`2gNJ&plWd6RVm2&7BAvKco1w-Pv(}r6|FV|te)Dsr2C6??^ zV-P$MR%wtke5U(!(2R4FTkcRAXrW`f@dI;<$dY*V0adA6HS@-T? zs9vQ}+3UIXu7Gms8bPj@j-$Gx=lV@@k3Lcu)g|1-d@k~lVJP}`KrOTv+O!nKaVcx$ zlbxJhJvCaVZOBOYkc9myd&~8FC%pdA7az_0uW!?A+sNe)w(JrG57Tw}1PXo6Y0nR! z75N!E*lIaY-?H~yU89faqWDC+E3f5?^~&sb2Xb{!_xfjl3ccN?tNcT|60>1$0FY9E)VR<=dJNtLXWc{xPI{rtz?vzNw0WbppNZElOwCVO=8G@Xzm zyE#x=z{zmeBKNTcKwnpy(t3I)tjOx0P-&%?L~Dw?r2Qko4+@RE~9Kv(X#; z+>l-xBDs8!oV8&W{1Bx!Cgl$%kaWhYjrIJkNO{-W$_(Y^1VBps=YpwW2k z$(u_Co0X2w$$Z(MUtYD6q(B~qm6Do$WT9~-`ue@@6K%N7r$% zR_%+ae*5wl=Ae$X=MU$Jl=*2{+vhT(9rd3oN^^#|^A_aZ_TO-!*m)faxm;NK_4qtD zWz4f8+|VG)$R�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�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 z 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

Cb<$)rZ)Wc$+s^zNHyE_9N5-Ow! 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 z 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%0D`>SJ(EU_#U8;xGo9{&fcZ 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%0D#-tpyo)jfr_arfiCP5~87N1L* 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≻a5&V04`uz#Ldz4?41kP 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

rn$I=pJPxwUgNx5HygLtj2{Svq4-R{6bY@LD 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%0ABEByM%$-eW6|F8TlShEy-rAT|N-mPX%iI=%>f O{JPiom!dt#lKu { + loadEnv(mode); + + return { + main: { + build: { + rollupOptions: { + external: ["better-sqlite3"], + }, + }, + resolve: { + alias: { + "@main": resolve("src/main"), + "@locales": resolve("src/locales"), + }, + }, + plugins: [externalizeDepsPlugin(), swcPlugin()], + }, + preload: { + plugins: [externalizeDepsPlugin()], + }, + renderer: { + resolve: { + alias: { + "@renderer": resolve("src/renderer/src"), + "@locales": resolve("src/locales"), + }, + }, + plugins: [svgr(), react(), vanillaExtractPlugin()], + }, + }; +}); diff --git a/package.json b/package.json new file mode 100644 index 00000000..65c73c10 --- /dev/null +++ b/package.json @@ -0,0 +1,81 @@ +{ + "name": "hydra", + "version": "1.0.0", + "description": "An Electron application with React and TypeScript", + "main": "./out/main/index.js", + "author": "example.com", + "homepage": "https://electron-vite.org", + "type": "module", + "scripts": { + "format": "prettier --write .", + "lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix", + "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false", + "typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false", + "typecheck": "npm run typecheck:node && npm run typecheck:web", + "start": "electron-vite preview", + "dev": "electron-vite dev", + "build": "npm run typecheck && electron-vite build", + "postinstall": "electron-builder install-app-deps", + "build:unpack": "npm run build && electron-builder --dir", + "build:win": "npm run build && electron-builder --win", + "build:mac": "electron-vite build && electron-builder --mac", + "build:linux": "electron-vite build && electron-builder --linux" + }, + "dependencies": { + "@electron-toolkit/preload": "^3.0.0", + "@electron-toolkit/utils": "^3.0.0", + "@fontsource/fira-mono": "^5.0.13", + "@fontsource/fira-sans": "^5.0.20", + "@primer/octicons-react": "^19.9.0", + "@reduxjs/toolkit": "^2.2.3", + "@sentry/electron": "^4.23.0", + "@sentry/react": "^7.111.0", + "@vanilla-extract/css": "^1.14.2", + "@vanilla-extract/recipes": "^0.5.2", + "axios": "^1.6.8", + "better-sqlite3": "^9.5.0", + "check-disk-space": "^3.4.0", + "classnames": "^2.5.1", + "color.js": "^1.2.0", + "date-fns": "^3.6.0", + "flexsearch": "^0.7.43", + "i18next": "^23.11.2", + "i18next-browser-languagedetector": "^7.2.1", + "jsdom": "^24.0.0", + "lodash-es": "^4.17.21", + "lottie-react": "^2.4.0", + "parse-torrent": "^11.0.16", + "ps-list": "^8.1.1", + "react-i18next": "^14.1.0", + "react-loading-skeleton": "^3.4.0", + "react-redux": "^9.1.1", + "react-router-dom": "^6.22.3", + "tasklist": "^5.0.0", + "typeorm": "^0.3.20", + "winston": "^3.13.0", + "yaml": "^2.4.1" + }, + "devDependencies": { + "@electron-toolkit/eslint-config-prettier": "^2.0.0", + "@electron-toolkit/eslint-config-ts": "^1.0.1", + "@electron-toolkit/tsconfig": "^1.0.1", + "@swc/core": "^1.4.16", + "@types/lodash-es": "^4.17.12", + "@types/node": "^18.19.9", + "@types/react": "^18.2.48", + "@types/react-dom": "^18.2.18", + "@vanilla-extract/vite-plugin": "^4.0.7", + "@vitejs/plugin-react": "^4.2.1", + "electron": "^28.2.0", + "electron-builder": "^24.9.1", + "electron-vite": "^2.0.0", + "eslint": "^8.56.0", + "eslint-plugin-react": "^7.33.2", + "prettier": "^3.2.4", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "typescript": "^5.3.3", + "vite": "^5.0.12", + "vite-plugin-svgr": "^4.2.0" + } +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..6cee730a --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +libtorrent +cx_Freeze +cx_Logging; sys_platform == 'win32' +lief; sys_platform == 'win32' +pywin32; sys_platform == 'win32' diff --git a/resources/icon.png b/resources/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cf9e8b2c87b5c18ac0b26913af6fd3ed00ec3bfb GIT binary patch literal 35949 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

(|V7O%OOlsc*vU+P^72X!U7K_eX*CG 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 E`T9pxN5i1O>p>VAy6%lIREYyb! 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 Kl11VsAO0U5dJ04U literal 0 HcmV?d00001 diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json new file mode 100644 index 00000000..2f967b76 --- /dev/null +++ b/src/locales/en/translation.json @@ -0,0 +1,141 @@ +{ + "home": { + "featured": "Featured", + "recently_added": "Recently added", + "trending": "Trending", + "surprise_me": "Surprise me", + "no_results": "No results found" + }, + "sidebar": { + "catalogue": "Catalogue", + "downloads": "Downloads", + "settings": "Settings", + "my_library": "My library", + "downloading_metadata": "{{title}} (Downloading metadata…)", + "checking_files": "{{title}} ({{percentage}} - Checking files…)", + "paused": "{{title}} (Paused)", + "downloading": "{{title}} ({{percentage}} - Downloading…)", + "filter": "Filter library", + "follow_us": "Follow us", + "home": "Home" + }, + "header": { + "search": "Search", + "home": "Home", + "catalogue": "Catalogue", + "downloads": "Downloads", + "search_results": "Search results", + "settings": "Settings" + }, + "bottom_panel": { + "no_downloads_in_progress": "No downloads in progress", + "downloading_metadata": "Downloading {{title}} metadata…", + "checking_files": "Checking {{title}} files… ({{percentage}} complete)", + "downloading": "Downloading {{title}}… ({{percentage}} complete) - Conclusion {{eta}} - {{speed}}" + }, + "catalogue": { + "next_page": "Next page", + "previous_page": "Previous page" + }, + "game_details": { + "open_download_options": "Open download options", + "download_options_zero": "No download option", + "download_options_one": "{{count}} download option", + "download_options_other": "{{count}} download options", + "updated_at": "Updated {{updated_at}}", + "install": "Install", + "resume": "Resume", + "pause": "Pause", + "cancel": "Cancel", + "remove": "Remove", + "remove_from_list": "Remove", + "space_left_on_disk": "{{space}} left on disk", + "eta": "Conclusion {{eta}}", + "downloading_metadata": "Downloading metadata…", + "checking_files": "Checking files…", + "filter": "Filter repacks", + "requirements": "System requirements", + "minimum": "Minimum", + "recommended": "Recommended", + "no_minimum_requirements": "{{title}} doesn't provide minimum requirements information", + "no_recommended_requirements": "{{title}} doesn't provide recommended requirements information", + "paused_progress": "{{progress}} (Paused)", + "release_date": "Released in {{date}}", + "publisher": "Published by {{publisher}}", + "copy_link_to_clipboard": "Copy link", + "copied_link_to_clipboard": "Link copied", + "hours": "hours", + "minutes": "minutes", + "accuracy": "{{accuracy}}% accuracy", + "add_to_library": "Add to library", + "remove_from_library": "Remove from library", + "no_downloads": "No downloads available", + "play_time": "Played for {{amount}}", + "last_time_played": "Last played {{period}}", + "not_played_yet": "You haven't played {{title}} yet", + "next_suggestion": "Next suggestion", + "play": "Play", + "deleting": "Deleting installer…", + "close": "Close", + "playing_now": "Playing now" + }, + "activation": { + "title": "Activate Hydra", + "installation_id": "Installation ID:", + "enter_activation_code": "Enter your activation code", + "message": "If you don't know where to ask for this, then you shouldn't have this.", + "activate": "Activate", + "loading": "Loading…" + }, + "downloads": { + "resume": "Resume", + "pause": "Pause", + "eta": "Conclusion {{eta}}", + "paused": "Paused", + "verifying": "Verifying…", + "completed_at": "Completed in {{date}}", + "completed": "Completed", + "cancelled": "Cancelled", + "download_again": "Download again", + "cancel": "Cancel", + "filter": "Filter downloaded games", + "remove": "Remove", + "downloading_metadata": "Downloading metadata…", + "checking_files": "Checking files…", + "starting_download": "Starting download…", + "deleting": "Deleting installer…", + "delete": "Remove installer", + "remove_from_list": "Remove", + "delete_modal_title": "Are you sure?", + "delete_modal_description": "This will remove all the installation files from your computer", + "install": "Install" + }, + "settings": { + "downloads_path": "Downloads path", + "change": "Update", + "notifications": "Notifications", + "enable_download_notifications": "When a download is complete", + "enable_repack_list_notifications": "When a new repack is added", + "telemetry": "Telemetry", + "telemetry_description": "Enable anonymous usage statistics" + }, + "notifications": { + "download_complete": "Download complete", + "game_ready_to_install": "{{title}} is ready to install", + "repack_list_updated": "Repack list updated", + "repack_count_one": "{{count}} repack added", + "repack_count_other": "{{count}} repacks added" + }, + "system_tray": { + "open": "Open Hydra", + "quit": "Quit" + }, + "game_card": { + "no_downloads": "No downloads available" + }, + "binary_not_found_modal": { + "title": "Programs not installed", + "description": "Wine or Lutris executables were not found on your system", + "instructions": "Check the correct way to install any of them on your Linux distro so that the game can run normally" + } +} diff --git a/src/locales/es/translation.json b/src/locales/es/translation.json new file mode 100644 index 00000000..d28fccc4 --- /dev/null +++ b/src/locales/es/translation.json @@ -0,0 +1,141 @@ +{ + "home": { + "featured": "Destacado", + "recently_added": "Recién Añadidos", + "trending": "Tendencias", + "surprise_me": "¡Sorpréndeme!", + "no_results": "No se encontraron resultados" + }, + "sidebar": { + "catalogue": "Catálogo", + "downloads": "Descargas", + "settings": "Ajustes", + "my_library": "Mi biblioteca", + "downloading_metadata": "{{title}} (Descargando metadatos…)", + "checking_files": "{{title}} ({{percentage}} - Analizando archivos…)", + "paused": "{{title}} (Pausado)", + "downloading": "{{title}} ({{percentage}} - Descargando…)", + "filter": "Filtrar biblioteca", + "home": "Hogar", + "follow_us": "Síganos" + }, + "header": { + "search": "Buscar", + "catalogue": "Catálogo", + "downloads": "Descargas", + "search_results": "Resultados de búsqueda", + "settings": "Ajustes", + "home": "Início" + }, + "bottom_panel": { + "no_downloads_in_progress": "Sin descargas en progreso", + "downloading_metadata": "Descargando metadatos de {{title}}…", + "checking_files": "Analizando archivos de {{title}} - ({{percentage}} completado)", + "downloading": "Descargando {{title}}… ({{percentage}} completado) - Finalizando {{eta}} - {{speed}}" + }, + "game_details": { + "open_download_options": "Ver opciones de descargas", + "download_options_zero": "No hay opciones de descargas disponibles", + "download_options_one": "{{count}} opción de descarga", + "download_options_other": "{{count}} opciones de descargas", + "updated_at": "Actualizado el {{updated_at}}", + "resume": "Continuar", + "pause": "Pausa", + "cancel": "Cancelar", + "remove": "Eliminar", + "remove_from_list": "Quitar", + "space_left_on_disk": "{{space}} restantes en el disco", + "eta": "Finalizando {{eta}}", + "downloading_metadata": "Descargando metadatos…", + "checking_files": "Analizando archivos…", + "filter": "Filtrar repacks", + "requirements": "Requisitos del Sistema", + "minimum": "Mínimos", + "recommended": "Recomendados", + "no_minimum_requirements": "Sin requisitos mínimos para {{title}}", + "no_recommended_requirements": "{{title}} no tiene requisitos recomendados", + "paused_progress": "{{progress}} (Pausado)", + "release_date": "Fecha de lanzamiento {{date}}", + "publisher": "Publicado por {{publisher}}", + "copy_link_to_clipboard": "Copiar enlace", + "copied_link_to_clipboard": "Enlace copiado", + "hours": "horas", + "minutes": "minutos", + "accuracy": "{{accuracy}}% precisión", + "add_to_library": "Agregar a la biblioteca", + "remove_from_library": "Eliminar de la biblioteca", + "no_downloads": "No hay descargas disponibles", + "next_suggestion": "Siguiente sugerencia", + "play_time": "Jugado por {{cantidad}}", + "install": "Instalar", + "play": "Jugar", + "not_played_yet": "Aún no has jugado a {{title}}", + "close": "Cerca", + "deleting": "Eliminando instalador…", + "playing_now": "Jugando ahora", + "last_time_played": "Jugado por última vez {{period}}" + }, + "activation": { + "title": "Activar Hydra", + "installation_id": "ID de la Instalación:", + "enter_activation_code": "Introduce tu código de activación", + "message": "Si no sabes donde obtener el código, no deberías de tener esto.", + "activate": "Activar", + "loading": "Cargando…" + }, + "downloads": { + "resume": "Resumir", + "pause": "Pausa", + "eta": "Finalizando {{eta}}", + "paused": "En Pausa", + "verifying": "Verificando…", + "completed_at": "Completado el {{date}}", + "completed": "Completado", + "cancelled": "Cancelado", + "download_again": "Descargar de nuevo", + "cancel": "Cancelar", + "filter": "Buscar juegos descargados", + "remove": "Eliminar", + "downloading_metadata": "Descargando metadatos…", + "checking_files": "Verificando archivos…", + "starting_download": "Iniciando descarga…", + "remove_from_list": "Eliminar", + "delete": "Quitar instalador", + "delete_modal_description": "Esto eliminará todos los archivos de instalación de su computadora.", + "delete_modal_title": "¿Está seguro?", + "deleting": "Eliminando instalador…", + "install": "Instalar" + }, + "settings": { + "downloads_path": "Ruta de descarga", + "change": "Cambiar", + "notifications": "Notificaciones", + "enable_download_notifications": "Cuando se completa una descarga", + "enable_repack_list_notifications": "Cuando se añade un repack nuevo", + "telemetry": "Telemetria", + "telemetry_description": "Habilitar estadísticas de uso anónimas" + }, + "notifications": { + "download_complete": "Descarga completada", + "game_ready_to_install": "{{title}} está listo para instalarse", + "repack_list_updated": "Lista de repacks actualizadas", + "repack_count_one": "{{count}} repack ha sido añadido", + "repack_count_other": "{{count}} repacks añadidos" + }, + "system_tray": { + "open": "Abrir Hydra", + "quit": "Salir" + }, + "game_card": { + "no_downloads": "No hay descargas disponibles" + }, + "binary_not_found_modal": { + "title": "Programas no instalados", + "description": "Los ejecutables de Wine o Lutris no se encontraron en su sistema", + "instructions": "Comprueba la forma correcta de instalar cualquiera de ellos en tu distro Linux para que el juego pueda ejecutarse con normalidad" + }, + "catalogue": { + "next_page": "Siguiente página", + "previous_page": "Pagina anterior" + } +} diff --git a/src/locales/fr/translation.json b/src/locales/fr/translation.json new file mode 100644 index 00000000..e3d2bd3d --- /dev/null +++ b/src/locales/fr/translation.json @@ -0,0 +1,141 @@ +{ + "home": { + "featured": "En vedette", + "recently_added": "Récemment ajouté", + "trending": "Tendance", + "surprise_me": "Surprenez-moi", + "no_results": "Aucun résultat trouvé" + }, + "sidebar": { + "catalogue": "Catalogue", + "downloads": "Téléchargements", + "settings": "Paramètres", + "my_library": "Ma bibliothèque", + "downloading_metadata": "{{title}} (Téléchargement des métadonnées…)", + "checking_files": "{{title}} ({{percentage}} - Vérification des fichiers…)", + "paused": "{{title}} (En pause)", + "downloading": "{{title}} ({{percentage}} - Téléchargement en cours…)", + "filter": "Filtrer la bibliothèque", + "home": "Page d’accueil", + "follow_us": "Suivez-nous" + }, + "header": { + "search": "Recherche", + "catalogue": "Catalogue", + "downloads": "Téléchargements", + "search_results": "Résultats de la recherche", + "settings": "Paramètres", + "home": "Maison" + }, + "bottom_panel": { + "no_downloads_in_progress": "Aucun téléchargement en cours", + "downloading_metadata": "Téléchargement des métadonnées de {{title}}…", + "checking_files": "Vérification des fichiers de {{title}}… ({{percentage}} complet)", + "downloading": "Téléchargement de {{title}}… ({{percentage}} complet) - Conclusion dans {{eta}} - {{speed}}" + }, + "game_details": { + "open_download_options": "Ouvrir les options de téléchargement", + "download_options_zero": "Aucune option de téléchargement", + "download_options_one": "{{count}} option de téléchargement", + "download_options_other": "{{count}} options de téléchargement", + "updated_at": "Mis à jour le {{updated_at}}", + "resume": "Reprendre", + "pause": "Pause", + "cancel": "Annuler", + "remove": "Supprimer", + "remove_from_list": "Retirer", + "space_left_on_disk": "{{space}} restant sur le disque", + "eta": "Conclusion dans {{eta}}", + "downloading_metadata": "Téléchargement des métadonnées en cours…", + "checking_files": "Vérification des fichiers…", + "filter": "Filtrer les réductions", + "requirements": "Configuration requise", + "minimum": "Minimum", + "recommended": "Recommandée", + "no_minimum_requirements": "{{title}} ne fournit pas d'informations sur les exigences minimales", + "no_recommended_requirements": "{{title}} ne fournit pas d'informations sur les exigences recommandées", + "paused_progress": "{{progress}} (En pause)", + "release_date": "Sorti le {{date}}", + "publisher": "Édité par {{publisher}}", + "copy_link_to_clipboard": "Copier le lien", + "copied_link_to_clipboard": "Lien copié", + "hours": "heures", + "minutes": "minutes", + "accuracy": "{{accuracy}}% précision", + "add_to_library": "Ajouter à la bibliothèque", + "remove_from_library": "Supprimer de la bibliothèque", + "no_downloads": "Aucun téléchargement disponible", + "next_suggestion": "Suggestion suivante", + "play_time": "Joué pour {{montant}}", + "install": "Installer", + "play": "Jouer", + "not_played_yet": "Vous n'avez pas encore joué à {{title}}", + "close": "Fermer", + "deleting": "Suppression du programme d'installation…", + "playing_now": "Je joue maintenant", + "last_time_played": "Dernière lecture {{période}}" + }, + "activation": { + "title": "Activer Hydra", + "installation_id": "ID d'installation :", + "enter_activation_code": "Entrez votre code d'activation", + "message": "Si vous ne savez pas où demander cela, vous ne devriez pas l'avoir.", + "activate": "Activer", + "loading": "Chargement en cours…" + }, + "downloads": { + "resume": "Reprendre", + "pause": "Pause", + "eta": "Conclusion dans {{eta}}", + "paused": "En pause", + "verifying": "Vérification en cours…", + "completed_at": "Terminé en {{date}}", + "completed": "Terminé", + "cancelled": "Annulé", + "download_again": "Télécharger à nouveau", + "cancel": "Annuler", + "filter": "Filtrer les jeux téléchargés", + "remove": "Supprimer", + "downloading_metadata": "Téléchargement des métadonnées en cours…", + "checking_files": "Vérification des fichiers…", + "starting_download": "Démarrage du téléchargement…", + "remove_from_list": "Retirer", + "delete": "Supprimer le programme d'installation", + "delete_modal_description": "Cela supprimera tous les fichiers d'installation de votre ordinateur", + "delete_modal_title": "Es-tu sûr?", + "deleting": "Suppression du programme d'installation…", + "install": "Installer" + }, + "settings": { + "downloads_path": "Chemin des téléchargements", + "change": "Mettre à jour", + "notifications": "Notifications", + "enable_download_notifications": "Quand un téléchargement est terminé", + "enable_repack_list_notifications": "Quand une nouvelle réduction est ajoutée", + "telemetry": "Télémétrie", + "telemetry_description": "Activer les statistiques d'utilisation anonymes" + }, + "notifications": { + "download_complete": "Téléchargement terminé", + "game_ready_to_install": "{{title}} est prêt à être installé", + "repack_list_updated": "Liste de réductions mise à jour", + "repack_count_one": "{{count}} réduction ajoutée", + "repack_count_other": "{{count}} réductions ajoutées" + }, + "system_tray": { + "open": "Ouvrir Hydra", + "quit": "Quitter" + }, + "game_card": { + "no_downloads": "Aucun téléchargement disponible" + }, + "binary_not_found_modal": { + "description": "Les exécutables Wine ou Lutris sont introuvables sur votre système", + "instructions": "Vérifiez la bonne façon d'installer l'un d'entre eux sur votre distribution Linux afin que le jeu puisse fonctionner normalement", + "title": "Programmes non installés" + }, + "catalogue": { + "next_page": "Page suivante", + "previous_page": "Page précédente" + } +} diff --git a/src/locales/index.ts b/src/locales/index.ts new file mode 100644 index 00000000..98a93c78 --- /dev/null +++ b/src/locales/index.ts @@ -0,0 +1,4 @@ +export { default as en } from "./en/translation.json"; +export { default as pt } from "./pt/translation.json"; +export { default as es } from "./es/translation.json"; +export { default as fr } from "./fr/translation.json"; diff --git a/src/locales/pt/translation.json b/src/locales/pt/translation.json new file mode 100644 index 00000000..3498ad83 --- /dev/null +++ b/src/locales/pt/translation.json @@ -0,0 +1,141 @@ +{ + "home": { + "featured": "Destaque", + "recently_added": "Novidades", + "trending": "Populares", + "surprise_me": "Me surpreenda", + "no_results": "Nenhum resultado encontrado" + }, + "sidebar": { + "catalogue": "Catálogo", + "downloads": "Downloads", + "settings": "Configurações", + "my_library": "Minha biblioteca", + "downloading_metadata": "{{title}} (Baixando metadados…)", + "checking_files": "{{title}} ({{percentage}} - Verificando arquivos…)", + "paused": "{{title}} (Pausado)", + "downloading": "{{title}} ({{percentage}} - Baixando…)", + "filter": "Filtrar biblioteca", + "home": "Início", + "follow_us": "Acompanhe-nos" + }, + "header": { + "search": "Buscar", + "catalogue": "Catálogo", + "downloads": "Downloads", + "search_results": "Resultados da busca", + "settings": "Configurações", + "home": "Início" + }, + "bottom_panel": { + "no_downloads_in_progress": "Sem downloads em andamento", + "downloading_metadata": "Baixando metadados de {{title}}…", + "checking_files": "Verificando arquivos de {{title}}… ({{percentage}} completo)", + "downloading": "Baixando {{title}}… ({{percentage}} completo) - Conclusão {{eta}} - {{speed}}" + }, + "game_details": { + "open_download_options": "Ver opções de download", + "download_options_zero": "Sem opções de download", + "download_options_one": "{{count}} opção de download", + "download_options_other": "{{count}} opções de download", + "updated_at": "Atualizado {{updated_at}}", + "resume": "Resumir", + "pause": "Pausar", + "cancel": "Cancelar", + "remove": "Remover", + "remove_from_list": "Remover", + "space_left_on_disk": "{{space}} livres em disco", + "eta": "Conclusão {{eta}}", + "downloading_metadata": "Baixando metadados…", + "checking_files": "Verificando arquivos…", + "filter": "Filtrar repacks", + "requirements": "Requisitos do sistema", + "minimum": "Mínimos", + "recommended": "Recomendados", + "no_minimum_requirements": "{{title}} não possui informações de requisitos mínimos", + "no_recommended_requirements": "{{title}} não possui informações de requisitos recomendados", + "paused_progress": "{{progress}} (Pausado)", + "release_date": "Lançado em {{date}}", + "publisher": "Publicado por {{publisher}}", + "copy_link_to_clipboard": "Copiar link", + "copied_link_to_clipboard": "Link copiado", + "hours": "horas", + "minutes": "minutos", + "accuracy": "{{accuracy}}% de precisão", + "add_to_library": "Adicionar à biblioteca", + "remove_from_library": "Remover da biblioteca", + "no_downloads": "Nenhum download disponível", + "play_time": "Jogado por {{amount}}", + "next_suggestion": "Próxima sugestão", + "install": "Instalar", + "last_time_played": "Jogou por último {{period}}", + "play": "Jogar", + "not_played_yet": "Você ainda não jogou {{title}}", + "close": "Fechar", + "deleting": "Excluindo instalador…", + "playing_now": "Jogando agora" + }, + "activation": { + "title": "Ativação", + "installation_id": "ID da instalação:", + "enter_activation_code": "Insira seu código de ativação", + "message": "Se você não sabe onde conseguir o código, talvez você não devesse estar aqui.", + "activate": "Ativar", + "loading": "Carregando…" + }, + "downloads": { + "resume": "Resumir", + "pause": "Pausar", + "eta": "Conclusão {{eta}}", + "paused": "Pausado", + "verifying": "Verificando…", + "completed_at": "Concluído em {{date}}", + "completed": "Concluído", + "cancelled": "Cancelado", + "download_again": "Baixar novamente", + "cancel": "Cancelar", + "filter": "Filtrar jogos baixados", + "remove": "Remover", + "downloading_metadata": "Baixando metadados…", + "checking_files": "Verificando arquivos…", + "starting_download": "Iniciando download…", + "remove_from_list": "Remover", + "delete": "Remover instalador", + "delete_modal_description": "Isso removerá todos os arquivos de instalação do seu computador", + "delete_modal_title": "Tem certeza?", + "deleting": "Excluindo instalador…", + "install": "Instalar" + }, + "settings": { + "downloads_path": "Diretório dos downloads", + "change": "Mudar", + "notifications": "Notificações", + "enable_download_notifications": "Quando um download for concluído", + "enable_repack_list_notifications": "Quando a lista de repacks for atualizada", + "telemetry": "Telemetria", + "telemetry_description": "Habilitar estatísticas de uso anônimas" + }, + "notifications": { + "download_complete": "Download concluído", + "game_ready_to_install": "{{title}} está pronto para ser instalado", + "repack_list_updated": "Lista de repacks atualizada", + "repack_count_one": "{{count}} novo repack", + "repack_count_other": "{{count}} novos repacks" + }, + "system_tray": { + "open": "Abrir Hydra", + "quit": "Fechar" + }, + "game_card": { + "no_downloads": "Sem downloads disponíveis" + }, + "binary_not_found_modal": { + "title": "Programas não instalados", + "description": "Não foram encontrados no seu sistema os executáveis do Wine ou Lutris", + "instructions": "Verifique a forma correta de instalar algum deles na sua distro Linux para que o jogo possa ser executado normalmente" + }, + "catalogue": { + "next_page": "Próxima página", + "previous_page": "Página anterior" + } +} diff --git a/src/main/constants.ts b/src/main/constants.ts new file mode 100644 index 00000000..43d9d44e --- /dev/null +++ b/src/main/constants.ts @@ -0,0 +1,55 @@ +import { app } from "electron"; +import os from "node:os"; +import path from "node:path"; + +export const repackersOn1337x = [ + "DODI", + "FitGirl", + "0xEMPRESS", + "KaOsKrew", + "TinyRepacks", +] as const; + +export const repackers = [ + ...repackersOn1337x, + "Xatab", + "CPG", + "TinyRepacks", + "GOG", + "onlinefix", +] as const; + +export const months = [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", +]; + +export enum GameStatus { + Seeding = "seeding", + Downloading = "downloading", + Paused = "paused", + CheckingFiles = "checking_files", + DownloadingMetadata = "downloading_metadata", + Cancelled = "cancelled", +} + +export const defaultDownloadsPath = path.join(os.homedir(), "downloads"); + +export const databasePath = path.join( + app.getPath("appData"), + app.getName(), + "hydra.db" +); + +export const INSTALLATION_ID_LENGTH = 6; +export const ACTIVATION_KEY_MULTIPLIER = 7; diff --git a/src/main/data-source.ts b/src/main/data-source.ts new file mode 100644 index 00000000..a2ca976c --- /dev/null +++ b/src/main/data-source.ts @@ -0,0 +1,35 @@ +import { DataSource } from "typeorm"; +import { + Game, + GameShopCache, + ImageCache, + Repack, + RepackerFriendlyName, + UserPreferences, + MigrationScript, + SteamGame, +} from "@main/entity"; +import type { SqliteConnectionOptions } from "typeorm/driver/sqlite/SqliteConnectionOptions"; + +import { databasePath } from "./constants"; + +export const createDataSource = (options: Partial) => + new DataSource({ + type: "better-sqlite3", + database: databasePath, + entities: [ + Game, + ImageCache, + Repack, + RepackerFriendlyName, + UserPreferences, + GameShopCache, + MigrationScript, + SteamGame, + ], + ...options, + }); + +export const dataSource = createDataSource({ + synchronize: true, +}); diff --git a/src/main/entity/game-shop-cache.entity.ts b/src/main/entity/game-shop-cache.entity.ts new file mode 100644 index 00000000..f83e1b0c --- /dev/null +++ b/src/main/entity/game-shop-cache.entity.ts @@ -0,0 +1,32 @@ +import { + Entity, + PrimaryColumn, + Column, + CreateDateColumn, + UpdateDateColumn, +} from "typeorm"; +import type { GameShop } from "@types"; + +@Entity("game_shop_cache") +export class GameShopCache { + @PrimaryColumn("text", { unique: true }) + objectID: string; + + @Column("text") + shop: GameShop; + + @Column("text", { nullable: true }) + serializedData: string; + + @Column("text", { nullable: true }) + howLongToBeatSerializedData: string; + + @Column("text", { nullable: true }) + language: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; +} diff --git a/src/main/entity/game.entity.ts b/src/main/entity/game.entity.ts new file mode 100644 index 00000000..b1598b8b --- /dev/null +++ b/src/main/entity/game.entity.ts @@ -0,0 +1,69 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, + OneToOne, + JoinColumn, +} from "typeorm"; +import type { GameShop } from "@types"; +import { Repack } from "./repack.entity"; + +@Entity("game") +export class Game { + @PrimaryGeneratedColumn() + id: number; + + @Column("text", { unique: true }) + objectID: string; + + @Column("text") + title: string; + + @Column("text") + iconUrl: string; + + @Column("text", { nullable: true }) + folderName: string | null; + + @Column("text", { nullable: true }) + downloadPath: string | null; + + @Column("text", { nullable: true }) + executablePath: string | null; + + @Column("int", { default: 0 }) + playTimeInMilliseconds: number; + + @Column("text") + shop: GameShop; + + @Column("text", { nullable: true }) + status: string; + + @Column("float", { default: 0 }) + progress: number; + + @Column("float", { default: 0 }) + fileVerificationProgress: number; + + @Column("int", { default: 0 }) + bytesDownloaded: number; + + @Column("text", { nullable: true }) + lastTimePlayed: Date | null; + + @Column("float", { default: 0 }) + fileSize: number; + + @OneToOne(() => Repack, { nullable: true }) + @JoinColumn() + repack: Repack; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; +} diff --git a/src/main/entity/image-cache.entity.ts b/src/main/entity/image-cache.entity.ts new file mode 100644 index 00000000..a795c0d8 --- /dev/null +++ b/src/main/entity/image-cache.entity.ts @@ -0,0 +1,25 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, +} from "typeorm"; + +@Entity("image_cache") +export class ImageCache { + @PrimaryGeneratedColumn() + id: number; + + @Column("text", { unique: true }) + url: string; + + @Column("text") + data: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; +} diff --git a/src/main/entity/index.ts b/src/main/entity/index.ts new file mode 100644 index 00000000..e93ba92e --- /dev/null +++ b/src/main/entity/index.ts @@ -0,0 +1,8 @@ +export * from "./game.entity"; +export * from "./image-cache.entity"; +export * from "./repack.entity"; +export * from "./repacker-friendly-name.entity"; +export * from "./user-preferences.entity"; +export * from "./game-shop-cache.entity"; +export * from "./migration-script.entity"; +export * from "./steam-game.entity"; diff --git a/src/main/entity/migration-script.entity.ts b/src/main/entity/migration-script.entity.ts new file mode 100644 index 00000000..d4166b71 --- /dev/null +++ b/src/main/entity/migration-script.entity.ts @@ -0,0 +1,22 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, +} from "typeorm"; + +@Entity("migration_script") +export class MigrationScript { + @PrimaryGeneratedColumn() + id: number; + + @Column("text", { unique: true }) + version: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; +} diff --git a/src/main/entity/repack.entity.ts b/src/main/entity/repack.entity.ts new file mode 100644 index 00000000..b87925a7 --- /dev/null +++ b/src/main/entity/repack.entity.ts @@ -0,0 +1,37 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, +} from "typeorm"; + +@Entity("repack") +export class Repack { + @PrimaryGeneratedColumn() + id: number; + + @Column("text", { unique: true }) + title: string; + + @Column("text", { unique: true }) + magnet: string; + + @Column("int") + page: number; + + @Column("text") + repacker: string; + + @Column("text") + fileSize: string; + + @Column("datetime") + uploadDate: Date | string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; +} diff --git a/src/main/entity/repacker-friendly-name.entity.ts b/src/main/entity/repacker-friendly-name.entity.ts new file mode 100644 index 00000000..16b82e02 --- /dev/null +++ b/src/main/entity/repacker-friendly-name.entity.ts @@ -0,0 +1,25 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, +} from "typeorm"; + +@Entity("repacker_friendly_name") +export class RepackerFriendlyName { + @PrimaryGeneratedColumn() + id: number; + + @Column("text", { unique: true }) + name: string; + + @Column("text") + friendlyName: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; +} diff --git a/src/main/entity/steam-game.entity.ts b/src/main/entity/steam-game.entity.ts new file mode 100644 index 00000000..775372fb --- /dev/null +++ b/src/main/entity/steam-game.entity.ts @@ -0,0 +1,10 @@ +import { Column, Entity, PrimaryColumn } from "typeorm"; + +@Entity("steam_game") +export class SteamGame { + @PrimaryColumn() + id: number; + + @Column() + name: string; +} diff --git a/src/main/entity/user-preferences.entity.ts b/src/main/entity/user-preferences.entity.ts new file mode 100644 index 00000000..40f1a26a --- /dev/null +++ b/src/main/entity/user-preferences.entity.ts @@ -0,0 +1,34 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, +} from "typeorm"; + +@Entity("user_preferences") +export class UserPreferences { + @PrimaryGeneratedColumn() + id: number; + + @Column("text", { nullable: true }) + downloadsPath: string | null; + + @Column("text", { default: "en" }) + language: string; + + @Column("boolean", { default: false }) + downloadNotificationsEnabled: boolean; + + @Column("boolean", { default: false }) + repackUpdatesNotificationsEnabled: boolean; + + @Column("boolean", { default: true }) + telemetryEnabled: boolean; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; +} diff --git a/src/main/events/catalogue/get-catalogue.ts b/src/main/events/catalogue/get-catalogue.ts new file mode 100644 index 00000000..3e802c92 --- /dev/null +++ b/src/main/events/catalogue/get-catalogue.ts @@ -0,0 +1,117 @@ +import { formatName, getSteamAppAsset, repackerFormatter } from "@main/helpers"; +import type { CatalogueCategory, CatalogueEntry, GameShop } from "@types"; + +import { stateManager } from "@main/state-manager"; +import { searchGames, searchRepacks } from "../helpers/search-games"; +import { registerEvent } from "../register-event"; +import { requestSteam250 } from "@main/services"; + +const repacks = stateManager.getValue("repacks"); + +interface GetStringForLookup { + (index: number): string; +} + +const getCatalogue = async ( + _event: Electron.IpcMainInvokeEvent, + category: CatalogueCategory +) => { + const getStringForLookup = (index: number): string => { + const repack = repacks[index]; + const formatter = + repackerFormatter[repack.repacker as keyof typeof repackerFormatter]; + + return formatName(formatter(repack.title)); + }; + + if (!repacks.length) return []; + + const resultSize = 12; + + if (category === "trending") { + return getTrendingCatalogue(resultSize); + } else { + return getRecentlyAddedCatalogue( + resultSize, + resultSize, + getStringForLookup + ); + } +}; + +const getTrendingCatalogue = async ( + resultSize: number +): Promise => { + const results: CatalogueEntry[] = []; + const trendingGames = await requestSteam250("/30day"); + for ( + let i = 0; + i < trendingGames.length && results.length < resultSize; + i++ + ) { + if (!trendingGames[i]) continue; + + const { title, objectID } = trendingGames[i]; + const repacks = searchRepacks(title); + + if (title && repacks.length) { + const catalogueEntry = { + objectID, + title, + shop: "steam" as GameShop, + cover: getSteamAppAsset("library", objectID), + }; + + results.push({ ...catalogueEntry, repacks }); + } + } + return results; +}; + +const getRecentlyAddedCatalogue = async ( + resultSize: number, + requestSize: number, + getStringForLookup: GetStringForLookup +): Promise => { + let lookupRequest = []; + const results: CatalogueEntry[] = []; + + for (let i = 0; results.length < resultSize; i++) { + const stringForLookup = getStringForLookup(i); + + if (!stringForLookup) { + i++; + continue; + } + + lookupRequest.push(searchGames({ query: stringForLookup })); + + if (lookupRequest.length < requestSize) { + continue; + } + + const games = (await Promise.all(lookupRequest)).map((value) => + value.at(0) + ); + + for (const game of games) { + const isAlreadyIncluded = results.some( + (result) => result.objectID === game?.objectID + ); + + if (!game || !game.repacks.length || isAlreadyIncluded) { + continue; + } + + results.push(game); + } + lookupRequest = []; + } + + return results.slice(0, resultSize); +}; + +registerEvent(getCatalogue, { + name: "getCatalogue", + memoize: true, +}); diff --git a/src/main/events/catalogue/get-game-shop-details.ts b/src/main/events/catalogue/get-game-shop-details.ts new file mode 100644 index 00000000..61629242 --- /dev/null +++ b/src/main/events/catalogue/get-game-shop-details.ts @@ -0,0 +1,72 @@ +import { gameShopCacheRepository } from "@main/repository"; +import { getSteamAppDetails } from "@main/services"; + +import type { ShopDetails, GameShop, SteamAppDetails } from "@types"; + +import { registerEvent } from "../register-event"; +import { searchRepacks } from "../helpers/search-games"; + +const getGameShopDetails = async ( + _event: Electron.IpcMainInvokeEvent, + objectID: string, + shop: GameShop, + language: string +): Promise => { + if (shop === "steam") { + const cachedData = await gameShopCacheRepository.findOne({ + where: { objectID, language }, + }); + + const result = Promise.all([ + getSteamAppDetails(objectID, "english"), + getSteamAppDetails(objectID, language), + ]).then(([appDetails, localizedAppDetails]) => { + if (appDetails && localizedAppDetails) { + gameShopCacheRepository.upsert( + { + objectID, + shop: "steam", + language, + serializedData: JSON.stringify({ + ...localizedAppDetails, + name: appDetails.name, + }), + }, + ["objectID"] + ); + } + + return [appDetails, localizedAppDetails]; + }); + + const cachedGame = cachedData?.serializedData + ? (JSON.parse(cachedData?.serializedData) as SteamAppDetails) + : null; + + if (cachedGame) { + return { + ...cachedGame, + repacks: searchRepacks(cachedGame.name), + objectID, + } as ShopDetails; + } + + return result.then(([appDetails, localizedAppDetails]) => { + if (!appDetails || !localizedAppDetails) return null; + + return { + ...localizedAppDetails, + name: appDetails.name, + repacks: searchRepacks(appDetails.name), + objectID, + } as ShopDetails; + }); + } + + throw new Error("Not implemented"); +}; + +registerEvent(getGameShopDetails, { + name: "getGameShopDetails", + memoize: true, +}); diff --git a/src/main/events/catalogue/get-games.ts b/src/main/events/catalogue/get-games.ts new file mode 100644 index 00000000..75c6b62d --- /dev/null +++ b/src/main/events/catalogue/get-games.ts @@ -0,0 +1,44 @@ +import type { CatalogueEntry, GameShop } from "@types"; + +import { registerEvent } from "../register-event"; +import { searchRepacks } from "../helpers/search-games"; +import { stateManager } from "@main/state-manager"; +import { getSteamAppAsset } from "@main/helpers"; + +const steamGames = stateManager.getValue("steamGames"); + +const getGames = async ( + _event: Electron.IpcMainInvokeEvent, + take?: number, + cursor = 0 +): Promise<{ results: CatalogueEntry[]; cursor: number }> => { + const results: CatalogueEntry[] = []; + + let i = 0 + cursor; + + if (!steamGames.length) return []; + + while (results.length < take) { + const game = steamGames[i]; + const repacks = searchRepacks(game.name); + + if (repacks.length) { + results.push({ + objectID: String(game.id), + title: game.name, + shop: "steam" as GameShop, + cover: getSteamAppAsset("library", String(game.id)), + repacks, + }); + } + + i++; + } + + return { results, cursor: i }; +}; + +registerEvent(getGames, { + name: "getGames", + memoize: true, +}); diff --git a/src/main/events/catalogue/get-how-long-to-beat.ts b/src/main/events/catalogue/get-how-long-to-beat.ts new file mode 100644 index 00000000..601a3bf3 --- /dev/null +++ b/src/main/events/catalogue/get-how-long-to-beat.ts @@ -0,0 +1,48 @@ +import type { GameShop, HowLongToBeatCategory } from "@types"; +import { getHowLongToBeatGame, searchHowLongToBeat } from "@main/services"; + +import { registerEvent } from "../register-event"; +import { gameShopCacheRepository } from "@main/repository"; + +const getHowLongToBeat = async ( + _event: Electron.IpcMainInvokeEvent, + objectID: string, + shop: GameShop, + title: string +): Promise => { + const searchHowLongToBeatPromise = searchHowLongToBeat(title); + + const gameShopCache = await gameShopCacheRepository.findOne({ + where: { objectID, shop }, + }); + + const howLongToBeatCachedData = gameShopCache?.howLongToBeatSerializedData + ? JSON.parse(gameShopCache?.howLongToBeatSerializedData) + : null; + if (howLongToBeatCachedData) return howLongToBeatCachedData; + + return searchHowLongToBeatPromise.then(async (response) => { + const game = response.data.find( + (game) => game.profile_steam === Number(objectID) + ); + + if (!game) return null; + const howLongToBeat = await getHowLongToBeatGame(String(game.game_id)); + + gameShopCacheRepository.upsert( + { + objectID, + shop, + howLongToBeatSerializedData: JSON.stringify(howLongToBeat), + }, + ["objectID"] + ); + + return howLongToBeat; + }); +}; + +registerEvent(getHowLongToBeat, { + name: "getHowLongToBeat", + memoize: true, +}); diff --git a/src/main/events/catalogue/get-random-game.ts b/src/main/events/catalogue/get-random-game.ts new file mode 100644 index 00000000..335fa026 --- /dev/null +++ b/src/main/events/catalogue/get-random-game.ts @@ -0,0 +1,29 @@ +import { shuffle } from "lodash-es"; + +import { getRandomSteam250List } from "@main/services"; + +import { registerEvent } from "../register-event"; +import { searchGames, searchRepacks } from "../helpers/search-games"; +import { formatName } from "@main/helpers"; + +const getRandomGame = async (_event: Electron.IpcMainInvokeEvent) => { + return getRandomSteam250List().then(async (games) => { + const shuffledList = shuffle(games); + + for (const game of shuffledList) { + const repacks = searchRepacks(formatName(game.title)); + + if (repacks.length) { + const results = await searchGames({ query: game.title }); + + if (results.length) { + return results[0].objectID; + } + } + } + }); +}; + +registerEvent(getRandomGame, { + name: "getRandomGame", +}); diff --git a/src/main/events/catalogue/search-games.ts b/src/main/events/catalogue/search-games.ts new file mode 100644 index 00000000..eb9c0640 --- /dev/null +++ b/src/main/events/catalogue/search-games.ts @@ -0,0 +1,11 @@ +import { registerEvent } from "../register-event"; +import { searchGames } from "../helpers/search-games"; + +registerEvent( + (_event: Electron.IpcMainInvokeEvent, query: string) => + searchGames({ query, take: 12 }), + { + name: "searchGames", + memoize: true, + } +); diff --git a/src/main/events/hardware/get-disk-free-space.ts b/src/main/events/hardware/get-disk-free-space.ts new file mode 100644 index 00000000..28dcafa2 --- /dev/null +++ b/src/main/events/hardware/get-disk-free-space.ts @@ -0,0 +1,11 @@ +import checkDiskSpace from "check-disk-space"; + +import { registerEvent } from "../register-event"; +import { getDownloadsPath } from "../helpers/get-downloads-path"; + +const getDiskFreeSpace = async (_event: Electron.IpcMainInvokeEvent) => + checkDiskSpace(await getDownloadsPath()); + +registerEvent(getDiskFreeSpace, { + name: "getDiskFreeSpace", +}); diff --git a/src/main/events/helpers/generate-lutris-yaml.ts b/src/main/events/helpers/generate-lutris-yaml.ts new file mode 100644 index 00000000..75c9786b --- /dev/null +++ b/src/main/events/helpers/generate-lutris-yaml.ts @@ -0,0 +1,44 @@ +import { Document as YMLDocument } from "yaml"; +import { Game } from "@main/entity"; +import path from "node:path"; + +export const generateYML = (game: Game) => { + const slugifiedGameTitle = game.title.replace(/\s/g, "-").toLocaleLowerCase(); + + const doc = new YMLDocument({ + name: game.title, + game_slug: slugifiedGameTitle, + slug: `${slugifiedGameTitle}-installer`, + version: "Installer", + runner: "wine", + script: { + game: { + prefix: "$GAMEDIR", + arch: "win64", + working_dir: "$GAMEDIR", + }, + installer: [ + { + task: { + name: "create_prefix", + arch: "win64", + prefix: "$GAMEDIR", + }, + }, + { + task: { + executable: path.join( + game.downloadPath, + game.folderName, + "setup.exe" + ), + name: "wineexec", + prefix: "$GAMEDIR", + }, + }, + ], + }, + }); + + return doc.toString(); +}; diff --git a/src/main/events/helpers/get-downloads-path.ts b/src/main/events/helpers/get-downloads-path.ts new file mode 100644 index 00000000..c78a0ede --- /dev/null +++ b/src/main/events/helpers/get-downloads-path.ts @@ -0,0 +1,15 @@ +import { userPreferencesRepository } from "@main/repository"; +import { defaultDownloadsPath } from "@main/constants"; + +export const getDownloadsPath = async () => { + const userPreferences = await userPreferencesRepository.findOne({ + where: { + id: 1, + }, + }); + + if (userPreferences && userPreferences.downloadsPath) + return userPreferences.downloadsPath; + + return defaultDownloadsPath; +}; diff --git a/src/main/events/helpers/search-games.ts b/src/main/events/helpers/search-games.ts new file mode 100644 index 00000000..ddba13ba --- /dev/null +++ b/src/main/events/helpers/search-games.ts @@ -0,0 +1,71 @@ +import flexSearch from "flexsearch"; +import { orderBy } from "lodash-es"; + +import type { GameRepack, GameShop, CatalogueEntry } from "@types"; + +import { formatName, getSteamAppAsset, repackerFormatter } from "@main/helpers"; +import { stateManager } from "@main/state-manager"; + +const { Index } = flexSearch; +const repacksIndex = new Index(); +const steamGamesIndex = new Index({ tokenize: "forward" }); + +const repacks = stateManager.getValue("repacks"); +const steamGames = stateManager.getValue("steamGames"); + +for (let i = 0; i < repacks.length; i++) { + const repack = repacks[i]; + const formatter = + repackerFormatter[repack.repacker as keyof typeof repackerFormatter]; + + repacksIndex.add(i, formatName(formatter(repack.title))); +} + +for (let i = 0; i < steamGames.length; i++) { + const steamGame = steamGames[i]; + steamGamesIndex.add(i, formatName(steamGame.name)); +} + +export const searchRepacks = (title: string): GameRepack[] => { + return orderBy( + repacksIndex + .search(formatName(title)) + .map((index) => repacks.at(index as number)!), + ["uploadDate"], + "desc" + ); +}; + +export interface SearchGamesArgs { + query?: string; + take?: number; + skip?: number; +} + +export const searchGames = async ({ + query, + take, + skip, +}: SearchGamesArgs): Promise => { + const results = steamGamesIndex + .search(formatName(query || ""), { limit: take, offset: skip }) + .map((index) => { + const result = steamGames.at(index as number)!; + + return { + objectID: String(result.id), + title: result.name, + shop: "steam" as GameShop, + cover: getSteamAppAsset("library", String(result.id)), + repacks: searchRepacks(result.name), + }; + }); + + return Promise.all(results).then((resultsWithRepacks) => + orderBy( + resultsWithRepacks, + [({ repacks }) => repacks.length, "repacks"], + ["desc"] + ) + ); +}; diff --git a/src/main/events/index.ts b/src/main/events/index.ts new file mode 100644 index 00000000..5eaceff5 --- /dev/null +++ b/src/main/events/index.ts @@ -0,0 +1,32 @@ +import { defaultDownloadsPath } from "@main/constants"; +import { app, ipcMain } from "electron"; + +import "./catalogue/get-catalogue"; +import "./catalogue/get-game-shop-details"; +import "./catalogue/get-games"; +import "./catalogue/get-how-long-to-beat"; +import "./catalogue/get-random-game"; +import "./catalogue/search-games"; +import "./hardware/get-disk-free-space"; +import "./library/add-game-to-library"; +import "./library/close-game"; +import "./library/delete-game-folder"; +import "./library/get-game-by-object-id"; +import "./library/get-library"; +import "./library/get-repackers-friendly-names"; +import "./library/open-game"; +import "./library/open-game-installer"; +import "./library/remove-game"; +import "./misc/get-or-cache-image"; +import "./misc/open-external"; +import "./misc/show-open-dialog"; +import "./torrenting/cancel-game-download"; +import "./torrenting/pause-game-download"; +import "./torrenting/resume-game-download"; +import "./torrenting/start-game-download"; +import "./user-preferences/get-user-preferences"; +import "./user-preferences/update-user-preferences"; + +ipcMain.handle("ping", () => "pong"); +ipcMain.handle("getVersion", () => app.getVersion()); +ipcMain.handle("getDefaultDownloadsPath", () => defaultDownloadsPath); diff --git a/src/main/events/library/add-game-to-library.ts b/src/main/events/library/add-game-to-library.ts new file mode 100644 index 00000000..abbba592 --- /dev/null +++ b/src/main/events/library/add-game-to-library.ts @@ -0,0 +1,29 @@ +import { gameRepository } from "@main/repository"; + +import { registerEvent } from "../register-event"; + +import type { GameShop } from "@types"; +import { getImageBase64 } from "@main/helpers"; +import { getSteamGameIconUrl } from "@main/services"; + +const addGameToLibrary = async ( + _event: Electron.IpcMainInvokeEvent, + objectID: string, + title: string, + gameShop: GameShop, + executablePath: string +) => { + const iconUrl = await getImageBase64(await getSteamGameIconUrl(objectID)); + + return gameRepository.insert({ + title, + iconUrl, + objectID, + shop: gameShop, + executablePath, + }); +}; + +registerEvent(addGameToLibrary, { + name: "addGameToLibrary", +}); diff --git a/src/main/events/library/close-game.ts b/src/main/events/library/close-game.ts new file mode 100644 index 00000000..0d556925 --- /dev/null +++ b/src/main/events/library/close-game.ts @@ -0,0 +1,35 @@ +import path from "node:path"; + +import { gameRepository } from "@main/repository"; + +import { registerEvent } from "../register-event"; +import { getProcesses } from "@main/helpers"; + +const closeGame = async ( + _event: Electron.IpcMainInvokeEvent, + gameId: number +) => { + const processes = await getProcesses(); + const game = await gameRepository.findOne({ where: { id: gameId } }); + + const gameProcess = processes.find((runningProcess) => { + const basename = path.win32.basename(game.executablePath); + const basenameWithoutExtension = path.win32.basename( + game.executablePath, + path.extname(game.executablePath) + ); + + if (process.platform === "win32") { + return runningProcess.name === basename; + } + + return [basename, basenameWithoutExtension].includes(runningProcess.name); + }); + + if (gameProcess) return process.kill(gameProcess.pid); + return false; +}; + +registerEvent(closeGame, { + name: "closeGame", +}); diff --git a/src/main/events/library/delete-game-folder.ts b/src/main/events/library/delete-game-folder.ts new file mode 100644 index 00000000..eaf791ed --- /dev/null +++ b/src/main/events/library/delete-game-folder.ts @@ -0,0 +1,47 @@ +import path from "node:path"; +import fs from "node:fs"; + +import { GameStatus } from "@main/constants"; +import { gameRepository } from "@main/repository"; + +import { getDownloadsPath } from "../helpers/get-downloads-path"; +import { logger } from "@main/services"; +import { registerEvent } from "../register-event"; + +const deleteGameFolder = async ( + _event: Electron.IpcMainInvokeEvent, + gameId: number +) => { + const game = await gameRepository.findOne({ + where: { + id: gameId, + status: GameStatus.Cancelled, + }, + }); + + if (!game) return; + + if (game.folderName) { + const folderPath = path.join(await getDownloadsPath(), game.folderName); + + if (fs.existsSync(folderPath)) { + return new Promise((resolve, reject) => { + fs.rm( + folderPath, + { recursive: true, force: true, maxRetries: 5, retryDelay: 200 }, + (error) => { + if (error) { + logger.error(error); + reject(); + } + resolve(null); + } + ); + }); + } + } +}; + +registerEvent(deleteGameFolder, { + name: "deleteGameFolder", +}); diff --git a/src/main/events/library/get-game-by-object-id.ts b/src/main/events/library/get-game-by-object-id.ts new file mode 100644 index 00000000..522d3bbb --- /dev/null +++ b/src/main/events/library/get-game-by-object-id.ts @@ -0,0 +1,20 @@ +import { gameRepository } from "@main/repository"; + +import { registerEvent } from "../register-event"; + +const getGameByObjectID = async ( + _event: Electron.IpcMainInvokeEvent, + objectID: string +) => + gameRepository.findOne({ + where: { + objectID, + }, + relations: { + repack: true, + }, + }); + +registerEvent(getGameByObjectID, { + name: "getGameByObjectID", +}); diff --git a/src/main/events/library/get-library.ts b/src/main/events/library/get-library.ts new file mode 100644 index 00000000..a38b0cc9 --- /dev/null +++ b/src/main/events/library/get-library.ts @@ -0,0 +1,30 @@ +import { gameRepository } from "@main/repository"; +import { GameStatus } from "@main/constants"; + +import { searchRepacks } from "../helpers/search-games"; +import { registerEvent } from "../register-event"; +import { sortBy } from "lodash-es"; + +const getLibrary = async (_event: Electron.IpcMainInvokeEvent) => + gameRepository + .find({ + order: { + createdAt: "desc", + }, + relations: { + repack: true, + }, + }) + .then((games) => + sortBy( + games.map((game) => ({ + ...game, + repacks: searchRepacks(game.title), + })), + (game) => (game.status !== GameStatus.Cancelled ? 0 : 1) + ) + ); + +registerEvent(getLibrary, { + name: "getLibrary", +}); diff --git a/src/main/events/library/get-repackers-friendly-names.ts b/src/main/events/library/get-repackers-friendly-names.ts new file mode 100644 index 00000000..22481d82 --- /dev/null +++ b/src/main/events/library/get-repackers-friendly-names.ts @@ -0,0 +1,12 @@ +import { registerEvent } from "../register-event"; +import { stateManager } from "@main/state-manager"; + +const getRepackersFriendlyNames = async (_event: Electron.IpcMainInvokeEvent) => + stateManager.getValue("repackersFriendlyNames").reduce((prev, next) => { + return { ...prev, [next.name]: next.friendlyName }; + }, {}); + +registerEvent(getRepackersFriendlyNames, { + name: "getRepackersFriendlyNames", + memoize: true, +}); diff --git a/src/main/events/library/open-game-installer.ts b/src/main/events/library/open-game-installer.ts new file mode 100644 index 00000000..acd3e343 --- /dev/null +++ b/src/main/events/library/open-game-installer.ts @@ -0,0 +1,58 @@ +import { gameRepository } from "@main/repository"; +import { generateYML } from "../helpers/generate-lutris-yaml"; +import path from "node:path"; +import fs from "node:fs"; +import { writeFile } from "node:fs/promises"; +import { spawnSync, exec } from "node:child_process"; + +import { registerEvent } from "../register-event"; +import { shell } from "electron"; +import { getDownloadsPath } from "../helpers/get-downloads-path"; + +const openGameInstaller = async ( + _event: Electron.IpcMainInvokeEvent, + gameId: number +) => { + const game = await gameRepository.findOne({ where: { id: gameId } }); + + if (!game) return true; + + const gamePath = path.join( + game.downloadPath ?? (await getDownloadsPath()), + game.folderName + ); + + if (!fs.existsSync(gamePath)) { + await gameRepository.delete({ id: gameId }); + return true; + } + + const setupPath = path.join(gamePath, "setup.exe"); + if (!fs.existsSync(setupPath)) { + shell.openPath(gamePath); + return true; + } + + if (process.platform === "win32") { + shell.openPath(setupPath); + return true; + } + + if (spawnSync("which", ["lutris"]).status === 0) { + const ymlPath = path.join(gamePath, "setup.yml"); + await writeFile(ymlPath, generateYML(game)); + exec(`lutris --install "${ymlPath}"`); + return true; + } + + if (spawnSync("which", ["wine"]).status === 0) { + exec(`wine "${setupPath}"`); + return true; + } + + return false; +}; + +registerEvent(openGameInstaller, { + name: "openGameInstaller", +}); diff --git a/src/main/events/library/open-game.ts b/src/main/events/library/open-game.ts new file mode 100644 index 00000000..2008e0d6 --- /dev/null +++ b/src/main/events/library/open-game.ts @@ -0,0 +1,18 @@ +import { gameRepository } from "@main/repository"; + +import { registerEvent } from "../register-event"; +import { shell } from "electron"; + +const openGame = async ( + _event: Electron.IpcMainInvokeEvent, + gameId: number, + executablePath: string +) => { + await gameRepository.update({ id: gameId }, { executablePath }); + + shell.openPath(executablePath); +}; + +registerEvent(openGame, { + name: "openGame", +}); diff --git a/src/main/events/library/remove-game.ts b/src/main/events/library/remove-game.ts new file mode 100644 index 00000000..64e84b7d --- /dev/null +++ b/src/main/events/library/remove-game.ts @@ -0,0 +1,11 @@ +import { registerEvent } from "../register-event"; +import { gameRepository } from "../../repository"; + +const removeGame = async ( + _event: Electron.IpcMainInvokeEvent, + gameId: number +) => gameRepository.delete({ id: gameId }); + +registerEvent(removeGame, { + name: "removeGame", +}); diff --git a/src/main/events/misc/get-or-cache-image.ts b/src/main/events/misc/get-or-cache-image.ts new file mode 100644 index 00000000..9734ff7e --- /dev/null +++ b/src/main/events/misc/get-or-cache-image.ts @@ -0,0 +1,37 @@ +import { imageCacheRepository } from "@main/repository"; + +import { registerEvent } from "../register-event"; +import { getImageBase64 } from "@main/helpers"; +import { logger } from "@main/services"; + +const getOrCacheImage = async ( + _event: Electron.IpcMainInvokeEvent, + url: string +) => { + const cache = await imageCacheRepository.findOne({ + where: { + url, + }, + }); + + if (cache) return cache.data; + + getImageBase64(url).then((data) => + imageCacheRepository + .save({ + url, + data, + }) + .catch(() => { + logger.error(`Failed to cache image "${url}"`, { + method: "getOrCacheImage", + }); + }) + ); + + return url; +}; + +registerEvent(getOrCacheImage, { + name: "getOrCacheImage", +}); diff --git a/src/main/events/misc/open-external.ts b/src/main/events/misc/open-external.ts new file mode 100644 index 00000000..3d693c23 --- /dev/null +++ b/src/main/events/misc/open-external.ts @@ -0,0 +1,9 @@ +import { shell } from "electron"; +import { registerEvent } from "../register-event"; + +const openExternal = async (_event: Electron.IpcMainInvokeEvent, src: string) => + shell.openExternal(src); + +registerEvent(openExternal, { + name: "openExternal", +}); diff --git a/src/main/events/misc/show-open-dialog.ts b/src/main/events/misc/show-open-dialog.ts new file mode 100644 index 00000000..123a47d6 --- /dev/null +++ b/src/main/events/misc/show-open-dialog.ts @@ -0,0 +1,12 @@ +import { dialog } from "electron"; +import { WindowManager } from "@main/services"; +import { registerEvent } from "../register-event"; + +const showOpenDialog = async ( + _event: Electron.IpcMainInvokeEvent, + options: Electron.OpenDialogOptions +) => dialog.showOpenDialog(WindowManager.mainWindow, options); + +registerEvent(showOpenDialog, { + name: "showOpenDialog", +}); diff --git a/src/main/events/register-event.ts b/src/main/events/register-event.ts new file mode 100644 index 00000000..60362329 --- /dev/null +++ b/src/main/events/register-event.ts @@ -0,0 +1,39 @@ +import { ipcMain } from "electron"; + +import { stateManager } from "@main/state-manager"; + +interface EventArgs { + name: string; + memoize?: boolean; +} + +export const registerEvent = ( + listener: (event: Electron.IpcMainInvokeEvent, ...args: any[]) => any, + { name, memoize = false }: EventArgs +) => { + ipcMain.handle(name, (event: Electron.IpcMainInvokeEvent, ...args) => { + const eventResults = stateManager.getValue("eventResults"); + const keys = Array.from(eventResults.keys()); + + const key = [name, args] as [string, any[]]; + + const memoizationKey = keys.find(([memoizedEvent, memoizedArgs]) => { + const sameEvent = name === memoizedEvent; + const sameArgs = memoizedArgs.every((arg, index) => arg === args[index]); + + return sameEvent && sameArgs; + }); + + if (memoizationKey) return eventResults.get(memoizationKey); + + return Promise.resolve(listener(event, ...args)).then((result) => { + if (memoize) { + eventResults.set(key, JSON.parse(JSON.stringify(result))); + stateManager.setValue("eventResults", eventResults); + } + + if (!result) return result; + return JSON.parse(JSON.stringify(result)); + }); + }); +}; diff --git a/src/main/events/torrenting/cancel-game-download.ts b/src/main/events/torrenting/cancel-game-download.ts new file mode 100644 index 00000000..686033cc --- /dev/null +++ b/src/main/events/torrenting/cancel-game-download.ts @@ -0,0 +1,53 @@ +import { GameStatus } from "@main/constants"; +import { gameRepository } from "@main/repository"; + +import { registerEvent } from "../register-event"; +import { WindowManager, writePipe } from "@main/services"; + +import { In } from "typeorm"; + +const cancelGameDownload = async ( + _event: Electron.IpcMainInvokeEvent, + gameId: number +) => { + const game = await gameRepository.findOne({ + where: { + id: gameId, + status: In([ + GameStatus.Downloading, + GameStatus.DownloadingMetadata, + GameStatus.CheckingFiles, + GameStatus.Paused, + GameStatus.Seeding, + ]), + }, + }); + + if (!game) return; + + gameRepository + .update( + { + id: game.id, + }, + { + status: GameStatus.Cancelled, + downloadPath: null, + bytesDownloaded: 0, + progress: 0, + } + ) + .then((result) => { + if ( + game.status !== GameStatus.Paused && + game.status !== GameStatus.Seeding + ) { + writePipe.write({ action: "cancel" }); + if (result.affected) WindowManager.mainWindow.setProgressBar(-1); + } + }); +}; + +registerEvent(cancelGameDownload, { + name: "cancelGameDownload", +}); diff --git a/src/main/events/torrenting/pause-game-download.ts b/src/main/events/torrenting/pause-game-download.ts new file mode 100644 index 00000000..d89f2f72 --- /dev/null +++ b/src/main/events/torrenting/pause-game-download.ts @@ -0,0 +1,34 @@ +import { WindowManager, writePipe } from "@main/services"; + +import { registerEvent } from "../register-event"; +import { GameStatus } from "../../constants"; +import { gameRepository } from "../../repository"; +import { In } from "typeorm"; + +const pauseGameDownload = async ( + _event: Electron.IpcMainInvokeEvent, + gameId: number +) => { + await gameRepository + .update( + { + id: gameId, + status: In([ + GameStatus.Downloading, + GameStatus.DownloadingMetadata, + GameStatus.CheckingFiles, + ]), + }, + { status: GameStatus.Paused } + ) + .then((result) => { + if (result.affected) { + writePipe.write({ action: "pause" }); + WindowManager.mainWindow.setProgressBar(-1); + } + }); +}; + +registerEvent(pauseGameDownload, { + name: "pauseGameDownload", +}); diff --git a/src/main/events/torrenting/resume-game-download.ts b/src/main/events/torrenting/resume-game-download.ts new file mode 100644 index 00000000..c1e2e798 --- /dev/null +++ b/src/main/events/torrenting/resume-game-download.ts @@ -0,0 +1,56 @@ +import { registerEvent } from "../register-event"; +import { GameStatus } from "../../constants"; +import { gameRepository } from "../../repository"; +import { getDownloadsPath } from "../helpers/get-downloads-path"; +import { In } from "typeorm"; +import { writePipe } from "@main/services"; + +const resumeGameDownload = async ( + _event: Electron.IpcMainInvokeEvent, + gameId: number +) => { + const game = await gameRepository.findOne({ + where: { + id: gameId, + }, + relations: { repack: true }, + }); + + if (!game) return; + + writePipe.write({ action: "pause" }); + + if (game.status === GameStatus.Paused) { + const downloadsPath = game.downloadPath ?? (await getDownloadsPath()); + + writePipe.write({ + action: "start", + game_id: gameId, + magnet: game.repack.magnet, + save_path: downloadsPath, + }); + + await gameRepository.update( + { + status: In([ + GameStatus.Downloading, + GameStatus.DownloadingMetadata, + GameStatus.CheckingFiles, + ]), + }, + { status: GameStatus.Paused } + ); + + await gameRepository.update( + { id: game.id }, + { + status: GameStatus.DownloadingMetadata, + downloadPath: downloadsPath, + } + ); + } +}; + +registerEvent(resumeGameDownload, { + name: "resumeGameDownload", +}); diff --git a/src/main/events/torrenting/start-game-download.ts b/src/main/events/torrenting/start-game-download.ts new file mode 100644 index 00000000..570fd2ec --- /dev/null +++ b/src/main/events/torrenting/start-game-download.ts @@ -0,0 +1,110 @@ +import { getSteamGameIconUrl, writePipe } from "@main/services"; +import { gameRepository, repackRepository } from "@main/repository"; +import { GameStatus } from "@main/constants"; + +import { registerEvent } from "../register-event"; + +import type { GameShop } from "@types"; +import { getDownloadsPath } from "../helpers/get-downloads-path"; +import { getImageBase64 } from "@main/helpers"; +import { In } from "typeorm"; + +const startGameDownload = async ( + _event: Electron.IpcMainInvokeEvent, + repackId: number, + objectID: string, + title: string, + gameShop: GameShop +) => { + const [game, repack] = await Promise.all([ + gameRepository.findOne({ + where: { + objectID, + }, + }), + repackRepository.findOne({ + where: { + id: repackId, + }, + }), + ]); + + if (!repack) return; + + if (game?.status === GameStatus.Downloading) { + return; + } + + writePipe.write({ action: "pause" }); + + const downloadsPath = game?.downloadPath ?? (await getDownloadsPath()); + + await gameRepository.update( + { + status: In([ + GameStatus.Downloading, + GameStatus.DownloadingMetadata, + GameStatus.CheckingFiles, + ]), + }, + { status: GameStatus.Paused } + ); + + if (game) { + await gameRepository.update( + { + id: game.id, + }, + { + status: GameStatus.DownloadingMetadata, + downloadPath: downloadsPath, + repack: { id: repackId }, + } + ); + + writePipe.write({ + action: "start", + game_id: game.id, + magnet: repack.magnet, + save_path: downloadsPath, + }); + + game.status = GameStatus.DownloadingMetadata; + + writePipe.write({ + action: "start", + game_id: game.id, + magnet: repack.magnet, + save_path: downloadsPath, + }); + + return game; + } else { + const iconUrl = await getImageBase64(await getSteamGameIconUrl(objectID)); + + const createdGame = await gameRepository.save({ + title, + iconUrl, + objectID, + shop: gameShop, + status: GameStatus.DownloadingMetadata, + downloadPath: downloadsPath, + repack: { id: repackId }, + }); + + writePipe.write({ + action: "start", + game_id: createdGame.id, + magnet: repack.magnet, + save_path: downloadsPath, + }); + + const { repack: _, ...rest } = createdGame; + + return rest; + } +}; + +registerEvent(startGameDownload, { + name: "startGameDownload", +}); diff --git a/src/main/events/user-preferences/get-user-preferences.ts b/src/main/events/user-preferences/get-user-preferences.ts new file mode 100644 index 00000000..219713eb --- /dev/null +++ b/src/main/events/user-preferences/get-user-preferences.ts @@ -0,0 +1,11 @@ +import { userPreferencesRepository } from "@main/repository"; +import { registerEvent } from "../register-event"; + +const getUserPreferences = async (_event: Electron.IpcMainInvokeEvent) => + userPreferencesRepository.findOne({ + where: { id: 1 }, + }); + +registerEvent(getUserPreferences, { + name: "getUserPreferences", +}); diff --git a/src/main/events/user-preferences/update-user-preferences.ts b/src/main/events/user-preferences/update-user-preferences.ts new file mode 100644 index 00000000..000eca7b --- /dev/null +++ b/src/main/events/user-preferences/update-user-preferences.ts @@ -0,0 +1,21 @@ +import { userPreferencesRepository } from "@main/repository"; +import { registerEvent } from "../register-event"; + +import type { UserPreferences } from "@types"; + +const updateUserPreferences = async ( + _event: Electron.IpcMainInvokeEvent, + preferences: Partial +) => { + await userPreferencesRepository.upsert( + { + id: 1, + ...preferences, + }, + ["id"] + ); +}; + +registerEvent(updateUserPreferences, { + name: "updateUserPreferences", +}); diff --git a/src/main/helpers/formatters.test.ts b/src/main/helpers/formatters.test.ts new file mode 100644 index 00000000..6b0d0fae --- /dev/null +++ b/src/main/helpers/formatters.test.ts @@ -0,0 +1,98 @@ +import assert from "node:assert/strict"; +import { describe, test } from "node:test"; +import { + dodiFormatter, + empressFormatter, + fitGirlFormatter, + kaosKrewFormatter, +} from "./formatters"; + +describe("testing formatters", () => { + describe("testing fitgirl formatter", () => { + const fitGirlGames = [ + "REVEIL (v1.0.3f4 + 0.5 DLC, MULTi14) [FitGirl Repack]", + "Dune: Spice Wars - The Ixian Edition (v2.0.0.31558 + DLC, MULTi9) [FitGirl Repack]", + "HUMANKIND: Premium Edition (v1.0.22.3819 + 17 DLCs/Bonus Content, MULTi12) [FitGirl Repack, Selective Download - from 7.3 GB]", + "Call to Arms: Gates of Hell - Ostfront: WW2 Bundle (v1.034 Hotfix 3 + 3 DLCs, MULTi9) [FitGirl Repack, Selective Download - from 21.8 GB]", + "SUPER BOMBERMAN R 2 (v1.2.0, MULTi12) [FitGirl Repack]", + "God of Rock (v3110, MULTi11) [FitGirl Repack]", + ]; + + test("should format games correctly", () => { + assert.equal(fitGirlGames.map(fitGirlFormatter), [ + "REVEIL", + "Dune: Spice Wars - The Ixian Edition", + "HUMANKIND: Premium Edition", + "Call to Arms: Gates of Hell - Ostfront: WW2 Bundle", + "SUPER BOMBERMAN R 2", + "God of Rock", + ]); + }); + }); + + describe("testing kaoskrew formatter", () => { + const kaosKrewGames = [ + "Song.Of.Horror.Complete.Edition.v1.25.MULTi4.REPACK-KaOs", + "Remoteness.REPACK-KaOs", + "Persona.5.Royal.v1.0.0.MULTi5.NSW.For.PC.REPACK-KaOs", + "The.Wreck.MULTi5.REPACK-KaOs", + "Nemezis.Mysterious.Journey.III.v1.04.Deluxe.Edition.REPACK-KaOs", + "The.World.Of.Others.v1.05.REPACK-KaOs", + ]; + + test("should format games correctly", () => { + assert.equal(kaosKrewGames.map(kaosKrewFormatter), [ + "Song Of Horror Complete Edition", + "Remoteness", + "Persona 5 Royal NSW For PC", + "The Wreck", + "Nemezis Mysterious Journey III Deluxe Edition", + "The World Of Others", + ]); + }); + }); + + describe("testing empress formatter", () => { + const empressGames = [ + "Resident.Evil.4-EMPRESS", + "Marvels.Guardians.of.the.Galaxy.Crackfix-EMPRESS", + "Life.is.Strange.2.Complete.Edition-EMPRESS", + "Forza.Horizon.4.PROPER-EMPRESS", + "Just.Cause.4.Complete.Edition.READNFO-EMPRESS", + "Immortals.Fenyx.Rising.Crackfix.V2-EMPRESS", + ]; + + test("should format games correctly", () => { + assert.equal(empressGames.map(empressFormatter), [ + "Resident Evil 4", + "Marvels Guardians of the Galaxy", + "Life is Strange 2 Complete Edition", + "Forza Horizon 4 PROPER", + "Just Cause 4 Complete Edition", + "Immortals Fenyx Rising", + ]); + }); + }); + + describe("testing kodi formatter", () => { + const dodiGames = [ + "Tomb Raider I-III Remastered Starring Lara Croft (MULTi20) (From 2.5 GB) [DODI Repack]", + "Trail Out: Complete Edition (v2.9st + All DLCs + MULTi11) [DODI Repack]", + "Call to Arms - Gates of Hell: Ostfront (v1.034.0 + All DLCs + MULTi9) (From 22.4 GB) [DODI Repack]", + "Metal Gear Solid 2: Sons of Liberty - HD Master Collection Edition (Digital book + MULTi6) [DODI Repack]", + "DREDGE: Digital Deluxe Edition (v1.2.0.1922 + All DLCs + Bonus Content + MULTi11) (From 413 MB) [DODI Repack]", + "Outliver: Tribulation [DODI Repack]", + ]; + + test("should format games correctly", () => { + assert.equal(dodiGames.map(dodiFormatter), [ + "Tomb Raider I-III Remastered Starring Lara Croft", + "Trail Out: Complete Edition", + "Call to Arms - Gates of Hell: Ostfront", + "Metal Gear Solid 2: Sons of Liberty - HD Master Collection Edition", + "DREDGE: Digital Deluxe Edition", + "Outliver: Tribulation", + ]); + }); + }); +}); diff --git a/src/main/helpers/formatters.ts b/src/main/helpers/formatters.ts new file mode 100644 index 00000000..6ad67625 --- /dev/null +++ b/src/main/helpers/formatters.ts @@ -0,0 +1,56 @@ +/* String formatting */ + +export const removeReleaseYearFromName = (name: string) => + name.replace(/\([0-9]{4}\)/g, ""); + +export const removeSymbolsFromName = (name: string) => + name.replace(/[^A-Za-z 0-9]/g, ""); + +export const removeSpecialEditionFromName = (name: string) => + name.replace( + /(The |Digital )?(GOTY|Deluxe|Standard|Ultimate|Definitive|Enhanced|Collector's|Premium|Digital|Limited|Game of the Year|Reloaded|[0-9]{4}) Edition/g, + "" + ); + +export const removeDuplicateSpaces = (name: string) => + name.replace(/\s{2,}/g, " "); + +export const removeTrash = (title: string) => + title.replace(/\(.*\)|\[.*]/g, "").replace(/:/g, ""); + +/* Formatters per repacker */ + +export const fitGirlFormatter = (title: string) => + title.replace(/\(.*\)/g, "").trim(); + +export const kaosKrewFormatter = (title: string) => + title + .replace(/(v\.?[0-9])+([0-9]|\.)+/, "") + .replace( + /(\.Build\.[0-9]*)?(\.MULTi[0-9]{1,2})?(\.REPACK-KaOs|\.UPDATE-KaOs)?/g, + "" + ) + .replace(/\./g, " ") + .trim(); + +export const empressFormatter = (title: string) => + title + .replace(/-EMPRESS/, "") + .replace(/\./g, " ") + .trim(); + +export const dodiFormatter = (title: string) => + title.replace(/\(.*?\)/g, "").trim(); + +export const xatabFormatter = (title: string) => + title + .replace(/RePack от xatab|RePack от Decepticon|R.G. GOGFAN/, "") + .replace(/[\u0400-\u04FF]/g, "") + .replace(/(v\.?([0-9]| )+)+([0-9]|\.|-|_|\/|[a-zA-Z]| )+/, ""); + +export const tinyRepacksFormatter = (title: string) => title; +export const onlinefixFormatter = (title: string) => + title.replace("по сети", "").trim(); + +export const gogFormatter = (title: string) => + title.replace(/(v\.[0-9]+|v[0-9]+\.|v[0-9]{4})+.+/, ""); diff --git a/src/main/helpers/index.ts b/src/main/helpers/index.ts new file mode 100644 index 00000000..93b79229 --- /dev/null +++ b/src/main/helpers/index.ts @@ -0,0 +1,85 @@ +import { + removeReleaseYearFromName, + removeSymbolsFromName, + removeSpecialEditionFromName, + empressFormatter, + kaosKrewFormatter, + fitGirlFormatter, + removeDuplicateSpaces, + dodiFormatter, + removeTrash, + xatabFormatter, + tinyRepacksFormatter, + gogFormatter, + onlinefixFormatter, +} from "./formatters"; +import { months, repackers } from "../constants"; + +export const pipe = + (...fns: ((arg: T) => any)[]) => + (arg: T) => + fns.reduce((prev, fn) => fn(prev), arg); + +export const formatName = pipe( + removeTrash, + removeReleaseYearFromName, + removeSymbolsFromName, + removeSpecialEditionFromName, + removeDuplicateSpaces, + (str) => str.trim() +); + +export const repackerFormatter: Record< + (typeof repackers)[number], + (title: string) => string +> = { + DODI: dodiFormatter, + "0xEMPRESS": empressFormatter, + KaOsKrew: kaosKrewFormatter, + FitGirl: fitGirlFormatter, + Xatab: xatabFormatter, + CPG: (title: string) => title, + TinyRepacks: tinyRepacksFormatter, + GOG: gogFormatter, + onlinefix: onlinefixFormatter, +}; + +export const formatUploadDate = (str: string) => { + const date = new Date(); + + const [month, day, year] = str.split(" "); + + date.setMonth(months.indexOf(month.replace(".", ""))); + date.setDate(Number(day.substring(0, 2))); + date.setFullYear(Number("20" + year.replace("'", ""))); + date.setHours(0, 0, 0, 0); + + return date; +}; + +export const getSteamAppAsset = ( + category: "library" | "hero" | "logo" | "icon", + objectID: string, + clientIcon?: string +) => { + if (category === "library") + return `https://steamcdn-a.akamaihd.net/steam/apps/${objectID}/header.jpg`; + + if (category === "hero") + return `https://steamcdn-a.akamaihd.net/steam/apps/${objectID}/library_hero.jpg`; + + if (category === "logo") + return `https://cdn.cloudflare.steamstatic.com/steam/apps/${objectID}/logo.png`; + + return `https://cdn.cloudflare.steamstatic.com/steamcommunity/public/images/apps/${objectID}/${clientIcon}.ico`; +}; + +export const getImageBase64 = async (url: string) => + fetch(url, { method: "GET" }).then((response) => + response.arrayBuffer().then((buffer) => { + return `data:image/jpeg;base64,${Buffer.from(buffer).toString("base64")}`; + }) + ); + +export * from "./formatters"; +export * from "./ps"; diff --git a/src/main/helpers/ps.ts b/src/main/helpers/ps.ts new file mode 100644 index 00000000..f7ce3391 --- /dev/null +++ b/src/main/helpers/ps.ts @@ -0,0 +1,12 @@ +import psList from "ps-list"; +import { tasklist } from "tasklist"; + +export const getProcesses = async () => { + if (process.platform === "win32") { + return tasklist().then((tasks) => + tasks.map((task) => ({ ...task, name: task.imageName })) + ); + } + + return psList(); +}; diff --git a/src/main/index.ts b/src/main/index.ts new file mode 100644 index 00000000..a48db177 --- /dev/null +++ b/src/main/index.ts @@ -0,0 +1,102 @@ +import { app, BrowserWindow } from "electron"; +import { init } from "@sentry/electron/main"; +import i18n from "i18next"; +import path from "node:path"; +import { resolveDatabaseUpdates, WindowManager } from "@main/services"; +import { dataSource } from "@main/data-source"; +import * as resources from "@locales"; +import { userPreferencesRepository } from "@main/repository"; + +const gotTheLock = app.requestSingleInstanceLock(); +if (!gotTheLock) app.quit(); + +if (import.meta.env.MAIN_VITE_SENTRY_DSN) { + init({ + dsn: import.meta.env.MAIN_VITE_SENTRY_DSN, + beforeSend: async (event) => { + const userPreferences = await userPreferencesRepository.findOne({ + where: { id: 1 }, + }); + + if (userPreferences?.telemetryEnabled) return event; + return null; + }, + }); +} + +i18n.init({ + resources, + lng: "en", + fallbackLng: "en", + interpolation: { + escapeValue: false, + }, +}); + +const PROTOCOL = "hydralauncher"; + +if (process.defaultApp) { + if (process.argv.length >= 2) { + app.setAsDefaultProtocolClient(PROTOCOL, process.execPath, [ + path.resolve(process.argv[1]), + ]); + } +} else { + app.setAsDefaultProtocolClient(PROTOCOL); +} + +// This method will be called when Electron has finished +// initialization and is ready to create browser windows. +// Some APIs can only be used after this event occurs. +app.whenReady().then(() => { + dataSource.initialize().then(async () => { + // await resolveDatabaseUpdates(); + + await import("./main"); + + const userPreferences = await userPreferencesRepository.findOne({ + where: { id: 1 }, + }); + + WindowManager.createMainWindow(); + // WindowManager.createSystemTray(userPreferences?.language || "en"); + }); +}); + +app.on("second-instance", (_event, commandLine) => { + // Someone tried to run a second instance, we should focus our window. + if (WindowManager.mainWindow) { + if (WindowManager.mainWindow.isMinimized()) + WindowManager.mainWindow.restore(); + + WindowManager.mainWindow.focus(); + } else { + WindowManager.createMainWindow(); + } + + const [, path] = commandLine.pop().split("://"); + if (path) WindowManager.redirect(path); +}); + +app.on("open-url", (_event, url) => { + const [, path] = url.split("://"); + WindowManager.redirect(path); +}); + +// Quit when all windows are closed, except on macOS. There, it's common +// for applications and their menu bar to stay active until the user quits +// explicitly with Cmd + Q. +app.on("window-all-closed", () => { + WindowManager.mainWindow = null; +}); + +app.on("activate", () => { + // On OS X it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + if (BrowserWindow.getAllWindows().length === 0) { + WindowManager.createMainWindow(); + } +}); + +// In this file you can include the rest of your app's specific main process +// code. You can also put them in separate files and import them here. diff --git a/src/main/main.ts b/src/main/main.ts new file mode 100644 index 00000000..5637bbd3 --- /dev/null +++ b/src/main/main.ts @@ -0,0 +1,129 @@ +import { stateManager } from "./state-manager"; +import { GameStatus, repackers } from "./constants"; +import { + getNewGOGGames, + getNewRepacksFromCPG, + getNewRepacksFromUser, + getNewRepacksFromXatab, + // getNewRepacksFromOnlineFix, + readPipe, + startProcessWatcher, + writePipe, +} from "./services"; +import { + gameRepository, + repackRepository, + repackerFriendlyNameRepository, + steamGameRepository, + userPreferencesRepository, +} from "./repository"; +import { TorrentClient } from "./services/torrent-client"; +import { Repack } from "./entity"; +import { Notification } from "electron"; +import { t } from "i18next"; +import { In } from "typeorm"; + +startProcessWatcher(); + +TorrentClient.startTorrentClient(writePipe.socketPath, readPipe.socketPath); + +Promise.all([writePipe.createPipe(), readPipe.createPipe()]).then(async () => { + const game = await gameRepository.findOne({ + where: { + status: In([ + GameStatus.Downloading, + GameStatus.DownloadingMetadata, + GameStatus.CheckingFiles, + ]), + }, + relations: { repack: true }, + }); + + if (game) { + writePipe.write({ + action: "start", + game_id: game.id, + magnet: game.repack.magnet, + save_path: game.downloadPath, + }); + } + + readPipe.socket.on("data", (data) => { + TorrentClient.onSocketData(data); + }); +}); + +const track1337xUsers = async (existingRepacks: Repack[]) => { + for (const repacker of repackers) { + await getNewRepacksFromUser( + repacker, + existingRepacks.filter((repack) => repack.repacker === repacker) + ); + } +}; + +const checkForNewRepacks = async () => { + const userPreferences = await userPreferencesRepository.findOne({ + where: { id: 1 }, + }); + + const existingRepacks = stateManager.getValue("repacks"); + + Promise.allSettled([ + getNewGOGGames( + existingRepacks.filter((repack) => repack.repacker === "GOG") + ), + getNewRepacksFromXatab( + existingRepacks.filter((repack) => repack.repacker === "Xatab") + ), + getNewRepacksFromCPG( + existingRepacks.filter((repack) => repack.repacker === "CPG") + ), + // getNewRepacksFromOnlineFix( + // existingRepacks.filter((repack) => repack.repacker === "onlinefix") + // ), + track1337xUsers(existingRepacks), + ]).then(() => { + repackRepository.count().then((count) => { + const total = count - stateManager.getValue("repacks").length; + + if (total > 0 && userPreferences?.repackUpdatesNotificationsEnabled) { + new Notification({ + title: t("repack_list_updated", { + ns: "notifications", + lng: userPreferences?.language || "en", + }), + body: t("repack_count", { + ns: "notifications", + lng: userPreferences?.language || "en", + count: total, + }), + }).show(); + } + }); + }); +}; + +const loadState = async () => { + const [friendlyNames, repacks, steamGames] = await Promise.all([ + repackerFriendlyNameRepository.find(), + repackRepository.find({ + order: { + createdAt: "desc", + }, + }), + steamGameRepository.find({ + order: { + name: "asc", + }, + }), + ]); + + stateManager.setValue("repackersFriendlyNames", friendlyNames); + stateManager.setValue("repacks", repacks); + stateManager.setValue("steamGames", steamGames); + + import("./events"); +}; + +loadState().then(() => checkForNewRepacks()); diff --git a/src/main/repository.ts b/src/main/repository.ts new file mode 100644 index 00000000..f9edfa1c --- /dev/null +++ b/src/main/repository.ts @@ -0,0 +1,30 @@ +import { dataSource } from "./data-source"; +import { + Game, + GameShopCache, + ImageCache, + Repack, + RepackerFriendlyName, + UserPreferences, + MigrationScript, + SteamGame, +} from "@main/entity"; + +export const gameRepository = dataSource.getRepository(Game); + +export const imageCacheRepository = dataSource.getRepository(ImageCache); + +export const repackRepository = dataSource.getRepository(Repack); + +export const repackerFriendlyNameRepository = + dataSource.getRepository(RepackerFriendlyName); + +export const userPreferencesRepository = + dataSource.getRepository(UserPreferences); + +export const gameShopCacheRepository = dataSource.getRepository(GameShopCache); + +export const migrationScriptRepository = + dataSource.getRepository(MigrationScript); + +export const steamGameRepository = dataSource.getRepository(SteamGame); diff --git a/src/main/services/fifo.ts b/src/main/services/fifo.ts new file mode 100644 index 00000000..866232cc --- /dev/null +++ b/src/main/services/fifo.ts @@ -0,0 +1,38 @@ +import path from "node:path"; +import net from "node:net"; +import crypto from "node:crypto"; +import os from "node:os"; + +export class FIFO { + public socket: null | net.Socket = null; + public socketPath = this.generateSocketFilename(); + + private generateSocketFilename() { + const hash = crypto.randomBytes(16).toString("hex"); + + if (process.platform === "win32") { + return "\\\\.\\pipe\\" + hash; + } + + return path.join(os.tmpdir(), hash); + } + + public write(data: any) { + if (!this.socket) return; + this.socket.write(Buffer.from(JSON.stringify(data))); + } + + public createPipe() { + return new Promise((resolve) => { + const server = net.createServer((socket) => { + this.socket = socket; + resolve(null); + }); + + server.listen(this.socketPath); + }); + } +} + +export const writePipe = new FIFO(); +export const readPipe = new FIFO(); diff --git a/src/main/services/how-long-to-beat.ts b/src/main/services/how-long-to-beat.ts new file mode 100644 index 00000000..76d53c6d --- /dev/null +++ b/src/main/services/how-long-to-beat.ts @@ -0,0 +1,60 @@ +import { formatName } from "@main/helpers"; +import axios from "axios"; +import { JSDOM } from "jsdom"; +import { requestWebPage } from "./repack-tracker/helpers"; +import { HowLongToBeatCategory } from "@types"; + +export interface HowLongToBeatResult { + game_id: number; + profile_steam: number; +} + +export interface HowLongToBeatSearchResponse { + data: HowLongToBeatResult[]; +} + +export const searchHowLongToBeat = async (gameName: string) => { + const response = await axios.post( + "https://howlongtobeat.com/api/search", + { + searchType: "games", + searchTerms: formatName(gameName).split(" "), + searchPage: 1, + size: 100, + }, + { + headers: { + "User-Agent": + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36", + Referer: "https://howlongtobeat.com/", + }, + } + ); + + return response.data as HowLongToBeatSearchResponse; +}; + +export const getHowLongToBeatGame = async ( + id: string +): Promise => { + const response = await requestWebPage(`https://howlongtobeat.com/game/${id}`); + + const { window } = new JSDOM(response); + const { document } = window; + + const $ul = document.querySelector(".shadow_shadow ul"); + const $lis = Array.from($ul.children); + + return $lis.map(($li) => { + const title = $li.querySelector("h4").textContent; + const [, accuracyClassName] = Array.from(($li as HTMLElement).classList); + + const accuracy = accuracyClassName.split("time_").at(1); + + return { + title, + duration: $li.querySelector("h5").textContent, + accuracy, + }; + }); +}; diff --git a/src/main/services/index.ts b/src/main/services/index.ts new file mode 100644 index 00000000..2544c6f4 --- /dev/null +++ b/src/main/services/index.ts @@ -0,0 +1,11 @@ +export * from "./logger"; +export * from "./repack-tracker"; +export * from "./steam"; +export * from "./steam-250"; +export * from "./steam-grid"; +export * from "./update-resolver"; +export * from "./window-manager"; +export * from "./fifo"; +export * from "./torrent-client"; +export * from "./how-long-to-beat"; +export * from "./process-watcher"; diff --git a/src/main/services/logger.ts b/src/main/services/logger.ts new file mode 100644 index 00000000..07a5d153 --- /dev/null +++ b/src/main/services/logger.ts @@ -0,0 +1,11 @@ +import winston from "winston"; + +export const logger = winston.createLogger({ + level: "info", + format: winston.format.json(), + transports: [ + new winston.transports.File({ filename: "error.log", level: "error" }), + new winston.transports.File({ filename: "info.log", level: "info" }), + new winston.transports.File({ filename: "combined.log" }), + ], +}); diff --git a/src/main/services/process-watcher.ts b/src/main/services/process-watcher.ts new file mode 100644 index 00000000..96244a60 --- /dev/null +++ b/src/main/services/process-watcher.ts @@ -0,0 +1,80 @@ +import path from "node:path"; + +import { IsNull, Not } from "typeorm"; + +import { gameRepository } from "@main/repository"; +import { getProcesses } from "@main/helpers"; +import { WindowManager } from "./window-manager"; + +const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + +export const startProcessWatcher = async () => { + const sleepTime = 100; + const gamesPlaytime = new Map(); + + // eslint-disable-next-line no-constant-condition + while (true) { + const games = await gameRepository.find({ + where: { + executablePath: Not(IsNull()), + }, + }); + + const processes = await getProcesses(); + + for (const game of games) { + const gameProcess = processes.find((runningProcess) => { + const basename = path.win32.basename(game.executablePath); + const basenameWithoutExtension = path.win32.basename( + game.executablePath, + path.extname(game.executablePath) + ); + + if (process.platform === "win32") { + return runningProcess.name === basename; + } + + return [basename, basenameWithoutExtension].includes( + runningProcess.name + ); + }); + + if (gameProcess) { + if (gamesPlaytime.has(game.id)) { + const zero = gamesPlaytime.get(game.id); + const delta = performance.now() - zero; + + if (WindowManager.mainWindow) { + WindowManager.mainWindow.webContents.send("on-playtime", game.id); + } + + await gameRepository.update(game.id, { + playTimeInMilliseconds: game.playTimeInMilliseconds + delta, + }); + + gameRepository.update(game.id, { + lastTimePlayed: new Date().toUTCString(), + }); + + gamesPlaytime.set(game.id, performance.now()); + await sleep(sleepTime); + continue; + } + + gamesPlaytime.set(game.id, performance.now()); + + await sleep(sleepTime); + continue; + } + + if (gamesPlaytime.has(game.id)) { + gamesPlaytime.delete(game.id); + if (WindowManager.mainWindow) { + WindowManager.mainWindow.webContents.send("on-game-close", game.id); + } + } + + await sleep(sleepTime); + } + } +}; diff --git a/src/main/services/repack-tracker/1337x.ts b/src/main/services/repack-tracker/1337x.ts new file mode 100644 index 00000000..1cbafa3b --- /dev/null +++ b/src/main/services/repack-tracker/1337x.ts @@ -0,0 +1,135 @@ +import { JSDOM } from "jsdom"; + +import { formatUploadDate } from "@main/helpers"; + +import { Repack } from "@main/entity"; +import { requestWebPage, savePage } from "./helpers"; +import type { GameRepackInput } from "./helpers"; + +export const request1337x = async (path: string) => + requestWebPage(`https://1337xx.to${path}`); + +/* TODO: $a will often be null */ +const getTorrentDetails = async (path: string) => { + const response = await request1337x(path); + + const { window } = new JSDOM(response); + const { document } = window; + + const $a = window.document.querySelector( + ".torrentdown1" + ) as HTMLAnchorElement; + + const $ul = Array.from( + document.querySelectorAll(".torrent-detail-page .list") + ); + const [$firstColumn, $secondColumn] = $ul; + + if (!$firstColumn || !$secondColumn) { + return { magnet: $a?.href }; + } + + const [_$category, _$type, _$language, $totalSize] = $firstColumn.children; + const [_$downloads, _$lastChecked, $dateUploaded] = $secondColumn.children; + + return { + magnet: $a?.href, + fileSize: $totalSize.querySelector("span").textContent ?? undefined, + uploadDate: formatUploadDate( + $dateUploaded.querySelector("span").textContent! + ), + }; +}; + +export const getTorrentListLastPage = async (user: string) => { + const response = await request1337x(`/user/${user}/1`); + + const { window } = new JSDOM(response); + + const $ul = window.document.querySelector(".pagination > ul"); + + if ($ul) { + const $li = Array.from($ul.querySelectorAll("li")).at(-1); + const text = $li?.textContent; + + if (text === ">>") { + const $previousLi = Array.from($ul.querySelectorAll("li")).at(-2); + return Number($previousLi?.textContent); + } + + return Number(text); + } + + return -1; +}; + +export const extractTorrentsFromDocument = async ( + page: number, + user: string, + document: Document, + existingRepacks: Repack[] = [] +): Promise => { + const $trs = Array.from(document.querySelectorAll("tbody tr")); + + return Promise.all( + $trs.map(async ($tr) => { + const $td = $tr.querySelector("td"); + + const [, $name] = Array.from($td!.querySelectorAll("a")); + const url = $name.href; + const title = $name.textContent ?? ""; + + if (existingRepacks.some((repack) => repack.title === title)) { + return { + title, + magnet: "", + fileSize: null, + uploadDate: null, + repacker: user, + page, + }; + } + + const details = await getTorrentDetails(url); + + return { + title, + magnet: details.magnet, + fileSize: details.fileSize ?? null, + uploadDate: details.uploadDate ?? null, + repacker: user, + page, + }; + }) + ); +}; + +export const getNewRepacksFromUser = async ( + user: string, + existingRepacks: Repack[], + page = 1 +): Promise => { + const response = await request1337x(`/user/${user}/${page}`); + const { window } = new JSDOM(response); + + const repacks = await extractTorrentsFromDocument( + page, + user, + window.document, + existingRepacks + ); + + const newRepacks = repacks.filter( + (repack) => + repack.uploadDate && + !existingRepacks.some( + (existingRepack) => existingRepack.title === repack.title + ) + ); + + if (!newRepacks.length) return; + + await savePage(newRepacks); + + return getNewRepacksFromUser(user, existingRepacks, page + 1); +}; diff --git a/src/main/services/repack-tracker/cpg-repacks.ts b/src/main/services/repack-tracker/cpg-repacks.ts new file mode 100644 index 00000000..0d7c172b --- /dev/null +++ b/src/main/services/repack-tracker/cpg-repacks.ts @@ -0,0 +1,65 @@ +import { JSDOM } from "jsdom"; + +import { Repack } from "@main/entity"; + +import { requestWebPage, savePage } from "./helpers"; +import type { GameRepackInput } from "./helpers"; +import { logger } from "../logger"; + +export const getNewRepacksFromCPG = async ( + existingRepacks: Repack[] = [], + page = 1 +): Promise => { + const data = await requestWebPage(`https://cpgrepacks.site/page/${page}`); + + const { window } = new JSDOM(data); + + const repacks: GameRepackInput[] = []; + + try { + Array.from(window.document.querySelectorAll(".post")).forEach(($post) => { + const $title = $post.querySelector(".entry-title"); + const uploadDate = $post.querySelector("time").getAttribute("datetime"); + + const $downloadInfo = Array.from( + $post.querySelectorAll(".wp-block-heading") + ).find(($heading) => $heading.textContent.startsWith("Download")); + + /* Side note: CPG often misspells "Magnet" as "Magent" */ + const $magnet = Array.from($post.querySelectorAll("a")).find( + ($a) => + $a.textContent.startsWith("Magnet") || + $a.textContent.startsWith("Magent") + ); + + const fileSize = $downloadInfo.textContent + .split("Download link => ") + .at(1); + + repacks.push({ + title: $title.textContent, + fileSize: fileSize ?? "N/A", + magnet: $magnet.href, + repacker: "CPG", + page, + uploadDate: new Date(uploadDate), + }); + }); + } catch (err) { + logger.error(err.message, { method: "getNewRepacksFromCPG" }); + } + + const newRepacks = repacks.filter( + (repack) => + repack.uploadDate && + !existingRepacks.some( + (existingRepack) => existingRepack.title === repack.title + ) + ); + + if (!newRepacks.length) return; + + await savePage(newRepacks); + + return getNewRepacksFromCPG(existingRepacks, page + 1); +}; diff --git a/src/main/services/repack-tracker/gog.ts b/src/main/services/repack-tracker/gog.ts new file mode 100644 index 00000000..73daebf7 --- /dev/null +++ b/src/main/services/repack-tracker/gog.ts @@ -0,0 +1,78 @@ +import { JSDOM, VirtualConsole } from "jsdom"; +import { GameRepackInput, requestWebPage, savePage } from "./helpers"; +import { Repack } from "@main/entity"; +import { logger } from "../logger"; + +const virtualConsole = new VirtualConsole(); + +const getGOGGame = async (url: string) => { + const data = await requestWebPage(url); + const { window } = new JSDOM(data, { virtualConsole }); + + const $modifiedTime = window.document.querySelector( + '[property="article:modified_time"]' + ) as HTMLMetaElement; + + const $em = window.document.querySelector( + "p:not(.lightweight-accordion *) em" + ); + const fileSize = $em.textContent.split("Size: ").at(1); + const $downloadButton = window.document.querySelector( + ".download-btn:not(.lightweight-accordion *)" + ) as HTMLAnchorElement; + + const { searchParams } = new URL($downloadButton.href); + const magnet = Buffer.from(searchParams.get("url"), "base64").toString( + "utf-8" + ); + + return { + fileSize: fileSize ?? "N/A", + uploadDate: new Date($modifiedTime.content), + repacker: "GOG", + magnet, + page: 1, + }; +}; + +export const getNewGOGGames = async (existingRepacks: Repack[] = []) => { + try { + const data = await requestWebPage( + "https://freegogpcgames.com/a-z-games-list/" + ); + + const { window } = new JSDOM(data, { virtualConsole }); + + const $uls = Array.from(window.document.querySelectorAll(".az-columns")); + + for (const $ul of $uls) { + const repacks: GameRepackInput[] = []; + const $lis = Array.from($ul.querySelectorAll("li")); + + for (const $li of $lis) { + const $a = $li.querySelector("a"); + const href = $a.href; + + const title = $a.textContent.trim(); + + const gameExists = existingRepacks.some( + (existingRepack) => existingRepack.title === title + ); + + if (!gameExists) { + try { + const game = await getGOGGame(href); + + repacks.push({ ...game, title }); + } catch (err) { + logger.error(err.message, { method: "getGOGGame", url: href }); + } + } + } + + if (repacks.length) await savePage(repacks); + } + } catch (err) { + logger.error(err.message, { method: "getNewGOGGames" }); + } +}; diff --git a/src/main/services/repack-tracker/helpers.ts b/src/main/services/repack-tracker/helpers.ts new file mode 100644 index 00000000..f30bf355 --- /dev/null +++ b/src/main/services/repack-tracker/helpers.ts @@ -0,0 +1,18 @@ +import { repackRepository } from "@main/repository"; + +import type { GameRepack } from "@types"; + +export type GameRepackInput = Omit< + GameRepack, + "id" | "repackerFriendlyName" | "createdAt" | "updatedAt" +>; + +export const savePage = async (repacks: GameRepackInput[]) => + Promise.all( + repacks.map((repack) => repackRepository.insert(repack).catch(() => {})) + ); + +export const requestWebPage = async (url: string) => + fetch(url, { + method: "GET", + }).then((response) => response.text()); diff --git a/src/main/services/repack-tracker/index.ts b/src/main/services/repack-tracker/index.ts new file mode 100644 index 00000000..fb345fae --- /dev/null +++ b/src/main/services/repack-tracker/index.ts @@ -0,0 +1,5 @@ +export * from "./1337x"; +export * from "./xatab"; +export * from "./cpg-repacks"; +export * from "./gog"; +// export * from "./online-fix"; diff --git a/src/main/services/repack-tracker/online-fix.ts b/src/main/services/repack-tracker/online-fix.ts new file mode 100644 index 00000000..c572629c --- /dev/null +++ b/src/main/services/repack-tracker/online-fix.ts @@ -0,0 +1,207 @@ +import { Repack } from "@main/entity"; +import { savePage } from "./helpers"; +import type { GameRepackInput } from "./helpers"; +import { logger } from "../logger"; +import parseTorrent, { + toMagnetURI, + Instance as TorrentInstance, +} from "parse-torrent"; +import { JSDOM } from "jsdom"; +import { gotScraping } from "got-scraping"; +import { CookieJar } from "tough-cookie"; + +import { format, parse, sub } from "date-fns"; +import { ru } from "date-fns/locale"; +import { decode } from "windows-1251"; +import { onlinefixFormatter } from "@main/helpers"; + +export const getNewRepacksFromOnlineFix = async ( + existingRepacks: Repack[] = [], + page = 1, + cookieJar = new CookieJar() +): Promise => { + const hasCredentials = + import.meta.env.MAIN_VITE_ONLINEFIX_USERNAME && + import.meta.env.MAIN_VITE_ONLINEFIX_PASSWORD; + if (!hasCredentials) return; + + const http = gotScraping.extend({ + headerGeneratorOptions: { + browsers: [ + { + name: "chrome", + minVersion: 87, + maxVersion: 89, + }, + ], + devices: ["desktop"], + locales: ["en-US"], + operatingSystems: ["windows", "linux"], + }, + cookieJar: cookieJar, + }); + + if (page === 1) { + await http.get("https://online-fix.me/"); + const preLogin = + ((await http + .get("https://online-fix.me/engine/ajax/authtoken.php", { + headers: { + "X-Requested-With": "XMLHttpRequest", + Referer: "https://online-fix.me/", + }, + }) + .json()) as { + field: string; + value: string; + }) || undefined; + + if (!preLogin.field || !preLogin.value) return; + + const params = new URLSearchParams({ + login_name: import.meta.env.MAIN_VITE_ONLINEFIX_USERNAME, + login_password: import.meta.env.MAIN_VITE_ONLINEFIX_PASSWORD, + login: "submit", + [preLogin.field]: preLogin.value, + }); + + await http + .post("https://online-fix.me/", { + encoding: "binary", + headers: { + Referer: "https://online-fix.me", + Origin: "https://online-fix.me", + "Content-Type": "application/x-www-form-urlencoded", + }, + body: params.toString(), + }) + .text(); + } + + const pageParams = page > 1 ? `${`/page/${page}`}` : ""; + + const home = await http.get(`https://online-fix.me${pageParams}`, { + encoding: "binary", + }); + const document = new JSDOM(home.body).window.document; + + const repacks: GameRepackInput[] = []; + const articles = Array.from(document.querySelectorAll(".news")); + const totalPages = Number( + document.querySelector("nav > a:nth-child(13)").textContent + ); + + try { + await Promise.all( + articles.map(async (article) => { + const gameName = onlinefixFormatter( + decode(article.querySelector("h2.title")?.textContent?.trim()) + ); + + const gameLink = article.querySelector("a")?.getAttribute("href"); + + if (!gameLink) return; + + const gamePage = await http + .get(gameLink, { + encoding: "binary", + }) + .text(); + + const gameDocument = new JSDOM(gamePage).window.document; + + const uploadDateText = gameDocument.querySelector("time").textContent; + + let decodedDateText = decode(uploadDateText); + + // "Вчера" means yesterday. + if (decodedDateText.includes("Вчера")) { + const yesterday = sub(new Date(), { days: 1 }); + const formattedYesterday = format(yesterday, "d LLLL yyyy", { + locale: ru, + }); + decodedDateText = decodedDateText.replace( + "Вчера", // "Change yesterday to the default expected date format" + formattedYesterday + ); + } + + const uploadDate = parse( + decodedDateText, + "d LLLL yyyy, HH:mm", + new Date(), + { + locale: ru, + } + ); + + const torrentButtons = Array.from( + gameDocument.querySelectorAll("a") + ).filter((a) => a.textContent?.includes("Torrent")); + + const torrentPrePage = torrentButtons[0]?.getAttribute("href"); + if (!torrentPrePage) return; + + const torrentPage = await http + .get(torrentPrePage, { + encoding: "binary", + headers: { + Referer: gameLink, + }, + }) + .text(); + + const torrentDocument = new JSDOM(torrentPage).window.document; + + const torrentLink = torrentDocument + .querySelector("a:nth-child(2)") + ?.getAttribute("href"); + + const torrentFile = Buffer.from( + await http + .get(`${torrentPrePage}/${torrentLink}`, { + responseType: "buffer", + }) + .buffer() + ); + + const torrent = parseTorrent(torrentFile) as TorrentInstance; + const magnetLink = toMagnetURI({ + infoHash: torrent.infoHash, + }); + + const torrentSizeInBytes = torrent.length; + const fileSizeFormatted = + torrentSizeInBytes >= 1024 ** 3 + ? `${(torrentSizeInBytes / 1024 ** 3).toFixed(1)}GBs` + : `${(torrentSizeInBytes / 1024 ** 2).toFixed(1)}MBs`; + + repacks.push({ + fileSize: fileSizeFormatted, + magnet: magnetLink, + page: 1, + repacker: "onlinefix", + title: gameName, + uploadDate: uploadDate, + }); + }) + ); + } catch (err) { + logger.error(err.message, { method: "getNewRepacksFromOnlineFix" }); + } + + const newRepacks = repacks.filter( + (repack) => + repack.uploadDate && + !existingRepacks.some( + (existingRepack) => existingRepack.title === repack.title + ) + ); + + if (!newRepacks.length) return; + if (page === totalPages) return; + + await savePage(newRepacks); + + return getNewRepacksFromOnlineFix(existingRepacks, page + 1, cookieJar); +}; diff --git a/src/main/services/repack-tracker/xatab.ts b/src/main/services/repack-tracker/xatab.ts new file mode 100644 index 00000000..91a0a4c4 --- /dev/null +++ b/src/main/services/repack-tracker/xatab.ts @@ -0,0 +1,95 @@ +import { JSDOM } from "jsdom"; + +import parseTorrent, { toMagnetURI } from "parse-torrent"; + +import { Repack } from "@main/entity"; +import { logger } from "../logger"; +import { requestWebPage, savePage } from "./helpers"; +import type { GameRepackInput } from "./helpers"; + +const getTorrentBuffer = (url: string) => + fetch(url, { method: "GET" }).then((response) => + response.arrayBuffer().then((buffer) => Buffer.from(buffer)) + ); + +const formatXatabDate = (str: string) => { + const date = new Date(); + + const [day, month, year] = str.split("."); + + date.setDate(Number(day)); + date.setMonth(Number(month) - 1); + date.setFullYear(Number(year)); + date.setHours(0, 0, 0, 0); + + return date; +}; + +const formatXatabDownloadSize = (str: string) => + str.replace(",", ".").replace(/Гб/g, "GB").replace(/Мб/g, "MB"); + +const getXatabRepack = async (url: string) => { + const data = await requestWebPage(url); + const { window } = new JSDOM(data); + + const $uploadDate = window.document.querySelector(".entry__date"); + const $size = window.document.querySelector(".entry__info-size"); + + const $downloadButton = window.document.querySelector( + ".download-torrent" + ) as HTMLAnchorElement; + + if (!$downloadButton) throw new Error("Download button not found"); + + const torrentBuffer = await getTorrentBuffer($downloadButton.href); + + return { + fileSize: formatXatabDownloadSize($size.textContent).toUpperCase(), + magnet: toMagnetURI({ + infoHash: parseTorrent(torrentBuffer).infoHash, + }), + uploadDate: formatXatabDate($uploadDate.textContent), + }; +}; + +export const getNewRepacksFromXatab = async ( + existingRepacks: Repack[] = [], + page = 1 +): Promise => { + const data = await requestWebPage(`https://byxatab.com/page/${page}`); + + const { window } = new JSDOM(data); + + const repacks: GameRepackInput[] = []; + + for (const $a of Array.from( + window.document.querySelectorAll(".entry__title a") + )) { + try { + const repack = await getXatabRepack(($a as HTMLAnchorElement).href); + + repacks.push({ + title: $a.textContent, + repacker: "Xatab", + ...repack, + page, + }); + } catch (err) { + logger.error(err.message, { method: "getNewRepacksFromXatab" }); + } + } + + const newRepacks = repacks.filter( + (repack) => + repack.uploadDate && + !existingRepacks.some( + (existingRepack) => existingRepack.title === repack.title + ) + ); + + if (!newRepacks.length) return; + + await savePage(newRepacks); + + return getNewRepacksFromXatab(existingRepacks, page + 1); +}; diff --git a/src/main/services/steam-250.ts b/src/main/services/steam-250.ts new file mode 100644 index 00000000..32ccdc56 --- /dev/null +++ b/src/main/services/steam-250.ts @@ -0,0 +1,34 @@ +import axios from "axios"; +import { JSDOM } from "jsdom"; +import { shuffle } from "lodash-es"; + +export const requestSteam250 = async (path: string) => { + return axios.get(`https://steam250.com${path}`).then((response) => { + const { window } = new JSDOM(response.data); + const { document } = window; + + return Array.from(document.querySelectorAll(".appline .title a")).map( + ($title: HTMLAnchorElement) => { + const steamGameUrl = $title.href; + if (!steamGameUrl) return null; + + return { + title: $title.textContent, + objectID: steamGameUrl.split("/").pop(), + }; + } + ); + }); +}; + +const steam250Paths = [ + "/hidden_gems", + `/${new Date().getFullYear()}`, + "/top250", + "/most_played", +]; + +export const getRandomSteam250List = async () => { + const [path] = shuffle(steam250Paths); + return requestSteam250(path); +}; diff --git a/src/main/services/steam-grid.ts b/src/main/services/steam-grid.ts new file mode 100644 index 00000000..9e2ce9d8 --- /dev/null +++ b/src/main/services/steam-grid.ts @@ -0,0 +1,71 @@ +import { getSteamAppAsset } from "@main/helpers"; + +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: string, + params: Record = {} +): Promise => { + const searchParams = new URLSearchParams(params); + + const response = await fetch( + `https://www.steamgriddb.com/api/v2/${path}/${shop}/${objectID}?${searchParams.toString()}`, + { + method: "GET", + headers: { + Authorization: `Bearer ${import.meta.env.MAIN_VITE_STEAMGRIDDB_API_KEY}`, + }, + } + ); + + return response.json(); +}; + +export const getSteamGridGameById = async ( + id: number +): Promise => { + const response = await fetch( + `https://www.steamgriddb.com/api/public/game/${id}`, + { + method: "GET", + headers: { + Referer: "https://www.steamgriddb.com/", + }, + } + ); + + return response.json(); +}; + +export const getSteamGameIconUrl = async (objectID: string) => { + const { + data: { id: steamGridGameId }, + } = await getSteamGridData(objectID, "games", "steam"); + + const steamGridGame = await getSteamGridGameById(steamGridGameId); + + return getSteamAppAsset( + "icon", + objectID, + steamGridGame.data.platforms.steam.metadata.clienticon + ); +}; diff --git a/src/main/services/steam.ts b/src/main/services/steam.ts new file mode 100644 index 00000000..0f2d4987 --- /dev/null +++ b/src/main/services/steam.ts @@ -0,0 +1,35 @@ +import axios from "axios"; + +import type { SteamAppDetails } from "@types"; + +import { logger } from "./logger"; + +export interface SteamAppDetailsResponse { + [key: string]: { + success: boolean; + data: SteamAppDetails; + }; +} + +export const getSteamAppDetails = async ( + objectID: string, + language: string +) => { + const searchParams = new URLSearchParams({ + appids: objectID, + l: language, + }); + + return axios + .get( + `http://store.steampowered.com/api/appdetails?${searchParams.toString()}` + ) + .then((response) => { + if (response.data[objectID].success) return response.data[objectID].data; + return null; + }) + .catch((err) => { + logger.error(err, { method: "getSteamAppDetails" }); + throw new Error(err); + }); +}; diff --git a/src/main/services/torrent-client.ts b/src/main/services/torrent-client.ts new file mode 100644 index 00000000..fa1cd59d --- /dev/null +++ b/src/main/services/torrent-client.ts @@ -0,0 +1,170 @@ +import path from "node:path"; +import cp from "node:child_process"; +import fs from "node:fs"; +import * as Sentry from "@sentry/electron/main"; +import { Notification, app, dialog } from "electron"; +import type { QueryDeepPartialEntity } from "typeorm/query-builder/QueryPartialEntity"; + +import { Game } from "@main/entity"; +import { gameRepository, userPreferencesRepository } from "@main/repository"; +import { t } from "i18next"; +import { WindowManager } from "./window-manager"; + +const binaryNameByPlatform: Partial> = { + darwin: "hydra-download-manager", + linux: "hydra-download-manager", + win32: "hydra-download-manager.exe", +}; + +enum TorrentState { + CheckingFiles = 1, + DownloadingMetadata = 2, + Downloading = 3, + Finished = 4, + Seeding = 5, +} + +export interface TorrentUpdate { + gameId: number; + progress: number; + downloadSpeed: number; + timeRemaining: number; + numPeers: number; + numSeeds: number; + status: TorrentState; + folderName: string; + fileSize: number; + bytesDownloaded: number; +} + +export const BITTORRENT_PORT = "5881"; + +export class TorrentClient { + public static startTorrentClient( + writePipePath: string, + readPipePath: string + ) { + const commonArgs = [BITTORRENT_PORT, writePipePath, readPipePath]; + + if (app.isPackaged) { + const binaryName = binaryNameByPlatform[process.platform]; + const binaryPath = path.join( + process.resourcesPath, + "dist", + "hydra-download-manager", + binaryName + ); + + if (!fs.existsSync(binaryPath)) { + dialog.showErrorBox( + "Fatal", + "Hydra download manager binary not found. Please check if it has been removed by Windows Defender." + ); + + app.quit(); + } + + cp.spawn(binaryPath, commonArgs, { + stdio: "inherit", + windowsHide: true, + }); + return; + } + + const scriptPath = path.join( + __dirname, + "..", + "..", + "torrent-client", + "main.py" + ); + + cp.spawn("python3", [scriptPath, ...commonArgs], { + stdio: "inherit", + }); + } + + private static getTorrentStateName(state: TorrentState) { + if (state === TorrentState.CheckingFiles) return "checking_files"; + if (state === TorrentState.Downloading) return "downloading"; + if (state === TorrentState.DownloadingMetadata) + return "downloading_metadata"; + if (state === TorrentState.Finished) return "finished"; + if (state === TorrentState.Seeding) return "seeding"; + return ""; + } + + private static getGameProgress(game: Game) { + if (game.status === "checking_files") return game.fileVerificationProgress; + return game.progress; + } + + public static async onSocketData(data: Buffer) { + const message = Buffer.from(data).toString("utf-8"); + + try { + const payload = JSON.parse(message) as TorrentUpdate; + + const updatePayload: QueryDeepPartialEntity = { + bytesDownloaded: payload.bytesDownloaded, + status: this.getTorrentStateName(payload.status), + }; + + if (payload.status === TorrentState.CheckingFiles) { + updatePayload.fileVerificationProgress = payload.progress; + } else { + if (payload.folderName) { + updatePayload.folderName = payload.folderName; + updatePayload.fileSize = payload.fileSize; + } + } + + if ( + [TorrentState.Downloading, TorrentState.Seeding].includes( + payload.status + ) + ) { + updatePayload.progress = payload.progress; + } + + await gameRepository.update({ id: payload.gameId }, updatePayload); + + const game = await gameRepository.findOne({ + where: { id: payload.gameId }, + relations: { repack: true }, + }); + + if (game.progress === 1) { + const userPreferences = await userPreferencesRepository.findOne({ + where: { id: 1 }, + }); + + if (userPreferences?.downloadNotificationsEnabled) { + new Notification({ + title: t("download_complete", { + ns: "notifications", + lng: userPreferences.language, + }), + body: t("game_ready_to_install", { + ns: "notifications", + lng: userPreferences.language, + title: game.title, + }), + }).show(); + } + } + + if (WindowManager.mainWindow) { + const progress = this.getGameProgress(game); + WindowManager.mainWindow.setProgressBar(progress === 1 ? -1 : progress); + + WindowManager.mainWindow.webContents.send( + "on-download-progress", + JSON.parse(JSON.stringify({ ...payload, game })) + ); + } + } catch (err) { + Sentry.captureException(err); + } + } +} diff --git a/src/main/services/update-resolver.ts b/src/main/services/update-resolver.ts new file mode 100644 index 00000000..8701d17d --- /dev/null +++ b/src/main/services/update-resolver.ts @@ -0,0 +1,159 @@ +import path from "node:path"; +import { app } from "electron"; + +import { chunk } from "lodash-es"; + +import { createDataSource, dataSource } from "@main/data-source"; +import { Repack, RepackerFriendlyName, SteamGame } from "@main/entity"; +import { + migrationScriptRepository, + repackRepository, + repackerFriendlyNameRepository, + steamGameRepository, +} from "@main/repository"; +import { MigrationScript } from "@main/entity/migration-script.entity"; +import { Like } from "typeorm"; + +const migrationScripts = { + /* + 0.0.6 -> 0.0.7 + Xatab repacks were previously created with an incorrect upload date. + This migration script will update the upload date of all Xatab repacks. + */ + "0.0.7": async (updateRepacks: Repack[]) => { + const VERSION = "0.0.7"; + + const migrationScript = await migrationScriptRepository.findOne({ + where: { + version: VERSION, + }, + }); + + if (!migrationScript) { + const xatabRepacks = updateRepacks.filter( + (repack) => repack.repacker === "Xatab" + ); + + await dataSource.transaction(async (transactionalEntityManager) => { + await Promise.all( + xatabRepacks.map((repack) => + transactionalEntityManager.getRepository(Repack).update( + { + title: repack.title, + repacker: repack.repacker, + }, + { + uploadDate: repack.uploadDate, + } + ) + ) + ); + + await transactionalEntityManager.getRepository(MigrationScript).insert({ + version: VERSION, + }); + }); + } + }, + /* + 1.0.1 -> 1.1.0 + A few torrents scraped from 1337x were previously created with an incorrect upload date. + */ + "1.1.0": async () => { + const VERSION = "1.1.0"; + + const migrationScript = await migrationScriptRepository.findOne({ + where: { + version: VERSION, + }, + }); + + if (!migrationScript) { + await dataSource.transaction(async (transactionalEntityManager) => { + const repacks = await transactionalEntityManager + .getRepository(Repack) + .find({ + where: { + uploadDate: Like("1%"), + }, + }); + + await Promise.all( + repacks.map(async (repack) => { + return transactionalEntityManager + .getRepository(Repack) + .update( + { id: repack.id }, + { uploadDate: new Date(repack.uploadDate) } + ); + }) + ); + + await transactionalEntityManager.getRepository(MigrationScript).insert({ + version: VERSION, + }); + }); + } + }, +}; + +export const runMigrationScripts = async (updateRepacks: Repack[]) => { + return Promise.all( + Object.values(migrationScripts).map((migrationScript) => { + return migrationScript(updateRepacks); + }) + ); +}; + +export const resolveDatabaseUpdates = async () => { + const updateDataSource = createDataSource({ + database: app.isPackaged + ? path.join(process.resourcesPath, "hydra.db") + : path.join(__dirname, "..", "..", "resources", "hydra.db"), + }); + + return updateDataSource.initialize().then(async () => { + const updateRepackRepository = updateDataSource.getRepository(Repack); + const updateRepackerFriendlyNameRepository = + updateDataSource.getRepository(RepackerFriendlyName); + const updateSteamGameRepository = updateDataSource.getRepository(SteamGame); + + const [updateRepacks, updateSteamGames, updateRepackerFriendlyNames] = + await Promise.all([ + updateRepackRepository.find(), + updateSteamGameRepository.find(), + updateRepackerFriendlyNameRepository.find(), + ]); + + await runMigrationScripts(updateRepacks); + + await repackerFriendlyNameRepository + .createQueryBuilder() + .insert() + .values(updateRepackerFriendlyNames) + .orIgnore() + .execute(); + + const updateRepacksChunks = chunk(updateRepacks, 800); + + for (const chunk of updateRepacksChunks) { + await repackRepository + .createQueryBuilder() + .insert() + .values(chunk) + .orIgnore() + .execute(); + } + + const steamGamesChunks = chunk(updateSteamGames, 800); + + for (const chunk of steamGamesChunks) { + await steamGameRepository + .createQueryBuilder() + .insert() + .values(chunk) + .orIgnore() + .execute(); + } + }); +}; diff --git a/src/main/services/window-manager.ts b/src/main/services/window-manager.ts new file mode 100644 index 00000000..d8b174a2 --- /dev/null +++ b/src/main/services/window-manager.ts @@ -0,0 +1,109 @@ +import { BrowserWindow, Menu, Tray, app } from "electron"; +import { electronApp, optimizer, is } from "@electron-toolkit/utils"; +import { t } from "i18next"; +import path from "node:path"; + +export class WindowManager { + public static mainWindow: Electron.BrowserWindow | null = null; + + public static createMainWindow() { + // Create the browser window. + this.mainWindow = new BrowserWindow({ + width: 1200, + height: 720, + minWidth: 1024, + minHeight: 540, + titleBarStyle: "hidden", + // icon: path.join(__dirname, "..", "..", "images", "icon.png"), + trafficLightPosition: { x: 16, y: 16 }, + titleBarOverlay: { + symbolColor: "#DADBE1", + color: "#151515", + height: 34, + }, + webPreferences: { + preload: path.join(__dirname, "../preload/index.mjs"), + sandbox: false, + }, + }); + + this.mainWindow.removeMenu(); + + // HMR for renderer base on electron-vite cli. + // Load the remote URL for development or the local html file for production. + if (is.dev && process.env["ELECTRON_RENDERER_URL"]) { + this.mainWindow.loadURL(process.env["ELECTRON_RENDERER_URL"]); + } else { + this.mainWindow.loadFile(path.join(__dirname, "../renderer/index.html")); + } + + this.mainWindow.webContents.on("did-finish-load", () => { + if (!app.isPackaged) { + // Open the DevTools. + this.mainWindow.webContents.openDevTools(); + } + }); + + this.mainWindow.on("close", () => { + WindowManager.mainWindow.setProgressBar(-1); + }); + } + + public static redirect(path: string) { + if (!this.mainWindow) this.createMainWindow(); + this.mainWindow.loadURL(`${MAIN_WINDOW_WEBPACK_ENTRY}#${path}`); + + if (this.mainWindow.isMinimized()) this.mainWindow.restore(); + this.mainWindow.focus(); + } + + public static createSystemTray(language: string) { + const tray = new Tray( + app.isPackaged + ? path.join(process.resourcesPath, "icon_tray.png") + : path.join(__dirname, "..", "..", "resources", "icon_tray.png") + ); + + const contextMenu = Menu.buildFromTemplate([ + { + label: t("open", { + ns: "system_tray", + lng: language, + }), + type: "normal", + click: () => { + if (this.mainWindow) { + this.mainWindow.show(); + } else { + this.createMainWindow(); + } + }, + }, + { + label: t("quit", { + ns: "system_tray", + lng: language, + }), + type: "normal", + click: () => app.quit(), + }, + ]); + + tray.setToolTip("Hydra"); + tray.setContextMenu(contextMenu); + + if (process.platform === "win32") { + tray.addListener("click", () => { + if (this.mainWindow) { + if (WindowManager.mainWindow.isMinimized()) + WindowManager.mainWindow.restore(); + + WindowManager.mainWindow.focus(); + return; + } + + this.createMainWindow(); + }); + } + } +} diff --git a/src/main/state-manager.ts b/src/main/state-manager.ts new file mode 100644 index 00000000..6dec3985 --- /dev/null +++ b/src/main/state-manager.ts @@ -0,0 +1,33 @@ +import type { Repack, RepackerFriendlyName, SteamGame } from "@main/entity"; + +interface State { + repacks: Repack[]; + repackersFriendlyNames: RepackerFriendlyName[]; + steamGames: SteamGame[]; + eventResults: Map<[string, any[]], any>; +} + +const initialState: State = { + repacks: [], + repackersFriendlyNames: [], + steamGames: [], + eventResults: new Map(), +}; + +export class StateManager { + private state = initialState; + + public setValue(key: T, value: State[T]) { + this.state = { ...this.state, [key]: value }; + } + + public getValue(key: T) { + return this.state[key]; + } + + public clearValue(key: T) { + this.state = { ...this.state, [key]: initialState[key] }; + } +} + +export const stateManager = new StateManager(); diff --git a/src/main/vite-env.d.ts b/src/main/vite-env.d.ts new file mode 100644 index 00000000..2c277d37 --- /dev/null +++ b/src/main/vite-env.d.ts @@ -0,0 +1,12 @@ +/// + +interface ImportMetaEnv { + readonly MAIN_VITE_STEAMGRIDDB_API_KEY: string; + readonly MAIN_VITE_ONLINEFIX_USERNAME: string; + readonly MAIN_VITE_ONLINEFIX_PASSWORD: string; + readonly MAIN_VITE_SENTRY_DSN: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/src/preload/index.d.ts b/src/preload/index.d.ts new file mode 100644 index 00000000..97dcca0b --- /dev/null +++ b/src/preload/index.d.ts @@ -0,0 +1,104 @@ +// See the Electron documentation for details on how to use preload scripts: +// https://www.electronjs.org/docs/latest/tutorial/process-model#preload-scripts +import { contextBridge, ipcRenderer } from "electron"; + +import type { + CatalogueCategory, + GameShop, + TorrentProgress, + UserPreferences, +} from "@types"; + +contextBridge.exposeInMainWorld("electron", { + /* Torrenting */ + startGameDownload: ( + repackId: number, + objectID: string, + title: string, + shop: GameShop + ) => ipcRenderer.invoke("startGameDownload", repackId, objectID, title, shop), + cancelGameDownload: (gameId: number) => + ipcRenderer.invoke("cancelGameDownload", gameId), + pauseGameDownload: (gameId: number) => + ipcRenderer.invoke("pauseGameDownload", gameId), + resumeGameDownload: (gameId: number) => + ipcRenderer.invoke("resumeGameDownload", gameId), + onDownloadProgress: (cb: (value: TorrentProgress) => void) => { + const listener = ( + _event: Electron.IpcRendererEvent, + value: TorrentProgress + ) => cb(value); + ipcRenderer.on("on-download-progress", listener); + return () => ipcRenderer.removeListener("on-download-progress", listener); + }, + + /* Catalogue */ + searchGames: (query: string) => ipcRenderer.invoke("searchGames", query), + getCatalogue: (category: CatalogueCategory) => + ipcRenderer.invoke("getCatalogue", category), + getGameShopDetails: (objectID: string, shop: GameShop, language: string) => + ipcRenderer.invoke("getGameShopDetails", objectID, shop, language), + getRandomGame: () => ipcRenderer.invoke("getRandomGame"), + getHowLongToBeat: (objectID: string, shop: GameShop, title: string) => + ipcRenderer.invoke("getHowLongToBeat", objectID, shop, title), + getGames: (take?: number, prevCursor?: number) => + ipcRenderer.invoke("getGames", take, prevCursor), + + /* User preferences */ + getUserPreferences: () => ipcRenderer.invoke("getUserPreferences"), + updateUserPreferences: (preferences: UserPreferences) => + ipcRenderer.invoke("updateUserPreferences", preferences), + + /* Library */ + addGameToLibrary: ( + objectID: string, + title: string, + shop: GameShop, + executablePath: string + ) => + ipcRenderer.invoke( + "addGameToLibrary", + objectID, + title, + shop, + executablePath + ), + getLibrary: () => ipcRenderer.invoke("getLibrary"), + getRepackersFriendlyNames: () => + ipcRenderer.invoke("getRepackersFriendlyNames"), + openGameInstaller: (gameId: number) => + ipcRenderer.invoke("openGameInstaller", gameId), + openGame: (gameId: number, executablePath: string) => + ipcRenderer.invoke("openGame", gameId, executablePath), + closeGame: (gameId: number) => ipcRenderer.invoke("closeGame", gameId), + removeGame: (gameId: number) => ipcRenderer.invoke("removeGame", gameId), + deleteGameFolder: (gameId: number) => + ipcRenderer.invoke("deleteGameFolder", gameId), + getGameByObjectID: (objectID: string) => + ipcRenderer.invoke("getGameByObjectID", objectID), + onPlaytime: (cb: (gameId: number) => void) => { + const listener = (_event: Electron.IpcRendererEvent, gameId: number) => + cb(gameId); + ipcRenderer.on("on-playtime", listener); + return () => ipcRenderer.removeListener("on-playtime", listener); + }, + onGameClose: (cb: (gameId: number) => void) => { + const listener = (_event: Electron.IpcRendererEvent, gameId: number) => + cb(gameId); + ipcRenderer.on("on-game-close", listener); + return () => ipcRenderer.removeListener("on-game-close", listener); + }, + + /* Hardware */ + getDiskFreeSpace: () => ipcRenderer.invoke("getDiskFreeSpace"), + + /* Misc */ + getOrCacheImage: (url: string) => ipcRenderer.invoke("getOrCacheImage", url), + ping: () => ipcRenderer.invoke("ping"), + getVersion: () => ipcRenderer.invoke("getVersion"), + getDefaultDownloadsPath: () => ipcRenderer.invoke("getDefaultDownloadsPath"), + openExternal: (src: string) => ipcRenderer.invoke("openExternal", src), + showOpenDialog: (options: Electron.OpenDialogOptions) => + ipcRenderer.invoke("showOpenDialog", options), + platform: process.platform, +}); diff --git a/src/preload/index.ts b/src/preload/index.ts new file mode 100644 index 00000000..97dcca0b --- /dev/null +++ b/src/preload/index.ts @@ -0,0 +1,104 @@ +// See the Electron documentation for details on how to use preload scripts: +// https://www.electronjs.org/docs/latest/tutorial/process-model#preload-scripts +import { contextBridge, ipcRenderer } from "electron"; + +import type { + CatalogueCategory, + GameShop, + TorrentProgress, + UserPreferences, +} from "@types"; + +contextBridge.exposeInMainWorld("electron", { + /* Torrenting */ + startGameDownload: ( + repackId: number, + objectID: string, + title: string, + shop: GameShop + ) => ipcRenderer.invoke("startGameDownload", repackId, objectID, title, shop), + cancelGameDownload: (gameId: number) => + ipcRenderer.invoke("cancelGameDownload", gameId), + pauseGameDownload: (gameId: number) => + ipcRenderer.invoke("pauseGameDownload", gameId), + resumeGameDownload: (gameId: number) => + ipcRenderer.invoke("resumeGameDownload", gameId), + onDownloadProgress: (cb: (value: TorrentProgress) => void) => { + const listener = ( + _event: Electron.IpcRendererEvent, + value: TorrentProgress + ) => cb(value); + ipcRenderer.on("on-download-progress", listener); + return () => ipcRenderer.removeListener("on-download-progress", listener); + }, + + /* Catalogue */ + searchGames: (query: string) => ipcRenderer.invoke("searchGames", query), + getCatalogue: (category: CatalogueCategory) => + ipcRenderer.invoke("getCatalogue", category), + getGameShopDetails: (objectID: string, shop: GameShop, language: string) => + ipcRenderer.invoke("getGameShopDetails", objectID, shop, language), + getRandomGame: () => ipcRenderer.invoke("getRandomGame"), + getHowLongToBeat: (objectID: string, shop: GameShop, title: string) => + ipcRenderer.invoke("getHowLongToBeat", objectID, shop, title), + getGames: (take?: number, prevCursor?: number) => + ipcRenderer.invoke("getGames", take, prevCursor), + + /* User preferences */ + getUserPreferences: () => ipcRenderer.invoke("getUserPreferences"), + updateUserPreferences: (preferences: UserPreferences) => + ipcRenderer.invoke("updateUserPreferences", preferences), + + /* Library */ + addGameToLibrary: ( + objectID: string, + title: string, + shop: GameShop, + executablePath: string + ) => + ipcRenderer.invoke( + "addGameToLibrary", + objectID, + title, + shop, + executablePath + ), + getLibrary: () => ipcRenderer.invoke("getLibrary"), + getRepackersFriendlyNames: () => + ipcRenderer.invoke("getRepackersFriendlyNames"), + openGameInstaller: (gameId: number) => + ipcRenderer.invoke("openGameInstaller", gameId), + openGame: (gameId: number, executablePath: string) => + ipcRenderer.invoke("openGame", gameId, executablePath), + closeGame: (gameId: number) => ipcRenderer.invoke("closeGame", gameId), + removeGame: (gameId: number) => ipcRenderer.invoke("removeGame", gameId), + deleteGameFolder: (gameId: number) => + ipcRenderer.invoke("deleteGameFolder", gameId), + getGameByObjectID: (objectID: string) => + ipcRenderer.invoke("getGameByObjectID", objectID), + onPlaytime: (cb: (gameId: number) => void) => { + const listener = (_event: Electron.IpcRendererEvent, gameId: number) => + cb(gameId); + ipcRenderer.on("on-playtime", listener); + return () => ipcRenderer.removeListener("on-playtime", listener); + }, + onGameClose: (cb: (gameId: number) => void) => { + const listener = (_event: Electron.IpcRendererEvent, gameId: number) => + cb(gameId); + ipcRenderer.on("on-game-close", listener); + return () => ipcRenderer.removeListener("on-game-close", listener); + }, + + /* Hardware */ + getDiskFreeSpace: () => ipcRenderer.invoke("getDiskFreeSpace"), + + /* Misc */ + getOrCacheImage: (url: string) => ipcRenderer.invoke("getOrCacheImage", url), + ping: () => ipcRenderer.invoke("ping"), + getVersion: () => ipcRenderer.invoke("getVersion"), + getDefaultDownloadsPath: () => ipcRenderer.invoke("getDefaultDownloadsPath"), + openExternal: (src: string) => ipcRenderer.invoke("openExternal", src), + showOpenDialog: (options: Electron.OpenDialogOptions) => + ipcRenderer.invoke("showOpenDialog", options), + platform: process.platform, +}); diff --git a/src/renderer/index.html b/src/renderer/index.html new file mode 100644 index 00000000..027e5085 --- /dev/null +++ b/src/renderer/index.html @@ -0,0 +1,17 @@ + + + + + Electron + + + + + +

+ + + diff --git a/src/renderer/src/app.css.ts b/src/renderer/src/app.css.ts new file mode 100644 index 00000000..fc104adc --- /dev/null +++ b/src/renderer/src/app.css.ts @@ -0,0 +1,107 @@ +import { ComplexStyleRule, globalStyle, style } from "@vanilla-extract/css"; +import { SPACING_UNIT, vars } from "./theme.css"; + +globalStyle("*", { + boxSizing: "border-box", +}); + +globalStyle("::-webkit-scrollbar", { + width: "9px", +}); + +globalStyle("::-webkit-scrollbar-track", { + backgroundColor: "rgba(255, 255, 255, 0.03)", +}); + +globalStyle("::-webkit-scrollbar-thumb", { + backgroundColor: "rgba(255, 255, 255, 0.08)", + borderRadius: "24px", +}); + +globalStyle("html, body, #root, main", { + height: "100%", +}); + +globalStyle("body", { + overflow: "hidden", + userSelect: "none", + fontFamily: "'Fira Mono', monospace", + background: vars.color.background, + color: vars.color.bodyText, + margin: "0", +}); + +globalStyle("button", { + padding: "0", + backgroundColor: "transparent", + border: "none", + fontFamily: "inherit", + fontSize: vars.size.bodyFontSize, +}); + +globalStyle("h1, h2, h3, h4, h5, h6, p", { + margin: 0, +}); + +globalStyle("#root, main", { + display: "flex", +}); + +globalStyle("#root", { + flexDirection: "column", +}); + +globalStyle("main", { + overflow: "hidden", +}); + +globalStyle( + "input::-webkit-outer-spin-button, input::-webkit-inner-spin-button", + { + WebkitAppearance: "none", + margin: "0", + } +); + +globalStyle("label", { + fontSize: vars.size.bodyFontSize, +}); + +globalStyle("input[type=number]", { + MozAppearance: "textfield", +}); + +globalStyle("img", { + WebkitUserDrag: "none", +} as Record); + +export const container = style({ + width: "100%", + height: "100%", + overflow: "hidden", + display: "flex", + flexDirection: "column", +}); + +export const content = style({ + overflowY: "auto", + alignItems: "center", + display: "flex", + flexDirection: "column", + position: "relative", + height: "100%", + background: `linear-gradient(0deg, ${vars.color.darkBackground} 50%, ${vars.color.background} 100%)`, +}); + +export const titleBar = style({ + display: "flex", + width: "100%", + height: "35px", + minHeight: "35px", + backgroundColor: vars.color.darkBackground, + alignItems: "center", + padding: `0 ${SPACING_UNIT * 2}px`, + WebkitAppRegion: "drag", + zIndex: "2", + borderBottom: `1px solid ${vars.color.borderColor}`, +} as ComplexStyleRule); diff --git a/src/renderer/src/app.tsx b/src/renderer/src/app.tsx new file mode 100644 index 00000000..4e633bcf --- /dev/null +++ b/src/renderer/src/app.tsx @@ -0,0 +1,122 @@ +import { useCallback, useEffect, useRef } from "react"; + +import { Sidebar, BottomPanel, Header } from "@renderer/components"; + +import { + useAppDispatch, + useAppSelector, + useDownload, + useLibrary, +} from "@renderer/hooks"; + +import * as styles from "./app.css"; +import { themeClass } from "./theme.css"; + +import { Outlet, useLocation, useNavigate } from "react-router-dom"; +import { + setSearch, + clearSearch, + setUserPreferences, + setRepackersFriendlyNames, +} from "@renderer/features"; + +document.body.classList.add(themeClass); + +export function App() { + const contentRef = useRef(null); + const { updateLibrary } = useLibrary(); + + const { clearDownload, addPacket } = useDownload(); + + const dispatch = useAppDispatch(); + + const navigate = useNavigate(); + const location = useLocation(); + + const search = useAppSelector((state) => state.search.value); + + useEffect(() => { + Promise.all([ + window.electron.getUserPreferences(), + window.electron.getRepackersFriendlyNames(), + updateLibrary(), + ]).then(([preferences, repackersFriendlyNames]) => { + dispatch(setUserPreferences(preferences)); + dispatch(setRepackersFriendlyNames(repackersFriendlyNames)); + }); + }, [navigate, location.pathname, dispatch, updateLibrary]); + + useEffect(() => { + const unsubscribe = window.electron.onDownloadProgress( + (downloadProgress) => { + if (downloadProgress.game.progress === 1) { + clearDownload(); + updateLibrary(); + return; + } + + addPacket(downloadProgress); + } + ); + + return () => { + unsubscribe(); + }; + }, [clearDownload, addPacket, updateLibrary]); + + const handleSearch = useCallback( + (query: string) => { + dispatch(setSearch(query)); + + if (query === "") { + navigate(-1); + return; + } + + const searchParams = new URLSearchParams({ + query, + }); + + navigate(`/search?${searchParams.toString()}`, { + replace: location.pathname.startsWith("/search"), + }); + }, + [dispatch, location.pathname, navigate] + ); + + const handleClear = useCallback(() => { + dispatch(clearSearch()); + navigate(-1); + }, [dispatch, navigate]); + + useEffect(() => { + if (contentRef.current) contentRef.current.scrollTop = 0; + }, [location.pathname, location.search]); + + return ( + <> + {window.electron.platform === "win32" && ( +
+

Hydra

+
+ )} + +
+ + +
+
+ +
+ +
+
+
+ + + ); +} diff --git a/src/renderer/src/assets/discord-icon.svg b/src/renderer/src/assets/discord-icon.svg new file mode 100644 index 00000000..2fba46cd --- /dev/null +++ b/src/renderer/src/assets/discord-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/src/assets/epic-games-logo.svg b/src/renderer/src/assets/epic-games-logo.svg new file mode 100644 index 00000000..a6c53dbc --- /dev/null +++ b/src/renderer/src/assets/epic-games-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/src/assets/lottie/downloading.json b/src/renderer/src/assets/lottie/downloading.json new file mode 100644 index 00000000..1ef705de --- /dev/null +++ b/src/renderer/src/assets/lottie/downloading.json @@ -0,0 +1,843 @@ +{ + "v": "4.8.0", + "meta": { "g": "LottieFiles AE 3.5.6", "a": "", "k": "", "d": "", "tc": "" }, + "fr": 60, + "ip": 0, + "op": 120, + "w": 714, + "h": 678, + "nm": "Pre-comp 1", + "ddd": 0, + "assets": [ + { + "id": "comp_0", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "centro", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.214, "y": 1 }, + "o": { "x": 0.462, "y": 0 }, + "t": 0, + "s": [450, 907, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 30, "s": [450, 1513, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [-348, -169, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0] + ], + "v": [ + [-348, -420], + [-348, -30] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.854901960784, 0.858823529412, 0.882352941176, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 77, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-348, -164], "ix": 2 }, + "a": { "a": 0, "k": [-348, -156], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "esquerdo", + "parent": 1, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.298], "y": [1] }, + "o": { "x": [0.448], "y": [0] }, + "t": 6, + "s": [43.5] + }, + { "t": 36, "s": [-1] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [-348.39, -36.55, 0], "ix": 2 }, + "a": { "a": 0, "k": [-2, 84, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0] + ], + "v": [ + [-178, -102], + [-2, 84] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.854901960784, 0.858823529412, 0.882352941176, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 77, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { "a": 0, "k": 8, "ix": 1 }, + "e": { "a": 0, "k": 100, "ix": 2 }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "direito", + "parent": 1, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.265], "y": [1] }, + "o": { "x": [0.53], "y": [0] }, + "t": 6, + "s": [-43.5] + }, + { "t": 36, "s": [1] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [-348.39, -36.55, 0], "ix": 2 }, + "a": { "a": 0, "k": [-2, 84, 0], "ix": 1 }, + "s": { "a": 0, "k": [-100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0] + ], + "v": [ + [-178, -102], + [-2, 84] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "tm", + "s": { "a": 0, "k": 8, "ix": 1 }, + "e": { "a": 0, "k": 100, "ix": 2 }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.854901960784, 0.858823529412, 0.882352941176, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 77, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 4, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + } + ] + }, + { + "id": "comp_1", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "centro", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.569, "y": 1 }, + "o": { "x": 0.809, "y": 0 }, + "t": 0, + "s": [450, 391, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 30, "s": [450, 997, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [-348, -169, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0] + ], + "v": [ + [-348, -420], + [-348, -30] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.854901960784, 0.858823529412, 0.882352941176, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 77, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-348, -164], "ix": 2 }, + "a": { "a": 0, "k": [-348, -156], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "esquerdo", + "parent": 1, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.552], "y": [1] }, + "o": { "x": [0.702], "y": [0] }, + "t": 0, + "s": [-1] + }, + { "t": 30, "s": [43.5] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [-348.39, -36.55, 0], "ix": 2 }, + "a": { "a": 0, "k": [-2, 84, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0] + ], + "v": [ + [-178, -102], + [-2, 84] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.854901960784, 0.858823529412, 0.882352941176, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 77, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { "a": 0, "k": 8, "ix": 1 }, + "e": { "a": 0, "k": 100, "ix": 2 }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "direito", + "parent": 1, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.47], "y": [1] }, + "o": { "x": [0.735], "y": [0] }, + "t": 0, + "s": [1] + }, + { "t": 30, "s": [-43.5] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [-348.39, -36.55, 0], "ix": 2 }, + "a": { "a": 0, "k": [-2, 84, 0], "ix": 1 }, + "s": { "a": 0, "k": [-100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0] + ], + "v": [ + [-178, -102], + [-2, 84] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "tm", + "s": { "a": 0, "k": 8, "ix": 1 }, + "e": { "a": 0, "k": 100, "ix": 2 }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.854901960784, 0.858823529412, 0.882352941176, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 77, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 4, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + } + ] + } + ], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 0, + "nm": "seta 2", + "refId": "comp_0", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [357, -247, 0], "ix": 2 }, + "a": { "a": 0, "k": [450, 960, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "w": 900, + "h": 1920, + "ip": 30, + "op": 120, + "st": 30, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 0, + "nm": "seta", + "refId": "comp_1", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [357, 258, 0], "ix": 2 }, + "a": { "a": 0, "k": [450, 345, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "w": 900, + "h": 690, + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "base Outlines", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [357, 548.713, 0], "ix": 2 }, + "a": { "a": 0, "k": [357.81, 129.934, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 50.043], + [0, 0], + [-21.158, 0], + [0, -21.447], + [0, 0], + [-7.049, 0], + [0, 0], + [0, 7.149], + [0, 0], + [-21.158, 0], + [0, -21.447], + [0, 0], + [49.368, 0] + ], + "o": [ + [-49.369, 0], + [0, 0], + [0, -21.447], + [21.158, 0], + [0, 0], + [0, 7.145], + [0, 0], + [7.053, 0], + [0, 0], + [0, -21.447], + [21.158, 0], + [0, 0], + [0, 50.043], + [0, 0] + ], + "v": [ + [-268.169, 129.445], + [-357.559, 38.834], + [-357.559, -90.61], + [-319.249, -129.445], + [-280.939, -90.61], + [-280.939, 38.834], + [-268.169, 51.778], + [268.169, 51.778], + [280.939, 38.834], + [280.939, -90.61], + [319.249, -129.445], + [357.559, -90.61], + [357.559, 38.834], + [268.169, 129.445] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.865977448108, 0.86824388691, 0.890449075138, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [357.809, 129.695], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + } + ], + "markers": [] +} diff --git a/src/renderer/src/assets/lottie/settings.json b/src/renderer/src/assets/lottie/settings.json new file mode 100644 index 00000000..92fa645e --- /dev/null +++ b/src/renderer/src/assets/lottie/settings.json @@ -0,0 +1,1054 @@ +{ + "v": "4.8.0", + "meta": { "g": "LottieFiles AE 3.5.6", "a": "", "k": "", "d": "", "tc": "" }, + "fr": 60, + "ip": 0, + "op": 120, + "w": 900, + "h": 900, + "nm": "Pre-comp 1", + "ddd": 0, + "assets": [ + { + "id": "comp_0", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "estrela Outlines 2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.933], "y": [0] }, + "t": 0, + "s": [0] + }, + { "t": 60, "s": [180] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [450, 450, 0], "ix": 2 }, + "a": { "a": 0, "k": [308.5, 333, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.011, 34.469], + [34.47, -0.012], + [-0.011, -34.469], + [-34.47, 0.011] + ], + "o": [ + [-0.012, -34.47], + [-34.469, 0.011], + [0.012, 34.47], + [34.469, -0.012] + ], + "v": [ + [62.333, 0.005], + [-0.101, -62.387], + [-62.493, 0.047], + [-0.059, 62.439] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0, -68.917], + [68.916, 0], + [0, 68.916], + [-68.916, 0] + ], + "o": [ + [0, 68.916], + [-68.916, 0], + [0, -68.917], + [68.916, 0] + ], + "v": [ + [124.725, 0.005], + [-0.059, 124.789], + [-124.843, 0.005], + [-0.059, -124.779] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 2, + "ty": "sh", + "ix": 3, + "ks": { + "a": 0, + "k": { + "i": [ + [15.804, -1.372], + [1.206, -4.575], + [0, 0], + [18.676, -9.234], + [6.656, -4.451], + [23.252, 6.364], + [0, 0], + [0.832, -1.206], + [6.697, -14.392], + [-3.327, -3.328], + [0, 0], + [1.331, -20.755], + [-0.499, -8.062], + [17.095, -16.887], + [0, 0], + [-0.582, -1.289], + [-9.151, -12.977], + [-4.575, 1.248], + [0, 0], + [-17.345, -11.563], + [-7.196, -3.578], + [-6.114, -23.293], + [0, 0], + [-1.497, -0.124], + [-15.804, 1.373], + [-1.207, 4.575], + [0, 0], + [-18.676, 9.234], + [-6.655, 4.451], + [-23.251, -6.364], + [0, 0], + [-0.832, 1.206], + [-6.739, 14.392], + [3.327, 3.328], + [0, 0], + [-1.331, 20.755], + [0.499, 8.061], + [-17.095, 16.887], + [0, 0], + [0.582, 1.289], + [9.144, 12.981], + [4.576, -1.248], + [0, 0], + [17.345, 11.563], + [7.202, 3.563], + [6.114, 23.293], + [0, 0], + [1.498, 0.125] + ], + "o": [ + [-1.497, 0.125], + [0, 0], + [-6.114, 23.334], + [-7.196, 3.578], + [-17.345, 11.563], + [0, 0], + [-4.534, -1.248], + [-9.151, 12.978], + [-0.582, 1.289], + [0, 0], + [17.095, 16.887], + [-0.5, 8.062], + [1.331, 20.755], + [0, 0], + [-3.369, 3.328], + [6.738, 14.392], + [0.832, 1.248], + [0, 0], + [23.293, -6.364], + [6.697, 4.451], + [18.593, 9.234], + [0, 0], + [1.206, 4.533], + [15.804, 1.373], + [1.498, -0.124], + [0, 0], + [6.114, -23.335], + [7.196, -3.578], + [17.345, -11.563], + [0, 0], + [4.534, 1.206], + [9.151, -13.019], + [0.582, -1.289], + [0, 0], + [-17.095, -16.887], + [0.499, -8.062], + [-1.331, -20.756], + [0, 0], + [3.369, -3.328], + [-6.715, -14.39], + [-0.832, -1.248], + [0, 0], + [-23.293, 6.364], + [-6.676, -4.47], + [-18.592, -9.234], + [0, 0], + [-1.207, -4.575], + [-15.804, -1.372] + ], + "v": [ + [-23.81, -269.32], + [-29.508, -263.247], + [-41.529, -217.285], + [-83.04, -167.829], + [-103.838, -155.766], + [-167.436, -144.536], + [-213.314, -157.139], + [-221.425, -155.267], + [-245.259, -114.089], + [-242.805, -106.185], + [-208.905, -72.66], + [-186.86, -12.099], + [-186.86, 12.109], + [-208.905, 72.671], + [-242.805, 106.195], + [-245.259, 114.099], + [-221.425, 155.236], + [-213.314, 157.15], + [-167.477, 144.547], + [-103.838, 155.777], + [-82.999, 167.839], + [-41.529, 217.295], + [-29.508, 263.257], + [-23.81, 269.329], + [23.691, 269.329], + [29.39, 263.257], + [41.411, 217.295], + [82.922, 167.839], + [103.719, 155.777], + [167.317, 144.547], + [213.196, 157.15], + [221.307, 155.277], + [245.141, 114.099], + [242.687, 106.195], + [208.787, 72.671], + [186.742, 12.109], + [186.742, -12.098], + [208.787, -72.66], + [242.687, -106.185], + [245.141, -114.089], + [221.307, -155.225], + [213.196, -157.139], + [167.359, -144.536], + [103.719, -155.766], + [82.88, -167.828], + [41.411, -217.285], + [29.39, -263.247], + [23.691, -269.32] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 3", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 3, + "ty": "sh", + "ix": 4, + "ks": { + "a": 0, + "k": { + "i": [ + [-9.816, 0], + [-9.697, -0.846], + [-7.071, -26.828], + [0, 0], + [-5.532, -2.745], + [-8.902, -5.948], + [-2.745, 0.79], + [0, 0], + [-17.802, -25.331], + [-8.236, -17.72], + [19.758, -19.508], + [0, 0], + [-0.416, -6.114], + [0.666, -10.69], + [-2.079, -1.997], + [0, 0], + [13.102, -28.076], + [11.232, -15.979], + [26.787, 7.363], + [0, 0], + [5.117, -3.411], + [9.602, -4.741], + [0.707, -2.745], + [0, 0], + [30.904, -2.663], + [19.401, 1.705], + [7.03, 26.87], + [0, 0], + [5.532, 2.745], + [8.891, 5.969], + [2.746, -0.79], + [0, 0], + [17.802, 25.332], + [8.277, 17.703], + [-19.716, 19.508], + [0, 0], + [0.416, 6.114], + [-0.666, 10.693], + [2.08, 1.997], + [0, 0], + [-13.102, 28.076], + [-11.242, 15.972], + [-26.787, -7.363], + [0, 0], + [-5.116, 3.411], + [-9.608, 4.742], + [-0.707, 2.745], + [0, 0], + [-30.905, 2.704] + ], + "o": [ + [9.733, 0.014], + [30.904, 2.662], + [0, 0], + [0.749, 2.745], + [9.609, 4.742], + [5.116, 3.411], + [0, 0], + [26.787, -7.321], + [11.231, 16.014], + [13.102, 28.076], + [0, 0], + [-2.038, 1.997], + [0.666, 10.69], + [-0.416, 6.114], + [0, 0], + [19.758, 19.508], + [-8.252, 17.703], + [-17.802, 25.373], + [0, 0], + [-2.787, -0.79], + [-8.902, 5.952], + [-5.532, 2.745], + [0, 0], + [-6.987, 26.87], + [-19.402, 1.705], + [-30.905, -2.663], + [0, 0], + [-0.748, -2.745], + [-9.611, -4.723], + [-5.116, -3.411], + [0, 0], + [-26.786, 7.321], + [-11.208, -16.008], + [-13.102, -28.076], + [0, 0], + [2.08, -1.997], + [-0.666, -10.693], + [0.416, -6.114], + [0, 0], + [-19.716, -19.508], + [8.241, -17.709], + [17.802, -25.373], + [0, 0], + [2.787, 0.79], + [8.901, -5.948], + [5.532, -2.745], + [0, 0], + [6.988, -26.87], + [9.608, -0.832] + ], + "v": [ + [-0.059, -332.751], + [29.099, -331.462], + [89.785, -279.095], + [101.764, -233.049], + [110.582, -223.733], + [138.368, -207.676], + [150.804, -204.723], + [196.683, -217.327], + [272.385, -191.123], + [301.668, -140.459], + [286.527, -61.805], + [252.669, -28.28], + [249.009, -16.051], + [249.009, 16.061], + [252.669, 28.289], + [286.527, 61.815], + [301.668, 140.47], + [272.385, 191.09], + [196.683, 217.295], + [150.846, 204.734], + [138.367, 207.687], + [110.582, 223.743], + [101.806, 233.059], + [89.743, 279.063], + [29.099, 331.473], + [-29.217, 331.473], + [-89.862, 279.063], + [-101.883, 233.059], + [-110.701, 223.743], + [-138.486, 207.687], + [-150.923, 204.734], + [-196.802, 217.336], + [-272.504, 191.132], + [-301.786, 140.47], + [-286.687, 61.815], + [-252.788, 28.289], + [-249.127, 16.061], + [-249.127, -16.051], + [-252.788, -28.28], + [-286.687, -61.805], + [-301.786, -140.459], + [-272.504, -191.08], + [-196.801, -217.285], + [-150.964, -204.723], + [-138.486, -207.676], + [-110.701, -223.733], + [-101.924, -233.049], + [-89.862, -279.053], + [-29.217, -331.504] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 4", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "mm", + "mm": 1, + "nm": "Merge Paths 1", + "mn": "ADBE Vector Filter - Merge", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.898460657456, 0.889815326765, 0.896223060758, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [308.077, 333.249], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 8, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + } + ] + } + ], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 0, + "nm": "estrela Outlines 2 Comp 1", + "refId": "comp_0", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [450, 450, 0], "ix": 2 }, + "a": { "a": 0, "k": [450, 450, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [1, 1, 0.333], "y": [0, 0, 0] }, + "t": 0, + "s": [100, 100, 100] + }, + { + "i": { "x": [0, 0, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 30, + "s": [80, 80, 100] + }, + { "t": 60, "s": [100, 100, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [89.47, 0], + [0, -89.47], + [-89.47, 0], + [0, 89.47] + ], + "o": [ + [-89.47, 0], + [0, 89.47], + [89.47, 0], + [0, -89.47] + ], + "v": [ + [446, 286], + [284, 448], + [446, 610], + [608, 448] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "w": 900, + "h": 900, + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "estrela Outlines", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.84], "y": [-1.753] }, + "o": { "x": [0], "y": [0] }, + "t": 0, + "s": [0] + }, + { + "i": { "x": [0.361], "y": [1] }, + "o": { "x": [0], "y": [0] }, + "t": 28, + "s": [15] + }, + { "t": 60, "s": [180] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [450, 450, 0], "ix": 2 }, + "a": { "a": 0, "k": [308.5, 333, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.011, 34.469], + [34.47, -0.012], + [-0.011, -34.469], + [-34.47, 0.011] + ], + "o": [ + [-0.012, -34.47], + [-34.469, 0.011], + [0.012, 34.47], + [34.469, -0.012] + ], + "v": [ + [62.333, 0.005], + [-0.101, -62.387], + [-62.493, 0.047], + [-0.059, 62.439] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0, -68.917], + [68.916, 0], + [0, 68.916], + [-68.916, 0] + ], + "o": [ + [0, 68.916], + [-68.916, 0], + [0, -68.917], + [68.916, 0] + ], + "v": [ + [124.725, 0.005], + [-0.059, 124.789], + [-124.843, 0.005], + [-0.059, -124.779] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 2, + "ty": "sh", + "ix": 3, + "ks": { + "a": 0, + "k": { + "i": [ + [15.804, -1.372], + [1.206, -4.575], + [0, 0], + [18.676, -9.234], + [6.656, -4.451], + [23.252, 6.364], + [0, 0], + [0.832, -1.206], + [6.697, -14.392], + [-3.327, -3.328], + [0, 0], + [1.331, -20.755], + [-0.499, -8.062], + [17.095, -16.887], + [0, 0], + [-0.582, -1.289], + [-9.151, -12.977], + [-4.575, 1.248], + [0, 0], + [-17.345, -11.563], + [-7.196, -3.578], + [-6.114, -23.293], + [0, 0], + [-1.497, -0.124], + [-15.804, 1.373], + [-1.207, 4.575], + [0, 0], + [-18.676, 9.234], + [-6.655, 4.451], + [-23.251, -6.364], + [0, 0], + [-0.832, 1.206], + [-6.739, 14.392], + [3.327, 3.328], + [0, 0], + [-1.331, 20.755], + [0.499, 8.061], + [-17.095, 16.887], + [0, 0], + [0.582, 1.289], + [9.144, 12.981], + [4.576, -1.248], + [0, 0], + [17.345, 11.563], + [7.202, 3.563], + [6.114, 23.293], + [0, 0], + [1.498, 0.125] + ], + "o": [ + [-1.497, 0.125], + [0, 0], + [-6.114, 23.334], + [-7.196, 3.578], + [-17.345, 11.563], + [0, 0], + [-4.534, -1.248], + [-9.151, 12.978], + [-0.582, 1.289], + [0, 0], + [17.095, 16.887], + [-0.5, 8.062], + [1.331, 20.755], + [0, 0], + [-3.369, 3.328], + [6.738, 14.392], + [0.832, 1.248], + [0, 0], + [23.293, -6.364], + [6.697, 4.451], + [18.593, 9.234], + [0, 0], + [1.206, 4.533], + [15.804, 1.373], + [1.498, -0.124], + [0, 0], + [6.114, -23.335], + [7.196, -3.578], + [17.345, -11.563], + [0, 0], + [4.534, 1.206], + [9.151, -13.019], + [0.582, -1.289], + [0, 0], + [-17.095, -16.887], + [0.499, -8.062], + [-1.331, -20.756], + [0, 0], + [3.369, -3.328], + [-6.715, -14.39], + [-0.832, -1.248], + [0, 0], + [-23.293, 6.364], + [-6.676, -4.47], + [-18.592, -9.234], + [0, 0], + [-1.207, -4.575], + [-15.804, -1.372] + ], + "v": [ + [-23.81, -269.32], + [-29.508, -263.247], + [-41.529, -217.285], + [-83.04, -167.829], + [-103.838, -155.766], + [-167.436, -144.536], + [-213.314, -157.139], + [-221.425, -155.267], + [-245.259, -114.089], + [-242.805, -106.185], + [-208.905, -72.66], + [-186.86, -12.099], + [-186.86, 12.109], + [-208.905, 72.671], + [-242.805, 106.195], + [-245.259, 114.099], + [-221.425, 155.236], + [-213.314, 157.15], + [-167.477, 144.547], + [-103.838, 155.777], + [-82.999, 167.839], + [-41.529, 217.295], + [-29.508, 263.257], + [-23.81, 269.329], + [23.691, 269.329], + [29.39, 263.257], + [41.411, 217.295], + [82.922, 167.839], + [103.719, 155.777], + [167.317, 144.547], + [213.196, 157.15], + [221.307, 155.277], + [245.141, 114.099], + [242.687, 106.195], + [208.787, 72.671], + [186.742, 12.109], + [186.742, -12.098], + [208.787, -72.66], + [242.687, -106.185], + [245.141, -114.089], + [221.307, -155.225], + [213.196, -157.139], + [167.359, -144.536], + [103.719, -155.766], + [82.88, -167.828], + [41.411, -217.285], + [29.39, -263.247], + [23.691, -269.32] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 3", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 3, + "ty": "sh", + "ix": 4, + "ks": { + "a": 0, + "k": { + "i": [ + [-9.816, 0], + [-9.697, -0.846], + [-7.071, -26.828], + [0, 0], + [-5.532, -2.745], + [-8.902, -5.948], + [-2.745, 0.79], + [0, 0], + [-17.802, -25.331], + [-8.236, -17.72], + [19.758, -19.508], + [0, 0], + [-0.416, -6.114], + [0.666, -10.69], + [-2.079, -1.997], + [0, 0], + [13.102, -28.076], + [11.232, -15.979], + [26.787, 7.363], + [0, 0], + [5.117, -3.411], + [9.602, -4.741], + [0.707, -2.745], + [0, 0], + [30.904, -2.663], + [19.401, 1.705], + [7.03, 26.87], + [0, 0], + [5.532, 2.745], + [8.891, 5.969], + [2.746, -0.79], + [0, 0], + [17.802, 25.332], + [8.277, 17.703], + [-19.716, 19.508], + [0, 0], + [0.416, 6.114], + [-0.666, 10.693], + [2.08, 1.997], + [0, 0], + [-13.102, 28.076], + [-11.242, 15.972], + [-26.787, -7.363], + [0, 0], + [-5.116, 3.411], + [-9.608, 4.742], + [-0.707, 2.745], + [0, 0], + [-30.905, 2.704] + ], + "o": [ + [9.733, 0.014], + [30.904, 2.662], + [0, 0], + [0.749, 2.745], + [9.609, 4.742], + [5.116, 3.411], + [0, 0], + [26.787, -7.321], + [11.231, 16.014], + [13.102, 28.076], + [0, 0], + [-2.038, 1.997], + [0.666, 10.69], + [-0.416, 6.114], + [0, 0], + [19.758, 19.508], + [-8.252, 17.703], + [-17.802, 25.373], + [0, 0], + [-2.787, -0.79], + [-8.902, 5.952], + [-5.532, 2.745], + [0, 0], + [-6.987, 26.87], + [-19.402, 1.705], + [-30.905, -2.663], + [0, 0], + [-0.748, -2.745], + [-9.611, -4.723], + [-5.116, -3.411], + [0, 0], + [-26.786, 7.321], + [-11.208, -16.008], + [-13.102, -28.076], + [0, 0], + [2.08, -1.997], + [-0.666, -10.693], + [0.416, -6.114], + [0, 0], + [-19.716, -19.508], + [8.241, -17.709], + [17.802, -25.373], + [0, 0], + [2.787, 0.79], + [8.901, -5.948], + [5.532, -2.745], + [0, 0], + [6.988, -26.87], + [9.608, -0.832] + ], + "v": [ + [-0.059, -332.751], + [29.099, -331.462], + [89.785, -279.095], + [101.764, -233.049], + [110.582, -223.733], + [138.368, -207.676], + [150.804, -204.723], + [196.683, -217.327], + [272.385, -191.123], + [301.668, -140.459], + [286.527, -61.805], + [252.669, -28.28], + [249.009, -16.051], + [249.009, 16.061], + [252.669, 28.289], + [286.527, 61.815], + [301.668, 140.47], + [272.385, 191.09], + [196.683, 217.295], + [150.846, 204.734], + [138.367, 207.687], + [110.582, 223.743], + [101.806, 233.059], + [89.743, 279.063], + [29.099, 331.473], + [-29.217, 331.473], + [-89.862, 279.063], + [-101.883, 233.059], + [-110.701, 223.743], + [-138.486, 207.687], + [-150.923, 204.734], + [-196.802, 217.336], + [-272.504, 191.132], + [-301.786, 140.47], + [-286.687, 61.815], + [-252.788, 28.289], + [-249.127, 16.061], + [-249.127, -16.051], + [-252.788, -28.28], + [-286.687, -61.805], + [-301.786, -140.459], + [-272.504, -191.08], + [-196.801, -217.285], + [-150.964, -204.723], + [-138.486, -207.676], + [-110.701, -223.733], + [-101.924, -233.049], + [-89.862, -279.053], + [-29.217, -331.504] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 4", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "mm", + "mm": 1, + "nm": "Merge Paths 1", + "mn": "ADBE Vector Filter - Merge", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.898460657456, 0.889815326765, 0.896223060758, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [308.077, 333.249], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 8, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + } + ], + "markers": [] +} diff --git a/src/renderer/src/assets/lottie/stars.json b/src/renderer/src/assets/lottie/stars.json new file mode 100644 index 00000000..ae72f2e9 --- /dev/null +++ b/src/renderer/src/assets/lottie/stars.json @@ -0,0 +1,928 @@ +{ + "v": "4.8.0", + "meta": { "g": "LottieFiles AE 3.5.6", "a": "", "k": "", "d": "", "tc": "" }, + "fr": 60, + "ip": 0, + "op": 120, + "w": 300, + "h": 300, + "nm": "Comp 1", + "ddd": 0, + "assets": [ + { + "id": "comp_0", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 5, + "nm": "3", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.055], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 0, + "s": [0] + }, + { + "i": { "x": [0.055], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 30, + "s": [8] + }, + { "t": 60, "s": [0] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [930, 525, 0], "ix": 2 }, + "a": { "a": 0, "k": [16.605, -23.904, 0], "ix": 1 }, + "s": { "a": 0, "k": [170, 170, 100], "ix": 6 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [14.987, -34.426], + [9.105, -30.309], + [9.987, -22.073], + [17.487, -16.779], + [24.105, -23.544], + [22.193, -30.603] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ef": [ + { + "ty": 21, + "nm": "Fill", + "np": 9, + "mn": "ADBE Fill", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 10, + "nm": "Fill Mask", + "mn": "ADBE Fill-0001", + "ix": 1, + "v": { "a": 0, "k": 0, "ix": 1 } + }, + { + "ty": 7, + "nm": "All Masks", + "mn": "ADBE Fill-0007", + "ix": 2, + "v": { "a": 0, "k": 0, "ix": 2 } + }, + { + "ty": 2, + "nm": "Color", + "mn": "ADBE Fill-0002", + "ix": 3, + "v": { + "a": 0, + "k": [0.992156863213, 0.880375564098, 0.128396704793, 1], + "ix": 3 + } + }, + { + "ty": 7, + "nm": "Invert", + "mn": "ADBE Fill-0006", + "ix": 4, + "v": { "a": 0, "k": 0, "ix": 4 } + }, + { + "ty": 0, + "nm": "Horizontal Feather", + "mn": "ADBE Fill-0003", + "ix": 5, + "v": { "a": 0, "k": 0, "ix": 5 } + }, + { + "ty": 0, + "nm": "Vertical Feather", + "mn": "ADBE Fill-0004", + "ix": 6, + "v": { "a": 0, "k": 0, "ix": 6 } + }, + { + "ty": 0, + "nm": "Opacity", + "mn": "ADBE Fill-0005", + "ix": 7, + "v": { "a": 0, "k": 1, "ix": 7 } + } + ] + } + ], + "t": { + "d": { + "k": [ + { + "s": { + "s": 40, + "f": "SegoeUIEmoji", + "t": "✨", + "j": 0, + "tr": 0, + "lh": 48, + "ls": 0, + "fc": [1, 1, 1] + }, + "t": 0 + } + ] + }, + "p": {}, + "m": { "g": 1, "a": { "a": 0, "k": [0, 0], "ix": 2 } }, + "a": [] + }, + "ip": 0, + "op": 123, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 5, + "nm": "2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.055], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 0, + "s": [0] + }, + { + "i": { "x": [0.055], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 30, + "s": [-8] + }, + { "t": 60, "s": [0] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [960, 540, 0], "ix": 2 }, + "a": { "a": 0, "k": [31.912, -13.397, 0], "ix": 1 }, + "s": { "a": 0, "k": [170, 170, 100], "ix": 6 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [31.31, -34.72], + [24.546, -22.514], + [16.605, -16.485], + [17.046, -11.338], + [21.163, -7.073], + [27.487, -0.309], + [33.663, 10.133], + [47.634, -1.926], + [51.31, -12.073] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ef": [ + { + "ty": 21, + "nm": "Fill", + "np": 9, + "mn": "ADBE Fill", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 10, + "nm": "Fill Mask", + "mn": "ADBE Fill-0001", + "ix": 1, + "v": { "a": 0, "k": 0, "ix": 1 } + }, + { + "ty": 7, + "nm": "All Masks", + "mn": "ADBE Fill-0007", + "ix": 2, + "v": { "a": 0, "k": 0, "ix": 2 } + }, + { + "ty": 2, + "nm": "Color", + "mn": "ADBE Fill-0002", + "ix": 3, + "v": { + "a": 0, + "k": [0.992156863213, 0.880375564098, 0.128396704793, 1], + "ix": 3 + } + }, + { + "ty": 7, + "nm": "Invert", + "mn": "ADBE Fill-0006", + "ix": 4, + "v": { "a": 0, "k": 0, "ix": 4 } + }, + { + "ty": 0, + "nm": "Horizontal Feather", + "mn": "ADBE Fill-0003", + "ix": 5, + "v": { "a": 0, "k": 0, "ix": 5 } + }, + { + "ty": 0, + "nm": "Vertical Feather", + "mn": "ADBE Fill-0004", + "ix": 6, + "v": { "a": 0, "k": 0, "ix": 6 } + }, + { + "ty": 0, + "nm": "Opacity", + "mn": "ADBE Fill-0005", + "ix": 7, + "v": { "a": 0, "k": 1, "ix": 7 } + } + ] + } + ], + "t": { + "d": { + "k": [ + { + "s": { + "s": 40, + "f": "SegoeUIEmoji", + "t": "✨", + "j": 0, + "tr": 0, + "lh": 48, + "ls": 0, + "fc": [1, 1, 1] + }, + "t": 0 + } + ] + }, + "p": {}, + "m": { "g": 1, "a": { "a": 0, "k": [0, 0], "ix": 2 } }, + "a": [] + }, + "ip": 0, + "op": 123, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 5, + "nm": "✨", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.055], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 0, + "s": [0] + }, + { + "i": { "x": [0.055], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 30, + "s": [8] + }, + { "t": 60, "s": [0] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [935, 560, 0], "ix": 2 }, + "a": { "a": 0, "k": [14.973, -6.64, 0], "ix": 1 }, + "s": { "a": 0, "k": [170, 170, 100], "ix": 6 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [13.957, -17.514], + [2.928, -9.132], + [2.487, 1.603], + [14.105, 7.339], + [21.605, -0.161], + [22.193, -5.161], + [17.34, -10.014] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ef": [ + { + "ty": 21, + "nm": "Fill", + "np": 9, + "mn": "ADBE Fill", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 10, + "nm": "Fill Mask", + "mn": "ADBE Fill-0001", + "ix": 1, + "v": { "a": 0, "k": 0, "ix": 1 } + }, + { + "ty": 7, + "nm": "All Masks", + "mn": "ADBE Fill-0007", + "ix": 2, + "v": { "a": 0, "k": 0, "ix": 2 } + }, + { + "ty": 2, + "nm": "Color", + "mn": "ADBE Fill-0002", + "ix": 3, + "v": { + "a": 0, + "k": [0.992156863213, 0.880375564098, 0.128396704793, 1], + "ix": 3 + } + }, + { + "ty": 7, + "nm": "Invert", + "mn": "ADBE Fill-0006", + "ix": 4, + "v": { "a": 0, "k": 0, "ix": 4 } + }, + { + "ty": 0, + "nm": "Horizontal Feather", + "mn": "ADBE Fill-0003", + "ix": 5, + "v": { "a": 0, "k": 0, "ix": 5 } + }, + { + "ty": 0, + "nm": "Vertical Feather", + "mn": "ADBE Fill-0004", + "ix": 6, + "v": { "a": 0, "k": 0, "ix": 6 } + }, + { + "ty": 0, + "nm": "Opacity", + "mn": "ADBE Fill-0005", + "ix": 7, + "v": { "a": 0, "k": 1, "ix": 7 } + } + ] + } + ], + "t": { + "d": { + "k": [ + { + "s": { + "s": 40, + "f": "SegoeUIEmoji", + "t": "✨", + "j": 0, + "tr": 0, + "lh": 48, + "ls": 0, + "fc": [1, 1, 1] + }, + "t": 0 + } + ] + }, + "p": {}, + "m": { "g": 1, "a": { "a": 0, "k": [0, 0], "ix": 2 } }, + "a": [] + }, + "ip": 0, + "op": 123, + "st": 0, + "bm": 0 + } + ] + } + ], + "fonts": { + "list": [ + { + "fName": "SegoeUIEmoji", + "fFamily": "Segoe UI Emoji", + "fStyle": "Regular", + "ascent": 74.0234375 + } + ] + }, + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 0, + "nm": "botão", + "refId": "comp_0", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [155, 154, 0], "ix": 2 }, + "a": { "a": 0, "k": [960, 540, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "ef": [ + { + "ty": 25, + "nm": "Drop Shadow", + "np": 8, + "mn": "ADBE Drop Shadow", + "ix": 1, + "en": 1, + "ef": [ + { + "ty": 2, + "nm": "Shadow Color", + "mn": "ADBE Drop Shadow-0001", + "ix": 1, + "v": { + "a": 0, + "k": [1, 0.829733371735, 0.414901971817, 1], + "ix": 1 + } + }, + { + "ty": 0, + "nm": "Opacity", + "mn": "ADBE Drop Shadow-0002", + "ix": 2, + "v": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 0, + "s": [127.5] + }, + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 15, + "s": [204] + }, + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 30, + "s": [127.5] + }, + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 45, + "s": [204] + }, + { "t": 70, "s": [76.5] } + ], + "ix": 2 + } + }, + { + "ty": 0, + "nm": "Direction", + "mn": "ADBE Drop Shadow-0003", + "ix": 3, + "v": { "a": 0, "k": 135, "ix": 3 } + }, + { + "ty": 0, + "nm": "Distance", + "mn": "ADBE Drop Shadow-0004", + "ix": 4, + "v": { "a": 0, "k": 0, "ix": 4 } + }, + { + "ty": 0, + "nm": "Softness", + "mn": "ADBE Drop Shadow-0005", + "ix": 5, + "v": { "a": 0, "k": 40, "ix": 5 } + }, + { + "ty": 7, + "nm": "Shadow Only", + "mn": "ADBE Drop Shadow-0006", + "ix": 6, + "v": { "a": 0, "k": 0, "ix": 6 } + } + ] + } + ], + "w": 1920, + "h": 1080, + "ip": 0, + "op": 120, + "st": 0, + "bm": 0 + } + ], + "markers": [], + "chars": [ + { + "ch": "✨", + "size": 40, + "style": "Regular", + "w": 137.3, + "data": { + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.423, 1.042], + [0, 0], + [0.7, 0], + [0.293, -0.618], + [0, 0], + [1.041, -0.488], + [0, 0], + [0, -0.684], + [-0.652, -0.293], + [0, 0], + [-0.423, -1.041], + [0, 0], + [-0.716, 0], + [-0.293, 0.619], + [0, 0], + [-1.042, 0.488], + [0, 0], + [0, 0.684], + [0.618, 0.293], + [0, 0] + ], + "o": [ + [0, 0], + [-0.326, -0.618], + [-0.7, 0], + [0, 0], + [-0.456, 1.009], + [0, 0], + [-0.652, 0.293], + [0, 0.684], + [0, 0], + [1.074, 0.456], + [0, 0], + [0.293, 0.619], + [0.716, 0], + [0, 0], + [0.455, -1.009], + [0, 0], + [0.618, -0.293], + [0, -0.684], + [0, 0], + [-1.074, -0.455] + ], + "v": [ + [47.119, -68.994], + [43.799, -76.562], + [42.261, -77.49], + [40.771, -76.562], + [37.402, -68.994], + [35.156, -66.748], + [30.908, -64.893], + [29.932, -63.428], + [30.908, -61.963], + [35.156, -60.107], + [37.402, -57.861], + [40.771, -50.244], + [42.285, -49.316], + [43.799, -50.244], + [47.119, -57.861], + [49.365, -60.107], + [53.662, -61.963], + [54.59, -63.428], + [53.662, -64.893], + [49.365, -66.748] + ], + "c": true + }, + "ix": 2 + }, + "nm": "✨", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [1.334, 3.223], + [0, 0], + [1.204, 0.423], + [1.204, -0.423], + [0.618, -1.237], + [0, 0], + [3.125, -1.432], + [0, 0], + [0.423, -1.221], + [-0.423, -1.221], + [-1.27, -0.618], + [0, 0], + [-1.335, -3.223], + [0, 0], + [-1.205, -0.407], + [-1.205, 0.407], + [-0.619, 1.27], + [0, 0], + [-3.125, 1.433], + [0, 0], + [-0.423, 1.221], + [0.423, 1.221], + [1.27, 0.619], + [0, 0] + ], + "o": [ + [0, 0], + [-0.619, -1.237], + [-1.205, -0.423], + [-1.205, 0.423], + [0, 0], + [-1.367, 3.223], + [0, 0], + [-1.27, 0.619], + [-0.423, 1.221], + [0.423, 1.221], + [0, 0], + [3.157, 1.433], + [0, 0], + [0.618, 1.27], + [1.204, 0.407], + [1.204, -0.407], + [0, 0], + [1.367, -3.223], + [0, 0], + [1.27, -0.618], + [0.423, -1.221], + [-0.423, -1.221], + [0, 0], + [-3.158, -1.432] + ], + "v": [ + [95.605, -50.83], + [85.498, -74.658], + [82.764, -77.148], + [79.15, -77.148], + [76.416, -74.658], + [66.357, -50.83], + [59.619, -43.848], + [46.875, -38.086], + [44.336, -35.327], + [44.336, -31.665], + [46.875, -28.906], + [59.619, -23.145], + [66.357, -16.162], + [76.416, 7.666], + [79.15, 10.181], + [82.764, 10.181], + [85.498, 7.666], + [95.605, -16.162], + [102.344, -23.145], + [115.088, -28.906], + [117.627, -31.665], + [117.627, -35.327], + [115.088, -38.086], + [102.344, -43.848] + ], + "c": true + }, + "ix": 2 + }, + "nm": "✨", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 2, + "ty": "sh", + "ix": 3, + "ks": { + "a": 0, + "k": { + "i": [ + [-1.367, -0.651], + [0, 0], + [0, -0.928], + [0.813, -0.423], + [0, 0], + [0.586, -1.399], + [0, 0], + [0.895, 0], + [0.391, 0.846], + [0, 0], + [1.334, 0.652], + [0, 0], + [0, 0.928], + [-0.814, 0.423], + [0, 0], + [-0.586, 1.4], + [0, 0], + [-0.896, 0], + [-0.391, -0.846], + [0, 0] + ], + "o": [ + [0, 0], + [0.813, 0.423], + [0, 0.928], + [0, 0], + [-1.335, 0.652], + [0, 0], + [-0.391, 0.846], + [-0.896, 0], + [0, 0], + [-0.586, -1.399], + [0, 0], + [-0.814, -0.423], + [0, -0.928], + [0, 0], + [1.334, -0.651], + [0, 0], + [0.391, -0.846], + [0.895, 0], + [0, 0], + [0.553, 1.4] + ], + "v": [ + [44.385, -16.943], + [49.854, -14.404], + [51.074, -12.378], + [49.854, -10.352], + [44.385, -7.812], + [41.504, -4.736], + [37.158, 5.713], + [35.229, 6.982], + [33.301, 5.713], + [28.955, -4.736], + [26.074, -7.812], + [20.605, -10.352], + [19.385, -12.378], + [20.605, -14.404], + [26.074, -16.943], + [28.955, -20.02], + [33.301, -30.469], + [35.229, -31.738], + [37.158, -30.469], + [41.504, -20.02] + ], + "c": true + }, + "ix": 2 + }, + "nm": "✨", + "mn": "ADBE Vector Shape - Group", + "hd": false + } + ], + "nm": "✨", + "np": 6, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ] + }, + "fFamily": "Segoe UI Emoji" + } + ] +} diff --git a/src/renderer/src/assets/steam-logo.svg b/src/renderer/src/assets/steam-logo.svg new file mode 100644 index 00000000..1e5dd9be --- /dev/null +++ b/src/renderer/src/assets/steam-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/src/assets/x-icon.svg b/src/renderer/src/assets/x-icon.svg new file mode 100644 index 00000000..f594427b --- /dev/null +++ b/src/renderer/src/assets/x-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/src/components/async-image/async-image.tsx b/src/renderer/src/components/async-image/async-image.tsx new file mode 100644 index 00000000..857a9942 --- /dev/null +++ b/src/renderer/src/components/async-image/async-image.tsx @@ -0,0 +1,27 @@ +import { forwardRef, useEffect, useState } from "react"; + +export interface AsyncImageProps + extends React.DetailedHTMLProps< + React.ImgHTMLAttributes, + HTMLImageElement + > { + onSettled?: (url: string) => void; +} + +export const AsyncImage = forwardRef( + ({ onSettled, ...props }, ref) => { + const [source, setSource] = useState(null); + + useEffect(() => { + if (props.src && props.src.startsWith("http")) { + window.electron.getOrCacheImage(props.src).then((url) => { + setSource(url); + + if (onSettled) onSettled(url); + }); + } + }, [props.src, onSettled]); + + return ; + } +); diff --git a/src/renderer/src/components/bottom-panel/bottom-panel.css.ts b/src/renderer/src/components/bottom-panel/bottom-panel.css.ts new file mode 100644 index 00000000..f251d1c0 --- /dev/null +++ b/src/renderer/src/components/bottom-panel/bottom-panel.css.ts @@ -0,0 +1,23 @@ +import { style } from "@vanilla-extract/css"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const bottomPanel = style({ + width: "100%", + borderTop: `solid 1px ${vars.color.borderColor}`, + padding: `${SPACING_UNIT / 2}px ${SPACING_UNIT * 2}px`, + display: "flex", + alignItems: "center", + transition: "all ease 0.2s", + justifyContent: "space-between", + fontSize: vars.size.bodyFontSize, + zIndex: "1", +}); + +export const downloadsButton = style({ + color: vars.color.bodyText, + borderBottom: "1px solid transparent", + ":hover": { + borderBottom: `1px solid ${vars.color.bodyText}`, + cursor: "pointer", + }, +}); diff --git a/src/renderer/src/components/bottom-panel/bottom-panel.tsx b/src/renderer/src/components/bottom-panel/bottom-panel.tsx new file mode 100644 index 00000000..df1f49cb --- /dev/null +++ b/src/renderer/src/components/bottom-panel/bottom-panel.tsx @@ -0,0 +1,68 @@ +import { useTranslation } from "react-i18next"; + +import { useDownload } from "@renderer/hooks"; + +import * as styles from "./bottom-panel.css"; +import { vars } from "../../theme.css"; +import { useEffect, useMemo, useState } from "react"; +import { useNavigate } from "react-router-dom"; +import { VERSION_CODENAME } from "@renderer/constants"; + +export function BottomPanel() { + const { t } = useTranslation("bottom_panel"); + + const navigate = useNavigate(); + + const { game, progress, downloadSpeed, eta, isDownloading } = useDownload(); + + const [version, setVersion] = useState(""); + + useEffect(() => { + window.electron.getVersion().then((result) => setVersion(result)); + }, []); + + const status = useMemo(() => { + if (isDownloading) { + if (game.status === "downloading_metadata") + return t("downloading_metadata", { title: game.title }); + + if (game.status === "checking_files") + return t("checking_files", { + title: game.title, + percentage: progress, + }); + + return t("downloading", { + title: game?.title, + percentage: progress, + eta, + speed: downloadSpeed, + }); + } + + return t("no_downloads_in_progress"); + }, [t, game, progress, eta, isDownloading, downloadSpeed]); + + return ( +
+ + + + v{version} "{VERSION_CODENAME}" + +
+ ); +} diff --git a/src/renderer/src/components/button/button.css.ts b/src/renderer/src/components/button/button.css.ts new file mode 100644 index 00000000..18866bc0 --- /dev/null +++ b/src/renderer/src/components/button/button.css.ts @@ -0,0 +1,52 @@ +import { style, styleVariants } from "@vanilla-extract/css"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +const base = style({ + padding: `${SPACING_UNIT}px ${SPACING_UNIT * 2}px`, + backgroundColor: "#c0c1c7", + borderRadius: "8px", + border: "solid 1px transparent", + transition: "all ease 0.2s", + cursor: "pointer", + minHeight: "40px", + display: "flex", + alignItems: "center", + justifyContent: "center", + gap: `${SPACING_UNIT}px`, + ":active": { + opacity: vars.opacity.active, + }, + ":disabled": { + opacity: vars.opacity.disabled, + pointerEvents: "none", + }, +}); + +export const button = styleVariants({ + primary: [ + base, + { + ":hover": { + backgroundColor: "#DADBE1", + }, + }, + ], + outline: [ + base, + { + backgroundColor: "transparent", + border: "solid 1px #c0c1c7", + color: "#c0c1c7", + ":hover": { + backgroundColor: "rgba(255, 255, 255, 0.1)", + }, + }, + ], + dark: [ + base, + { + backgroundColor: vars.color.darkBackground, + color: "#c0c1c7", + }, + ], +}); diff --git a/src/renderer/src/components/button/button.tsx b/src/renderer/src/components/button/button.tsx new file mode 100644 index 00000000..41b58367 --- /dev/null +++ b/src/renderer/src/components/button/button.tsx @@ -0,0 +1,27 @@ +import cn from "classnames"; +import * as styles from "./button.css"; + +export interface ButtonProps + extends React.DetailedHTMLProps< + React.ButtonHTMLAttributes, + HTMLButtonElement + > { + theme?: keyof typeof styles.button; +} + +export function Button({ + children, + theme = "primary", + className, + ...props +}: ButtonProps) { + return ( + + ); +} diff --git a/src/renderer/src/components/checkbox-field/checkbox-field.css.ts b/src/renderer/src/components/checkbox-field/checkbox-field.css.ts new file mode 100644 index 00000000..2b7cb77c --- /dev/null +++ b/src/renderer/src/components/checkbox-field/checkbox-field.css.ts @@ -0,0 +1,40 @@ +import { SPACING_UNIT, vars } from "../../theme.css"; +import { style } from "@vanilla-extract/css"; + +export const checkboxField = style({ + display: "flex", + flexDirection: "row", + alignItems: "center", + gap: `${SPACING_UNIT}px`, + cursor: "pointer", +}); + +export const checkbox = style({ + width: "20px", + height: "20px", + borderRadius: "4px", + backgroundColor: vars.color.darkBackground, + display: "flex", + justifyContent: "center", + alignItems: "center", + position: "relative", + transition: "all ease 0.2s", + border: `solid 1px ${vars.color.borderColor}`, + ":hover": { + borderColor: "rgba(255, 255, 255, 0.5)", + }, +}); + +export const checkboxInput = style({ + width: "100%", + height: "100%", + position: "absolute", + margin: "0", + padding: "0", + opacity: "0", + cursor: "pointer", +}); + +export const checkboxLabel = style({ + cursor: "pointer", +}); diff --git a/src/renderer/src/components/checkbox-field/checkbox-field.tsx b/src/renderer/src/components/checkbox-field/checkbox-field.tsx new file mode 100644 index 00000000..bb81a910 --- /dev/null +++ b/src/renderer/src/components/checkbox-field/checkbox-field.tsx @@ -0,0 +1,32 @@ +import { useId } from "react"; +import * as styles from "./checkbox-field.css"; +import { CheckIcon } from "@primer/octicons-react"; + +export interface CheckboxFieldProps + extends React.DetailedHTMLProps< + React.InputHTMLAttributes, + HTMLInputElement + > { + label: string; +} + +export function CheckboxField({ label, ...props }: CheckboxFieldProps) { + const id = useId(); + + return ( +
+
+ + {props.checked && } +
+ +
+ ); +} diff --git a/src/renderer/src/components/game-card/game-card.css.ts b/src/renderer/src/components/game-card/game-card.css.ts new file mode 100644 index 00000000..f8d835fb --- /dev/null +++ b/src/renderer/src/components/game-card/game-card.css.ts @@ -0,0 +1,127 @@ +import { style } from "@vanilla-extract/css"; +import { recipe } from "@vanilla-extract/recipes"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const card = recipe({ + base: { + width: "100%", + height: "180px", + boxShadow: "0px 0px 15px 0px #000000", + overflow: "hidden", + borderRadius: "4px", + transition: "all ease 0.2s", + border: `solid 1px ${vars.color.borderColor}`, + cursor: "pointer", + zIndex: "1", + ":active": { + opacity: vars.opacity.active, + }, + }, + variants: { + disabled: { + true: { + pointerEvents: "none", + boxShadow: "none", + opacity: vars.opacity.disabled, + filter: "grayscale(50%)", + }, + }, + }, +}); + +export const backdrop = style({ + background: "linear-gradient(0deg, rgba(0, 0, 0, 0.7) 50%, transparent 100%)", + width: "100%", + height: "100%", + display: "flex", + justifyContent: "flex-end", + flexDirection: "column", + position: "relative", +}); + +export const cover = style({ + width: "100%", + height: "100%", + objectFit: "cover", + objectPosition: "center", + position: "absolute", + zIndex: "-1", + transition: "all ease 0.2s", + selectors: { + [`${card({})}:hover &`]: { + transform: "scale(1.05)", + }, + }, +}); + +export const content = style({ + color: "#DADBE1", + padding: `${SPACING_UNIT}px ${SPACING_UNIT * 2}px`, + display: "flex", + alignItems: "flex-start", + gap: `${SPACING_UNIT}px`, + flexDirection: "column", + transition: "all ease 0.2s", + transform: "translateY(24px)", + selectors: { + [`${card({})}:hover &`]: { + transform: "translateY(0px)", + }, + }, +}); + +export const title = style({ + fontSize: "16px", + fontWeight: "bold", + textAlign: "left", +}); + +export const downloadOptions = style({ + display: "flex", + margin: "0", + padding: "0", + gap: `${SPACING_UNIT}px`, + flexWrap: "wrap", +}); + +export const downloadOption = style({ + color: "#c0c1c7", + fontSize: "10px", + padding: `${SPACING_UNIT / 2}px ${SPACING_UNIT}px`, + border: "solid 1px #c0c1c7", + borderRadius: "4px", + display: "flex", + alignItems: "center", +}); + +export const specifics = style({ + display: "flex", + gap: `${SPACING_UNIT * 2}px`, + justifyContent: "center", +}); + +export const specificsItem = style({ + gap: `${SPACING_UNIT}px`, + display: "flex", + color: "#c0c1c7", + fontSize: "12px", + alignItems: "flex-end", +}); + +export const titleContainer = style({ + display: "flex", + alignItems: "center", + gap: `${SPACING_UNIT}px`, + color: "#c0c1c7", +}); + +export const shopIcon = style({ + width: "20px", + height: "20px", + minWidth: "20px", +}); + +export const noDownloadsLabel = style({ + color: vars.color.bodyText, + fontWeight: "bold", +}); diff --git a/src/renderer/src/components/game-card/game-card.tsx b/src/renderer/src/components/game-card/game-card.tsx new file mode 100644 index 00000000..ce9789c8 --- /dev/null +++ b/src/renderer/src/components/game-card/game-card.tsx @@ -0,0 +1,87 @@ +import { DownloadIcon, FileDirectoryIcon } from "@primer/octicons-react"; +import type { CatalogueEntry } from "@types"; + +import SteamLogo from "@renderer/assets/steam-logo.svg?react"; +import EpicGamesLogo from "@renderer/assets/epic-games-logo.svg?react"; + +import { AsyncImage } from "../async-image/async-image"; + +import * as styles from "./game-card.css"; +import { useAppSelector } from "@renderer/hooks"; +import { useTranslation } from "react-i18next"; + +export interface GameCardProps + extends React.DetailedHTMLProps< + React.ButtonHTMLAttributes, + HTMLButtonElement + > { + game: CatalogueEntry; + disabled?: boolean; +} + +const shopIcon = { + epic: , + steam: , +}; + +export function GameCard({ game, disabled, ...props }: GameCardProps) { + const { t } = useTranslation("game_card"); + + const repackersFriendlyNames = useAppSelector( + (state) => state.repackersFriendlyNames.value + ); + + const uniqueRepackers = Array.from( + new Set(game.repacks.map(({ repacker }) => repacker)) + ); + + return ( + + ); +} diff --git a/src/renderer/src/components/header/header.css.ts b/src/renderer/src/components/header/header.css.ts new file mode 100644 index 00000000..eb95dc6e --- /dev/null +++ b/src/renderer/src/components/header/header.css.ts @@ -0,0 +1,148 @@ +import type { ComplexStyleRule } from "@vanilla-extract/css"; +import { keyframes, style } from "@vanilla-extract/css"; +import { recipe } from "@vanilla-extract/recipes"; + +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const slideIn = keyframes({ + "0%": { transform: "translateX(20px)", opacity: "0" }, + "100%": { + transform: "translateX(0)", + opacity: "1", + }, +}); + +export const slideOut = keyframes({ + "0%": { transform: "translateX(0px)", opacity: "1" }, + "100%": { + transform: "translateX(20px)", + opacity: "0", + }, +}); + +export const header = recipe({ + base: { + display: "flex", + justifyContent: "space-between", + alignItems: "center", + gap: `${SPACING_UNIT * 2}px`, + WebkitAppRegion: "drag", + width: "100%", + padding: `${SPACING_UNIT * 2}px ${SPACING_UNIT * 3}px`, + color: "#c0c1c7", + borderBottom: `solid 1px ${vars.color.borderColor}`, + backgroundColor: vars.color.darkBackground, + } as ComplexStyleRule, + variants: { + draggingDisabled: { + true: { + WebkitAppRegion: "no-drag", + } as ComplexStyleRule, + }, + isWindows: { + true: { + WebkitAppRegion: "no-drag", + } as ComplexStyleRule, + }, + }, +}); + +export const search = recipe({ + base: { + backgroundColor: vars.color.background, + display: "inline-flex", + transition: "all ease 0.2s", + width: "200px", + alignItems: "center", + borderRadius: "8px", + border: `solid 1px ${vars.color.borderColor}`, + height: "40px", + WebkitAppRegion: "no-drag", + } as ComplexStyleRule, + variants: { + focused: { + true: { + width: "250px", + borderColor: "#DADBE1", + }, + false: { + ":hover": { + borderColor: "rgba(255, 255, 255, 0.5)", + }, + }, + }, + }, +}); + +export const searchInput = style({ + backgroundColor: "transparent", + border: "none", + width: "100%", + height: "100%", + outline: "none", + color: "#DADBE1", + cursor: "default", + fontFamily: "inherit", + fontSize: vars.size.bodyFontSize, + textOverflow: "ellipsis", + ":focus": { + cursor: "text", + }, +}); + +export const actionButton = style({ + color: "inherit", + cursor: "pointer", + transition: "all ease 0.2s", + padding: `${SPACING_UNIT}px`, + ":hover": { + color: "#DADBE1", + }, +}); + +export const section = style({ + display: "flex", + alignItems: "center", + gap: `${SPACING_UNIT * 2}px`, + height: "100%", +}); + +export const backButton = recipe({ + base: { + color: vars.color.bodyText, + cursor: "pointer", + WebkitAppRegion: "no-drag", + position: "absolute", + transition: "transform ease 0.2s", + animationDuration: "0.2s", + width: "16px", + height: "16px", + display: "flex", + alignItems: "center", + } as ComplexStyleRule, + variants: { + enabled: { + true: { + animationName: slideIn, + }, + false: { + opacity: "0", + pointerEvents: "none", + animationName: slideOut, + }, + }, + }, +}); + +export const title = recipe({ + base: { + transition: "all ease 0.2s", + }, + variants: { + hasBackButton: { + true: { + transform: "translateX(28px)", + }, + }, + }, +}); diff --git a/src/renderer/src/components/header/header.tsx b/src/renderer/src/components/header/header.tsx new file mode 100644 index 00000000..ea363c00 --- /dev/null +++ b/src/renderer/src/components/header/header.tsx @@ -0,0 +1,126 @@ +import { useTranslation } from "react-i18next"; +import { useEffect, useMemo, useRef, useState } from "react"; +import { useLocation, useNavigate } from "react-router-dom"; +import { ArrowLeftIcon, SearchIcon, XIcon } from "@primer/octicons-react"; + +import { useAppDispatch, useAppSelector } from "@renderer/hooks"; + +import * as styles from "./header.css"; +import { clearSearch } from "@renderer/features"; + +export interface HeaderProps { + onSearch: (query: string) => void; + onClear: () => void; + search?: string; +} + +const pathTitle: Record = { + "/": "home", + "/catalogue": "catalogue", + "/downloads": "downloads", + "/settings": "settings", +}; + +export function Header({ onSearch, onClear, search }: HeaderProps) { + const inputRef = useRef(null); + + const navigate = useNavigate(); + const location = useLocation(); + + const { headerTitle, draggingDisabled } = useAppSelector( + (state) => state.window + ); + const dispatch = useAppDispatch(); + + const [isFocused, setIsFocused] = useState(false); + + const { t } = useTranslation("header"); + + const title = useMemo(() => { + if (location.pathname.startsWith("/game")) return headerTitle; + if (location.pathname.startsWith("/search")) return t("search_results"); + + return t(pathTitle[location.pathname]); + }, [location.pathname, headerTitle, t]); + + useEffect(() => { + if (search && !location.pathname.startsWith("/search")) { + dispatch(clearSearch()); + } + }, [location.pathname, search, dispatch]); + + const focusInput = () => { + setIsFocused(true); + inputRef.current?.focus(); + }; + + const handleBlur = () => { + setIsFocused(false); + }; + + const handleBackButtonClick = () => { + navigate(-1); + }; + + return ( +
+
+ + +

+ {title} +

+
+ +
+
+ + + onSearch(event.target.value)} + onFocus={() => setIsFocused(true)} + onBlur={handleBlur} + /> + + {search && ( + + )} +
+
+
+ ); +} diff --git a/src/renderer/src/components/hero/hero.css.ts b/src/renderer/src/components/hero/hero.css.ts new file mode 100644 index 00000000..cc4aea7a --- /dev/null +++ b/src/renderer/src/components/hero/hero.css.ts @@ -0,0 +1,64 @@ +import { style } from "@vanilla-extract/css"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const hero = style({ + width: "100%", + height: "280px", + minHeight: "280px", + maxHeight: "280px", + borderRadius: "8px", + color: "#DADBE1", + overflow: "hidden", + boxShadow: "0px 0px 15px 0px #000000", + cursor: "pointer", + border: `solid 1px ${vars.color.borderColor}`, + zIndex: "1", + "@media": { + "(min-width: 1250px)": { + backgroundPosition: "center", + }, + }, +}); + +export const heroMedia = style({ + objectFit: "cover", + objectPosition: "center", + position: "absolute", + zIndex: "-1", + width: "100%", + height: "100%", + transition: "all ease 0.2s", + selectors: { + [`${hero}:hover &`]: { + transform: "scale(1.02)", + }, + }, +}); + +export const backdrop = style({ + width: "100%", + height: "100%", + background: "linear-gradient(0deg, rgba(0, 0, 0, 0.6) 25%, transparent 100%)", + position: "relative", + display: "flex", + overflow: "hidden", +}); + +export const description = style({ + maxWidth: "700px", + fontSize: vars.size.bodyFontSize, + color: "#c0c1c7", + textAlign: "left", + fontFamily: "'Fira Sans', sans-serif", + lineHeight: "20px", +}); + +export const content = style({ + width: "100%", + height: "100%", + padding: `${SPACING_UNIT * 4}px ${SPACING_UNIT * 3}px`, + gap: `${SPACING_UNIT * 2}px`, + display: "flex", + flexDirection: "column", + justifyContent: "flex-end", +}); diff --git a/src/renderer/src/components/hero/hero.tsx b/src/renderer/src/components/hero/hero.tsx new file mode 100644 index 00000000..4e766ca8 --- /dev/null +++ b/src/renderer/src/components/hero/hero.tsx @@ -0,0 +1,59 @@ +import { useNavigate } from "react-router-dom"; +import { AsyncImage } from "@renderer/components"; +import * as styles from "./hero.css"; +import { useEffect, useState } from "react"; +import { ShopDetails } from "@types"; +import { getSteamLanguage, steamUrlBuilder } from "@renderer/helpers"; +import { useTranslation } from "react-i18next"; + +const FEATURED_GAME_ID = "377160"; + +export function Hero() { + const [featuredGameDetails, setFeaturedGameDetails] = + useState(null); + + const { i18n } = useTranslation(); + + const navigate = useNavigate(); + + useEffect(() => { + window.electron + .getGameShopDetails( + FEATURED_GAME_ID, + "steam", + getSteamLanguage(i18n.language) + ) + .then((result) => { + setFeaturedGameDetails(result); + }); + }, [i18n.language]); + + return ( + + ); +} diff --git a/src/renderer/src/components/index.ts b/src/renderer/src/components/index.ts new file mode 100644 index 00000000..7e6069f1 --- /dev/null +++ b/src/renderer/src/components/index.ts @@ -0,0 +1,10 @@ +export * from "./bottom-panel/bottom-panel"; +export * from "./button/button"; +export * from "./game-card/game-card"; +export * from "./header/header"; +export * from "./hero/hero"; +export * from "./modal/modal"; +export * from "./sidebar/sidebar"; +export * from "./async-image/async-image"; +export * from "./text-field/text-field"; +export * from "./checkbox-field/checkbox-field"; diff --git a/src/renderer/src/components/modal/modal.css.ts b/src/renderer/src/components/modal/modal.css.ts new file mode 100644 index 00000000..d6e4732d --- /dev/null +++ b/src/renderer/src/components/modal/modal.css.ts @@ -0,0 +1,108 @@ +import { keyframes, style } from "@vanilla-extract/css"; +import { recipe } from "@vanilla-extract/recipes"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const backdropFadeIn = keyframes({ + "0%": { backdropFilter: "blur(0px)", backgroundColor: "rgba(0, 0, 0, 0.5)" }, + "100%": { + backdropFilter: "blur(2px)", + backgroundColor: "rgba(0, 0, 0, 0.7)", + }, +}); + +export const backdropFadeOut = keyframes({ + "0%": { backdropFilter: "blur(2px)", backgroundColor: "rgba(0, 0, 0, 0.7)" }, + "100%": { + backdropFilter: "blur(0px)", + backgroundColor: "rgba(0, 0, 0, 0)", + }, +}); + +export const modalSlideIn = keyframes({ + "0%": { opacity: 0 }, + "100%": { + opacity: 1, + }, +}); + +export const modalSlideOut = keyframes({ + "0%": { opacity: 1 }, + "100%": { + opacity: 0, + }, +}); + +export const backdrop = recipe({ + base: { + animationName: backdropFadeIn, + animationDuration: "0.4s", + backgroundColor: "rgba(0, 0, 0, 0.7)", + position: "absolute", + width: "100%", + height: "100%", + display: "flex", + justifyContent: "center", + alignItems: "center", + zIndex: 1, + top: 0, + padding: `${SPACING_UNIT * 3}px`, + backdropFilter: "blur(2px)", + transition: "all ease 0.2s", + }, + variants: { + closing: { + true: { + animationName: backdropFadeOut, + backdropFilter: "blur(0px)", + backgroundColor: "rgba(0, 0, 0, 0)", + }, + }, + }, +}); + +export const modal = recipe({ + base: { + animationName: modalSlideIn, + animationDuration: "0.3s", + backgroundColor: vars.color.background, + borderRadius: "5px", + maxWidth: "600px", + color: vars.color.bodyText, + maxHeight: "100%", + border: `solid 1px ${vars.color.borderColor}`, + overflow: "hidden", + display: "flex", + flexDirection: "column", + }, + variants: { + closing: { + true: { + animationName: modalSlideOut, + opacity: 0, + }, + }, + }, +}); + +export const modalContent = style({ + height: "100%", + overflow: "auto", + padding: `${SPACING_UNIT * 3}px ${SPACING_UNIT * 2}px`, +}); + +export const modalHeader = style({ + display: "flex", + gap: `${SPACING_UNIT}px`, + padding: `${SPACING_UNIT * 2}px`, + borderBottom: `solid 1px ${vars.color.borderColor}`, + justifyContent: "space-between", + alignItems: "flex-start", +}); + +export const closeModalButton = style({ + cursor: "pointer", +}); + +export const closeModalButtonIcon = style({ + color: vars.color.bodyText, +}); diff --git a/src/renderer/src/components/modal/modal.tsx b/src/renderer/src/components/modal/modal.tsx new file mode 100644 index 00000000..35be1bf9 --- /dev/null +++ b/src/renderer/src/components/modal/modal.tsx @@ -0,0 +1,69 @@ +import { useEffect, useState } from "react"; +import { createPortal } from "react-dom"; +import { XIcon } from "@primer/octicons-react"; + +import * as styles from "./modal.css"; +import { useAppDispatch } from "@renderer/hooks"; +import { toggleDragging } from "@renderer/features"; + +export interface ModalProps { + visible: boolean; + title: string; + description: string; + onClose: () => void; + children: React.ReactNode; +} + +export function Modal({ + visible, + title, + description, + onClose, + children, +}: ModalProps) { + const [isClosing, setIsClosing] = useState(false); + const dispatch = useAppDispatch(); + + const handleCloseClick = () => { + setIsClosing(true); + const zero = performance.now(); + + requestAnimationFrame(function animateClosing(time) { + if (time - zero <= 400) { + requestAnimationFrame(animateClosing); + } else { + onClose(); + setIsClosing(false); + } + }); + }; + + useEffect(() => { + dispatch(toggleDragging(visible)); + }, [dispatch, visible]); + + if (!visible) return null; + + return createPortal( +
+
+
+
+

{title}

+

{description}

+
+ + +
+
{children}
+
+
, + document.body + ); +} diff --git a/src/renderer/src/components/sidebar/download-icon.tsx b/src/renderer/src/components/sidebar/download-icon.tsx new file mode 100644 index 00000000..474c631d --- /dev/null +++ b/src/renderer/src/components/sidebar/download-icon.tsx @@ -0,0 +1,22 @@ +import { useRef } from "react"; +import Lottie from "lottie-react"; + +import downloadingAnimation from "@renderer/assets/lottie/downloading.json"; + +export interface DownloadIconProps { + isDownloading: boolean; +} + +export function DownloadIcon({ isDownloading }: DownloadIconProps) { + const lottieRef = useRef(null); + + return ( + + ); +} diff --git a/src/renderer/src/components/sidebar/routes.tsx b/src/renderer/src/components/sidebar/routes.tsx new file mode 100644 index 00000000..8f54bac0 --- /dev/null +++ b/src/renderer/src/components/sidebar/routes.tsx @@ -0,0 +1,27 @@ +import { AppsIcon, GearIcon, HomeIcon } from "@primer/octicons-react"; +import { DownloadIcon } from "./download-icon"; + +export const routes = [ + { + path: "/", + nameKey: "home", + render: () => , + }, + { + path: "/catalogue", + nameKey: "catalogue", + render: () => , + }, + { + path: "/downloads", + nameKey: "downloads", + render: (isDownloading: boolean) => ( + + ), + }, + { + path: "/settings", + nameKey: "settings", + render: () => , + }, +]; diff --git a/src/renderer/src/components/sidebar/sidebar.css.ts b/src/renderer/src/components/sidebar/sidebar.css.ts new file mode 100644 index 00000000..e4ff22f8 --- /dev/null +++ b/src/renderer/src/components/sidebar/sidebar.css.ts @@ -0,0 +1,170 @@ +import { style } from "@vanilla-extract/css"; +import { recipe } from "@vanilla-extract/recipes"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const sidebar = recipe({ + base: { + backgroundColor: vars.color.darkBackground, + color: "#c0c1c7", + flexDirection: "column", + display: "flex", + transition: "opacity ease 0.2s", + borderRight: `solid 1px ${vars.color.borderColor}`, + position: "relative", + }, + variants: { + resizing: { + true: { + opacity: vars.opacity.active, + pointerEvents: "none", + }, + }, + }, +}); + +export const content = recipe({ + base: { + display: "flex", + flexDirection: "column", + padding: `${SPACING_UNIT * 2}px`, + paddingBottom: "0", + width: "100%", + overflow: "auto", + }, + variants: { + macos: { + true: { + paddingTop: `${SPACING_UNIT * 6}px`, + }, + }, + }, +}); + +export const handle = style({ + width: "5px", + height: "100%", + cursor: "col-resize", + position: "absolute", + right: "0", +}); + +export const menu = style({ + listStyle: "none", + padding: "0", + margin: "0", + gap: `${SPACING_UNIT * 2}px`, + display: "flex", + flexDirection: "column", + overflow: "hidden", +}); + +export const menuItem = recipe({ + base: { + transition: "all ease 0.1s", + cursor: "pointer", + textWrap: "nowrap", + display: "flex", + opacity: "0.9", + color: "#DADBE1", + ":hover": { + opacity: "1", + }, + }, + variants: { + active: { + true: { + opacity: "1", + fontWeight: "bold", + }, + }, + muted: { + true: { + opacity: vars.opacity.disabled, + ":hover": { + opacity: "1", + }, + }, + }, + }, +}); + +export const menuItemButton = style({ + color: "inherit", + display: "flex", + alignItems: "center", + gap: `${SPACING_UNIT}px`, + cursor: "pointer", + overflow: "hidden", + width: "100%", + selectors: { + [`${menuItem({ active: true }).split(" ")[1]} &`]: { + fontWeight: "bold", + }, + }, +}); + +export const menuItemButtonLabel = style({ + textOverflow: "ellipsis", + overflow: "hidden", +}); + +export const gameIcon = style({ + width: "20px", + height: "20px", + borderRadius: "4px", + backgroundSize: "cover", +}); + +export const sectionTitle = style({ + textTransform: "uppercase", + fontWeight: "bold", +}); + +export const section = recipe({ + base: { + padding: `${SPACING_UNIT * 2}px 0`, + gap: `${SPACING_UNIT * 2}px`, + display: "flex", + flexDirection: "column", + }, + variants: { + hasBorder: { + true: { + borderBottom: `solid 1px ${vars.color.borderColor}`, + }, + }, + }, +}); + +export const sidebarFooter = style({ + marginTop: "auto", + padding: `${SPACING_UNIT * 2}px`, + display: "flex", + alignItems: "center", + justifyContent: "space-between", +}); + +export const footerSocialsContainer = style({ + display: "flex", + alignItems: "center", + gap: `${SPACING_UNIT * 1.5}px`, +}); + +export const footerSocialsItem = style({ + color: vars.color.bodyText, + backgroundColor: vars.color.darkBackground, + width: "16px", + height: "16px", + display: "flex", + alignItems: "center", + transition: "all ease 0.15s", + ":hover": { + opacity: 0.75, + cursor: "pointer", + }, +}); + +export const footerText = style({ + color: vars.color.bodyText, + fontSize: "12px", +}); diff --git a/src/renderer/src/components/sidebar/sidebar.tsx b/src/renderer/src/components/sidebar/sidebar.tsx new file mode 100644 index 00000000..5cdb2572 --- /dev/null +++ b/src/renderer/src/components/sidebar/sidebar.tsx @@ -0,0 +1,255 @@ +import { useEffect, useRef, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { useLocation, useNavigate } from "react-router-dom"; + +import type { Game } from "@types"; + +import { AsyncImage, TextField } from "@renderer/components"; +import { useDownload, useLibrary } from "@renderer/hooks"; +import { SPACING_UNIT } from "../../theme.css"; + +import { routes } from "./routes"; + +import { MarkGithubIcon } from "@primer/octicons-react"; +import DiscordLogo from "@renderer/assets/discord-icon.svg?react"; +import XLogo from "@renderer/assets/x-icon.svg?react"; + +import * as styles from "./sidebar.css"; + +const socials = [ + { + url: "https://discord.gg/hydralauncher", + icon: , + }, + { + url: "https://twitter.com/hydralauncher", + icon: , + }, + { + url: "https://github.com/hydralauncher/hydra", + icon: , + }, +]; + +const SIDEBAR_MIN_WIDTH = 200; +const SIDEBAR_INITIAL_WIDTH = 250; +const SIDEBAR_MAX_WIDTH = 450; + +const initialSidebarWidth = window.localStorage.getItem("sidebarWidth"); + +export function Sidebar() { + const { t } = useTranslation("sidebar"); + const { library, updateLibrary } = useLibrary(); + const navigate = useNavigate(); + + const [filteredLibrary, setFilteredLibrary] = useState([]); + + const [isResizing, setIsResizing] = useState(false); + const [sidebarWidth, setSidebarWidth] = useState( + initialSidebarWidth ? Number(initialSidebarWidth) : SIDEBAR_INITIAL_WIDTH + ); + + const location = useLocation(); + + const { game: gameDownloading, progress } = useDownload(); + + useEffect(() => { + updateLibrary(); + }, [gameDownloading?.id, updateLibrary]); + + const isDownloading = library.some((game) => + ["downloading", "checking_files", "downloading_metadata"].includes( + game.status + ) + ); + + const sidebarRef = useRef(null); + + const cursorPos = useRef({ x: 0 }); + const sidebarInitialWidth = useRef(0); + + const handleMouseDown: React.MouseEventHandler = ( + event + ) => { + setIsResizing(true); + cursorPos.current.x = event.screenX; + sidebarInitialWidth.current = + sidebarRef.current?.clientWidth || SIDEBAR_INITIAL_WIDTH; + }; + + const handleFilter: React.ChangeEventHandler = (event) => { + setFilteredLibrary( + library.filter((game) => + game.title + .toLowerCase() + .includes(event.target.value.toLocaleLowerCase()) + ) + ); + }; + + useEffect(() => { + setFilteredLibrary(library); + }, [library]); + + useEffect(() => { + window.onmousemove = (event) => { + if (isResizing) { + const cursorXDelta = event.screenX - cursorPos.current.x; + const newWidth = Math.max( + SIDEBAR_MIN_WIDTH, + Math.min( + sidebarInitialWidth.current + cursorXDelta, + SIDEBAR_MAX_WIDTH + ) + ); + + setSidebarWidth(newWidth); + window.localStorage.setItem("sidebarWidth", String(newWidth)); + } + }; + + window.onmouseup = () => { + if (isResizing) setIsResizing(false); + }; + + return () => { + window.onmouseup = null; + window.onmousemove = null; + }; + }, [isResizing]); + + const getGameTitle = (game: Game) => { + if (game.status === "paused") return t("paused", { title: game.title }); + + if (gameDownloading?.id === game.id) { + const isVerifying = ["downloading_metadata", "checking_files"].includes( + gameDownloading?.status + ); + + if (isVerifying) + return t(gameDownloading.status, { + title: game.title, + percentage: progress, + }); + + return t("downloading", { + title: game.title, + percentage: progress, + }); + } + + return game.title; + }; + + const handleSidebarItemClick = (path: string) => { + if (path !== location.pathname) { + navigate(path); + } + }; + + return ( + + ); +} diff --git a/src/renderer/src/components/text-field/text-field.css.ts b/src/renderer/src/components/text-field/text-field.css.ts new file mode 100644 index 00000000..d38230ef --- /dev/null +++ b/src/renderer/src/components/text-field/text-field.css.ts @@ -0,0 +1,59 @@ +import { SPACING_UNIT, vars } from "../../theme.css"; +import { style } from "@vanilla-extract/css"; +import { recipe } from "@vanilla-extract/recipes"; + +export const textField = recipe({ + base: { + display: "inline-flex", + transition: "all ease 0.2s", + width: "100%", + alignItems: "center", + borderRadius: "8px", + border: `solid 1px ${vars.color.borderColor}`, + height: "40px", + minHeight: "40px", + }, + variants: { + focused: { + true: { + borderColor: "#DADBE1", + }, + false: { + ":hover": { + borderColor: "rgba(255, 255, 255, 0.5)", + }, + }, + }, + theme: { + primary: { + backgroundColor: vars.color.darkBackground, + }, + dark: { + backgroundColor: vars.color.background, + }, + }, + }, +}); + +export const textFieldInput = style({ + backgroundColor: "transparent", + border: "none", + width: "100%", + height: "100%", + outline: "none", + color: "#DADBE1", + cursor: "default", + fontFamily: "inherit", + fontSize: vars.size.bodyFontSize, + textOverflow: "ellipsis", + padding: `${SPACING_UNIT}px`, + ":focus": { + cursor: "text", + }, +}); + +export const label = style({ + marginBottom: `${SPACING_UNIT}px`, + display: "block", + color: vars.color.bodyText, +}); diff --git a/src/renderer/src/components/text-field/text-field.tsx b/src/renderer/src/components/text-field/text-field.tsx new file mode 100644 index 00000000..62378615 --- /dev/null +++ b/src/renderer/src/components/text-field/text-field.tsx @@ -0,0 +1,42 @@ +import { useId, useState } from "react"; +import type { RecipeVariants } from "@vanilla-extract/recipes"; +import * as styles from "./text-field.css"; + +export interface TextFieldProps + extends React.DetailedHTMLProps< + React.InputHTMLAttributes, + HTMLInputElement + > { + theme?: RecipeVariants["theme"]; + label?: string; +} + +export function TextField({ + theme = "primary", + label, + ...props +}: TextFieldProps) { + const [isFocused, setIsFocused] = useState(false); + const id = useId(); + + return ( +
+ {label && ( + + )} + +
+ setIsFocused(true)} + onBlur={() => setIsFocused(false)} + {...props} + /> +
+
+ ); +} diff --git a/src/renderer/src/constants.ts b/src/renderer/src/constants.ts new file mode 100644 index 00000000..6beac79f --- /dev/null +++ b/src/renderer/src/constants.ts @@ -0,0 +1 @@ +export const VERSION_CODENAME = "Exodus"; diff --git a/src/renderer/src/declaration.d.ts b/src/renderer/src/declaration.d.ts new file mode 100644 index 00000000..6fd533db --- /dev/null +++ b/src/renderer/src/declaration.d.ts @@ -0,0 +1,95 @@ +import type { + CatalogueCategory, + CatalogueEntry, + Game, + GameShop, + HowLongToBeatCategory, + ShopDetails, + TorrentProgress, + UserPreferences, +} from "@types"; +import type { DiskSpace } from "check-disk-space"; + +declare global { + declare module "*.svg" { + const content: React.FunctionComponent>; + export default content; + } + + interface Electron { + /* Torrenting */ + startGameDownload: ( + repackId: number, + objectID: string, + title: string, + shop: GameShop + ) => Promise; + cancelGameDownload: (gameId: number) => Promise; + pauseGameDownload: (gameId: number) => Promise; + resumeGameDownload: (gameId: number) => Promise; + onDownloadProgress: ( + cb: (value: TorrentProgress) => void + ) => () => Electron.IpcRenderer; + + /* Catalogue */ + searchGames: (query: string) => Promise; + getCatalogue: (category: CatalogueCategory) => Promise; + getGameShopDetails: ( + objectID: string, + shop: GameShop, + language: string + ) => Promise; + getRandomGame: () => Promise; + getHowLongToBeat: ( + objectID: string, + shop: GameShop, + title: string + ) => Promise; + getGames: ( + take?: number, + prevCursor?: number + ) => Promise<{ results: CatalogueEntry[]; cursor: number }>; + + /* Library */ + addGameToLibrary: ( + objectID: string, + title: string, + shop: GameShop, + executablePath: string + ) => Promise; + getLibrary: () => Promise; + getRepackersFriendlyNames: () => Promise>; + openGameInstaller: (gameId: number) => Promise; + openGame: (gameId: number, executablePath: string) => Promise; + closeGame: (gameId: number) => Promise; + removeGame: (gameId: number) => Promise; + deleteGameFolder: (gameId: number) => Promise; + getGameByObjectID: (objectID: string) => Promise; + onPlaytime: (cb: (gameId: number) => void) => () => Electron.IpcRenderer; + onGameClose: (cb: (gameId: number) => void) => () => Electron.IpcRenderer; + + /* User preferences */ + getUserPreferences: () => Promise; + updateUserPreferences: ( + preferences: Partial + ) => Promise; + + /* Hardware */ + getDiskFreeSpace: () => Promise; + + /* Misc */ + getOrCacheImage: (url: string) => Promise; + openExternal: (src: string) => Promise; + getVersion: () => Promise; + ping: () => string; + getDefaultDownloadsPath: () => Promise; + showOpenDialog: ( + options: Electron.OpenDialogOptions + ) => Promise; + platform: NodeJS.Platform; + } + + interface Window { + electron: Electron; + } +} diff --git a/src/renderer/src/features/download-slice.ts b/src/renderer/src/features/download-slice.ts new file mode 100644 index 00000000..23ba9c7e --- /dev/null +++ b/src/renderer/src/features/download-slice.ts @@ -0,0 +1,49 @@ +import { createSlice } from "@reduxjs/toolkit"; +import type { PayloadAction } from "@reduxjs/toolkit"; +import type { TorrentProgress } from "@types"; + +interface DownloadState { + packets: TorrentProgress[]; + gameId: number | null; + gamesWithDeletionInProgress: number[]; +} + +const initialState: DownloadState = { + packets: [], + gameId: null, + gamesWithDeletionInProgress: [], +}; + +export const downloadSlice = createSlice({ + name: "download", + initialState, + reducers: { + addPacket: (state, action: PayloadAction) => { + state.packets = [...state.packets, action.payload]; + if (!state.gameId) state.gameId = action.payload.game.id; + }, + clearDownload: (state) => { + state.packets = []; + state.gameId = null; + }, + setGameDeleting: (state, action: PayloadAction) => { + if ( + !state.gamesWithDeletionInProgress.includes(action.payload) && + action.payload + ) { + state.gamesWithDeletionInProgress.push(action.payload); + } + }, + removeGameFromDeleting: (state, action: PayloadAction) => { + const index = state.gamesWithDeletionInProgress.indexOf(action.payload); + if (index >= 0) state.gamesWithDeletionInProgress.splice(index, 1); + }, + }, +}); + +export const { + addPacket, + clearDownload, + setGameDeleting, + removeGameFromDeleting, +} = downloadSlice.actions; diff --git a/src/renderer/src/features/index.ts b/src/renderer/src/features/index.ts new file mode 100644 index 00000000..368afe0d --- /dev/null +++ b/src/renderer/src/features/index.ts @@ -0,0 +1,6 @@ +export * from "./search-slice"; +export * from "./repackers-friendly-names-slice"; +export * from "./library-slice"; +export * from "./use-preferences-slice"; +export * from "./download-slice"; +export * from "./window-slice"; diff --git a/src/renderer/src/features/library-slice.ts b/src/renderer/src/features/library-slice.ts new file mode 100644 index 00000000..15a36ba7 --- /dev/null +++ b/src/renderer/src/features/library-slice.ts @@ -0,0 +1,24 @@ +import { createSlice } from "@reduxjs/toolkit"; +import type { PayloadAction } from "@reduxjs/toolkit"; + +import type { Game } from "@types"; + +interface LibraryState { + value: Game[]; +} + +const initialState: LibraryState = { + value: [], +}; + +export const librarySlice = createSlice({ + name: "library", + initialState, + reducers: { + setLibrary: (state, action: PayloadAction) => { + state.value = action.payload; + }, + }, +}); + +export const { setLibrary } = librarySlice.actions; diff --git a/src/renderer/src/features/repackers-friendly-names-slice.ts b/src/renderer/src/features/repackers-friendly-names-slice.ts new file mode 100644 index 00000000..e7daa109 --- /dev/null +++ b/src/renderer/src/features/repackers-friendly-names-slice.ts @@ -0,0 +1,26 @@ +import { createSlice } from "@reduxjs/toolkit"; +import type { PayloadAction } from "@reduxjs/toolkit"; + +interface RepackersFriendlyNamesState { + value: Record; +} + +const initialState: RepackersFriendlyNamesState = { + value: {}, +}; + +export const repackersFriendlyNamesSlice = createSlice({ + name: "repackersFriendlyNames", + initialState, + reducers: { + setRepackersFriendlyNames: ( + state, + action: PayloadAction + ) => { + state.value = action.payload; + }, + }, +}); + +export const { setRepackersFriendlyNames } = + repackersFriendlyNamesSlice.actions; diff --git a/src/renderer/src/features/search-slice.ts b/src/renderer/src/features/search-slice.ts new file mode 100644 index 00000000..2c064aa2 --- /dev/null +++ b/src/renderer/src/features/search-slice.ts @@ -0,0 +1,25 @@ +import { createSlice } from "@reduxjs/toolkit"; +import type { PayloadAction } from "@reduxjs/toolkit"; + +interface SearchState { + value: string; +} + +const initialState: SearchState = { + value: "", +}; + +export const searchSlice = createSlice({ + name: "search", + initialState, + reducers: { + setSearch: (state, action: PayloadAction) => { + state.value = action.payload; + }, + clearSearch: (state) => { + state.value = ""; + }, + }, +}); + +export const { setSearch, clearSearch } = searchSlice.actions; diff --git a/src/renderer/src/features/use-preferences-slice.ts b/src/renderer/src/features/use-preferences-slice.ts new file mode 100644 index 00000000..f6a3cf65 --- /dev/null +++ b/src/renderer/src/features/use-preferences-slice.ts @@ -0,0 +1,23 @@ +import { createSlice } from "@reduxjs/toolkit"; +import type { PayloadAction } from "@reduxjs/toolkit"; +import type { UserPreferences } from "@types"; + +interface UserPreferencesState { + value: UserPreferences | null; +} + +const initialState: UserPreferencesState = { + value: null, +}; + +export const userPreferencesSlice = createSlice({ + name: "userPreferences", + initialState, + reducers: { + setUserPreferences: (state, action: PayloadAction) => { + state.value = action.payload; + }, + }, +}); + +export const { setUserPreferences } = userPreferencesSlice.actions; diff --git a/src/renderer/src/features/window-slice.ts b/src/renderer/src/features/window-slice.ts new file mode 100644 index 00000000..4d8b5fa7 --- /dev/null +++ b/src/renderer/src/features/window-slice.ts @@ -0,0 +1,27 @@ +import { createSlice } from "@reduxjs/toolkit"; +import type { PayloadAction } from "@reduxjs/toolkit"; + +interface WindowState { + draggingDisabled: boolean; + headerTitle: string; +} + +const initialState: WindowState = { + draggingDisabled: false, + headerTitle: "", +}; + +export const windowSlice = createSlice({ + name: "window", + initialState, + reducers: { + toggleDragging: (state, action: PayloadAction) => { + state.draggingDisabled = action.payload; + }, + setHeaderTitle: (state, action: PayloadAction) => { + state.headerTitle = action.payload; + }, + }, +}); + +export const { toggleDragging, setHeaderTitle } = windowSlice.actions; diff --git a/src/renderer/src/helpers.ts b/src/renderer/src/helpers.ts new file mode 100644 index 00000000..ae100f62 --- /dev/null +++ b/src/renderer/src/helpers.ts @@ -0,0 +1,25 @@ +export const steamUrlBuilder = { + library: (objectID: string) => + `https://steamcdn-a.akamaihd.net/steam/apps/${objectID}/header.jpg`, + libraryHero: (objectID: string) => + `https://steamcdn-a.akamaihd.net/steam/apps/${objectID}/library_hero.jpg`, + logo: (objectID: string) => + `https://cdn.cloudflare.steamstatic.com/steam/apps/${objectID}/logo.png`, +}; + +export const formatDownloadProgress = (progress?: number) => { + if (!progress) return "0%"; + const progressPercentage = progress * 100; + + if (Number(progressPercentage.toFixed(2)) % 1 === 0) + return `${Math.floor(progressPercentage)}%`; + + return `${progressPercentage.toFixed(2)}%`; +}; + +export const getSteamLanguage = (language: string) => { + if (language.startsWith("pt")) return "brazilian"; + if (language.startsWith("es")) return "spanish"; + if (language.startsWith("fr")) return "french"; + return "english"; +}; diff --git a/src/renderer/src/hooks/index.ts b/src/renderer/src/hooks/index.ts new file mode 100644 index 00000000..aae58295 --- /dev/null +++ b/src/renderer/src/hooks/index.ts @@ -0,0 +1,3 @@ +export * from "./use-download"; +export * from "./use-library"; +export * from "./redux"; diff --git a/src/renderer/src/hooks/redux.ts b/src/renderer/src/hooks/redux.ts new file mode 100644 index 00000000..ebfd6382 --- /dev/null +++ b/src/renderer/src/hooks/redux.ts @@ -0,0 +1,7 @@ +import { useDispatch, useSelector } from "react-redux"; +import type { TypedUseSelectorHook } from "react-redux"; + +import type { AppDispatch, RootState } from "@renderer/store"; + +export const useAppDispatch: () => AppDispatch = useDispatch; +export const useAppSelector: TypedUseSelectorHook = useSelector; diff --git a/src/renderer/src/hooks/use-date.ts b/src/renderer/src/hooks/use-date.ts new file mode 100644 index 00000000..2ffcb583 --- /dev/null +++ b/src/renderer/src/hooks/use-date.ts @@ -0,0 +1,33 @@ +import { formatDistance } from "date-fns"; +import type { FormatDistanceOptions } from "date-fns"; +import { ptBR, enUS, es, fr } from "date-fns/locale"; +import { useTranslation } from "react-i18next"; + +export function useDate() { + const { i18n } = useTranslation(); + + const getDateLocale = () => { + if (i18n.language.startsWith("pt")) return ptBR; + if (i18n.language.startsWith("es")) return es; + if (i18n.language.startsWith("fr")) return fr; + + return enUS; + }; + + return { + formatDistance: ( + date: string | number | Date, + baseDate: string | number | Date, + options?: FormatDistanceOptions + ) => { + try { + return formatDistance(date, baseDate, { + ...options, + locale: getDateLocale(), + }); + } catch (err) { + return ""; + } + }, + }; +} diff --git a/src/renderer/src/hooks/use-download.ts b/src/renderer/src/hooks/use-download.ts new file mode 100644 index 00000000..522dd2c2 --- /dev/null +++ b/src/renderer/src/hooks/use-download.ts @@ -0,0 +1,132 @@ +import { addMilliseconds } from "date-fns"; + +import { formatDownloadProgress } from "@renderer/helpers"; +import { useLibrary } from "./use-library"; +import { useAppDispatch, useAppSelector } from "./redux"; +import { + addPacket, + clearDownload, + setGameDeleting, + removeGameFromDeleting, +} from "@renderer/features"; +import type { GameShop, TorrentProgress } from "@types"; +import { useDate } from "./use-date"; +import { formatBytes } from "@renderer/utils"; + +export function useDownload() { + const { updateLibrary } = useLibrary(); + const { formatDistance } = useDate(); + + const { packets, gamesWithDeletionInProgress } = useAppSelector( + (state) => state.download + ); + const dispatch = useAppDispatch(); + + const lastPacket = packets.at(-1); + + const startDownload = ( + repackId: number, + objectID: string, + title: string, + shop: GameShop + ) => + window.electron + .startGameDownload(repackId, objectID, title, shop) + .then((game) => { + dispatch(clearDownload()); + updateLibrary(); + + return game; + }); + + const pauseDownload = (gameId: number) => + window.electron.pauseGameDownload(gameId).then(() => { + dispatch(clearDownload()); + updateLibrary(); + }); + + const resumeDownload = (gameId: number) => + window.electron.resumeGameDownload(gameId).then(() => { + updateLibrary(); + }); + + const cancelDownload = (gameId: number) => + window.electron.cancelGameDownload(gameId).then(() => { + dispatch(clearDownload()); + updateLibrary(); + deleteGame(gameId); + }); + + const removeGame = (gameId: number) => + window.electron.removeGame(gameId).then(() => { + updateLibrary(); + }); + + const isVerifying = ["downloading_metadata", "checking_files"].includes( + lastPacket?.game.status + ); + + const getETA = () => { + if (isVerifying || !isFinite(lastPacket?.timeRemaining)) { + return ""; + } + + try { + return formatDistance( + addMilliseconds(new Date(), lastPacket?.timeRemaining ?? 1), + new Date(), + { addSuffix: true } + ); + } catch (err) { + return ""; + } + }; + + const getProgress = () => { + if (lastPacket?.game.status === "checking_files") { + return formatDownloadProgress(lastPacket?.game.fileVerificationProgress); + } + + return formatDownloadProgress(lastPacket?.game.progress); + }; + + const deleteGame = (gameId: number) => + window.electron + .cancelGameDownload(gameId) + .then(() => { + dispatch(setGameDeleting(gameId)); + return window.electron.deleteGameFolder(gameId); + }) + .catch(() => {}) + .finally(() => { + updateLibrary(); + dispatch(removeGameFromDeleting(gameId)); + }); + + const isGameDeleting = (gameId: number) => { + return gamesWithDeletionInProgress.includes(gameId); + }; + + return { + game: lastPacket?.game, + bytesDownloaded: lastPacket?.game.bytesDownloaded, + fileSize: lastPacket?.game.fileSize, + isVerifying, + gameId: lastPacket?.game.id, + downloadSpeed: `${formatBytes(lastPacket?.downloadSpeed ?? 0)}/s`, + isDownloading: Boolean(lastPacket), + progress: getProgress(), + numPeers: lastPacket?.numPeers, + numSeeds: lastPacket?.numSeeds, + eta: getETA(), + startDownload, + pauseDownload, + resumeDownload, + cancelDownload, + removeGame, + deleteGame, + isGameDeleting, + clearDownload: () => dispatch(clearDownload()), + addPacket: (packet: TorrentProgress) => dispatch(addPacket(packet)), + }; +} diff --git a/src/renderer/src/hooks/use-library.ts b/src/renderer/src/hooks/use-library.ts new file mode 100644 index 00000000..f7310df0 --- /dev/null +++ b/src/renderer/src/hooks/use-library.ts @@ -0,0 +1,16 @@ +import { useCallback } from "react"; +import { useAppDispatch, useAppSelector } from "./redux"; +import { setLibrary } from "@renderer/features"; + +export function useLibrary() { + const dispatch = useAppDispatch(); + const library = useAppSelector((state) => state.library.value); + + const updateLibrary = useCallback(async () => { + return window.electron + .getLibrary() + .then((updatedLibrary) => dispatch(setLibrary(updatedLibrary))); + }, [dispatch]); + + return { library, updateLibrary }; +} diff --git a/src/renderer/src/main.tsx b/src/renderer/src/main.tsx new file mode 100644 index 00000000..2199cc0a --- /dev/null +++ b/src/renderer/src/main.tsx @@ -0,0 +1,102 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import i18n from "i18next"; +import { initReactI18next } from "react-i18next"; +import { Provider } from "react-redux"; +import LanguageDetector from "i18next-browser-languagedetector"; +import { createHashRouter, RouterProvider } from "react-router-dom"; + +import { init } from "@sentry/electron/renderer"; +import { init as reactInit } from "@sentry/react"; + +import "@fontsource/fira-mono/400.css"; +import "@fontsource/fira-mono/500.css"; +import "@fontsource/fira-mono/700.css"; +import "@fontsource/fira-sans/400.css"; +import "@fontsource/fira-sans/500.css"; +import "@fontsource/fira-sans/700.css"; +import "react-loading-skeleton/dist/skeleton.css"; + +import { App } from "./app"; +import { + Home, + Downloads, + GameDetails, + SearchResults, + Settings, + Catalogue, +} from "@renderer/pages"; + +import { store } from "./store"; + +import * as resources from "@locales"; + +if (import.meta.env.RENDERER_VITE_SENTRY_DSN) { + init( + { + dsn: import.meta.env.RENDERER_VITE_SENTRY_DSN, + beforeSend: async (event) => { + const userPreferences = await window.electron.getUserPreferences(); + + if (userPreferences?.telemetryEnabled) return event; + return null; + }, + }, + reactInit + ); +} + +const router = createHashRouter([ + { + path: "/", + Component: App, + children: [ + { + path: "/", + Component: Home, + }, + { + path: "/catalogue", + Component: Catalogue, + }, + { + path: "/downloads", + Component: Downloads, + }, + { + path: "/game/:shop/:objectID", + Component: GameDetails, + }, + { + path: "/search", + Component: SearchResults, + }, + { + path: "/settings", + Component: Settings, + }, + ], + }, +]); + +i18n + .use(LanguageDetector) + .use(initReactI18next) + .init({ + resources, + fallbackLng: "en", + interpolation: { + escapeValue: false, + }, + }) + .then(() => { + window.electron.updateUserPreferences({ language: i18n.language }); + }); + +ReactDOM.createRoot(document.getElementById("root")!).render( + + + + + +); diff --git a/src/renderer/src/pages/catalogue/catalogue.tsx b/src/renderer/src/pages/catalogue/catalogue.tsx new file mode 100644 index 00000000..8dc5fc56 --- /dev/null +++ b/src/renderer/src/pages/catalogue/catalogue.tsx @@ -0,0 +1,115 @@ +import { Button, GameCard } from "@renderer/components"; +import Skeleton, { SkeletonTheme } from "react-loading-skeleton"; +import { useTranslation } from "react-i18next"; + +import type { CatalogueEntry } from "@types"; + +import { clearSearch } from "@renderer/features"; +import { useAppDispatch } from "@renderer/hooks"; +import { vars } from "../../theme.css"; +import { useEffect, useRef, useState } from "react"; +import { useNavigate, useSearchParams } from "react-router-dom"; +import * as styles from "../home/home.css"; +import { ArrowLeftIcon, ArrowRightIcon } from "@primer/octicons-react"; + +export function Catalogue() { + const dispatch = useAppDispatch(); + + const { t } = useTranslation("catalogue"); + + const [searchResults, setSearchResults] = useState([]); + const [isLoading, setIsLoading] = useState(false); + + const contentRef = useRef(null); + + const cursorRef = useRef(0); + + const navigate = useNavigate(); + + const [searchParams] = useSearchParams(); + const cursor = Number(searchParams.get("cursor") ?? 0); + + const handleGameClick = (game: CatalogueEntry) => { + dispatch(clearSearch()); + navigate(`/game/${game.shop}/${game.objectID}`); + }; + + useEffect(() => { + if (contentRef.current) contentRef.current.scrollTop = 0; + setIsLoading(true); + setSearchResults([]); + + window.electron + .getGames(24, cursor) + .then(({ results, cursor }) => { + return new Promise((resolve) => { + setTimeout(() => { + cursorRef.current = cursor; + setSearchResults(results); + resolve(null); + }, 500); + }); + }) + .finally(() => { + setIsLoading(false); + }); + }, [dispatch, cursor, searchParams]); + + const handleNextPage = () => { + const params = new URLSearchParams({ + cursor: cursorRef.current.toString(), + }); + + navigate(`/catalogue?${params.toString()}`); + }; + + return ( + +
+ + + +
+ +
+
+ {isLoading && + Array.from({ length: 12 }).map((_, index) => ( + + ))} + + {!isLoading && searchResults.length > 0 && ( + <> + {searchResults.map((game) => ( + handleGameClick(game)} + /> + ))} + + )} +
+
+
+ ); +} diff --git a/src/renderer/src/pages/downloads/delete-modal.css.ts b/src/renderer/src/pages/downloads/delete-modal.css.ts new file mode 100644 index 00000000..ef0ba179 --- /dev/null +++ b/src/renderer/src/pages/downloads/delete-modal.css.ts @@ -0,0 +1,10 @@ +import { SPACING_UNIT } from "../../theme.css"; +import { style } from "@vanilla-extract/css"; + +export const deleteActionsButtonsCtn = style({ + display: "flex", + width: "100%", + justifyContent: "end", + alignItems: "center", + gap: `${SPACING_UNIT}px`, +}); diff --git a/src/renderer/src/pages/downloads/delete-modal.tsx b/src/renderer/src/pages/downloads/delete-modal.tsx new file mode 100644 index 00000000..953d94cd --- /dev/null +++ b/src/renderer/src/pages/downloads/delete-modal.tsx @@ -0,0 +1,43 @@ +import { useTranslation } from "react-i18next"; + +import { Button, Modal } from "@renderer/components"; + +import * as styles from "./delete-modal.css"; + +interface DeleteModalProps { + visible: boolean; + onClose: () => void; + deleteGame: () => void; +} + +export function DeleteModal({ + onClose, + visible, + deleteGame, +}: DeleteModalProps) { + const { t } = useTranslation("downloads"); + + const handleDeleteGame = () => { + deleteGame(); + onClose(); + }; + + return ( + +
+ + + +
+
+ ); +} diff --git a/src/renderer/src/pages/downloads/downloads.css.ts b/src/renderer/src/pages/downloads/downloads.css.ts new file mode 100644 index 00000000..fd68de81 --- /dev/null +++ b/src/renderer/src/pages/downloads/downloads.css.ts @@ -0,0 +1,90 @@ +import { SPACING_UNIT, vars } from "../../theme.css"; +import { style } from "@vanilla-extract/css"; +import { recipe } from "@vanilla-extract/recipes"; + +export const downloadTitle = style({ + fontWeight: "bold", + cursor: "pointer", + color: vars.color.bodyText, + textAlign: "left", + marginBottom: `${SPACING_UNIT}px`, + fontSize: "16px", + display: "block", + ":hover": { + textDecoration: "underline", + }, +}); + +export const downloads = style({ + width: "100%", + gap: `${SPACING_UNIT * 2}px`, + display: "flex", + flexDirection: "column", + margin: "0", + padding: "0", + marginTop: `${SPACING_UNIT * 3}px`, +}); + +export const downloadCover = style({ + width: "280px", + minWidth: "280px", + height: "auto", + objectFit: "cover", + objectPosition: "center", + borderRight: `solid 1px ${vars.color.borderColor}`, +}); + +export const download = recipe({ + base: { + width: "100%", + backgroundColor: vars.color.background, + display: "flex", + borderRadius: "8px", + border: `solid 1px ${vars.color.borderColor}`, + overflow: "hidden", + boxShadow: "0px 0px 15px 0px #000000", + transition: "all ease 0.2s", + height: "140px", + minHeight: "140px", + maxHeight: "140px", + }, + variants: { + cancelled: { + true: { + opacity: vars.opacity.disabled, + ":hover": { + opacity: "1", + }, + }, + }, + }, +}); + +export const downloadDetails = style({ + display: "flex", + flexDirection: "column", + flex: "1", + justifyContent: "center", + gap: `${SPACING_UNIT / 2}px`, + fontSize: "14px", +}); + +export const downloadRightContent = style({ + display: "flex", + padding: `${SPACING_UNIT * 2}px`, + flex: "1", + gap: `${SPACING_UNIT}px`, +}); + +export const downloadActions = style({ + display: "flex", + alignItems: "center", + gap: `${SPACING_UNIT}px`, +}); + +export const downloadsContainer = style({ + display: "flex", + padding: `${SPACING_UNIT * 3}px`, + flexDirection: "column", + width: "100%", +}); diff --git a/src/renderer/src/pages/downloads/downloads.tsx b/src/renderer/src/pages/downloads/downloads.tsx new file mode 100644 index 00000000..aecf7b5e --- /dev/null +++ b/src/renderer/src/pages/downloads/downloads.tsx @@ -0,0 +1,272 @@ +import { useTranslation } from "react-i18next"; +import { useNavigate } from "react-router-dom"; + +import { AsyncImage, Button, TextField } from "@renderer/components"; +import { formatDownloadProgress, steamUrlBuilder } from "@renderer/helpers"; +import { useDownload, useLibrary } from "@renderer/hooks"; +import type { Game } from "@types"; + +import { useEffect, useMemo, useRef, useState } from "react"; +import { BinaryNotFoundModal } from "../shared-modals/binary-not-found-modal"; +import * as styles from "./downloads.css"; +import { DeleteModal } from "./delete-modal"; +import { formatBytes } from "@renderer/utils"; + +export function Downloads() { + const { library, updateLibrary } = useLibrary(); + + const { t } = useTranslation("downloads"); + + const navigate = useNavigate(); + + const gameToBeDeleted = useRef(null); + + const [filteredLibrary, setFilteredLibrary] = useState([]); + const [showBinaryNotFoundModal, setShowBinaryNotFoundModal] = useState(false); + const [showDeleteModal, setShowDeleteModal] = useState(false); + + const { + game: gameDownloading, + progress, + isDownloading, + numPeers, + numSeeds, + pauseDownload, + resumeDownload, + cancelDownload, + deleteGame, + isGameDeleting, + } = useDownload(); + + const libraryWithDownloadedGamesOnly = useMemo(() => { + return library.filter((game) => game.status); + }, [library]); + + useEffect(() => { + setFilteredLibrary(libraryWithDownloadedGamesOnly); + }, [libraryWithDownloadedGamesOnly]); + + const openGameInstaller = (gameId: number) => + window.electron.openGameInstaller(gameId).then((isBinaryInPath) => { + if (!isBinaryInPath) setShowBinaryNotFoundModal(true); + updateLibrary(); + }); + + const removeGame = (gameId: number) => + window.electron.removeGame(gameId).then(() => { + updateLibrary(); + }); + + const getFinalDownloadSize = (game: Game) => { + const isGameDownloading = isDownloading && gameDownloading?.id === game?.id; + + if (!game) return "N/A"; + if (game.fileSize) return formatBytes(game.fileSize); + + if (gameDownloading?.fileSize && isGameDownloading) + return formatBytes(gameDownloading.fileSize); + + return game.repack?.fileSize ?? "N/A"; + }; + + const getGameInfo = (game: Game) => { + const isGameDownloading = isDownloading && gameDownloading?.id === game?.id; + const finalDownloadSize = getFinalDownloadSize(game); + + if (isGameDeleting(game?.id)) { + return

{t("deleting")}

; + } + + if (isGameDownloading) { + return ( + <> +

{progress}

+ + {gameDownloading?.status !== "downloading" ? ( +

{t(gameDownloading?.status)}

+ ) : ( + <> +

+ {formatBytes(gameDownloading?.bytesDownloaded)} /{" "} + {finalDownloadSize} +

+

+ {numPeers} peers / {numSeeds} seeds +

+ + )} + + ); + } + + if (game?.status === "seeding") { + return ( + <> +

{game?.repack.title}

+

{t("completed")}

+ + ); + } + if (game?.status === "cancelled") return

{t("cancelled")}

; + if (game?.status === "downloading_metadata") + return

{t("starting_download")}

; + + if (game?.status === "paused") { + return ( + <> +

{formatDownloadProgress(game.progress)}

+

{t("paused")}

+ + ); + } + }; + + const openDeleteModal = (gameId: number) => { + gameToBeDeleted.current = gameId; + setShowDeleteModal(true); + }; + + const getGameActions = (game: Game) => { + const isGameDownloading = isDownloading && gameDownloading?.id === game?.id; + + const deleting = isGameDeleting(game.id); + + if (isGameDownloading) { + return ( + <> + + + + ); + } + + if (game?.status === "paused") { + return ( + <> + + + + ); + } + + if (game?.status === "seeding") { + return ( + <> + + + + + ); + } + + if (game?.status === "downloading_metadata") { + return ( + + ); + } + + return ( + <> + + + + + ); + }; + + const handleFilter: React.ChangeEventHandler = (event) => { + setFilteredLibrary( + libraryWithDownloadedGamesOnly.filter((game) => + game.title + .toLowerCase() + .includes(event.target.value.toLocaleLowerCase()) + ) + ); + }; + + return ( +
+ setShowBinaryNotFoundModal(false)} + /> + setShowDeleteModal(false)} + deleteGame={() => + deleteGame(gameToBeDeleted.current).then(updateLibrary) + } + /> + + + +
    + {filteredLibrary.map((game) => { + return ( +
  • + +
    +
    + + + {getGameInfo(game)} +
    + +
    + {getGameActions(game)} +
    +
    +
  • + ); + })} +
+
+ ); +} diff --git a/src/renderer/src/pages/game-details/description-header.tsx b/src/renderer/src/pages/game-details/description-header.tsx new file mode 100644 index 00000000..e502a4fb --- /dev/null +++ b/src/renderer/src/pages/game-details/description-header.tsx @@ -0,0 +1,84 @@ +import { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { useParams } from "react-router-dom"; +import { ShareAndroidIcon } from "@primer/octicons-react"; + +import { Button } from "@renderer/components"; +import type { ShopDetails } from "@types"; + +import * as styles from "./game-details.css"; + +const OPEN_HYDRA_URL = "https://open.hydralauncher.site"; + +export interface DescriptionHeaderProps { + gameDetails: ShopDetails | null; +} + +export function DescriptionHeader({ gameDetails }: DescriptionHeaderProps) { + const [clipboardLock, setClipboardLock] = useState(false); + const { t, i18n } = useTranslation("game_details"); + + const { objectID, shop } = useParams(); + + useEffect(() => { + if (!gameDetails) return setClipboardLock(true); + setClipboardLock(false); + }, [gameDetails]); + + const handleCopyToClipboard = () => { + setClipboardLock(true); + + const searchParams = new URLSearchParams({ + p: btoa( + JSON.stringify([ + objectID, + shop, + encodeURIComponent(gameDetails?.name), + i18n.language, + ]) + ), + }); + + navigator.clipboard.writeText( + OPEN_HYDRA_URL + `/?${searchParams.toString()}` + ); + + const zero = performance.now(); + + requestAnimationFrame(function holdLock(time) { + if (time - zero <= 3000) { + requestAnimationFrame(holdLock); + } else { + setClipboardLock(false); + } + }); + }; + + return ( +
+
+

+ {t("release_date", { + date: gameDetails?.release_date.date, + })} +

+

{t("publisher", { publisher: gameDetails?.publishers[0] })}

+
+ + +
+ ); +} diff --git a/src/renderer/src/pages/game-details/game-details-skeleton.tsx b/src/renderer/src/pages/game-details/game-details-skeleton.tsx new file mode 100644 index 00000000..4a202d18 --- /dev/null +++ b/src/renderer/src/pages/game-details/game-details-skeleton.tsx @@ -0,0 +1,89 @@ +import Skeleton from "react-loading-skeleton"; + +import { Button } from "@renderer/components"; +import * as styles from "./game-details.css"; +import { useTranslation } from "react-i18next"; +import { ShareAndroidIcon } from "@primer/octicons-react"; + +export function GameDetailsSkeleton() { + const { t } = useTranslation("game_details"); + + return ( +
+
+ +
+
+
+ + +
+
+
+
+
+
+ + +
+ +
+
+ {Array.from({ length: 3 }).map((_, index) => ( + + ))} + + {Array.from({ length: 2 }).map((_, index) => ( + + ))} + + +
+
+
+
+

HowLongToBeat

+
+
    + {Array.from({ length: 3 }).map((_, index) => ( + + ))} +
+
+

{t("requirements")}

+
+
+ + +
+
+ {Array.from({ length: 6 }).map((_, index) => ( + + ))} +
+
+
+
+ ); +} diff --git a/src/renderer/src/pages/game-details/game-details.css.ts b/src/renderer/src/pages/game-details/game-details.css.ts new file mode 100644 index 00000000..52f671eb --- /dev/null +++ b/src/renderer/src/pages/game-details/game-details.css.ts @@ -0,0 +1,259 @@ +import { globalStyle, keyframes, style } from "@vanilla-extract/css"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const slideIn = keyframes({ + "0%": { transform: `translateY(${40 + 16}px)` }, + "100%": { transform: "translateY(0)" }, +}); + +export const hero = style({ + width: "100%", + height: "300px", + minHeight: "300px", + display: "flex", + flexDirection: "column", + position: "relative", + transition: "all ease 0.2s", + "@media": { + "(min-width: 1250px)": { + height: "350px", + minHeight: "350px", + }, + }, +}); + +export const heroContent = style({ + padding: `${SPACING_UNIT * 2}px`, + height: "100%", + width: "100%", + display: "flex", +}); + +export const heroBackdrop = style({ + width: "100%", + height: "100%", + background: "linear-gradient(0deg, rgba(0, 0, 0, 0.3) 60%, transparent 100%)", + position: "absolute", + display: "flex", + flexDirection: "column", + justifyContent: "space-between", +}); + +export const heroImage = style({ + width: "100%", + height: "100%", + objectFit: "cover", + objectPosition: "top", + transition: "all ease 0.2s", + "@media": { + "(min-width: 1250px)": { + objectPosition: "center", + }, + }, +}); + +export const heroImageSkeleton = style({ + height: "300px", + "@media": { + "(min-width: 1250px)": { + height: "350px", + }, + }, +}); + +export const container = style({ + width: "100%", + height: "100%", + display: "flex", + flexDirection: "column", +}); + +export const descriptionContainer = style({ + display: "flex", + width: "100%", + flex: "1", +}); + +export const descriptionContent = style({ + width: "100%", + height: "100%", +}); + +export const contentSidebar = style({ + borderLeft: `solid 1px ${vars.color.borderColor};`, + width: "100%", + height: "100%", + "@media": { + "(min-width: 768px)": { + width: "100%", + maxWidth: "200px", + }, + "(min-width: 1024px)": { + maxWidth: "300px", + width: "100%", + }, + "(min-width: 1280px)": { + width: "100%", + maxWidth: "400px", + }, + }, +}); + +export const contentSidebarTitle = style({ + height: "72px", + padding: `${SPACING_UNIT * 2}px ${SPACING_UNIT * 2}px`, + display: "flex", + alignItems: "center", + backgroundColor: vars.color.background, + borderBottom: `solid 1px ${vars.color.borderColor}`, +}); + +export const requirementButtonContainer = style({ + width: "100%", + display: "flex", +}); + +export const requirementButton = style({ + border: `solid 1px ${vars.color.borderColor};`, + borderLeft: "none", + borderRight: "none", + borderRadius: "0", + width: "100%", +}); + +export const requirementsDetails = style({ + padding: `${SPACING_UNIT * 2}px`, + lineHeight: "22px", + fontFamily: "'Fira Sans', sans-serif", + fontSize: "16px", +}); + +export const requirementsDetailsSkeleton = style({ + display: "flex", + flexDirection: "column", + gap: "8px", + padding: `${SPACING_UNIT * 2}px`, + fontSize: "16px", +}); + +export const description = style({ + userSelect: "text", + lineHeight: "22px", + fontFamily: "'Fira Sans', sans-serif", + fontSize: "16px", + padding: `${SPACING_UNIT * 3}px ${SPACING_UNIT * 2}px`, + "@media": { + "(min-width: 1280px)": { + width: "60%", + }, + }, + width: "100%", + marginLeft: "auto", + marginRight: "auto", +}); + +export const descriptionSkeleton = style({ + display: "flex", + flexDirection: "column", + gap: `${SPACING_UNIT}px`, + padding: `${SPACING_UNIT * 3}px ${SPACING_UNIT * 2}px`, + width: "100%", + "@media": { + "(min-width: 1280px)": { + width: "60%", + lineHeight: "22px", + }, + }, + marginLeft: "auto", + marginRight: "auto", +}); + +export const descriptionHeader = style({ + width: "100%", + padding: `${SPACING_UNIT * 2}px ${SPACING_UNIT * 2}px`, + borderBottom: `solid 1px ${vars.color.borderColor}`, + display: "flex", + justifyContent: "space-between", + alignItems: "center", + backgroundColor: vars.color.background, + height: "72px", +}); + +export const descriptionHeaderInfo = style({ + display: "flex", + gap: `${SPACING_UNIT}px`, + flexDirection: "column", + fontSize: vars.size.bodyFontSize, +}); + +export const howLongToBeatCategoriesList = style({ + margin: "0", + padding: "16px", + display: "flex", + flexDirection: "column", + gap: "16px", +}); + +export const howLongToBeatCategory = style({ + display: "flex", + flexDirection: "column", + gap: "4px", + backgroundColor: vars.color.background, + borderRadius: "8px", + padding: `8px 16px`, + border: `solid 1px ${vars.color.borderColor}`, +}); + +export const howLongToBeatCategoryLabel = style({ + fontSize: vars.size.bodyFontSize, + color: "#DADBE1", +}); + +export const howLongToBeatCategorySkeleton = style({ + border: `solid 1px ${vars.color.borderColor}`, + borderRadius: "8px", + height: "76px", +}); + +export const randomizerButton = style({ + animationName: slideIn, + animationDuration: "0.2s", + position: "fixed", + /* Bottom panel height + spacing */ + bottom: `${26 + SPACING_UNIT * 2}px`, + /* Scroll bar + spacing */ + right: `${9 + SPACING_UNIT * 2}px`, + boxShadow: "rgba(255, 255, 255, 0.1) 0px 0px 10px 3px", + border: `solid 2px ${vars.color.borderColor}`, + backgroundColor: vars.color.background, + ":hover": { + backgroundColor: vars.color.background, + boxShadow: "rgba(255, 255, 255, 0.1) 0px 0px 15px 5px", + opacity: "1", + }, + ":active": { + transform: "scale(0.98)", + }, +}); + +globalStyle(".bb_tag", { + marginTop: `${SPACING_UNIT * 2}px`, + marginBottom: `${SPACING_UNIT * 2}px`, +}); + +globalStyle(`${description} img`, { + borderRadius: "5px", + marginTop: `${SPACING_UNIT}px`, + marginBottom: `${SPACING_UNIT * 3}px`, + display: "block", + maxWidth: "100%", +}); + +globalStyle(`${description} a`, { + color: vars.color.bodyText, +}); + +globalStyle(`${requirementsDetails} a`, { + display: "flex", + color: vars.color.bodyText, +}); diff --git a/src/renderer/src/pages/game-details/game-details.tsx b/src/renderer/src/pages/game-details/game-details.tsx new file mode 100644 index 00000000..7f9e8ac2 --- /dev/null +++ b/src/renderer/src/pages/game-details/game-details.tsx @@ -0,0 +1,289 @@ +import Color from "color"; +import { average } from "color.js"; +import { useCallback, useEffect, useRef, useState } from "react"; +import { useNavigate, useParams, useSearchParams } from "react-router-dom"; + +import type { + Game, + GameShop, + HowLongToBeatCategory, + ShopDetails, + SteamAppDetails, +} from "@types"; + +import { AsyncImage, Button } from "@renderer/components"; +import { setHeaderTitle } from "@renderer/features"; +import { getSteamLanguage, steamUrlBuilder } from "@renderer/helpers"; +import { useAppDispatch, useDownload } from "@renderer/hooks"; + +import starsAnimation from "@renderer/assets/lottie/stars.json"; + +import { vars } from "../../theme.css"; +import { useTranslation } from "react-i18next"; +import { SkeletonTheme } from "react-loading-skeleton"; +import { GameDetailsSkeleton } from "./game-details-skeleton"; +import * as styles from "./game-details.css"; +import { HeroPanel } from "./hero-panel"; +import { HowLongToBeatSection } from "./how-long-to-beat-section"; +import { RepacksModal } from "./repacks-modal"; +import Lottie from "lottie-react"; +import { DescriptionHeader } from "./description-header"; + +export function GameDetails() { + const { objectID, shop } = useParams(); + + const [isLoading, setIsLoading] = useState(false); + const [color, setColor] = useState(""); + const [gameDetails, setGameDetails] = useState(null); + const [howLongToBeat, setHowLongToBeat] = useState<{ + isLoading: boolean; + data: HowLongToBeatCategory[] | null; + }>({ isLoading: true, data: null }); + + const [game, setGame] = useState(null); + const [isGamePlaying, setIsGamePlaying] = useState(false); + const [activeRequirement, setActiveRequirement] = + useState("minimum"); + + const navigate = useNavigate(); + const [searchParams] = useSearchParams(); + + const { t, i18n } = useTranslation("game_details"); + + const [showRepacksModal, setShowRepacksModal] = useState(false); + + const randomGameObjectID = useRef(null); + + const dispatch = useAppDispatch(); + + const { game: gameDownloading, startDownload, isDownloading } = useDownload(); + + const getRandomGame = useCallback(() => { + window.electron.getRandomGame().then((objectID) => { + randomGameObjectID.current = objectID; + }); + }, []); + + const handleImageSettled = useCallback((url: string) => { + average(url, { amount: 1, format: "hex" }) + .then((color) => { + setColor(new Color(color).darken(0.6).toString() as string); + }) + .catch(() => {}); + }, []); + + const getGame = useCallback(() => { + window.electron + .getGameByObjectID(objectID) + .then((result) => setGame(result)); + }, [setGame, objectID]); + + useEffect(() => { + getGame(); + }, [getGame, gameDownloading?.id]); + + useEffect(() => { + setGame(null); + setIsLoading(true); + setIsGamePlaying(false); + dispatch(setHeaderTitle("")); + + getRandomGame(); + + window.electron + .getGameShopDetails(objectID, "steam", getSteamLanguage(i18n.language)) + .then((result) => { + if (!result) { + navigate(-1); + return; + } + + window.electron + .getHowLongToBeat(objectID, "steam", result.name) + .then((data) => { + setHowLongToBeat({ isLoading: false, data }); + }); + + setGameDetails(result); + dispatch(setHeaderTitle(result.name)); + }) + .finally(() => { + setIsLoading(false); + }); + + getGame(); + setHowLongToBeat({ isLoading: true, data: null }); + }, [getGame, getRandomGame, dispatch, navigate, objectID, i18n.language]); + + const isGameDownloading = isDownloading && gameDownloading?.id === game?.id; + + useEffect(() => { + if (isGameDownloading) + setGame((prev) => ({ ...prev, status: gameDownloading?.status })); + }, [isGameDownloading, gameDownloading?.status]); + + useEffect(() => { + const listeners = [ + window.electron.onGameClose(() => { + if (isGamePlaying) setIsGamePlaying(false); + }), + window.electron.onPlaytime((gameId) => { + if (gameId === game?.id) { + if (!isGamePlaying) setIsGamePlaying(true); + getGame(); + } + }), + ]; + + return () => { + listeners.forEach((unsubscribe) => unsubscribe()); + }; + }, [game?.id, isGamePlaying, getGame]); + + const handleStartDownload = async (repackId: number) => { + return startDownload( + repackId, + gameDetails.objectID, + gameDetails.name, + shop as GameShop + ).then(() => { + getGame(); + setShowRepacksModal(false); + }); + }; + + const handleRandomizerClick = () => { + if (!randomGameObjectID.current) return; + + const searchParams = new URLSearchParams({ + fromRandomizer: "1", + }); + + navigate( + `/game/steam/${randomGameObjectID.current}?${searchParams.toString()}` + ); + }; + + const fromRandomizer = searchParams.get("fromRandomizer"); + + return ( + + {gameDetails && ( + setShowRepacksModal(false)} + /> + )} + + {isLoading ? ( + + ) : ( +
+
+ +
+
+ +
+
+
+ + setShowRepacksModal(true)} + getGame={getGame} + isGamePlaying={isGamePlaying} + /> + +
+
+ + +
+
+ +
+ + +
+

{t("requirements")}

+
+ +
+ + +
+ +
+
+
+
+ )} + + {fromRandomizer && ( + + )} +
+ ); +} diff --git a/src/renderer/src/pages/game-details/hero-panel-actions.tsx b/src/renderer/src/pages/game-details/hero-panel-actions.tsx new file mode 100644 index 00000000..17394e7e --- /dev/null +++ b/src/renderer/src/pages/game-details/hero-panel-actions.tsx @@ -0,0 +1,212 @@ +import { NoEntryIcon, PlusCircleIcon } from "@primer/octicons-react"; + +import { Button } from "@renderer/components"; +import { useDownload, useLibrary } from "@renderer/hooks"; +import type { Game, ShopDetails } from "@types"; +import { useState } from "react"; +import { useTranslation } from "react-i18next"; + +export interface HeroPanelActionsProps { + game: Game | null; + gameDetails: ShopDetails | null; + isGamePlaying: boolean; + isGameDownloading: boolean; + openRepacksModal: () => void; + openBinaryNotFoundModal: () => void; + getGame: () => void; +} + +export function HeroPanelActions({ + game, + gameDetails, + isGamePlaying, + isGameDownloading, + openRepacksModal, + openBinaryNotFoundModal, + getGame, +}: HeroPanelActionsProps) { + const [toggleLibraryGameDisabled, setToggleLibraryGameDisabled] = + useState(false); + + const { + resumeDownload, + pauseDownload, + cancelDownload, + removeGame, + isGameDeleting, + } = useDownload(); + + const { updateLibrary } = useLibrary(); + + const { t } = useTranslation("game_details"); + + const selectGameExecutable = async () => { + return window.electron + .showOpenDialog({ + properties: ["openFile"], + filters: [ + { + name: "Game executable", + extensions: window.electron.platform === "win32" ? ["exe"] : [], + }, + ], + }) + .then(({ filePaths }) => { + if (filePaths && filePaths.length > 0) { + return filePaths[0]; + } + }); + }; + + const toggleGameOnLibrary = async () => { + setToggleLibraryGameDisabled(true); + + try { + if (game) { + await removeGame(game.id); + } else { + const gameExecutablePath = await selectGameExecutable(); + + await window.electron.addGameToLibrary( + gameDetails.objectID, + gameDetails.name, + "steam", + gameExecutablePath + ); + } + + updateLibrary(); + getGame(); + } finally { + setToggleLibraryGameDisabled(false); + } + }; + + const openGameInstaller = () => { + window.electron.openGameInstaller(game.id).then((isBinaryInPath) => { + if (!isBinaryInPath) openBinaryNotFoundModal(); + updateLibrary(); + }); + }; + + const openGame = async () => { + if (game.executablePath) { + window.electron.openGame(game.id, game.executablePath); + return; + } + + if (game?.executablePath) { + window.electron.openGame(game.id, game.executablePath); + return; + } + + const gameExecutablePath = await selectGameExecutable(); + window.electron.openGame(game.id, gameExecutablePath); + }; + + const closeGame = () => window.electron.closeGame(game.id); + + const deleting = isGameDeleting(game?.id); + + const toggleGameOnLibraryButton = ( + + ); + + if (isGameDownloading) { + return ( + <> + + + + ); + } + + if (game?.status === "paused") { + return ( + <> + + + + ); + } + + if (game?.status === "seeding" || (game && !game.status)) { + return ( + <> + {game?.status === "seeding" ? ( + + ) : ( + toggleGameOnLibraryButton + )} + + {isGamePlaying ? ( + + ) : ( + + )} + + ); + } + + if (game?.status === "cancelled") { + return ( + <> + + + + ); + } + + if (gameDetails && gameDetails.repacks.length) { + return ( + <> + {toggleGameOnLibraryButton} + + + ); + } + + return toggleGameOnLibraryButton; +} diff --git a/src/renderer/src/pages/game-details/hero-panel.css.ts b/src/renderer/src/pages/game-details/hero-panel.css.ts new file mode 100644 index 00000000..6824f9a4 --- /dev/null +++ b/src/renderer/src/pages/game-details/hero-panel.css.ts @@ -0,0 +1,32 @@ +import { style } from "@vanilla-extract/css"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const panel = style({ + width: "100%", + height: "72px", + padding: `${SPACING_UNIT * 2}px ${SPACING_UNIT * 3}px`, + display: "flex", + alignItems: "center", + justifyContent: "space-between", + transition: "all ease 0.2s", + borderBottom: `solid 1px ${vars.color.borderColor}`, + boxShadow: "0px 0px 15px 0px #000000", +}); + +export const content = style({ + display: "flex", + flexDirection: "column", + gap: `${SPACING_UNIT}px`, + fontSize: vars.size.bodyFontSize, +}); + +export const actions = style({ + display: "flex", + gap: `${SPACING_UNIT}px`, +}); + +export const downloadDetailsRow = style({ + gap: `${SPACING_UNIT * 2}px`, + display: "flex", + alignItems: "flex-end", +}); diff --git a/src/renderer/src/pages/game-details/hero-panel.tsx b/src/renderer/src/pages/game-details/hero-panel.tsx new file mode 100644 index 00000000..09a04970 --- /dev/null +++ b/src/renderer/src/pages/game-details/hero-panel.tsx @@ -0,0 +1,196 @@ +import { format } from "date-fns"; +import { useCallback, useEffect, useMemo, useState } from "react"; +import { useTranslation } from "react-i18next"; + +import { useDownload } from "@renderer/hooks"; +import type { Game, ShopDetails } from "@types"; + +import { formatDownloadProgress } from "@renderer/helpers"; +import { BinaryNotFoundModal } from "../shared-modals/binary-not-found-modal"; +import * as styles from "./hero-panel.css"; +import { useDate } from "@renderer/hooks/use-date"; +import { formatBytes } from "@renderer/utils"; +import { HeroPanelActions } from "./hero-panel-actions"; + +export interface HeroPanelProps { + game: Game | null; + gameDetails: ShopDetails | null; + color: string; + isGamePlaying: boolean; + openRepacksModal: () => void; + getGame: () => void; +} + +export function HeroPanel({ + game, + gameDetails, + color, + openRepacksModal, + getGame, + isGamePlaying, +}: HeroPanelProps) { + const { t } = useTranslation("game_details"); + + const [showBinaryNotFoundModal, setShowBinaryNotFoundModal] = useState(false); + const [lastTimePlayed, setLastTimePlayed] = useState(""); + + const { formatDistance } = useDate(); + + const { + game: gameDownloading, + isDownloading, + progress, + eta, + numPeers, + numSeeds, + isGameDeleting, + } = useDownload(); + const isGameDownloading = isDownloading && gameDownloading?.id === game?.id; + + const updateLastTimePlayed = useCallback(() => { + setLastTimePlayed( + formatDistance(game.lastTimePlayed, new Date(), { + addSuffix: true, + }) + ); + }, [game?.lastTimePlayed, formatDistance]); + + useEffect(() => { + if (game?.lastTimePlayed) { + updateLastTimePlayed(); + + const interval = setInterval(() => { + updateLastTimePlayed(); + }, 1000); + + return () => { + clearInterval(interval); + }; + } + }, [game?.lastTimePlayed, updateLastTimePlayed]); + + const finalDownloadSize = useMemo(() => { + if (!game) return "N/A"; + if (game.fileSize) return formatBytes(game.fileSize); + + if (gameDownloading?.fileSize && isGameDownloading) + return formatBytes(gameDownloading.fileSize); + + return game.repack?.fileSize ?? "N/A"; + }, [game, isGameDownloading, gameDownloading]); + + const getInfo = () => { + if (!gameDetails) return null; + + if (isGameDeleting(game?.id)) { + return

{t("deleting")}

; + } + + if (isGameDownloading) { + return ( + <> +

+ {progress} + {eta && {t("eta", { eta })}} +

+ + {gameDownloading?.status !== "downloading" ? ( + <> +

{t(gameDownloading?.status)}

+ {eta && {t("eta", { eta })}} + + ) : ( +

+ {formatBytes(gameDownloading?.bytesDownloaded)} /{" "} + {finalDownloadSize} + + {numPeers} peers / {numSeeds} seeds + +

+ )} + + ); + } + + if (game?.status === "paused") { + return ( + <> +

+ {t("paused_progress", { + progress: formatDownloadProgress(game.progress), + })} +

+

+ {formatBytes(game.bytesDownloaded)} / {finalDownloadSize} +

+ + ); + } + + if (game?.status === "seeding" || (game && !game.status)) { + if (!game.lastTimePlayed) { + return

{t("not_played_yet", { title: game.title })}

; + } + + return ( + <> +

+ {t("play_time", { + amount: formatDistance(0, game.playTimeInMilliseconds), + })} +

+ + {isGamePlaying ? ( +

{t("playing_now")}

+ ) : ( +

+ {t("last_time_played", { + period: lastTimePlayed, + })} +

+ )} + + ); + } + + const [latestRepack] = gameDetails.repacks; + + if (latestRepack) { + const lastUpdate = format(latestRepack.uploadDate!, "dd/MM/yyyy"); + const repacksCount = gameDetails.repacks.length; + + return ( + <> +

{t("updated_at", { updated_at: lastUpdate })}

+

{t("download_options", { count: repacksCount })}

+ + ); + } + + return

{t("no_downloads")}

; + }; + + return ( + <> + setShowBinaryNotFoundModal(false)} + /> + +
+
{getInfo()}
+
+ setShowBinaryNotFoundModal(true)} + isGamePlaying={isGamePlaying} + isGameDownloading={isGameDownloading} + /> +
+
+ + ); +} diff --git a/src/renderer/src/pages/game-details/how-long-to-beat-section.tsx b/src/renderer/src/pages/game-details/how-long-to-beat-section.tsx new file mode 100644 index 00000000..c46afbf6 --- /dev/null +++ b/src/renderer/src/pages/game-details/how-long-to-beat-section.tsx @@ -0,0 +1,69 @@ +import Skeleton, { SkeletonTheme } from "react-loading-skeleton"; +import type { HowLongToBeatCategory } from "@types"; +import { useTranslation } from "react-i18next"; +import { vars } from "../../theme.css"; +import * as styles from "./game-details.css"; + +const durationTranslation: Record = { + Hours: "hours", + Mins: "minutes", +}; + +export interface HowLongToBeatSectionProps { + howLongToBeatData: HowLongToBeatCategory[] | null; + isLoading: boolean; +} + +export function HowLongToBeatSection({ + howLongToBeatData, + isLoading, +}: HowLongToBeatSectionProps) { + const { t } = useTranslation("game_details"); + + const getDuration = (duration: string) => { + const [value, unit] = duration.split(" "); + return `${value} ${t(durationTranslation[unit])}`; + }; + + if (!howLongToBeatData && !isLoading) return null; + + return ( + +
+

HowLongToBeat

+
+ +
    + {howLongToBeatData + ? howLongToBeatData.map((category) => ( +
  • +

    + {category.title} +

    + +

    + {getDuration(category.duration)} +

    + + {category.accuracy !== "00" && ( + + {t("accuracy", { accuracy: category.accuracy })} + + )} +
  • + )) + : Array.from({ length: 4 }).map((_, index) => ( + + ))} +
+
+ ); +} diff --git a/src/renderer/src/pages/game-details/repacks-modal.css.ts b/src/renderer/src/pages/game-details/repacks-modal.css.ts new file mode 100644 index 00000000..4e15a63a --- /dev/null +++ b/src/renderer/src/pages/game-details/repacks-modal.css.ts @@ -0,0 +1,18 @@ +import { style } from "@vanilla-extract/css"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const repacks = style({ + display: "flex", + gap: `${SPACING_UNIT}px`, + flexDirection: "column", +}); + +export const repackButton = style({ + display: "flex", + textAlign: "left", + flexDirection: "column", + alignItems: "flex-start", + gap: `${SPACING_UNIT}px`, + color: vars.color.bodyText, + padding: `${SPACING_UNIT * 2}px`, +}); diff --git a/src/renderer/src/pages/game-details/repacks-modal.tsx b/src/renderer/src/pages/game-details/repacks-modal.tsx new file mode 100644 index 00000000..da74e53e --- /dev/null +++ b/src/renderer/src/pages/game-details/repacks-modal.tsx @@ -0,0 +1,101 @@ +import { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; + +import { Button, Modal, TextField } from "@renderer/components"; +import type { GameRepack, ShopDetails } from "@types"; + +import * as styles from "./repacks-modal.css"; + +import type { DiskSpace } from "check-disk-space"; +import { format } from "date-fns"; +import { SPACING_UNIT } from "../../theme.css"; +import { formatBytes } from "@renderer/utils"; +import { useAppSelector } from "@renderer/hooks"; + +export interface RepacksModalProps { + visible: boolean; + gameDetails: ShopDetails; + startDownload: (repackId: number) => Promise; + onClose: () => void; +} + +export function RepacksModal({ + visible, + gameDetails, + startDownload, + onClose, +}: RepacksModalProps) { + const [downloadStarting, setDownloadStarting] = useState(false); + const [diskFreeSpace, setDiskFreeSpace] = useState(null); + const [filteredRepacks, setFilteredRepacks] = useState([]); + + const repackersFriendlyNames = useAppSelector( + (state) => state.repackersFriendlyNames.value + ); + + const { t } = useTranslation("game_details"); + + useEffect(() => { + setFilteredRepacks(gameDetails.repacks); + }, [gameDetails.repacks]); + + const getDiskFreeSpace = () => { + window.electron.getDiskFreeSpace().then((result) => { + setDiskFreeSpace(result); + }); + }; + + useEffect(() => { + getDiskFreeSpace(); + }, [visible]); + + const handleRepackClick = (repack: GameRepack) => { + setDownloadStarting(true); + startDownload(repack.id).finally(() => { + setDownloadStarting(false); + }); + }; + + const handleFilter: React.ChangeEventHandler = (event) => { + setFilteredRepacks( + gameDetails.repacks.filter((repack) => + repack.title + .toLowerCase() + .includes(event.target.value.toLocaleLowerCase()) + ) + ); + }; + + return ( + +
+ +
+ +
+ {filteredRepacks.map((repack) => ( + + ))} +
+
+ ); +} diff --git a/src/renderer/src/pages/home/catalogue-home.css.ts b/src/renderer/src/pages/home/catalogue-home.css.ts new file mode 100644 index 00000000..c9f00cd7 --- /dev/null +++ b/src/renderer/src/pages/home/catalogue-home.css.ts @@ -0,0 +1,26 @@ +import { style } from "@vanilla-extract/css"; +import { recipe } from "@vanilla-extract/recipes"; +import { SPACING_UNIT } from "../../theme.css"; + +export const catalogueCategories = style({ + display: "flex", + gap: `${SPACING_UNIT}px`, +}); + +export const content = style({ + width: "100%", + display: "flex", + flexDirection: "column", + gap: `${SPACING_UNIT * 3}px`, + padding: `${SPACING_UNIT * 3}px`, + flex: "1", +}); + +export const cards = recipe({ + base: { + display: "grid", + gridTemplateColumns: "repeat(2, 1fr)", + gap: `${SPACING_UNIT * 2}px`, + transition: "all ease 0.2s", + }, +}); diff --git a/src/renderer/src/pages/home/home.css.ts b/src/renderer/src/pages/home/home.css.ts new file mode 100644 index 00000000..8caeffcf --- /dev/null +++ b/src/renderer/src/pages/home/home.css.ts @@ -0,0 +1,65 @@ +import { style } from "@vanilla-extract/css"; +import { SPACING_UNIT, vars } from "../../theme.css"; + +export const homeCategories = style({ + display: "flex", + gap: `${SPACING_UNIT}px`, +}); + +export const homeHeader = style({ + display: "flex", + gap: `${SPACING_UNIT}px`, + justifyContent: "space-between", +}); + +export const content = style({ + width: "100%", + height: "100%", + display: "flex", + flexDirection: "column", + gap: `${SPACING_UNIT * 3}px`, + padding: `${SPACING_UNIT * 3}px`, + flex: "1", + overflowY: "auto", +}); + +export const cards = style({ + display: "grid", + gridTemplateColumns: "repeat(1, 1fr)", + gap: `${SPACING_UNIT * 2}px`, + transition: "all ease 0.2s", + "@media": { + "(min-width: 768px)": { + gridTemplateColumns: "repeat(2, 1fr)", + }, + "(min-width: 1250px)": { + gridTemplateColumns: "repeat(3, 1fr)", + }, + "(min-width: 1600px)": { + gridTemplateColumns: "repeat(4, 1fr)", + }, + }, +}); + +export const cardSkeleton = style({ + width: "100%", + height: "180px", + boxShadow: "0px 0px 15px 0px #000000", + overflow: "hidden", + borderRadius: "4px", + transition: "all ease 0.2s", + zIndex: "1", + ":active": { + opacity: vars.opacity.active, + }, +}); + +export const noResults = style({ + height: "100%", + display: "flex", + alignItems: "center", + justifyContent: "center", + flexDirection: "column", + gap: "16px", + gridColumn: "1 / -1", +}); diff --git a/src/renderer/src/pages/home/home.tsx b/src/renderer/src/pages/home/home.tsx new file mode 100644 index 00000000..da561016 --- /dev/null +++ b/src/renderer/src/pages/home/home.tsx @@ -0,0 +1,143 @@ +import { useCallback, useEffect, useRef, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { useNavigate, useSearchParams } from "react-router-dom"; + +import Skeleton, { SkeletonTheme } from "react-loading-skeleton"; + +import { Button, GameCard, Hero } from "@renderer/components"; +import type { CatalogueCategory, CatalogueEntry } from "@types"; + +import starsAnimation from "@renderer/assets/lottie/stars.json"; + +import * as styles from "./home.css"; +import { vars } from "../../theme.css"; +import Lottie from "lottie-react"; + +const categories: CatalogueCategory[] = ["trending", "recently_added"]; + +export function Home() { + const { t } = useTranslation("home"); + const navigate = useNavigate(); + + const [isLoading, setIsLoading] = useState(false); + const [isLoadingRandomGame, setIsLoadingRandomGame] = useState(false); + const randomGameObjectID = useRef(null); + + const [searchParams] = useSearchParams(); + + const [catalogue, setCatalogue] = useState< + Record + >({ + trending: [], + recently_added: [], + }); + + const getCatalogue = useCallback((category: CatalogueCategory) => { + setIsLoading(true); + + window.electron + .getCatalogue(category) + .then((catalogue) => { + setCatalogue((prev) => ({ ...prev, [category]: catalogue })); + }) + .catch(() => {}) + .finally(() => { + setIsLoading(false); + }); + }, []); + + const currentCategory = searchParams.get("category") || categories[0]; + + const handleSelectCategory = (category: CatalogueCategory) => { + if (category !== currentCategory) { + getCatalogue(category); + navigate(`/?category=${category}`, { replace: true }); + } + }; + + const getRandomGame = useCallback(() => { + setIsLoadingRandomGame(true); + + window.electron + .getRandomGame() + .then((objectID) => { + randomGameObjectID.current = objectID; + }) + .finally(() => { + setIsLoadingRandomGame(false); + }); + }, []); + + const handleRandomizerClick = () => { + const searchParams = new URLSearchParams({ + fromRandomizer: "1", + }); + + navigate( + `/game/steam/${randomGameObjectID.current}?${searchParams.toString()}` + ); + }; + + useEffect(() => { + setIsLoading(true); + getCatalogue(currentCategory as CatalogueCategory); + getRandomGame(); + }, [getCatalogue, currentCategory, getRandomGame]); + + return ( + +
+

{t("featured")}

+ + + +
+
+ {categories.map((category) => ( + + ))} +
+ + +
+ +

{t(currentCategory)}

+ +
+ {isLoading + ? Array.from({ length: 12 }).map((_, index) => ( + + )) + : catalogue[currentCategory as CatalogueCategory].map((result) => ( + + navigate(`/game/${result.shop}/${result.objectID}`) + } + /> + ))} +
+
+
+ ); +} diff --git a/src/renderer/src/pages/home/search-results.tsx b/src/renderer/src/pages/home/search-results.tsx new file mode 100644 index 00000000..65118b17 --- /dev/null +++ b/src/renderer/src/pages/home/search-results.tsx @@ -0,0 +1,86 @@ +import { GameCard } from "@renderer/components"; +import Skeleton, { SkeletonTheme } from "react-loading-skeleton"; + +import type { CatalogueEntry } from "@types"; + +import type { DebouncedFunc } from "lodash"; +import { debounce } from "lodash-es"; + +import { InboxIcon } from "@primer/octicons-react"; +import { clearSearch } from "@renderer/features"; +import { useAppDispatch } from "@renderer/hooks"; +import { vars } from "../../theme.css"; +import { useEffect, useRef, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { useNavigate, useSearchParams } from "react-router-dom"; +import * as styles from "./home.css"; + +export function SearchResults() { + const dispatch = useAppDispatch(); + + const { t } = useTranslation("home"); + const [searchParams] = useSearchParams(); + + const [searchResults, setSearchResults] = useState([]); + const [isLoading, setIsLoading] = useState(false); + + const debouncedFunc = useRef void | null>>(null); + + const navigate = useNavigate(); + + const handleGameClick = (game: CatalogueEntry) => { + dispatch(clearSearch()); + navigate(`/game/${game.shop}/${game.objectID}`); + }; + + useEffect(() => { + setIsLoading(true); + if (debouncedFunc.current) debouncedFunc.current.cancel(); + + debouncedFunc.current = debounce(() => { + window.electron + .searchGames(searchParams.get("query")) + .then((results) => { + setSearchResults(results); + }) + .finally(() => { + setIsLoading(false); + }); + }, 300); + + debouncedFunc.current(); + }, [searchParams, dispatch]); + + return ( + +
+
+ {isLoading && + Array.from({ length: 12 }).map((_, index) => ( + + ))} + + {!isLoading && searchResults.length > 0 && ( + <> + {searchResults.map((game) => ( + handleGameClick(game)} + /> + ))} + + )} +
+ + {!isLoading && searchResults.length === 0 && ( +
+ + +

{t("no_results")}

+
+ )} +
+
+ ); +} diff --git a/src/renderer/src/pages/index.ts b/src/renderer/src/pages/index.ts new file mode 100644 index 00000000..fd883fbf --- /dev/null +++ b/src/renderer/src/pages/index.ts @@ -0,0 +1,6 @@ +export * from "./home/home"; +export * from "./game-details/game-details"; +export * from "./downloads/downloads"; +export * from "./home/search-results"; +export * from "./settings/settings"; +export * from "./catalogue/catalogue"; diff --git a/src/renderer/src/pages/patch-notes/patch-notes-skeleton.tsx b/src/renderer/src/pages/patch-notes/patch-notes-skeleton.tsx new file mode 100644 index 00000000..e69de29b diff --git a/src/renderer/src/pages/settings/settings.css.ts b/src/renderer/src/pages/settings/settings.css.ts new file mode 100644 index 00000000..506b9574 --- /dev/null +++ b/src/renderer/src/pages/settings/settings.css.ts @@ -0,0 +1,26 @@ +import { SPACING_UNIT, vars } from "../../theme.css"; +import { style } from "@vanilla-extract/css"; + +export const container = style({ + padding: "24px", + width: "100%", + display: "flex", +}); + +export const content = style({ + backgroundColor: vars.color.background, + width: "100%", + height: "100%", + padding: `${SPACING_UNIT * 3}px`, + border: `solid 1px ${vars.color.borderColor}`, + boxShadow: "0px 0px 15px 0px #000000", + borderRadius: "8px", + gap: `${SPACING_UNIT * 2}px`, + display: "flex", + flexDirection: "column", +}); + +export const downloadsPathField = style({ + display: "flex", + gap: `${SPACING_UNIT * 2}px`, +}); diff --git a/src/renderer/src/pages/settings/settings.tsx b/src/renderer/src/pages/settings/settings.tsx new file mode 100644 index 00000000..47bd604b --- /dev/null +++ b/src/renderer/src/pages/settings/settings.tsx @@ -0,0 +1,113 @@ +import { useEffect, useState } from "react"; +import { Button, CheckboxField, TextField } from "@renderer/components"; + +import * as styles from "./settings.css"; +import { useTranslation } from "react-i18next"; +import { UserPreferences } from "@types"; + +export function Settings() { + const [form, setForm] = useState({ + downloadsPath: "", + downloadNotificationsEnabled: false, + repackUpdatesNotificationsEnabled: false, + telemetryEnabled: false, + }); + + const { t } = useTranslation("settings"); + + useEffect(() => { + Promise.all([ + window.electron.getDefaultDownloadsPath(), + window.electron.getUserPreferences(), + ]).then(([path, userPreferences]) => { + setForm({ + downloadsPath: userPreferences?.downloadsPath || path, + downloadNotificationsEnabled: + userPreferences?.downloadNotificationsEnabled, + repackUpdatesNotificationsEnabled: + userPreferences?.repackUpdatesNotificationsEnabled, + telemetryEnabled: userPreferences?.telemetryEnabled, + }); + }); + }, []); + + const updateUserPreferences = ( + field: T, + value: UserPreferences[T] + ) => { + setForm((prev) => ({ ...prev, [field]: value })); + + window.electron.updateUserPreferences({ + [field]: value, + }); + }; + + const handleChooseDownloadsPath = async () => { + const { filePaths } = await window.electron.showOpenDialog({ + defaultPath: form.downloadsPath, + properties: ["openDirectory"], + }); + + if (filePaths && filePaths.length > 0) { + const path = filePaths[0]; + updateUserPreferences("downloadsPath", path); + } + }; + + return ( +
+
+
+ + + +
+ +

{t("notifications")}

+ + + updateUserPreferences( + "downloadNotificationsEnabled", + !form.downloadNotificationsEnabled + ) + } + /> + + + updateUserPreferences( + "repackUpdatesNotificationsEnabled", + !form.repackUpdatesNotificationsEnabled + ) + } + /> + +

{t("telemetry")}

+ + + updateUserPreferences("telemetryEnabled", !form.telemetryEnabled) + } + /> +
+
+ ); +} diff --git a/src/renderer/src/pages/shared-modals/binary-not-found-modal.tsx b/src/renderer/src/pages/shared-modals/binary-not-found-modal.tsx new file mode 100644 index 00000000..ec68b512 --- /dev/null +++ b/src/renderer/src/pages/shared-modals/binary-not-found-modal.tsx @@ -0,0 +1,25 @@ +import { Modal } from "@renderer/components"; +import { useTranslation } from "react-i18next"; + +interface BinaryNotFoundModalProps { + visible: boolean; + onClose: () => void; +} + +export const BinaryNotFoundModal = ({ + visible, + onClose, +}: BinaryNotFoundModalProps) => { + const { t } = useTranslation("binary_not_found_modal"); + + return ( + + {t("instructions")} + + ); +}; diff --git a/src/renderer/src/store.ts b/src/renderer/src/store.ts new file mode 100644 index 00000000..e2bb9baa --- /dev/null +++ b/src/renderer/src/store.ts @@ -0,0 +1,23 @@ +import { configureStore } from "@reduxjs/toolkit"; +import { + downloadSlice, + windowSlice, + librarySlice, + repackersFriendlyNamesSlice, + searchSlice, + userPreferencesSlice, +} from "@renderer/features"; + +export const store = configureStore({ + reducer: { + search: searchSlice.reducer, + repackersFriendlyNames: repackersFriendlyNamesSlice.reducer, + window: windowSlice.reducer, + library: librarySlice.reducer, + userPreferences: userPreferencesSlice.reducer, + download: downloadSlice.reducer, + }, +}); + +export type RootState = ReturnType; +export type AppDispatch = typeof store.dispatch; diff --git a/src/renderer/src/theme.css.ts b/src/renderer/src/theme.css.ts new file mode 100644 index 00000000..b11f1acb --- /dev/null +++ b/src/renderer/src/theme.css.ts @@ -0,0 +1,19 @@ +import { createTheme } from "@vanilla-extract/css"; + +export const SPACING_UNIT = 8; + +export const [themeClass, vars] = createTheme({ + color: { + background: "#1c1c1c", + darkBackground: "#151515", + bodyText: "#8e919b", + borderColor: "rgba(255, 255, 255, 0.1)", + }, + opacity: { + disabled: "0.5", + active: "0.7", + }, + size: { + bodyFontSize: "14px", + }, +}); diff --git a/src/renderer/src/utils/format-bytes.ts b/src/renderer/src/utils/format-bytes.ts new file mode 100644 index 00000000..b052b43b --- /dev/null +++ b/src/renderer/src/utils/format-bytes.ts @@ -0,0 +1,15 @@ +const FORMAT = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]; + +export const formatBytes = (bytes: number): string => { + if (!Number.isFinite(bytes) || isNaN(bytes) || bytes <= 0) { + return `0 ${FORMAT[0]}`; + } + + const byteKBase = 1024; + + const base = Math.floor(Math.log(bytes) / Math.log(byteKBase)); + + const formatedByte = bytes / byteKBase ** base; + + return `${Math.trunc(formatedByte * 10) / 10} ${FORMAT[base]}`; +}; diff --git a/src/renderer/src/utils/index.ts b/src/renderer/src/utils/index.ts new file mode 100644 index 00000000..7a828a7f --- /dev/null +++ b/src/renderer/src/utils/index.ts @@ -0,0 +1 @@ +export * from "./format-bytes"; diff --git a/src/renderer/src/vite-env.d.ts b/src/renderer/src/vite-env.d.ts new file mode 100644 index 00000000..5208138c --- /dev/null +++ b/src/renderer/src/vite-env.d.ts @@ -0,0 +1,10 @@ +/// +/// + +interface ImportMetaEnv { + readonly RENDERER_VITE_SENTRY_DSN: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 00000000..768f110b --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1,114 @@ +export type GameShop = "steam" | "epic"; +export type CatalogueCategory = "recently_added" | "trending"; + +export interface SteamGenre { + id: string; + name: string; +} + +export interface SteamScreenshot { + id: number; + path_thumbnail: string; + path_full: string; +} + +export interface SteamAppDetails { + name: string; + detailed_description: string; + about_the_game: string; + short_description: string; + publishers: string[]; + genres: SteamGenre[]; + screenshots: SteamScreenshot[]; + pc_requirements: { + minimum: string; + recommended: string; + }; + mac_requirements: { + minimum: string; + recommended: string; + }; + linux_requirmenets: { + minimum: string; + recommended: string; + }; + release_date: { + coming_soon: boolean; + date: string; + }; +} + +export type ShopDetails = SteamAppDetails & { + objectID: string; + repacks: GameRepack[]; +}; + +export interface GameRepack { + id: number; + title: string; + magnet: string; + page: number; + repacker: string; + fileSize: string | null; + uploadDate: Date | string | null; + createdAt: Date; + updatedAt: Date; +} + +export interface TorrentFile { + path: string; + length: number; +} + +/* Used by the catalogue */ +export interface CatalogueEntry { + objectID: string; + shop: GameShop; + title: string; + /* Epic Games covers cannot be guessed with objectID */ + cover: string; + repacks: GameRepack[]; +} + +/* Used by the library */ +export interface Game extends Omit { + id: number; + title: string; + iconUrl: string; + status: string; + folderName: string; + downloadPath: string | null; + repacks: GameRepack[]; + repack: GameRepack; + progress: number; + fileVerificationProgress: number; + bytesDownloaded: number; + playTimeInMilliseconds: number; + executablePath: string | null; + lastTimePlayed: Date | null; + fileSize: number; + createdAt: Date; + updatedAt: Date; +} + +export interface TorrentProgress { + downloadSpeed: number; + timeRemaining: number; + numPeers: number; + numSeeds: number; + game: Omit; +} + +export interface UserPreferences { + downloadsPath: string | null; + language: string; + downloadNotificationsEnabled: boolean; + repackUpdatesNotificationsEnabled: boolean; + telemetryEnabled: boolean; +} + +export interface HowLongToBeatCategory { + title: string; + duration: string; + accuracy: string; +} diff --git a/torrent-client/__pycache__/fifo.cpython-39.pyc b/torrent-client/__pycache__/fifo.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30225a1b672f58a23d54859f00493b0364a6699b GIT binary patch literal 1276 zcmaJ>&u`l{6ecOzlKdlU19TXA9tLPYYGAz-!7wz@s=|-t6WhA{K zhH_eu{S$hykNuZ;?P<52ciG;fmd+W55qMAUk&op2-uI}i-|r9@zrXu({@5qvBRbo| z1LrA-eh5ksK?{h1Aq|31u00?{O8f~KDI1$$40 zC;Yd5+LCS208tJM>k&Wt)tqz?0|GP4A*LM z8LoRZ-B1dJn2--%VuQ216xAE8C|nx%ZFp5=W?rdXW7t{x$cHr~J{@_$gr3V+X$g9DXsxDyV zZL`JZ*LTY+5CkpH38gSKGn)%+7IQTc-=uG8J<28U==hsGR z?1WOpUW5Aqp5ht;JK-Oswue!CA+^q4N&E|FjB2?3oUQIVz}qo#guPH^3(2|daK5O- zvOv4X`OnL&XjYm`JZ+T1Ua?+Y8dp{I1-M(~cImj9L7F&WPQ literal 0 HcmV?d00001 diff --git a/torrent-client/fifo.py b/torrent-client/fifo.py new file mode 100644 index 00000000..189ce125 --- /dev/null +++ b/torrent-client/fifo.py @@ -0,0 +1,32 @@ +import platform + +class Fifo: + socket_handle = None + + def __init__(self, path: str): + if platform.system() == "Windows": + import win32file + + self.socket_handle = win32file.CreateFile(path, win32file.GENERIC_READ | win32file.GENERIC_WRITE, + 0, None, win32file.OPEN_EXISTING, win32file.FILE_ATTRIBUTE_NORMAL, None) + else: + import socket + self.socket_handle = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + self.socket_handle.connect(path) + + def recv(self, bufSize: int): + if platform.system() == "Windows": + import win32file + + result, data = win32file.ReadFile(self.socket_handle, bufSize) + return data + else: + return self.socket_handle.recv(bufSize) + + def send_message(self, msg: str): + if platform.system() == "Windows": + import win32file + + win32file.WriteFile(self.socket_handle, bytes(msg, "utf-8")) + else: + self.socket_handle.send(bytes(msg, "utf-8")) diff --git a/torrent-client/main.py b/torrent-client/main.py new file mode 100644 index 00000000..99c51538 --- /dev/null +++ b/torrent-client/main.py @@ -0,0 +1,103 @@ +import libtorrent as lt +import sys +from fifo import Fifo +import json +import threading +import time + +torrent_port = sys.argv[1] +read_sock_path = sys.argv[2] +write_sock_path = sys.argv[3] + +session = lt.session({'listen_interfaces': '0.0.0.0:{port}'.format(port=torrent_port)}) +read_fifo = Fifo(read_sock_path) +write_fifo = Fifo(write_sock_path) + +torrent_handle = None +downloading_game_id = 0 + +def get_eta(status): + remaining_bytes = status.total_wanted - status.total_wanted_done + + if remaining_bytes >= 0 and status.download_rate > 0: + return (remaining_bytes / status.download_rate) * 1000 + else: + return 1 + +def start_download(game_id: int, magnet: str, save_path: str): + global torrent_handle + global downloading_game_id + + params = {'url': magnet, 'save_path': save_path} + torrent_handle = session.add_torrent(params) + downloading_game_id = game_id + torrent_handle.set_flags(lt.torrent_flags.auto_managed) + torrent_handle.resume() + +def pause_download(): + global downloading_game_id + + if torrent_handle: + torrent_handle.pause() + torrent_handle.unset_flags(lt.torrent_flags.auto_managed) + downloading_game_id = 0 + +def cancel_download(): + global downloading_game_id + global torrent_handle + + if torrent_handle: + torrent_handle.pause() + session.remove_torrent(torrent_handle) + torrent_handle = None + downloading_game_id = 0 + +def get_download_updates(): + while True: + if downloading_game_id == 0: + time.sleep(0.5) + continue + + status = torrent_handle.status() + info = torrent_handle.get_torrent_info() + + write_fifo.send_message(json.dumps({ + 'folderName': info.name() if info else "", + 'fileSize': info.total_size() if info else 0, + 'gameId': downloading_game_id, + 'progress': status.progress, + 'downloadSpeed': status.download_rate, + 'timeRemaining': get_eta(status), + 'numPeers': status.num_peers, + 'numSeeds': status.num_seeds, + 'status': status.state, + 'bytesDownloaded': status.progress * info.total_size() if info else status.all_time_download, + })) + + if status.progress == 1: + cancel_download() + + time.sleep(0.5) + +def listen_to_socket(): + while True: + msg = read_fifo.recv(1024 * 2) + payload = json.loads(msg.decode("utf-8")) + + if payload['action'] == "start": + start_download(payload['game_id'], payload['magnet'], payload['save_path']) + continue + + if payload['action'] == "pause": + pause_download() + continue + + if payload['action'] == "cancel": + cancel_download() + +if __name__ == "__main__": + p1 = threading.Thread(target=get_download_updates) + p2 = threading.Thread(target=listen_to_socket) + + p1.start() + p2.start() diff --git a/torrent-client/setup.py b/torrent-client/setup.py new file mode 100644 index 00000000..b26513b1 --- /dev/null +++ b/torrent-client/setup.py @@ -0,0 +1,20 @@ +from cx_Freeze import setup, Executable + +# Dependencies are automatically detected, but it might need fine tuning. +build_exe_options = { + "packages": ["libtorrent"], + "build_exe": "resources/dist/hydra-download-manager", + "include_msvcr": True +} + +setup( + name="hydra-download-manager", + version="0.1", + description="Hydra Torrent Client", + options={"build_exe": build_exe_options}, + executables=[Executable( + "torrent-client/main.py", + target_name="hydra-download-manager", + icon="images/icon.ico" + )] +) diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..31bac6e9 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,4 @@ +{ + "files": [], + "references": [{ "path": "./tsconfig.node.json" }, { "path": "./tsconfig.web.json" }] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 00000000..29fcd95c --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,19 @@ +{ + "extends": "@electron-toolkit/tsconfig/tsconfig.node.json", + "include": ["electron.vite.config.*", "src/main/**/*", "src/preload/**/*", "src/locales/index.ts"], + "compilerOptions": { + "module": "ESNext", + "composite": true, + "types": ["electron-vite/node"], + "baseUrl": ".", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false, + "paths": { + "@main/*": ["src/main/*"], + "@renderer/*": ["src/renderer/*"], + "@types": ["src/types/index.ts"], + "@locales": ["src/locales/index.ts"] + } + } +} diff --git a/tsconfig.web.json b/tsconfig.web.json new file mode 100644 index 00000000..a888cf67 --- /dev/null +++ b/tsconfig.web.json @@ -0,0 +1,22 @@ +{ + "extends": "@electron-toolkit/tsconfig/tsconfig.web.json", + "include": [ + "src/renderer/src/env.d.ts", + "src/renderer/src/**/*", + "src/renderer/src/**/*.tsx", + "src/preload/*.d.ts", + "src/locales/index.ts" + ], + "compilerOptions": { + "composite": true, + "jsx": "react-jsx", + "baseUrl": ".", + "paths": { + "@renderer/*": [ + "src/renderer/src/*" + ], + "@types": ["src/types/index.ts"], + "@locales": ["src/locales/index.ts"] + } + } +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..09b4eabf --- /dev/null +++ b/yarn.lock @@ -0,0 +1,5891 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"7zip-bin@~5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.2.0.tgz#7a03314684dd6572b7dfa89e68ce31d60286854d" + integrity sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A== + +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== + dependencies: + "@babel/highlight" "^7.24.2" + picocolors "^1.0.0" + +"@babel/compat-data@^7.23.5": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" + integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== + +"@babel/core@^7.21.3", "@babel/core@^7.23.5", "@babel/core@^7.23.9": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717" + integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.4" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.24.4" + "@babel/parser" "^7.24.4" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.1" + "@babel/types" "^7.24.0" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.24.1", "@babel/generator@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498" + integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw== + dependencies: + "@babel/types" "^7.24.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.22.15": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" + integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== + dependencies: + "@babel/types" "^7.24.0" + +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-plugin-utils@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" + integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.23.4": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" + integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + +"@babel/helpers@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6" + integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw== + dependencies: + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.1" + "@babel/types" "^7.24.0" + +"@babel/highlight@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" + integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" + integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== + +"@babel/plugin-syntax-typescript@^7.23.3": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" + integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz#2bf263617060c9cc45bcdbf492b8cc805082bf27" + integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-react-jsx-self@^7.23.3": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz#a21d866d8167e752c6a7c4555dba8afcdfce6268" + integrity sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-transform-react-jsx-source@^7.23.3": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz#a2dedb12b09532846721b5df99e52ef8dc3351d0" + integrity sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/runtime@^7.12.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.9": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" + integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.22.15", "@babel/template@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" + +"@babel/traverse@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" + integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== + dependencies: + "@babel/code-frame" "^7.24.1" + "@babel/generator" "^7.24.1" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.24.1" + "@babel/types" "^7.24.0" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" + integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + +"@colors/colors@1.6.0", "@colors/colors@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" + integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== + +"@dabh/diagnostics@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" + integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== + dependencies: + colorspace "1.1.x" + enabled "2.0.x" + kuler "^2.0.0" + +"@develar/schema-utils@~2.6.5": + version "2.6.5" + resolved "https://registry.yarnpkg.com/@develar/schema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6" + integrity sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig== + dependencies: + ajv "^6.12.0" + ajv-keywords "^3.4.1" + +"@electron-toolkit/eslint-config-prettier@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@electron-toolkit/eslint-config-prettier/-/eslint-config-prettier-2.0.0.tgz#a258a28fc0a09b7f910fd71e0aa18ea6ee440735" + integrity sha512-L+uG1FvJcAZkPZpSi6B1pmdpyJFyOxWDTjr1Vs47vSryxv/EX1Ch6o4HVsachlDq3fMEkDgojuP2F3ZvVZMoLw== + dependencies: + eslint-config-prettier "^9.1.0" + eslint-plugin-prettier "^5.0.1" + +"@electron-toolkit/eslint-config-ts@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@electron-toolkit/eslint-config-ts/-/eslint-config-ts-1.0.1.tgz#ee5d5e754871568fe2698b0f18d063ab04ef6092" + integrity sha512-6RkoGE/W/WVlDozy/u6/lo5THNP5CCAPxdKpdQuYaopUfObs3o+JyxdlSb45imh+nL8nv875970EoyplntXaug== + dependencies: + "@typescript-eslint/eslint-plugin" "^6.14.0" + "@typescript-eslint/parser" "^6.14.0" + +"@electron-toolkit/preload@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@electron-toolkit/preload/-/preload-3.0.1.tgz#8bae193fd851f3d38c56eec13a5dd602744e8064" + integrity sha512-EzoQmpK8jqqU8YnM5jRe0GJjGVJPke2KtANqz8QtN2JPT96ViOvProBdK5C6riCm0j1T8jjAGVQCZLQy9OVoIA== + +"@electron-toolkit/tsconfig@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@electron-toolkit/tsconfig/-/tsconfig-1.0.1.tgz#78048d3178dd7a6a573590e23240f0764b0c14af" + integrity sha512-M0Mol3odspvtCuheyujLNAW7bXq7KFNYVMRtpjFa4ZfES4MuklXBC7Nli/omvc+PRKlrklgAGx3l4VakjNo8jg== + +"@electron-toolkit/utils@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@electron-toolkit/utils/-/utils-3.0.0.tgz#74626893d93025eacba086d497b615cf927d42c4" + integrity sha512-GaXHDhiT7KCvMJjXdp/QqpYinq69T/Pdl49Z1XLf8mKGf63dnsODMWyrmIjEQ0z/vG7dO8qF3fvmI6Eb2lUNZA== + +"@electron/asar@^3.2.1": + version "3.2.9" + resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.9.tgz#7b3a1fd677b485629f334dd80ced8c85353ba7e7" + integrity sha512-Vu2P3X2gcZ3MY9W7yH72X9+AMXwUQZEJBrsPIbX0JsdllLtoh62/Q8Wg370/DawIEVKOyfD6KtTLo645ezqxUA== + dependencies: + commander "^5.0.0" + glob "^7.1.6" + minimatch "^3.0.4" + +"@electron/get@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.3.tgz#fba552683d387aebd9f3fcadbcafc8e12ee4f960" + integrity sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ== + dependencies: + debug "^4.1.1" + env-paths "^2.2.0" + fs-extra "^8.1.0" + got "^11.8.5" + progress "^2.0.3" + semver "^6.2.0" + sumchecker "^3.0.1" + optionalDependencies: + global-agent "^3.0.0" + +"@electron/notarize@2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@electron/notarize/-/notarize-2.2.1.tgz#d0aa6bc43cba830c41bfd840b85dbe0e273f59fe" + integrity sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg== + dependencies: + debug "^4.1.1" + fs-extra "^9.0.1" + promise-retry "^2.0.1" + +"@electron/osx-sign@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@electron/osx-sign/-/osx-sign-1.0.5.tgz#0af7149f2fce44d1a8215660fd25a9fb610454d8" + integrity sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww== + dependencies: + compare-version "^0.1.2" + debug "^4.3.4" + fs-extra "^10.0.0" + isbinaryfile "^4.0.8" + minimist "^1.2.6" + plist "^3.0.5" + +"@electron/universal@1.5.1": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.5.1.tgz#f338bc5bcefef88573cf0ab1d5920fac10d06ee5" + integrity sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw== + dependencies: + "@electron/asar" "^3.2.1" + "@malept/cross-spawn-promise" "^1.1.0" + debug "^4.3.1" + dir-compare "^3.0.0" + fs-extra "^9.0.1" + minimatch "^3.0.4" + plist "^3.0.4" + +"@emotion/hash@^0.9.0": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" + integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== + +"@esbuild/aix-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" + integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== + +"@esbuild/aix-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" + integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== + +"@esbuild/android-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" + integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== + +"@esbuild/android-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" + integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== + +"@esbuild/android-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" + integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== + +"@esbuild/android-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" + integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== + +"@esbuild/android-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" + integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== + +"@esbuild/android-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" + integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== + +"@esbuild/darwin-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== + +"@esbuild/darwin-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" + integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== + +"@esbuild/darwin-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" + integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== + +"@esbuild/darwin-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" + integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== + +"@esbuild/freebsd-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" + integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== + +"@esbuild/freebsd-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" + integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== + +"@esbuild/freebsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" + integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== + +"@esbuild/freebsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" + integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== + +"@esbuild/linux-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" + integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== + +"@esbuild/linux-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" + integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== + +"@esbuild/linux-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" + integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== + +"@esbuild/linux-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" + integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== + +"@esbuild/linux-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" + integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== + +"@esbuild/linux-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" + integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== + +"@esbuild/linux-loong64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" + integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== + +"@esbuild/linux-loong64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" + integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== + +"@esbuild/linux-mips64el@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" + integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== + +"@esbuild/linux-mips64el@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" + integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== + +"@esbuild/linux-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" + integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== + +"@esbuild/linux-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" + integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== + +"@esbuild/linux-riscv64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" + integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== + +"@esbuild/linux-riscv64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" + integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== + +"@esbuild/linux-s390x@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" + integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== + +"@esbuild/linux-s390x@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" + integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== + +"@esbuild/linux-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== + +"@esbuild/linux-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" + integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== + +"@esbuild/netbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" + integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== + +"@esbuild/netbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" + integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== + +"@esbuild/openbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" + integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== + +"@esbuild/openbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" + integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== + +"@esbuild/sunos-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" + integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== + +"@esbuild/sunos-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" + integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== + +"@esbuild/win32-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" + integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== + +"@esbuild/win32-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" + integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== + +"@esbuild/win32-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" + integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== + +"@esbuild/win32-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" + integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== + +"@esbuild/win32-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" + integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== + +"@esbuild/win32-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" + integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== + +"@fontsource/fira-mono@^5.0.13": + version "5.0.13" + resolved "https://registry.yarnpkg.com/@fontsource/fira-mono/-/fira-mono-5.0.13.tgz#2aa677938f0759b8d368bddd3c7ec299ee0c17af" + integrity sha512-fZDjR2BdAqmauEbTjcIT62zYzbOgDa5+IQH34D2k8Pxmy1T815mAqQkZciWZVQ9dc/BgdTtTUV9HJ2ulBNwchg== + +"@fontsource/fira-sans@^5.0.20": + version "5.0.20" + resolved "https://registry.yarnpkg.com/@fontsource/fira-sans/-/fira-sans-5.0.20.tgz#92d22b1289f932db1bca7bd20902544fb9706252" + integrity sha512-inmUjoKPrgnO4uUaZTAgP0b6YdhDfA52axHXvdTwgLvwd2kn3ZgK52UZoxD0VnrvTOjLA/iE4oC0tNtz4nyb5g== + +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== + dependencies: + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@malept/cross-spawn-promise@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d" + integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ== + dependencies: + cross-spawn "^7.0.1" + +"@malept/flatpak-bundler@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz#e8a32c30a95d20c2b1bb635cc580981a06389858" + integrity sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q== + dependencies: + debug "^4.1.1" + fs-extra "^9.0.0" + lodash "^4.17.15" + tmp-promise "^3.0.2" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@pkgr/core@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" + integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== + +"@primer/octicons-react@^19.9.0": + version "19.9.0" + resolved "https://registry.yarnpkg.com/@primer/octicons-react/-/octicons-react-19.9.0.tgz#eb90a9b47da924c0ab33055d050e6ea21104d219" + integrity sha512-Uk4XrHyfylyfzZN9d8VFjF8FpfYHEyT4sabw+9+oP+GWAJHhPvNPTz6gXvUzJZmoblAvgcTrDslIPjz8zMh76w== + +"@reduxjs/toolkit@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.2.3.tgz#5ce71cbf162f98c5dafb49bd3f1e11c5486ab9c4" + integrity sha512-76dll9EnJXg4EVcI5YNxZA/9hSAmZsFqzMmNRHvIlzw2WS/twfcVX3ysYrWGJMClwEmChQFC4yRq74tn6fdzRA== + dependencies: + immer "^10.0.3" + redux "^5.0.1" + redux-thunk "^3.1.0" + reselect "^5.0.1" + +"@remix-run/router@1.15.3": + version "1.15.3" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.15.3.tgz#d2509048d69dbb72d5389a14945339f1430b2d3c" + integrity sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w== + +"@rollup/pluginutils@^5.0.5": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" + integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + +"@rollup/rollup-android-arm-eabi@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.16.0.tgz#51e697b1fe08d3bc39d9f0341f22b1b6975a44df" + integrity sha512-4fDVBAfWYlw2CtYgHEWarAYSozTx5OYLsSM/cdGW7H51FwI10DaGnjKgdqWyWXY/VjugelzriCiKf1UdM20Bxg== + +"@rollup/rollup-android-arm64@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.16.0.tgz#e81fa0fd632ae1c9e6837565b929c95e7bfa0c5a" + integrity sha512-JltUBgsKgN108NO4/hj0B/dJYNrqqmdRCtUet5tFDi/w+0tvQP0FToyWBV4HKBcSX4cvFChrCyt5Rh4FX6M6QQ== + +"@rollup/rollup-darwin-arm64@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.16.0.tgz#0b4ee897790b299243603e5c3adce2932038be08" + integrity sha512-UwF7tkWf0roggMRv7Vrkof7VgX9tEZIc4vbaQl0/HNX3loWlcum+0ODp1Qsd8s7XvQGT+Zboxx1qxav3vq8YDw== + +"@rollup/rollup-darwin-x64@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.16.0.tgz#7f9bb7ca0f792bcf35d1bf10f0f4a848f9a2d527" + integrity sha512-RIY42wn6+Yb0qD29T7Dvm9/AhxrkGDf7X5dgI6rUFXR19+vCLh3u45yLcKOayu2ZQEba9rf/+BX3EggVwckiIw== + +"@rollup/rollup-linux-arm-gnueabihf@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.16.0.tgz#dae816a34b2ea0a29a8e2aacf939199b5ed8d565" + integrity sha512-r2TGCIKzqk8VwjOvW7sveledh6aPao131ejUfZNIyFlWBCruF4HOu51KtLArDa7LL6qKd0vkgxGX3/2NmYpWig== + +"@rollup/rollup-linux-arm-musleabihf@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.16.0.tgz#9adfa63cc89bf6fa91da38c8af5331c1decd7f1d" + integrity sha512-/QwaDp0RXQTtm25wQFSl02zEm9oveRXr9qAHbdxWCm9YG9dR8esqpyqzS/3GgHDm7jHktPNz9gTENfoUKRCcXQ== + +"@rollup/rollup-linux-arm64-gnu@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.16.0.tgz#49f4369d436a73fe0b4d4bc4d59cd89c79ee0b4a" + integrity sha512-iypHsz7YEfoyNL0iHbQ7B7pY6hpymvvMgFXXaMd5+WCtvJ9zqWPZKFmo78UeWzWNmTP9JtPiNIQt6efRxx/MNA== + +"@rollup/rollup-linux-arm64-musl@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.16.0.tgz#fd00d2b08a045a0321776921353cee3cc6383cc8" + integrity sha512-7UpYcO0uVeomnoL5MpQhrS0FT7xZUJrEXtKVLmps5bRA7x5AiA1PDuPnMbxcOBWjIM2HHIG1t3ndnRTVMIbk5A== + +"@rollup/rollup-linux-powerpc64le-gnu@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.16.0.tgz#d7a0b85cfca2aaf3adbf752569183b21233ac1de" + integrity sha512-FSuFy4/hOQy0lH135ifnElP/6dKoHcZGHovsaRY0jrfNRR2yjMnVYaqNHKGKy0b/1I8DkD/JtclgJfq7SPti1w== + +"@rollup/rollup-linux-riscv64-gnu@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.16.0.tgz#a419fb6e09baef0119dc7a59df8fda7208a2d672" + integrity sha512-qxAB8MiHuDI8jU0D+WI9Gym3fvUJHA/AjKRXxbEH921SB3AeKQStq1FKFA59dAoqqCArjJ1voXM/gMvgEc1q4Q== + +"@rollup/rollup-linux-s390x-gnu@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.16.0.tgz#693bac438527beefe3b061da847e3bfd6f6b571d" + integrity sha512-j/9yBgWFlNFBfG/S1M2zkBNLeLkNVG59T5c4tlmlrxU+XITWJ3aMVWdpcZ/+mu7auGZftAXueAgAE9mb4lAlag== + +"@rollup/rollup-linux-x64-gnu@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.16.0.tgz#41b43abe9073cfa4a02130e4d050fa3b10f82199" + integrity sha512-SjsBA1a9wrEleNneGEsR40HdxKdwCatyHC547o/XINqwPW4cqTYiNy/lL1WTJYWU/KgWIb8HH4SgmFStbWoBzw== + +"@rollup/rollup-linux-x64-musl@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.16.0.tgz#524046b68de9ccc938245628bb75ef6f07d515c8" + integrity sha512-YKCs7ghJZ5po6/qgfONiXyFKOKcTK4Kerzk/Kc89QK0JT94Qg4NurL+3Y3rZh5am2tu1OlvHPpBHQNBE8cFgJQ== + +"@rollup/rollup-win32-arm64-msvc@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.16.0.tgz#e9117384c4e340370777c5b5974c5cebf84c8807" + integrity sha512-+wtkF+z2nw0ZwwHji01wOW0loxFl24lBNxPtVAXtnPPDL9Ew0EhiCMOegXe/EAH3Zlr8Iw9tyPJXB3DltQLEyw== + +"@rollup/rollup-win32-ia32-msvc@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.16.0.tgz#1d9c9477138236a7588ee601513508854f674c69" + integrity sha512-7qLyKTL7Lf2g0B8bduETVAEI3WVUVwBRVcECojVevPNVAmi19IW1P2X+uMSwhmWNy36Q/qEvxXsfts1I8wpawg== + +"@rollup/rollup-win32-x64-msvc@4.16.0": + version "4.16.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.16.0.tgz#0db109f8e1a604da9c9a86deebd84d8d040d6671" + integrity sha512-tkfxXt+7c3Ecgn7ln9NJPdBM+QKwQdmFFpgAP+FYhAuRS5y3tY8xeza82gFjbPpytkHmaQnVdMtuzbToCz2tuw== + +"@sentry-internal/feedback@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.110.0.tgz#7103a08cd6bfb43583087d7476a5f24c5857cc22" + integrity sha512-hrfWa3WkSOiBO5Srcr1j4kuGOlbsQic+REpLOofllVIs56DOo9+Aj9svxT+dcvZERv/nlFSV/E0BfGy9g08IEg== + dependencies: + "@sentry/core" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry-internal/feedback@7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.111.0.tgz#c715e7e6a1877b60cd1f4dff85969660e0deff3f" + integrity sha512-xaKgPPDEirOan7c9HwzYA1KK87kRp/qfIx9ZKLOEtxwy6nqoMuSByGqSwm1Oqfcjpbd7y6/y+7Bw+69ZKNVLDQ== + dependencies: + "@sentry/core" "7.111.0" + "@sentry/types" "7.111.0" + "@sentry/utils" "7.111.0" + +"@sentry-internal/replay-canvas@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.110.0.tgz#af21b56157f44c44a2eedf4326ef37f4ea440fa8" + integrity sha512-SNa+AfyfX+vc6Xw0pIfDsa5Qnc9cpexU6M2D19gadtVhmep7qoFBuhBVZrSv6BtdCxvrb5EyYsHYGfjQdIDcvg== + dependencies: + "@sentry/core" "7.110.0" + "@sentry/replay" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry-internal/replay-canvas@7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.111.0.tgz#aa3cba0477f312cbf40eff4eabeaeda6221a55b6" + integrity sha512-3KPBIpiegTYmuVw9gA2aKuliAQONS3Ny1kJc9x5kz6XQGuLFxqlh6KzoCVaKfQJeq2WJqRNeR4KFFuNGuB3H8w== + dependencies: + "@sentry/core" "7.111.0" + "@sentry/replay" "7.111.0" + "@sentry/types" "7.111.0" + "@sentry/utils" "7.111.0" + +"@sentry-internal/tracing@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.110.0.tgz#00f2086b0efb8dd5a67831074e52b176aa542d32" + integrity sha512-IIHHa9e/mE7uOMJfNELI8adyoELxOy6u6TNCn5t6fphmq84w8FTc9adXkG/FY2AQpglkIvlILojfMROFB2aaAQ== + dependencies: + "@sentry/core" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry-internal/tracing@7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.111.0.tgz#b352df9f38009c5d306308a829a1dd9a57f084fd" + integrity sha512-CgXly8rsdu4loWVKi2RqpInH3C2cVBuaYsx4ZP5IJpzSinsUAMyyr3Pc0PZzCyoVpBBXGBGj/4HhFsY3q6Z0Vg== + dependencies: + "@sentry/core" "7.111.0" + "@sentry/types" "7.111.0" + "@sentry/utils" "7.111.0" + +"@sentry/browser@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.110.0.tgz#40900d76a8f423a7163a594ec9267a2e0ebd8a5b" + integrity sha512-gIxedVm6ZgkjQfgCDgLWJgAsolq6OxV8hQ2j1+RaDL2RngvelFo/vlX5f2sD6EbjVp77Cri8u5GkMJF+v4p84g== + dependencies: + "@sentry-internal/feedback" "7.110.0" + "@sentry-internal/replay-canvas" "7.110.0" + "@sentry-internal/tracing" "7.110.0" + "@sentry/core" "7.110.0" + "@sentry/replay" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry/browser@7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.111.0.tgz#29da73e7192eb5643d101c47922d7374e4cc88ed" + integrity sha512-x7S9XoJh+TbMnur4eBhPpCVo+p7udABBV2gQk+Iw6LP9e8EFKmGmNyl76vSsT6GeFJ7mwxDEKfuwbVoLBjIvHw== + dependencies: + "@sentry-internal/feedback" "7.111.0" + "@sentry-internal/replay-canvas" "7.111.0" + "@sentry-internal/tracing" "7.111.0" + "@sentry/core" "7.111.0" + "@sentry/replay" "7.111.0" + "@sentry/types" "7.111.0" + "@sentry/utils" "7.111.0" + +"@sentry/core@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.110.0.tgz#2945d3ac0ef116ed313fbfb9da4f483b66fe5bca" + integrity sha512-g4suCQO94mZsKVaAbyD1zLFC5YSuBQCIPHXx9fdgtfoPib7BWjWWePkllkrvsKAv4u8Oq05RfnKOhOMRHpOKqg== + dependencies: + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry/core@7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.111.0.tgz#54c9037a3b79b3623377dce1887b69b40670e201" + integrity sha512-/ljeMjZu8CSrLGrseBi/7S2zRIFsqMcvfyG6Nwgfc07J9nbHt8/MqouE1bXZfiaILqDBpK7BK9MLAAph4mkAWg== + dependencies: + "@sentry/types" "7.111.0" + "@sentry/utils" "7.111.0" + +"@sentry/electron@^4.23.0": + version "4.23.0" + resolved "https://registry.yarnpkg.com/@sentry/electron/-/electron-4.23.0.tgz#dfb91734f64e78385b8dd005c4d312b64b16f35a" + integrity sha512-D6OkDJqoxHYrVgQbe6qwfjF0ZUtxNdO7q1E+fYK1vcoan3kWE2SbZJk3UqmqiTLHtR188bYB9z0TwsLM2/CRww== + dependencies: + "@sentry/browser" "7.110.0" + "@sentry/core" "7.110.0" + "@sentry/node" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + deepmerge "4.3.0" + tslib "^2.5.0" + +"@sentry/node@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.110.0.tgz#c75a7568e641ddb48d1636e62aaa37e9589e8806" + integrity sha512-YPfweCSzo/omnx5q1xOEZfI8Em3jnPqj7OM4ObXmoSKEK+kM1oUF3BTRzw5BJOaOCSTBFY1RAsGyfVIyrwxWnA== + dependencies: + "@sentry-internal/tracing" "7.110.0" + "@sentry/core" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry/react@^7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.111.0.tgz#ae9ef6d65f176ed5d5442723c2d278d0d0bd6120" + integrity sha512-8HVl4D5TsNLaIgXsOa1H+/aOcUHvRBsH+25OzxGpyS5Cu2gSlAQxfXKYxZ0axYoMc7TNkMNdmEhYN+CGV+NUZg== + dependencies: + "@sentry/browser" "7.111.0" + "@sentry/core" "7.111.0" + "@sentry/types" "7.111.0" + "@sentry/utils" "7.111.0" + hoist-non-react-statics "^3.3.2" + +"@sentry/replay@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.110.0.tgz#e185c88cec573724b46b79ada7ef5a7098acd1b6" + integrity sha512-EEpGPf3iBJjWejvoxKLVMnLtLNwPTUxHJV1oxUkbcSi3B/tG5hW7LArYDjAcvkfa4VmA8JLCwj2vYU5MQ8tj6g== + dependencies: + "@sentry-internal/tracing" "7.110.0" + "@sentry/core" "7.110.0" + "@sentry/types" "7.110.0" + "@sentry/utils" "7.110.0" + +"@sentry/replay@7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.111.0.tgz#6d21bddf2ec245db6eb2c471e81efd94364107ae" + integrity sha512-cSbI4A4hrO0sZ0ynvLQauPg8YyaDOQkhGkyvbws8W9WgfxR8X827bY9S0f1TPfgaFiVcKb0iRaAwyXHg3pyzOg== + dependencies: + "@sentry-internal/tracing" "7.111.0" + "@sentry/core" "7.111.0" + "@sentry/types" "7.111.0" + "@sentry/utils" "7.111.0" + +"@sentry/types@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.110.0.tgz#c3f252b008cab905097fc71e174191f20bdaf4f3" + integrity sha512-DqYBLyE8thC5P5MuPn+sj8tL60nCd/f5cerFFPcudn5nJ4Zs1eI6lKlwwyHYTEu5c4KFjCB0qql6kXfwAHmTyA== + +"@sentry/types@7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.111.0.tgz#9c869c3c51d606041916765ba58f29de915707ac" + integrity sha512-Oti4pgQ55+FBHKKcHGu51ZUxO1u52G5iVNK4mbtAN+5ArSCy/2s1H8IDJiOMswn3acfUnCR0oB/QsbEgAPZ26g== + +"@sentry/utils@7.110.0": + version "7.110.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.110.0.tgz#68ef59359d608a1a6a7205b780196a042ad73ab2" + integrity sha512-VBsdLLN+5tf73fhf/Cm7JIsUJ6y9DkJj8h4I6Mxx0rszrvOyH6S5px40K+V4jdLBzMEvVinC7q2Cbf1YM18BSw== + dependencies: + "@sentry/types" "7.110.0" + +"@sentry/utils@7.111.0": + version "7.111.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.111.0.tgz#e006cc1e751b30ff5cf914c34eb143102e2e8c2d" + integrity sha512-CB5rz1EgCSwj3xoXogsCZ5pQtfERrURc/ItcCuoaijUhkD0iMq5MCNWMHW3mBsBrqx/Oba+XGvDu0t/5+SWwBg== + dependencies: + "@sentry/types" "7.111.0" + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@sqltools/formatter@^1.2.5": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.5.tgz#3abc203c79b8c3e90fd6c156a0c62d5403520e12" + integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw== + +"@svgr/babel-plugin-add-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" + integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== + +"@svgr/babel-plugin-remove-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" + integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== + +"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" + integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27" + integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== + +"@svgr/babel-plugin-svg-dynamic-title@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0" + integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== + +"@svgr/babel-plugin-svg-em-dimensions@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501" + integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== + +"@svgr/babel-plugin-transform-react-native-svg@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754" + integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== + +"@svgr/babel-plugin-transform-svg-component@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e" + integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== + +"@svgr/babel-preset@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece" + integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0" + "@svgr/babel-plugin-svg-dynamic-title" "8.0.0" + "@svgr/babel-plugin-svg-em-dimensions" "8.0.0" + "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" + "@svgr/babel-plugin-transform-svg-component" "8.0.0" + +"@svgr/core@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88" + integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== + dependencies: + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" + camelcase "^6.2.0" + cosmiconfig "^8.1.3" + snake-case "^3.0.4" + +"@svgr/hast-util-to-babel-ast@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4" + integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== + dependencies: + "@babel/types" "^7.21.3" + entities "^4.4.0" + +"@svgr/plugin-jsx@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928" + integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== + dependencies: + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" + "@svgr/hast-util-to-babel-ast" "8.0.0" + svg-parser "^2.0.4" + +"@swc/core-darwin-arm64@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.16.tgz#2cd45d709ce76d448d96bf8d0006849541436611" + integrity sha512-UOCcH1GvjRnnM/LWT6VCGpIk0OhHRq6v1U6QXuPt5wVsgXnXQwnf5k3sG5Cm56hQHDvhRPY6HCsHi/p0oek8oQ== + +"@swc/core-darwin-x64@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.4.16.tgz#a5bc7d8b1dd850adb0bb95c6b5c742b92201fd01" + integrity sha512-t3bgqFoYLWvyVtVL6KkFNCINEoOrIlyggT/kJRgi1y0aXSr0oVgcrQ4ezJpdeahZZ4N+Q6vT3ffM30yIunELNA== + +"@swc/core-linux-arm-gnueabihf@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.16.tgz#961744908ee5cbb79bc009dcf58cc8b831111f38" + integrity sha512-DvHuwvEF86YvSd0lwnzVcjOTZ0jcxewIbsN0vc/0fqm9qBdMMjr9ox6VCam1n3yYeRtj4VFgrjeNFksqbUejdQ== + +"@swc/core-linux-arm64-gnu@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.16.tgz#43713be3f26757d82d2745dc25f8b63400e0a3d0" + integrity sha512-9Uu5YlPbyCvbidjKtYEsPpyZlu16roOZ5c2tP1vHfnU9bgf5Tz5q5VovSduNxPHx+ed2iC1b1URODHvDzbbDuQ== + +"@swc/core-linux-arm64-musl@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.16.tgz#394a7d030f3a61902bd3947bb9d70d26d42f3c81" + integrity sha512-/YZq/qB1CHpeoL0eMzyqK5/tYZn/rzKoCYDviFU4uduSUIJsDJQuQA/skdqUzqbheOXKAd4mnJ1hT04RbJ8FPQ== + +"@swc/core-linux-x64-gnu@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.16.tgz#71eb108b784f9d551ee8a35ebcdaed972f567981" + integrity sha512-UUjaW5VTngZYDcA8yQlrFmqs1tLi1TxbKlnaJwoNhel9zRQ0yG1YEVGrzTvv4YApSuIiDK18t+Ip927bwucuVQ== + +"@swc/core-linux-x64-musl@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.16.tgz#10dbaedb4e3dfc7268e3a9a66ad3431471ef035b" + integrity sha512-aFhxPifevDTwEDKPi4eRYWzC0p/WYJeiFkkpNU5Uc7a7M5iMWPAbPFUbHesdlb9Jfqs5c07oyz86u+/HySBNPQ== + +"@swc/core-win32-arm64-msvc@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.16.tgz#80247adff6c245ff32b44d773c1a148858cd655f" + integrity sha512-bTD43MbhIHL2s5QgCwyleaGwl96Gk/scF2TaVKdUe4QlJCDV/YK9h5oIBAp63ckHtE8GHlH4c8dZNBiAXn4Org== + +"@swc/core-win32-ia32-msvc@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.16.tgz#e540afc3ccf3224267b4ddfb408f9d9737984686" + integrity sha512-/lmZeAN/qV5XbK2SEvi8e2RkIg8FQNYiSA8y2/Zb4gTUMKVO5JMLH0BSWMiIKMstKDPDSxMWgwJaQHF8UMyPmQ== + +"@swc/core-win32-x64-msvc@1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.16.tgz#f880939fca32c181adfe7e3abd2b6b7857bd3489" + integrity sha512-BPAfFfODWXtUu6SwaTTftDHvcbDyWBSI/oanUeRbQR5vVWkXoQ3cxLTsDluc3H74IqXS5z1Uyoe0vNo2hB1opA== + +"@swc/core@^1.4.16": + version "1.4.16" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.4.16.tgz#d175bae2acfecd53bcbd4293f1fba5ec316634a0" + integrity sha512-Xaf+UBvW6JNuV131uvSNyMXHn+bh6LyKN4tbv7tOUFQpXyz/t9YWRE04emtlUW9Y0qrm/GKFCbY8n3z6BpZbTA== + dependencies: + "@swc/counter" "^0.1.2" + "@swc/types" "^0.1.5" + optionalDependencies: + "@swc/core-darwin-arm64" "1.4.16" + "@swc/core-darwin-x64" "1.4.16" + "@swc/core-linux-arm-gnueabihf" "1.4.16" + "@swc/core-linux-arm64-gnu" "1.4.16" + "@swc/core-linux-arm64-musl" "1.4.16" + "@swc/core-linux-x64-gnu" "1.4.16" + "@swc/core-linux-x64-musl" "1.4.16" + "@swc/core-win32-arm64-msvc" "1.4.16" + "@swc/core-win32-ia32-msvc" "1.4.16" + "@swc/core-win32-x64-msvc" "1.4.16" + +"@swc/counter@^0.1.2", "@swc/counter@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== + +"@swc/types@^0.1.5": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.6.tgz#2f13f748995b247d146de2784d3eb7195410faba" + integrity sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg== + dependencies: + "@swc/counter" "^0.1.3" + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@thaunknown/thirty-two@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@thaunknown/thirty-two/-/thirty-two-1.0.3.tgz#64883031c4444c0fd75436219189ab5816b5b826" + integrity sha512-bD6PvWbaf53JC04O7WnGDjqZBDgja/KT2Jd/6I2vJBIy+DLmQfQJZZ/G+16nAkVq1yGTIkO4rfc4RlH0DmEEqA== + dependencies: + uint8-util "^2.1.9" + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@types/babel__core@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== + dependencies: + "@babel/types" "^7.20.7" + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/debug@^4.1.6": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/estree@1.0.5", "@types/estree@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/fs-extra@9.0.13", "@types/fs-extra@^9.0.11": + version "9.0.13" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" + integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== + dependencies: + "@types/node" "*" + +"@types/http-cache-semantics@*": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + +"@types/json-schema@^7.0.12": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/lodash-es@^4.17.12": + version "4.17.12" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b" + integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.0.tgz#d774355e41f372d5350a4d0714abb48194a489c3" + integrity sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA== + +"@types/ms@*": + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + +"@types/node@*": + version "20.12.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" + integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== + dependencies: + undici-types "~5.26.4" + +"@types/node@^18.11.18", "@types/node@^18.19.9": + version "18.19.31" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.31.tgz#b7d4a00f7cb826b60a543cebdbda5d189aaecdcd" + integrity sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA== + dependencies: + undici-types "~5.26.4" + +"@types/plist@^3.0.1": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/plist/-/plist-3.0.5.tgz#9a0c49c0f9886c8c8696a7904dd703f6284036e0" + integrity sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA== + dependencies: + "@types/node" "*" + xmlbuilder ">=11.0.1" + +"@types/prop-types@*": + version "15.7.12" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== + +"@types/react-dom@^18.2.18": + version "18.2.25" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.25.tgz#2946a30081f53e7c8d585eb138277245caedc521" + integrity sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^18.2.48": + version "18.2.79" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.79.tgz#c40efb4f255711f554d47b449f796d1c7756d865" + integrity sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@types/responselike@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== + dependencies: + "@types/node" "*" + +"@types/semver@^7.5.0": + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + +"@types/triple-beam@^1.3.2": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" + integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== + +"@types/use-sync-external-store@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" + integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== + +"@types/verror@^1.10.3": + version "1.10.10" + resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.10.tgz#d5a4b56abac169bfbc8b23d291363a682e6fa087" + integrity sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg== + +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + +"@typescript-eslint/eslint-plugin@^6.14.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" + integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/type-utils" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^6.14.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== + dependencies: + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + +"@typescript-eslint/type-utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" + integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== + dependencies: + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== + +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" + integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== + dependencies: + "@typescript-eslint/types" "6.21.0" + eslint-visitor-keys "^3.4.1" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + +"@vanilla-extract/babel-plugin-debug-ids@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.0.5.tgz#e24424f46dd7737764a4bb5ac6dcdf19240f88bc" + integrity sha512-Rc9A6ylsw7EBErmpgqCMvc/Z/eEZxI5k1xfLQHw7f5HHh3oc5YfzsAsYU/PdmSNjF1dp3sGEViBdDltvwnfVaA== + dependencies: + "@babel/core" "^7.23.9" + +"@vanilla-extract/css@^1.14.2": + version "1.14.2" + resolved "https://registry.yarnpkg.com/@vanilla-extract/css/-/css-1.14.2.tgz#121d0b8633ea7e85505e4abab64f60670617d38d" + integrity sha512-OasEW4ojGqqRiUpsyEDUMrSkLnmwbChtafkogpCZ1eDAgAZ9eY9CHLYodj2nB8aV5T25kQ5shm92k25ngjYhhg== + dependencies: + "@emotion/hash" "^0.9.0" + "@vanilla-extract/private" "^1.0.4" + chalk "^4.1.1" + css-what "^6.1.0" + cssesc "^3.0.0" + csstype "^3.0.7" + deep-object-diff "^1.1.9" + deepmerge "^4.2.2" + media-query-parser "^2.0.2" + modern-ahocorasick "^1.0.0" + outdent "^0.8.0" + +"@vanilla-extract/integration@^7.1.2": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@vanilla-extract/integration/-/integration-7.1.2.tgz#1685cc899babb3d6f31f4450d95a8324acc9ed17" + integrity sha512-jpjw0L3P1E+U9L8OAFVMGpPFbNPD+/Vpfew7oOKBYipCrRZEqShu3WLXuUxjXz/mcIH7KCS5nasIdy2VclbEaQ== + dependencies: + "@babel/core" "^7.23.9" + "@babel/plugin-syntax-typescript" "^7.23.3" + "@vanilla-extract/babel-plugin-debug-ids" "^1.0.5" + "@vanilla-extract/css" "^1.14.2" + esbuild "npm:esbuild@~0.17.6 || ~0.18.0 || ~0.19.0" + eval "0.1.8" + find-up "^5.0.0" + javascript-stringify "^2.0.1" + lodash "^4.17.21" + mlly "^1.4.2" + outdent "^0.8.0" + vite "^5.0.11" + vite-node "^1.2.0" + +"@vanilla-extract/private@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@vanilla-extract/private/-/private-1.0.4.tgz#35946b917d6b9774a2b9bc725c63c9341049c79b" + integrity sha512-8FGD6AejeC/nXcblgNCM5rnZb9KXa4WNkR03HCWtdJBpANjTgjHEglNLFnhuvdQ78tC6afaxBPI+g7F2NX3tgg== + +"@vanilla-extract/recipes@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@vanilla-extract/recipes/-/recipes-0.5.2.tgz#fccd09af9ce1ab3abd17fcf20cd649df0e7f30d3" + integrity sha512-IcDw3tFOcSJ+DUxL8MIGbg03eyccYb6NBO/rcgp439PDuHxo5GIQefVeGc1L5mIr/lUVPwDc1N5OXTHiGpiz1A== + +"@vanilla-extract/vite-plugin@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@vanilla-extract/vite-plugin/-/vite-plugin-4.0.7.tgz#40cd5de73bacf89e2ca69ba61163f50e62e77b3c" + integrity sha512-uRAFWdq5Eq0ybpgW2P0LNOw8eW+MTg/OFo5K0Hsl2cKu/Tu2tabCsBf6vNjfhDrm4jBShHy1wJIVcYxf6sczVQ== + dependencies: + "@vanilla-extract/integration" "^7.1.2" + +"@vitejs/plugin-react@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz#744d8e4fcb120fc3dbaa471dadd3483f5a304bb9" + integrity sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ== + dependencies: + "@babel/core" "^7.23.5" + "@babel/plugin-transform-react-jsx-self" "^7.23.3" + "@babel/plugin-transform-react-jsx-source" "^7.23.3" + "@types/babel__core" "^7.20.5" + react-refresh "^0.14.0" + +"@xmldom/xmldom@^0.8.8": + version "0.8.10" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" + integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.11.3, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agent-base@^7.0.2, agent-base@^7.1.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" + integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== + dependencies: + debug "^4.3.4" + +ajv-keywords@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +app-builder-bin@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0" + integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA== + +app-builder-lib@24.13.3: + version "24.13.3" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.13.3.tgz#36e47b65fecb8780bb73bff0fee4e0480c28274b" + integrity sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig== + dependencies: + "@develar/schema-utils" "~2.6.5" + "@electron/notarize" "2.2.1" + "@electron/osx-sign" "1.0.5" + "@electron/universal" "1.5.1" + "@malept/flatpak-bundler" "^0.4.0" + "@types/fs-extra" "9.0.13" + async-exit-hook "^2.0.1" + bluebird-lst "^1.0.9" + builder-util "24.13.1" + builder-util-runtime "9.2.4" + chromium-pickle-js "^0.2.0" + debug "^4.3.4" + ejs "^3.1.8" + electron-publish "24.13.1" + form-data "^4.0.0" + fs-extra "^10.1.0" + hosted-git-info "^4.1.0" + is-ci "^3.0.0" + isbinaryfile "^5.0.0" + js-yaml "^4.1.0" + lazy-val "^1.0.5" + minimatch "^5.1.1" + read-config-file "6.3.2" + sanitize-filename "^1.6.3" + semver "^7.3.8" + tar "^6.1.12" + temp-file "^3.4.0" + +app-root-path@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" + integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +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== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-includes@^3.1.6, array-includes@^3.1.7: + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.findlast@^1.2.4: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.flat@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.toreversed@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" + integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" + integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.1.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + +assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-exit-hook@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" + integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== + +async@^3.2.3: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +axios@^1.6.8: + version "1.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-arraybuffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc" + integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ== + +base64-js@^1.3.1, base64-js@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bencode@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/bencode/-/bencode-4.0.0.tgz#36ca0bc366290dad002215fc52fc74edf4eb0625" + integrity sha512-AERXw18df0pF3ziGOCyUjqKZBVNH8HV3lBxnx5w0qtgMIk4a1wb9BkcCQbkp9Zstfrn/dzRwl7MmUHHocX3sRQ== + dependencies: + uint8-util "^2.2.2" + +bep53-range@^2.0.0: + version "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@^9.5.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-9.5.0.tgz#0e10766cfb7f9b8916be3ab95ad9d5bcc4e6e6fd" + integrity sha512-01qVcM4gPNwE+PX7ARNiHINwzVuD6nx0gdldaAAcu+MrzyIAukQ31ZDKEpzRO/CNA9sHpxoTZ8rdjoyAin4dyg== + dependencies: + bindings "^1.5.0" + prebuild-install "^7.1.1" + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bluebird-lst@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c" + integrity sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw== + dependencies: + bluebird "^3.5.5" + +bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +boolean@^3.0.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" + integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.22.2: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== + dependencies: + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer-equal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.1.tgz#2f7651be5b1b3f057fcd6e7ee16cf34767077d90" + integrity sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.1.0, buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +builder-util-runtime@9.2.4: + version "9.2.4" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz#13cd1763da621e53458739a1e63f7fcba673c42a" + integrity sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA== + dependencies: + debug "^4.3.4" + sax "^1.2.4" + +builder-util@24.13.1: + version "24.13.1" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.13.1.tgz#4a4c4f9466b016b85c6990a0ea15aa14edec6816" + integrity sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA== + dependencies: + "7zip-bin" "~5.2.0" + "@types/debug" "^4.1.6" + app-builder-bin "4.0.0" + bluebird-lst "^1.0.9" + builder-util-runtime "9.2.4" + chalk "^4.1.2" + cross-spawn "^7.0.3" + debug "^4.3.4" + fs-extra "^10.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-ci "^3.0.0" + js-yaml "^4.1.0" + source-map-support "^0.5.19" + stat-mode "^1.0.0" + temp-file "^3.4.0" + +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +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" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001587: + version "1.0.30001611" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001611.tgz#4dbe78935b65851c2d2df1868af39f709a93a96e" + integrity sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q== + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +check-disk-space@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/check-disk-space/-/check-disk-space-3.4.0.tgz#eb8e69eee7a378fd12e35281b8123a8b4c4a8ff7" + integrity sha512-drVkSqfwA+TvuEhFipiR1OC9boEGZL5RrWvVsOthdcvQNXyCCuKkEiTOTXZ7qxSf/GLwq4GvzfrQD/Wz325hgw== + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chromium-pickle-js@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" + integrity sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw== + +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +classnames@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== + +cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color.js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/color.js/-/color.js-1.2.0.tgz#18d9f55545111730d25ccf18ea8b6933c71440d7" + integrity sha512-0ajlNgWWOR7EK9N6l2h0YKsZPzMCLQG5bheCoTGpGfhkR8tB5eQNItdua1oFHDTeq9JKgSzQJqo+Gp3V/xW+Lw== + +color@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + +colorspace@1.1.x: + version "1.1.4" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== + dependencies: + color "^3.1.3" + text-hex "1.0.x" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +compare-version@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" + integrity sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +confbox@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.7.tgz#ccfc0a2bcae36a84838e83a3b7f770fb17d6c579" + integrity sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA== + +config-file-ts@^0.2.4: + version "0.2.6" + resolved "https://registry.yarnpkg.com/config-file-ts/-/config-file-ts-0.2.6.tgz#b424ff74612fb37f626d6528f08f92ddf5d22027" + integrity sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w== + dependencies: + glob "^10.3.10" + typescript "^5.3.3" + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +cosmiconfig@^8.1.3: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +crc@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + +cross-fetch-ponyfill@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cross-fetch-ponyfill/-/cross-fetch-ponyfill-1.0.3.tgz#5c5524e3bd3374e71d5016c2327e416369a57527" + integrity sha512-uOBkDhUAGAbx/FEzNKkOfx3w57H8xReBBXoZvUnOKTI0FW0Xvrj3GrYv2iZXUqlffC1LMGfQzhmBM/ke+6eTDA== + dependencies: + abort-controller "^3.0.0" + node-fetch "^3.3.0" + +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssstyle@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.0.1.tgz#ef29c598a1e90125c870525490ea4f354db0660a" + integrity sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ== + dependencies: + rrweb-cssom "^0.6.0" + +csstype@^3.0.2, csstype@^3.0.7: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +csv-generate@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/csv-generate/-/csv-generate-3.4.3.tgz#bc42d943b45aea52afa896874291da4b9108ffff" + integrity sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw== + +csv-parse@^4.16.3: + version "4.16.3" + resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.16.3.tgz#7ca624d517212ebc520a36873c3478fa66efbaf7" + integrity sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg== + +csv-stringify@^5.6.5: + version "5.6.5" + resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-5.6.5.tgz#c6d74badda4b49a79bf4e72f91cce1e33b94de00" + integrity sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A== + +csv@^5.5.0: + version "5.5.3" + resolved "https://registry.yarnpkg.com/csv/-/csv-5.5.3.tgz#cd26c1e45eae00ce6a9b7b27dcb94955ec95207d" + integrity sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g== + dependencies: + csv-generate "^3.4.3" + csv-parse "^4.16.3" + csv-stringify "^5.6.5" + stream-transform "^2.1.3" + +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + +data-urls@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-5.0.0.tgz#2f76906bce1824429ffecb6920f45a0b30f00dde" + integrity sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg== + dependencies: + whatwg-mimetype "^4.0.0" + whatwg-url "^14.0.0" + +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +date-fns@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.6.0.tgz#f20ca4fe94f8b754951b24240676e8618c0206bf" + integrity sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww== + +dayjs@^1.11.9: + version "1.11.10" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" + integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decimal.js@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deep-object-diff@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.9.tgz#6df7ef035ad6a0caa44479c536ed7b02570f4595" + integrity sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA== + +deepmerge@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b" + integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +detect-libc@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +dir-compare@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-3.3.0.tgz#2c749f973b5c4b5d087f11edaae730db31788416" + integrity sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg== + dependencies: + buffer-equal "^1.0.0" + minimatch "^3.0.4" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dmg-builder@24.13.3: + version "24.13.3" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.13.3.tgz#95d5b99c587c592f90d168a616d7ec55907c7e55" + integrity sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ== + dependencies: + app-builder-lib "24.13.3" + builder-util "24.13.1" + builder-util-runtime "9.2.4" + fs-extra "^10.1.0" + iconv-lite "^0.6.2" + js-yaml "^4.1.0" + optionalDependencies: + dmg-license "^1.0.11" + +dmg-license@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/dmg-license/-/dmg-license-1.0.11.tgz#7b3bc3745d1b52be7506b4ee80cb61df6e4cd79a" + integrity sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q== + dependencies: + "@types/plist" "^3.0.1" + "@types/verror" "^1.10.3" + ajv "^6.10.0" + crc "^3.8.0" + iconv-corefoundation "^1.1.7" + plist "^3.0.4" + smart-buffer "^4.0.2" + verror "^1.10.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@^16.0.3: + version "16.4.5" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== + +dotenv@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-9.0.2.tgz#dacc20160935a37dea6364aa1bef819fb9b6ab05" + integrity sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ejs@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + +electron-builder@^24.9.1: + version "24.13.3" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.13.3.tgz#c506dfebd36d9a50a83ee8aa32d803d83dbe4616" + integrity sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg== + dependencies: + app-builder-lib "24.13.3" + builder-util "24.13.1" + builder-util-runtime "9.2.4" + chalk "^4.1.2" + dmg-builder "24.13.3" + fs-extra "^10.1.0" + is-ci "^3.0.0" + lazy-val "^1.0.5" + read-config-file "6.3.2" + simple-update-notifier "2.0.0" + yargs "^17.6.2" + +electron-publish@24.13.1: + version "24.13.1" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.13.1.tgz#57289b2f7af18737dc2ad134668cdd4a1b574a0c" + integrity sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A== + dependencies: + "@types/fs-extra" "^9.0.11" + builder-util "24.13.1" + builder-util-runtime "9.2.4" + chalk "^4.1.2" + fs-extra "^10.1.0" + lazy-val "^1.0.5" + mime "^2.5.2" + +electron-to-chromium@^1.4.668: + version "1.4.745" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.745.tgz#9c202ce9cbf18a5b5e0ca47145fd127cc4dd2290" + integrity sha512-tRbzkaRI5gbUn5DEvF0dV4TQbMZ5CLkWeTAXmpC9IrYT+GE+x76i9p+o3RJ5l9XmdQlI1pPhVtE9uNcJJ0G0EA== + +electron-vite@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/electron-vite/-/electron-vite-2.1.0.tgz#33908c3b9c90bcab5c5f4c0f6c483263303cc5aa" + integrity sha512-DjToUW6q3ILoW79b1yBywC6LubnOw5Axr2zo9cHMlYf00zAO8oVzrCcqinJQTTbJLvqCuVcBzuICMl5MYshUnQ== + dependencies: + "@babel/core" "^7.23.5" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + cac "^6.7.14" + esbuild "^0.19.8" + magic-string "^0.30.5" + picocolors "^1.0.0" + +electron@^28.2.0: + version "28.3.1" + resolved "https://registry.yarnpkg.com/electron/-/electron-28.3.1.tgz#babb3ff8e246336e9cd1c1966f16a55ba723ea06" + integrity sha512-aF9fONuhVDJlctJS7YOw76ynxVAQdfIWmlhRMKits24tDcdSL0eMHUS0wWYiRfGWbQnUKB6V49Rf17o32f4/fg== + dependencies: + "@electron/get" "^2.0.0" + "@types/node" "^18.11.18" + extract-zip "^2.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +enabled@2.0.x: + version "2.0.0" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +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: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== + 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.3" + 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.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + 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" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.1.0, 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-iterator-helpers@^1.0.17: + version "1.0.18" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz#4d3424f46b24df38d064af6fbbc89274e29ea69d" + integrity sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + globalthis "^1.0.3" + 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" + safe-array-concat "^1.1.2" + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-error@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +esbuild@^0.19.8, "esbuild@npm:esbuild@~0.17.6 || ~0.18.0 || ~0.19.0": + version "0.19.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.19.12" + "@esbuild/android-arm" "0.19.12" + "@esbuild/android-arm64" "0.19.12" + "@esbuild/android-x64" "0.19.12" + "@esbuild/darwin-arm64" "0.19.12" + "@esbuild/darwin-x64" "0.19.12" + "@esbuild/freebsd-arm64" "0.19.12" + "@esbuild/freebsd-x64" "0.19.12" + "@esbuild/linux-arm" "0.19.12" + "@esbuild/linux-arm64" "0.19.12" + "@esbuild/linux-ia32" "0.19.12" + "@esbuild/linux-loong64" "0.19.12" + "@esbuild/linux-mips64el" "0.19.12" + "@esbuild/linux-ppc64" "0.19.12" + "@esbuild/linux-riscv64" "0.19.12" + "@esbuild/linux-s390x" "0.19.12" + "@esbuild/linux-x64" "0.19.12" + "@esbuild/netbsd-x64" "0.19.12" + "@esbuild/openbsd-x64" "0.19.12" + "@esbuild/sunos-x64" "0.19.12" + "@esbuild/win32-arm64" "0.19.12" + "@esbuild/win32-ia32" "0.19.12" + "@esbuild/win32-x64" "0.19.12" + +esbuild@^0.20.1: + version "0.20.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" + integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== + optionalDependencies: + "@esbuild/aix-ppc64" "0.20.2" + "@esbuild/android-arm" "0.20.2" + "@esbuild/android-arm64" "0.20.2" + "@esbuild/android-x64" "0.20.2" + "@esbuild/darwin-arm64" "0.20.2" + "@esbuild/darwin-x64" "0.20.2" + "@esbuild/freebsd-arm64" "0.20.2" + "@esbuild/freebsd-x64" "0.20.2" + "@esbuild/linux-arm" "0.20.2" + "@esbuild/linux-arm64" "0.20.2" + "@esbuild/linux-ia32" "0.20.2" + "@esbuild/linux-loong64" "0.20.2" + "@esbuild/linux-mips64el" "0.20.2" + "@esbuild/linux-ppc64" "0.20.2" + "@esbuild/linux-riscv64" "0.20.2" + "@esbuild/linux-s390x" "0.20.2" + "@esbuild/linux-x64" "0.20.2" + "@esbuild/netbsd-x64" "0.20.2" + "@esbuild/openbsd-x64" "0.20.2" + "@esbuild/sunos-x64" "0.20.2" + "@esbuild/win32-arm64" "0.20.2" + "@esbuild/win32-ia32" "0.20.2" + "@esbuild/win32-x64" "0.20.2" + +escalade@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^9.1.0: + version "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-prettier@^5.0.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" + integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== + dependencies: + prettier-linter-helpers "^1.0.0" + synckit "^0.8.6" + +eslint-plugin-react@^7.33.2: + version "7.34.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz#6806b70c97796f5bbfb235a5d3379ece5f4da997" + integrity sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw== + dependencies: + array-includes "^3.1.7" + array.prototype.findlast "^1.2.4" + array.prototype.flatmap "^1.3.2" + array.prototype.toreversed "^1.1.2" + array.prototype.tosorted "^1.1.3" + doctrine "^2.1.0" + es-iterator-helpers "^1.0.17" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.7" + object.fromentries "^2.0.7" + object.hasown "^1.1.3" + object.values "^1.1.7" + prop-types "^15.8.1" + resolve "^2.0.0-next.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.10" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.56.0: + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eval@0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85" + integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== + dependencies: + "@types/node" "*" + require-like ">= 0.1.1" + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-glob@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +fecha@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== + +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + +flexsearch@^0.7.43: + version "0.7.43" + resolved "https://registry.yarnpkg.com/flexsearch/-/flexsearch-0.7.43.tgz#34f89b36278a466ce379c5bf6fb341965ed3f16c" + integrity sha512-c5o/+Um8aqCSOXGcZoqZOm+NqtVwNsvVpWv6lfmSclU954O3wvQKxxK8zj74fPaSJbXpSLTs4PRhh+wnoCXnKg== + +fn.name@1.x.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + +follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^10.0.0, fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.0, fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "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.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== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-stdin@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" + integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^10.3.10: + version "10.3.12" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" + integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.6" + minimatch "^9.0.1" + minipass "^7.0.4" + path-scurry "^1.10.2" + +glob@^7.1.3, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-agent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" + integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q== + dependencies: + boolean "^3.0.1" + es6-error "^4.1.1" + matcher "^3.0.0" + roarr "^2.15.3" + semver "^7.3.2" + serialize-error "^7.0.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.1, globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@^11.8.5: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +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" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +highlight.js@^10.7.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + +hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hosted-git-info@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +html-encoding-sniffer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz#696df529a7cfd82446369dc5193e590a3735b448" + integrity sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ== + dependencies: + whatwg-encoding "^3.1.1" + +html-parse-stringify@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" + integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== + dependencies: + void-elements "3.1.0" + +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +https-proxy-agent@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168" + integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== + dependencies: + agent-base "^7.0.2" + debug "4" + +i18next-browser-languagedetector@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.1.tgz#1968196d437b4c8db847410c7c33554f6c448f6f" + integrity sha512-h/pM34bcH6tbz8WgGXcmWauNpQupCGr25XPp9cZwZInR9XHSjIFDYp1SIok7zSPsTOMxdvuLyu86V+g2Kycnfw== + dependencies: + "@babel/runtime" "^7.23.2" + +i18next@^23.11.2: + version "23.11.2" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.11.2.tgz#4c0e8192a9ba230fe7dc68b76459816ab601826e" + integrity sha512-qMBm7+qT8jdpmmDw/kQD16VpmkL9BdL+XNAK5MNbNFaf1iQQq35ZbPrSlqmnNPOSUY4m342+c0t0evinF5l7sA== + dependencies: + "@babel/runtime" "^7.23.2" + +iconv-corefoundation@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz#31065e6ab2c9272154c8b0821151e2c88f1b002a" + integrity sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ== + dependencies: + cli-truncate "^2.1.0" + node-addon-api "^1.6.3" + +iconv-lite@0.6.3, iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0, ignore@^5.2.4: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + +immer@^10.0.3: + version "10.0.4" + resolved "https://registry.yarnpkg.com/immer/-/immer-10.0.4.tgz#09af41477236b99449f9d705369a4daaf780362b" + integrity sha512-cuBuGK40P/sk5IzWa9QPUaAdvPHjkk1c+xYsd9oZw+YQQEV+10G0P5uMpGctZZKnyQ+ibRO08bD25nWLmYi2pw== + +import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +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== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.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== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +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" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +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" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== + dependencies: + ci-info "^3.2.0" + +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + +is-date-object@^1.0.1, is-date-object@^1.0.5: + 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-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== + dependencies: + call-bind "^1.0.2" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-function@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +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== + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +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== + +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +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" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isbinaryfile@^4.0.8: + version "4.0.10" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" + integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== + +isbinaryfile@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.2.tgz#fe6e4dfe2e34e947ffa240c113444876ba393ae0" + integrity sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg== + +isexe@^2.0.0: + version "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== + 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" + +jackspeak@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +javascript-stringify@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" + integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsdom@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-24.0.0.tgz#e2dc04e4c79da368481659818ee2b0cd7c39007c" + integrity sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A== + dependencies: + cssstyle "^4.0.1" + data-urls "^5.0.0" + decimal.js "^10.4.3" + form-data "^4.0.0" + html-encoding-sniffer "^4.0.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.2" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.7" + parse5 "^7.1.2" + rrweb-cssom "^0.6.0" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.3" + w3c-xmlserializer "^5.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^3.1.1" + whatwg-mimetype "^4.0.0" + whatwg-url "^14.0.0" + ws "^8.16.0" + xml-name-validator "^5.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^2.2.0, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + +keyv@^4.0.0, keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kuler@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + +lazy-val@^1.0.4, lazy-val@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d" + integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.15, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +logform@^2.3.2, logform@^2.4.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5" + integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ== + dependencies: + "@colors/colors" "1.6.0" + "@types/triple-beam" "^1.3.2" + fecha "^4.2.0" + ms "^2.1.1" + safe-stable-stringify "^2.3.1" + triple-beam "^1.3.0" + +loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lottie-react@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/lottie-react/-/lottie-react-2.4.0.tgz#f7249eee2b1deee70457a2d142194fdf2456e4bd" + integrity sha512-pDJGj+AQlnlyHvOHFK7vLdsDcvbuqvwPZdMlJ360wrzGFurXeKPr8SiRCjLf3LrNYKANQtSsh5dz9UYQHuqx4w== + dependencies: + lottie-web "^5.10.2" + +lottie-web@^5.10.2: + version "5.12.2" + resolved "https://registry.yarnpkg.com/lottie-web/-/lottie-web-5.12.2.tgz#579ca9fe6d3fd9e352571edd3c0be162492f68e5" + integrity sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg== + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@^0.30.5: + version "0.30.10" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" + integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +magnet-uri@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/magnet-uri/-/magnet-uri-7.0.5.tgz#7b5143fd5527f3f612959eeeae264d6f4aeff37b" + integrity sha512-Ke+dDiYHK1Rq/ZyGUAgk7NIkoypivxolTj/A0qr60ypP0FjeP+NTUNEhr965HsRan0zGxKEBK73+SsjRyJWkXg== + dependencies: + "@thaunknown/thirty-two" "^1.0.3" + bep53-range "^2.0.0" + uint8-util "^2.1.9" + +matcher@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" + integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== + dependencies: + escape-string-regexp "^4.0.0" + +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" + integrity sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w== + dependencies: + "@babel/runtime" "^7.12.5" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@^2.5.2: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1, minimatch@^5.1.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.1: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mixme@^0.5.1: + version "0.5.10" + resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.10.tgz#d653b2984b75d9018828f1ea333e51717ead5f51" + integrity sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q== + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^2.1.3: + version "2.1.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" + integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== + +mlly@^1.4.2, mlly@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.6.1.tgz#0983067dc3366d6314fc5e12712884e6978d028f" + integrity sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA== + dependencies: + acorn "^8.11.3" + pathe "^1.1.2" + pkg-types "^1.0.3" + ufo "^1.3.2" + +modern-ahocorasick@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modern-ahocorasick/-/modern-ahocorasick-1.0.1.tgz#dec373444f51b5458ac05216a8ec376e126dd283" + integrity sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-abi@^3.3.0: + version "3.60.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.60.0.tgz#a325b13b3c401c2230202897559fbf0b5f9a90ac" + integrity sha512-zcGgwoXbzw9NczqbGzAWL/ToDYAxv1V8gL1D67ClbdkIfeeDBbY0GelZtC25ayLvVjr2q2cloHeQV1R0QAWqRQ== + dependencies: + semver "^7.3.5" + +node-addon-api@^1.6.3: + version "1.7.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" + integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== + +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + +node-fetch@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +nwsapi@^2.2.7: + version "2.2.8" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.8.tgz#a3552e65b74bf8cc89d0480c4132b61dbe54eccf" + integrity sha512-GU/I3lTEFQ9mkEm07Q7HvdRajss8E1wVMGOk3/lHl60QPseG+B3BIQY+JUjYWw7gF8cCeoQCXd4N7DB7avw0Rg== + +object-assign@^4.0.1, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4, object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +object.fromentries@^2.0.7: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.hasown@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc" + integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== + dependencies: + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.values@^1.1.6, object.values@^1.1.7: + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +one-time@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + +outdent@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.8.0.tgz#2ebc3e77bf49912543f1008100ff8e7f44428eb0" + integrity sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A== + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-torrent@^11.0.16: + version "11.0.16" + resolved "https://registry.yarnpkg.com/parse-torrent/-/parse-torrent-11.0.16.tgz#839abce12c3c376f08516b8608a551154963b99c" + integrity sha512-5GoOdmW0HpiB78aQpBz8/5V3V1LjBRDNiL7DOs33pKeCLOzFnfMrsRD6CYmaUBT5Vi/dXE0hfePsjDGJSMF48w== + dependencies: + bencode "^4.0.0" + cross-fetch-ponyfill "^1.0.3" + get-stdin "^9.0.0" + magnet-uri "^7.0.5" + queue-microtask "^1.2.3" + uint8-util "^2.2.4" + +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parse5@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" + integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathe@^1.1.1, pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-types@^1.0.3: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.1.0.tgz#3ec1bf33379030fd0a34c227b6c650e8ea7ca271" + integrity sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA== + dependencies: + confbox "^0.1.7" + mlly "^1.6.1" + pathe "^1.1.2" + +plist@^3.0.4, plist@^3.0.5: + version "3.1.0" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9" + integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ== + dependencies: + "@xmldom/xmldom" "^0.8.8" + base64-js "^1.5.1" + xmlbuilder "^15.1.1" + +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + +postcss@^8.4.38: + version "8.4.38" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + +prebuild-install@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" + integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^3.2.4: + version "3.2.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +ps-list@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/ps-list/-/ps-list-8.1.1.tgz#9ff1952b26a9a07fcc05270407e60544237ae581" + integrity sha512-OPS9kEJYVmiO48u/B9qneqhkMvgCxT+Tm28VCEJpheTpl8cJ0ffZRRNgS5mrQRTrX5yRTpaJ+hRDeefXYmmorQ== + +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2, queue-microtask@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-i18next@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-14.1.0.tgz#44da74fbffd416f5d0c5307ef31735cf10cc91d9" + integrity sha512-3KwX6LHpbvGQ+sBEntjV4sYW3Zovjjl3fpoHbUwSgFHf0uRBcbeCBLR5al6ikncI5+W0EFb71QXZmfop+J6NrQ== + dependencies: + "@babel/runtime" "^7.23.9" + html-parse-stringify "^3.0.1" + +react-is@^16.13.1, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-loading-skeleton@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/react-loading-skeleton/-/react-loading-skeleton-3.4.0.tgz#c71a3a17259d08e4064974aa0b07f150a09dfd57" + integrity sha512-1oJEBc9+wn7BbkQQk7YodlYEIjgeR+GrRjD+QXkVjwZN7LGIcAFHrx4NhT7UHGBxNY1+zax3c+Fo6XQM4R7CgA== + +react-redux@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.1.1.tgz#852ec13084bd7375e26db697d2fc9027ffada204" + integrity sha512-5ynfGDzxxsoV73+4czQM56qF43vsmgJsO22rmAvU5tZT2z5Xow/A2uhhxwXuGTxgdReF3zcp7A80gma2onRs1A== + dependencies: + "@types/use-sync-external-store" "^0.0.3" + use-sync-external-store "^1.0.0" + +react-refresh@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" + integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== + +react-router-dom@^6.22.3: + version "6.22.3" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.22.3.tgz#9781415667fd1361a475146c5826d9f16752a691" + integrity sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw== + dependencies: + "@remix-run/router" "1.15.3" + react-router "6.22.3" + +react-router@6.22.3: + version "6.22.3" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.22.3.tgz#9d9142f35e08be08c736a2082db5f0c9540a885e" + integrity sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ== + dependencies: + "@remix-run/router" "1.15.3" + +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +read-config-file@6.3.2: + version "6.3.2" + resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.3.2.tgz#556891aa6ffabced916ed57457cb192e61880411" + integrity sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q== + dependencies: + config-file-ts "^0.2.4" + dotenv "^9.0.2" + dotenv-expand "^5.1.0" + js-yaml "^4.1.0" + json5 "^2.2.0" + lazy-val "^1.0.4" + +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +redux-thunk@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-3.1.0.tgz#94aa6e04977c30e14e892eae84978c1af6058ff3" + integrity sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw== + +redux@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b" + integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w== + +reflect-metadata@^0.2.1: + version "0.2.2" + 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== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" + +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.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== + dependencies: + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +"require-like@>= 0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +reselect@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.0.tgz#c479139ab9dd91be4d9c764a7f3868210ef8cd21" + integrity sha512-aw7jcGLDpSgNDyWBQLv2cedml85qd95/iszJjN988zX1t7AVRJi19d9kto5+W7oCfQ94gyo40dVbT6g2k4/kXg== + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^2.0.0-next.5: + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +roarr@^2.15.3: + version "2.15.4" + resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" + integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== + dependencies: + boolean "^3.0.1" + detect-node "^2.0.4" + globalthis "^1.0.1" + json-stringify-safe "^5.0.1" + semver-compare "^1.0.0" + sprintf-js "^1.1.2" + +rollup@^4.13.0: + version "4.16.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.16.0.tgz#6234ae756ff14bce900c1c926175d14cc3e1f5f4" + integrity sha512-joxy/Hd4Ee289394//Q1aoebcxXyHasDieCTk8YtP4G4al4TUlx85EnuCLrfrdtLzrna9kNjH++Sx063wxSgmA== + dependencies: + "@types/estree" "1.0.5" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.16.0" + "@rollup/rollup-android-arm64" "4.16.0" + "@rollup/rollup-darwin-arm64" "4.16.0" + "@rollup/rollup-darwin-x64" "4.16.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.16.0" + "@rollup/rollup-linux-arm-musleabihf" "4.16.0" + "@rollup/rollup-linux-arm64-gnu" "4.16.0" + "@rollup/rollup-linux-arm64-musl" "4.16.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.16.0" + "@rollup/rollup-linux-riscv64-gnu" "4.16.0" + "@rollup/rollup-linux-s390x-gnu" "4.16.0" + "@rollup/rollup-linux-x64-gnu" "4.16.0" + "@rollup/rollup-linux-x64-musl" "4.16.0" + "@rollup/rollup-win32-arm64-msvc" "4.16.0" + "@rollup/rollup-win32-ia32-msvc" "4.16.0" + "@rollup/rollup-win32-x64-msvc" "4.16.0" + fsevents "~2.3.2" + +rrweb-cssom@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" + integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@^5.0.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + +safe-stable-stringify@^2.3.1: + version "2.4.3" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + +"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" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sanitize-filename@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" + integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== + dependencies: + truncate-utf8-bytes "^1.0.0" + +sax@^1.2.4: + version "1.3.0" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" + integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== + +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +sec@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sec/-/sec-2.0.0.tgz#4f5b82e7d1da27da6c7a40799e63caef21ce374f" + integrity sha512-uq35HWa7mG6YyojrduMXjF8UhOySEf3X0V1uMpSOBYUF09xAMnJaKNSmWXeE3mN7NfJTpNUkmGa6nIpEBMN8Xw== + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== + +semver@^6.2.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.2, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +serialize-error@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" + integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== + dependencies: + type-fest "^0.13.1" + +set-function-length@^1.2.1: + 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== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.1, set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +sha.js@^2.4.11: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4, side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +simple-update-notifier@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" + integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== + dependencies: + semver "^7.5.3" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +smart-buffer@^4.0.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + +source-map-support@^0.5.19: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sprintf-js@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== + +stat-mode@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465" + integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg== + +stream-transform@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/stream-transform/-/stream-transform-2.1.3.tgz#a1c3ecd72ddbf500aa8d342b0b9df38f5aa598e3" + integrity sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ== + dependencies: + mixme "^0.5.1" + +"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" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.matchall@^4.0.10: + version "4.0.11" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" + integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + regexp.prototype.flags "^1.5.2" + set-function-name "^2.0.2" + side-channel "^1.0.6" + +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +sumchecker@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" + integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== + dependencies: + debug "^4.1.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-parser@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +synckit@^0.8.6: + version "0.8.8" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7" + integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ== + dependencies: + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" + +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^6.1.12: + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +tasklist@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/tasklist/-/tasklist-5.0.0.tgz#0214f8a28c0fa9e042333154e3e3faa45c640404" + integrity sha512-qPB4J6pseXRqdxAFT1GhlvDPv4FHxWkXs8QVYQWIqusGwn7UXVKOoYu09DZuYWe1K7T5iusHfSoKrv8k9+RfxA== + dependencies: + csv "^5.5.0" + sec "^2.0.0" + +temp-file@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.4.0.tgz#766ea28911c683996c248ef1a20eea04d51652c7" + integrity sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg== + dependencies: + async-exit-hook "^2.0.1" + fs-extra "^10.0.0" + +text-hex@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +tmp-promise@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" + integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== + dependencies: + tmp "^0.2.0" + +tmp@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tough-cookie@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tr46@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.0.0.tgz#3b46d583613ec7283020d79019f1335723801cec" + integrity sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g== + dependencies: + punycode "^2.3.1" + +triple-beam@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" + integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== + +truncate-utf8-bytes@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" + integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== + dependencies: + utf8-byte-length "^1.0.1" + +ts-api-utils@^1.0.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== + +tslib@^2.0.3, tslib@^2.5.0, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + +typeorm@^0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.20.tgz#4b61d737c6fed4e9f63006f88d58a5e54816b7ab" + integrity sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q== + dependencies: + "@sqltools/formatter" "^1.2.5" + app-root-path "^3.1.0" + buffer "^6.0.3" + chalk "^4.1.2" + cli-highlight "^2.1.11" + dayjs "^1.11.9" + debug "^4.3.4" + dotenv "^16.0.3" + glob "^10.3.10" + mkdirp "^2.1.3" + reflect-metadata "^0.2.1" + sha.js "^2.4.11" + tslib "^2.5.0" + uuid "^9.0.0" + yargs "^17.6.2" + +typescript@^5.3.3: + version "5.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== + +ufo@^1.3.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344" + integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw== + +uint8-util@^2.1.9, uint8-util@^2.2.2, uint8-util@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/uint8-util/-/uint8-util-2.2.4.tgz#4df57c7b25b821d02b1599e80f0f1f5f56bc90e1" + integrity sha512-uEI5lLozmKQPYEevfEhP9LY3Je5ZmrQhaWXrzTVqrLNQl36xsRh8NiAxYwB9J+2BAt99TRbmCkROQB2ZKhx4UA== + dependencies: + base64-arraybuffer "^1.0.2" + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +use-sync-external-store@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +utf8-byte-length@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" + integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +verror@^1.10.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb" + integrity sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vite-node@^1.2.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.5.0.tgz#7f74dadfecb15bca016c5ce5ef85e5cc4b82abf2" + integrity sha512-tV8h6gMj6vPzVCa7l+VGq9lwoJjW8Y79vst8QZZGiuRAfijU+EEWuc0kFpmndQrWhMMhet1jdSF+40KSZUqIIw== + dependencies: + cac "^6.7.14" + debug "^4.3.4" + pathe "^1.1.1" + picocolors "^1.0.0" + vite "^5.0.0" + +vite-plugin-svgr@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz#9f3bf5206b0ec510287e56d16f1915e729bb4e6b" + integrity sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA== + dependencies: + "@rollup/pluginutils" "^5.0.5" + "@svgr/core" "^8.1.0" + "@svgr/plugin-jsx" "^8.1.0" + +vite@^5.0.0, vite@^5.0.11, vite@^5.0.12: + version "5.2.10" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.10.tgz#2ac927c91e99d51b376a5c73c0e4b059705f5bd7" + integrity sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw== + dependencies: + esbuild "^0.20.1" + postcss "^8.4.38" + rollup "^4.13.0" + optionalDependencies: + fsevents "~2.3.3" + +void-elements@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" + integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== + +w3c-xmlserializer@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c" + integrity sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA== + dependencies: + xml-name-validator "^5.0.0" + +web-streams-polyfill@^3.0.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== + +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + +whatwg-encoding@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" + integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== + dependencies: + iconv-lite "0.6.3" + +whatwg-mimetype@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" + integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== + +whatwg-url@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.0.0.tgz#00baaa7fd198744910c4b1ef68378f2200e4ceb6" + integrity sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw== + dependencies: + tr46 "^5.0.0" + webidl-conversions "^7.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-builtin-type@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + dependencies: + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + +which-collection@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: + 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== + 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.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +winston-transport@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.7.0.tgz#e302e6889e6ccb7f383b926df6936a5b781bd1f0" + integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg== + dependencies: + logform "^2.3.2" + readable-stream "^3.6.0" + triple-beam "^1.3.0" + +winston@^3.13.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.13.0.tgz#e76c0d722f78e04838158c61adc1287201de7ce3" + integrity sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ== + dependencies: + "@colors/colors" "^1.6.0" + "@dabh/diagnostics" "^2.0.2" + async "^3.2.3" + is-stream "^2.0.0" + logform "^2.4.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + safe-stable-stringify "^2.3.1" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.7.0" + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^8.16.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== + +xml-name-validator@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" + integrity sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg== + +xmlbuilder@>=11.0.1, xmlbuilder@^15.1.1: + version "15.1.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" + integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed" + integrity sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^16.0.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.6.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==