From 4aecf0fc176e20ea167731c798b52923726b61a1 Mon Sep 17 00:00:00 2001 From: 2skydev <2skydev@gmail.com> Date: Sat, 25 May 2024 15:37:38 +0900 Subject: [PATCH] init --- .eslintignore | 5 + .eslintrc.cjs | 43 + .github/release-drafter-config.yml | 31 + .github/workflows/release.yml | 84 + .gitignore | 11 + .npmrc | 3 + .prettierignore | 3 + .prettierrc | 22 + .vscode/settings.json | 16 + .vscode/typescript.code-snippets | 37 + README.md | 56 + electron-builder.json | 40 + electron.vite.config.ts | 40 + package.json | 66 + pnpm-lock.yaml | 6917 +++++++++++++++++ resources/icons/logo@256.ico | Bin 0 -> 40382 bytes resources/icons/logo@256.png | Bin 0 -> 34487 bytes resources/icons/logo@512.png | Bin 0 -> 105048 bytes resources/locales/en_US.json | 306 + resources/locales/ko_KR.json | 374 + src/main/decorators/execute-log.decorator.ts | 32 + .../return-value-caching.decorator.ts | 25 + src/main/env.d.ts | 7 + src/main/i18next.d.ts | 10 + src/main/index.ts | 45 + src/main/modules/app/app.module.ts | 18 + src/main/modules/config/config.controller.ts | 20 + src/main/modules/config/config.module.ts | 10 + src/main/modules/config/config.service.ts | 52 + src/main/modules/config/config.store.ts | 27 + .../modules/developer/developer.controller.ts | 30 + .../modules/developer/developer.module.ts | 12 + .../modules/developer/developer.service.ts | 29 + src/main/modules/developer/types/log.type.ts | 5 + .../decorators/app-window.decorator.ts | 19 + .../decorators/deep-link-handle.decorator.ts | 13 + .../decorators/ipc-handle.decorator.ts | 28 + .../decorators/ipc-sender.decorator.ts | 26 + .../modules/electron/electron.constants.ts | 2 + .../modules/electron/electron.controller.ts | 68 + src/main/modules/electron/electron.module.ts | 12 + src/main/modules/electron/electron.service.ts | 529 ++ src/main/modules/electron/electron.store.ts | 14 + .../electron/types/app-control.type.ts | 1 + .../modules/electron/types/language.type.ts | 4 + .../modules/migration/migration.module.ts | 79 + src/main/modules/migration/migration.store.ts | 13 + .../update/types/update-status.type.ts | 9 + src/main/modules/update/update.constants.ts | 1 + src/main/modules/update/update.controller.ts | 35 + src/main/modules/update/update.module.ts | 13 + src/main/modules/update/update.service.ts | 140 + src/main/utils/promise.utils.ts | 1 + src/preload/electron.d.ts | 9 + src/preload/generated-ipc-invoke-context.ts | 31 + src/preload/generated-ipc-on-context.ts | 32 + src/preload/index.ts | 13 + src/renderer/index.html | 15 + src/renderer/src/assets/base.css | 67 + src/renderer/src/assets/electron.svg | 10 + src/renderer/src/assets/main.css | 171 + src/renderer/src/assets/wavy-lines.svg | 25 + .../FileSystemRouter/FileSystemRouter.tsx | 87 + .../src/components/FileSystemRouter/index.ts | 0 src/renderer/src/components/Versions.tsx | 15 + src/renderer/src/env.d.ts | 1 + src/renderer/src/index.tsx | 6 + src/renderer/src/pages/_app.tsx | 13 + src/renderer/src/pages/_error.tsx | 27 + src/renderer/src/pages/index.tsx | 33 + tsconfig.base.json | 22 + tsconfig.json | 11 + tsconfig.node.json | 24 + tsconfig.web.json | 34 + 74 files changed, 10029 insertions(+) create mode 100644 .eslintignore create mode 100644 .eslintrc.cjs create mode 100644 .github/release-drafter-config.yml create mode 100644 .github/workflows/release.yml create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 .vscode/settings.json create mode 100644 .vscode/typescript.code-snippets create mode 100644 README.md create mode 100644 electron-builder.json create mode 100644 electron.vite.config.ts create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 resources/icons/logo@256.ico create mode 100644 resources/icons/logo@256.png create mode 100644 resources/icons/logo@512.png create mode 100644 resources/locales/en_US.json create mode 100644 resources/locales/ko_KR.json create mode 100644 src/main/decorators/execute-log.decorator.ts create mode 100644 src/main/decorators/return-value-caching.decorator.ts create mode 100644 src/main/env.d.ts create mode 100644 src/main/i18next.d.ts create mode 100644 src/main/index.ts create mode 100644 src/main/modules/app/app.module.ts create mode 100644 src/main/modules/config/config.controller.ts create mode 100644 src/main/modules/config/config.module.ts create mode 100644 src/main/modules/config/config.service.ts create mode 100644 src/main/modules/config/config.store.ts create mode 100644 src/main/modules/developer/developer.controller.ts create mode 100644 src/main/modules/developer/developer.module.ts create mode 100644 src/main/modules/developer/developer.service.ts create mode 100644 src/main/modules/developer/types/log.type.ts create mode 100644 src/main/modules/electron/decorators/app-window.decorator.ts create mode 100644 src/main/modules/electron/decorators/deep-link-handle.decorator.ts create mode 100644 src/main/modules/electron/decorators/ipc-handle.decorator.ts create mode 100644 src/main/modules/electron/decorators/ipc-sender.decorator.ts create mode 100644 src/main/modules/electron/electron.constants.ts create mode 100644 src/main/modules/electron/electron.controller.ts create mode 100644 src/main/modules/electron/electron.module.ts create mode 100644 src/main/modules/electron/electron.service.ts create mode 100644 src/main/modules/electron/electron.store.ts create mode 100644 src/main/modules/electron/types/app-control.type.ts create mode 100644 src/main/modules/electron/types/language.type.ts create mode 100644 src/main/modules/migration/migration.module.ts create mode 100644 src/main/modules/migration/migration.store.ts create mode 100644 src/main/modules/update/types/update-status.type.ts create mode 100644 src/main/modules/update/update.constants.ts create mode 100644 src/main/modules/update/update.controller.ts create mode 100644 src/main/modules/update/update.module.ts create mode 100644 src/main/modules/update/update.service.ts create mode 100644 src/main/utils/promise.utils.ts create mode 100644 src/preload/electron.d.ts create mode 100644 src/preload/generated-ipc-invoke-context.ts create mode 100644 src/preload/generated-ipc-on-context.ts create mode 100644 src/preload/index.ts create mode 100644 src/renderer/index.html create mode 100644 src/renderer/src/assets/base.css create mode 100644 src/renderer/src/assets/electron.svg create mode 100644 src/renderer/src/assets/main.css create mode 100644 src/renderer/src/assets/wavy-lines.svg create mode 100644 src/renderer/src/components/FileSystemRouter/FileSystemRouter.tsx create mode 100644 src/renderer/src/components/FileSystemRouter/index.ts create mode 100644 src/renderer/src/components/Versions.tsx create mode 100644 src/renderer/src/env.d.ts create mode 100644 src/renderer/src/index.tsx create mode 100644 src/renderer/src/pages/_app.tsx create mode 100644 src/renderer/src/pages/_error.tsx create mode 100644 src/renderer/src/pages/index.tsx create mode 100644 tsconfig.base.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 tsconfig.web.json diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..0732679 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +node_modules +dist +out +.gitignore +generated-* \ No newline at end of file diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..affc776 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,43 @@ +module.exports = { + root: true, + env: { + browser: true, + commonjs: true, + es6: true, + node: true, + }, + parser: '@typescript-eslint/parser', + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + sourceType: 'module', + ecmaVersion: 2021, + }, + extends: [ + 'eslint:recommended', + 'plugin:react/recommended', + 'plugin:react/jsx-runtime', + 'plugin:@typescript-eslint/recommended', + 'plugin:@typescript-eslint/eslint-recommended', + 'plugin:prettier/recommended', + ], + rules: { + '@typescript-eslint/ban-ts-comment': ['error', { 'ts-ignore': 'allow-with-description' }], + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-var-requires': 'off', + 'prefer-const': 'off', + 'no-async-promise-executor': 'off', + }, + overrides: [ + { + files: ['*.js'], + rules: { + '@typescript-eslint/explicit-function-return-type': 'off', + }, + }, + ], +} diff --git a/.github/release-drafter-config.yml b/.github/release-drafter-config.yml new file mode 100644 index 0000000..149110d --- /dev/null +++ b/.github/release-drafter-config.yml @@ -0,0 +1,31 @@ +name-template: 'v$RESOLVED_VERSION ๐ŸŒˆ' + +tag-template: 'v$RESOLVED_VERSION' + +categories: + - title: '๐Ÿš€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ' + labels: + - 'enhancement' + - 'feature' + - title: '๐Ÿ› ๋ฒ„๊ทธ ์ˆ˜์ •' + labels: 'bug' + - title: '๐Ÿงฐ ์œ ์ง€ ๋ณด์ˆ˜' + label: 'chore' + +version-resolver: + major: + labels: + - 'major' + minor: + labels: + - 'minor' + patch: + labels: + - 'patch' + default: patch + +change-template: '- $TITLE @$AUTHOR (#$NUMBER)' +change-title-escapes: '\<*_&' + +template: | + $CHANGES diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..7b3edbe --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,84 @@ +name: App build & release drafter + +on: + push: + branches: + - main + paths-ignore: + - '**/README.md' + +permissions: + contents: read + +jobs: + release_draft: + permissions: + contents: write + runs-on: ubuntu-latest + steps: + - name: Release drafter + uses: release-drafter/release-drafter@v5 + with: + config-name: release-drafter-config.yml + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Sleep 5 seconds # release-drafter๊ฐ€ release๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— ์•„๋ž˜ ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด sleep + run: sleep 5 + + - name: Get latest release + id: get_latest_release + uses: pozetroninc/github-action-get-latest-release@master + with: + repository: ${{ github.repository }} + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Update package.json version + run: | + version=${{ steps.get_latest_release.outputs.release }} + version=${version#v} + echo "Latest release: $version" + git config --global user.name "github-actions[bot]" + git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" + yarn version --new-version $version --no-git-tag-version + if ! git diff --exit-code; then + git add package.json + git commit -m "Update package.json version" + git checkout dev + git merge main + git push --all + fi + + build_release: + runs-on: windows-latest + needs: release_draft + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + ref: main # ref๋ฅผ main ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด workflow๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋œ ref๊ฐ€ ์‚ฌ์šฉ๋จ (`Update package.json version` ๋‹จ๊ณ„์˜ ์ปค๋ฐ‹ ๋ฐ˜์˜์„ ์œ„ํ•ด main์œผ๋กœ ์„ค์ •) + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: 18 + cache: 'yarn' + + - name: Generate environment variables file + run: | + echo "SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }}" >> .env + echo "MAIN_VITE_SENTRY_DSN=${{ vars.MAIN_VITE_SENTRY_DSN }}" >> .env + echo "RENDERER_VITE_SENTRY_DSN=${{ vars.RENDERER_VITE_SENTRY_DSN }}" >> .env + + - name: Install dependencies + run: yarn + + - name: Build + run: yarn build + env: + GITHUB_TOKEN: ${{ secrets.PERSONAL_TOKEN }} # electron-builder์€ ์ž๋™ ์ธ์ฆ ํ† ํฐ์„ ์ง€์›ํ•˜์ง€ ์•Š์Œ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a0385f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +target +index.node +**/node_modules +**/.DS_Store +yarn-debug.log* +yarn-error.log* +/resources/windows/chromium +chrome_data +out +release +.env \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..ee8c4d1 --- /dev/null +++ b/.npmrc @@ -0,0 +1,3 @@ +node-linker=hoisted +public-hoist-pattern=* +shamefully-hoist=true diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..78e066c --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +out +tsconfig.json +tsconfig.*.json diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..34ca716 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,22 @@ +{ + "arrowParens": "avoid", + "endOfLine": "auto", + "singleQuote": true, + "trailingComma": "all", + "tabWidth": 2, + "useTabs": false, + "printWidth": 100, + "semi": false, + "importOrder": [ + "^reflect", + "^electron", + "^react", + "", + "^@main", + "^@renderer", + "^~.+$", + "^\\..+$" + ], + "importOrderSeparation": true, + "importOrderParserPlugins": ["typescript", "decorators", "jsx"] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..75664f8 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,16 @@ +{ + "editor.tabSize": 2, + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "typescript.preferences.importModuleSpecifier": "non-relative", + "typescript.tsdk": "node_modules\\typescript\\lib", + "json.schemas": [ + { + "fileMatch": [ + "/*electron-builder.json" + ], + "url": "https://json.schemastore.org/electron-builder" + } + ], + "editor.wordBasedSuggestions": "matchingDocuments" +} \ No newline at end of file diff --git a/.vscode/typescript.code-snippets b/.vscode/typescript.code-snippets new file mode 100644 index 0000000..851ff7f --- /dev/null +++ b/.vscode/typescript.code-snippets @@ -0,0 +1,37 @@ +{ + "Styled Components Export": { + "prefix": ["sc"], + "body": [ + "import styled from 'styled-components';", + "\n", + "export const ${TM_DIRECTORY/^.+\\/(.*)$/$1/}Styled = styled.div`", + " $0", + "`" + ], + "description": "Styled Components ๋‚ด๋ณด๋‚ด๊ธฐ" + }, + "Styled Components Props Theme": { + "prefix": ["pro"], + "body": ["${props => props.theme${0}}"], + "description": "Styled Components Props ์ž๋™์™„์„ฑ" + }, + "Component styled": { + "prefix": ["cs"], + "body": [ + "import clsx from 'clsx';\n", + "import { ${TM_DIRECTORY/^.+\\/(.*)$/$1/}Styled } from './styled';\n", + "interface ${TM_DIRECTORY/^.+\\/(.*)$/$1/}Props {", + " className?: string;", + "}\n", + "const ${TM_DIRECTORY/^.+\\/(.*)$/$1/} = ({ className }: ${TM_DIRECTORY/^.+\\/(.*)$/$1/}Props) => {", + " return (", + " <${TM_DIRECTORY/^.+\\/(.*)$/$1/}Styled className={clsx('${TM_DIRECTORY/^.+\\/(.*)$/$1/}', className)}>", + " $0", + " ", + " )", + "}\n", + "export default ${TM_DIRECTORY/^.+\\/(.*)$/$1/}" + ], + "description": "์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ & Styled Components ์‚ฌ์šฉ" + } +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..d99b0cf --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ +# electron + react + nestjs + vite template + +
+ +## i18n support + +The default language is set by detecting which language you use, and you can also change it directly on the Settings page. + +
+ +## Features + +
+ +## Architecture + +> [Figma link](https://www.figma.com/file/qJrFt4YVAZX5UdbeKLx6xA/LADA?type=whiteboard&t=oozV2tgJvZuRd6S4-1) + +![image](https://github.com/2skydev/LADA/assets/43225384/a4de6e74-4788-424c-a3f0-a329c853789a) + +## Github workflow + +> [Figma link](https://www.figma.com/file/qJrFt4YVAZX5UdbeKLx6xA/LADA?type=whiteboard&t=oozV2tgJvZuRd6S4-1) + +![image](https://github.com/2skydev/LADA/assets/43225384/69dc01b1-0fab-4305-9e69-6821555119fe) + +
+ +## Start develop + +#### dev mode + +```bash +pnpm dev +``` + +#### vite & electron build + +```bash +pnpm build +``` + +
+ +## Overview framework & library + +- App framework: [`electron`](https://www.electronjs.org/) +- App build tool: [`electron-builder`](https://www.electron.build/) +- App storage: [`electron-store`](https://github.com/sindresorhus/electron-store) +- App auto updater: [`electron-updater`](https://www.electron.build/auto-update) +- Bundle tool: [`vite`](https://vitejs.dev/) + [`electron-vite`](https://electron-vite.org/) +- Main process framework: [`nestjs`](https://nestjs.com/) +- Renderer process framework: [`react`](https://react.dev/) + [`typescript`](https://www.typescriptlang.org/) +- Code style: `eslint` + `prettier` + [`@trivago/prettier-plugin-sort-imports`](https://github.com/trivago/prettier-plugin-sort-imports) +- File system based router: [`react-router-dom v6`](https://reactrouter.com/docs/en/v6) + custom (src/components/FileSystemRoutes) +- i18n: [`i18next`](https://www.i18next.com/) + [`react-i18next`](https://react.i18next.com/) diff --git a/electron-builder.json b/electron-builder.json new file mode 100644 index 0000000..143a060 --- /dev/null +++ b/electron-builder.json @@ -0,0 +1,40 @@ +{ + "appId": "com.2skydev.example", + "productName": "electron-nestjs-react-vite-template", + "protocols": { + "name": "example", + "schemes": [ + "example" + ] + }, + "publish": [ + { + "provider": "github", + "owner": "2skydev", + "repo": "example" + } + ], + "asar": true, + "win": { + "target": "nsis", + "icon": "resources/icons/logo@256.ico" + }, + "mac": { + "target": "dmg", + "icon": "resources/icons/logo@512.png" + }, + "nsis": { + "oneClick": true, + "artifactName": "${productName}-${version}.${ext}", + "uninstallDisplayName": "${productName}" + }, + "extraResources": [ + "./resources/**" + ], + "directories": { + "output": "release/" + }, + "files": [ + "out/**/*" + ] +} \ No newline at end of file diff --git a/electron.vite.config.ts b/electron.vite.config.ts new file mode 100644 index 0000000..3087c44 --- /dev/null +++ b/electron.vite.config.ts @@ -0,0 +1,40 @@ +import { defineConfig, externalizeDepsPlugin, swcPlugin } from 'electron-vite' + +import react from '@vitejs/plugin-react' +import { resolve } from 'path' + +export default defineConfig(() => { + return { + main: { + plugins: [externalizeDepsPlugin(), swcPlugin()], + build: { + watch: {}, + sourcemap: true, + }, + resolve: { + alias: { + '@main': resolve('src/main'), + }, + }, + }, + preload: { + plugins: [externalizeDepsPlugin()], + }, + renderer: { + plugins: [react()], + resolve: { + alias: { + '@main': resolve('src/main'), + '@renderer': resolve('src/renderer/src'), + }, + }, + server: { + port: 3000, + strictPort: true, + }, + build: { + sourcemap: true, + }, + }, + } +}) diff --git a/package.json b/package.json new file mode 100644 index 0000000..3fb1f15 --- /dev/null +++ b/package.json @@ -0,0 +1,66 @@ +{ + "name": "electron-nestjs-react-vite-template", + "version": "0.0.1", + "description": "electron + react + nestjs + vite template", + "main": "./out/main/index.js", + "license": "MIT", + "author": { + "email": "2skydev@gmail.com", + "name": "2skydev" + }, + "scripts": { + "dev": "electron-vite dev -w", + "build": "pnpm typecheck && electron-vite build && electron-builder", + "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false", + "typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false", + "typecheck": "pnpm typecheck:node && pnpm typecheck:web", + "postinstall": "electron-builder install-app-deps", + "format": "prettier --write .", + "g": "node generator.mjs" + }, + "dependencies": { + "@nestjs/common": "^10.3.8", + "@nestjs/core": "^10.3.8", + "auto-launch": "^5.0.6", + "change-case": "^4.1.2", + "electron-log": "^5.1.4", + "electron-store": "^8.2.0", + "electron-updater": "^6.1.8", + "i18next": "^23.11.5", + "jsonc-parser": "^3.2.1", + "lodash": "^4.17.21", + "path-to-regexp": "^6.2.2", + "reflect-metadata": "^0.2.2", + "semver": "^7.6.2" + }, + "devDependencies": { + "@swc/core": "^1.5.7", + "@trivago/prettier-plugin-sort-imports": "^4.3.0", + "@types/auto-launch": "^5.0.5", + "@types/lodash": "^4.17.4", + "@types/node": "^20.12.12", + "@types/qs": "^6.9.15", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@types/semver": "^7.5.8", + "@typescript-eslint/eslint-plugin": "^7.10.0", + "@typescript-eslint/parser": "^7.10.0", + "@vitejs/plugin-react": "^4.3.0", + "electron": "^30.0.8", + "electron-builder": "^24.13.3", + "electron-vite": "^2.2.0", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-react": "^7.34.1", + "prettier": "^3.2.5", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-hook-form": "^7.51.5", + "react-i18next": "^14.1.2", + "react-router-dom": "^6.23.1", + "swr": "^2.2.5", + "typescript": "^5.4.5", + "vite": "^5.2.11" + } +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..c1953d6 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,6917 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@nestjs/common': + specifier: ^10.3.8 + version: 10.3.8(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/core': + specifier: ^10.3.8 + version: 10.3.8(@nestjs/common@10.3.8(reflect-metadata@0.2.2)(rxjs@7.8.1))(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1) + auto-launch: + specifier: ^5.0.6 + version: 5.0.6 + change-case: + specifier: ^4.1.2 + version: 4.1.2 + electron-log: + specifier: ^5.1.4 + version: 5.1.4 + electron-store: + specifier: ^8.2.0 + version: 8.2.0 + electron-updater: + specifier: ^6.1.8 + version: 6.1.8 + i18next: + specifier: ^23.11.5 + version: 23.11.5 + jsonc-parser: + specifier: ^3.2.1 + version: 3.2.1 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + path-to-regexp: + specifier: ^6.2.2 + version: 6.2.2 + reflect-metadata: + specifier: ^0.2.2 + version: 0.2.2 + semver: + specifier: ^7.6.2 + version: 7.6.2 + devDependencies: + '@swc/core': + specifier: ^1.5.7 + version: 1.5.7 + '@trivago/prettier-plugin-sort-imports': + specifier: ^4.3.0 + version: 4.3.0(prettier@3.2.5) + '@types/auto-launch': + specifier: ^5.0.5 + version: 5.0.5 + '@types/lodash': + specifier: ^4.17.4 + version: 4.17.4 + '@types/node': + specifier: ^20.12.12 + version: 20.12.12 + '@types/qs': + specifier: ^6.9.15 + version: 6.9.15 + '@types/react': + specifier: ^18.3.3 + version: 18.3.3 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.0 + '@types/semver': + specifier: ^7.5.8 + version: 7.5.8 + '@typescript-eslint/eslint-plugin': + specifier: ^7.10.0 + version: 7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': + specifier: ^7.10.0 + version: 7.10.0(eslint@8.57.0)(typescript@5.4.5) + '@vitejs/plugin-react': + specifier: ^4.3.0 + version: 4.3.0(vite@5.2.11(@types/node@20.12.12)) + electron: + specifier: ^30.0.8 + version: 30.0.8 + electron-builder: + specifier: ^24.13.3 + version: 24.13.3(electron-builder-squirrel-windows@25.0.0-alpha.8(dmg-builder@24.13.3)) + electron-vite: + specifier: ^2.2.0 + version: 2.2.0(@swc/core@1.5.7)(vite@5.2.11(@types/node@20.12.12)) + eslint: + specifier: ^8.56.0 + version: 8.57.0 + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.57.0) + eslint-plugin-prettier: + specifier: ^5.1.3 + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5) + eslint-plugin-react: + specifier: ^7.34.1 + version: 7.34.1(eslint@8.57.0) + prettier: + specifier: ^3.2.5 + version: 3.2.5 + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + react-hook-form: + specifier: ^7.51.5 + version: 7.51.5(react@18.3.1) + react-i18next: + specifier: ^14.1.2 + version: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-router-dom: + specifier: ^6.23.1 + version: 6.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + swr: + specifier: ^2.2.5 + version: 2.2.5(react@18.3.1) + typescript: + specifier: ^5.4.5 + version: 5.4.5 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.12) + +packages: + + 7zip-bin@5.2.0: + resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.24.2': + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.24.4': + resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.24.5': + resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.17.7': + resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.24.5': + resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.23.6': + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-environment-visitor@7.22.20': + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-function-name@7.23.0': + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-hoist-variables@7.22.5': + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.24.3': + resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.24.5': + resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.24.5': + resolution: {integrity: sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-simple-access@7.24.5': + resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-split-export-declaration@7.24.5': + resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.1': + resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.5': + resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.23.5': + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.24.5': + resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.5': + resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.24.5': + resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-arrow-functions@7.24.1': + resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-self@7.24.5': + resolution: {integrity: sha512-RtCJoUO2oYrYwFPtR1/jkoBEcFuI1ae9a9IMxeyAVa3a1Ap4AnxmyIKG2b2FaJKqkidw/0cxRbWN+HOs6ZWd1w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.24.1': + resolution: {integrity: sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.24.5': + resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.24.0': + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.23.2': + resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.24.5': + resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.17.0': + resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.24.5': + resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} + engines: {node: '>=6.9.0'} + + '@develar/schema-utils@2.6.5': + resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} + engines: {node: '>= 8.9.0'} + + '@electron/asar@3.2.10': + resolution: {integrity: sha512-mvBSwIBUeiRscrCeJE1LwctAriBj65eUDm0Pc11iE5gRwzkmsdbS7FnZ1XUWjpSeQWL1L5g12Fc/SchPM9DUOw==} + engines: {node: '>=10.12.0'} + hasBin: true + + '@electron/get@2.0.3': + resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} + engines: {node: '>=12'} + + '@electron/notarize@2.2.1': + resolution: {integrity: sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==} + engines: {node: '>= 10.0.0'} + + '@electron/notarize@2.3.0': + resolution: {integrity: sha512-EiTBU0BwE7HZZjAG1fFWQaiQpCuPrVGn7jPss1kUjD6eTTdXXd29RiZqEqkgN7xqt/Pgn4g3I7Saqovanrfj3w==} + engines: {node: '>= 10.0.0'} + + '@electron/osx-sign@1.0.5': + resolution: {integrity: sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==} + engines: {node: '>=12.0.0'} + hasBin: true + + '@electron/osx-sign@1.3.0': + resolution: {integrity: sha512-TEXhxlYSDRr9JWK5nWdOv5MtuUdaZ412uxIIEQ0hLt80o0HYWtQJBlW5QmrQDMtebzATaOjKG9UfCzLyA90zWQ==} + engines: {node: '>=12.0.0'} + hasBin: true + + '@electron/rebuild@3.6.0': + resolution: {integrity: sha512-zF4x3QupRU3uNGaP5X1wjpmcjfw1H87kyqZ00Tc3HvriV+4gmOGuvQjGNkrJuXdsApssdNyVwLsy+TaeTGGcVw==} + engines: {node: '>=12.13.0'} + hasBin: true + + '@electron/universal@1.5.1': + resolution: {integrity: sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw==} + engines: {node: '>=8.6'} + + '@electron/universal@2.0.1': + resolution: {integrity: sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==} + engines: {node: '>=16.4'} + + '@esbuild/aix-ppc64@0.19.12': + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.20.2': + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.19.12': + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.20.2': + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.19.12': + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.20.2': + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.19.12': + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.20.2': + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.19.12': + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.20.2': + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.19.12': + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.20.2': + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.19.12': + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.20.2': + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.19.12': + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.20.2': + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.19.12': + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.20.2': + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.19.12': + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.20.2': + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.19.12': + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.20.2': + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.19.12': + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.20.2': + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.19.12': + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.20.2': + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.19.12': + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.20.2': + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.19.12': + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.20.2': + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.19.12': + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.20.2': + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.19.12': + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.20.2': + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.19.12': + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.20.2': + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.19.12': + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.20.2': + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.19.12': + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.20.2': + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.19.12': + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.20.2': + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.19.12': + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.20.2': + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.19.12': + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.20.2': + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.10.0': + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.0': + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@gar/promisify@1.1.3': + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@lukeed/csprng@1.1.0': + resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} + engines: {node: '>=8'} + + '@malept/cross-spawn-promise@1.1.1': + resolution: {integrity: sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==} + engines: {node: '>= 10'} + + '@malept/cross-spawn-promise@2.0.0': + resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} + engines: {node: '>= 12.13.0'} + + '@malept/flatpak-bundler@0.4.0': + resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} + engines: {node: '>= 10.0.0'} + + '@nestjs/common@10.3.8': + resolution: {integrity: sha512-P+vPEIvqx2e+fonsYVlFXKvoChyJ8Tq+lfpqdVFqblovHbFr3kZ/nYX0cPs+XuW6bnRT8tz0SSR9XBGU43kJhw==} + peerDependencies: + class-transformer: '*' + class-validator: '*' + reflect-metadata: ^0.1.12 || ^0.2.0 + rxjs: ^7.1.0 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + + '@nestjs/core@10.3.8': + resolution: {integrity: sha512-AxF4tpYLDNn5Wfb3C4bNaaHJ4pREH5FJrSisR2A5zkYpQFORFs0Tc36lOFPMwBTy8Iv2wUwWLUVc5ftBnxEv4w==} + peerDependencies: + '@nestjs/common': ^10.0.0 + '@nestjs/microservices': ^10.0.0 + '@nestjs/platform-express': ^10.0.0 + '@nestjs/websockets': ^10.0.0 + reflect-metadata: ^0.1.12 || ^0.2.0 + rxjs: ^7.1.0 + peerDependenciesMeta: + '@nestjs/microservices': + optional: true + '@nestjs/platform-express': + optional: true + '@nestjs/websockets': + optional: true + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@npmcli/fs@2.1.2': + resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + '@npmcli/move-file@2.0.1': + resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This functionality has been moved to @npmcli/fs + + '@nuxtjs/opencollective@0.3.2': + resolution: {integrity: sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@remix-run/router@1.16.1': + resolution: {integrity: sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==} + engines: {node: '>=14.0.0'} + + '@rollup/rollup-android-arm-eabi@4.18.0': + resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.18.0': + resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.18.0': + resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.18.0': + resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.18.0': + resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.18.0': + resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.18.0': + resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.18.0': + resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.18.0': + resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.18.0': + resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.18.0': + resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.18.0': + resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.18.0': + resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.18.0': + resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} + cpu: [x64] + os: [win32] + + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + + '@swc/core-darwin-arm64@1.5.7': + resolution: {integrity: sha512-bZLVHPTpH3h6yhwVl395k0Mtx8v6CGhq5r4KQdAoPbADU974Mauz1b6ViHAJ74O0IVE5vyy7tD3OpkQxL/vMDQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.5.7': + resolution: {integrity: sha512-RpUyu2GsviwTc2qVajPL0l8nf2vKj5wzO3WkLSHAHEJbiUZk83NJrZd1RVbEknIMO7+Uyjh54hEh8R26jSByaw==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.5.7': + resolution: {integrity: sha512-cTZWTnCXLABOuvWiv6nQQM0hP6ZWEkzdgDvztgHI/+u/MvtzJBN5lBQ2lue/9sSFYLMqzqff5EHKlFtrJCA9dQ==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.5.7': + resolution: {integrity: sha512-hoeTJFBiE/IJP30Be7djWF8Q5KVgkbDtjySmvYLg9P94bHg9TJPSQoC72tXx/oXOgXvElDe/GMybru0UxhKx4g==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.5.7': + resolution: {integrity: sha512-+NDhK+IFTiVK1/o7EXdCeF2hEzCiaRSrb9zD7X2Z7inwWlxAntcSuzZW7Y6BRqGQH89KA91qYgwbnjgTQ22PiQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.5.7': + resolution: {integrity: sha512-25GXpJmeFxKB+7pbY7YQLhWWjkYlR+kHz5I3j9WRl3Lp4v4UD67OGXwPe+DIcHqcouA1fhLhsgHJWtsaNOMBNg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.5.7': + resolution: {integrity: sha512-0VN9Y5EAPBESmSPPsCJzplZHV26akC0sIgd3Hc/7S/1GkSMoeuVL+V9vt+F/cCuzr4VidzSkqftdP3qEIsXSpg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.5.7': + resolution: {integrity: sha512-RtoNnstBwy5VloNCvmvYNApkTmuCe4sNcoYWpmY7C1+bPR+6SOo8im1G6/FpNem8AR5fcZCmXHWQ+EUmRWJyuA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.5.7': + resolution: {integrity: sha512-Xm0TfvcmmspvQg1s4+USL3x8D+YPAfX2JHygvxAnCJ0EHun8cm2zvfNBcsTlnwYb0ybFWXXY129aq1wgFC9TpQ==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.5.7': + resolution: {integrity: sha512-tp43WfJLCsKLQKBmjmY/0vv1slVywR5Q4qKjF5OIY8QijaEW7/8VwPyUyVoJZEnDgv9jKtUTG5PzqtIYPZGnyg==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.5.7': + resolution: {integrity: sha512-U4qJRBefIJNJDRCCiVtkfa/hpiZ7w0R6kASea+/KLp+vkus3zcLSB8Ub8SvKgTIxjWpwsKcZlPf5nrv4ls46SQ==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': ^0.5.0 + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/types@0.1.7': + resolution: {integrity: sha512-scHWahbHF0eyj3JsxG9CFJgFdFNaVQCNAimBlT6PzS3n/HptxqREjsm4OH6AN3lYcffZYSPxXW8ua2BEHp0lJQ==} + + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@trivago/prettier-plugin-sort-imports@4.3.0': + resolution: {integrity: sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==} + peerDependencies: + '@vue/compiler-sfc': 3.x + prettier: 2.x - 3.x + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + + '@types/auto-launch@5.0.5': + resolution: {integrity: sha512-/nGvQZSzM/pvCMCh4Gt2kIeiUmOP/cKGJbjlInI+A+5MoV/7XmT56DJ6EU8bqc3+ItxEe4UC2GVspmPzcCc8cg==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/fs-extra@9.0.13': + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + + '@types/lodash@4.17.4': + resolution: {integrity: sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==} + + '@types/ms@0.7.34': + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + + '@types/plist@3.0.5': + resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} + + '@types/prop-types@15.7.12': + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + + '@types/qs@6.9.15': + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} + + '@types/react-dom@18.3.0': + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + + '@types/react@18.3.3': + resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} + + '@types/responselike@1.0.3': + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/verror@1.10.10': + resolution: {integrity: sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@typescript-eslint/eslint-plugin@7.10.0': + resolution: {integrity: sha512-PzCr+a/KAef5ZawX7nbyNwBDtM1HdLIT53aSA2DDlxmxMngZ43O8SIePOeX8H5S+FHXeI6t97mTt/dDdzY4Fyw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@7.10.0': + resolution: {integrity: sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@7.10.0': + resolution: {integrity: sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/type-utils@7.10.0': + resolution: {integrity: sha512-D7tS4WDkJWrVkuzgm90qYw9RdgBcrWmbbRkrLA4d7Pg3w0ttVGDsvYGV19SH8gPR5L7OtcN5J1hTtyenO9xE9g==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@7.10.0': + resolution: {integrity: sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/typescript-estree@7.10.0': + resolution: {integrity: sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@7.10.0': + resolution: {integrity: sha512-olzif1Fuo8R8m/qKkzJqT7qwy16CzPRWBvERS0uvyc+DHd8AKbO4Jb7kpAvVzMmZm8TrHnI7hvjN4I05zow+tg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + + '@typescript-eslint/visitor-keys@7.10.0': + resolution: {integrity: sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + '@vitejs/plugin-react@4.3.0': + resolution: {integrity: sha512-KcEbMsn4Dpk+LIbHMj7gDPRKaTMStxxWRkRmxsg/jVdFdJCZWt1SchZcf0M4t8lIKdwwMsEyzhrcOXRrDPtOBw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 + + '@xmldom/xmldom@0.8.10': + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + engines: {node: '>=10.0.0'} + + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.13.0: + resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + app-builder-bin@4.0.0: + resolution: {integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==} + + app-builder-lib@24.13.3: + resolution: {integrity: sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==} + engines: {node: '>=14.0.0'} + peerDependencies: + dmg-builder: 24.13.3 + electron-builder-squirrel-windows: 24.13.3 + + app-builder-lib@25.0.0-alpha.8: + resolution: {integrity: sha512-d/pcaTcDv3gfdl9AGGP/DKvc+A+TdJmG15f+vqPeEGKOoqLE0ukReaEevXAtH3wOOs5CqgX6QgNPdszeeqFn3Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + dmg-builder: 25.0.0-alpha.8 + electron-builder-squirrel-windows: 25.0.0-alpha.8 + + applescript@1.0.0: + resolution: {integrity: sha512-yvtNHdWvtbYEiIazXAdp/NY+BBb65/DAseqlNiJQjOx9DynuzOYDbVLBJvuc0ve0VL9x6B3OHF6eH52y9hCBtQ==} + + aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + + archiver-utils@2.1.0: + resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} + engines: {node: '>= 6'} + + archiver-utils@3.0.4: + resolution: {integrity: sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==} + engines: {node: '>= 10'} + + archiver@5.3.2: + resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==} + engines: {node: '>= 10'} + + are-we-there-yet@3.0.1: + resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + + array.prototype.toreversed@1.1.2: + resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} + + array.prototype.tosorted@1.1.3: + resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async-exit-hook@2.0.1: + resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} + engines: {node: '>=0.12.0'} + + async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + atomically@1.7.0: + resolution: {integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==} + engines: {node: '>=10.12.0'} + + auto-launch@5.0.6: + resolution: {integrity: sha512-OgxiAm4q9EBf9EeXdPBiVNENaWE3jUZofwrhAkWjHDYGezu1k3FRZHU8V2FBxGuSJOHzKmTJEd0G7L7/0xDGFA==} + engines: {node: '>=4.0.0'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + bluebird-lst@1.0.9: + resolution: {integrity: sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + boolean@3.2.0: + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-equal@1.0.1: + resolution: {integrity: sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==} + engines: {node: '>=0.4'} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + builder-util-runtime@9.2.3: + resolution: {integrity: sha512-FGhkqXdFFZ5dNC4C+yuQB9ak311rpGAw+/ASz8ZdxwODCv1GGMWgLDeofRkdi0F3VCHQEWy/aXcJQozx2nOPiw==} + engines: {node: '>=12.0.0'} + + builder-util-runtime@9.2.4: + resolution: {integrity: sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==} + engines: {node: '>=12.0.0'} + + builder-util-runtime@9.2.5-alpha.2: + resolution: {integrity: sha512-/Ln2ddejGj2HNMJ+X66mKHRcOvmRzUO/dSi8t4hSV64J7IA+DE+mqDb+zogIE2gin7p7YwcGiOkKny4nwPPPXg==} + engines: {node: '>=12.0.0'} + + builder-util@24.13.1: + resolution: {integrity: sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==} + + builder-util@25.0.0-alpha.6: + resolution: {integrity: sha512-ghT1XcP6JI926AArlBcPHRRKYCsVWbT/ywnXPwW5X1ani2jmnddPpnwm92xRvCPWGBmeXd2diF69FV5rBJxhRQ==} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + cacache@16.1.3: + resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + + caniuse-lite@1.0.30001621: + resolution: {integrity: sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==} + + capital-case@1.0.4: + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + change-case@4.1.2: + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + chromium-pickle-js@0.2.0: + resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + + compare-version@0.1.2: + resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} + engines: {node: '>=0.10.0'} + + compress-commons@4.1.2: + resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==} + engines: {node: '>= 10'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + conf@10.2.0: + resolution: {integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==} + engines: {node: '>=12'} + + config-file-ts@0.2.6: + resolution: {integrity: sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w==} + + config-file-ts@0.2.8-rc1: + resolution: {integrity: sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg==} + + consola@2.15.3: + resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} + + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + + constant-case@3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + crc32-stream@4.0.3: + resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} + engines: {node: '>= 10'} + + crc@3.8.0: + resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + debounce-fn@4.0.0: + resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==} + engines: {node: '>=10'} + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + + dir-compare@3.3.0: + resolution: {integrity: sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==} + + dir-compare@4.2.0: + resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dmg-builder@24.13.3: + resolution: {integrity: sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==} + + dmg-license@1.0.11: + resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} + engines: {node: '>=8'} + os: [darwin] + hasBin: true + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dot-prop@6.0.1: + resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} + engines: {node: '>=10'} + + dotenv-expand@11.0.6: + resolution: {integrity: sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==} + engines: {node: '>=12'} + + dotenv-expand@5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + + dotenv@9.0.2: + resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==} + engines: {node: '>=10'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-builder-squirrel-windows@25.0.0-alpha.8: + resolution: {integrity: sha512-zGSxJletmQ/LdFijY2nXmfhDVbS4iO9dGxi/P6oJor34i4pelTQtk2oJu+11YLO+4NVXFDhhU+/08WBfPXP/ow==} + + electron-builder@24.13.3: + resolution: {integrity: sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg==} + engines: {node: '>=14.0.0'} + hasBin: true + + electron-log@5.1.4: + resolution: {integrity: sha512-P0RSXnwT3z+e89Z5uAcZDeN85/QjIgv764a93kqCi+wh2Jm22CCbc3AGDt4S8rsxAHWHB4Q0PGsQl3fw1AN0kQ==} + engines: {node: '>= 14'} + + electron-publish@24.13.1: + resolution: {integrity: sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==} + + electron-publish@25.0.0-alpha.7: + resolution: {integrity: sha512-d9R6Jnds3PjzBM4Wt3nRn9ramkbM3kBzt9a6WHQL4/09ByyZGZ1Cu9GS9atRCkH3tBJlOIotUYVhVO36lk3sAA==} + + electron-store@8.2.0: + resolution: {integrity: sha512-ukLL5Bevdil6oieAOXz3CMy+OgaItMiVBg701MNlG6W5RaC0AHN7rvlqTCmeb6O7jP0Qa1KKYTE0xV0xbhF4Hw==} + + electron-to-chromium@1.4.782: + resolution: {integrity: sha512-JUfU61e8tr+i5Y1FKXcKs+Xe+rJ+CEqm4cgv1kMihPE2EvYHmYyVr3Im/+1+Z5B29Be2EEGCZCwAc6Tazdl1Yg==} + + electron-updater@6.1.8: + resolution: {integrity: sha512-hhOTfaFAd6wRHAfUaBhnAOYc+ymSGCWJLtFkw4xJqOvtpHmIdNHnXDV9m1MHC+A6q08Abx4Ykgyz/R5DGKNAMQ==} + + electron-vite@2.2.0: + resolution: {integrity: sha512-WvE8KlZTiay9uWqBRvnYuxg2JqIicaNqaz9qFvsZkIae2/FmqZC5jctziyduCuuwVxqJG0Sjh8RlTwSn8xcCoQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@swc/core': ^1.0.0 + vite: ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + '@swc/core': + optional: true + + electron@30.0.8: + resolution: {integrity: sha512-ivzXJJ/9gdb4oOw+5SDuaZpSInz8C+Z021dKZfFLMltKbDa4sSqt5cRBiUg7J36Z2kdus+Jai0bdHWutYE9wAA==} + engines: {node: '>= 12.20.55'} + hasBin: true + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + es6-error@4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + + esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-prettier@5.1.3: + resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-react@7.34.1: + resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + exponential-backoff@3.1.1: + resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + extsprintf@1.4.1: + resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} + engines: {'0': node >=0.6.0} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gauge@4.0.4: + resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.1: + resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} + engines: {node: '>=16 || 14 >=14.18'} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + + global-agent@3.0.0: + resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} + engines: {node: '>=10.0'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + header-case@2.0.4: + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + + html-parse-stringify@3.0.1: + resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + i18next@23.11.5: + resolution: {integrity: sha512-41pvpVbW9rhZPk5xjCX2TPJi2861LEig/YRhUkY+1FQ2IQPS0bKUDYnEqY8XPPbB48h1uIwLnP9iiEfuSl20CA==} + + iconv-corefoundation@1.1.7: + resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} + engines: {node: ^8.11.2 || >=10} + os: [darwin] + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + infer-owner@1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-ci@3.0.1: + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} + hasBin: true + + is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + + isbinaryfile@5.0.2: + resolution: {integrity: sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==} + engines: {node: '>= 18.0.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + iterare@1.2.1: + resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} + engines: {node: '>=6'} + + iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + + jackspeak@3.1.2: + resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==} + engines: {node: '>=14'} + + jake@10.9.1: + resolution: {integrity: sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==} + engines: {node: '>=10'} + hasBin: true + + javascript-natural-sort@0.7.1: + resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema-typed@7.0.3: + resolution: {integrity: sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + lazy-val@1.0.5: + resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} + + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + + lodash.difference@4.5.0: + resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} + + lodash.escaperegexp@4.1.2: + resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} + + lodash.flatten@4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.union@4.6.0: + resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + + lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} + engines: {node: 14 || >=16.14} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + + make-fetch-happen@10.2.1: + resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + matcher@3.0.0: + resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} + engines: {node: '>=10'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@3.1.0: + resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} + engines: {node: '>=8'} + + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass-collect@1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + + minipass-fetch@2.1.2: + resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + + minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-abi@3.62.0: + resolution: {integrity: sha512-CPMcGa+y33xuL1E0TcNIu4YyaZCxnnvkVaEXrsosR3FxN+fV8xvb7Mzpb7IgKler10qeMkE6+Dp8qJhpzdq35g==} + engines: {node: '>=10'} + + node-addon-api@1.7.2: + resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} + + node-api-version@0.2.0: + resolution: {integrity: sha512-fthTTsi8CxaBXMaBAD7ST2uylwvsnYxh2PfaScwpMhos6KlSFajXQPcM4ogNE1q2s3Lbz9GCGqeIHC+C6OZnKg==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp@9.4.1: + resolution: {integrity: sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==} + engines: {node: ^12.13 || ^14.13 || >=16} + hasBin: true + + node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + + nopt@6.0.0: + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + npmlog@6.0.2: + resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.hasown@1.1.4: + resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} + engines: {node: '>= 0.4'} + + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + path-case@3.0.4: + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@3.2.0: + resolution: {integrity: sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==} + + path-to-regexp@6.2.2: + resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pkg-up@3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} + + plist@3.1.0: + resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} + engines: {node: '>=10.4.0'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + engines: {node: '>=14'} + hasBin: true + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-hook-form@7.51.5: + resolution: {integrity: sha512-J2ILT5gWx1XUIJRETiA7M19iXHlG74+6O3KApzvqB/w8S5NQR7AbU8HVZrMALdmDgWpRPYiZJl0zx8Z4L2mP6Q==} + engines: {node: '>=12.22.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 + + react-i18next@14.1.2: + resolution: {integrity: sha512-FSIcJy6oauJbGEXfhUgVeLzvWBhIBIS+/9c6Lj4niwKZyGaGb4V4vUbATXSlsHJDXXB+ociNxqFNiFuV1gmoqg==} + peerDependencies: + i18next: '>= 23.2.3' + react: '>= 16.8.0' + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react-router-dom@6.23.1: + resolution: {integrity: sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + + react-router@6.23.1: + resolution: {integrity: sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + read-binary-file-arch@1.0.6: + resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} + hasBin: true + + read-config-file@6.3.2: + resolution: {integrity: sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==} + engines: {node: '>=12.0.0'} + + read-config-file@6.4.0: + resolution: {integrity: sha512-uB5QOBeF84PT61GlV11OTV4jUGHAO3iDEOP6v9ygxhG6Bs9PLg7WsjNT6mtIX2G+x8lJTr4ZWNeG6LDTKkNf2Q==} + engines: {node: '>=12.0.0'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + engines: {node: '>= 0.4'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + + roarr@2.15.4: + resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} + engines: {node: '>=8.0'} + + rollup@4.18.0: + resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sanitize-filename@1.6.3: + resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} + + sax@1.3.0: + resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + engines: {node: '>=10'} + hasBin: true + + sentence-case@3.0.4: + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + + serialize-error@7.0.1: + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} + engines: {node: '>=10'} + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + socks-proxy-agent@7.0.0: + resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} + engines: {node: '>= 10'} + + socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + ssri@9.0.1: + resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + stat-mode@1.0.0: + resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} + engines: {node: '>= 6'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + sumchecker@3.0.1: + resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} + engines: {node: '>= 8.0'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + swr@2.2.5: + resolution: {integrity: sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==} + peerDependencies: + react: ^16.11.0 || ^17.0.0 || ^18.0.0 + + synckit@0.8.8: + resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} + engines: {node: ^14.18.0 || >=16.0.0} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + temp-file@3.4.0: + resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + tiny-typed-emitter@2.1.0: + resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} + + tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + + tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + truncate-utf8-bytes@1.0.2: + resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + + uid@2.0.2: + resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} + engines: {node: '>=8'} + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + unique-filename@2.0.1: + resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + unique-slug@3.0.0: + resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + untildify@3.0.3: + resolution: {integrity: sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==} + engines: {node: '>=4'} + + update-browserslist-db@1.0.16: + resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + upper-case-first@2.0.2: + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + + upper-case@2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-sync-external-store@1.2.2: + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + utf8-byte-length@1.0.5: + resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + verror@1.10.1: + resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} + engines: {node: '>=0.6.0'} + + vite@5.2.11: + resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + void-elements@3.1.0: + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + + winreg@1.2.4: + resolution: {integrity: sha512-IHpzORub7kYlb8A43Iig3reOvlcBJGX9gZ0WycHhghHtA65X0LYnMRuJs+aH1abVnMJztQkvQNlltnbPi5aGIA==} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + xmlbuilder@15.1.1: + resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} + engines: {node: '>=8.0'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zip-stream@4.1.1: + resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} + engines: {node: '>= 10'} + +snapshots: + + 7zip-bin@5.2.0: {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.24.2': + dependencies: + '@babel/highlight': 7.24.5 + picocolors: 1.0.1 + + '@babel/compat-data@7.24.4': {} + + '@babel/core@7.24.5': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helpers': 7.24.5 + '@babel/parser': 7.24.5 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.5 + '@babel/types': 7.24.5 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.17.7': + dependencies: + '@babel/types': 7.17.0 + jsesc: 2.5.2 + source-map: 0.5.7 + + '@babel/generator@7.24.5': + dependencies: + '@babel/types': 7.24.5 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-compilation-targets@7.23.6': + dependencies: + '@babel/compat-data': 7.24.4 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.23.0 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-environment-visitor@7.22.20': {} + + '@babel/helper-function-name@7.23.0': + dependencies: + '@babel/template': 7.24.0 + '@babel/types': 7.24.5 + + '@babel/helper-hoist-variables@7.22.5': + dependencies: + '@babel/types': 7.24.5 + + '@babel/helper-module-imports@7.24.3': + dependencies: + '@babel/types': 7.24.5 + + '@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.24.3 + '@babel/helper-simple-access': 7.24.5 + '@babel/helper-split-export-declaration': 7.24.5 + '@babel/helper-validator-identifier': 7.24.5 + + '@babel/helper-plugin-utils@7.24.5': {} + + '@babel/helper-simple-access@7.24.5': + dependencies: + '@babel/types': 7.24.5 + + '@babel/helper-split-export-declaration@7.24.5': + dependencies: + '@babel/types': 7.24.5 + + '@babel/helper-string-parser@7.24.1': {} + + '@babel/helper-validator-identifier@7.24.5': {} + + '@babel/helper-validator-option@7.23.5': {} + + '@babel/helpers@7.24.5': + dependencies: + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.5 + '@babel/types': 7.24.5 + transitivePeerDependencies: + - supports-color + + '@babel/highlight@7.24.5': + dependencies: + '@babel/helper-validator-identifier': 7.24.5 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + + '@babel/parser@7.24.5': + dependencies: + '@babel/types': 7.17.0 + + '@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + + '@babel/plugin-transform-react-jsx-self@7.24.5(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + + '@babel/plugin-transform-react-jsx-source@7.24.1(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + + '@babel/runtime@7.24.5': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.24.0': + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 + + '@babel/traverse@7.23.2': + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.5 + '@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.24.5 + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/traverse@7.24.5': + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.5 + '@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.24.5 + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.17.0': + dependencies: + '@babel/helper-validator-identifier': 7.24.5 + to-fast-properties: 2.0.0 + + '@babel/types@7.24.5': + dependencies: + '@babel/helper-string-parser': 7.24.1 + '@babel/helper-validator-identifier': 7.24.5 + to-fast-properties: 2.0.0 + + '@develar/schema-utils@2.6.5': + dependencies: + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + '@electron/asar@3.2.10': + dependencies: + commander: 5.1.0 + glob: 7.2.3 + minimatch: 3.1.2 + + '@electron/get@2.0.3': + dependencies: + debug: 4.3.4 + env-paths: 2.2.1 + fs-extra: 8.1.0 + got: 11.8.6 + progress: 2.0.3 + semver: 6.3.1 + sumchecker: 3.0.1 + optionalDependencies: + global-agent: 3.0.0 + transitivePeerDependencies: + - supports-color + + '@electron/notarize@2.2.1': + dependencies: + debug: 4.3.4 + fs-extra: 9.1.0 + promise-retry: 2.0.1 + transitivePeerDependencies: + - supports-color + + '@electron/notarize@2.3.0': + dependencies: + debug: 4.3.4 + fs-extra: 9.1.0 + promise-retry: 2.0.1 + transitivePeerDependencies: + - supports-color + + '@electron/osx-sign@1.0.5': + dependencies: + compare-version: 0.1.2 + debug: 4.3.4 + fs-extra: 10.1.0 + isbinaryfile: 4.0.10 + minimist: 1.2.8 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + + '@electron/osx-sign@1.3.0': + dependencies: + compare-version: 0.1.2 + debug: 4.3.4 + fs-extra: 10.1.0 + isbinaryfile: 4.0.10 + minimist: 1.2.8 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + + '@electron/rebuild@3.6.0': + dependencies: + '@malept/cross-spawn-promise': 2.0.0 + chalk: 4.1.2 + debug: 4.3.4 + detect-libc: 2.0.3 + fs-extra: 10.1.0 + got: 11.8.6 + node-abi: 3.62.0 + node-api-version: 0.2.0 + node-gyp: 9.4.1 + ora: 5.4.1 + read-binary-file-arch: 1.0.6 + semver: 7.6.2 + tar: 6.2.1 + yargs: 17.7.2 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron/universal@1.5.1': + dependencies: + '@electron/asar': 3.2.10 + '@malept/cross-spawn-promise': 1.1.1 + debug: 4.3.4 + dir-compare: 3.3.0 + fs-extra: 9.1.0 + minimatch: 3.1.2 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + + '@electron/universal@2.0.1': + dependencies: + '@electron/asar': 3.2.10 + '@malept/cross-spawn-promise': 2.0.0 + debug: 4.3.4 + dir-compare: 4.2.0 + fs-extra: 11.2.0 + minimatch: 9.0.4 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + + '@esbuild/aix-ppc64@0.19.12': + optional: true + + '@esbuild/aix-ppc64@0.20.2': + optional: true + + '@esbuild/android-arm64@0.19.12': + optional: true + + '@esbuild/android-arm64@0.20.2': + optional: true + + '@esbuild/android-arm@0.19.12': + optional: true + + '@esbuild/android-arm@0.20.2': + optional: true + + '@esbuild/android-x64@0.19.12': + optional: true + + '@esbuild/android-x64@0.20.2': + optional: true + + '@esbuild/darwin-arm64@0.19.12': + optional: true + + '@esbuild/darwin-arm64@0.20.2': + optional: true + + '@esbuild/darwin-x64@0.19.12': + optional: true + + '@esbuild/darwin-x64@0.20.2': + optional: true + + '@esbuild/freebsd-arm64@0.19.12': + optional: true + + '@esbuild/freebsd-arm64@0.20.2': + optional: true + + '@esbuild/freebsd-x64@0.19.12': + optional: true + + '@esbuild/freebsd-x64@0.20.2': + optional: true + + '@esbuild/linux-arm64@0.19.12': + optional: true + + '@esbuild/linux-arm64@0.20.2': + optional: true + + '@esbuild/linux-arm@0.19.12': + optional: true + + '@esbuild/linux-arm@0.20.2': + optional: true + + '@esbuild/linux-ia32@0.19.12': + optional: true + + '@esbuild/linux-ia32@0.20.2': + optional: true + + '@esbuild/linux-loong64@0.19.12': + optional: true + + '@esbuild/linux-loong64@0.20.2': + optional: true + + '@esbuild/linux-mips64el@0.19.12': + optional: true + + '@esbuild/linux-mips64el@0.20.2': + optional: true + + '@esbuild/linux-ppc64@0.19.12': + optional: true + + '@esbuild/linux-ppc64@0.20.2': + optional: true + + '@esbuild/linux-riscv64@0.19.12': + optional: true + + '@esbuild/linux-riscv64@0.20.2': + optional: true + + '@esbuild/linux-s390x@0.19.12': + optional: true + + '@esbuild/linux-s390x@0.20.2': + optional: true + + '@esbuild/linux-x64@0.19.12': + optional: true + + '@esbuild/linux-x64@0.20.2': + optional: true + + '@esbuild/netbsd-x64@0.19.12': + optional: true + + '@esbuild/netbsd-x64@0.20.2': + optional: true + + '@esbuild/openbsd-x64@0.19.12': + optional: true + + '@esbuild/openbsd-x64@0.20.2': + optional: true + + '@esbuild/sunos-x64@0.19.12': + optional: true + + '@esbuild/sunos-x64@0.20.2': + optional: true + + '@esbuild/win32-arm64@0.19.12': + optional: true + + '@esbuild/win32-arm64@0.20.2': + optional: true + + '@esbuild/win32-ia32@0.19.12': + optional: true + + '@esbuild/win32-ia32@0.20.2': + optional: true + + '@esbuild/win32-x64@0.19.12': + optional: true + + '@esbuild/win32-x64@0.20.2': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.10.0': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.0': {} + + '@gar/promisify@1.1.3': {} + + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@lukeed/csprng@1.1.0': {} + + '@malept/cross-spawn-promise@1.1.1': + dependencies: + cross-spawn: 7.0.3 + + '@malept/cross-spawn-promise@2.0.0': + dependencies: + cross-spawn: 7.0.3 + + '@malept/flatpak-bundler@0.4.0': + dependencies: + debug: 4.3.4 + fs-extra: 9.1.0 + lodash: 4.17.21 + tmp-promise: 3.0.3 + transitivePeerDependencies: + - supports-color + + '@nestjs/common@10.3.8(reflect-metadata@0.2.2)(rxjs@7.8.1)': + dependencies: + iterare: 1.2.1 + reflect-metadata: 0.2.2 + rxjs: 7.8.1 + tslib: 2.6.2 + uid: 2.0.2 + + '@nestjs/core@10.3.8(@nestjs/common@10.3.8(reflect-metadata@0.2.2)(rxjs@7.8.1))(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)': + dependencies: + '@nestjs/common': 10.3.8(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nuxtjs/opencollective': 0.3.2(encoding@0.1.13) + fast-safe-stringify: 2.1.1 + iterare: 1.2.1 + path-to-regexp: 3.2.0 + reflect-metadata: 0.2.2 + rxjs: 7.8.1 + tslib: 2.6.2 + uid: 2.0.2 + transitivePeerDependencies: + - encoding + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@npmcli/fs@2.1.2': + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.6.2 + + '@npmcli/move-file@2.0.1': + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + + '@nuxtjs/opencollective@0.3.2(encoding@0.1.13)': + dependencies: + chalk: 4.1.2 + consola: 2.15.3 + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pkgr/core@0.1.1': {} + + '@remix-run/router@1.16.1': {} + + '@rollup/rollup-android-arm-eabi@4.18.0': + optional: true + + '@rollup/rollup-android-arm64@4.18.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.18.0': + optional: true + + '@rollup/rollup-darwin-x64@4.18.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.18.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.18.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.18.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.18.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.18.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.18.0': + optional: true + + '@sindresorhus/is@4.6.0': {} + + '@swc/core-darwin-arm64@1.5.7': + optional: true + + '@swc/core-darwin-x64@1.5.7': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.5.7': + optional: true + + '@swc/core-linux-arm64-gnu@1.5.7': + optional: true + + '@swc/core-linux-arm64-musl@1.5.7': + optional: true + + '@swc/core-linux-x64-gnu@1.5.7': + optional: true + + '@swc/core-linux-x64-musl@1.5.7': + optional: true + + '@swc/core-win32-arm64-msvc@1.5.7': + optional: true + + '@swc/core-win32-ia32-msvc@1.5.7': + optional: true + + '@swc/core-win32-x64-msvc@1.5.7': + optional: true + + '@swc/core@1.5.7': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.7 + optionalDependencies: + '@swc/core-darwin-arm64': 1.5.7 + '@swc/core-darwin-x64': 1.5.7 + '@swc/core-linux-arm-gnueabihf': 1.5.7 + '@swc/core-linux-arm64-gnu': 1.5.7 + '@swc/core-linux-arm64-musl': 1.5.7 + '@swc/core-linux-x64-gnu': 1.5.7 + '@swc/core-linux-x64-musl': 1.5.7 + '@swc/core-win32-arm64-msvc': 1.5.7 + '@swc/core-win32-ia32-msvc': 1.5.7 + '@swc/core-win32-x64-msvc': 1.5.7 + + '@swc/counter@0.1.3': {} + + '@swc/types@0.1.7': + dependencies: + '@swc/counter': 0.1.3 + + '@szmarczak/http-timer@4.0.6': + dependencies: + defer-to-connect: 2.0.1 + + '@tootallnate/once@2.0.0': {} + + '@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.2.5)': + dependencies: + '@babel/generator': 7.17.7 + '@babel/parser': 7.24.5 + '@babel/traverse': 7.23.2 + '@babel/types': 7.17.0 + javascript-natural-sort: 0.7.1 + lodash: 4.17.21 + prettier: 3.2.5 + transitivePeerDependencies: + - supports-color + + '@types/auto-launch@5.0.5': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.24.5 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.24.5 + + '@types/cacheable-request@6.0.3': + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 20.12.12 + '@types/responselike': 1.0.3 + + '@types/debug@4.1.12': + dependencies: + '@types/ms': 0.7.34 + + '@types/estree@1.0.5': {} + + '@types/fs-extra@9.0.13': + dependencies: + '@types/node': 20.12.12 + + '@types/http-cache-semantics@4.0.4': {} + + '@types/keyv@3.1.4': + dependencies: + '@types/node': 20.12.12 + + '@types/lodash@4.17.4': {} + + '@types/ms@0.7.34': {} + + '@types/node@20.12.12': + dependencies: + undici-types: 5.26.5 + + '@types/plist@3.0.5': + dependencies: + '@types/node': 20.12.12 + xmlbuilder: 15.1.1 + optional: true + + '@types/prop-types@15.7.12': {} + + '@types/qs@6.9.15': {} + + '@types/react-dom@18.3.0': + dependencies: + '@types/react': 18.3.3 + + '@types/react@18.3.3': + dependencies: + '@types/prop-types': 15.7.12 + csstype: 3.1.3 + + '@types/responselike@1.0.3': + dependencies: + '@types/node': 20.12.12 + + '@types/semver@7.5.8': {} + + '@types/verror@1.10.10': + optional: true + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 20.12.12 + optional: true + + '@typescript-eslint/eslint-plugin@7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 7.10.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.10.0 + '@typescript-eslint/type-utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.10.0 + eslint: 8.57.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/scope-manager': 7.10.0 + '@typescript-eslint/types': 7.10.0 + '@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.10.0 + debug: 4.3.4 + eslint: 8.57.0 + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@7.10.0': + dependencies: + '@typescript-eslint/types': 7.10.0 + '@typescript-eslint/visitor-keys': 7.10.0 + + '@typescript-eslint/type-utils@7.10.0(eslint@8.57.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5) + debug: 4.3.4 + eslint: 8.57.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@7.10.0': {} + + '@typescript-eslint/typescript-estree@7.10.0(typescript@5.4.5)': + dependencies: + '@typescript-eslint/types': 7.10.0 + '@typescript-eslint/visitor-keys': 7.10.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.4 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@7.10.0(eslint@8.57.0)(typescript@5.4.5)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@typescript-eslint/scope-manager': 7.10.0 + '@typescript-eslint/types': 7.10.0 + '@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5) + eslint: 8.57.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@7.10.0': + dependencies: + '@typescript-eslint/types': 7.10.0 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.2.0': {} + + '@vitejs/plugin-react@4.3.0(vite@5.2.11(@types/node@20.12.12))': + dependencies: + '@babel/core': 7.24.5 + '@babel/plugin-transform-react-jsx-self': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.5) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 5.2.11(@types/node@20.12.12) + transitivePeerDependencies: + - supports-color + + '@xmldom/xmldom@0.8.10': {} + + abbrev@1.1.1: {} + + acorn-jsx@5.3.2(acorn@8.11.3): + dependencies: + acorn: 8.11.3 + + acorn@8.11.3: {} + + agent-base@6.0.2: + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + agentkeepalive@4.5.0: + dependencies: + humanize-ms: 1.2.1 + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + ajv-formats@2.1.1(ajv@8.13.0): + optionalDependencies: + ajv: 8.13.0 + + ajv-keywords@3.5.2(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.13.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-regex@6.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + app-builder-bin@4.0.0: {} + + app-builder-lib@24.13.3(dmg-builder@24.13.3(electron-builder-squirrel-windows@25.0.0-alpha.8(dmg-builder@24.13.3)))(electron-builder-squirrel-windows@25.0.0-alpha.8(dmg-builder@24.13.3)): + 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 + dmg-builder: 24.13.3(electron-builder-squirrel-windows@25.0.0-alpha.8(dmg-builder@24.13.3)) + ejs: 3.1.10 + electron-builder-squirrel-windows: 25.0.0-alpha.8(dmg-builder@24.13.3) + 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.1 + isbinaryfile: 5.0.2 + js-yaml: 4.1.0 + lazy-val: 1.0.5 + minimatch: 5.1.6 + read-config-file: 6.3.2 + sanitize-filename: 1.6.3 + semver: 7.6.2 + tar: 6.2.1 + temp-file: 3.4.0 + transitivePeerDependencies: + - supports-color + + app-builder-lib@25.0.0-alpha.8(dmg-builder@24.13.3(electron-builder-squirrel-windows@25.0.0-alpha.8(dmg-builder@24.13.3)))(electron-builder-squirrel-windows@25.0.0-alpha.8(dmg-builder@24.13.3)): + dependencies: + '@develar/schema-utils': 2.6.5 + '@electron/notarize': 2.3.0 + '@electron/osx-sign': 1.3.0 + '@electron/rebuild': 3.6.0 + '@electron/universal': 2.0.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: 25.0.0-alpha.6 + builder-util-runtime: 9.2.5-alpha.2 + chromium-pickle-js: 0.2.0 + debug: 4.3.4 + dmg-builder: 24.13.3(electron-builder-squirrel-windows@25.0.0-alpha.8(dmg-builder@24.13.3)) + ejs: 3.1.10 + electron-builder-squirrel-windows: 25.0.0-alpha.8(dmg-builder@24.13.3) + electron-publish: 25.0.0-alpha.7 + form-data: 4.0.0 + fs-extra: 10.1.0 + hosted-git-info: 4.1.0 + is-ci: 3.0.1 + isbinaryfile: 5.0.2 + js-yaml: 4.1.0 + lazy-val: 1.0.5 + minimatch: 5.1.6 + read-config-file: 6.4.0 + sanitize-filename: 1.6.3 + semver: 7.6.2 + tar: 6.2.1 + temp-file: 3.4.0 + transitivePeerDependencies: + - bluebird + - supports-color + + applescript@1.0.0: {} + + aproba@2.0.0: {} + + archiver-utils@2.1.0: + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 2.3.8 + + archiver-utils@3.0.4: + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + + archiver@5.3.2: + dependencies: + archiver-utils: 2.1.0 + async: 3.2.5 + buffer-crc32: 0.2.13 + readable-stream: 3.6.2 + readdir-glob: 1.1.3 + tar-stream: 2.2.0 + zip-stream: 4.1.1 + + are-we-there-yet@3.0.1: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + + argparse@2.0.1: {} + + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + + array-includes@3.1.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + is-string: 1.0.7 + + array-union@2.1.0: {} + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + + array.prototype.flat@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + array.prototype.flatmap@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + array.prototype.toreversed@1.1.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + array.prototype.tosorted@1.1.3: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + + arraybuffer.prototype.slice@1.0.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + + assert-plus@1.0.0: + optional: true + + astral-regex@2.0.0: + optional: true + + async-exit-hook@2.0.1: {} + + async@3.2.5: {} + + asynckit@0.4.0: {} + + at-least-node@1.0.0: {} + + atomically@1.7.0: {} + + auto-launch@5.0.6: + dependencies: + applescript: 1.0.0 + mkdirp: 0.5.6 + path-is-absolute: 1.0.1 + untildify: 3.0.3 + winreg: 1.2.4 + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + bluebird-lst@1.0.9: + dependencies: + bluebird: 3.7.2 + + bluebird@3.7.2: {} + + boolean@3.2.0: + optional: true + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.23.0: + dependencies: + caniuse-lite: 1.0.30001621 + electron-to-chromium: 1.4.782 + node-releases: 2.0.14 + update-browserslist-db: 1.0.16(browserslist@4.23.0) + + buffer-crc32@0.2.13: {} + + buffer-equal@1.0.1: {} + + buffer-from@1.1.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + builder-util-runtime@9.2.3: + dependencies: + debug: 4.3.4 + sax: 1.3.0 + transitivePeerDependencies: + - supports-color + + builder-util-runtime@9.2.4: + dependencies: + debug: 4.3.4 + sax: 1.3.0 + transitivePeerDependencies: + - supports-color + + builder-util-runtime@9.2.5-alpha.2: + dependencies: + debug: 4.3.4 + sax: 1.3.0 + transitivePeerDependencies: + - supports-color + + builder-util@24.13.1: + dependencies: + 7zip-bin: 5.2.0 + '@types/debug': 4.1.12 + 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.1 + js-yaml: 4.1.0 + source-map-support: 0.5.21 + stat-mode: 1.0.0 + temp-file: 3.4.0 + transitivePeerDependencies: + - supports-color + + builder-util@25.0.0-alpha.6: + dependencies: + 7zip-bin: 5.2.0 + '@types/debug': 4.1.12 + app-builder-bin: 4.0.0 + bluebird-lst: 1.0.9 + builder-util-runtime: 9.2.5-alpha.2 + 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.1 + js-yaml: 4.1.0 + source-map-support: 0.5.21 + stat-mode: 1.0.0 + temp-file: 3.4.0 + transitivePeerDependencies: + - supports-color + + cac@6.7.14: {} + + cacache@16.1.3: + dependencies: + '@npmcli/fs': 2.1.2 + '@npmcli/move-file': 2.0.1 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 8.1.0 + infer-owner: 1.0.4 + lru-cache: 7.18.3 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 1.0.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + rimraf: 3.0.2 + ssri: 9.0.1 + tar: 6.2.1 + unique-filename: 2.0.1 + transitivePeerDependencies: + - bluebird + + cacheable-lookup@5.0.4: {} + + cacheable-request@7.0.4: + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + + call-bind@1.0.7: + 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.2 + + callsites@3.1.0: {} + + camel-case@4.1.2: + dependencies: + pascal-case: 3.1.2 + tslib: 2.6.2 + + caniuse-lite@1.0.30001621: {} + + capital-case@1.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + upper-case-first: 2.0.2 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + change-case@4.1.2: + dependencies: + camel-case: 4.1.2 + capital-case: 1.0.4 + constant-case: 3.0.4 + dot-case: 3.0.4 + header-case: 2.0.4 + no-case: 3.0.4 + param-case: 3.0.4 + pascal-case: 3.1.2 + path-case: 3.0.4 + sentence-case: 3.0.4 + snake-case: 3.0.4 + tslib: 2.6.2 + + chownr@2.0.0: {} + + chromium-pickle-js@0.2.0: {} + + ci-info@3.9.0: {} + + clean-stack@2.2.0: {} + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-spinners@2.9.2: {} + + cli-truncate@2.1.0: + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.3 + optional: true + + client-only@0.0.1: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone-response@1.0.3: + dependencies: + mimic-response: 1.0.1 + + clone@1.0.4: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-support@1.1.3: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@5.1.0: {} + + compare-version@0.1.2: {} + + compress-commons@4.1.2: + dependencies: + buffer-crc32: 0.2.13 + crc32-stream: 4.0.3 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + + concat-map@0.0.1: {} + + conf@10.2.0: + dependencies: + ajv: 8.13.0 + ajv-formats: 2.1.1(ajv@8.13.0) + atomically: 1.7.0 + debounce-fn: 4.0.0 + dot-prop: 6.0.1 + env-paths: 2.2.1 + json-schema-typed: 7.0.3 + onetime: 5.1.2 + pkg-up: 3.1.0 + semver: 7.6.2 + + config-file-ts@0.2.6: + dependencies: + glob: 10.4.1 + typescript: 5.4.5 + + config-file-ts@0.2.8-rc1: + dependencies: + glob: 10.4.1 + typescript: 5.4.5 + + consola@2.15.3: {} + + console-control-strings@1.1.0: {} + + constant-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + upper-case: 2.0.2 + + convert-source-map@2.0.0: {} + + core-util-is@1.0.2: + optional: true + + core-util-is@1.0.3: {} + + crc-32@1.2.2: {} + + crc32-stream@4.0.3: + dependencies: + crc-32: 1.2.2 + readable-stream: 3.6.2 + + crc@3.8.0: + dependencies: + buffer: 5.7.1 + optional: true + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + csstype@3.1.3: {} + + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + debounce-fn@4.0.0: + dependencies: + mimic-fn: 3.1.0 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + deep-is@0.1.4: {} + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + defer-to-connect@2.0.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delayed-stream@1.0.0: {} + + delegates@1.0.0: {} + + detect-libc@2.0.3: {} + + detect-node@2.1.0: + optional: true + + dir-compare@3.3.0: + dependencies: + buffer-equal: 1.0.1 + minimatch: 3.1.2 + + dir-compare@4.2.0: + dependencies: + minimatch: 3.1.2 + p-limit: 3.1.0 + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dmg-builder@24.13.3(electron-builder-squirrel-windows@25.0.0-alpha.8(dmg-builder@24.13.3)): + dependencies: + app-builder-lib: 24.13.3(dmg-builder@24.13.3(electron-builder-squirrel-windows@25.0.0-alpha.8(dmg-builder@24.13.3)))(electron-builder-squirrel-windows@25.0.0-alpha.8(dmg-builder@24.13.3)) + builder-util: 24.13.1 + builder-util-runtime: 9.2.4 + fs-extra: 10.1.0 + iconv-lite: 0.6.3 + js-yaml: 4.1.0 + optionalDependencies: + dmg-license: 1.0.11 + transitivePeerDependencies: + - electron-builder-squirrel-windows + - supports-color + + dmg-license@1.0.11: + dependencies: + '@types/plist': 3.0.5 + '@types/verror': 1.10.10 + ajv: 6.12.6 + crc: 3.8.0 + iconv-corefoundation: 1.1.7 + plist: 3.1.0 + smart-buffer: 4.2.0 + verror: 1.10.1 + optional: true + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + + dot-prop@6.0.1: + dependencies: + is-obj: 2.0.0 + + dotenv-expand@11.0.6: + dependencies: + dotenv: 16.4.5 + + dotenv-expand@5.1.0: {} + + dotenv@16.4.5: {} + + dotenv@9.0.2: {} + + eastasianwidth@0.2.0: {} + + ejs@3.1.10: + dependencies: + jake: 10.9.1 + + electron-builder-squirrel-windows@25.0.0-alpha.8(dmg-builder@24.13.3): + dependencies: + app-builder-lib: 25.0.0-alpha.8(dmg-builder@24.13.3(electron-builder-squirrel-windows@25.0.0-alpha.8(dmg-builder@24.13.3)))(electron-builder-squirrel-windows@25.0.0-alpha.8(dmg-builder@24.13.3)) + archiver: 5.3.2 + builder-util: 25.0.0-alpha.6 + fs-extra: 10.1.0 + transitivePeerDependencies: + - bluebird + - dmg-builder + - supports-color + + electron-builder@24.13.3(electron-builder-squirrel-windows@25.0.0-alpha.8(dmg-builder@24.13.3)): + dependencies: + app-builder-lib: 24.13.3(dmg-builder@24.13.3(electron-builder-squirrel-windows@25.0.0-alpha.8(dmg-builder@24.13.3)))(electron-builder-squirrel-windows@25.0.0-alpha.8(dmg-builder@24.13.3)) + builder-util: 24.13.1 + builder-util-runtime: 9.2.4 + chalk: 4.1.2 + dmg-builder: 24.13.3(electron-builder-squirrel-windows@25.0.0-alpha.8(dmg-builder@24.13.3)) + fs-extra: 10.1.0 + is-ci: 3.0.1 + lazy-val: 1.0.5 + read-config-file: 6.3.2 + simple-update-notifier: 2.0.0 + yargs: 17.7.2 + transitivePeerDependencies: + - electron-builder-squirrel-windows + - supports-color + + electron-log@5.1.4: {} + + electron-publish@24.13.1: + dependencies: + '@types/fs-extra': 9.0.13 + 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.6.0 + transitivePeerDependencies: + - supports-color + + electron-publish@25.0.0-alpha.7: + dependencies: + '@types/fs-extra': 9.0.13 + builder-util: 25.0.0-alpha.6 + builder-util-runtime: 9.2.5-alpha.2 + chalk: 4.1.2 + fs-extra: 10.1.0 + lazy-val: 1.0.5 + mime: 2.6.0 + transitivePeerDependencies: + - supports-color + + electron-store@8.2.0: + dependencies: + conf: 10.2.0 + type-fest: 2.19.0 + + electron-to-chromium@1.4.782: {} + + electron-updater@6.1.8: + dependencies: + builder-util-runtime: 9.2.3 + fs-extra: 10.1.0 + js-yaml: 4.1.0 + lazy-val: 1.0.5 + lodash.escaperegexp: 4.1.2 + lodash.isequal: 4.5.0 + semver: 7.6.2 + tiny-typed-emitter: 2.1.0 + transitivePeerDependencies: + - supports-color + + electron-vite@2.2.0(@swc/core@1.5.7)(vite@5.2.11(@types/node@20.12.12)): + dependencies: + '@babel/core': 7.24.5 + '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.5) + cac: 6.7.14 + esbuild: 0.19.12 + magic-string: 0.30.10 + picocolors: 1.0.1 + vite: 5.2.11(@types/node@20.12.12) + optionalDependencies: + '@swc/core': 1.5.7 + transitivePeerDependencies: + - supports-color + + electron@30.0.8: + dependencies: + '@electron/get': 2.0.3 + '@types/node': 20.12.12 + extract-zip: 2.0.1 + transitivePeerDependencies: + - supports-color + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + optional: true + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + env-paths@2.2.1: {} + + err-code@2.0.3: {} + + es-abstract@1.23.3: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.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: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es-iterator-helpers@1.0.19: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + 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: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.0.2: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.2.1: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + + es6-error@4.1.1: + optional: true + + esbuild@0.19.12: + 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.2: + 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.2: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@9.1.0(eslint@8.57.0): + dependencies: + eslint: 8.57.0 + + eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5): + dependencies: + eslint: 8.57.0 + prettier: 3.2.5 + prettier-linter-helpers: 1.0.0 + synckit: 0.8.8 + optionalDependencies: + eslint-config-prettier: 9.1.0(eslint@8.57.0) + + eslint-plugin-react@7.34.1(eslint@8.57.0): + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + 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.19 + eslint: 8.57.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.hasown: 1.1.4 + object.values: 1.2.0 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.11 + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.10.0 + '@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.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + 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.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + 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.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 + + esquery@1.5.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + exponential-backoff@3.1.1: {} + + extract-zip@2.0.1: + dependencies: + debug: 4.3.4 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + + extsprintf@1.4.1: + optional: true + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.7 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-safe-stringify@2.1.1: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@3.0.0: + dependencies: + locate-path: 3.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.3.1: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.1.1: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fs-constants@1.0.0: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@11.2.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + functions-have-names: 1.2.3 + + functions-have-names@1.2.3: {} + + gauge@4.0.4: + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-stream@5.2.0: + dependencies: + pump: 3.0.0 + + get-symbol-description@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.1: + dependencies: + foreground-child: 3.1.1 + jackspeak: 3.1.2 + minimatch: 9.0.4 + minipass: 7.1.2 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + + global-agent@3.0.0: + dependencies: + boolean: 3.2.0 + es6-error: 4.1.1 + matcher: 3.0.0 + roarr: 2.15.4 + semver: 7.6.2 + serialize-error: 7.0.1 + optional: true + + globals@11.12.0: {} + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + got@11.8.6: + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-bigints@1.0.2: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + has-unicode@2.0.1: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + header-case@2.0.4: + dependencies: + capital-case: 1.0.4 + tslib: 2.6.2 + + hosted-git-info@4.1.0: + dependencies: + lru-cache: 6.0.0 + + html-parse-stringify@3.0.1: + dependencies: + void-elements: 3.1.0 + + http-cache-semantics@4.1.1: {} + + http-proxy-agent@5.0.0: + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + http2-wrapper@1.0.3: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + i18next@23.11.5: + dependencies: + '@babel/runtime': 7.24.5 + + iconv-corefoundation@1.1.7: + dependencies: + cli-truncate: 2.1.0 + node-addon-api: 1.7.2 + optional: true + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore@5.3.1: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + + infer-owner@1.0.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + internal-slot@1.0.7: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + is-async-function@2.0.0: + dependencies: + has-tostringtag: 1.0.2 + + is-bigint@1.0.4: + dependencies: + has-bigints: 1.0.2 + + is-boolean-object@1.1.2: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + + is-ci@3.0.1: + dependencies: + ci-info: 3.9.0 + + is-core-module@2.13.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.1: + dependencies: + is-typed-array: 1.1.13 + + is-date-object@1.0.5: + dependencies: + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.0.2: + dependencies: + call-bind: 1.0.7 + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-interactive@1.0.0: {} + + is-lambda@1.0.1: {} + + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-obj@2.0.0: {} + + is-path-inside@3.0.3: {} + + is-regex@1.1.4: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.7 + + is-string@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-symbol@1.0.4: + dependencies: + has-symbols: 1.0.3 + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-unicode-supported@0.1.0: {} + + is-weakmap@2.0.2: {} + + is-weakref@1.0.2: + dependencies: + call-bind: 1.0.7 + + is-weakset@2.0.3: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + isarray@1.0.0: {} + + isarray@2.0.5: {} + + isbinaryfile@4.0.10: {} + + isbinaryfile@5.0.2: {} + + isexe@2.0.0: {} + + iterare@1.2.1: {} + + iterator.prototype@1.1.2: + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.6 + set-function-name: 2.0.2 + + jackspeak@3.1.2: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jake@10.9.1: + dependencies: + async: 3.2.5 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + javascript-natural-sort@0.7.1: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsbn@1.1.0: {} + + jsesc@2.5.2: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-schema-typed@7.0.3: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json-stringify-safe@5.0.1: + optional: true + + json5@2.2.3: {} + + jsonc-parser@3.2.1: {} + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.8 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.2.0 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + lazy-val@1.0.5: {} + + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + locate-path@3.0.0: + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.defaults@4.2.0: {} + + lodash.difference@4.5.0: {} + + lodash.escaperegexp@4.1.2: {} + + lodash.flatten@4.4.0: {} + + lodash.isequal@4.5.0: {} + + lodash.isplainobject@4.0.6: {} + + lodash.merge@4.6.2: {} + + lodash.union@4.6.0: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lower-case@2.0.2: + dependencies: + tslib: 2.6.2 + + lowercase-keys@2.0.0: {} + + lru-cache@10.2.2: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + lru-cache@7.18.3: {} + + magic-string@0.30.10: + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + + make-fetch-happen@10.2.1: + dependencies: + agentkeepalive: 4.5.0 + cacache: 16.1.3 + http-cache-semantics: 4.1.1 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 7.18.3 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-fetch: 2.1.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.3 + promise-retry: 2.0.1 + socks-proxy-agent: 7.0.0 + ssri: 9.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + + matcher@3.0.0: + dependencies: + escape-string-regexp: 4.0.0 + optional: true + + merge2@1.4.1: {} + + micromatch@4.0.7: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@2.6.0: {} + + mimic-fn@2.1.0: {} + + mimic-fn@3.1.0: {} + + mimic-response@1.0.1: {} + + mimic-response@3.1.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.4: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass-collect@1.0.2: + dependencies: + minipass: 3.3.6 + + minipass-fetch@2.1.2: + dependencies: + minipass: 3.3.6 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + + minipass-flush@1.0.5: + dependencies: + minipass: 3.3.6 + + minipass-pipeline@1.2.4: + dependencies: + minipass: 3.3.6 + + minipass-sized@1.0.3: + dependencies: + minipass: 3.3.6 + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + + minipass@7.1.2: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mkdirp@1.0.4: {} + + ms@2.1.2: {} + + ms@2.1.3: {} + + nanoid@3.3.7: {} + + natural-compare@1.4.0: {} + + negotiator@0.6.3: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.6.2 + + node-abi@3.62.0: + dependencies: + semver: 7.6.2 + + node-addon-api@1.7.2: + optional: true + + node-api-version@0.2.0: + dependencies: + semver: 7.6.2 + + node-fetch@2.7.0(encoding@0.1.13): + dependencies: + whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 + + node-gyp@9.4.1: + dependencies: + env-paths: 2.2.1 + exponential-backoff: 3.1.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + make-fetch-happen: 10.2.1 + nopt: 6.0.0 + npmlog: 6.0.2 + rimraf: 3.0.2 + semver: 7.6.2 + tar: 6.2.1 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + + node-releases@2.0.14: {} + + nopt@6.0.0: + dependencies: + abbrev: 1.1.1 + + normalize-path@3.0.0: {} + + normalize-url@6.1.0: {} + + npmlog@6.0.2: + dependencies: + are-we-there-yet: 3.0.1 + console-control-strings: 1.1.0 + gauge: 4.0.4 + set-blocking: 2.0.0 + + object-assign@4.1.1: {} + + object-inspect@1.13.1: {} + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + object.entries@1.1.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + object.hasown@1.1.4: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + object.values@1.2.0: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + p-cancelable@2.1.1: {} + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@3.0.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + + p-try@2.2.0: {} + + param-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + + path-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + + path-exists@3.0.0: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.2.2 + minipass: 7.1.2 + + path-to-regexp@3.2.0: {} + + path-to-regexp@6.2.2: {} + + path-type@4.0.0: {} + + pend@1.2.0: {} + + picocolors@1.0.1: {} + + picomatch@2.3.1: {} + + pkg-up@3.1.0: + dependencies: + find-up: 3.0.0 + + plist@3.1.0: + dependencies: + '@xmldom/xmldom': 0.8.10 + base64-js: 1.5.1 + xmlbuilder: 15.1.1 + + possible-typed-array-names@1.0.0: {} + + postcss@8.4.38: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@3.2.5: {} + + process-nextick-args@2.0.1: {} + + progress@2.0.3: {} + + promise-inflight@1.0.1: {} + + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + pump@3.0.0: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + quick-lru@5.1.1: {} + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-hook-form@7.51.5(react@18.3.1): + dependencies: + react: 18.3.1 + + react-i18next@14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.24.5 + html-parse-stringify: 3.0.1 + i18next: 23.11.5 + react: 18.3.1 + optionalDependencies: + react-dom: 18.3.1(react@18.3.1) + + react-is@16.13.1: {} + + react-refresh@0.14.2: {} + + react-router-dom@6.23.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@remix-run/router': 1.16.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-router: 6.23.1(react@18.3.1) + + react-router@6.23.1(react@18.3.1): + dependencies: + '@remix-run/router': 1.16.1 + react: 18.3.1 + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + read-binary-file-arch@1.0.6: + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + read-config-file@6.3.2: + dependencies: + config-file-ts: 0.2.6 + dotenv: 9.0.2 + dotenv-expand: 5.1.0 + js-yaml: 4.1.0 + json5: 2.2.3 + lazy-val: 1.0.5 + + read-config-file@6.4.0: + dependencies: + config-file-ts: 0.2.8-rc1 + dotenv: 16.4.5 + dotenv-expand: 11.0.6 + js-yaml: 4.1.0 + json5: 2.2.3 + lazy-val: 1.0.5 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdir-glob@1.1.3: + dependencies: + minimatch: 5.1.6 + + reflect-metadata@0.2.2: {} + + reflect.getprototypeof@1.0.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + which-builtin-type: 1.1.3 + + regenerator-runtime@0.14.1: {} + + regexp.prototype.flags@1.5.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-alpn@1.2.1: {} + + resolve-from@4.0.0: {} + + resolve@2.0.0-next.5: + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + responselike@2.0.1: + dependencies: + lowercase-keys: 2.0.0 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + retry@0.12.0: {} + + reusify@1.0.4: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + roarr@2.15.4: + dependencies: + boolean: 3.2.0 + detect-node: 2.1.0 + globalthis: 1.0.4 + json-stringify-safe: 5.0.1 + semver-compare: 1.0.0 + sprintf-js: 1.1.3 + optional: true + + rollup@4.18.0: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.18.0 + '@rollup/rollup-android-arm64': 4.18.0 + '@rollup/rollup-darwin-arm64': 4.18.0 + '@rollup/rollup-darwin-x64': 4.18.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 + '@rollup/rollup-linux-arm-musleabihf': 4.18.0 + '@rollup/rollup-linux-arm64-gnu': 4.18.0 + '@rollup/rollup-linux-arm64-musl': 4.18.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 + '@rollup/rollup-linux-riscv64-gnu': 4.18.0 + '@rollup/rollup-linux-s390x-gnu': 4.18.0 + '@rollup/rollup-linux-x64-gnu': 4.18.0 + '@rollup/rollup-linux-x64-musl': 4.18.0 + '@rollup/rollup-win32-arm64-msvc': 4.18.0 + '@rollup/rollup-win32-ia32-msvc': 4.18.0 + '@rollup/rollup-win32-x64-msvc': 4.18.0 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.1: + dependencies: + tslib: 2.6.2 + + safe-array-concat@1.1.2: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-regex-test@1.0.3: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + + safer-buffer@2.1.2: {} + + sanitize-filename@1.6.3: + dependencies: + truncate-utf8-bytes: 1.0.2 + + sax@1.3.0: {} + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + semver-compare@1.0.0: + optional: true + + semver@6.3.1: {} + + semver@7.6.2: {} + + sentence-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + upper-case-first: 2.0.2 + + serialize-error@7.0.1: + dependencies: + type-fest: 0.13.1 + optional: true + + set-blocking@2.0.0: {} + + set-function-length@1.2.2: + 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.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-update-notifier@2.0.0: + dependencies: + semver: 7.6.2 + + slash@3.0.0: {} + + slice-ansi@3.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + optional: true + + smart-buffer@4.2.0: {} + + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + + socks-proxy-agent@7.0.0: + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + + socks@2.8.3: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + + source-map-js@1.2.0: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.5.7: {} + + source-map@0.6.1: {} + + sprintf-js@1.1.3: {} + + ssri@9.0.1: + dependencies: + minipass: 3.3.6 + + stat-mode@1.0.0: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string.prototype.matchall@4.0.11: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + 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: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + string.prototype.trimend@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 + + strip-json-comments@3.1.1: {} + + sumchecker@3.0.1: + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + swr@2.2.5(react@18.3.1): + dependencies: + client-only: 0.0.1 + react: 18.3.1 + use-sync-external-store: 1.2.2(react@18.3.1) + + synckit@0.8.8: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.6.2 + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + temp-file@3.4.0: + dependencies: + async-exit-hook: 2.0.1 + fs-extra: 10.1.0 + + text-table@0.2.0: {} + + tiny-typed-emitter@2.1.0: {} + + tmp-promise@3.0.3: + dependencies: + tmp: 0.2.3 + + tmp@0.2.3: {} + + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tr46@0.0.3: {} + + truncate-utf8-bytes@1.0.2: + dependencies: + utf8-byte-length: 1.0.5 + + ts-api-utils@1.3.0(typescript@5.4.5): + dependencies: + typescript: 5.4.5 + + tslib@2.6.2: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.13.1: + optional: true + + type-fest@0.20.2: {} + + type-fest@2.19.0: {} + + typed-array-buffer@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + + typed-array-byte-length@1.0.1: + 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: + 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: + 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 + + typescript@5.4.5: {} + + uid@2.0.2: + dependencies: + '@lukeed/csprng': 1.1.0 + + unbox-primitive@1.0.2: + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + + undici-types@5.26.5: {} + + unique-filename@2.0.1: + dependencies: + unique-slug: 3.0.0 + + unique-slug@3.0.0: + dependencies: + imurmurhash: 0.1.4 + + universalify@0.1.2: {} + + universalify@2.0.1: {} + + untildify@3.0.3: {} + + update-browserslist-db@1.0.16(browserslist@4.23.0): + dependencies: + browserslist: 4.23.0 + escalade: 3.1.2 + picocolors: 1.0.1 + + upper-case-first@2.0.2: + dependencies: + tslib: 2.6.2 + + upper-case@2.0.2: + dependencies: + tslib: 2.6.2 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + use-sync-external-store@1.2.2(react@18.3.1): + dependencies: + react: 18.3.1 + + utf8-byte-length@1.0.5: {} + + util-deprecate@1.0.2: {} + + verror@1.10.1: + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.4.1 + optional: true + + vite@5.2.11(@types/node@20.12.12): + dependencies: + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.18.0 + optionalDependencies: + '@types/node': 20.12.12 + fsevents: 2.3.3 + + void-elements@3.1.0: {} + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-boxed-primitive@1.0.2: + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + + which-builtin-type@1.1.3: + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.2 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-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.2 + which-typed-array: 1.1.15 + + which-collection@1.0.2: + 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.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wide-align@1.1.5: + dependencies: + string-width: 4.2.3 + + winreg@1.2.4: {} + + word-wrap@1.2.5: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + xmlbuilder@15.1.1: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yocto-queue@0.1.0: {} + + zip-stream@4.1.1: + dependencies: + archiver-utils: 3.0.4 + compress-commons: 4.1.2 + readable-stream: 3.6.2 diff --git a/resources/icons/logo@256.ico b/resources/icons/logo@256.ico new file mode 100644 index 0000000000000000000000000000000000000000..b802f0c10371432ae6f4af8f6c677c55d84eef14 GIT binary patch literal 40382 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 literal 0 HcmV?d00001 diff --git a/resources/icons/logo@512.png b/resources/icons/logo@512.png new file mode 100644 index 0000000000000000000000000000000000000000..a834ad0789030c021a435d3a85382fc2b87607f6 GIT binary patch literal 105048 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

lpwGW5YU2(WQ*0*1L{^H5 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 z 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 literal 0 HcmV?d00001 diff --git a/resources/locales/en_US.json b/resources/locales/en_US.json new file mode 100644 index 0000000..42ef0e5 --- /dev/null +++ b/resources/locales/en_US.json @@ -0,0 +1,306 @@ +{ + "label": "English", + "league": { + "laneEn": { + "top": "Top", + "jg": "Jungle", + "mid": "Middle", + "adc": "ADC", + "sup": "Support" + }, + "laneId": [ + "$t(league.laneEn.top)", + "$t(league.laneEn.jg)", + "$t(league.laneEn.mid)", + "$t(league.laneEn.adc)", + "$t(league.laneEn.sup)" + ], + "gameMode": { + "CLASSIC": "Summoner's Rift", + "ARAM": "ARAM", + "URF": "U.R.F." + }, + "pickType": { + "SimulPickStrategy": "Blind Pick", + "TournamentPickStrategy": "Tournament Draft", + "DraftModeSinglePickStrategy": "Draft Pick", + "AllRandomPickStrategy": "All Random" + }, + "rune": { + "Shard": "Shard", + "HealthScaling": "Health Scaling", + "Armor": "Armor", + "MagicRes": "Magic Res", + "AttackSpeed": "Attack Speed", + "CDRScaling": "Skill Acceleration", + "AdaptiveForce": "Adaptive Force" + }, + /** + * Champion Name Alias + * + * [key] champion id + * [value] champion name alias array + * + * ex) "Aatrox": ["testName1", "abc"] + * => When searching for champions, you can search for "Aatrox" as "testName1", "abc" + * + * Champion ID Reference Link: http://ddragon.leagueoflegends.com/cdn/13.19.1/data/en_US/champion.json + */ + "championNameAlias": {}, + "statsRankRange": { + "EMERALD+": "EMERALD+", + "DIAMOND+": "DIAMOND+", + "MASTER+": "MASTER+", + "BSGP": "BSGP" + } + }, + "main": { + "contextMenu": { + "showHome": "Show LADA Home", + "setAppZoom": "Set App Display Scale", + "quit": "Quit LADA", + "nowValue": "Now", + "resetWindowPosition": "Reset Window Position" + } + }, + "renderer": { + "pages": { + "stats": "Statistics", + "championTier": "Champion Tiers", + "championDetail": "Champion Detail", + "duoSynergy": "Duo Synergy", + "live": "Live", + "championSelect": "Champion Select", + "inGame": "In Game", + "utility": "Utility", + "customGameTeamManager": "5:5 Team Manager", + "setting": "Setting", + "generalSetting": "General", + "gameSetting": "Game", + "developerSetting": "Developer", + "notFound": "Page Not Found :(" + }, + "form": { + "save": { + "title": "There are unsaved changes!", + "ok": "Save changes", + "rollback": "Rollback", + "confirm": { + "title": "Are you sure you want to save?", + "ok": "Save", + "cancel": "Cancel" + } + } + }, + "stats": { + "gameCount": "Count", + "sampledCount": "Sampled", + "winRate": "Win Rate", + "pickRate": "Pick Rate", + "banRate": "Ban Rate", + "spell": "Spell", + "skillBuild": "Skill Build", + "startItem": "Starting Item", + "shoes": "Shoes", + "coreItem": "Core Item", + "recommendItemBuild": "Recommended Item Build", + "championTier": { + "title": "Champion Tier by Lane", + "loading": "Loading...", + "timezone": "KST Timezone", + "minPickRateInfo": "Only showing lanes with pick rate above 0.5%", + "tableColumns": { + "score": "PS Score", + "honeyScore": "Honey Score" + } + }, + "champion": { + "counter": { + "easy": "Easy Matchup", + "hard": "Hard Matchup" + }, + "notFound": { + "title": "No data to display", + "description": "Please select a different lane." + } + }, + "championSelect": { + "notFound": { + "title": "Cannot fetch champion select information", + "description": "Either not currently in a game or unable to fetch champion select information." + } + }, + "duoSynergy": { + "title": "Duo Synergy", + "searchPlaceholder": "Search by Champion Name", + "tableColumns": { + "ranking": "Ranking", + "synergyScore": "Synergy Score", + "winRate": "Duo Win Rate", + "pickRate": "Duo Pick Rate" + }, + "lane": { + "adc-sup": "$t(league.laneEn.adc) & $t(league.laneEn.sup)", + "mid-jg": "$t(league.laneEn.mid) & $t(league.laneEn.jg)", + "top-jg": "$t(league.laneEn.top) & $t(league.laneEn.jg)", + "jg-sup": "$t(league.laneEn.jg) & $t(league.laneEn.sup)" + } + }, + "inGame": { + "title": "In-Game Information", + "tags": { + "gameType": "Solo/Duo Ranked", + "avg": "Average", + "avgNotFound": "Average tier information not available", + "playing": "In Game" + }, + "myTeam": "My Team", + "enemyTeam": "Enemy Team", + "rankStats": "Rank Stats", + "score": "PS Score", + "runeBuild": "Rune Build", + "game": "Game", + "notFound": { + "title": "Cannot fetch in-game information", + "description": "Either not currently in a game or unable to fetch in-game information.", + "reload": "Reload" + } + } + }, + "setting": { + "general": { + "autoLaunch": { + "title": "Automatically Start Minimized on Computer Boot", + "description": "Automatically starts the app in minimized mode after the computer is turned on." + }, + "openWindowWhenLeagueClientLaunch": { + "title": "Automatically Open LADA Window", + "description": "Opens LADA window automatically when the League of Legends client starts.\nLADA should be running in minimized mode." + }, + "language": { + "title": "Language Settings", + "description": "Sets the language for LADA.\nChanging the language requires a restart of the app." + }, + "zoom": { + "title": "App Zoom Level", + "description": "Sets the zoom level of the app screen.\nDefault is 100%." + }, + "developerMode": { + "title": "Developer Mode Settings", + "description": "Enables or disables developer mode.\nWhen enabled, developer tools are activated." + }, + "restoreWindowPosition": { + "title": "Restore Window Position", + "description": "Opens to the previous location when the LADA window is lit.\nIt always opens in the center of the screen when disabled." + }, + "appVersion": { + "title": "App Version", + "description": "Displays the current version of the app.\nYou can check the changes through the following link.", + "releaseList": "App Release List", + "updateNote": "Update Notes", + "updateStatus": { + "currentVersion": "Current Version", + "checking-for-update": { + "description": "Checking for updates..." + }, + "update-available": { + "description": "Update available. Downloading..." + }, + "update-not-available": { + "description": "Up to date.", + "checkForUpdate": "Check for Update" + }, + "error": { + "description": "Error occurred while checking for updates.", + "checkForUpdate": "Check for Update" + }, + "download-progress": { + "description": "Downloading..." + }, + "update-downloaded": { + "description": "Update downloaded.\nThe app will apply the update upon restart.", + "quitAndInstall": "Install Now" + } + } + } + }, + "game": { + "statsProvider": { + "title": "Statistics Provider", + "description": "Selects the service providing statistical information.\nCan change services providing data such as champion tier.\n\nCurrently supporting only LOL.PS." + }, + "useCurrentPositionChampionData": { + "title": "Champion Information - Priority by Current Position", + "description": "Displays champion information based on the current assigned position.\nDisabling this will show the champion's main position by default." + }, + "autoAccept": { + "title": "Auto Accept Matchmaking", + "description": "Automatically accepts game matchmaking.\nWhen enabled, matches are accepted without needing to click the accept button.", + "autoAcceptDelaySeconds": { + "label": "Time to Wait for Auto Accept", + "seconds": "seconds" + } + }, + "autoRuneSetting": { + "title": "Auto Rune Settings", + "description": "Automatically sets rune pages during champion selection." + }, + "autoSummonerSpellSetting": { + "title": "Auto Summoner Spell Settings", + "description": "Automatically sets summoner spells during champion selection.", + "flash": "Flash" + } + }, + "developer": { + "dataRefreshTime": { + "title": "Data Refresh Date", + "description": "Below is the refresh date for all data.\nIt automatically refreshes every {{minute}} minutes.\n\nTo manually update the data, click the refresh button on the right.", + "refresh": "reload" + }, + "storePath": { + "title": "Store Path", + "description": "Path where settings and data are stored." + }, + "logs": { + "title": "Logs", + "description": "Logs generated by the app.\nIf necessary, you can delete logs using the button on the right.", + "logSize": "Log Size", + "clear": "Clear Logs" + } + } + }, + "needUpdateLaterNotification": { + "title": "Update Pending", + "description": "An update is pending while you're in champion select.\nThe update will proceed when you restart the app.\n\nYou can also manually update: [General Settings > App Version]" + }, + "updateLoading": { + "loading": "Downloading Update...", + "autoRestart": "The app will restart shortly." + }, + "teamManager": { + "subTitle": "Summoner's Rift ยท 5v5 ยท {{pickType}}", + "team": "Team", + "empty": "Empty", + "randomTeam": "Randomize Teams", + "reset": "Reset", + "notFound": { + "title": "Create a Custom Game", + "description": "Start a game > Create custom game > Choose Summoner's Rift as the map." + } + }, + "updateNote": "Update Notes", + "autoAcceptOverlay": "Auto accept in {{seconds}} seconds", + "languageChangeInfoModal": { + "title": "App Restart Required", + "description": "The app needs to restart to apply the language changes.", + "ok": "Restart Now", + "later": "Later" + }, + "error": { + "title": "Seems like you wandered into unknown territory", + "description": "We'll investigate. It might be best for you to head back.", + "back": "Go Back", + "errorContent": "Error Content" + } + } +} \ No newline at end of file diff --git a/resources/locales/ko_KR.json b/resources/locales/ko_KR.json new file mode 100644 index 0000000..0aa49ac --- /dev/null +++ b/resources/locales/ko_KR.json @@ -0,0 +1,374 @@ +{ + "label": "ํ•œ๊ตญ์–ด", + "league": { + "laneEn": { + "top": "ํƒ‘", + "jg": "์ •๊ธ€", + "mid": "๋ฏธ๋“œ", + "adc": "์›๋”œ", + "sup": "์„œํฟ" + }, + "laneId": [ + "$t(league.laneEn.top)", + "$t(league.laneEn.jg)", + "$t(league.laneEn.mid)", + "$t(league.laneEn.adc)", + "$t(league.laneEn.sup)" + ], + "gameMode": { + "CLASSIC": "์†Œํ™˜์‚ฌ์˜ ํ˜‘๊ณก", + "ARAM": "์นผ๋ฐ”๋žŒ ๋‚˜๋ฝ", + "URF": "์šฐ๋ฅดํ”„" + }, + "pickType": { + "SimulPickStrategy": "๋น„๊ณต๊ฐœ ์„ ํƒ", + "TournamentPickStrategy": "ํ† ๋„ˆ๋จผํŠธ ๋“œ๋ž˜ํ”„ํŠธ", + "DraftModeSinglePickStrategy": "๊ต์ฐจ ์„ ํƒ", + "AllRandomPickStrategy": "๋ชจ๋‘ ๋ฌด์ž‘์œ„" + }, + "rune": { + "Shard": "ํŒŒํŽธ", + "HealthScaling": "์ฒด๋ ฅ ์ฆ๊ฐ€", + "Armor": "๋ฐฉ์–ด๋ ฅ", + "MagicRes": "๋งˆ๋ฒ• ์ €ํ•ญ๋ ฅ", + "AttackSpeed": "๊ณต๊ฒฉ ์†๋„", + "CDRScaling": "์Šคํ‚ฌ ๊ฐ€์†", + "AdaptiveForce": "์ ์‘ํ˜• ๋Šฅ๋ ฅ์น˜" + }, + /** + * Champion Name Alias + * + * [key] champion id + * [value] champion name alias array + * + * ex) "Aatrox": ["testName1", "abc"] + * => When searching for champions, you can search for "Aatrox" as "testName1", "abc" + * + * Champion ID Reference Link: http://ddragon.leagueoflegends.com/cdn/13.19.1/data/en_US/champion.json + */ + "championNameAlias": { + "Tristana": [ + "ํŠธํƒ€" + ], + "TwistedFate": [ + "ํŠธํŽ˜" + ], + "Tryndamere": [ + "ํŠธ๋ฆฐ", + "ํŠธ๋ž€" + ], + "Blitzcrank": [ + "๋ธ”์ธ ", + "๊นกํ†ต" + ], + "Heimerdinger": [ + "ํ•˜๋”ฉ" + ], + "Volibear": [ + "๋ณผ๋ฒ " + ], + "MasterYi": [ + "๋งˆ์ด" + ], + "Graves": [ + "๊ทธ๋ธŒ" + ], + "AurelionSol": [ + "์•„์†”", + "์•„์šฐ์†”" + ], + "Caitlyn": [ + "์ผ€ํ‹€" + ], + "Gragas": [ + "๊ธ€๊ฐ€" + ], + "Yuumi": [ + "๊ณ ์–‘์ด", + "๋ผ๋ฉด" + ], + "MissFortune": [ + "๋ฏธํฌ" + ], + "Draven": [ + "๋“œ๋ธ" + ], + "Warwick": [ + "์›Œ์›" + ], + "Malphite": [ + "๋Œ" + ], + "Vladimir": [ + "๋ชจ๊ธฐ" + ], + "Morgana": [ + "๋ชฐ๊ฐ€" + ], + "Gwen": [ + "๊ถจ" + ], + "DrMundo": [ + "๋ฌธ๋ฐ•" + ], + "Poppy": [ + "์‚๋ฝ€" + ] + }, + "statsRankRange": { + "EMERALD+": "์—๋ฉ”๋ž„๋“œ+", + "DIAMOND+": "๋‹ค์ด์•„+", + "MASTER+": "๋งˆ์Šคํ„ฐ+", + "BSGP": "๋ธŒ์‹ค๊ณจํ”Œ" + } + }, + "main": { + "contextMenu": { + "showHome": "LADA ํ™ˆ ํ™”๋ฉด ๋ณด๊ธฐ", + "setAppZoom": "์•ฑ ๋น„์œจ ์„ค์ •", + "quit": "์•ฑ ๋„๊ธฐ", + "nowValue": "ํ˜„์žฌ๊ฐ’", + "resetWindowPosition": "์ฐฝ ์œ„์น˜ ์ดˆ๊ธฐํ™”" + } + }, + "renderer": { + "pages": { + "stats": "ํ†ต๊ณ„", + "championTier": "์ฑ”ํ”ผ์–ธ ํ‹ฐ์–ด", + "championDetail": "์ฑ”ํ”ผ์–ธ ์ƒ์„ธ", + "duoSynergy": "๋“€์˜ค ์‹œ๋„ˆ์ง€", + "live": "๋ผ์ด๋ธŒ ๊ฒŒ์ž„", + "championSelect": "์ฑ”ํ”ผ์–ธ ์„ ํƒ", + "inGame": "์ธ๊ฒŒ์ž„ ์ •๋ณด", + "utility": "์œ ํ‹ธ๋ฆฌํ‹ฐ", + "customGameTeamManager": "5:5 ํŒ€ ๊ตฌ์„ฑ", + "setting": "์„ค์ •", + "generalSetting": "์ผ๋ฐ˜ ์„ค์ •", + "gameSetting": "๊ฒŒ์ž„ ์„ค์ •", + "developerSetting": "๊ฐœ๋ฐœ์ž ์„ค์ •", + "notFound": "ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค :(" + }, + "form": { + "save": { + "title": "์ €์žฅํ•˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์–ด์š”!", + "ok": "๋ณ€๊ฒฝ์‚ฌํ•ญ ์ €์žฅํ•˜๊ธฐ", + "rollback": "๋˜๋Œ๋ฆฌ๊ธฐ", + "confirm": { + "title": "์ •๋ง ์ €์žฅํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", + "ok": "์ €์žฅ", + "cancel": "์ทจ์†Œ" + } + } + }, + "stats": { + "gameCount": "๊ฒŒ์ž„์ˆ˜", + "sampledCount": "ํ‘œ๋ณธ์ˆ˜", + "winRate": "์Šน๋ฅ ", + "pickRate": "ํ”ฝ๋ฅ ", + "banRate": "๋ฐด๋ฅ ", + "spell": "์ŠคํŽ ", + "skillBuild": "์Šคํ‚ฌ ๋นŒ๋“œ", + "startItem": "์‹œ์ž‘ ์•„์ดํ…œ", + "shoes": "์‹ ๋ฐœ", + "coreItem": "์ฝ”์–ด ์•„์ดํ…œ", + "recommendItemBuild": "์ถ”์ฒœ ์•„์ดํ…œ ๋นŒ๋“œ", + "championTier": { + "title": "๋ผ์ธ๋ณ„ ์ฑ”ํ”ผ์–ธ ํ‹ฐ์–ด", + "loading": "๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘...", + "timezone": "KST ๊ธฐ์ค€", + "minPickRateInfo": "๋ผ์ธ๋ณ„ ํ”ฝ๋ฅ  0.5% ์ด์ƒ๋งŒ ํ‘œ์‹œ", + "tableColumns": { + "score": "PS ์Šค์ฝ”์–ด", + "honeyScore": "๊ฟ€์ฑ” ์ ์ˆ˜" + } + }, + "champion": { + "counter": { + "easy": "์ƒ๋Œ€ํ•˜๊ธฐ ์‰ฌ์šด ์ฑ”ํ”ผ์–ธ", + "hard": "์ƒ๋Œ€ํ•˜๊ธฐ ์–ด๋ ค์šด ์ฑ”ํ”ผ์–ธ" + }, + "notFound": { + "title": "ํ‘œ์‹œํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค", + "description": "๋‹ค๋ฅธ ๋ผ์ธ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”" + } + }, + "championSelect": { + "notFound": { + "title": "์ฑ”ํ”ผ์–ธ ์„ ํƒ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "description": "ํ˜„์žฌ ๊ฒŒ์ž„์— ์ฐธ์—ฌ์ค‘์ด์ง€ ์•Š๊ฑฐ๋‚˜, ์ฑ”ํ”ผ์–ธ ์„ ํƒ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์—†๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค." + } + }, + "duoSynergy": { + "title": "๋“€์˜ค ์‹œ๋„ˆ์ง€", + "searchPlaceholder": "์ฑ”ํ”ผ์–ธ ์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰", + "tableColumns": { + "ranking": "์ˆœ์œ„", + "synergyScore": "์‹œ๋„ˆ์ง€ ์ ์ˆ˜", + "winRate": "๋“€์˜ค ์Šน๋ฅ ", + "pickRate": "๋“€์˜ค ํ”ฝ๋ฅ " + }, + "lane": { + "adc-sup": "๋ฐ”ํ…€", + "mid-jg": "๋ฏธ๋“œ & ์ •๊ธ€", + "top-jg": "ํƒ‘ & ์ •๊ธ€", + "jg-sup": "์ •๊ธ€ & ์„œํฟ" + } + }, + "inGame": { + "title": "์ธ๊ฒŒ์ž„ ์ •๋ณด", + "tags": { + "gameType": "๊ฐœ์ธ/2์ธ ๋žญํฌ", + "avg": "ํ‰๊ท ", + "avgNotFound": "ํ‰๊ท  ํ‹ฐ์–ด ์ •๋ณด ์—†์Œ", + "playing": "๊ฒŒ์ž„์ค‘" + }, + "myTeam": "์•„๊ตฐ", + "enemyTeam": "์ ๊ตฐ", + "rankStats": "๋žญํฌ ํ†ต๊ณ„", + "score": "PS Score", + "runeBuild": "๋ฃฌ ๋นŒ๋“œ", + "game": "๊ฒŒ์ž„", + "notFound": { + "title": "์ธ๊ฒŒ์ž„ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "description": "ํ˜„์žฌ ๊ฒŒ์ž„์— ์ฐธ์—ฌ์ค‘์ด์ง€ ์•Š๊ฑฐ๋‚˜, ์ธ๊ฒŒ์ž„ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์—†๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.", + "reload": "์ƒˆ๋กœ๊ณ ์นจ" + } + } + }, + "setting": { + "general": { + "autoLaunch": { + "title": "์ปดํ“จํ„ฐ ๋ถ€ํŒ…์‹œ ์ตœ์†Œํ™”๋กœ ์ž๋™ ์‹œ์ž‘", + "description": "์ปดํ“จํ„ฐ๊ฐ€ ์ผœ์ง„ ํ›„ ์ž๋™์œผ๋กœ ์•ฑ์ด ์ตœ์†Œํ™” ๋ชจ๋“œ๋กœ ์‹œ์ž‘๋˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + }, + "openWindowWhenLeagueClientLaunch": { + "title": "LADA ์ž๋™ ์ฐฝ ์—ด๊ธฐ", + "description": "๋กค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ผœ์ง€๋ฉด ์ž๋™์œผ๋กœ LADA ์ฐฝ์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค.\nLADA๊ฐ€ ์ตœ์†Œํ™” ๋ชจ๋“œ๋กœ ์‹คํ–‰๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." + }, + "language": { + "title": "์–ธ์–ด ์„ค์ •", + "description": "LADA์˜ ์–ธ์–ด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.\n์–ธ์–ด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์•ฑ์ด ์žฌ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค." + }, + "zoom": { + "title": "์•ฑ ๋น„์œจ ์„ค์ •", + "description": "์•ฑ ํ™”๋ฉด์˜ ๋น„์œจ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.\n๊ธฐ๋ณธ ๊ฐ’์€ 100% ์ž…๋‹ˆ๋‹ค." + }, + "developerMode": { + "title": "๊ฐœ๋ฐœ์ž๋ชจ๋“œ ์„ค์ •", + "description": "๊ฐœ๋ฐœ์ž๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ• ์ง€ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.\n๊ฐœ๋ฐœ์ž๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๊ฐ€ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค." + }, + "restoreWindowPosition": { + "title": "์ฐฝ ์œ„์น˜ ๋ณต์›", + "description": "LADA ์ฐฝ์ด ์ผœ์งˆ ๋•Œ ์ด์ „ ์œ„์น˜๋กœ ์—ด๋ฆฝ๋‹ˆ๋‹ค.\n๋น„ํ™œ์„ฑํ™” ์‹œ ํ•ญ์ƒ ํ™”๋ฉด ์ค‘์•™์— ์—ด๋ฆฝ๋‹ˆ๋‹ค." + }, + "appVersion": { + "title": "์•ฑ ๋ฒ„์ „", + "description": "ํ˜„์žฌ ์•ฑ ๋ฒ„์ „์ด ๋ช‡์ธ์ง€ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.\n์•„๋ž˜ ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์„ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "releaseList": "์•ฑ ๋ฆด๋ฆฌ์ฆˆ ๋ชฉ๋ก", + "updateNote": "์—…๋ฐ์ดํŠธ ๋‚ด์—ญ", + "updateStatus": { + "currentVersion": "ํ˜„์žฌ๋ฒ„์ „", + "checking-for-update": { + "description": "์—…๋ฐ์ดํŠธ๋ฅผ ํ™•์ธ์ค‘์ž…๋‹ˆ๋‹ค..." + }, + "update-available": { + "description": "์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์šด๋กœ๋“œ์ค‘์ž…๋‹ˆ๋‹ค..." + }, + "update-not-available": { + "description": "์ตœ์‹  ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.", + "checkForUpdate": "์—…๋ฐ์ดํŠธ ํ™•์ธ" + }, + "error": { + "description": "์—…๋ฐ์ดํŠธ๋ฅผ ํ™•์ธํ•˜๋Š” ๋„์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", + "checkForUpdate": "์—…๋ฐ์ดํŠธ ํ™•์ธ" + }, + "download-progress": { + "description": "๋‹ค์šด๋กœ๋“œ์ค‘์ž…๋‹ˆ๋‹ค..." + }, + "update-downloaded": { + "description": "์—…๋ฐ์ดํŠธ๊ฐ€ ๋‹ค์šด๋กœ๋“œ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.\n์•ฑ์„ ์žฌ์‹œ์ž‘ํ•˜๋ฉด ์—…๋ฐ์ดํŠธ๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.", + "quitAndInstall": "์ง€๊ธˆ ์„ค์น˜" + } + } + } + }, + "game": { + "statsProvider": { + "title": "ํ†ต๊ณ„ ์ •๋ณด ์ œ๊ณต์ž", + "description": "ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.\n์ฑ”ํ”ผ์–ธ ํ‹ฐ์–ด์™€ ๊ฐ™์€ ํ†ต๊ณ„ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.\n\nํ˜„์žฌ๋Š” LOL.PS ๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค." + }, + "useCurrentPositionChampionData": { + "title": "์ฑ”ํ”ผ์–ธ ์ •๋ณด - ๋ฐฐ์น˜๋œ ํฌ์ง€์…˜ ์šฐ์„ ", + "description": "์ฑ”ํ”ผ์–ธ ์„ ํƒ ์‹œ ๋ณด์—ฌ์ฃผ๋Š” ์ •๋ณด๋ฅผ ํ˜„์žฌ ๋ฐฐ์น˜๋œ ํฌ์ง€์…˜ ์šฐ์„ ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.\n์ด ์„ค์ •์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ์ฑ”ํ”ผ์–ธ ์„ ํƒ ์‹œ ํ•ด๋‹น ์ฑ”ํ”ผ์–ธ์˜ ์ฃผ ํฌ์ง€์…˜์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค." + }, + "autoAccept": { + "title": "๋งค์นญ ์ž๋™ ์ˆ˜๋ฝ", + "description": "๊ฒŒ์ž„ ๋งค์นญ์„ ์ž๋™์œผ๋กœ ์ˆ˜๋ฝํ• ์ง€ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.\n์ด ์„ค์ •์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์ˆ˜๋ฝ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์ง€ ์•Š์•„๋„ ๋งค์นญ์ด ์ˆ˜๋ฝ๋ฉ๋‹ˆ๋‹ค.", + "autoAcceptDelaySeconds": { + "label": "์ž๋™ ์ˆ˜๋ฝ๊นŒ์ง€ ๋Œ€๊ธฐ์‹œ๊ฐ„", + "seconds": "์ดˆ" + } + }, + "autoRuneSetting": { + "title": "์ž๋™ ๋ฃฌ ์„ค์ •", + "description": "์ฑ”ํ”ผ์–ธ ์„ ํƒ ์‹œ ์ž๋™์œผ๋กœ ๋ฃฌ ํŽ˜์ด์ง€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค." + }, + "autoSummonerSpellSetting": { + "title": "์ž๋™ ์ŠคํŽ  ์„ค์ •", + "description": "์ฑ”ํ”ผ์–ธ ์„ ํƒ ์‹œ ์ž๋™์œผ๋กœ ์ŠคํŽ ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.", + "flash": "์ ๋ฉธ" + } + }, + "developer": { + "dataRefreshTime": { + "title": "๋ฐ์ดํ„ฐ ์กฐํšŒ์ผ", + "description": "์•„๋ž˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์˜ ์กฐํšŒ์ผ์ž…๋‹ˆ๋‹ค.\n์ž๋™์œผ๋กœ {{minute}}๋ถ„์— ํ•œ๋ฒˆ์”ฉ ์ƒˆ๋กœ๊ณ ์นจ๋ฉ๋‹ˆ๋‹ค.\n\n๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด ์šฐ์ธก ์ƒˆ๋กœ๊ณ ์นจ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”.", + "refresh": "์ƒˆ๋กœ๊ณ ์นจ" + }, + "storePath": { + "title": "Store Path", + "description": "์„ค์ • ๋ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค." + }, + "logs": { + "title": "Logs", + "description": "์•ฑ์—์„œ ๋‚จ๊ธด ๋กœ๊ทธ๋“ค์ž…๋‹ˆ๋‹ค.\nํ•„์š”ํ•œ ๊ฒฝ์šฐ ์šฐ์ธก ๋ฒ„ํŠผ์„ ํ†ตํ•ด ๋กœ๊ทธ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.", + "logSize": "๋กœ๊ทธ ์šฉ๋Ÿ‰", + "clear": "๋กœ๊ทธ ๋น„์šฐ๊ธฐ" + } + } + }, + "needUpdateLaterNotification": { + "title": "์—…๋ฐ์ดํŠธ ๋ฏธ๋ค„์ง", + "description": "์ฑ”ํ”ผ์–ธ ์„ ํƒ์ค‘์ด๋ผ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฏธ๋ค„์กŒ์Šต๋‹ˆ๋‹ค.\n์•ฑ์„ ์žฌ์‹œ์ž‘ํ•˜๋ฉด ์—…๋ฐ์ดํŠธ๊ฐ€ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.\n\n์ˆ˜๋™์œผ๋กœ๋„ ์—…๋ฐ์ดํŠธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. [์ผ๋ฐ˜ ์„ค์ • > ์•ฑ ๋ฒ„์ „]" + }, + "updateLoading": { + "loading": "์—…๋ฐ์ดํŠธ ๋‹ค์šด๋กœ๋“œ์ค‘...", + "autoRestart": "์ž ์‹œ ํ›„ ์•ฑ์ด ์žฌ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค." + }, + "teamManager": { + "subTitle": "์†Œํ™˜์‚ฌ์˜ ํ˜‘๊ณก ยท 5๋Œ€5 ยท {{pickType}}", + "team": "ํŒ€", + "empty": "๋น„์–ด์žˆ์Œ", + "randomTeam": "ํŒ€ ์ถ”์ฒจ", + "reset": "์ดˆ๊ธฐํ™”", + "notFound": { + "title": "์‚ฌ์šฉ์ž ์„ค์ • ๊ฒŒ์ž„์„ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.", + "description": "๊ฒŒ์ž„์‹œ์ž‘ > ์‚ฌ์šฉ์ž ์„ค์ • ๊ฒŒ์ž„ ์ƒ์„ฑ > ์†Œํ™˜์‚ฌ์˜ ํ˜‘๊ณก์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”." + } + }, + "updateNote": "์—…๋ฐ์ดํŠธ ๋‚ด์—ญ", + "autoAcceptOverlay": "์ž๋™ ์ˆ˜๋ฝ๊นŒ์ง€ {{seconds}}์ดˆ ๋‚จ์•˜์Šต๋‹ˆ๋‹ค", + "languageChangeInfoModal": { + "title": "์•ฑ ์žฌ์‹œ์ž‘ ํ•„์š”", + "description": "๋ณ€๊ฒฝํ•œ ์–ธ์–ด๋กœ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ ์žฌ์‹œ์ž‘์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.", + "ok": "์•ฑ ์žฌ์‹œ์ž‘", + "later": "๋ฏธ๋ฃจ๊ธฐ" + }, + "error": { + "title": "์•Œ ์ˆ˜ ์—†๋Š” ๊ณณ์œผ๋กœ ์™€๋ฒ„๋ฆฐ ๊ฑฐ ๊ฐ™์•„์š”", + "description": "์›์ธ์€ ์ €ํฌ๊ฐ€ ์ฐพ์•„๋ณผ๊ฒŒ์š” ์—ฌ๋Ÿฌ๋ถ„๋“ค์€ ๋‹ค์‹œ ๋Œ์•„๊ฐ€๋Š” ๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”", + "back": "๋Œ์•„๊ฐ€๊ธฐ", + "errorContent": "์˜ค๋ฅ˜ ๋‚ด์šฉ" + } + } +} \ No newline at end of file diff --git a/src/main/decorators/execute-log.decorator.ts b/src/main/decorators/execute-log.decorator.ts new file mode 100644 index 0000000..365746b --- /dev/null +++ b/src/main/decorators/execute-log.decorator.ts @@ -0,0 +1,32 @@ +import { Logger } from '@nestjs/common' + +interface ExecuteLogOptions { + startLog?: boolean +} + +const yellow = (text: string) => `\x1B[38;5;3m${text}\x1B[39m` + +export function ExecuteLog(options: ExecuteLogOptions = {}) { + const { startLog } = options + + return function (target: any, key: string, descriptor: PropertyDescriptor) { + const originalMethod = descriptor.value + + descriptor.value = async function (...args: any[]) { + const now = Date.now() + + startLog && Logger.log(`${target.constructor.name} ${key}()`, 'ExecuteLog') + + const result = await originalMethod.apply(this, args) + + Logger.log( + `${target.constructor.name} ${key}() ${yellow(`+${Date.now() - now}ms`)}`, + 'ExecuteLog', + ) + + return result + } + + return descriptor + } +} diff --git a/src/main/decorators/return-value-caching.decorator.ts b/src/main/decorators/return-value-caching.decorator.ts new file mode 100644 index 0000000..e1d65d2 --- /dev/null +++ b/src/main/decorators/return-value-caching.decorator.ts @@ -0,0 +1,25 @@ +const CACHE_MAP_PROPERTY_NAME = '_returnValueCachingMap' + +export function ReturnValueCaching() { + return function (target: any, key: string, descriptor: PropertyDescriptor) { + if (!target.hasOwnProperty(CACHE_MAP_PROPERTY_NAME)) { + target[CACHE_MAP_PROPERTY_NAME] = new Map() + } + + const originalMethod = descriptor.value + + descriptor.value = function (...args: any[]) { + const cacheMap = target[CACHE_MAP_PROPERTY_NAME] + + if (cacheMap.has(key)) { + return cacheMap.get(key) + } + + const result = originalMethod.apply(this, args) + + cacheMap.set(key, result) + + return result + } + } +} diff --git a/src/main/env.d.ts b/src/main/env.d.ts new file mode 100644 index 0000000..06d480c --- /dev/null +++ b/src/main/env.d.ts @@ -0,0 +1,7 @@ +interface ImportMetaEnv { + readonly MAIN_VITE_SENTRY_DSN: string +} + +interface ImportMeta { + readonly env: ImportMetaEnv +} diff --git a/src/main/i18next.d.ts b/src/main/i18next.d.ts new file mode 100644 index 0000000..6f86c3d --- /dev/null +++ b/src/main/i18next.d.ts @@ -0,0 +1,10 @@ +import 'i18next' +import defaultLocale from 'resources/locales/ko_KR.json' + +declare module 'i18next' { + interface CustomTypeOptions { + resources: { + translation: typeof defaultLocale + } + } +} diff --git a/src/main/index.ts b/src/main/index.ts new file mode 100644 index 0000000..e5b25e1 --- /dev/null +++ b/src/main/index.ts @@ -0,0 +1,45 @@ +import 'reflect-metadata' + +import { app, dialog } from 'electron' +import log from 'electron-log' + +import { NestFactory } from '@nestjs/core' + +import { AppModule } from '@main/modules/app/app.module' +import { ElectronService } from '@main/modules/electron/electron.service' +import { UpdateService } from '@main/modules/update/update.service' + +const bootstrap = async () => { + try { + const app = await NestFactory.createApplicationContext(AppModule) + + const updateService = app.get(UpdateService) + const electronService = app.get(ElectronService) + + await updateService.autoUpdate() + await electronService.start() + } catch (error: any) { + log.error('Failed to bootstrap application') + log.error(error?.message, error) + + await app.whenReady() + + if (error?.message === 'unable to verify the first certificate') { + dialog.showErrorBox( + '์•ฑ ์‹คํ–‰ ์˜ค๋ฅ˜', + `์ธ์ฆ์„œ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์•ฑ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.\n๋„คํŠธ์›Œํฌ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์•ฑ์ด ์‹คํ–‰ ์ค‘์ด๋ผ๋ฉด ์ด ์•ฑ์€ ์ œ์™ธํ•ด์ฃผ์„ธ์š”. (์˜ˆ์‹œ: ์œ ๋‹ˆ์ฝ˜ Pro)\n์ž์„ธํ•œ ๋กœ๊ทธ๋Š” ${ + log.transports.file.getFile().path + }`, + ) + } else { + dialog.showErrorBox( + '์•ฑ ์‹คํ–‰ ์˜ค๋ฅ˜', + `${error?.message}\n์ž์„ธํ•œ ๋กœ๊ทธ๋Š” ${log.transports.file.getFile().path}`, + ) + } + + process.exit(1) + } +} + +bootstrap() diff --git a/src/main/modules/app/app.module.ts b/src/main/modules/app/app.module.ts new file mode 100644 index 0000000..7f55c2a --- /dev/null +++ b/src/main/modules/app/app.module.ts @@ -0,0 +1,18 @@ +import { Module } from '@nestjs/common' + +import { ConfigModule } from '@main/modules/config/config.module' +import { DeveloperModule } from '@main/modules/developer/developer.module' +import { ElectronModule } from '@main/modules/electron/electron.module' +import { MigrationModule } from '@main/modules/migration/migration.module' +import { UpdateModule } from '@main/modules/update/update.module' + +@Module({ + imports: [ + ConfigModule, + MigrationModule.forRootAsync(), + ElectronModule, + UpdateModule, + DeveloperModule, + ], +}) +export class AppModule {} diff --git a/src/main/modules/config/config.controller.ts b/src/main/modules/config/config.controller.ts new file mode 100644 index 0000000..969b65f --- /dev/null +++ b/src/main/modules/config/config.controller.ts @@ -0,0 +1,20 @@ +import { Injectable } from '@nestjs/common' + +import { ConfigService } from '@main/modules/config/config.service' +import type { ConfigStoreValues } from '@main/modules/config/config.store' +import { IPCHandle } from '@main/modules/electron/decorators/ipc-handle.decorator' + +@Injectable() +export class ConfigController { + constructor(private readonly configService: ConfigService) {} + + @IPCHandle() + public getConfig() { + return this.configService.getAll() + } + + @IPCHandle() + public setConfig(config: ConfigStoreValues) { + return this.configService.setAll(config) + } +} diff --git a/src/main/modules/config/config.module.ts b/src/main/modules/config/config.module.ts new file mode 100644 index 0000000..4e93f20 --- /dev/null +++ b/src/main/modules/config/config.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common' + +import { ConfigController } from '@main/modules/config/config.controller' +import { ConfigService } from '@main/modules/config/config.service' + +@Module({ + providers: [ConfigController, ConfigService], + exports: [ConfigService], +}) +export class ConfigModule {} diff --git a/src/main/modules/config/config.service.ts b/src/main/modules/config/config.service.ts new file mode 100644 index 0000000..bd94155 --- /dev/null +++ b/src/main/modules/config/config.service.ts @@ -0,0 +1,52 @@ +import { FieldPath, FieldPathValue } from 'react-hook-form' + +import { Injectable } from '@nestjs/common' + +import type { ConfigStoreValues } from '@main/modules/config/config.store' +import { configStore } from '@main/modules/config/config.store' + +@Injectable() +export class ConfigService { + private readonly store = configStore + public readonly storeFilePath = this.store.path + + public onChange = FieldPath>( + key: Key, + callback: ( + newValue: FieldPathValue, + oldValue: FieldPathValue, + ) => void, + ) { + // @ts-ignore: key ํƒ€์ž… ๋ฌด์‹œ + return this.store.onDidChange(key, callback) + } + + public onAnyChange( + callback: (newValue?: ConfigStoreValues, oldValue?: ConfigStoreValues) => void, + ) { + return this.store.onDidAnyChange(callback) + } + + public get = FieldPath>( + key: Key, + ): FieldPathValue { + // @ts-ignore: key ํƒ€์ž… ๋ฌด์‹œ + return this.store.get(key) + } + + public set = FieldPath>( + key: Key, + value: FieldPathValue, + ) { + // @ts-ignore: key ํƒ€์ž… ๋ฌด์‹œ + this.store.set(key, value) + } + + public getAll() { + return this.store.store + } + + public setAll(config: ConfigStoreValues) { + return (this.store.store = config) + } +} diff --git a/src/main/modules/config/config.store.ts b/src/main/modules/config/config.store.ts new file mode 100644 index 0000000..2297827 --- /dev/null +++ b/src/main/modules/config/config.store.ts @@ -0,0 +1,27 @@ +import Store from 'electron-store' + +const IS_DEV = process.env.NODE_ENV === 'development' + +export interface ConfigStoreValues { + general: { + autoLaunch: boolean + developerMode: boolean + zoom: number + restoreWindowPosition: boolean + language: string | null + } +} + +export const configStore = new Store({ + name: 'config', + accessPropertiesByDotNotation: true, + defaults: { + general: { + autoLaunch: false, + developerMode: IS_DEV, + zoom: 1.0, + restoreWindowPosition: true, + language: null, + }, + }, +}) diff --git a/src/main/modules/developer/developer.controller.ts b/src/main/modules/developer/developer.controller.ts new file mode 100644 index 0000000..921e290 --- /dev/null +++ b/src/main/modules/developer/developer.controller.ts @@ -0,0 +1,30 @@ +import { Injectable } from '@nestjs/common' + +import { DeveloperService } from '@main/modules/developer/developer.service' +import { IPCHandle } from '@main/modules/electron/decorators/ipc-handle.decorator' + +@Injectable() +export class DeveloperController { + constructor(private readonly developerService: DeveloperService) {} + + @IPCHandle() + public ping() { + console.log('pong') + return 'pong' + } + + @IPCHandle() + public getStorePath() { + return this.developerService.getStorePath() + } + + @IPCHandle() + public getLogs() { + return this.developerService.getLogs() + } + + @IPCHandle() + public clearLogs() { + return this.developerService.clearLogs() + } +} diff --git a/src/main/modules/developer/developer.module.ts b/src/main/modules/developer/developer.module.ts new file mode 100644 index 0000000..cc7ec4a --- /dev/null +++ b/src/main/modules/developer/developer.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common' + +import { ConfigModule } from '@main/modules/config/config.module' +import { DeveloperController } from '@main/modules/developer/developer.controller' +import { DeveloperService } from '@main/modules/developer/developer.service' + +@Module({ + imports: [ConfigModule], + providers: [DeveloperController, DeveloperService], + exports: [DeveloperService], +}) +export class DeveloperModule {} diff --git a/src/main/modules/developer/developer.service.ts b/src/main/modules/developer/developer.service.ts new file mode 100644 index 0000000..05615bf --- /dev/null +++ b/src/main/modules/developer/developer.service.ts @@ -0,0 +1,29 @@ +import log from 'electron-log' + +import { Injectable } from '@nestjs/common' + +import { ConfigService } from '@main/modules/config/config.service' +import { Log } from '@main/modules/developer/types/log.type' + +@Injectable() +export class DeveloperService { + constructor(private readonly configService: ConfigService) {} + + public getStorePath() { + return this.configService.storeFilePath + } + + public getLogs(): Log[] { + const logs = log.transports.file.readAllLogs() + + return logs.map(item => ({ + size: log.transports.file.getFile().size, + path: item.path, + lines: item.lines.filter(Boolean), + })) + } + + public clearLogs() { + return log.transports.file.getFile().clear() + } +} diff --git a/src/main/modules/developer/types/log.type.ts b/src/main/modules/developer/types/log.type.ts new file mode 100644 index 0000000..eebb8a4 --- /dev/null +++ b/src/main/modules/developer/types/log.type.ts @@ -0,0 +1,5 @@ +export interface Log { + size: number + path: string + lines: string[] +} diff --git a/src/main/modules/electron/decorators/app-window.decorator.ts b/src/main/modules/electron/decorators/app-window.decorator.ts new file mode 100644 index 0000000..945d976 --- /dev/null +++ b/src/main/modules/electron/decorators/app-window.decorator.ts @@ -0,0 +1,19 @@ +export interface AppWindowOptions { + key?: string +} + +export interface AppWindowMetadata { + target: any + propertyName: string +} + +export const AppWindowMap = new Map() + +export function AppWindow(key?: string) { + return function (target: any, propertyName: string) { + AppWindowMap.set(key || propertyName, { + propertyName, + target: target.constructor, + }) + } +} diff --git a/src/main/modules/electron/decorators/deep-link-handle.decorator.ts b/src/main/modules/electron/decorators/deep-link-handle.decorator.ts new file mode 100644 index 0000000..e1131ff --- /dev/null +++ b/src/main/modules/electron/decorators/deep-link-handle.decorator.ts @@ -0,0 +1,13 @@ +export interface DeepLinkHandleMetadata { + path: string + handler: (params: object) => void + target: any +} + +export const DeepLinkHandleMap = new Map() + +export function DeepLinkHandle(path: string) { + return function (target: any, _, descriptor: PropertyDescriptor) { + DeepLinkHandleMap.set(path, { path, handler: descriptor.value, target: target.constructor }) + } +} diff --git a/src/main/modules/electron/decorators/ipc-handle.decorator.ts b/src/main/modules/electron/decorators/ipc-handle.decorator.ts new file mode 100644 index 0000000..0b879a1 --- /dev/null +++ b/src/main/modules/electron/decorators/ipc-handle.decorator.ts @@ -0,0 +1,28 @@ +export interface IPCHandleOptions { + channel?: string + type?: IPCHandleType +} + +export interface IPCHandleMetadata { + channel: string + type: IPCHandleType + handler: (...args: any[]) => any + target: any +} + +export type IPCHandleType = 'handle' | 'handleOnce' | 'on' | 'once' + +export const IPCHandleMap = new Map() + +export function IPCHandle(options: IPCHandleOptions = {}) { + return function (target: any, key: string, descriptor: PropertyDescriptor) { + const { channel = key, type = 'handle' } = options + + IPCHandleMap.set(channel, { + channel, + type, + handler: descriptor.value, + target: target.constructor, + }) + } +} diff --git a/src/main/modules/electron/decorators/ipc-sender.decorator.ts b/src/main/modules/electron/decorators/ipc-sender.decorator.ts new file mode 100644 index 0000000..4ae6fd3 --- /dev/null +++ b/src/main/modules/electron/decorators/ipc-sender.decorator.ts @@ -0,0 +1,26 @@ +export interface IPCSenderOptions { + channel?: string + windowKeys: string[] +} + +export interface IPCSenderMetadata { + channel: string + windowKeys: string[] + handler: (...args: any[]) => any + target: any +} + +export const IPCSenderMap = new Map() + +export function IPCSender(options: IPCSenderOptions) { + return function (target: any, key: string, descriptor: PropertyDescriptor) { + const { channel = key, windowKeys } = options + + IPCSenderMap.set(channel, { + channel, + windowKeys, + handler: descriptor.value, + target: target.constructor, + }) + } +} diff --git a/src/main/modules/electron/electron.constants.ts b/src/main/modules/electron/electron.constants.ts new file mode 100644 index 0000000..7b5bbf4 --- /dev/null +++ b/src/main/modules/electron/electron.constants.ts @@ -0,0 +1,2 @@ +export const ELECTRON_MAIN_WINDOW_KEY = 'electron_main_window' +export const ZOOM_PERCENT_ARRAY = [70, 75, 80, 85, 90, 95, 100] diff --git a/src/main/modules/electron/electron.controller.ts b/src/main/modules/electron/electron.controller.ts new file mode 100644 index 0000000..d86fe22 --- /dev/null +++ b/src/main/modules/electron/electron.controller.ts @@ -0,0 +1,68 @@ +import { Injectable } from '@nestjs/common' +import i18next from 'i18next' + +import type { ConfigStoreValues } from '@main/modules/config/config.store' +import { IPCHandle } from '@main/modules/electron/decorators/ipc-handle.decorator' +import { IPCSender } from '@main/modules/electron/decorators/ipc-sender.decorator' +import { ELECTRON_MAIN_WINDOW_KEY } from '@main/modules/electron/electron.constants' +import { ElectronService } from '@main/modules/electron/electron.service' +import type { AppControlAction } from '@main/modules/electron/types/app-control.type' +import { app } from 'electron' + +@Injectable() +export class ElectronController { + constructor(private electronService: ElectronService) {} + + @IPCHandle() + public getVersions() { + return process.versions + } + + @IPCHandle() + public getAppVersion() { + return app.getVersion() + } + + @IPCHandle({ type: 'on' }) + public appControl(action: AppControlAction) { + this.electronService.appControl(action) + } + + @IPCHandle({ type: 'on' }) + public relaunch() { + this.electronService.relaunch() + } + + @IPCHandle() + public getCurrentI18nextResource() { + return { + language: i18next.language, + resource: i18next.getResourceBundle(i18next.language, 'translation'), + ns: 'translation', + } + } + + @IPCHandle() + public getLanguageOptions() { + return this.electronService.languageOptions + } + + @IPCSender({ + windowKeys: [ELECTRON_MAIN_WINDOW_KEY], + }) + public onNeedUpdateLater() {} + + @IPCSender({ + windowKeys: [ELECTRON_MAIN_WINDOW_KEY], + }) + public onChangeConfigValue(value: ConfigStoreValues) { + return value + } + + @IPCSender({ + windowKeys: [ELECTRON_MAIN_WINDOW_KEY], + }) + public onChangeLanguage(value: string) { + return value + } +} diff --git a/src/main/modules/electron/electron.module.ts b/src/main/modules/electron/electron.module.ts new file mode 100644 index 0000000..ec80e2c --- /dev/null +++ b/src/main/modules/electron/electron.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common' + +import { ConfigModule } from '@main/modules/config/config.module' +import { ElectronController } from '@main/modules/electron/electron.controller' +import { ElectronService } from '@main/modules/electron/electron.service' + +@Module({ + imports: [ConfigModule], + providers: [ElectronController, ElectronService], + exports: [ElectronService], +}) +export class ElectronModule {} diff --git a/src/main/modules/electron/electron.service.ts b/src/main/modules/electron/electron.service.ts new file mode 100644 index 0000000..3a4ce0a --- /dev/null +++ b/src/main/modules/electron/electron.service.ts @@ -0,0 +1,529 @@ +import { + app, + BrowserWindow, + ipcMain, + Menu, + MenuItemConstructorOptions, + nativeImage, + shell, + Tray, +} from 'electron' + +import { Injectable, OnApplicationBootstrap, OnModuleInit } from '@nestjs/common' +import { ModuleRef } from '@nestjs/core' +import AutoLaunch from 'auto-launch' +import { paramCase } from 'change-case' +import { writeFile, readdir, readFile } from 'fs/promises' +import i18next from 'i18next' +import { parse as jsoncParse } from 'jsonc-parser' +import { groupBy } from 'lodash' +import { join } from 'path' +import { match } from 'path-to-regexp' + +import { productName, protocols } from '@main/../../electron-builder.json' +import { ExecuteLog } from '@main/decorators/execute-log.decorator' +import { ConfigService } from '@main/modules/config/config.service' +import { AppWindow, AppWindowMap } from '@main/modules/electron/decorators/app-window.decorator' +import { DeepLinkHandleMap } from '@main/modules/electron/decorators/deep-link-handle.decorator' +import { IPCHandleMap } from '@main/modules/electron/decorators/ipc-handle.decorator' +import { IPCSenderMap } from '@main/modules/electron/decorators/ipc-sender.decorator' +import { + ELECTRON_MAIN_WINDOW_KEY, + ZOOM_PERCENT_ARRAY, +} from '@main/modules/electron/electron.constants' +import { ElectronController } from '@main/modules/electron/electron.controller' +import { electronStore } from '@main/modules/electron/electron.store' +import { AppControlAction } from '@main/modules/electron/types/app-control.type' +import { LanguageOption } from '@main/modules/electron/types/language.type' + +@Injectable() +export class ElectronService implements OnModuleInit, OnApplicationBootstrap { + private readonly store = electronStore + + public readonly APP_PATH = app.getAppPath() + public readonly PROTOCOL = protocols.name + public readonly IS_MAC = process.platform === 'darwin' + public readonly DEV_URL = process.env['ELECTRON_RENDERER_URL'] + public readonly PROD_LOAD_FILE_PATH = join(this.APP_PATH, 'out/renderer/index.html') + public readonly PRELOAD_PATH = join(this.APP_PATH, 'out/preload/index.js') + public readonly RESOURCES_PATH = app.isPackaged + ? join(process.resourcesPath, 'resources') + : join(this.APP_PATH, 'resources') + public readonly ICON = nativeImage.createFromPath( + `${this.RESOURCES_PATH}/icons/${this.IS_MAC ? 'logo@512.png' : 'logo@256.ico'}`, + ) + public readonly IS_HIDDEN_LAUNCH = process.argv.includes('--hidden') + + public readonly APP_WIDTH = 1800 + public readonly APP_HEIGHT = 1000 + + public readonly ZOOM_PERCENT_ARRAY = ZOOM_PERCENT_ARRAY + + // main window + @AppWindow(ELECTRON_MAIN_WINDOW_KEY) + public window: BrowserWindow | null = null + + public tray: Tray | null = null + + // deep link handlers + public deepLinkHandlers: Record void> = {} + + // update.module.ts -> autoUpdate() ์ฐธ๊ณ  + public isNeedUpdate = false + public isNeedUpdateLater = false + + public isStarted = false + + public zoom: number + + public autoLauncher = new AutoLaunch({ + name: app.getName(), + path: app.getPath('exe'), + isHidden: true, + }) + + public languageOptions: LanguageOption[] = [] + + private controller: ElectronController + + constructor( + private readonly configService: ConfigService, + private readonly moduleRef: ModuleRef, + ) { + // smooth scrolling + app.commandLine.appendSwitch(`--enable-smooth-scrolling`) + + // protocol + app.setAsDefaultProtocolClient(this.PROTOCOL) + + // zoom + this.zoom = this.configService.get('general.zoom') + } + + @ExecuteLog() + public async onModuleInit() { + this.controller = this.moduleRef.get(ElectronController) + + await app.whenReady() + await this.initI18Next() + + const gotTheLock = app.requestSingleInstanceLock() + + if (!gotTheLock) { + app.quit() + process.exit(0) + } + + this.registerEvents() + this.createTray() + } + + @ExecuteLog() + public async onApplicationBootstrap() { + IPCHandleMap.forEach(({ channel, type, handler, target }) => { + const instance = this.moduleRef.get(target, { strict: false }) + ipcMain[type](channel, (_, ...args) => handler.apply(instance, args)) + }) + + DeepLinkHandleMap.forEach(({ path, handler, target }) => { + const instance = this.moduleRef.get(target, { strict: false }) + this.deepLinkHandlers[path] = handler.bind(instance) + }) + + IPCSenderMap.forEach(({ channel, windowKeys, handler, target }) => { + const instance = this.moduleRef.get(target, { strict: false }) + + const windows = windowKeys.map(windowKey => { + const windowMetadata = AppWindowMap.get(windowKey) + + if (!windowMetadata) throw new Error(`[ @AppWindow ] Window key '${windowKey}' not found.`) + + const instance = this.moduleRef.get(windowMetadata.target, { strict: false }) + + return { + propertyName: windowMetadata.propertyName, + instance, + } + }) + + const originalHandler = handler + + const newHandler = function (...args: any[]) { + const result = originalHandler.apply(instance, args) + + windows.forEach(({ propertyName, instance }) => { + instance[propertyName]?.webContents.send(channel, result) + }) + } + + instance[channel] = newHandler + }) + + await this.generateIpcInvokeContextPreloadFile() + await this.generateIpcOnContextPreloadFile() + } + + public async generateIpcInvokeContextPreloadFile() { + if (app.isPackaged) return + + const groups = groupBy([...IPCHandleMap.values()], 'target.name') + + let importString = `import { ipcRenderer } from 'electron';\n\n` + let contentString = `export const generatedIpcInvokeContext = {` + + Object.entries(groups).forEach(([controllerName, handlers]) => { + const controllerFilename = paramCase(controllerName.replace('Controller', '')) + + importString += `import { ${controllerName} } from '@main/modules/${controllerFilename}/${controllerFilename}.controller';\n` + + contentString += `\n // ${controllerName}\n` + + handlers.forEach(item => { + const type = item.type === 'on' || item.type === 'once' ? 'send' : 'invoke' + const handlerType = `typeof ${controllerName}.prototype.${item.handler.name}` + const asyncString = type === 'invoke' ? 'async ' : '' + const args = `...args: Parameters<${handlerType}>` + const returnType = type === 'invoke' ? `Promise>` : 'void' + const fn = `ipcRenderer.${type}('${item.channel}', ...args)` + + contentString += ` ${item.handler.name}: ${asyncString}(${args}): ${returnType} => ${fn},\n` + }) + }) + + contentString += `};\n` + + await writeFile( + `src/preload/generated-ipc-invoke-context.ts`, + `${importString}\n${contentString}`, + ) + } + + public async generateIpcOnContextPreloadFile() { + if (app.isPackaged) return + + const groups = groupBy([...IPCSenderMap.values()], 'target.name') + + let importString = `import { ipcRenderer } from 'electron';\n\n` + let contentString = `type Unsubscribe = () => void + +export const generatedIpcOnContext = {` + + Object.entries(groups).forEach(([controllerName, handlers]) => { + const controllerFilename = paramCase(controllerName.replace('Controller', '')) + + importString += `import { ${controllerName} } from '@main/modules/${controllerFilename}/${controllerFilename}.controller';\n` + + contentString += `\n // ${controllerName}\n` + + handlers.forEach(item => { + const handlerType = `typeof ${controllerName}.prototype.${item.handler.name}` + const callback = `callback: (data: ReturnType<${handlerType}>) => void` + const fn = `{ + const handler = (_, data) => callback(data) + ipcRenderer.on('${item.channel}', handler) + return () => ipcRenderer.off('${item.channel}', handler) + }` + + contentString += ` ${item.handler.name}: (${callback}): Unsubscribe => ${fn},\n` + }) + }) + + contentString += `};\n` + + await writeFile(`src/preload/generated-ipc-on-context.ts`, `${importString}\n${contentString}`) + } + + // ์•ฑ ์‹œ์ž‘ (src/main/index.ts์—์„œ ์‹คํ–‰) + @ExecuteLog() + public async start() { + console.log('start', !this.IS_HIDDEN_LAUNCH && !this.isNeedUpdate) + if (!this.IS_HIDDEN_LAUNCH && !this.isNeedUpdate) { + await this.createWindow() + + if (this.isNeedUpdateLater) { + setTimeout(() => { + this.controller.onNeedUpdateLater() + }, 3000) + } + } + + this.isStarted = true + } + + public async createWindow() { + return new Promise(async resolve => { + console.log('createWindow', this.window) + if (this.window) { + if (this.window.isMinimized()) this.window.restore() + this.window.focus() + return + } + + const windowPosition = this.store.get('windowPosition') + + this.window = new BrowserWindow({ + width: this.APP_WIDTH, + height: this.APP_HEIGHT, + backgroundColor: '#36393F', + darkTheme: true, + show: false, + autoHideMenuBar: true, + icon: this.ICON, + webPreferences: { + preload: this.PRELOAD_PATH, + }, + ...windowPosition, + }) + + this.window.on('ready-to-show', () => { + this.applyZoom(this.zoom) + this.window!.show() + resolve() + }) + + this.window.on('close', () => { + this.window = null + }) + + this.window.on('moved', () => { + this.saveCurrentWindowPosition() + }) + + this.window.webContents.setWindowOpenHandler(({ url }) => { + if (url.startsWith('https:')) { + shell.openExternal(url) + } + + return { action: 'deny' } + }) + + if (app.isPackaged) { + await this.window.loadFile(this.PROD_LOAD_FILE_PATH, { + hash: '#', + }) + } else { + await this.window.loadURL(this.DEV_URL + '#') + this.window.webContents.openDevTools() + } + }) + } + + public async appControl(action: AppControlAction) { + if (!this.window) return + + switch (action) { + case 'devtools': { + this.window.webContents.toggleDevTools() + break + } + + case 'minimize': { + this.window.minimize() + break + } + + case 'maximize': { + this.window.isMaximized() ? this.window.unmaximize() : this.window.maximize() + break + } + + case 'close': { + this.window.close() + break + } + } + } + + public setZoom(zoom: number) { + this.zoom = zoom + this.configService.set('general.zoom', zoom) + this.applyZoom(zoom) + this.reloadContextMenu() + } + + public relaunch() { + app.relaunch() + app.quit() + } + + private applyZoom(zoom: number) { + if (!this.window) return + + // setMinimumSize๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์•„๋ž˜ setSize๋งŒ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์˜๋„๋œ ์„ค๊ณ„์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ตœ์†Œ ํฌ๊ธฐ๊ฐ€ ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ๋˜์–ด ํฌ๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์—†๋‹ค. + // ๊ทธ๋ž˜์„œ setMinimumSize๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ์ตœ์†Œ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝ ํ›„ setSize๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค. + this.window.setMinimumSize(this.APP_WIDTH * zoom, this.APP_HEIGHT * zoom) + this.window.setSize(this.APP_WIDTH * zoom, this.APP_HEIGHT * zoom, true) + this.window.webContents.setZoomFactor(zoom) + } + + private registerEvents() { + app.on('activate', () => { + this.createWindow() + }) + + app.on('window-all-closed', () => { + this.window = null + }) + + app.on('second-instance', (_, argv) => { + if (!this.IS_MAC) { + const url = argv.find(arg => arg.startsWith(`${this.PROTOCOL}://`)) + if (url) this.resolveDeepLink(url) + } + }) + + app.on('open-url', (_, url) => { + this.resolveDeepLink(url) + }) + + this.configService.onAnyChange(newValue => { + if (!this.window || !newValue) return + this.controller.onChangeConfigValue(newValue) + }) + + this.configService.onChange('general.zoom', value => { + this.setZoom(value) + }) + + this.configService.onChange('general.autoLaunch', async value => { + const isEnabled = await this.autoLauncher.isEnabled() + + // ์•„๋ž˜ enable/disable ์‹คํ–‰ ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๊ฐ’์ด ๊ฐ™์„ ๊ฒฝ์šฐ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. + if (isEnabled === value || (!isEnabled && !value)) return + + this.autoLauncher[value ? 'enable' : 'disable']() + }) + + this.configService.onChange('general.language', async value => { + await i18next.changeLanguage(value!) + this.controller.onChangeLanguage(value!) + }) + + this.configService.onChange('general.restoreWindowPosition', value => { + if (value) { + this.saveCurrentWindowPosition() + } else { + this.store.delete('windowPosition') + } + }) + } + + private createTray() { + this.tray = new Tray(this.ICON.resize({ width: 20, height: 20 })) + + this.tray.on('double-click', () => this.createWindow()) + this.tray.setToolTip(productName) + + this.reloadContextMenu() + } + + private saveCurrentWindowPosition() { + if (this.configService.get('general.restoreWindowPosition') === false || !this.window) return + + const { x, y } = this.window.getBounds() + + this.store.set('windowPosition', { + x, + y, + }) + } + + private resetWindowPosition() { + if (this.window) { + this.window.center() + this.window.focus() + this.saveCurrentWindowPosition() + } else { + this.store.delete('windowPosition') + } + } + + private reloadContextMenu() { + const template: MenuItemConstructorOptions[] = [ + { + label: i18next.t('main.contextMenu.showHome'), + type: 'normal', + click: () => this.createWindow(), + }, + { + label: i18next.t('main.contextMenu.resetWindowPosition'), + type: 'normal', + click: () => this.resetWindowPosition(), + }, + { + label: i18next.t('main.contextMenu.setAppZoom'), + type: 'submenu', + submenu: [ + ...this.ZOOM_PERCENT_ARRAY.map( + percent => + ({ + label: `${percent}%${ + percent === this.zoom * 100 ? ` (${i18next.t('main.contextMenu.nowValue')})` : '' + }`, + type: 'normal', + click: () => this.setZoom(percent / 100), + }) as MenuItemConstructorOptions, + ), + ], + }, + { type: 'separator' }, + { label: i18next.t('main.contextMenu.quit'), role: 'quit', type: 'normal' }, + ] + + this.tray?.setContextMenu(Menu.buildFromTemplate(template)) + } + + private resolveDeepLink(url: string) { + const pathname = url.replace(`${this.PROTOCOL}://`, '/') + + for (const path in this.deepLinkHandlers) { + const data = match(path)(pathname) + + if (data) { + this.deepLinkHandlers[path](data.params) + break + } + } + } + + private async initI18Next() { + const fileNames = await readdir(`${this.RESOURCES_PATH}/locales`) + + const files = await Promise.all( + fileNames.map(fileName => + readFile(`${this.RESOURCES_PATH}/locales/${fileName}`, { encoding: 'utf-8' }), + ), + ) + + const resources: Record = files.reduce((resources, file, index) => { + const json = jsoncParse(file) + const locale = fileNames[index].replace('.json', '') + + resources[locale] = { + translation: json, + } + + this.languageOptions.push({ + label: json?.label, + value: locale, + }) + + return resources + }, {}) + + const systemLocale = app.getSystemLocale().replace('-', '_') + const configLocale = this.configService.get('general.language') + + const inputLocale = configLocale ?? systemLocale + const outputLocale = resources[inputLocale] ? inputLocale : 'en_US' + + await i18next.init({ + lng: outputLocale, + resources, + }) + + if (!configLocale) { + this.configService.set('general.language', outputLocale) + } + } +} diff --git a/src/main/modules/electron/electron.store.ts b/src/main/modules/electron/electron.store.ts new file mode 100644 index 0000000..54b27fe --- /dev/null +++ b/src/main/modules/electron/electron.store.ts @@ -0,0 +1,14 @@ +import Store from 'electron-store' + +export interface ElectronStoreValues { + windowPosition?: { + x: number + y: number + } +} + +export const electronStore = new Store({ + name: 'electron', + accessPropertiesByDotNotation: true, + defaults: {}, +}) diff --git a/src/main/modules/electron/types/app-control.type.ts b/src/main/modules/electron/types/app-control.type.ts new file mode 100644 index 0000000..a73018d --- /dev/null +++ b/src/main/modules/electron/types/app-control.type.ts @@ -0,0 +1 @@ +export type AppControlAction = 'devtools' | 'minimize' | 'maximize' | 'close' diff --git a/src/main/modules/electron/types/language.type.ts b/src/main/modules/electron/types/language.type.ts new file mode 100644 index 0000000..a675844 --- /dev/null +++ b/src/main/modules/electron/types/language.type.ts @@ -0,0 +1,4 @@ +export interface LanguageOption { + label: string + value: string +} diff --git a/src/main/modules/migration/migration.module.ts b/src/main/modules/migration/migration.module.ts new file mode 100644 index 0000000..600e586 --- /dev/null +++ b/src/main/modules/migration/migration.module.ts @@ -0,0 +1,79 @@ +import { app } from 'electron' +import log from 'electron-log' + +import { Module } from '@nestjs/common' +import { omit } from 'lodash' +import { lte, valid } from 'semver' + +import { migrationStore } from '@main/modules/migration/migration.store' + +@Module({}) +export class MigrationModule { + public static async forRootAsync() { + const currentVersion = `v${app.getVersion()}` + const initialInstallationVersion = migrationStore.get('initialInstallationVersion') + const isInitialInstallation = + !initialInstallationVersion && + !Object.keys(omit(migrationStore.store, ['migratedVersions', 'initialInstallationVersion'])) + .length + + let migratedVersions = migrationStore.get('migratedVersions') + let executedMigrationVersions = migrationStore.get('executedMigrationVersions') + + // ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์Šคํ† ์–ด๊ฐ€ ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ + if (!migratedVersions || !executedMigrationVersions) { + migratedVersions = [] + executedMigrationVersions = [] + + migrationStore.store = { + initialInstallationVersion: currentVersion, + migratedVersions, + executedMigrationVersions, + } + } + + // ์„ ์–ธ๋œ ๋ชจ๋“  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ + const migrationVersions = Object.getOwnPropertyNames(this).filter(propertyName => + valid(propertyName), + ) + + if (isInitialInstallation) { + // ์ดˆ๊ธฐ ์„ค์น˜๋ผ๋ฉด ํ˜„์žฌ ๋ชจ๋“  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์‹คํ–‰๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ + migrationStore.set('migratedVersions', migrationVersions) + } else { + // ์ดˆ๊ธฐ ์„ค์น˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹คํ–‰ + const executableMigrationVersions = migrationVersions.filter(version => { + const isExecutable = !migratedVersions!.includes(version) + + // ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ผ๋ฉด ๋ฒ„์ „ ๋น„๊ต ์—†์ด ์‹คํ–‰ + if (!app.isPackaged) return isExecutable + + // ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ๋ผ๋ฉด ํ•˜์œ„ ๋ฐ ๊ฐ™์€ ๋ฒ„์ „๋งŒ ์‹คํ–‰ + return isExecutable && lte(version, currentVersion) + }) + + // ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์žˆ๋‹ค๋ฉด ์‹คํ–‰ + if (executableMigrationVersions.length) { + for (const version of executableMigrationVersions) { + try { + await this[version]() + log.info(`[Migration Module] Migrated to ${version}`) + } catch (error) { + log.error(`[Migration Module] ${version}\n`, error) + } + } + + migratedVersions.push(...executableMigrationVersions) + executedMigrationVersions.push(...executableMigrationVersions) + migrationStore.set('migratedVersions', migratedVersions) + migrationStore.set('executedMigrationVersions', executedMigrationVersions) + } + } + + return { + module: MigrationModule, + } + } + + public static async 'v0.0.1'() {} +} diff --git a/src/main/modules/migration/migration.store.ts b/src/main/modules/migration/migration.store.ts new file mode 100644 index 0000000..a0a215d --- /dev/null +++ b/src/main/modules/migration/migration.store.ts @@ -0,0 +1,13 @@ +import Store from 'electron-store' + +export interface MigrationStoreValues { + initialInstallationVersion?: string + migratedVersions?: string[] + executedMigrationVersions?: string[] +} + +export const migrationStore = new Store({ + name: 'migration', + accessPropertiesByDotNotation: false, + defaults: {}, +}) diff --git a/src/main/modules/update/types/update-status.type.ts b/src/main/modules/update/types/update-status.type.ts new file mode 100644 index 0000000..b1880b9 --- /dev/null +++ b/src/main/modules/update/types/update-status.type.ts @@ -0,0 +1,9 @@ +import { UpdaterEvents } from 'electron-updater' + +export type UpdateStatusEvent = Omit + +export interface UpdateStatus { + event: UpdateStatusEvent + time: number + data: any +} diff --git a/src/main/modules/update/update.constants.ts b/src/main/modules/update/update.constants.ts new file mode 100644 index 0000000..7f93777 --- /dev/null +++ b/src/main/modules/update/update.constants.ts @@ -0,0 +1 @@ +export const UPDATE_LOADING_WINDOW_KEY = 'update_loading_window' diff --git a/src/main/modules/update/update.controller.ts b/src/main/modules/update/update.controller.ts new file mode 100644 index 0000000..5641b41 --- /dev/null +++ b/src/main/modules/update/update.controller.ts @@ -0,0 +1,35 @@ +import { Injectable } from '@nestjs/common' + +import { IPCHandle } from '@main/modules/electron/decorators/ipc-handle.decorator' +import { IPCSender } from '@main/modules/electron/decorators/ipc-sender.decorator' +import { ELECTRON_MAIN_WINDOW_KEY } from '@main/modules/electron/electron.constants' +import type { UpdateStatus } from '@main/modules/update/types/update-status.type' +import { UPDATE_LOADING_WINDOW_KEY } from '@main/modules/update/update.constants' +import { UpdateService } from '@main/modules/update/update.service' + +@Injectable() +export class UpdateController { + constructor(private readonly updateService: UpdateService) {} + + @IPCHandle() + public getUpdateStatus() { + return this.updateService.status + } + + @IPCHandle() + public async checkForUpdate() { + return this.updateService.checkForUpdates() + } + + @IPCHandle({ type: 'on' }) + public quitAndInstall() { + this.updateService.quitAndInstall() + } + + @IPCSender({ + windowKeys: [ELECTRON_MAIN_WINDOW_KEY, UPDATE_LOADING_WINDOW_KEY], + }) + public onChangeUpdateStatus(value: UpdateStatus) { + return value + } +} diff --git a/src/main/modules/update/update.module.ts b/src/main/modules/update/update.module.ts new file mode 100644 index 0000000..d63afe0 --- /dev/null +++ b/src/main/modules/update/update.module.ts @@ -0,0 +1,13 @@ +import { Module } from '@nestjs/common' + +import { ElectronModule } from '@main/modules/electron/electron.module' + +import { UpdateController } from '@main/modules/update/update.controller' +import { UpdateService } from '@main/modules/update/update.service' + +@Module({ + imports: [ElectronModule], + providers: [UpdateController, UpdateService], + exports: [UpdateService], +}) +export class UpdateModule {} diff --git a/src/main/modules/update/update.service.ts b/src/main/modules/update/update.service.ts new file mode 100644 index 0000000..48e2d6c --- /dev/null +++ b/src/main/modules/update/update.service.ts @@ -0,0 +1,140 @@ +import { BrowserWindow, app } from 'electron' +import log from 'electron-log' +import { autoUpdater } from 'electron-updater' + +import { Injectable, OnModuleInit } from '@nestjs/common' +import { ModuleRef } from '@nestjs/core' + +import { ExecuteLog } from '@main/decorators/execute-log.decorator' +import { AppWindow } from '@main/modules/electron/decorators/app-window.decorator' +import { ElectronService } from '@main/modules/electron/electron.service' +import { UpdateStatus, UpdateStatusEvent } from '@main/modules/update/types/update-status.type' +import { UPDATE_LOADING_WINDOW_KEY } from '@main/modules/update/update.constants' +import { UpdateController } from '@main/modules/update/update.controller' + +@Injectable() +export class UpdateService implements OnModuleInit { + private listenEvents = [ + 'checking-for-update', + 'update-available', + 'update-not-available', + 'download-progress', + 'update-downloaded', + 'error', + ] as const + + public status: UpdateStatus = { + event: 'checking-for-update', + data: null, + time: new Date().getTime(), + } + + @AppWindow(UPDATE_LOADING_WINDOW_KEY) + public updateLoadingWindow: BrowserWindow | null = null + + private controller: UpdateController + + constructor( + private readonly electronService: ElectronService, + private readonly moduleRef: ModuleRef, + ) { + autoUpdater.logger = log + autoUpdater.autoInstallOnAppQuit = true + autoUpdater.disableWebInstaller = true + + this.listenEvents.forEach(event => { + autoUpdater.on(event, this.handleUpdateEvent(event)) + }) + } + + onModuleInit() { + this.controller = this.moduleRef.get(UpdateController) + } + + // ์ž๋™ ์—…๋ฐ์ดํŠธ (src/main/index.ts์—์„œ ์‹คํ–‰) + @ExecuteLog() + async autoUpdate() { + return new Promise(async resolve => { + const stopAutoUpdate = () => { + autoUpdater.off('update-available', handleUpdateAvailable) + autoUpdater.off('update-not-available', handleUpdateNotAvailable) + autoUpdater.off('update-downloaded', handleUpdateDownloaded) + resolve(false) + } + + const handleUpdateAvailable = async () => { + if (!this.electronService.IS_HIDDEN_LAUNCH) { + this.electronService.isNeedUpdate = true + await this.openUpdateLoadingWindow() + } + } + + const handleUpdateNotAvailable = () => { + stopAutoUpdate() + } + + const handleUpdateDownloaded = () => { + autoUpdater.quitAndInstall(true, true) + resolve(true) + } + + autoUpdater.on('update-available', handleUpdateAvailable) + autoUpdater.on('update-not-available', handleUpdateNotAvailable) + autoUpdater.on('update-downloaded', handleUpdateDownloaded) + + const result = await autoUpdater.checkForUpdates() + if (!result) stopAutoUpdate() + }) + } + + async openUpdateLoadingWindow() { + this.updateLoadingWindow = new BrowserWindow({ + width: 300, + height: 300, + backgroundColor: '#36393F', + darkTheme: true, + show: false, + autoHideMenuBar: true, + frame: false, + icon: this.electronService.ICON, + resizable: false, + webPreferences: { + preload: this.electronService.PRELOAD_PATH, + }, + }) + + if (app.isPackaged) { + await this.updateLoadingWindow.loadFile(this.electronService.PROD_LOAD_FILE_PATH, { + hash: '#/windows/update-loading', + }) + } else { + await this.updateLoadingWindow.loadURL( + this.electronService.DEV_URL + '#/windows/update-loading', + ) + } + + this.updateLoadingWindow.on('ready-to-show', () => { + this.updateLoadingWindow?.show() + }) + } + + private handleUpdateEvent(event: UpdateStatusEvent) { + return (data: any) => { + this.status = { + event, + data, + time: new Date().getTime(), + } + + this.controller.onChangeUpdateStatus(this.status) + } + } + + public async checkForUpdates() { + return autoUpdater.checkForUpdates() + } + + public quitAndInstall() { + autoUpdater.quitAndInstall() + } +} diff --git a/src/main/utils/promise.utils.ts b/src/main/utils/promise.utils.ts new file mode 100644 index 0000000..44bede3 --- /dev/null +++ b/src/main/utils/promise.utils.ts @@ -0,0 +1 @@ +export const wait = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)) diff --git a/src/preload/electron.d.ts b/src/preload/electron.d.ts new file mode 100644 index 0000000..5d7d215 --- /dev/null +++ b/src/preload/electron.d.ts @@ -0,0 +1,9 @@ +import type { ElectronContext } from './index' + +export type ElectronContext = ElectronContext + +declare global { + interface Window { + electron: ElectronContext + } +} diff --git a/src/preload/generated-ipc-invoke-context.ts b/src/preload/generated-ipc-invoke-context.ts new file mode 100644 index 0000000..02f8a13 --- /dev/null +++ b/src/preload/generated-ipc-invoke-context.ts @@ -0,0 +1,31 @@ +import { ipcRenderer } from 'electron'; + +import { ConfigController } from '@main/modules/config/config.controller'; +import { DeveloperController } from '@main/modules/developer/developer.controller'; +import { ElectronController } from '@main/modules/electron/electron.controller'; +import { UpdateController } from '@main/modules/update/update.controller'; + +export const generatedIpcInvokeContext = { + // ConfigController + getConfig: async (...args: Parameters): Promise> => ipcRenderer.invoke('getConfig', ...args), + setConfig: async (...args: Parameters): Promise> => ipcRenderer.invoke('setConfig', ...args), + + // DeveloperController + ping: async (...args: Parameters): Promise> => ipcRenderer.invoke('ping', ...args), + getStorePath: async (...args: Parameters): Promise> => ipcRenderer.invoke('getStorePath', ...args), + getLogs: async (...args: Parameters): Promise> => ipcRenderer.invoke('getLogs', ...args), + clearLogs: async (...args: Parameters): Promise> => ipcRenderer.invoke('clearLogs', ...args), + + // ElectronController + getVersions: async (...args: Parameters): Promise> => ipcRenderer.invoke('getVersions', ...args), + getAppVersion: async (...args: Parameters): Promise> => ipcRenderer.invoke('getAppVersion', ...args), + appControl: (...args: Parameters): void => ipcRenderer.send('appControl', ...args), + relaunch: (...args: Parameters): void => ipcRenderer.send('relaunch', ...args), + getCurrentI18nextResource: async (...args: Parameters): Promise> => ipcRenderer.invoke('getCurrentI18nextResource', ...args), + getLanguageOptions: async (...args: Parameters): Promise> => ipcRenderer.invoke('getLanguageOptions', ...args), + + // UpdateController + getUpdateStatus: async (...args: Parameters): Promise> => ipcRenderer.invoke('getUpdateStatus', ...args), + checkForUpdate: async (...args: Parameters): Promise> => ipcRenderer.invoke('checkForUpdate', ...args), + quitAndInstall: (...args: Parameters): void => ipcRenderer.send('quitAndInstall', ...args), +}; diff --git a/src/preload/generated-ipc-on-context.ts b/src/preload/generated-ipc-on-context.ts new file mode 100644 index 0000000..1f07951 --- /dev/null +++ b/src/preload/generated-ipc-on-context.ts @@ -0,0 +1,32 @@ +import { ipcRenderer } from 'electron'; + +import { ElectronController } from '@main/modules/electron/electron.controller'; +import { UpdateController } from '@main/modules/update/update.controller'; + +type Unsubscribe = () => void + +export const generatedIpcOnContext = { + // ElectronController + onNeedUpdateLater: (callback: (data: ReturnType) => void): Unsubscribe => { + const handler = (_, data) => callback(data) + ipcRenderer.on('onNeedUpdateLater', handler) + return () => ipcRenderer.off('onNeedUpdateLater', handler) + }, + onChangeConfigValue: (callback: (data: ReturnType) => void): Unsubscribe => { + const handler = (_, data) => callback(data) + ipcRenderer.on('onChangeConfigValue', handler) + return () => ipcRenderer.off('onChangeConfigValue', handler) + }, + onChangeLanguage: (callback: (data: ReturnType) => void): Unsubscribe => { + const handler = (_, data) => callback(data) + ipcRenderer.on('onChangeLanguage', handler) + return () => ipcRenderer.off('onChangeLanguage', handler) + }, + + // UpdateController + onChangeUpdateStatus: (callback: (data: ReturnType) => void): Unsubscribe => { + const handler = (_, data) => callback(data) + ipcRenderer.on('onChangeUpdateStatus', handler) + return () => ipcRenderer.off('onChangeUpdateStatus', handler) + }, +}; diff --git a/src/preload/index.ts b/src/preload/index.ts new file mode 100644 index 0000000..6b7530d --- /dev/null +++ b/src/preload/index.ts @@ -0,0 +1,13 @@ +import { contextBridge } from 'electron' + +import { generatedIpcInvokeContext } from './generated-ipc-invoke-context' +import { generatedIpcOnContext } from './generated-ipc-on-context' + +const electronContext = { + ...generatedIpcInvokeContext, + ...generatedIpcOnContext, +} + +export type ElectronContext = typeof electronContext + +contextBridge.exposeInMainWorld('electron', electronContext) diff --git a/src/renderer/index.html b/src/renderer/index.html new file mode 100644 index 0000000..c86f53d --- /dev/null +++ b/src/renderer/index.html @@ -0,0 +1,15 @@ + + + + + + + + + electron-nestjs-react-vite-template + + +

+ + + diff --git a/src/renderer/src/assets/base.css b/src/renderer/src/assets/base.css new file mode 100644 index 0000000..5ed6406 --- /dev/null +++ b/src/renderer/src/assets/base.css @@ -0,0 +1,67 @@ +:root { + --ev-c-white: #ffffff; + --ev-c-white-soft: #f8f8f8; + --ev-c-white-mute: #f2f2f2; + + --ev-c-black: #1b1b1f; + --ev-c-black-soft: #222222; + --ev-c-black-mute: #282828; + + --ev-c-gray-1: #515c67; + --ev-c-gray-2: #414853; + --ev-c-gray-3: #32363f; + + --ev-c-text-1: rgba(255, 255, 245, 0.86); + --ev-c-text-2: rgba(235, 235, 245, 0.6); + --ev-c-text-3: rgba(235, 235, 245, 0.38); + + --ev-button-alt-border: transparent; + --ev-button-alt-text: var(--ev-c-text-1); + --ev-button-alt-bg: var(--ev-c-gray-3); + --ev-button-alt-hover-border: transparent; + --ev-button-alt-hover-text: var(--ev-c-text-1); + --ev-button-alt-hover-bg: var(--ev-c-gray-2); +} + +:root { + --color-background: var(--ev-c-black); + --color-background-soft: var(--ev-c-black-soft); + --color-background-mute: var(--ev-c-black-mute); + + --color-text: var(--ev-c-text-1); +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} + +ul { + list-style: none; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + line-height: 1.6; + font-family: + Inter, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + Roboto, + Oxygen, + Ubuntu, + Cantarell, + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + sans-serif; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/src/renderer/src/assets/electron.svg b/src/renderer/src/assets/electron.svg new file mode 100644 index 0000000..45ef09c --- /dev/null +++ b/src/renderer/src/assets/electron.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/renderer/src/assets/main.css b/src/renderer/src/assets/main.css new file mode 100644 index 0000000..0179fc4 --- /dev/null +++ b/src/renderer/src/assets/main.css @@ -0,0 +1,171 @@ +@import './base.css'; + +body { + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + background-image: url('./wavy-lines.svg'); + background-size: cover; + user-select: none; +} + +code { + font-weight: 600; + padding: 3px 5px; + border-radius: 2px; + background-color: var(--color-background-mute); + font-family: + ui-monospace, + SFMono-Regular, + SF Mono, + Menlo, + Consolas, + Liberation Mono, + monospace; + font-size: 85%; +} + +#root { + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + margin-bottom: 80px; +} + +.logo { + margin-bottom: 20px; + -webkit-user-drag: none; + height: 128px; + width: 128px; + will-change: filter; + transition: filter 300ms; +} + +.logo:hover { + filter: drop-shadow(0 0 1.2em #6988e6aa); +} + +.creator { + font-size: 14px; + line-height: 16px; + color: var(--ev-c-text-2); + font-weight: 600; + margin-bottom: 10px; +} + +.text { + font-size: 28px; + color: var(--ev-c-text-1); + font-weight: 700; + line-height: 32px; + text-align: center; + margin: 0 10px; + padding: 16px 0; +} + +.tip { + font-size: 16px; + line-height: 24px; + color: var(--ev-c-text-2); + font-weight: 600; +} + +.react { + background: -webkit-linear-gradient(315deg, #087ea4 55%, #7c93ee); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + font-weight: 700; +} + +.ts { + background: -webkit-linear-gradient(315deg, #3178c6 45%, #f0dc4e); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + font-weight: 700; +} + +.actions { + display: flex; + padding-top: 32px; + margin: -6px; + flex-wrap: wrap; + justify-content: flex-start; +} + +.action { + flex-shrink: 0; + padding: 6px; +} + +.action a { + cursor: pointer; + text-decoration: none; + display: inline-block; + border: 1px solid transparent; + text-align: center; + font-weight: 600; + white-space: nowrap; + border-radius: 20px; + padding: 0 20px; + line-height: 38px; + font-size: 14px; + border-color: var(--ev-button-alt-border); + color: var(--ev-button-alt-text); + background-color: var(--ev-button-alt-bg); +} + +.action a:hover { + border-color: var(--ev-button-alt-hover-border); + color: var(--ev-button-alt-hover-text); + background-color: var(--ev-button-alt-hover-bg); +} + +.versions { + position: absolute; + bottom: 30px; + margin: 0 auto; + padding: 15px 0; + font-family: 'Menlo', 'Lucida Console', monospace; + display: inline-flex; + overflow: hidden; + align-items: center; + border-radius: 22px; + background-color: #202127; + backdrop-filter: blur(24px); +} + +.versions li { + display: block; + float: left; + border-right: 1px solid var(--ev-c-gray-1); + padding: 0 20px; + font-size: 14px; + line-height: 14px; + opacity: 0.8; + &:last-child { + border: none; + } +} + +@media (max-width: 720px) { + .text { + font-size: 20px; + } +} + +@media (max-width: 620px) { + .versions { + display: none; + } +} + +@media (max-width: 350px) { + .tip, + .actions { + display: none; + } +} diff --git a/src/renderer/src/assets/wavy-lines.svg b/src/renderer/src/assets/wavy-lines.svg new file mode 100644 index 0000000..d08c611 --- /dev/null +++ b/src/renderer/src/assets/wavy-lines.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/renderer/src/components/FileSystemRouter/FileSystemRouter.tsx b/src/renderer/src/components/FileSystemRouter/FileSystemRouter.tsx new file mode 100644 index 0000000..2c48245 --- /dev/null +++ b/src/renderer/src/components/FileSystemRouter/FileSystemRouter.tsx @@ -0,0 +1,87 @@ +import { Fragment } from 'react' +import { RouteObject, RouterProvider, createHashRouter } from 'react-router-dom' + +type Element = () => JSX.Element + +interface Module { + default: Element +} + +export interface ErrorFallbackProps {} + +const PRESERVED = import.meta.glob('/src/pages/(_app|_error).tsx', { eager: true }) +const ROUTES = import.meta.glob('/src/pages/**/[a-z[]*.tsx', { eager: true }) + +const preservedRoutes: Partial> = Object.keys(PRESERVED).reduce( + (routes, key) => { + const path = key.replace(/\/src\/pages\/|\.tsx$/g, '') + return { ...routes, [path]: PRESERVED[key]?.default } + }, + {}, +) + +const App = preservedRoutes?.['_app'] || Fragment +const ErrorFallback = preservedRoutes?.['_error'] || Fragment + +const router = createHashRouter([ + { + path: '/', + element: , + errorElement: , + children: Object.keys(ROUTES).reduce((routes, key) => { + const module = ROUTES[key] + + const route: RouteObject = { + element: , + } + + const segments = key + .replace(/\/src\/pages|\.tsx$/g, '') + .replace(/\[\.{3}.+\]/, '*') + .replace(/\[([^\]]+)\]/g, ':$1') + .split('/') + .filter(Boolean) + + segments.reduce((parent, segment, index) => { + const path = segment.replace(/index|\./g, '') + const root = index === 0 + const leaf = index === segments.length - 1 && segments.length > 1 + const node = !root && !leaf + const insert = /^\w|\//.test(path) ? 'unshift' : 'push' + + if (root) { + const dynamic = path.startsWith(':') || path === '*' + if (dynamic) return parent + + const last = segments.length === 1 + if (last) { + routes.push({ path, ...route }) + return parent + } + } + + if (root || node) { + const current = root ? routes : parent.children + const found = current?.find(route => route.path === path) + if (found) found.children ??= [] + else current?.[insert]({ path, children: [] }) + return found || (current?.[insert === 'unshift' ? 0 : current.length - 1] as RouteObject) + } + + if (leaf) { + parent?.children?.[insert]({ path, ...route }) + } + + return parent + }, {} as RouteObject) + + return routes + }, []), + }, +]) + +const FileSystemRouter = () => { + return +} + +export default FileSystemRouter diff --git a/src/renderer/src/components/FileSystemRouter/index.ts b/src/renderer/src/components/FileSystemRouter/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/renderer/src/components/Versions.tsx b/src/renderer/src/components/Versions.tsx new file mode 100644 index 0000000..65b296a --- /dev/null +++ b/src/renderer/src/components/Versions.tsx @@ -0,0 +1,15 @@ +import useSWR from 'swr' + +function Versions(): JSX.Element { + const { data: versions } = useSWR('versions', window.electron.getVersions) + + return ( +
    +
  • Electron v{versions?.electron}
  • +
  • Chromium v{versions?.chrome}
  • +
  • Node v{versions?.node}
  • +
+ ) +} + +export default Versions diff --git a/src/renderer/src/env.d.ts b/src/renderer/src/env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/renderer/src/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/src/renderer/src/index.tsx b/src/renderer/src/index.tsx new file mode 100644 index 0000000..62e32f2 --- /dev/null +++ b/src/renderer/src/index.tsx @@ -0,0 +1,6 @@ +import FileSystemRouter from '@renderer/components/FileSystemRouter/FileSystemRouter' +import '@renderer/assets/main.css' + +import ReactDOM from 'react-dom/client' + +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render() diff --git a/src/renderer/src/pages/_app.tsx b/src/renderer/src/pages/_app.tsx new file mode 100644 index 0000000..de88cbf --- /dev/null +++ b/src/renderer/src/pages/_app.tsx @@ -0,0 +1,13 @@ +import { Link, Outlet } from 'react-router-dom' + +const App = () => { + return ( + <> + Home + About + + + ) +} + +export default App diff --git a/src/renderer/src/pages/_error.tsx b/src/renderer/src/pages/_error.tsx new file mode 100644 index 0000000..9bdaef7 --- /dev/null +++ b/src/renderer/src/pages/_error.tsx @@ -0,0 +1,27 @@ +import { isRouteErrorResponse, useRouteError } from 'react-router-dom' + +const RootErrorFallback = () => { + const error = useRouteError() + + console.log(error) + + if (isRouteErrorResponse(error)) { + if (error.status === 404) { + return ( +
+

Page not found

+

Sorry, we couldn't find the page you were looking for

+
+ ) + } + } + + return ( +
+

Something went wrong

+

Try refreshing the page

+
+ ) +} + +export default RootErrorFallback diff --git a/src/renderer/src/pages/index.tsx b/src/renderer/src/pages/index.tsx new file mode 100644 index 0000000..a43e7b5 --- /dev/null +++ b/src/renderer/src/pages/index.tsx @@ -0,0 +1,33 @@ +import Versions from '@renderer/components/Versions' +import electronLogo from '@renderer/assets/electron.svg' + +function HomePage(): JSX.Element { + return ( + <> + logo +
Powered by electron-vite
+
+ Build an Electron app with React +  and TypeScript +
+

+ Please try pressing F12 to open the devTool +

+ + + + ) +} + +export default HomePage diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000..dfd9a2f --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,22 @@ +{ + "files": [ + "electron-builder.json" + ], + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "sourceMap": false, + "strict": true, + "jsx": "preserve", + "esModuleInterop": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitAny": false, + "noImplicitReturns": true + } +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..771a266 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.web.json" + } + ], +} \ No newline at end of file diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..e9ecb89 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "extends": "./tsconfig.base.json", + "include": [ + "electron.vite.config.*", + "src/main/**/*", + "src/preload/**/*" + ], + "compilerOptions": { + "composite": true, + "baseUrl": ".", + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "strictPropertyInitialization": false, + "types": [ + "node", + "electron-vite/node" + ], + "paths": { + "@main/*": [ + "src/main/*" + ] + } + } +} \ No newline at end of file diff --git a/tsconfig.web.json b/tsconfig.web.json new file mode 100644 index 0000000..d12a1e0 --- /dev/null +++ b/tsconfig.web.json @@ -0,0 +1,34 @@ +{ + "extends": "./tsconfig.base.json", + "include": [ + "src/renderer/src/env.d.ts", + "src/renderer/src/**/*", + "src/renderer/src/**/*.tsx", + "src/main/**/*" + ], + "compilerOptions": { + "composite": true, + "baseUrl": ".", + "jsx": "react-jsx", + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "strictPropertyInitialization": false, + "lib": [ + "ESNext", + "DOM", + "DOM.Iterable" + ], + "types": [ + "vite/client", + "./src/preload/electron" + ], + "paths": { + "@renderer/*": [ + "src/renderer/src/*" + ], + "@main/*": [ + "src/main/*" + ] + } + } +} \ No newline at end of file